@fluxscape/react-runtime 1.0.7 → 1.0.9

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.
@@ -1,4 +1,4 @@
1
- (function(React,ReactDOM){"use strict";function _interopNamespaceDefault(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}function _mergeNamespaces(e,t){for(var n=0;n<t.length;n++){const o=t[n];if(typeof o!="string"&&!Array.isArray(o)){for(const r in o)if(r!=="default"&&!(r in e)){const s=Object.getOwnPropertyDescriptor(o,r);s&&Object.defineProperty(e,r,s.get?s:{enumerable:!0,get:()=>o[r]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}const React__namespace=_interopNamespaceDefault(React);class CloudFile{constructor({name:t,url:n}){this.name=t,this.url=n}getUrl(){return this.url}getName(){return this.name}toString(){return this.url}}var R=typeof Reflect=="object"?Reflect:null,ReflectApply=R&&typeof R.apply=="function"?R.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)},ReflectOwnKeys;R&&typeof R.ownKeys=="function"?ReflectOwnKeys=R.ownKeys:Object.getOwnPropertySymbols?ReflectOwnKeys=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:ReflectOwnKeys=function(e){return Object.getOwnPropertyNames(e)};function ProcessEmitWarning(e){console&&console.warn&&console.warn(e)}var NumberIsNaN=Number.isNaN||function(e){return e!==e};function EventEmitter$2(){EventEmitter$2.init.call(this)}EventEmitter$2.EventEmitter=EventEmitter$2,EventEmitter$2.prototype._events=void 0,EventEmitter$2.prototype._eventsCount=0,EventEmitter$2.prototype._maxListeners=void 0;var defaultMaxListeners=10;function checkListener(e){if(typeof e!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}Object.defineProperty(EventEmitter$2,"defaultMaxListeners",{enumerable:!0,get(){return defaultMaxListeners},set(e){if(typeof e!="number"||e<0||NumberIsNaN(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");defaultMaxListeners=e}}),EventEmitter$2.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},EventEmitter$2.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||NumberIsNaN(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function _getMaxListeners(e){return e._maxListeners===void 0?EventEmitter$2.defaultMaxListeners:e._maxListeners}EventEmitter$2.prototype.getMaxListeners=function(){return _getMaxListeners(this)},EventEmitter$2.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o=e==="error",r=this._events;if(r!==void 0)o=o&&r.error===void 0;else if(!o)return!1;if(o){var s;if(t.length>0&&(s=t[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var l=r[e];if(l===void 0)return!1;if(typeof l=="function")ReflectApply(l,this,t);else for(var u=l.length,d=arrayClone(l,u),n=0;n<u;++n)ReflectApply(d[n],this,t);return!0};function _addListener(e,t,n,o){var r,s,a;if(checkListener(n),s=e._events,s===void 0?(s=e._events=Object.create(null),e._eventsCount=0):(s.newListener!==void 0&&(e.emit("newListener",t,n.listener?n.listener:n),s=e._events),a=s[t]),a===void 0)a=s[t]=n,++e._eventsCount;else if(typeof a=="function"?a=s[t]=o?[n,a]:[a,n]:o?a.unshift(n):a.push(n),r=_getMaxListeners(e),r>0&&a.length>r&&!a.warned){a.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=a.length,ProcessEmitWarning(l)}return e}EventEmitter$2.prototype.addListener=function(e,t){return _addListener(this,e,t,!1)},EventEmitter$2.prototype.on=EventEmitter$2.prototype.addListener,EventEmitter$2.prototype.prependListener=function(e,t){return _addListener(this,e,t,!0)};function onceWrapper(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function _onceWrap(e,t,n){var o={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=onceWrapper.bind(o);return r.listener=n,o.wrapFn=r,r}EventEmitter$2.prototype.once=function(e,t){return checkListener(t),this.on(e,_onceWrap(this,e,t)),this},EventEmitter$2.prototype.prependOnceListener=function(e,t){return checkListener(t),this.prependListener(e,_onceWrap(this,e,t)),this},EventEmitter$2.prototype.removeListener=function(e,t){var n,o,r,s,a;if(checkListener(t),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===t||n.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||t));else if(typeof n!="function"){for(r=-1,s=n.length-1;s>=0;s--)if(n[s]===t||n[s].listener===t){a=n[s].listener,r=s;break}if(r<0)return this;r===0?n.shift():spliceOne(n,r),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this},EventEmitter$2.prototype.off=EventEmitter$2.prototype.removeListener,EventEmitter$2.prototype.removeAllListeners=function(e){var t,n,o;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var r=Object.keys(n),s;for(o=0;o<r.length;++o)s=r[o],s!=="removeListener"&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=n[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(o=t.length-1;o>=0;o--)this.removeListener(e,t[o]);return this};function _listeners(e,t,n){var o=e._events;if(o===void 0)return[];var r=o[t];return r===void 0?[]:typeof r=="function"?n?[r.listener||r]:[r]:n?unwrapListeners(r):arrayClone(r,r.length)}EventEmitter$2.prototype.listeners=function(e){return _listeners(this,e,!0)},EventEmitter$2.prototype.rawListeners=function(e){return _listeners(this,e,!1)},EventEmitter$2.listenerCount=function(e,t){return typeof e.listenerCount=="function"?e.listenerCount(t):listenerCount.call(e,t)},EventEmitter$2.prototype.listenerCount=listenerCount;function listenerCount(e){var t=this._events;if(t!==void 0){var n=t[e];if(typeof n=="function")return 1;if(n!==void 0)return n.length}return 0}EventEmitter$2.prototype.eventNames=function(){return this._eventsCount>0?ReflectOwnKeys(this._events):[]};function arrayClone(e,t){for(var n=new Array(t),o=0;o<t;++o)n[o]=e[o];return n}function spliceOne(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}function unwrapListeners(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}function NodeRegister(e){this._constructors={},this.context=e}NodeRegister.prototype.register=function(e){var t=e.metadata.name;this._constructors[t]=e},NodeRegister.prototype.createNode=function(e,t,n){if(this._constructors.hasOwnProperty(e)===!1)throw new Error("Unknown node type with name "+e);return this._constructors[e](this.context,t,n)},NodeRegister.prototype.getNodeMetadata=function(e){if(this._constructors.hasOwnProperty(e)===!1)throw new Error("Unknown node type with name "+e);return this._constructors[e].metadata},NodeRegister.prototype.hasNode=function(e){return this._constructors.hasOwnProperty(e)},NodeRegister.prototype.getInputType=function(e,t){const n=this.getNodeMetadata(e);return n.inputs[t]&&n.inputs[t].type};function Timer$2(e,t){this.duration=t.duration||0,this._isRunning=!1,this._hasCalledOnStart=!1,this.scheduler=e,this.repeatCount=1,this.delay=0;for(var n in t)this[n]=t[n]}Timer$2.prototype.start=function(){return this._isRunning&&this.stop(),this.scheduler.scheduleTimer(this),this},Timer$2.prototype.stop=function(){this.scheduler.stopTimer(this),this._hasCalledOnStart=!1,this._isRunning=!1,this._wasStopped=!0},Timer$2.prototype.isRunning=function(){return this._isRunning},Timer$2.prototype.durationLeft=function(){return this._durationLeft};function TimerScheduler(e){this.requestFrame=e,this.runningTimers=[],this.newTimers=[]}TimerScheduler.prototype.createTimer=function(e){return new Timer$2(this,e)},TimerScheduler.prototype.scheduleTimer=function(e){this.newTimers.indexOf(e)===-1&&(e.repeatCount===0&&(e.repeatCount=1e5),this.newTimers.push(e),this.requestFrame())},TimerScheduler.prototype.stopTimer=function(e){var t;e._isRunning?(t=this.runningTimers.indexOf(e),t!==-1&&this.runningTimers.splice(t,1),e.onStop&&!e._wasStopped&&e.onStop()):(t=this.newTimers.indexOf(e),t!==-1&&this.newTimers.splice(t,1))},TimerScheduler.prototype.runTimers=function(e){var t=[],n=[],o=[],r,s=this.runningTimers.length,a;for(r=0;r<s;++r)o[r]=this.runningTimers[r];for(r=0;r<s;++r)if(a=o[r],a&&e>=a._start){a._hasCalledOnStart===!1&&a.onStart&&(a.onStart(),a._hasCalledOnStart=!0);var l;a.duration>0?l=(e-a._start)/(a.duration*a.repeatCount):l=1,a._durationLeft=a.duration*(1-l);var u=l*a.repeatCount-Math.floor(l*a.repeatCount);l>=1&&(u=1),a.onRunning&&a.onRunning(u),l<1&&a._isRunning?t.push(a):a._wasStopped||n.push(a)}else t.push(a);for(this.runningTimers=t,r=0;r<n.length;++r)n[r]._isRunning=!1,n[r]._hasCalledOnStart=!1,n[r].onFinish&&n[r].onFinish();if(this.newTimers.length>0){for(r=0;r<this.newTimers.length;++r)a=this.newTimers[r],a._start=e+a.delay,a._isRunning=!0,a._wasStopped=!1,this.runningTimers.push(a),a.delay===0&&(a.onStart&&(a.onStart(),a._hasCalledOnStart=!0),a.onRunning&&a.onRunning(0));this.newTimers.length=0}},TimerScheduler.prototype.hasPendingTimers=function(){return this.runningTimers.length>0||this.newTimers.length>0};class Variants{constructor({graphModel:t,getNodeScope:n}){this.getNodeScope=n,t&&(this.graphModel=t,t.on("variantUpdated",o=>this.onVariantUpdated(o)))}getVariant(t,n){if(this.graphModel)return this.graphModel.getVariant(t,n)}onVariantUpdated(t){const n=this.getNodeScope();if(!n)return;const o=n.getNodesWithTypeRecursive(t.typename).filter(r=>r.variant?r.variant.name===t.name:r.model&&r.model.variant===t.name);for(const r of o)r.setVariant(t)}}function OutputProperty(e){if(!e.owner)throw new Error("Owner must be set");this.getter=e.getter,this.connections=[],this.owner=e.owner,this.name=e.name,this.onFirstConnectionAdded=e.onFirstConnectionAdded,this.onLastConnectionRemoved=e.onLastConnectionRemoved,this._id=void 0}Object.defineProperties(OutputProperty.prototype,{value:{get(){return this.getter.call(this.owner)}},id:{get(){return this._id||(this._id=this.owner.id+this.name),this._id}},registerConnection:{value(e,t){this.connections.push({node:e,inputPortName:t}),this.connections.length===1&&this.onFirstConnectionAdded&&this.onFirstConnectionAdded.call(this.owner)}},deregisterConnection:{value(e,t){for(var n=0;n<this.connections.length;n++){var o=this.connections[n];if(o.node===e&&o.inputPortName===t){this.connections.splice(n,1);break}}this.connections.length===0&&this.onLastConnectionRemoved&&this.onLastConnectionRemoved.call(this.owner)}},flagDependeesDirty:{value(e){for(var t=0,n=this.connections.length;t<n;t++)this.connections[t].node.flagDirty()}},sendValue:{value(e){this._lastUpdateIteration!==this.owner._updatedAtIteration?(this._lastUpdateIteration=this.owner._updatedAtIteration,this.valuesSendThisIteration=0):this.valuesSendThisIteration++,this.valuesSendThisIteration>500&&(this.owner._cyclicLoop=!0);for(var t=0,n=this.connections.length;t<n;t++){var o=this.connections[t];o.node._setValueFromConnection(o.inputPortName,e)}}},hasConnections:{value(){return this.connections.length>0}}});function Node(e,t){this.id=t,this.context=e,this._dirty=!1,this._inputs={},this._inputValues={},this._outputs={},this._inputConnections={},this._outputList=[],this._isUpdating=!1,this._inputValuesQueue={},this._afterInputsHaveUpdatedCallbacks=[],this._internal={},this._signalsSentThisUpdate={},this._deleted=!1,this._deleteListeners=[],this._isFirstUpdate=!0,this._valuesFromConnections={},this.updateOnDirtyFlagging=!0}Node.prototype.getInputValue=function(e){return this._inputValues[e]},Node.prototype.registerInput=function(e,t){if(this.hasInput(e))throw new Error("Input property "+e+" already registered");if(this._inputs[e]=t,t.type&&t.type.units){const n=t.type.defaultUnit||t.type.units[0];this._inputValues[e]={value:t.default,type:n}}else t.hasOwnProperty("default")&&(this._inputValues[e]=t.default)},Node.prototype.deregisterInput=function(e){if(this.hasInput(e)===!1)throw new Error("Input property "+e+" doesn't exist");delete this._inputs[e],delete this._inputValues[e]},Node.prototype.registerInputs=function(e){for(const t in e)this.registerInput(t,e[t])},Node.prototype.getInput=function(e){if(this.hasInput(e)===!1){console.log("Node "+this.name+": Invalid input property "+e);return}return this._inputs[e]},Node.prototype.hasInput=function(e){return e in this._inputs},Node.prototype.registerInputIfNeeded=function(){},Node.prototype.setInputValue=function(name,value){const input=this.getInput(name);if(!input){console.log("node doesn't have input",name);return}const currentInputValue=this._inputValues[name];if(isNaN(value)===!1&&currentInputValue&&currentInputValue.unit){const e=Object.assign({},currentInputValue);e.value=value,value=e}if(this._inputValues[name]=value,input.type==="color"&&this.context&&this.context.styles)value=this.context.styles.resolveColor(value);else if(input.type==="array"&&typeof value=="string")try{value=eval(value),this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"invalid-array-"+name)}catch(e){value=[],console.log(e),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"invalid-array-"+name,{showGlobally:!0,message:"Invalid array<br>"+e.toString()})}input.set.call(this,value)},Node.prototype.hasOutput=function(e){return e in this._outputs},Node.prototype.registerOutput=function(e,t){if(this.hasOutput(e))throw new Error("Output property "+e+" already registered");const n=new OutputProperty({owner:this,getter:t.get||t.getter,name:e,onFirstConnectionAdded:t.onFirstConnectionAdded,onLastConnectionRemoved:t.onLastConnectionRemoved});this._outputs[e]=n,this._outputList.push(n)},Node.prototype.deregisterOutput=function(e){if(this.hasOutput(e)===!1)throw new Error("Output property "+e+" isn't registered");const t=this._outputs[e];if(t.hasConnections())throw new Error("Output property "+e+" has connections and can't be removed");delete this._outputs[e];var n=this._outputList.indexOf(t);this._outputList.splice(n,1)},Node.prototype.registerOutputs=function(e){for(var t in e)this.registerOutput(t,e[t])},Node.prototype.registerOutputIfNeeded=function(){},Node.prototype.getOutput=function(e){if(this.hasOutput(e)===!1)throw new Error("Node "+this.name+" doesn't have a port named "+e);return this._outputs[e]},Node.prototype.connectInput=function(e,t,n){if(this.hasInput(e)===!1)throw new Error("Invalid connection, input doesn't exist. Trying to connect from "+t.name+" output "+n+" to "+this.name+" input "+e);var o=t.getOutput(n);if(o.registerConnection(this,e),this._inputConnections[e]||(this._inputConnections[e]=[]),this._inputConnections[e].push(o),t._signalsSentThisUpdate[n])this._setValueFromConnection(e,!0),this._setValueFromConnection(e,!1);else{var r=o.value;r!==void 0&&(this._setValueFromConnection(e,r),this.context&&this.context.connectionSentValue(o,o.value))}this.flagDirty()},Node.prototype.removeInputConnection=function(e,t,n){if(!this._inputConnections[e])throw new Error("Node removeInputConnection: Input doesn't exist");const o=this._inputConnections[e];for(let r=0;r<o.length;r++){const s=o[r];if(s.owner.id===t&&s.name===n){o.splice(r,1),s.owner.getOutput(n).deregisterConnection(this,e);break}}o.length===0&&delete this._valuesFromConnections[e]},Node.prototype.isInputConnected=function(e){return this._inputConnections.hasOwnProperty(e)?this._inputConnections[e].some(t=>t.owner.name!=="Component Inputs"?!0:t.owner.nodeScope.componentOwner.isInputConnected(t.name)):!1},Node.prototype.update=function(){if(this._isUpdating||this._dirty===!1)return;this._updatedAtIteration!==this.context.updateIteration&&(this._updatedAtIteration=this.context.updateIteration,this._updateIteration=0,this._cyclicLoop&&(this._cyclicLoop=!1)),this._isUpdating=!0;const e=100;try{for(;this._dirty&&!this._cyclicLoop;){this._updateDependencies(),this._dirty=!1;const t=Object.keys(this._inputValuesQueue);let n=!0;for(;n&&!this._cyclicLoop;){n=!1;for(let r=0;r<t.length;r++){const s=t[r],a=this._inputValuesQueue[s];a.length>0&&(this.setInputValue(s,a.shift()),a.length>0&&(n=!0))}const o=this._afterInputsHaveUpdatedCallbacks;this._afterInputsHaveUpdatedCallbacks=[];for(let r=0;r<o.length;r++)o[r].call(this)}this._updateIteration++,this._updateIteration>=e&&(this._cyclicLoop=!0)}}catch(t){throw this._isUpdating=!1,t}this._cyclicLoop&&(this.context.scheduleNextFrame(()=>{this.context.nodeIsDirty(this)}),this.context.editorConnection&&!this._cyclicWarningSent&&this.context.isWarningTypeEnabled("cyclicLoops")&&(this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"cyclic-loop",{showGlobally:!0,message:"Cyclic loop detected"}),this._cyclicWarningSent=!0,console.log("cycle detected",{id:this.id,name:this.name,component:this.nodeScope.componentOwner.name}))),this._isFirstUpdate=!1,this._isUpdating=!1},Node.prototype._updateDependencies=function(){for(var e in this._inputConnections)for(var t=this._inputConnections[e],n=0;n<t.length;++n)t[n].owner.update()},Node.prototype.flagDirty=function(){this._dirty||(this._dirty=!0,this.updateOnDirtyFlagging&&this._performDirtyUpdate())},Node.prototype._performDirtyUpdate=function(){this.context&&this.context.nodeIsDirty(this);for(var e=0;e<this._outputList.length;++e)this._outputList[e].flagDependeesDirty()},Node.prototype.sendValue=function(e,t){if(this.hasOutput(e)===!1){console.log("Error: Node",this.name,"doesn't have a output named",e);return}if(t===void 0)return;const n=this.getOutput(e);n.sendValue(t),this.context&&this.context.connectionSentValue(n,t)},Node.prototype.flagOutputDirty=function(e){const t=this.getOutput(e);this.sendValue(e,t.value)},Node.prototype.flagAllOutputsDirty=function(){for(const e of this._outputList)this.sendValue(e.name,e.value)},Node.prototype.sendSignalOnOutput=function(e){if(this.hasOutput(e)===!1){console.log("Error: Node",this.name,"doesn't have a output named",e);return}const t=this.getOutput(e);t.sendValue(!0),t.sendValue(!1),this._signalsSentThisUpdate[e]=!0,this.scheduleAfterInputsHaveUpdated(function(){this._signalsSentThisUpdate[e]=!1}),this.context&&this.context.connectionSentSignal(t)},Node.prototype._setValueFromConnection=function(e,t){this._valuesFromConnections[e]=t,this.queueInput(e,t)},Node.prototype._hasInputBeenSetFromAConnection=function(e){return this._valuesFromConnections.hasOwnProperty(e)},Node.prototype.queueInput=function(e,t){if(this._inputValuesQueue[e]||(this._inputValuesQueue[e]=[]),this._isFirstUpdate){const n=this._inputValuesQueue[e][0];n===!0||(n instanceof Object&&n.unit&&!(t instanceof Object)&&(t={value:t,unit:n.unit}),this._inputValuesQueue[e].length=0)}this._inputValuesQueue[e].push(t),this.flagDirty()},Node.prototype.scheduleAfterInputsHaveUpdated=function(e){this._afterInputsHaveUpdatedCallbacks.push(e),this.flagDirty()},Node.prototype.setNodeModel=function(e){this.model=e,e.on("parameterUpdated",this._onNodeModelParameterUpdated,this),e.on("variantUpdated",this._onNodeModelVariantUpdated,this),e.on("inputPortRemoved",t=>{this.hasInput(t.name)&&this.deregisterInput(t.name)},this),e.on("outputPortRemoved",t=>{this.hasOutput(t.name)&&this.deregisterOutput(t.name)},this)},Node.prototype.addDeleteListener=function(e){this._deleteListeners.push(e)},Node.prototype._onNodeDeleted=function(){this.model&&(this.model.removeListenersWithRef(this),this.model=void 0),this._deleted=!0;for(const e of this._deleteListeners)e.call(this)},Node.prototype._onNodeModelParameterUpdated=function(e){if(this.registerInputIfNeeded(e.name),e.value!==void 0)if(e.state){if(!this._getVisualStates){console.log("Node has nos visual states, but got a parameter for state",e.state);return}this._getVisualStates().indexOf(e.state)!==-1&&this.queueInput(e.name,e.value)}else this.queueInput(e.name,e.value);else{let t;const n=this.variant;e.state?n&&n.stateParameters.hasOwnProperty(e.state)&&n.stateParameters[e.state].hasOwnProperty(e.name)?t=n.stateParameters[e.state][e.name]:this.model.parameters.hasOwnProperty(e.name)?t=this.model.parameters[e.name]:n&&n.parameters.hasOwnProperty(e.name)&&(t=n.parameters[e.name]):n&&n.parameters.hasOwnProperty(e.name)&&(t=n.parameters[e.name]),t===void 0&&(t=this.context.getDefaultValueForInput(this.model.type,e.name),this._resetReactVirtualDOM&&this._resetReactVirtualDOM()),this.queueInput(e.name,t)}},Node.prototype._onNodeModelVariantUpdated=function(e){this.setVariant(e)};function guid$1(){function e(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)}return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}function NodeScope(e,t){this.context=e,this.nodes={},this.componentOwner=t,this.componentInstanceChildren={}}function verifyData(e,t){t.forEach(function(n){if(!e[n])throw new Error("Missing "+n)})}NodeScope.prototype.addConnection=function(e){try{verifyData(e,["sourceId","sourcePort","targetId","targetPort"])}catch(o){throw new Error("Error in connection: "+o.message)}try{var t=this.getNodeWithId(e.sourceId),n=this.getNodeWithId(e.targetId);n.registerInputIfNeeded(e.targetPort),t.registerOutputIfNeeded(e.sourcePort),n.connectInput(e.targetPort,t,e.sourcePort)}catch(o){console.error(o.message)}},NodeScope.prototype.setNodeParameters=function(e,t){const n=this.context.variants.getVariant(t.type,t.variant);if(n)e.setVariant(n);else{const s=t.parameters;var o=Object.keys(s);if(this.context.nodeRegister.hasNode(e.name)){var r=this.context.nodeRegister.getNodeMetadata(e.name);o.sort(function(a,l){var u=r.inputs[a],d=r.inputs[l];return(d?d.inputPriority:0)-(u?u.inputPriority:0)})}o.forEach(a=>{e.registerInputIfNeeded(a),e.hasInput(a)!==!1&&e.queueInput(a,s[a])})}},NodeScope.prototype.createNodeFromModel=async function(e,t){if(e.type==="Component Children"){if(e.parent){var n=this.getNodeWithId(e.parent.id);this.componentOwner.setChildRoot(n)}return}var o;try{o=await this.createNode(e.type,e.id),o.updateOnDirtyFlagging=t!==!1,o.setNodeModel(e)}catch(r){console.error(r.message),this.context.editorConnection&&this.context.isWarningTypeEnabled("nodescope")&&this.context.editorConnection.sendWarning(this.componentOwner.name,e.id,"nodelibrary-unknown-node",{message:r.message,showGlobally:!0});return}return e.variant&&o.setVariant&&o.setVariant(e.variant),this.setNodeParameters(o,e),e.parent&&this.insertNodeInTree(o,e),o},NodeScope.prototype.insertNodeInTree=function(e,t){var n=this.getNodeWithId(t.parent.id),o=t.parent.children.indexOf(t);if(!n.addChild)throw new Error("Node "+n.id+" of type "+n.constructor.name+" can't have children");n.addChild(e,o)},NodeScope.prototype.getNodeWithId=function(e){if(this.nodes.hasOwnProperty(e)===!1)throw new Error("Unknown node id "+e);return this.nodes[e]},NodeScope.prototype.hasNodeWithId=function(e){return this.nodes.hasOwnProperty(e)},NodeScope.prototype.createPrimitiveNode=function(e,t,n){if(t||(t=guid$1()),this.nodes.hasOwnProperty(t))throw Error("duplicate id "+t);const o=this.context.nodeRegister.createNode(e,t,this);if(n)for(const r in n)o[r]=n[r];return this.nodes[t]=o,o},NodeScope.prototype.createNode=async function(e,t,n){if(t||(t=guid$1()),this.nodes.hasOwnProperty(t))throw Error("duplicate id "+t);let o;if(this.context.nodeRegister.hasNode(e)){if(o=this.context.nodeRegister.createNode(e,t,this),n)for(const r in n)o[r]=n[r]}else o=await this.context.createComponentInstanceNode(e,t,this,n),this.componentInstanceChildren[t]=o;return this.nodes[t]=o,o},NodeScope.prototype.getNodesWithIdRecursive=function(e){function t(o,r,s){o.nodes.hasOwnProperty(r)&&s.push(o.nodes[r]);var a=Object.keys(o.nodes).filter(function(l){return o.nodes[l]instanceof ComponentInstanceNode});a.forEach(function(l){t(o.nodes[l].nodeScope,r,s)})}var n=[];return t(this,e,n),n},NodeScope.prototype.getNodesWithType=function(e){var t=this,n=Object.keys(this.nodes).filter(function(o){return t.nodes[o].name===e});return n.map(function(o){return t.nodes[o]})},NodeScope.prototype.getNodesWithTypeRecursive=function(e){var t=this;function n(){o=o.concat(t.getNodesWithType(e));var r=Object.keys(t.nodes).filter(function(s){return t.nodes[s]instanceof ComponentInstanceNode});r.forEach(function(s){var a=t.nodes[s].nodeScope.getNodesWithTypeRecursive(e);o=o.concat(a)})}var o=[];return n(),o},NodeScope.prototype.getAllNodesRecursive=function(){let e=[];return(()=>{e=e.concat(Object.values(this.nodes));var t=Object.keys(this.nodes).filter(n=>this.nodes[n]instanceof ComponentInstanceNode);t.forEach(n=>{var o=this.nodes[n].nodeScope.getAllNodesRecursive();e=e.concat(o)})})(),e},NodeScope.prototype.getAllNodesWithVariantRecursive=function(e){return this.getAllNodesRecursive().filter(t=>t.variant===e)},NodeScope.prototype.onNodeModelRemoved=function(e){var t=this.getNodeWithId(e.id);if(e.parent){var n=this.getNodeWithId(e.parent.id);n.removeChild(t)}t._onNodeDeleted(),delete this.nodes[t.id],delete this.componentInstanceChildren[t.id]},NodeScope.prototype.removeConnection=function(e){var t=this.getNodeWithId(e.targetId);t.removeInputConnection(e.targetPort,e.sourceId,e.sourcePort)},NodeScope.prototype.setComponentModel=async function(e){this.componentModel=e;const t=[];for(const o of e.getAllNodes()){const r=await this.createNodeFromModel(o,!1);r&&t.push(r)}e.getAllConnections().forEach(o=>this.addConnection(o)),t.forEach(o=>o.updateOnDirtyFlagging=!0),t.forEach(o=>{o._dirty&&o._performDirtyUpdate()}),e.on("connectionAdded",o=>this.addConnection(o),this),e.on("connectionRemoved",this.removeConnection,this),e.on("nodeAdded",this.createNodeFromModel,this);var n=this;e.on("nodeParentWillBeRemoved",function(o){if(o.type==="Component Children"){o.parent&&this.componentOwner.setChildRoot(null);return}const r=n.getNodeWithId(o.id);r.parent&&r.parent.removeChild(r)},this),e.on("nodeParentUpdated",function(o){if(o.type==="Component Children"){var r=this.getNodeWithId(o.parent.id);this.componentOwner.setChildRoot(r)}else{var s=n.getNodeWithId(o.id);n.insertNodeInTree(s,o)}},this),e.on("nodeRemoved",function(o){o.type!=="Component Children"&&n.onNodeModelRemoved(o)},this);for(const o in this.nodes){const r=this.nodes[o];r.nodeScopeDidInitialize&&r.nodeScopeDidInitialize()}},NodeScope.prototype.reset=function(){this.componentModel&&(this.componentModel.removeListenersWithRef(this),this.componentModel=void 0),Object.keys(this.nodes).forEach(e=>{this.nodes.hasOwnProperty(e)&&this.deleteNode(this.nodes[e])})},NodeScope.prototype.deleteNode=function(e){if(this.nodes.hasOwnProperty(e.id)===!1){console.error("Node doesn't belong to this scope",e.id,e.name);return}if(e.parent&&e.parent.removeChild(e),e.getChildren&&e.getChildren().forEach(t=>{e.removeChild(t),(t.parentNodeScope||t.nodeScope).deleteNode(t)}),this.componentModel){const t=this.componentModel.getConnectionsFrom(e.id),n=this.componentModel.getConnectionsTo(e.id);t.concat(n).forEach(o=>{this.nodes.hasOwnProperty(o.targetId)&&this.nodes.hasOwnProperty(o.sourceId)&&this.removeConnection(o)})}e._onNodeDeleted(),delete this.nodes[e.id],delete this.componentInstanceChildren[e.id]},NodeScope.prototype.sendEventFromThisScope=function(e,t,n,o,r){if(o)for(var s=this.getNodesWithType("Event Receiver").filter(function(g){return g.getChannelName()===e}),a=0;a<s.length;a++){var l=s[a].handleEvent(t);if(l)return!0}if(n==="parent"&&this.componentOwner.parentNodeScope){const g=this.componentOwner.parent?this.componentOwner.parent.nodeScope:this.componentOwner.parentNodeScope;if(!g)return;g.sendEventFromThisScope(e,t,n,!0)}else if(n==="children"){var u=this.nodes;for(var d in u){var p=u[d].children;p&&p.forEach(g=>{if(g.name&&this.context.hasComponentModelWithName(g.name)){var b=g.nodeScope.sendEventFromThisScope(e,t,n,!0);if(b)return!0}})}}else if(n==="siblings"){let g;if(this.componentOwner.parent?g=this.componentOwner.parent.nodeScope:g=this.componentOwner.parentNodeScope,!g)return;var u=g.nodes;for(var d in u){var p=u[d].children;if(p){var f=p.filter(A=>A.name&&this.context.hasComponentModelWithName(A.name)&&A.nodeScope!==this);f.forEach(A=>{var v=A.nodeScope.sendEventFromThisScope(e,t,null,!0);if(v)return!0})}}}return!1};let componentIdCounter=0;function ComponentInstanceNode(e,t,n){Node.call(this,e,t),this.nodeScope=new NodeScope(e,this),this.parentNodeScope=n,this._internal.childRoot=null,this._internal.componentOutputValues={},this._internal.componentOutputs=[],this._internal.componentInputs=[],this._internal.inputValues={},this._internal.roots=[],this._internal.instanceId="__$ndl_componentInstaceId"+componentIdCounter,this.nodeScope.modelScope=n?n.modelScope:void 0,componentIdCounter++}ComponentInstanceNode.prototype=Object.create(Node.prototype,{setComponentModel:{value:async function(e){this.componentModel=e;var t=this;await this.nodeScope.setComponentModel(e),this._internal.componentInputs=this.nodeScope.getNodesWithType("Component Inputs"),this._internal.componentOutputs=this.nodeScope.getNodesWithType("Component Outputs"),Object.values(e.getInputPorts()).forEach(this.registerComponentInputPort.bind(this)),Object.values(e.getOutputPorts()).forEach(this.registerComponentOutputPort.bind(this));const n=e.roots||[];this._internal.roots=n.map(o=>this.nodeScope.getNodeWithId(o)),e.on("rootAdded",o=>{this._internal.roots.push(this.nodeScope.getNodeWithId(o)),this.forceUpdate()},this),e.on("rootRemoved",function(o){const r=this._internal.roots.findIndex(s=>s.id===o);r!==-1&&this._internal.roots.splice(r,1),this.forceUpdate()},this),e.on("inputPortAdded",this.registerComponentInputPort.bind(this),this),e.on("outputPortAdded",this.registerComponentOutputPort.bind(this),this),e.on("inputPortRemoved",function(o){t.hasInput(o.name)&&t.deregisterInput(o.name)},this),e.on("outputPortRemoved",function(o){this.hasOutput(o.name)&&t.deregisterOutput(o.name)},this),e.on("nodeAdded",function(o){o.type==="Component Inputs"?t._internal.componentInputs.push(t.nodeScope.getNodeWithId(o.id)):o.type==="Component Outputs"&&t._internal.componentOutputs.push(t.nodeScope.getNodeWithId(o.id))},this),e.on("nodeRemoved",function(o){function r(s,a){return s.filter(l=>l.id!==a)}o.type==="Component Inputs"?t._internal.componentInputs=r(t._internal.componentInputs,o.id):o.type==="Component Outputs"&&(t._internal.componentOutputs=r(t._internal.componentOutputs,o.id))},this),e.on("renamed",function(o){t.name=o.newName},this)}},_onNodeDeleted:{value(){this.componentModel&&(this.componentModel.removeListenersWithRef(this),this.componentModel=void 0),this.nodeScope.reset(),Node.prototype._onNodeDeleted.call(this)}},registerComponentInputPort:{value(e){this.registerInput(e.name,{set(t){this._internal.inputValues[e.name]=t,this._internal.componentInputs.forEach(function(n){n.registerOutputIfNeeded(e.name),n.flagOutputDirty(e.name)})}})}},registerComponentOutputPort:{value(e){this.registerOutput(e.name,{getter(){return this._internal.componentOutputValues[e.name]}})}},setOutputFromComponentOutput:{value(e,t){this.hasOutput(e)!==!1&&(this._internal.creatorCallbacks&&this._internal.creatorCallbacks.onOutputChanged&&this._internal.creatorCallbacks.onOutputChanged(e,t,this._internal.componentOutputValues[e]),this._internal.componentOutputValues[e]=t,this.flagOutputDirty(e))}},setChildRoot:{value(e){const t=this._internal.childRoot,n=e;if(this._internal.childRoot=n,this.model&&this.model.children){const o=this.parentNodeScope,r=this.model.children.filter(s=>s.type!=="Component Children").map(s=>o.getNodeWithId(s.id));if(t)for(let s=0;s<r.length;s++)t.isChild(r[s])&&t.removeChild(r[s]);if(n)for(let s=0;s<r.length;s++){const a=r[s],l=a.model.parent.children.indexOf(a.model);this.addChild(a,l)}}}},getChildRootIndex:{value(){if(!this._internal.childRoot||!this._internal.childRoot.model||!this._internal.childRoot.model.children)return 0;for(var e=this._internal.childRoot.model.children,t=0;t<e.length;t++)if(e[t].type==="Component Children")return t;return 0}},getChildRoot:{value(){return this._internal.childRoot?this._internal.childRoot:null}},getRoots:{value(){return this._internal.roots}},triggerDidMount:{value(){this._internal.roots.forEach(e=>{e.triggerDidMount&&e.triggerDidMount()})}},render:{value(){return this._internal.roots.length===0?null:this._internal.roots[0].render()}},setChildIndex:{value(e){this.getRoots().forEach(t=>t.setChildIndex&&t.setChildIndex(e))}},addChild:{value(e,t){this.getChildRoot().addChild(e,t+this.getChildRootIndex())}},removeChild:{value(e){this.getChildRoot().removeChild(e)}},getChildren:{value(e){const t=this.getChildRoot();return t?t.getChildren():[]}},isChild:{value(e){return this.getChildRoot()?this.getChildRoot().isChild(e):!1}},contains:{value(e){return this.getRoots().some(t=>t.contains&&t.contains(e))}},_performDirtyUpdate:{value(){Node.prototype._performDirtyUpdate.call(this);for(var e=this._internal.componentInputs,t=0,n=e.length;t<n;t++)e[t].flagDirty();this._internal.componentOutputs.forEach(function(o){o.flagDirty()})}},getRef:{value(){const e=this._internal.roots[0];return e?e.getRef():void 0}},update:{value(){Node.prototype.update.call(this),this._internal.componentOutputs.forEach(function(e){e.update()})}},forceUpdate:{value(){this.parent&&(this.parent.cachedChildren=void 0,this.parent.forceUpdate())}},getInstanceId:{value(){return this._internal.instanceId}}}),ComponentInstanceNode.prototype.constructor=ComponentInstanceNode;function NodeContext(e){e=e||{},e.runningInEditor=e.hasOwnProperty("runningInEditor")?e.runningInEditor:!1,this._dirtyNodes=[],this.callbacksAfterUpdate=[],this.graphModel=e.graphModel,this.platform=e.platform,this.eventEmitter=new EventEmitter$2,this.eventEmitter.setMaxListeners(1e6),this.eventSenderEmitter=new EventEmitter$2,this.eventSenderEmitter.setMaxListeners(1e6),this.globalValues={},this.globalsEventEmitter=new EventEmitter$2,this.globalsEventEmitter.setMaxListeners(1e6),this.runningInEditor=e.runningInEditor,this.currentFrameTime=0,this.frameNumber=0,this.updateIteration=0,this.nodeRegister=new NodeRegister(this),this.timerScheduler=new TimerScheduler(this.scheduleUpdate.bind(this)),this.componentModels={},this.debugInspectorsEnabled=!1,this.connectionsToPulse={},this.connectionsToPulseChanged=!1,this.debugInspectors={},this.connectionPulsingCallbackScheduled=!1,this.editorConnection=e.editorConnection,this.rootComponent=void 0,this._outputHistory={},this._signalHistory={},this.warningTypes={},this.bundleFetchesInFlight=new Map,this.variants=new Variants({graphModel:this.graphModel,getNodeScope:()=>this.rootComponent?this.rootComponent.nodeScope:null}),this.editorConnection&&(this.editorConnection.on("debugInspectorsUpdated",t=>{this.onDebugInspectorsUpdated(t)}),this.editorConnection.on("getConnectionValue",({clientId:t,connectionId:n})=>{if(this.editorConnection.clientId!==t)return;const o=this._outputHistory[n];this.editorConnection.sendConnectionValue(n,o?o.value:void 0)}))}NodeContext.prototype.setRootComponent=function(e){this.rootComponent=e},NodeContext.prototype.getCurrentTime=function(){return this.platform.getCurrentTime()},NodeContext.prototype.onDebugInspectorsUpdated=function(e){this.debugInspectorsEnabled&&(e=e.map(t=>{if(t.type==="connection"){const n=t.connection;t.id=n.fromId+n.fromProperty}else t.type==="node"&&(t.id=t.nodeId);return t}),this.debugInspectors={},e.forEach(t=>this.debugInspectors[t.id]=t),this.sendDebugInspectorValues())},NodeContext.prototype.updateDirtyNodes=function(){var e,t,n=!0,o=0;for(this.updateIteration++,this.isUpdating=!0;n&&o<10;){var r=this._dirtyNodes;for(this._dirtyNodes=[],e=0,t=r.length;e<t;++e)try{r[e]._deleted||r[e].update()}catch(a){console.error(a,a.stack)}var s=this.callbacksAfterUpdate;for(this.callbacksAfterUpdate=[],e=0,t=s.length;e<t;e++)try{s[e]()}catch(a){console.error(a)}n=this.callbacksAfterUpdate.length>0||this._dirtyNodes.length>0,o++}this.isUpdating=!1},NodeContext.prototype.update=function(){this.frameNumber++,this.updateDirtyNodes(),this.timerScheduler.hasPendingTimers()&&(this.scheduleUpdate(),this.timerScheduler.runTimers(this.currentFrameTime)),this.debugInspectorsEnabled&&this.sendDebugInspectorValues()},NodeContext.prototype.reset=function(){this.eventEmitter.emit("applicationDataReloaded");var e=this.eventEmitter;["frameStart","frameEnd"].forEach(function(t){e.removeAllListeners(t)}),this.globalValues={},this._dirtyNodes.length=0,this.callbacksAfterUpdate.length=0,this.timerScheduler.runningTimers=[],this.timerScheduler.newTimers=[],this.rootComponent=void 0,this.clearDebugInspectors()},NodeContext.prototype.nodeIsDirty=function(e){this._dirtyNodes.push(e),this.scheduleUpdate()},NodeContext.prototype.scheduleUpdate=function(){this.eventEmitter.emit("scheduleUpdate")},NodeContext.prototype.scheduleAfterUpdate=function(e){this.callbacksAfterUpdate.push(e),this.scheduleUpdate()},NodeContext.prototype.scheduleNextFrame=function(e){this.eventEmitter.once("frameStart",e),this.scheduleUpdate()},NodeContext.prototype.setGlobalValue=function(e,t){this.globalValues[e]=t,this.globalsEventEmitter.emit(e)},NodeContext.prototype.getGlobalValue=function(e){return this.globalValues[e]},NodeContext.prototype.registerComponentModel=function(e){if(this.componentModels.hasOwnProperty(e.name))throw new Error("Duplicate component name "+e.name);this.componentModels[e.name]=e;var t=this;e.on("renamed",function(n){delete t.componentModels[n.oldName],t.componentModels[n.newName]=e},this)},NodeContext.prototype.deregisterComponentModel=function(e){this.componentModels.hasOwnProperty(e.name)&&(this.componentModels[e.name].removeListenersWithRef(this),delete this.componentModels[e.name])},NodeContext.prototype.fetchComponentBundle=async function(e){const t=async n=>{let o=`${Noodl.Env.BaseUrl||"/"}noodl_bundles/${n}.json`;const r=await fetch(o);if(r.status===404)throw new Error("Component not found "+n);const s=await r.json();for(const a of s)this.graphModel.hasComponentWithName(a.name)===!1&&await this.graphModel.importComponentFromEditorData(a)};if(this.bundleFetchesInFlight.has(e))await this.bundleFetchesInFlight.get(e);else{const n=t(e);this.bundleFetchesInFlight.set(e,n),await n}},NodeContext.prototype.getComponentModel=async function(e){if(!e)throw new Error("Component instance must have a name");if(this.componentModels.hasOwnProperty(e)===!1){const t=this.graphModel.getBundleContainingComponent(e);if(!t)throw new Error("Can't find component model for "+e);for(const n of this.graphModel.getBundleDependencies(t))this.fetchComponentBundle(n);await this.fetchComponentBundle(t)}return this.componentModels[e]},NodeContext.prototype.hasComponentModelWithName=function(e){return this.componentModels.hasOwnProperty(e)},NodeContext.prototype.createComponentInstanceNode=async function(e,t,n,o){var r=new ComponentInstanceNode(this,t,n);r.name=e;for(const a in o)r[a]=o[a];const s=await this.getComponentModel(e);return await r.setComponentModel(s),r},NodeContext.prototype._formatConnectionValue=function(e){if(typeof e=="object"&&e&&e.constructor&&e.constructor.name==="Node")e="<Node> "+e.name;else if(typeof e=="object"&&typeof window<"u"&&e instanceof HTMLElement)e=`DOM Node <${e.tagName}>`;else{if(typeof e=="string"&&!e.startsWith("[Signal]"))return'"'+e+'"';if(Number.isNaN(e))return"NaN"}return e},NodeContext.prototype.connectionSentValue=function(e,t){if(!this.editorConnection||!this.editorConnection.isConnected()||!this.debugInspectorsEnabled)return;const n=this.getCurrentTime();if(this._outputHistory[e.id]={value:t,timestamp:n},this.connectionsToPulse.hasOwnProperty(e.id)){this.connectionsToPulse[e.id].timestamp=n;return}const o=[];e.connections.forEach(r=>{o.push(e.owner.id+e.name+r.node.id+r.inputPortName)}),this.connectionsToPulse[e.id]={timestamp:n,connections:o},this.connectionsToPulseChanged=!0,this.connectionPulsingCallbackScheduled===!1&&(this.connectionPulsingCallbackScheduled=!0,setTimeout(this.clearOldConnectionPulsing.bind(this),100))},NodeContext.prototype.connectionSentSignal=function(e){const t=e.id;this._signalHistory.hasOwnProperty(t)||(this._signalHistory[t]={count:0}),this._signalHistory[t].count++,this.connectionSentValue(e,"[Signal] Trigger count "+this._signalHistory[t].count)},NodeContext.prototype.clearDebugInspectors=function(){this.debugInspectors={},this.connectionsToPulse={},this.editorConnection.sendPulsingConnections(this.connectionsToPulse)},NodeContext.prototype.clearOldConnectionPulsing=function(){this.connectionPulsingCallbackScheduled=!1;var e=this.getCurrentTime(),t=this,n=Object.keys(this.connectionsToPulse);n.forEach(function(o){var r=t.connectionsToPulse[o];e-r.timestamp>100&&(t.connectionsToPulseChanged=!0,delete t.connectionsToPulse[o])}),this.connectionsToPulseChanged&&(this.connectionsToPulseChanged=!1,this.editorConnection.sendPulsingConnections(this.connectionsToPulse)),Object.keys(this.connectionsToPulse).length>0&&(this.connectionPulsingCallbackScheduled=!0,setTimeout(this.clearOldConnectionPulsing.bind(this),500))},NodeContext.prototype._getDebugInspectorValueForNode=function(e){if(!this.rootComponent)return;const t=this.rootComponent.nodeScope.getNodesWithIdRecursive(e),n=t[t.length-1];if(n&&n.getInspectInfo){const o=n.getInspectInfo();if(o!==void 0)return{type:"node",id:e,value:o}}},NodeContext.prototype.sendDebugInspectorValues=function(){const e=[];for(const t in this.debugInspectors){const n=this.debugInspectors[t];if(n.type==="connection"&&this._outputHistory.hasOwnProperty(t)){const o=this._outputHistory[t].value;e.push({type:"connection",id:t,value:this._formatConnectionValue(o)})}else if(n.type==="node"){const o=this._getDebugInspectorValueForNode(t);o&&e.push(o)}}e.length>0&&this.editorConnection.sendDebugInspectorValues(e),this.connectionsToPulseChanged&&(this.connectionsToPulseChanged=!1,this.editorConnection.sendPulsingConnections(this.connectionsToPulse))},NodeContext.prototype.setDebugInspectorsEnabled=function(e){this.debugInspectorsEnabled=e,this.editorConnection.debugInspectorsEnabled=e,e&&this.sendDebugInspectorValues()},NodeContext.prototype.sendGlobalEventFromEventSender=function(e,t){this.eventSenderEmitter.emit(e,t)},NodeContext.prototype.setPopupCallbacks=function({onShow:e,onClose:t}){this.onShowPopup=e,this.onClosePopup=t},NodeContext.prototype.showPopup=async function(e,t,n){if(!this.onShowPopup)return;const o=this.rootComponent.nodeScope,r=await o.createNode(e);for(const d in t)r.setInputValue(d,t[d]);r.popupParent=n?.senderNode||null;const s=o.createPrimitiveNode("Group");s.setInputValue("flexDirection","node"),s.setInputValue("cssClassName","noodl-popup");const a=this.graphModel.getSettings().bodyScroll;s.setInputValue("position",a?"fixed":"absolute");var l=r.nodeScope.getNodesWithType("NavigationClosePopup");if(l&&l.length>0)for(var u=0;u<l.length;u++)l[u]._setCloseCallback((d,p)=>{this.scheduleNextFrame(()=>{o.hasNodeWithId(s.id)&&(this.onClosePopup(s),o.deleteNode(s),n&&n.onClosePopup&&n.onClosePopup(d,p))})});this.onShowPopup(s),requestAnimationFrame(()=>{s.addChild(r)})},NodeContext.prototype.setWarningTypes=function(e){Object.assign(this.warningTypes,e)},NodeContext.prototype.isWarningTypeEnabled=function(e){return this.warningTypes.hasOwnProperty(e)?!!this.warningTypes[e]:!0},NodeContext.prototype.getDefaultValueForInput=function(e,t){if(this.nodeRegister.hasNode(e)===!1)return;const n=this.nodeRegister.getNodeMetadata(e).inputs[t];if(n)return n.type.defaultUnit?{value:n.default,unit:n.type.defaultUnit}:n.default};function EventSender$2(){this.listeners={},this.listenersWithRefs={}}EventSender$2.prototype.on=function(e,t,n){n?(this.listenersWithRefs.hasOwnProperty(e)||(this.listenersWithRefs[e]=new Map),this.listenersWithRefs[e].get(n)||this.listenersWithRefs[e].set(n,[]),this.listenersWithRefs[e].get(n).push(t)):(this.listeners.hasOwnProperty(e)||(this.listeners[e]=[]),this.listeners[e].push(t))},EventSender$2.prototype.removeListenersWithRef=function(e){Object.keys(this.listenersWithRefs).forEach(t=>{const n=this.listenersWithRefs[t];n.has(e)&&n.delete(e)})},EventSender$2.prototype.removeAllListeners=function(e){e?(delete this.listeners[e],delete this.listenersWithRefs[e]):(this.listeners={},this.listenersWithRefs={})},EventSender$2.prototype.emit=async function(e,t){const n=this.listeners[e];if(n)for(let r=0;r<n.length;r++){const s=n[r];await Promise.resolve(s.call(null,t))}const o=this.listenersWithRefs[e];if(o)for(const[r,s]of o)for(const a of s)await Promise.resolve(a.call(r,t))};function Services(){}Services.events=new EventEmitter$2;class ActiveWarnings{constructor(){this.currentWarnings=new Map}setWarning(t,n,o){if(this.currentWarnings.has(t)){const r=this.currentWarnings.get(t);return r[n]===o?!1:(r[n]=o,!0)}else return this.currentWarnings.set(t,{[n]:o}),!0}clearWarning(t,n){const o=this.currentWarnings.get(t);return!o||!o[n]?!1:(delete o[n],Object.keys(o).length===0&&delete this.currentWarnings.delete(t),!0)}clearWarnings(t){return this.currentWarnings.has(t)===!1?!1:(this.currentWarnings.delete(t),!0)}}function EditorConnection(e){var t=e||{};EventSender$2.call(this),this.runtimeType=t.runtimeType,this.platform=t.platform,this.ws=t.platform&&t.platform.webSocketClass||(typeof WebSocket<"u"?WebSocket:void 0),this.wsOptions=t.platform&&t.platform.webSocketOptions||void 0,this.reconnectOnClose=!0,this.enableDebugger=!1,this.lastSendTimestamp=0,this.sendQueue=[],this.sendTimer=void 0,this.activeWarnings=new ActiveWarnings}EditorConnection.prototype=Object.create(EventSender$2.prototype),EditorConnection.prototype.constructor=EditorConnection,EditorConnection.prototype.isRunningLocally=function(){var e=this.platform.isRunningLocally&&this.platform.isRunningLocally()||typeof document<"u"&&(document.location.hostname==="localhost"||document.location.hostname==="127.0.0.1");return e},EditorConnection.prototype.connect=function(e){this.socket=this.wsOptions?new this.ws(e,this.wsOptions):new this.ws(e);var t=this;this.socket.addEventListener("open",function(){t.clientId=guid$1(),t.socket.send(JSON.stringify({cmd:"register",type:"viewer",clientId:t.clientId})),t.emit("connected")}),this.socket.addEventListener("close",function(n){t.reconnectOnClose&&t.reconnect(e),console.log("Editor connection closed",n.code,n.reason),t.emit("connectionClosed")}),this.socket.addEventListener("error",function(n){console.log("Editor connection error, trying to reconnect")}),this.socket.addEventListener("message",async n=>{const o=typeof n.data=="string"?n.data:await n.data.text(),r=JSON.parse(o);let s;r.cmd==="registered"||(r.cmd==="export"?(s=JSON.parse(r.content),r.type==="full"&&r.target===this.clientId&&t.emit("exportDataFull",s)):r.cmd==="hoverStart"?t.emit("hoverStart",r.content.id):r.cmd==="hoverEnd"?t.emit("hoverEnd",r.content.id):r.cmd==="refresh"?t.emit("reload"):r.cmd==="debugInspectors"?this.debugInspectorsEnabled&&(s=JSON.parse(r.content),t.emit("debugInspectorsUpdated",s.inspectors)):r.cmd==="debuggingEnabled"?t.isRunningLocally()&&(s=JSON.parse(r.content),t.emit("debuggingEnabledChanged",s.enabled)):r.cmd==="getConnectionValue"?t.isRunningLocally()&&(s=JSON.parse(r.content),await t.emit("getConnectionValue",{clientId:s.clientId,connectionId:s.connectionId})):r.cmd==="modelUpdate"?await t.emit("modelUpdate",r.content):r.cmd==="publish"?Services.pubsub.routeMessage(r):r.cmd==="noodlModules"?t.emit("noodlModules",JSON.parse(r.content)):r.cmd==="mqttUpdate"?t.emit("mqttUpdate",r.content):r.cmd==="activeComponentChanged"?t.emit("activeComponentChanged",r.component):console.log("Command not implemented",r))})},EditorConnection.prototype.reconnect=function(e){var t=this;setTimeout(function(){t.connect(e)},2e3)},EditorConnection.prototype.isConnected=function(){return this.socket!==void 0&&this.socket.readyState===this.ws.OPEN};const getCircularReplacer=()=>{const e=new WeakSet;return(t,n)=>{if(typeof n=="object"&&n!==null){if(e.has(n))return"[Circular]";e.add(n)}return n}};EditorConnection.prototype.send=function(e){const t=this.platform.getCurrentTime(),n=t-this.lastSendTimestamp,o=r=>{try{this.socket.send(JSON.stringify(r))}catch(s){if(s.message&&s.message.startsWith("Converting circular"))try{this.socket.send(JSON.stringify(r,getCircularReplacer()))}catch(a){console.log("failed to send message to editor",r,a)}else console.log("failed to send message to editor",r,s)}};n<200||this.sendTimer||!this.isConnected()?(this.sendQueue.push(e),this.sendTimer||(this.sendTimer=setTimeout(()=>{if(this.isConnected()===!1)return;const r=50;for(let s=0;s<this.sendQueue.length;s+=r){const a=this.sendQueue.slice(s,s+r);o(a)}this.sendQueue=[],this.sendTimer=void 0,this.lastSendTimestamp=this.platform.getCurrentTime()},100))):(this.lastSendTimestamp=t,o(e))},EditorConnection.prototype.sendInspectId=function(e){this.send({cmd:"select",type:"viewer",content:JSON.stringify({id:e})})},EditorConnection.prototype.sendSelectComponent=function(e){this.send({cmd:"select",type:"viewer",content:JSON.stringify({componentName:e})})},EditorConnection.prototype.sendPulsingConnections=function(e){var t=[];Object.keys(e).forEach(function(n){var o=e[n];t=t.concat(o.connections)}),this.send({cmd:"connectiondebugpulse",type:"viewer",content:JSON.stringify({connectionsToPulse:t})})},EditorConnection.prototype.sendDebugInspectorValues=function(e){this.send({cmd:"debuginspectorvalues",type:"viewer",content:{inspectors:e}})},EditorConnection.prototype.sendConnectionValue=function(e,t){this.send({cmd:"connectionValue",type:"viewer",content:{connectionId:e,value:t}})};const dynamicPortsHash={};function _detectRename(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}}EditorConnection.prototype.sendDynamicPorts=function(e,t,n){var o=JSON.stringify(t);if(dynamicPortsHash[e]!==o){if(dynamicPortsHash[e]&&t&&n&&n.detectRenamed){var r=Array.isArray(n.detectRenamed)?n.detectRenamed:[n.detectRenamed],s=[];r.forEach(a=>{var l=JSON.parse(dynamicPortsHash[e]),u=[].concat(t);a.prefix&&(l=l.filter(p=>p.name.startsWith(a.prefix)),u=u.filter(p=>p.name.startsWith(a.prefix))),a.plug&&(l=l.filter(p=>p.plug===a.plug),u=u.filter(p=>p.plug===a.plug)),u=u.map(p=>p.name.substring((a.prefix||"").length)),l=l.map(p=>p.name.substring((a.prefix||"").length));var d=_detectRename(l,u);d&&s.push({plug:a.plug,patterns:[(a.prefix||"")+"{{*}}"],before:d.before,after:d.after})}),s.length>0&&(n.renamed=s),delete n.detectRenamed}dynamicPortsHash[e]=o,this.send({cmd:"instanceports",type:"viewer",content:JSON.stringify({nodeid:e,ports:t,options:n})})}},EditorConnection.prototype.sendWarning=function(e,t,n,o){this.activeWarnings.setWarning(t,n,o)&&this.send({cmd:"showwarning",type:"viewer",content:JSON.stringify({componentName:e,nodeId:t,key:n,warning:o})})},EditorConnection.prototype.clearWarning=function(e,t,n){this.activeWarnings.clearWarning(t,n)&&this.send({cmd:"showwarning",type:"viewer",content:JSON.stringify({componentName:e,nodeId:t,key:n,warning:void 0})})},EditorConnection.prototype.clearWarnings=function(e,t){this.activeWarnings.clearWarnings(t)&&this.send({cmd:"clearwarnings",type:"viewer",content:JSON.stringify({componentName:e,nodeId:t})})},EditorConnection.prototype.sendPatches=function(e){this.send({cmd:"patchproject",type:"viewer",content:JSON.stringify(e)})},EditorConnection.prototype.requestFullExport=function(){this.send({cmd:"register",type:"viewer"})},EditorConnection.prototype.requestNoodlModules=function(){this.send({cmd:"getNoodlModules",type:"viewer"})};var serviceRequests={};EditorConnection.prototype.sendServiceRequest=function(e,t){e.token=guid$1(),e.clientId=this.clientId,serviceRequests[e.token]=t,this.send(e)},EditorConnection.prototype.close=function(){this.reconnectOnClose=!1,this.isConnected()!==!1&&this.socket.close()},EditorConnection.prototype.sendNodeLibrary=function(e){this.send({cmd:"nodelibrary",type:"viewer",runtimeType:this.runtimeType,content:e,clientId:this.clientId})},EditorConnection.prototype.sendComponentMetadata=function(e,t,n){this.send({cmd:"componentMetadata",type:"viewer",content:JSON.stringify({componentName:e,key:t,data:n})})},EditorConnection.prototype.sendProjectMetadata=function(e,t){this.send({cmd:"projectMetadata",type:"viewer",content:JSON.stringify({key:e,data:t})})};function formatDynamicPorts(e){const t=[];for(const n of e.dynamicports)if(n.ports||n.template||n.port||n.channelPort)t.push(n);else if(n.inputs||n.outputs){const o=[];if(n.inputs)for(const s of n.inputs)o.push(formatPort(s,e.inputs[s],"input"));if(n.outputs)for(const s of n.outputs)o.push(formatPort(s,e.outputs[s],"output"));const r={name:n.name||"conditionalports/basic",condition:n.condition,ports:o};t.push(r)}return t}function formatPort(e,t,n){var o={name:e,type:t.type,plug:n};return t.group&&(o.group=t.group),t.displayName&&(o.displayName=t.displayName),t.description&&(o.description=t.description),t.editorName&&(o.editorName=t.editorName),t.default!==void 0&&(o.default=t.default),t.hasOwnProperty("index")&&(o.index=t.index),t.tooltip&&(o.tooltip=t.tooltip),t.tab&&(o.tab=t.tab),t.popout&&(o.popout=t.popout),t.allowVisualStates&&(o.allowVisualStates=t.allowVisualStates),o}function generateNodeLibrary(e){var t={typecasts:[{from:"string",to:["number","boolean","image","color","enum","textStyle","dimension","array","object"]},{from:"boolean",to:["number","string","signal"]},{from:"number",to:["boolean","string","dimension"]},{from:"date",to:["string"]},{from:"signal",to:["boolean","number"]},{from:"image",to:[]},{from:"cloudfile",to:["string","image"]},{from:"color",to:[]},{from:"enum",to:[]},{from:"object",to:[]},{from:"domelement",to:[]},{from:"reference",to:[]},{from:"font",to:[]},{from:"textStyle",to:["string"]},{from:"collection",to:["array"]},{from:"array",to:["collection"]}],dynamicports:[{type:"conditionalports",name:"basic"},{type:"expand",name:"basic"}],colors:{nodes:{component:{base:"#643D8B",baseHighlighted:"#79559b",header:"#4E2877",headerHighlighted:"#643d8b",outline:"#4E2877",outlineHighlighted:"#b58900",text:"#dbd0e4"},visual:{base:"#315272",baseHighlighted:"#4d6784",header:"#173E5D",headerHighlighted:"#315272",outline:"#173E5D",outlineHighlighted:"#b58900",text:"#cfd5de"},data:{base:"#465524",baseHighlighted:"#5b6a37",header:"#314110",headerHighlighted:"#465524",outline:"#314110",outlineHighlighted:"#b58900",text:"#d2d6c5"},javascript:{base:"#7E3660",baseHighlighted:"#944e74",header:"#67214B",headerHighlighted:"#7e3660",outline:"#67214B",outlineHighlighted:"#d57bab",text:"#e4cfd9"},default:{base:"#4C4F59",baseHighlighted:"#62656e",header:"#373B45",headerHighlighted:"#4c4f59",outline:"#373B45",outlineHighlighted:"#b58900",text:"#d3d4d6"}},connections:{signal:{normal:"#006f82",highlighted:"#7ec2cf",pulsing:"#ffffff"},default:{normal:"#875d00",highlighted:"#e5ae32",pulsing:"#ffffff"}}},nodetypes:[{name:"Component Children",shortDesc:"This node is a placeholder for where children of this component will be inserted.",docs:"https://docs.noodl.net/nodes/component-utilities/component-children",color:"component",allowAsChild:!0,category:"Visual",haveComponentChildren:["Visual"]}]},n=Object.keys(e._constructors);n.forEach(function(s){var a=e._constructors[s].metadata,l={name:s,searchTags:a.searchTags};t.nodetypes.push(l),a.version&&(l.version=a.version),a.displayNodeName&&(l.displayNodeName=a.displayNodeName),a.nodeDoubleClickAction&&(l.nodeDoubleClickAction=a.nodeDoubleClickAction),a.shortDesc&&(l.shortDesc=a.shortDesc),a.module&&(l.module=a.module),a.deprecated&&(l.deprecated=!0),a.haveComponentPorts&&(l.haveComponentPorts=!0),a.category==="Visual"&&(l.allowAsChild=!0,l.allowAsExportRoot=!0,l.color="visual"),a.allowAsExportRoot!==void 0&&(l.allowAsExportRoot=a.allowAsExportRoot),a.allowChildren&&(l.allowChildrenWithCategory=["Visual"],l.color="visual"),a.allowChildrenWithCategory&&(l.allowChildrenWithCategory=a.allowChildrenWithCategory),a.singleton&&(l.singleton=!0),a.allowAsChild&&(l.allowAsChild=!0),a.docs&&(l.docs=a.docs),a.shortDocs?l.shortDocs=a.shortDocs:a.docs&&a.docs.indexOf("https://docs.noodl.net")===0&&(l.shortDocs=a.docs.replace("/#","")+"-short.md"),l.category=a.category,a.panels&&(l.panels=a.panels),a.usePortAsLabel&&(l.usePortAsLabel=a.usePortAsLabel,l.portLabelTruncationMode=a.portLabelTruncationMode),a.color&&(l.color=a.color),a.dynamicports&&(l.dynamicports=formatDynamicPorts(a)),a.exportDynamicPorts&&(l.exportDynamicPorts=a.exportDynamicPorts),a.visualStates&&(l.visualStates=a.visualStates),a.useVariants&&(l.useVariants=a.useVariants),a.connectionPanel&&(l.connectionPanel=a.connectionPanel),l.ports=[];var u=l.dynamicports||[],d={},p={};u.filter(g=>g.channelPort!==void 0).forEach(g=>{p[g.channelPort.plug+"/"+g.channelPort.name]=!0}),u.length&&(l.dynamicports=u),Object.keys(a.inputs).forEach(function(g){if(!(d.hasOwnProperty("input/"+g)||p.hasOwnProperty("input/"+g))){var b=a.inputs[g];b.exportToEditor!==!1&&l.ports.push(formatPort(g,b,"input"))}});function f(g,b){var _={name:g,type:b.type,plug:"output"};b.group&&(_.group=b.group),b.displayName&&(_.displayName=b.displayName),b.editorName&&(_.editorName=b.editorName),b.hasOwnProperty("index")&&(_.index=b.index),l.ports.push(_)}Object.keys(a.outputs).forEach(function(g){if(!(d.hasOwnProperty("output/"+g)||p.hasOwnProperty("output/"+g))){var b=a.outputs[g];f(g,b)}})});const o=[{name:"UI Elements",description:"Buttons, inputs, containers, media",type:"visual",subCategories:[{name:"Basic Elements",items:["Group","net.noodl.visual.columns","Text","Image","Video","Circle","net.noodl.visual.icon"]},{name:"UI Controls",items:["net.noodl.controls.button","net.noodl.controls.checkbox","net.noodl.controls.options","net.noodl.controls.radiobutton","Radio Button Group","net.noodl.controls.range","net.noodl.controls.textinput"]}]},{name:"Navigation & Popups",description:"Page routing, navigation, popups",type:"logic",subCategories:[{name:"Navigation",items:["Router","RouterNavigate","PageInputs","net.noodl.externallink","PageStackNavigateToPath"]},{name:"Component Stack",items:["Page Stack","PageStackNavigate","PageStackNavigateBack"]},{name:"Popups",items:["NavigationShowPopup","NavigationClosePopup"]}]},{name:"Logic & Utilities",description:"Logic, events, string manipulation",type:"logic",subCategories:[{name:"General Utils",items:["States","Value Changed","Timer","Color Blend","Number Remapper","Counter","Drag","net.noodl.animatetovalue"]},{name:"Logic",items:["Boolean To String","Switch","And","Or","Condition","Inverter"]},{name:"Events",items:["Event Sender","Event Receiver"]},{name:"String Manipulation",items:["Substring","String Mapper","String Format","Date To String","Unique Id"]},{name:"System",items:["Screen Resolution","Open File Picker"]},{name:"Variables",items:["String","Boolean","Color","Number"]}]},{name:"Component Utilities",description:"Component inputs, outputs & object",type:"component",subCategories:[{name:"",items:["Component Inputs","Component Outputs","Component Children","net.noodl.ComponentObject","net.noodl.ParentComponentObject","net.noodl.SetComponentObjectProperties","net.noodl.SetParentComponentObjectProperties"]}]},{name:"Read & Write Data",description:"Arrays, objects, cloud data",type:"data",subCategories:[{name:"",items:["RunTasks","For Each","For Each Actions","Model2","SetModelProperties","NewModel","Set Variable","Variable2"]},{name:"Array",items:["Collection2","CollectionNew","CollectionRemove","CollectionClear","CollectionInsert","Filter Collection","Map Collection","Static Data"]},{name:"Cloud Data",items:["DbModel2","NewDbModelProperties","FilterDBModels","SetDbModelProperties","DbCollection2","DeleteDbModelProperties","AddDbModelRelation","RemoveDbModelRelation","Cloud File","Upload File","CloudFunction2","DbConfig"]},{name:"User",items:["net.noodl.user.LogIn","net.noodl.user.LogOut","net.noodl.user.SignUp","net.noodl.user.User","net.noodl.user.SetUserProperties","net.noodl.user.VerifyEmail","net.noodl.user.SendEmailVerification","net.noodl.user.ResetPassword","net.noodl.user.RequestPasswordReset"]},{name:"External Data",items:["REST2"]}]},{name:"Custom Code",description:"Custom JavaScript and CSS",type:"javascript",subCategories:[{name:"",items:["Expression","JavaScriptFunction","Javascript2","CSS Definition"]}]},{name:"Cloud Functions",description:"Nodes to be used in cloud functions",type:"data",subCategories:[{name:"",items:["noodl.cloud.request","noodl.cloud.response"]},{name:"Cloud Data",items:["noodl.cloud.aggregate"]}]}];t.nodeIndex={coreNodes:o};const r=[];return n.forEach(s=>{e._constructors[s].metadata.module&&r.push(s)}),r.length&&(t.nodeIndex.moduleNodes=[{name:"",items:r}]),t}function addModuleSettings(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.settings&&o.settings.forEach(function(r){e.ports.push(r)})}}function generateProjectSettings(e,t){const n={dynamicports:[],ports:[]};return addModuleSettings(n,t),n}function NodeModel(e,t){EventSender$2.call(this),this.id=e,this.type=t,this.inputs=[],this.outputs=[],this.children=[],this.parameters={},this.inputPorts={},this.outputPorts={}}NodeModel.prototype=Object.create(EventSender$2.prototype),NodeModel.prototype.setParameter=function(e,t,n){n?(this.stateParameters||(this.stateParameters={}),this.stateParameters[n]||(this.stateParameters[n]={}),t===void 0?delete this.stateParameters[n][e]:this.stateParameters[n][e]=t):t===void 0?delete this.parameters[e]:this.parameters[e]=t,this.emit("parameterUpdated",{name:e,value:t,state:n})},NodeModel.prototype.setParameters=function(e){Object.keys(e).forEach(t=>{this.setParameter(t,e[t])})},NodeModel.prototype.setStateParameters=function(e){this.stateParameters=e},NodeModel.prototype.setStateTransitions=function(e){this.stateTransitions=e},NodeModel.prototype.setStateTransitionParamter=function(e,t,n){this.stateTransitions||(this.stateTransitions={}),t?this.stateTransitions[n][e]=t:delete this.stateTransitions[n][e]},NodeModel.prototype.setDefaultStateTransition=function(e,t){this.defaultStateTransitions||(this.defaultStateTransitions={}),this.defaultStateTransitions[t]=e},NodeModel.prototype.addInputPort=function(e){this.inputPorts[e.name]=e,this.emit("inputPortAdded",e)},NodeModel.prototype.getInputPort=function(e){return this.inputPorts[e]},NodeModel.prototype.getInputPorts=function(){return this.inputPorts},NodeModel.prototype.removeInputPortWithName=function(e){if(this.inputPorts.hasOwnProperty(e)){var t=this.inputPorts[e];delete this.inputPorts[e],this.emit("inputPortRemoved",t)}},NodeModel.prototype.updateInputPortTypes=function(e){var t=!1;for(var n in e)this.inputPorts[n]!==void 0&&(this.inputPorts[n].type=e[n].type,t=!0);t&&this.emit("inputPortTypesUpdated")},NodeModel.prototype.addOutputPort=function(e){this.outputPorts[e.name]=e,this.emit("outputPortAdded",e)},NodeModel.prototype.getOutputPort=function(e){return this.outputPorts[e]},NodeModel.prototype.getOutputPorts=function(){return this.outputPorts},NodeModel.prototype.removeOutputPortWithName=function(e){if(this.outputPorts.hasOwnProperty(e)){var t=this.outputPorts[e];delete this.outputPorts[e],this.emit("outputPortRemoved",t)}},NodeModel.prototype.updateOutputPortTypes=function(e){var t=!1;for(var n in e)this.outputPorts[n]!==void 0&&(this.outputPorts[n].type=e[n].type,t=!0);t&&this.emit("outputPortTypesUpdated")},NodeModel.prototype.addChild=function(e,t){e.parent=this,t===void 0?this.children.push(e):this.children.splice(t,0,e),this.emit("childAdded",e)},NodeModel.prototype.removeChild=function(e){e.parent=void 0;var t=this.children.indexOf(e);this.children.splice(t,1),this.emit("childRemoved",e)},NodeModel.prototype.reset=function(){this.removeAllListeners()},NodeModel.prototype.setVariant=function(e){this.variant=e,this.emit("variantUpdated",e)},NodeModel.createFromExportData=function(e){var t=new NodeModel(e.id,e.type);if(e.parameters&&t.setParameters(e.parameters),e.stateParameters&&t.setStateParameters(e.stateParameters),e.stateTransitions&&t.setStateTransitions(e.stateTransitions),e.defaultStateTransitions)for(const n in e.defaultStateTransitions)t.setDefaultStateTransition(e.defaultStateTransitions[n],n);return e.ports&&e.ports.forEach(function(n){n.plug==="outputs"&&(n.plug="output"),(n.plug==="input"||n.plug==="input/output")&&t.addInputPort(n),(n.plug==="output"||n.plug==="input/output")&&t.addOutputPort(n)}),e.variant&&t.setVariant(e.variant),t};function ComponentModel(e){EventSender$2.call(this),this.name=e,this.nodes=[],this.connections=[],this.roots=[],this.inputPorts={},this.outputPorts={},this.metadata={}}ComponentModel.prototype=Object.create(EventSender$2.prototype),ComponentModel.prototype.addNode=async function(e){e.component=this,this.nodes[e.id]=e,await this.emit("nodeAdded",e)},ComponentModel.prototype.hasNodeWithId=function(e){return this.getNodeWithId(e)!==void 0},ComponentModel.prototype.getNodeWithId=function(e){return this.nodes[e]},ComponentModel.prototype.getAllNodes=function(){return Object.values(this.nodes)},ComponentModel.prototype.getNodesWithType=function(e){var t=[],n=this;return Object.keys(this.nodes).forEach(function(o){var r=n.nodes[o];r.type===e&&t.push(r)}),t},ComponentModel.prototype.addConnection=function(e){if(this.connections.push(e),this.emit("connectionAdded",e),e.targetId){const t=this.getNodeWithId(e.targetId);t&&t.emit("inputConnectionAdded",e)}},ComponentModel.prototype.removeConnection=function(e){const t=this.connections.findIndex(n=>n.sourceId===e.sourceId&&n.sourcePort===e.sourcePort&&n.targetId===e.targetId&&n.targetPort===e.targetPort);if(t===-1){console.log("Connection doesn't exist",e);return}if(this.connections.splice(t,1),this.emit("connectionRemoved",e),e.targetId){const n=this.getNodeWithId(e.targetId);n&&n.emit("inputConnectionRemoved",e)}},ComponentModel.prototype.getConnectionsFromPort=function(e,t){return this.connections.filter(function(n){return n.sourceId===e&&n.sourcePort===t})},ComponentModel.prototype.getConnectionsToPort=function(e,t){return this.connections.filter(function(n){return n.targetId===e&&n.targetPort===t})},ComponentModel.prototype.getConnectionsFrom=function(e){return this.connections.filter(function(t){return t.sourceId===e})},ComponentModel.prototype.getConnectionsTo=function(e){return this.connections.filter(function(t){return t.targetId===e})},ComponentModel.prototype.addRootId=function(e){this.roots.indexOf(e)===-1&&(this.roots.push(e),this.emit("rootAdded",e))},ComponentModel.prototype.removeRootId=function(e){const t=this.roots.indexOf(e);t!==-1&&(this.roots.splice(t,1),this.emit("rootRemoved",e))},ComponentModel.prototype.getRoots=function(){return this.roots},ComponentModel.prototype.removeNodeWithId=async function(e){const t=this.getNodeWithId(e);if(!t)return console.warn("ERROR: Attempted to remove non-existing node with ID:",e),!1;for(;t.children.length>0;){const o=t.children[0];await this.removeNodeWithId(o.id)||t.children.shift()}const n=this.getConnectionsTo(e).concat(this.getConnectionsFrom(e));for(let o=0;o<n.length;o++)this.removeConnection(n[o]);return this.setNodeParent(t,null),this.roots.indexOf(t.id)!==-1&&this.removeRootId(t.id),await this.emit("nodeRemoved",t),t.removeAllListeners(),delete this.nodes[e],await this.emit("nodeWasRemoved",t),!0},ComponentModel.prototype.getAllConnections=function(){return this.connections},ComponentModel.prototype.getInputPorts=function(){return this.inputPorts},ComponentModel.prototype.getOutputPorts=function(){return this.outputPorts},ComponentModel.prototype.addInputPort=function(e){this.inputPorts[e.name]=e,this.emit("inputPortAdded",e)},ComponentModel.prototype.addOutputPort=function(e){this.outputPorts[e.name]=e,this.emit("outputPortAdded",e)},ComponentModel.prototype.removeOutputPortWithName=function(e){if(this.outputPorts.hasOwnProperty(e)){var t=this.outputPorts[e];delete this.outputPorts[e],this.emit("outputPortRemoved",t)}},ComponentModel.prototype.removeInputPortWithName=function(e){if(this.inputPorts.hasOwnProperty(e)){var t=this.inputPorts[e];delete this.inputPorts[e],this.emit("inputPortRemoved",t)}},ComponentModel.prototype.updateInputPortTypes=function(e){var t=!1;for(var n in e)this.inputPorts[n]!==void 0&&(this.inputPorts[n].type=e[n].type,t=!0);t&&this.emit("inputPortTypesUpdated")},ComponentModel.prototype.updateOutputPortTypes=function(e){var t=!1;for(var n in e)this.outputPorts[n]!==void 0&&(this.outputPorts[n].type=e[n].type,t=!0);t&&this.emit("outputPortTypesUpdated")},ComponentModel.prototype.renameInputPortOnNodeWithId=function(e,t,n){var o=this.getConnectionsToPort(e,t);o.forEach(this.removeConnection.bind(this));var r=this.getNodeWithId(e),s={...r.getInputPort(t)};s&&(r.removeInputPortWithName(t),s.name=n,r.addInputPort(s)),o.forEach(function(a){a.targetPort=n}),o.forEach(this.addConnection.bind(this))},ComponentModel.prototype.renameOutputPortOnNodeWithId=function(e,t,n){var o=this.getConnectionsFromPort(e,t);o.forEach(this.removeConnection.bind(this));var r=this.getNodeWithId(e),s={...r.getOutputPort(t)};r.removeOutputPortWithName(t),s.name=n,r.addOutputPort(s),o.forEach(function(a){a.sourcePort=n}),o.forEach(this.addConnection.bind(this))},ComponentModel.prototype.setNodeParent=function(e,t,n){this.roots.indexOf(e.id)!==-1&&this.removeRootId(e.id),e.parent&&(this.emit("nodeParentWillBeRemoved",e),e.parent.removeChild(e)),e.emit("parentUpdated",t),t&&(t.addChild(e,n),this.emit("nodeParentUpdated",e))},ComponentModel.prototype.importEditorNodeData=async function(e,t,n){var o=NodeModel.createFromExportData(e);if(await this.addNode(o),t&&this.setNodeParent(o,this.getNodeWithId(t),n),e.children)for(let r=0;r<e.children.length;r++){const s=e.children[r];await this.importEditorNodeData(s,o.id,r)}},ComponentModel.prototype.reset=async function(){for(;this.roots.length;)await this.removeNodeWithId(this.roots[0]);for(const e of this.nodes)this.hasNodeWithId(e)&&await this.removeNodeWithId(e);if(this.nodes.length>0)throw new Error("Not all nodes were removed during a reset");if(this.connections.length>0)throw new Error("Not all connections were removed during a reset")},ComponentModel.prototype.rename=function(e){var t=this.name;this.name=e,this.emit("renamed",{oldName:t,newName:e})},ComponentModel.prototype.setMetadata=function(e,t){this.metadata[e]=t},ComponentModel.prototype.getMetadata=function(e){return e?this.metadata[e]:this.metadata},ComponentModel.createFromExportData=async function(e){var t=new ComponentModel(e.name);if(e.metadata)for(const n in e.metadata)t.setMetadata(n,e.metadata[n]);if(e.ports&&e.ports.forEach(function(n){(n.plug==="input"||n.plug==="input/output")&&t.addInputPort(n),(n.plug==="output"||n.plug==="input/output")&&t.addOutputPort(n)}),e.nodes)for(const n of e.nodes)await t.importEditorNodeData(n);return e.connections&&e.connections.forEach(n=>t.addConnection(n)),e.roots&&e.roots.forEach(n=>t.addRootId(n)),t};function GraphModel(){EventSender$2.call(this),this.components={},this.settings={},this.metadata={}}GraphModel.prototype=Object.create(EventSender$2.prototype),GraphModel.prototype.importComponentFromEditorData=async function(e){var t=await ComponentModel.createFromExportData(e);this.addComponent(t)},GraphModel.prototype.getBundleContainingComponent=function(e){return this.componentToBundleMap.get(e)},GraphModel.prototype.getBundlesContainingSheet=function(e){const t=new Set;for(const n of this.componentToBundleMap.keys()){const o=n.indexOf("/#")!==0;(o&&e==="Default"||!o&&n.indexOf("/#"+e)===0)&&t.add(this.componentToBundleMap.get(n))}return Array.from(t)},GraphModel.prototype.getBundleDependencies=function(e){const t=new Set,n=o=>{const r=this.componentIndex[o];for(const s of r.dependencies)t.has(s)||(t.add(s),n(s))};return n(e),Array.from(t)},GraphModel.prototype.importEditorData=async function(e){this.componentIndex=e.componentIndex,this.routerIndex=e.routerIndex,this.componentToBundleMap=new Map;for(const t in e.componentIndex){const n=e.componentIndex[t];for(const o of n.components)this.componentToBundleMap.set(o,t)}this.variants=e.variants||[],e.settings&&this.setSettings(e.settings),e.metadata&&this.setAllMetaData(e.metadata);for(const t of e.components)await this.importComponentFromEditorData(t);this.setRootComponentName(e.rootComponent)},GraphModel.prototype.setRootComponentName=function(e){this.rootComponent=e,this.emit("rootComponentNameUpdated",e)},GraphModel.prototype.getNodesWithType=function(e){for(var t=[],n=Object.keys(this.components),o=0;o<n.length;o++){var r=this.components[n[o]];t=t.concat(r.getNodesWithType(e))}return t},GraphModel.prototype.getComponentWithName=function(e){return this.components[e]},GraphModel.prototype.hasComponentWithName=function(e){return!!this.components[e]},GraphModel.prototype.getAllComponents=function(){return Object.keys(this.components).map(e=>this.components[e])},GraphModel.prototype.getAllNodes=function(){for(var e=[],t=Object.keys(this.components),n=0;n<t.length;n++){var o=this.components[t[n]];e=e.concat(o.getAllNodes())}return e},GraphModel.prototype.addComponent=function(e){this.components[e.name]=e,this.getNodesWithType(e.name).forEach(this._addComponentPorts.bind(this)),e.getAllNodes().forEach(this._onNodeAdded.bind(this)),e.on("nodeAdded",this._onNodeAdded.bind(this),this),e.on("nodeRemoved",this._onNodeRemoved.bind(this),this),e.on("nodeWasRemoved",this._onNodeWasRemoved.bind(this),this),this.emit("componentAdded",e)},GraphModel.prototype.removeComponentWithName=async function(e){if(this.components.hasOwnProperty(e)===!1){console.error("GraphModel: Component with name "+e+" not in graph");return}var t=this.components[e];await t.reset(),t.removeAllListeners(),delete this.components[t.name],this.emit("componentRemoved",t)},GraphModel.prototype.renameComponent=function(e,t){if(this.components.hasOwnProperty(e)===!1){console.error("GraphModel: Component with name "+e+" not in graph");return}this.getNodesWithType(e).forEach(function(o){o.type=t});var n=this.components[e];n.rename(t),delete this.components[e],this.components[t]=n,this.emit("componentRenamed",n)},GraphModel.prototype._addComponentPorts=function(e){if(this.components.hasOwnProperty(e.type)){var t=this.components[e.type];const n=t.getInputPorts(),o=t.getOutputPorts();Object.keys(n).forEach(r=>{e.addInputPort(n[r])}),Object.keys(o).forEach(r=>{e.addOutputPort(o[r])})}},GraphModel.prototype._onNodeAdded=function(e){this._addComponentPorts(e),this.emit("nodeAdded",e),this.emit("nodeAdded."+e.type,e)},GraphModel.prototype._onNodeRemoved=function(e){this.emit("nodeRemoved",e),this.emit("nodeRemoved."+e.type,e)},GraphModel.prototype._onNodeWasRemoved=function(e){this.emit("nodeWasRemoved",e),this.emit("nodeWasRemoved."+e.type,e)},GraphModel.prototype.reset=async function(){for(const e of Object.keys(this.components))await this.removeComponentWithName(e);this.setSettings({})},GraphModel.prototype.isEmpty=function(){return Object.keys(this.components).length===0},GraphModel.prototype.setSettings=function(e){this.settings=e,this.emit("projectSettingsChanged",e)},GraphModel.prototype.getSettings=function(){return this.settings},GraphModel.prototype.setAllMetaData=function(e){for(const t in e)this.setMetaData(t,e[t])},GraphModel.prototype.setMetaData=function(e,t){this.metadata[e]&&JSON.stringify(this.metadata[e])===JSON.stringify(t)||(this.metadata[e]=t,this.emit("metadataChanged",{key:e,data:t}),this.emit("metadataChanged."+e,t))},GraphModel.prototype.getMetaData=function(e){return e?this.metadata[e]:this.metadata},GraphModel.prototype.getVariants=function(){return this.variants||[]},GraphModel.prototype.getVariant=function(e,t){return this.variants.find(n=>n.name===t&&n.typename===e)},GraphModel.prototype.updateVariant=function(e){const t=this.variants.findIndex(n=>n.name===e.name&&n.typename===e.typename);t!==-1&&this.variants.splice(t,1),this.variants.push(e),this.emit("variantUpdated",e)},GraphModel.prototype.updateVariantParameter=function(e,t,n,o,r){const s=this.getVariant(t,e);if(!s){console.log("updateVariantParameter: can't find variant",e,t);return}r?(s.stateParameters.hasOwnProperty(r)||(s.stateParameters[r]={}),o===void 0?delete s.stateParameters[r][n]:s.stateParameters[r][n]=o):o===void 0?delete s.parameters[n]:s.parameters[n]=o,this.emit("variantUpdated",s)},GraphModel.prototype.updateVariantDefaultStateTransition=function(e,t,n,o){const r=this.getVariant(t,e);r&&(r.defaultStateTransitions[o]=n,this.emit("variantUpdated",r))},GraphModel.prototype.updateVariantStateTransition=function(e){const{variantTypeName:t,variantName:n,state:o,parameterName:r,curve:s}=e,a=this.getVariant(t,n);a&&(a.stateTransitions[o]||(a.stateTransitions[o]={}),a.stateTransitions[o][r]=s)},GraphModel.prototype.deleteVariant=function(e,t){const n=this.variants.findIndex(o=>o.name===t&&o.typename===e);n!==-1&&this.variants.splice(n,1)};function createSetter(e){var t=!1;return function(n){n=!!n,n&&t===!1&&e.valueChangedToTrue.call(this),t=n}}const EdgeTriggeredInput=Object.freeze(Object.defineProperty({__proto__:null,createSetter},Symbol.toStringTag,{value:"Module"}));function createNodeConstructor(e){const t=class extends Node{constructor(n,o){super(n,o)}getInspectInfo(){return e.getInspectInfo?.()??void 0}nodeScopeDidInitialize(){return e.nodeScopeDidInitialize?.()??void 0}};return e.prototypeExtensions&&Object.defineProperties(t.prototype,e.prototypeExtensions),Object.defineProperty(t.prototype,"name",{value:e.name}),t}function registerInput(e,t,n,o){if(e.hasOwnProperty(n))throw new Error("Input property "+n+" already registered");!o.set&&!o.valueChangedToTrue&&(o.set=()=>{}),o.set&&(e[n]={set:o.set},["color","textStyle","array"].forEach(r=>{o.type&&(o.type===r||o.type.name===r)&&(e[n].type=r)})),o.setUnitType&&(e[n].setUnitType=o.setUnitType),t.inputs[n]={displayName:o.displayName,editorName:o.editorName,group:o.group,type:o.type,default:o.default,index:o.index,exportToEditor:o.hasOwnProperty("exportToEditor")?o.exportToEditor:!0,inputPriority:o.inputPriority||0,tooltip:o.tooltip,tab:o.tab,popout:o.popout,allowVisualStates:o.allowVisualStates,nodeDoubleClickAction:o.nodeDoubleClickAction},o.valueChangedToTrue&&(t.inputs[n].type={name:"signal",allowConnectionsOnly:!0})}function registerInputs(e,t,n){Object.keys(n).forEach(function(o){registerInput(e,t,o,n[o])})}function registerNumberedInputs(e,t){for(const n of Object.keys(t))registerNumberedInput(e,n,t[n])}function registerNumberedInput(e,t,n){const o=e.registerInputIfNeeded;e.registerInputIfNeeded=function(r){if(o&&o.call(e,r),e.hasInput(r)||!r.startsWith(t))return;const s=Number(r.slice(t.length+1));e.registerInput(r,{type:n.type,set:n.createSetter.call(e,s)})}}function registerOutputsMetadata(e,t){Object.keys(t).forEach(function(n){var o=t[n];e.outputs[n]={displayName:o.displayName,editorName:o.editorName,group:o.group,type:o.type,index:o.index,exportToEditor:o.hasOwnProperty("exportToEditor")?o.exportToEditor:!0}})}function initializeDefaultValues(e,t){Object.keys(t).forEach(n=>{const o=t[n].default;o!==void 0&&(t[n].type.defaultUnit?e[n]={unit:t[n].type.defaultUnit,value:o}:e[n]=o)})}function defineNode(e){if(!e.category)throw new Error("Node must have a category");if(!e.name)throw new Error("Node must have a name");const t={inputs:{},outputs:{},category:e.category,dynamicports:e.dynamicports,exportDynamicPorts:e.exportDynamicPorts,useVariants:e.useVariants,allowChildren:e.allowChildren,allowChildrenWithCategory:e.allowChildrenWithCategory,singleton:e.singleton,connectionPanel:e.connectionPanel,allowAsChild:e.allowAsChild,visualStates:e.visualStates,panels:e.panels,color:e.color,usePortAsLabel:e.usePortAsLabel,portLabelTruncationMode:e.portLabelTruncationMode,name:e.name,displayNodeName:e.displayNodeName||e.displayName,deprecated:e.deprecated,haveComponentPorts:e.haveComponentPorts,version:e.version,module:e.module,docs:e.docs,allowAsExportRoot:e.allowAsExportRoot,nodeDoubleClickAction:e.nodeDoubleClickAction,searchTags:e.searchTags};e._internal=e._internal||{},e.prototypeExtensions=e.methods||e.prototypeExtensions||{},e.inputs=e.inputs||{},e.outputs=e.outputs||{},e.initialize=e.initialize||function(){};let n={};registerInputs(n,t,e.inputs),registerOutputsMetadata(t,e.outputs),Object.keys(e.prototypeExtensions).forEach(function(s){e.prototypeExtensions[s].value||(e.prototypeExtensions[s]={value:e.prototypeExtensions[s]})});const o=createNodeConstructor({name:e.name,getInspectInfo:e.getInspectInfo,nodeScopeDidInitialize:e.nodeScopeDidInitialize,prototypeExtensions:e.prototypeExtensions}),r=function(s,a,l){const u=new o(s,a);return u._inputs=Object.create(n),Object.keys(e.inputs).forEach(function(d){var p=e.inputs[d];p.valueChangedToTrue&&(u._inputs[d]={set:createSetter({valueChangedToTrue:p.valueChangedToTrue})})}),Object.keys(e.outputs).forEach(function(d){var p=e.outputs[d];p.type==="signal"?u.registerOutput(d,{getter(){}}):u.registerOutput(d,p)}),e.numberedInputs&&registerNumberedInputs(u,e.numberedInputs),u.nodeScope=l,initializeDefaultValues(u._inputValues,t.inputs),e.initialize.call(u),u};return r.metadata=t,e.numberedInputs&&registerSetupFunctionForNumberedInputs(r,e.name,e.numberedInputs),r}function registerSetupFunctionForNumberedInputs(e,t,n){const o=Object.keys(n);o.length&&(e.setupNumberedInputDynamicPorts=function(r,s){const a=r.editorConnection;if(!a||!a.isRunningLocally())return;function l(d,p,f){const g=d.component.getConnectionsTo(d.id).map(A=>A.targetPort),b=Object.keys(d.parameters).concat(g).filter(A=>A.startsWith(p+" ")),_=(b.length?1+Math.max(...b.map(A=>Number(A.slice(p.length+1)))):0)+1,T=[];for(let A=0;A<_;A++){const v={name:p+" "+A,displayName:(f.displayPrefix||p)+" "+A,type:f.type,plug:"input",group:f.group};f.hasOwnProperty("index")&&(v.index=f.index+A),T.push(v)}return T}function u(d){const p=o.map(f=>l(d,f,n[f])).flat();a.sendDynamicPorts(d.id,p)}s.on("nodeAdded."+t,d=>{u(d),d.on("parameterUpdated",()=>{u(d)}),d.on("inputConnectionAdded",()=>{u(d)}),d.on("inputConnectionRemoved",()=>{u(d)})})})}function extend$4(e,t){for(var n in t)if(n==="initialize"&&e.initialize){var o=e.initialize;e.initialize=function(){o.call(this),t.initialize.call(this)}}else t[n]&&t[n].constructor===Object?e[n]=extend$4(e[n]||{},t[n]):t[n]&&t[n].constructor===Array&&e[n]&&e[n].constructor==Array?e[n]=e[n].concat(t[n]):e[n]=t[n];return e}function difference$1(e,t){const n=new Set(t);return e.filter(o=>!n.has(o))}async function handleEvent(e,t,n){function o(l,u){var d={},p={};u.forEach(function(v){v&&v.plug==="outputs"&&(v.plug="output"),(v.plug==="input"||v.plug==="input/output")&&(d[v.name]=v),(v.plug==="output"||v.plug==="input/output")&&(p[v.name]=v)});var f=Object.keys(l.getInputPorts()),g=difference$1(f,Object.keys(d)),b=difference$1(Object.keys(d),f);l.updateInputPortTypes(d),g.forEach(l.removeInputPortWithName.bind(l)),b.forEach(function(v){l.addInputPort(d[v]),l.parameters&&l.parameters.hasOwnProperty(v)&&r(e.rootComponent.nodeScope,l,v,l.parameters[v])}),l.updateOutputPortTypes(p);var _=Object.keys(l.getOutputPorts()),T=difference$1(_,Object.keys(p)),A=difference$1(Object.keys(p),_);T.forEach(l.removeOutputPortWithName.bind(l)),A.forEach(function(v){l.addOutputPort(p[v])})}function r(l,u,d,p){var f=l.getNodesWithIdRecursive(u.id);f.forEach(function(g){g.queueInput(d,p)})}var s;if(!(n.componentName&&(s=t.getComponentWithName(n.componentName),!s))){n.port&&n.port.plug==="outputs"&&(n.port.plug="output");var a={nodeAdded(l){s.importEditorNodeData(l.model,l.parentId,l.childIndex)},nodeRemoved:async function(l){s.hasNodeWithId(l.model.id)&&await s.removeNodeWithId(l.model.id)},connectionAdded(l){s.addConnection(l.model)},connectionRemoved(l){s.removeConnection(l.model);var u=s.getNodeWithId(l.model.targetId);if(s.getConnectionsToPort(u.id,l.model.targetId).length===0){var d=u.parameters[l.model.targetPort];d===void 0&&(d=e.getDefaultValueForInput(u.type,l.model.targetPort)),r(e.rootComponent.nodeScope,u,l.model.targetPort,d)}},parameterChanged(l){const u=s.getNodeWithId(l.nodeId);if(u===void 0){console.log("parameterChanged: Unknown node id",l);return}if(l.parameters){const d=new Set(Object.keys(l.parameters).concat(Object.keys(l.oldParameters)));for(const p of d)u.setParameter(p,l.parameters[p])}l.parameterName&&u.setParameter(l.parameterName,l.parameterValue,l.state)},nodeAttached(l){s.setNodeParent(s.getNodeWithId(l.nodeId),s.getNodeWithId(l.parentId),l.childIndex)},nodeDetached(l){s.setNodeParent(s.getNodeWithId(l.nodeId),null),s.addRootId(l.nodeId)},componentAdded(l){t.importComponentFromEditorData(l.model)},componentRemoved:async function(l){await t.removeComponentWithName(l.componentName)},rootAdded(l){s.addRootId(l.nodeId)},portAdded(l){var u=s.getNodeWithId(l.nodeId);(l.port.plug==="input"||l.port.plug==="input/output")&&(u.addInputPort(l.port),u.parameters.hasOwnProperty(l.port)&&r(e.rootComponent.nodeScope,u,l.port,u.parameters[l.port])),(l.port.plug==="output"||l.port.plug==="input/output")&&u.addOutputPort(l.port)},portRemoved(l){var u=s.getNodeWithId(l.nodeId);(l.port.plug==="input"||l.port.plug==="input/output")&&u.removeInputPortWithName(l.port.name),(l.port.plug==="output"||l.port.plug==="input/output")&&u.removeOutputPortWithName(l.port.name)},nodePortRenamed(l){(l.port.plug==="input"||l.port.plug==="input/output")&&s.renameInputPortOnNodeWithId(l.nodeId,l.oldName,l.port.name),(l.port.plug==="output"||l.port.plug==="input/output")&&s.renameOutputPortOnNodeWithId(l.nodeId,l.oldName,l.port.name);var u=s.getNodeWithId(l.nodeId);u.type==="Component Inputs"?(s.addInputPort(l.port),t.getNodesWithType(s.name).forEach(function(d){d.component.renameInputPortOnNodeWithId(d.id,l.oldName,l.port.name)}),s.removeInputPortWithName(l.oldName)):u.type==="Component Outputs"&&(s.addOutputPort(l.port),t.getNodesWithType(s.name).forEach(function(d){d.component.renameOutputPortOnNodeWithId(d.id,l.oldName,l.port.name)}),s.removeOutputPortWithName(l.oldName))},componentPortsUpdated(l){o(s,l.ports)},instancePortsChanged(l){if(s.hasNodeWithId(l.nodeId)){var u=s.getNodeWithId(l.nodeId);o(u,l.ports)}},componentRenamed(l){t.renameComponent(l.oldName,l.newName)},settingsChanged(l){t.setSettings(l.settings)},metadataChanged(l){t.setMetaData(l.key,l.data)},componentMetadataChanged(l){const u=t.getComponentWithName(l.componentName);u&&u.setMetadata(l.key,l.data)},variantParametersChanged(l){if(l.variant)t.updateVariant(l.variant);else if(t.updateVariantParameter(l.variantName,l.variantTypeName,l.parameterName,l.parameterValue,l.state),l.parameterValue===void 0){const u=t.getVariant(l.variantTypeName,l.variantName);e.rootComponent.nodeScope.getAllNodesWithVariantRecursive(u).forEach(d=>{d.queueInput(l.parameterName,d.getParameter(l.parameterName))})}},variantDeleted(l){t.deleteVariant(l.variantTypeName,l.variantName)},variantChanged(l){const u=s.getNodeWithId(l.nodeId),d=t.getVariant(u.type,l.variantName);u.setVariant(d)},variantRenamed(l){const u=t.getVariant(l.variantTypeName,l.oldVariantName);u&&(u.name=u.variantName)},defaultStateTransitionChanged(l){s.getNodeWithId(l.nodeId).setDefaultStateTransition(l.curve,l.state)},stateTransitionsChanged(l){const u=s.getNodeWithId(l.nodeId);l.parameterName&&u.setStateTransitionParamter(l.parameterName,l.curve,l.state)},variantDefaultStateTransitionChanged(l){t.updateVariantDefaultStateTransition(l.variantName,l.variantTypeName,l.curve,l.state)},variantStateTransitionsChanged(l){t.updateVariantStateTransition(l)},routerIndexChanged(l){t.routerIndex=l.data}};a.hasOwnProperty(n.type)?(await a[n.type](n),e.scheduleUpdate()):console.log("Unknown event",n)}}async function asyncPool(e,t,n){const o=[],r=[];for(const s of t){const a=Promise.resolve().then(()=>n(s,t));if(o.push(a),e<=t.length){const l=a.then(()=>r.splice(r.indexOf(l),1));r.push(l),r.length>=e&&await Promise.race(r)}}return Promise.all(o)}const ComponentInputs={node:{name:"Component Inputs",shortDesc:"This node is used to define the inputs of a component.",docs:"https://docs.noodl.net/nodes/component-utilities/component-inputs",panels:[{name:"PortEditor",context:["select","connectFrom"],title:"Inputs",plug:"output",type:{name:"*"},canArrangeInGroups:!0},{name:"PropertyEditor",hidden:!0}],getInspectInfo(){return{type:"value",value:this.nodeScope.componentOwner._internal.inputValues}},color:"component",haveComponentPorts:!0,category:"Component Utilities",methods:{registerOutputIfNeeded(e){this.hasOutput(e)||this.registerOutput(e,{getter(){return this.nodeScope.componentOwner._internal.inputValues[e]}})},_updateDependencies(){this.nodeScope.componentOwner.update()}}}},ComponentOutputs={node:{category:"Component Utilities",name:"Component Outputs",shortDesc:"This node is used to define the outputs of a component.",docs:"https://docs.noodl.net/nodes/component-utilities/component-outputs",panels:[{name:"PortEditor",context:["select","connectTo"],title:"Outputs",plug:"input",type:{name:"*"},canArrangeInGroups:!0},{name:"PropertyEditor",hidden:!0}],color:"component",haveComponentPorts:!0,prototypeExtensions:{registerInputIfNeeded(e){this.hasInput(e)||this.registerInput(e,{set(t){this.nodeScope.componentOwner.setOutputFromComponentOutput(e,t)}})}}}};function Model(e,t){this.id=e,this.data=t}const models=Model._models={},proxies={},_modelProxyHandler={get(e,t,n){return typeof e[t]=="function"?e[t].bind(e):t in e?Reflect.get(e,t,n):e.get(t)},set(e,t,n){if(t==="_class")e._class=n;else{if(t==="id")return console.log(`Noodl.Object warning: id is readonly (Id is ${e.id}, trying to set to ${n})`),!0;e.set(t,n)}return!0},ownKeys(e){return Reflect.ownKeys(e.data)},getOwnPropertyDescriptor(e,t){return Object.getOwnPropertyDescriptor(e.data,t)}};Model.get=function(e){return e===void 0&&(e=Model.guid()),models[e]||(models[e]=new Model(e,{}),proxies[e]=new Proxy(models[e],_modelProxyHandler)),proxies[e]},Model.create=function(e){var t=e||{},n=Model.get(t.id);for(var o in t)o!=="id"&&n.set(o,t[o]);return n},Model.exists=function(e){return models[e]!==void 0},Model.instanceOf=function(e){return e instanceof Model||e.target instanceof Model};function _randomString(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let n="";for(let o=0;o<e;++o)n+=t[Math.floor((1+Math.random())*65536)%t.length];return n}Model.guid=function e(){return _randomString(10)},Model.prototype.on=function(e,t){this.listeners||(this.listeners={}),this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)},Model.prototype.off=function(e,t){if(this.listeners&&this.listeners[e]){var n=this.listeners[e].indexOf(t);n!==-1&&this.listeners[e].splice(n,1)}},Model.prototype.notify=function(e,t){if(this.listeners&&this.listeners[e])for(var n=this.listeners[e].slice(),o=0;o<n.length;o++)n[o](t)},Model.prototype.setAll=function(e){for(var t in e)if(t!=="id"&&this.data[t]!==e[t]){var n=this.data[t];this.data[t]=e[t],this.notify("change",{name:t,value:e[t],old:n})}},Model.prototype.fill=function(e=null){for(const t in this.data){if(t==="id")continue;const n=this.data[t];this.data[t]=e,this.notify("change",{name:t,value:this.data[t],old:n})}},Model.prototype.set=function(e,t,n){if(n&&n.resolve&&e.indexOf(".")!==-1){const s=e.split(".");let a=this;for(let l=0;l<s.length-1;l++){const u=a.get(s[l]);if(Model.instanceOf(u))a=u;else return}a.set(s[s.length-1],t);return}const o=n&&n.forceChange,r=this.data[e];this.data[e]=t,(o||r!==t)&&(!n||!n.silent)&&this.notify("change",{name:e,value:t,old:r})},Model.prototype.getId=function(){return this.id},Model.prototype.get=function(e,t){if(t&&t.resolve&&e.indexOf(".")!==-1){const n=e.split(".");let o=this;for(let r=0;r<n.length-1;r++){const s=o.get(n[r]);if(Model.instanceOf(s))o=s;else return}return o.get(n[n.length-1])}return this.data[e]},Model.prototype.toJSON=function(){return Object.assign({},this.data,{id:this.id})},Model.Scope=function(){this.models={},this.proxies={}},Model.Scope.prototype.get=function(e){return e===void 0&&(e=Model.guid()),this.models[e]||(this.models[e]=new Model(e,{}),this.proxies[e]=new Proxy(this.models[e],_modelProxyHandler)),this.proxies[e]},Model.Scope.prototype.create=function(e){var t=e||{},n=this.get(t.id);for(var o in t)o!=="id"&&n.set(o,t[o]);return n},Model.Scope.prototype.exists=function(e){return this.models[e]!==void 0},Model.Scope.prototype.instanceOf=function(e){return e instanceof Model||e.target instanceof Model},Model.Scope.prototype.guid=function e(){return _randomString(10)},Model.Scope.prototype.reset=function(){this.models={},this.proxies={},delete this._cloudStore};function sendSignalOnInput(e,t){e.queueInput(t,!0),e.queueInput(t,!1)}const RunTasksDefinition={name:"RunTasks",displayNodeName:"Run Tasks",docs:"https://docs.noodl.net/nodes/data/run-tasks",color:"data",category:"Data",initialize(){this._internal.queuedOperations=[],this._internal.state="idle",this._internal.maxRunningTasks=10,this._internal.activeTasks=new Map},inputs:{items:{group:"Data",displayName:"Items",type:"array",set(e){e&&e!==this._internal.items&&(this._internal.items=e)}},stopOnFailure:{group:"General",displayName:"Stop On Failure",type:"boolean",default:!1,set(e){this._internal.stopOnFailure=e}},maxRunningTasks:{group:"General",displayName:"Max Running Tasks",type:"number",default:10,set(e){this._internal.maxRunningTasks=e}},taskTemplate:{type:"component",displayName:"Template",group:"General",set(e){this._internal.template=e}},run:{group:"General",displayName:"Do",type:"signal",valueChangedToTrue(){this.scheduleRun()}},abort:{group:"General",displayName:"Abort",type:"signal",valueChangedToTrue(){this.scheduleAbort()}}},outputs:{success:{type:"signal",group:"Events",displayName:"Success"},failure:{type:"signal",group:"Events",displayName:"Failure"},done:{type:"signal",group:"Events",displayName:"Done"},aborted:{type:"signal",group:"Events",displayName:"Aborted"}},methods:{scheduleRun(){var e=this._internal;e.hasScheduledRun||(e.hasScheduledRun=!0,this.scheduleAfterInputsHaveUpdated(()=>{this._queueOperation(()=>{e.hasScheduledRun=!1,this.run()})}))},scheduleAbort(){var e=this._internal;e.hasScheduledAbort||(e.hasScheduledAbort=!0,this.scheduleAfterInputsHaveUpdated(()=>{this._queueOperation(()=>{e.hasScheduledAbort=!1,this.abort()})}))},async createTaskComponent(e){const t=this._internal,n=(this.nodeScope.modelScope||Model).create(e);var o=await this.nodeScope.createNode(t.template,guid$1(),{_forEachModel:n,_forEachNode:this});const r=o.isInputConnected.bind(o);o.isInputConnected=a=>a==="Do"?!0:r(a),o.hasInput("Id")&&o.setInputValue("Id",n.getId()),o.hasInput("id")&&o.setInputValue("id",n.getId());for(var s in o._inputs)n.data[s]!==void 0&&o.setInputValue(s,n.data[s]);return o._internal.creatorCallbacks={onOutputChanged:(a,l,u)=>{(u===!1||u===void 0)&&l===!0&&this.itemOutputSignalTriggered(a,n,o)}},o},async startTask(e){const t=this._internal;try{const n=await this.createTaskComponent(e);t.runningTasks++,sendSignalOnInput(n,"Do"),t.activeTasks.set(n.id,n)}catch(n){console.log(n)}},async run(){const e=this._internal;if(this.context.editorConnection&&(e.state!=="idle"?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"run-tasks",{message:"Cannot start when not in idle mode"}):e.template?e.items?this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"run-tasks"):this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"run-tasks",{message:"No items array provided."}):this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"run-tasks",{message:"No task template specified."})),e.state==="idle"&&e.template&&e.items){e.state="running",e.numTasks=e.items.length,e.failedTasks=0,e.completedTasks=0,e.queuedTasks=[].concat(e.items),e.runningTasks=0,e.items.length===0&&(this.sendSignalOnOutput("success"),e.state="idle");for(let t=0;t<Math.min(e.maxRunningTasks,e.queuedTasks.length);t++){const n=e.queuedTasks.shift();if(!n)break;this.startTask(n)}}},abort(){const e=this._internal;e.state="aborted"},itemOutputSignalTriggered(e,t,n){const o=this._internal;if(o.state==="idle")return;const r=()=>{if(o.state==="aborted"){this.sendSignalOnOutput("aborted"),o.state="idle";return}if(o.completedTasks===o.numTasks)o.failedTasks===0?this.sendSignalOnOutput("success"):this.sendSignalOnOutput("failure"),this.sendSignalOnOutput("done"),o.state="idle";else if(o.stopOnFailure)if(o.failedTasks===0){o.runningTasks++;const s=o.queuedTasks.shift();s&&this.startTask(s)}else this.sendSignalOnOutput("failure"),this.sendSignalOnOutput("aborted");else{o.runningTasks++;const s=o.queuedTasks.shift();s&&this.startTask(s)}};e==="Success"?(o.completedTasks++,o.runningTasks--,r()):e==="Failure"&&(o.completedTasks++,o.failedTasks++,o.runningTasks--,r()),o.activeTasks.delete(n.id),this.nodeScope.deleteNode(n)},_queueOperation(e){this._internal.queuedOperations.push(e),this._runQueueOperations()},async _runQueueOperations(){if(!this.runningOperations){for(this.runningOperations=!0;this._internal.queuedOperations.length;)await this._internal.queuedOperations.shift()();this.runningOperations=!1}}},_deleteAllTasks(){for(const e of this._internal.activeTasks)this.nodeScope.deleteNode(e);this._internal.activeTasks.clear()},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this._deleteAllTasks()}},RunTasks={node:RunTasksDefinition},defaultRequestScript=`//Add custom code to setup the request object before the request
1
+ (function(React,ReactDOM){"use strict";function _interopNamespaceDefault(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}function _mergeNamespaces(e,t){for(var n=0;n<t.length;n++){const o=t[n];if(typeof o!="string"&&!Array.isArray(o)){for(const r in o)if(r!=="default"&&!(r in e)){const s=Object.getOwnPropertyDescriptor(o,r);s&&Object.defineProperty(e,r,s.get?s:{enumerable:!0,get:()=>o[r]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}const React__namespace=_interopNamespaceDefault(React);class CloudFile{constructor({name:t,url:n}){this.name=t,this.url=n}getUrl(){return this.url}getName(){return this.name}toString(){return this.url}}var R=typeof Reflect=="object"?Reflect:null,ReflectApply=R&&typeof R.apply=="function"?R.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)},ReflectOwnKeys;R&&typeof R.ownKeys=="function"?ReflectOwnKeys=R.ownKeys:Object.getOwnPropertySymbols?ReflectOwnKeys=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:ReflectOwnKeys=function(e){return Object.getOwnPropertyNames(e)};function ProcessEmitWarning(e){console&&console.warn&&console.warn(e)}var NumberIsNaN=Number.isNaN||function(e){return e!==e};function EventEmitter$2(){EventEmitter$2.init.call(this)}EventEmitter$2.EventEmitter=EventEmitter$2,EventEmitter$2.prototype._events=void 0,EventEmitter$2.prototype._eventsCount=0,EventEmitter$2.prototype._maxListeners=void 0;var defaultMaxListeners=10;function checkListener(e){if(typeof e!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}Object.defineProperty(EventEmitter$2,"defaultMaxListeners",{enumerable:!0,get(){return defaultMaxListeners},set(e){if(typeof e!="number"||e<0||NumberIsNaN(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");defaultMaxListeners=e}}),EventEmitter$2.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},EventEmitter$2.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||NumberIsNaN(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function _getMaxListeners(e){return e._maxListeners===void 0?EventEmitter$2.defaultMaxListeners:e._maxListeners}EventEmitter$2.prototype.getMaxListeners=function(){return _getMaxListeners(this)},EventEmitter$2.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o=e==="error",r=this._events;if(r!==void 0)o=o&&r.error===void 0;else if(!o)return!1;if(o){var s;if(t.length>0&&(s=t[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var l=r[e];if(l===void 0)return!1;if(typeof l=="function")ReflectApply(l,this,t);else for(var u=l.length,d=arrayClone(l,u),n=0;n<u;++n)ReflectApply(d[n],this,t);return!0};function _addListener(e,t,n,o){var r,s,a;if(checkListener(n),s=e._events,s===void 0?(s=e._events=Object.create(null),e._eventsCount=0):(s.newListener!==void 0&&(e.emit("newListener",t,n.listener?n.listener:n),s=e._events),a=s[t]),a===void 0)a=s[t]=n,++e._eventsCount;else if(typeof a=="function"?a=s[t]=o?[n,a]:[a,n]:o?a.unshift(n):a.push(n),r=_getMaxListeners(e),r>0&&a.length>r&&!a.warned){a.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=a.length,ProcessEmitWarning(l)}return e}EventEmitter$2.prototype.addListener=function(e,t){return _addListener(this,e,t,!1)},EventEmitter$2.prototype.on=EventEmitter$2.prototype.addListener,EventEmitter$2.prototype.prependListener=function(e,t){return _addListener(this,e,t,!0)};function onceWrapper(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function _onceWrap(e,t,n){var o={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=onceWrapper.bind(o);return r.listener=n,o.wrapFn=r,r}EventEmitter$2.prototype.once=function(e,t){return checkListener(t),this.on(e,_onceWrap(this,e,t)),this},EventEmitter$2.prototype.prependOnceListener=function(e,t){return checkListener(t),this.prependListener(e,_onceWrap(this,e,t)),this},EventEmitter$2.prototype.removeListener=function(e,t){var n,o,r,s,a;if(checkListener(t),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===t||n.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||t));else if(typeof n!="function"){for(r=-1,s=n.length-1;s>=0;s--)if(n[s]===t||n[s].listener===t){a=n[s].listener,r=s;break}if(r<0)return this;r===0?n.shift():spliceOne(n,r),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this},EventEmitter$2.prototype.off=EventEmitter$2.prototype.removeListener,EventEmitter$2.prototype.removeAllListeners=function(e){var t,n,o;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var r=Object.keys(n),s;for(o=0;o<r.length;++o)s=r[o],s!=="removeListener"&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=n[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(o=t.length-1;o>=0;o--)this.removeListener(e,t[o]);return this};function _listeners(e,t,n){var o=e._events;if(o===void 0)return[];var r=o[t];return r===void 0?[]:typeof r=="function"?n?[r.listener||r]:[r]:n?unwrapListeners(r):arrayClone(r,r.length)}EventEmitter$2.prototype.listeners=function(e){return _listeners(this,e,!0)},EventEmitter$2.prototype.rawListeners=function(e){return _listeners(this,e,!1)},EventEmitter$2.listenerCount=function(e,t){return typeof e.listenerCount=="function"?e.listenerCount(t):listenerCount.call(e,t)},EventEmitter$2.prototype.listenerCount=listenerCount;function listenerCount(e){var t=this._events;if(t!==void 0){var n=t[e];if(typeof n=="function")return 1;if(n!==void 0)return n.length}return 0}EventEmitter$2.prototype.eventNames=function(){return this._eventsCount>0?ReflectOwnKeys(this._events):[]};function arrayClone(e,t){for(var n=new Array(t),o=0;o<t;++o)n[o]=e[o];return n}function spliceOne(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}function unwrapListeners(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}function NodeRegister(e){this._constructors={},this.context=e}NodeRegister.prototype.register=function(e){var t=e.metadata.name;this._constructors[t]=e},NodeRegister.prototype.createNode=function(e,t,n){if(this._constructors.hasOwnProperty(e)===!1)throw new Error("Unknown node type with name "+e);return this._constructors[e](this.context,t,n)},NodeRegister.prototype.getNodeMetadata=function(e){if(this._constructors.hasOwnProperty(e)===!1)throw new Error("Unknown node type with name "+e);return this._constructors[e].metadata},NodeRegister.prototype.hasNode=function(e){return this._constructors.hasOwnProperty(e)},NodeRegister.prototype.getInputType=function(e,t){const n=this.getNodeMetadata(e);return n.inputs[t]&&n.inputs[t].type};function Timer$2(e,t){this.duration=t.duration||0,this._isRunning=!1,this._hasCalledOnStart=!1,this.scheduler=e,this.repeatCount=1,this.delay=0;for(var n in t)this[n]=t[n]}Timer$2.prototype.start=function(){return this._isRunning&&this.stop(),this.scheduler.scheduleTimer(this),this},Timer$2.prototype.stop=function(){this.scheduler.stopTimer(this),this._hasCalledOnStart=!1,this._isRunning=!1,this._wasStopped=!0},Timer$2.prototype.isRunning=function(){return this._isRunning},Timer$2.prototype.durationLeft=function(){return this._durationLeft};function TimerScheduler(e){this.requestFrame=e,this.runningTimers=[],this.newTimers=[]}TimerScheduler.prototype.createTimer=function(e){return new Timer$2(this,e)},TimerScheduler.prototype.scheduleTimer=function(e){this.newTimers.indexOf(e)===-1&&(e.repeatCount===0&&(e.repeatCount=1e5),this.newTimers.push(e),this.requestFrame())},TimerScheduler.prototype.stopTimer=function(e){var t;e._isRunning?(t=this.runningTimers.indexOf(e),t!==-1&&this.runningTimers.splice(t,1),e.onStop&&!e._wasStopped&&e.onStop()):(t=this.newTimers.indexOf(e),t!==-1&&this.newTimers.splice(t,1))},TimerScheduler.prototype.runTimers=function(e){var t=[],n=[],o=[],r,s=this.runningTimers.length,a;for(r=0;r<s;++r)o[r]=this.runningTimers[r];for(r=0;r<s;++r)if(a=o[r],a&&e>=a._start){a._hasCalledOnStart===!1&&a.onStart&&(a.onStart(),a._hasCalledOnStart=!0);var l;a.duration>0?l=(e-a._start)/(a.duration*a.repeatCount):l=1,a._durationLeft=a.duration*(1-l);var u=l*a.repeatCount-Math.floor(l*a.repeatCount);l>=1&&(u=1),a.onRunning&&a.onRunning(u),l<1&&a._isRunning?t.push(a):a._wasStopped||n.push(a)}else t.push(a);for(this.runningTimers=t,r=0;r<n.length;++r)n[r]._isRunning=!1,n[r]._hasCalledOnStart=!1,n[r].onFinish&&n[r].onFinish();if(this.newTimers.length>0){for(r=0;r<this.newTimers.length;++r)a=this.newTimers[r],a._start=e+a.delay,a._isRunning=!0,a._wasStopped=!1,this.runningTimers.push(a),a.delay===0&&(a.onStart&&(a.onStart(),a._hasCalledOnStart=!0),a.onRunning&&a.onRunning(0));this.newTimers.length=0}},TimerScheduler.prototype.hasPendingTimers=function(){return this.runningTimers.length>0||this.newTimers.length>0};class Variants{constructor({graphModel:t,getNodeScope:n}){this.getNodeScope=n,t&&(this.graphModel=t,t.on("variantUpdated",o=>this.onVariantUpdated(o)))}getVariant(t,n){if(this.graphModel)return this.graphModel.getVariant(t,n)}onVariantUpdated(t){const n=this.getNodeScope();if(!n)return;const o=n.getNodesWithTypeRecursive(t.typename).filter(r=>r.variant?r.variant.name===t.name:r.model&&r.model.variant===t.name);for(const r of o)r.setVariant(t)}}function OutputProperty(e){if(!e.owner)throw new Error("Owner must be set");this.getter=e.getter,this.connections=[],this.owner=e.owner,this.name=e.name,this.onFirstConnectionAdded=e.onFirstConnectionAdded,this.onLastConnectionRemoved=e.onLastConnectionRemoved,this._id=void 0}Object.defineProperties(OutputProperty.prototype,{value:{get(){return this.getter.call(this.owner)}},id:{get(){return this._id||(this._id=this.owner.id+this.name),this._id}},registerConnection:{value(e,t){this.connections.push({node:e,inputPortName:t}),this.connections.length===1&&this.onFirstConnectionAdded&&this.onFirstConnectionAdded.call(this.owner)}},deregisterConnection:{value(e,t){for(var n=0;n<this.connections.length;n++){var o=this.connections[n];if(o.node===e&&o.inputPortName===t){this.connections.splice(n,1);break}}this.connections.length===0&&this.onLastConnectionRemoved&&this.onLastConnectionRemoved.call(this.owner)}},flagDependeesDirty:{value(e){for(var t=0,n=this.connections.length;t<n;t++)this.connections[t].node.flagDirty()}},sendValue:{value(e){this._lastUpdateIteration!==this.owner._updatedAtIteration?(this._lastUpdateIteration=this.owner._updatedAtIteration,this.valuesSendThisIteration=0):this.valuesSendThisIteration++,this.valuesSendThisIteration>500&&(this.owner._cyclicLoop=!0);for(var t=0,n=this.connections.length;t<n;t++){var o=this.connections[t];o.node._setValueFromConnection(o.inputPortName,e)}}},hasConnections:{value(){return this.connections.length>0}}});function Node(e,t){this.id=t,this.context=e,this._dirty=!1,this._inputs={},this._inputValues={},this._outputs={},this._inputConnections={},this._outputList=[],this._isUpdating=!1,this._inputValuesQueue={},this._afterInputsHaveUpdatedCallbacks=[],this._internal={},this._signalsSentThisUpdate={},this._deleted=!1,this._deleteListeners=[],this._isFirstUpdate=!0,this._valuesFromConnections={},this.updateOnDirtyFlagging=!0}Node.prototype.getInputValue=function(e){return this._inputValues[e]},Node.prototype.registerInput=function(e,t){if(this.hasInput(e))throw new Error("Input property "+e+" already registered");if(this._inputs[e]=t,t.type&&t.type.units){const n=t.type.defaultUnit||t.type.units[0];this._inputValues[e]={value:t.default,type:n}}else t.hasOwnProperty("default")&&(this._inputValues[e]=t.default)},Node.prototype.deregisterInput=function(e){if(this.hasInput(e)===!1)throw new Error("Input property "+e+" doesn't exist");delete this._inputs[e],delete this._inputValues[e]},Node.prototype.registerInputs=function(e){for(const t in e)this.registerInput(t,e[t])},Node.prototype.getInput=function(e){if(this.hasInput(e)===!1){console.log("Node "+this.name+": Invalid input property "+e);return}return this._inputs[e]},Node.prototype.hasInput=function(e){return e in this._inputs},Node.prototype.registerInputIfNeeded=function(){},Node.prototype.setInputValue=function(name,value){const input=this.getInput(name);if(!input){console.log("node doesn't have input",name);return}const currentInputValue=this._inputValues[name];if(isNaN(value)===!1&&currentInputValue&&currentInputValue.unit){const e=Object.assign({},currentInputValue);e.value=value,value=e}if(this._inputValues[name]=value,input.type==="color"&&this.context&&this.context.styles)value=this.context.styles.resolveColor(value);else if(input.type==="array"&&typeof value=="string")try{value=eval(value),this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"invalid-array-"+name)}catch(e){value=[],console.log(e),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"invalid-array-"+name,{showGlobally:!0,message:"Invalid array<br>"+e.toString()})}input.set.call(this,value)},Node.prototype.hasOutput=function(e){return e in this._outputs},Node.prototype.registerOutput=function(e,t){if(this.hasOutput(e))throw new Error("Output property "+e+" already registered");const n=new OutputProperty({owner:this,getter:t.get||t.getter,name:e,onFirstConnectionAdded:t.onFirstConnectionAdded,onLastConnectionRemoved:t.onLastConnectionRemoved});this._outputs[e]=n,this._outputList.push(n)},Node.prototype.deregisterOutput=function(e){if(this.hasOutput(e)===!1)throw new Error("Output property "+e+" isn't registered");const t=this._outputs[e];if(t.hasConnections())throw new Error("Output property "+e+" has connections and can't be removed");delete this._outputs[e];var n=this._outputList.indexOf(t);this._outputList.splice(n,1)},Node.prototype.registerOutputs=function(e){for(var t in e)this.registerOutput(t,e[t])},Node.prototype.registerOutputIfNeeded=function(){},Node.prototype.getOutput=function(e){if(this.hasOutput(e)===!1)throw new Error("Node "+this.name+" doesn't have a port named "+e);return this._outputs[e]},Node.prototype.connectInput=function(e,t,n){if(this.hasInput(e)===!1)throw new Error("Invalid connection, input doesn't exist. Trying to connect from "+t.name+" output "+n+" to "+this.name+" input "+e);var o=t.getOutput(n);if(o.registerConnection(this,e),this._inputConnections[e]||(this._inputConnections[e]=[]),this._inputConnections[e].push(o),t._signalsSentThisUpdate[n])this._setValueFromConnection(e,!0),this._setValueFromConnection(e,!1);else{var r=o.value;r!==void 0&&(this._setValueFromConnection(e,r),this.context&&this.context.connectionSentValue(o,o.value))}this.flagDirty()},Node.prototype.removeInputConnection=function(e,t,n){if(!this._inputConnections[e])throw new Error("Node removeInputConnection: Input doesn't exist");const o=this._inputConnections[e];for(let r=0;r<o.length;r++){const s=o[r];if(s.owner.id===t&&s.name===n){o.splice(r,1),s.owner.getOutput(n).deregisterConnection(this,e);break}}o.length===0&&delete this._valuesFromConnections[e]},Node.prototype.isInputConnected=function(e){return this._inputConnections.hasOwnProperty(e)?this._inputConnections[e].some(t=>t.owner.name!=="Component Inputs"?!0:t.owner.nodeScope.componentOwner.isInputConnected(t.name)):!1},Node.prototype.update=function(){if(this._isUpdating||this._dirty===!1)return;this._updatedAtIteration!==this.context.updateIteration&&(this._updatedAtIteration=this.context.updateIteration,this._updateIteration=0,this._cyclicLoop&&(this._cyclicLoop=!1)),this._isUpdating=!0;const e=100;try{for(;this._dirty&&!this._cyclicLoop;){this._updateDependencies(),this._dirty=!1;const t=Object.keys(this._inputValuesQueue);let n=!0;for(;n&&!this._cyclicLoop;){n=!1;for(let r=0;r<t.length;r++){const s=t[r],a=this._inputValuesQueue[s];a.length>0&&(this.setInputValue(s,a.shift()),a.length>0&&(n=!0))}const o=this._afterInputsHaveUpdatedCallbacks;this._afterInputsHaveUpdatedCallbacks=[];for(let r=0;r<o.length;r++)o[r].call(this)}this._updateIteration++,this._updateIteration>=e&&(this._cyclicLoop=!0)}}catch(t){throw this._isUpdating=!1,t}this._cyclicLoop&&(this.context.scheduleNextFrame(()=>{this.context.nodeIsDirty(this)}),this.context.editorConnection&&!this._cyclicWarningSent&&this.context.isWarningTypeEnabled("cyclicLoops")&&(this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"cyclic-loop",{showGlobally:!0,message:"Cyclic loop detected"}),this._cyclicWarningSent=!0,console.log("cycle detected",{id:this.id,name:this.name,component:this.nodeScope.componentOwner.name}))),this._isFirstUpdate=!1,this._isUpdating=!1},Node.prototype._updateDependencies=function(){for(var e in this._inputConnections)for(var t=this._inputConnections[e],n=0;n<t.length;++n)t[n].owner.update()},Node.prototype.flagDirty=function(){this._dirty||(this._dirty=!0,this.updateOnDirtyFlagging&&this._performDirtyUpdate())},Node.prototype._performDirtyUpdate=function(){this.context&&this.context.nodeIsDirty(this);for(var e=0;e<this._outputList.length;++e)this._outputList[e].flagDependeesDirty()},Node.prototype.sendValue=function(e,t){if(this.hasOutput(e)===!1){console.log("Error: Node",this.name,"doesn't have a output named",e);return}if(t===void 0)return;const n=this.getOutput(e);n.sendValue(t),this.context&&this.context.connectionSentValue(n,t)},Node.prototype.flagOutputDirty=function(e){const t=this.getOutput(e);this.sendValue(e,t.value)},Node.prototype.flagAllOutputsDirty=function(){for(const e of this._outputList)this.sendValue(e.name,e.value)},Node.prototype.sendSignalOnOutput=function(e){if(this.hasOutput(e)===!1){console.log("Error: Node",this.name,"doesn't have a output named",e);return}const t=this.getOutput(e);t.sendValue(!0),t.sendValue(!1),this._signalsSentThisUpdate[e]=!0,this.scheduleAfterInputsHaveUpdated(function(){this._signalsSentThisUpdate[e]=!1}),this.context&&this.context.connectionSentSignal(t)},Node.prototype._setValueFromConnection=function(e,t){this._valuesFromConnections[e]=t,this.queueInput(e,t)},Node.prototype._hasInputBeenSetFromAConnection=function(e){return this._valuesFromConnections.hasOwnProperty(e)},Node.prototype.queueInput=function(e,t){if(this._inputValuesQueue[e]||(this._inputValuesQueue[e]=[]),this._isFirstUpdate){const n=this._inputValuesQueue[e][0];n===!0||(n instanceof Object&&n.unit&&!(t instanceof Object)&&(t={value:t,unit:n.unit}),this._inputValuesQueue[e].length=0)}this._inputValuesQueue[e].push(t),this.flagDirty()},Node.prototype.scheduleAfterInputsHaveUpdated=function(e){this._afterInputsHaveUpdatedCallbacks.push(e),this.flagDirty()},Node.prototype.setNodeModel=function(e){this.model=e,e.on("parameterUpdated",this._onNodeModelParameterUpdated,this),e.on("variantUpdated",this._onNodeModelVariantUpdated,this),e.on("inputPortRemoved",t=>{this.hasInput(t.name)&&this.deregisterInput(t.name)},this),e.on("outputPortRemoved",t=>{this.hasOutput(t.name)&&this.deregisterOutput(t.name)},this)},Node.prototype.addDeleteListener=function(e){this._deleteListeners.push(e)},Node.prototype._onNodeDeleted=function(){this.model&&(this.model.removeListenersWithRef(this),this.model=void 0),this._deleted=!0;for(const e of this._deleteListeners)e.call(this)},Node.prototype._onNodeModelParameterUpdated=function(e){if(this.registerInputIfNeeded(e.name),e.value!==void 0)if(e.state){if(!this._getVisualStates){console.log("Node has nos visual states, but got a parameter for state",e.state);return}this._getVisualStates().indexOf(e.state)!==-1&&this.queueInput(e.name,e.value)}else this.queueInput(e.name,e.value);else{let t;const n=this.variant;e.state?n&&n.stateParameters.hasOwnProperty(e.state)&&n.stateParameters[e.state].hasOwnProperty(e.name)?t=n.stateParameters[e.state][e.name]:this.model.parameters.hasOwnProperty(e.name)?t=this.model.parameters[e.name]:n&&n.parameters.hasOwnProperty(e.name)&&(t=n.parameters[e.name]):n&&n.parameters.hasOwnProperty(e.name)&&(t=n.parameters[e.name]),t===void 0&&(t=this.context.getDefaultValueForInput(this.model.type,e.name),this._resetReactVirtualDOM&&this._resetReactVirtualDOM()),this.queueInput(e.name,t)}},Node.prototype._onNodeModelVariantUpdated=function(e){this.setVariant(e)};function guid$1(){function e(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)}return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}function NodeScope(e,t){this.context=e,this.nodes={},this.componentOwner=t,this.componentInstanceChildren={}}function verifyData(e,t){t.forEach(function(n){if(!e[n])throw new Error("Missing "+n)})}NodeScope.prototype.addConnection=function(e){try{verifyData(e,["sourceId","sourcePort","targetId","targetPort"])}catch(o){throw new Error("Error in connection: "+o.message)}try{var t=this.getNodeWithId(e.sourceId),n=this.getNodeWithId(e.targetId);n.registerInputIfNeeded(e.targetPort),t.registerOutputIfNeeded(e.sourcePort),n.connectInput(e.targetPort,t,e.sourcePort)}catch(o){console.error(o.message)}},NodeScope.prototype.setNodeParameters=function(e,t){const n=this.context.variants.getVariant(t.type,t.variant);if(n)e.setVariant(n);else{const s=t.parameters;var o=Object.keys(s);if(this.context.nodeRegister.hasNode(e.name)){var r=this.context.nodeRegister.getNodeMetadata(e.name);o.sort(function(a,l){var u=r.inputs[a],d=r.inputs[l];return(d?d.inputPriority:0)-(u?u.inputPriority:0)})}o.forEach(a=>{e.registerInputIfNeeded(a),e.hasInput(a)!==!1&&e.queueInput(a,s[a])})}},NodeScope.prototype.createNodeFromModel=async function(e,t){if(e.type==="Component Children"){if(e.parent){var n=this.getNodeWithId(e.parent.id);this.componentOwner.setChildRoot(n)}return}var o;try{o=await this.createNode(e.type,e.id),o.updateOnDirtyFlagging=t!==!1,o.setNodeModel(e)}catch(r){console.error(r.message),this.context.editorConnection&&this.context.isWarningTypeEnabled("nodescope")&&this.context.editorConnection.sendWarning(this.componentOwner.name,e.id,"nodelibrary-unknown-node",{message:r.message,showGlobally:!0});return}return e.variant&&o.setVariant&&o.setVariant(e.variant),this.setNodeParameters(o,e),e.parent&&this.insertNodeInTree(o,e),o},NodeScope.prototype.insertNodeInTree=function(e,t){var n=this.getNodeWithId(t.parent.id),o=t.parent.children.indexOf(t);if(!n.addChild)throw new Error("Node "+n.id+" of type "+n.constructor.name+" can't have children");n.addChild(e,o)},NodeScope.prototype.getNodeWithId=function(e){if(this.nodes.hasOwnProperty(e)===!1)throw new Error("Unknown node id "+e);return this.nodes[e]},NodeScope.prototype.hasNodeWithId=function(e){return this.nodes.hasOwnProperty(e)},NodeScope.prototype.createPrimitiveNode=function(e,t,n){if(t||(t=guid$1()),this.nodes.hasOwnProperty(t))throw Error("duplicate id "+t);const o=this.context.nodeRegister.createNode(e,t,this);if(n)for(const r in n)o[r]=n[r];return this.nodes[t]=o,o},NodeScope.prototype.createNode=async function(e,t,n){if(t||(t=guid$1()),this.nodes.hasOwnProperty(t))throw Error("duplicate id "+t);let o;if(this.context.nodeRegister.hasNode(e)){if(o=this.context.nodeRegister.createNode(e,t,this),n)for(const r in n)o[r]=n[r]}else o=await this.context.createComponentInstanceNode(e,t,this,n),this.componentInstanceChildren[t]=o;return this.nodes[t]=o,o},NodeScope.prototype.getNodesWithIdRecursive=function(e){function t(o,r,s){o.nodes.hasOwnProperty(r)&&s.push(o.nodes[r]);var a=Object.keys(o.nodes).filter(function(l){return o.nodes[l]instanceof ComponentInstanceNode});a.forEach(function(l){t(o.nodes[l].nodeScope,r,s)})}var n=[];return t(this,e,n),n},NodeScope.prototype.getNodesWithType=function(e){var t=this,n=Object.keys(this.nodes).filter(function(o){return t.nodes[o].name===e});return n.map(function(o){return t.nodes[o]})},NodeScope.prototype.getNodesWithTypeRecursive=function(e){var t=this;function n(){o=o.concat(t.getNodesWithType(e));var r=Object.keys(t.nodes).filter(function(s){return t.nodes[s]instanceof ComponentInstanceNode});r.forEach(function(s){var a=t.nodes[s].nodeScope.getNodesWithTypeRecursive(e);o=o.concat(a)})}var o=[];return n(),o},NodeScope.prototype.getAllNodesRecursive=function(){let e=[];return(()=>{e=e.concat(Object.values(this.nodes));var t=Object.keys(this.nodes).filter(n=>this.nodes[n]instanceof ComponentInstanceNode);t.forEach(n=>{var o=this.nodes[n].nodeScope.getAllNodesRecursive();e=e.concat(o)})})(),e},NodeScope.prototype.getAllNodesWithVariantRecursive=function(e){return this.getAllNodesRecursive().filter(t=>t.variant===e)},NodeScope.prototype.onNodeModelRemoved=function(e){var t=this.getNodeWithId(e.id);if(e.parent){var n=this.getNodeWithId(e.parent.id);n.removeChild(t)}t._onNodeDeleted(),delete this.nodes[t.id],delete this.componentInstanceChildren[t.id]},NodeScope.prototype.removeConnection=function(e){var t=this.getNodeWithId(e.targetId);t.removeInputConnection(e.targetPort,e.sourceId,e.sourcePort)},NodeScope.prototype.setComponentModel=async function(e){this.componentModel=e;const t=[];for(const o of e.getAllNodes()){const r=await this.createNodeFromModel(o,!1);r&&t.push(r)}e.getAllConnections().forEach(o=>this.addConnection(o)),t.forEach(o=>o.updateOnDirtyFlagging=!0),t.forEach(o=>{o._dirty&&o._performDirtyUpdate()}),e.on("connectionAdded",o=>this.addConnection(o),this),e.on("connectionRemoved",this.removeConnection,this),e.on("nodeAdded",this.createNodeFromModel,this);var n=this;e.on("nodeParentWillBeRemoved",function(o){if(o.type==="Component Children"){o.parent&&this.componentOwner.setChildRoot(null);return}const r=n.getNodeWithId(o.id);r.parent&&r.parent.removeChild(r)},this),e.on("nodeParentUpdated",function(o){if(o.type==="Component Children"){var r=this.getNodeWithId(o.parent.id);this.componentOwner.setChildRoot(r)}else{var s=n.getNodeWithId(o.id);n.insertNodeInTree(s,o)}},this),e.on("nodeRemoved",function(o){o.type!=="Component Children"&&n.onNodeModelRemoved(o)},this);for(const o in this.nodes){const r=this.nodes[o];r.nodeScopeDidInitialize&&r.nodeScopeDidInitialize()}},NodeScope.prototype.reset=function(){this.componentModel&&(this.componentModel.removeListenersWithRef(this),this.componentModel=void 0),Object.keys(this.nodes).forEach(e=>{this.nodes.hasOwnProperty(e)&&this.deleteNode(this.nodes[e])})},NodeScope.prototype.deleteNode=function(e){if(this.nodes.hasOwnProperty(e.id)===!1){console.error("Node doesn't belong to this scope",e.id,e.name);return}if(e.parent&&e.parent.removeChild(e),e.getChildren&&e.getChildren().forEach(t=>{e.removeChild(t),(t.parentNodeScope||t.nodeScope).deleteNode(t)}),this.componentModel){const t=this.componentModel.getConnectionsFrom(e.id),n=this.componentModel.getConnectionsTo(e.id);t.concat(n).forEach(o=>{this.nodes.hasOwnProperty(o.targetId)&&this.nodes.hasOwnProperty(o.sourceId)&&this.removeConnection(o)})}e._onNodeDeleted(),delete this.nodes[e.id],delete this.componentInstanceChildren[e.id]},NodeScope.prototype.sendEventFromThisScope=function(e,t,n,o,r){if(o)for(var s=this.getNodesWithType("Event Receiver").filter(function(g){return g.getChannelName()===e}),a=0;a<s.length;a++){var l=s[a].handleEvent(t);if(l)return!0}if(n==="parent"&&this.componentOwner.parentNodeScope){const g=this.componentOwner.parent?this.componentOwner.parent.nodeScope:this.componentOwner.parentNodeScope;if(!g)return;g.sendEventFromThisScope(e,t,n,!0)}else if(n==="children"){var u=this.nodes;for(var d in u){var h=u[d].children;h&&h.forEach(g=>{if(g.name&&this.context.hasComponentModelWithName(g.name)){var b=g.nodeScope.sendEventFromThisScope(e,t,n,!0);if(b)return!0}})}}else if(n==="siblings"){let g;if(this.componentOwner.parent?g=this.componentOwner.parent.nodeScope:g=this.componentOwner.parentNodeScope,!g)return;var u=g.nodes;for(var d in u){var h=u[d].children;if(h){var f=h.filter(A=>A.name&&this.context.hasComponentModelWithName(A.name)&&A.nodeScope!==this);f.forEach(A=>{var v=A.nodeScope.sendEventFromThisScope(e,t,null,!0);if(v)return!0})}}}return!1};let componentIdCounter=0;function ComponentInstanceNode(e,t,n){Node.call(this,e,t),this.nodeScope=new NodeScope(e,this),this.parentNodeScope=n,this._internal.childRoot=null,this._internal.componentOutputValues={},this._internal.componentOutputs=[],this._internal.componentInputs=[],this._internal.inputValues={},this._internal.roots=[],this._internal.instanceId="__$ndl_componentInstaceId"+componentIdCounter,this.nodeScope.modelScope=n?n.modelScope:void 0,componentIdCounter++}ComponentInstanceNode.prototype=Object.create(Node.prototype,{setComponentModel:{value:async function(e){this.componentModel=e;var t=this;await this.nodeScope.setComponentModel(e),this._internal.componentInputs=this.nodeScope.getNodesWithType("Component Inputs"),this._internal.componentOutputs=this.nodeScope.getNodesWithType("Component Outputs"),Object.values(e.getInputPorts()).forEach(this.registerComponentInputPort.bind(this)),Object.values(e.getOutputPorts()).forEach(this.registerComponentOutputPort.bind(this));const n=e.roots||[];this._internal.roots=n.map(o=>this.nodeScope.getNodeWithId(o)),e.on("rootAdded",o=>{this._internal.roots.push(this.nodeScope.getNodeWithId(o)),this.forceUpdate()},this),e.on("rootRemoved",function(o){const r=this._internal.roots.findIndex(s=>s.id===o);r!==-1&&this._internal.roots.splice(r,1),this.forceUpdate()},this),e.on("inputPortAdded",this.registerComponentInputPort.bind(this),this),e.on("outputPortAdded",this.registerComponentOutputPort.bind(this),this),e.on("inputPortRemoved",function(o){t.hasInput(o.name)&&t.deregisterInput(o.name)},this),e.on("outputPortRemoved",function(o){this.hasOutput(o.name)&&t.deregisterOutput(o.name)},this),e.on("nodeAdded",function(o){o.type==="Component Inputs"?t._internal.componentInputs.push(t.nodeScope.getNodeWithId(o.id)):o.type==="Component Outputs"&&t._internal.componentOutputs.push(t.nodeScope.getNodeWithId(o.id))},this),e.on("nodeRemoved",function(o){function r(s,a){return s.filter(l=>l.id!==a)}o.type==="Component Inputs"?t._internal.componentInputs=r(t._internal.componentInputs,o.id):o.type==="Component Outputs"&&(t._internal.componentOutputs=r(t._internal.componentOutputs,o.id))},this),e.on("renamed",function(o){t.name=o.newName},this)}},_onNodeDeleted:{value(){this.componentModel&&(this.componentModel.removeListenersWithRef(this),this.componentModel=void 0),this.nodeScope.reset(),Node.prototype._onNodeDeleted.call(this)}},registerComponentInputPort:{value(e){this.registerInput(e.name,{set(t){this._internal.inputValues[e.name]=t,this._internal.componentInputs.forEach(function(n){n.registerOutputIfNeeded(e.name),n.flagOutputDirty(e.name)})}})}},registerComponentOutputPort:{value(e){this.registerOutput(e.name,{getter(){return this._internal.componentOutputValues[e.name]}})}},setOutputFromComponentOutput:{value(e,t){this.hasOutput(e)!==!1&&(this._internal.creatorCallbacks&&this._internal.creatorCallbacks.onOutputChanged&&this._internal.creatorCallbacks.onOutputChanged(e,t,this._internal.componentOutputValues[e]),this._internal.componentOutputValues[e]=t,this.flagOutputDirty(e))}},setChildRoot:{value(e){const t=this._internal.childRoot,n=e;if(this._internal.childRoot=n,this.model&&this.model.children){const o=this.parentNodeScope,r=this.model.children.filter(s=>s.type!=="Component Children").map(s=>o.getNodeWithId(s.id));if(t)for(let s=0;s<r.length;s++)t.isChild(r[s])&&t.removeChild(r[s]);if(n)for(let s=0;s<r.length;s++){const a=r[s],l=a.model.parent.children.indexOf(a.model);this.addChild(a,l)}}}},getChildRootIndex:{value(){if(!this._internal.childRoot||!this._internal.childRoot.model||!this._internal.childRoot.model.children)return 0;for(var e=this._internal.childRoot.model.children,t=0;t<e.length;t++)if(e[t].type==="Component Children")return t;return 0}},getChildRoot:{value(){return this._internal.childRoot?this._internal.childRoot:null}},getRoots:{value(){return this._internal.roots}},triggerDidMount:{value(){this._internal.roots.forEach(e=>{e.triggerDidMount&&e.triggerDidMount()})}},render:{value(){return this._internal.roots.length===0?null:this._internal.roots[0].render()}},setChildIndex:{value(e){this.getRoots().forEach(t=>t.setChildIndex&&t.setChildIndex(e))}},addChild:{value(e,t){this.getChildRoot().addChild(e,t+this.getChildRootIndex())}},removeChild:{value(e){this.getChildRoot().removeChild(e)}},getChildren:{value(e){const t=this.getChildRoot();return t?t.getChildren():[]}},isChild:{value(e){return this.getChildRoot()?this.getChildRoot().isChild(e):!1}},contains:{value(e){return this.getRoots().some(t=>t.contains&&t.contains(e))}},_performDirtyUpdate:{value(){Node.prototype._performDirtyUpdate.call(this);for(var e=this._internal.componentInputs,t=0,n=e.length;t<n;t++)e[t].flagDirty();this._internal.componentOutputs.forEach(function(o){o.flagDirty()})}},getRef:{value(){const e=this._internal.roots[0];return e?e.getRef():void 0}},update:{value(){Node.prototype.update.call(this),this._internal.componentOutputs.forEach(function(e){e.update()})}},forceUpdate:{value(){this.parent&&(this.parent.cachedChildren=void 0,this.parent.forceUpdate())}},getInstanceId:{value(){return this._internal.instanceId}}}),ComponentInstanceNode.prototype.constructor=ComponentInstanceNode;function NodeContext(e){e=e||{},e.runningInEditor=e.hasOwnProperty("runningInEditor")?e.runningInEditor:!1,this._dirtyNodes=[],this.callbacksAfterUpdate=[],this.graphModel=e.graphModel,this.platform=e.platform,this.eventEmitter=new EventEmitter$2,this.eventEmitter.setMaxListeners(1e6),this.eventSenderEmitter=new EventEmitter$2,this.eventSenderEmitter.setMaxListeners(1e6),this.globalValues={},this.globalsEventEmitter=new EventEmitter$2,this.globalsEventEmitter.setMaxListeners(1e6),this.runningInEditor=e.runningInEditor,this.currentFrameTime=0,this.frameNumber=0,this.updateIteration=0,this.nodeRegister=new NodeRegister(this),this.timerScheduler=new TimerScheduler(this.scheduleUpdate.bind(this)),this.componentModels={},this.debugInspectorsEnabled=!1,this.connectionsToPulse={},this.connectionsToPulseChanged=!1,this.debugInspectors={},this.connectionPulsingCallbackScheduled=!1,this.editorConnection=e.editorConnection,this.rootComponent=void 0,this._outputHistory={},this._signalHistory={},this.warningTypes={},this.bundleFetchesInFlight=new Map,this.variants=new Variants({graphModel:this.graphModel,getNodeScope:()=>this.rootComponent?this.rootComponent.nodeScope:null}),this.editorConnection&&(this.editorConnection.on("debugInspectorsUpdated",t=>{this.onDebugInspectorsUpdated(t)}),this.editorConnection.on("getConnectionValue",({clientId:t,connectionId:n})=>{if(this.editorConnection.clientId!==t)return;const o=this._outputHistory[n];this.editorConnection.sendConnectionValue(n,o?o.value:void 0)}))}NodeContext.prototype.setRootComponent=function(e){this.rootComponent=e},NodeContext.prototype.getCurrentTime=function(){return this.platform.getCurrentTime()},NodeContext.prototype.onDebugInspectorsUpdated=function(e){this.debugInspectorsEnabled&&(e=e.map(t=>{if(t.type==="connection"){const n=t.connection;t.id=n.fromId+n.fromProperty}else t.type==="node"&&(t.id=t.nodeId);return t}),this.debugInspectors={},e.forEach(t=>this.debugInspectors[t.id]=t),this.sendDebugInspectorValues())},NodeContext.prototype.updateDirtyNodes=function(){var e,t,n=!0,o=0;for(this.updateIteration++,this.isUpdating=!0;n&&o<10;){var r=this._dirtyNodes;for(this._dirtyNodes=[],e=0,t=r.length;e<t;++e)try{r[e]._deleted||r[e].update()}catch(a){console.error(a,a.stack)}var s=this.callbacksAfterUpdate;for(this.callbacksAfterUpdate=[],e=0,t=s.length;e<t;e++)try{s[e]()}catch(a){console.error(a)}n=this.callbacksAfterUpdate.length>0||this._dirtyNodes.length>0,o++}this.isUpdating=!1},NodeContext.prototype.update=function(){this.frameNumber++,this.updateDirtyNodes(),this.timerScheduler.hasPendingTimers()&&(this.scheduleUpdate(),this.timerScheduler.runTimers(this.currentFrameTime)),this.debugInspectorsEnabled&&this.sendDebugInspectorValues()},NodeContext.prototype.reset=function(){this.eventEmitter.emit("applicationDataReloaded");var e=this.eventEmitter;["frameStart","frameEnd"].forEach(function(t){e.removeAllListeners(t)}),this.globalValues={},this._dirtyNodes.length=0,this.callbacksAfterUpdate.length=0,this.timerScheduler.runningTimers=[],this.timerScheduler.newTimers=[],this.rootComponent=void 0,this.clearDebugInspectors()},NodeContext.prototype.nodeIsDirty=function(e){this._dirtyNodes.push(e),this.scheduleUpdate()},NodeContext.prototype.scheduleUpdate=function(){this.eventEmitter.emit("scheduleUpdate")},NodeContext.prototype.scheduleAfterUpdate=function(e){this.callbacksAfterUpdate.push(e),this.scheduleUpdate()},NodeContext.prototype.scheduleNextFrame=function(e){this.eventEmitter.once("frameStart",e),this.scheduleUpdate()},NodeContext.prototype.setGlobalValue=function(e,t){this.globalValues[e]=t,this.globalsEventEmitter.emit(e)},NodeContext.prototype.getGlobalValue=function(e){return this.globalValues[e]},NodeContext.prototype.registerComponentModel=function(e){if(this.componentModels.hasOwnProperty(e.name))throw new Error("Duplicate component name "+e.name);this.componentModels[e.name]=e;var t=this;e.on("renamed",function(n){delete t.componentModels[n.oldName],t.componentModels[n.newName]=e},this)},NodeContext.prototype.deregisterComponentModel=function(e){this.componentModels.hasOwnProperty(e.name)&&(this.componentModels[e.name].removeListenersWithRef(this),delete this.componentModels[e.name])},NodeContext.prototype.fetchComponentBundle=async function(e){const t=async n=>{let o=`${Noodl.Env.BaseUrl||"/"}noodl_bundles/${n}.json`;const r=await fetch(o);if(r.status===404)throw new Error("Component not found "+n);const s=await r.json();for(const a of s)this.graphModel.hasComponentWithName(a.name)===!1&&await this.graphModel.importComponentFromEditorData(a)};if(this.bundleFetchesInFlight.has(e))await this.bundleFetchesInFlight.get(e);else{const n=t(e);this.bundleFetchesInFlight.set(e,n),await n}},NodeContext.prototype.getComponentModel=async function(e){if(!e)throw new Error("Component instance must have a name");if(this.componentModels.hasOwnProperty(e)===!1){const t=this.graphModel.getBundleContainingComponent(e);if(!t)throw new Error("Can't find component model for "+e);for(const n of this.graphModel.getBundleDependencies(t))this.fetchComponentBundle(n);await this.fetchComponentBundle(t)}return this.componentModels[e]},NodeContext.prototype.hasComponentModelWithName=function(e){return this.componentModels.hasOwnProperty(e)},NodeContext.prototype.createComponentInstanceNode=async function(e,t,n,o){var r=new ComponentInstanceNode(this,t,n);r.name=e;for(const a in o)r[a]=o[a];const s=await this.getComponentModel(e);return await r.setComponentModel(s),r},NodeContext.prototype._formatConnectionValue=function(e){if(typeof e=="object"&&e&&e.constructor&&e.constructor.name==="Node")e="<Node> "+e.name;else if(typeof e=="object"&&typeof window<"u"&&e instanceof HTMLElement)e=`DOM Node <${e.tagName}>`;else{if(typeof e=="string"&&!e.startsWith("[Signal]"))return'"'+e+'"';if(Number.isNaN(e))return"NaN"}return e},NodeContext.prototype.connectionSentValue=function(e,t){if(!this.editorConnection||!this.editorConnection.isConnected()||!this.debugInspectorsEnabled)return;const n=this.getCurrentTime();if(this._outputHistory[e.id]={value:t,timestamp:n},this.connectionsToPulse.hasOwnProperty(e.id)){this.connectionsToPulse[e.id].timestamp=n;return}const o=[];e.connections.forEach(r=>{o.push(e.owner.id+e.name+r.node.id+r.inputPortName)}),this.connectionsToPulse[e.id]={timestamp:n,connections:o},this.connectionsToPulseChanged=!0,this.connectionPulsingCallbackScheduled===!1&&(this.connectionPulsingCallbackScheduled=!0,setTimeout(this.clearOldConnectionPulsing.bind(this),100))},NodeContext.prototype.connectionSentSignal=function(e){const t=e.id;this._signalHistory.hasOwnProperty(t)||(this._signalHistory[t]={count:0}),this._signalHistory[t].count++,this.connectionSentValue(e,"[Signal] Trigger count "+this._signalHistory[t].count)},NodeContext.prototype.clearDebugInspectors=function(){this.debugInspectors={},this.connectionsToPulse={},this.editorConnection.sendPulsingConnections(this.connectionsToPulse)},NodeContext.prototype.clearOldConnectionPulsing=function(){this.connectionPulsingCallbackScheduled=!1;var e=this.getCurrentTime(),t=this,n=Object.keys(this.connectionsToPulse);n.forEach(function(o){var r=t.connectionsToPulse[o];e-r.timestamp>100&&(t.connectionsToPulseChanged=!0,delete t.connectionsToPulse[o])}),this.connectionsToPulseChanged&&(this.connectionsToPulseChanged=!1,this.editorConnection.sendPulsingConnections(this.connectionsToPulse)),Object.keys(this.connectionsToPulse).length>0&&(this.connectionPulsingCallbackScheduled=!0,setTimeout(this.clearOldConnectionPulsing.bind(this),500))},NodeContext.prototype._getDebugInspectorValueForNode=function(e){if(!this.rootComponent)return;const t=this.rootComponent.nodeScope.getNodesWithIdRecursive(e),n=t[t.length-1];if(n&&n.getInspectInfo){const o=n.getInspectInfo();if(o!==void 0)return{type:"node",id:e,value:o}}},NodeContext.prototype.sendDebugInspectorValues=function(){const e=[];for(const t in this.debugInspectors){const n=this.debugInspectors[t];if(n.type==="connection"&&this._outputHistory.hasOwnProperty(t)){const o=this._outputHistory[t].value;e.push({type:"connection",id:t,value:this._formatConnectionValue(o)})}else if(n.type==="node"){const o=this._getDebugInspectorValueForNode(t);o&&e.push(o)}}e.length>0&&this.editorConnection.sendDebugInspectorValues(e),this.connectionsToPulseChanged&&(this.connectionsToPulseChanged=!1,this.editorConnection.sendPulsingConnections(this.connectionsToPulse))},NodeContext.prototype.setDebugInspectorsEnabled=function(e){this.debugInspectorsEnabled=e,this.editorConnection.debugInspectorsEnabled=e,e&&this.sendDebugInspectorValues()},NodeContext.prototype.sendGlobalEventFromEventSender=function(e,t){this.eventSenderEmitter.emit(e,t)},NodeContext.prototype.setPopupCallbacks=function({onShow:e,onClose:t}){this.onShowPopup=e,this.onClosePopup=t},NodeContext.prototype.showPopup=async function(e,t,n){if(!this.onShowPopup)return;const o=this.rootComponent.nodeScope,r=await o.createNode(e);for(const d in t)r.setInputValue(d,t[d]);r.popupParent=n?.senderNode||null;const s=o.createPrimitiveNode("Group");s.setInputValue("flexDirection","node"),s.setInputValue("cssClassName","noodl-popup");const a=this.graphModel.getSettings().bodyScroll;s.setInputValue("position",a?"fixed":"absolute");var l=r.nodeScope.getNodesWithType("NavigationClosePopup");if(l&&l.length>0)for(var u=0;u<l.length;u++)l[u]._setCloseCallback((d,h)=>{this.scheduleNextFrame(()=>{o.hasNodeWithId(s.id)&&(this.onClosePopup(s),o.deleteNode(s),n&&n.onClosePopup&&n.onClosePopup(d,h))})});this.onShowPopup(s),requestAnimationFrame(()=>{s.addChild(r)})},NodeContext.prototype.setWarningTypes=function(e){Object.assign(this.warningTypes,e)},NodeContext.prototype.isWarningTypeEnabled=function(e){return this.warningTypes.hasOwnProperty(e)?!!this.warningTypes[e]:!0},NodeContext.prototype.getDefaultValueForInput=function(e,t){if(this.nodeRegister.hasNode(e)===!1)return;const n=this.nodeRegister.getNodeMetadata(e).inputs[t];if(n)return n.type.defaultUnit?{value:n.default,unit:n.type.defaultUnit}:n.default};function EventSender$2(){this.listeners={},this.listenersWithRefs={}}EventSender$2.prototype.on=function(e,t,n){n?(this.listenersWithRefs.hasOwnProperty(e)||(this.listenersWithRefs[e]=new Map),this.listenersWithRefs[e].get(n)||this.listenersWithRefs[e].set(n,[]),this.listenersWithRefs[e].get(n).push(t)):(this.listeners.hasOwnProperty(e)||(this.listeners[e]=[]),this.listeners[e].push(t))},EventSender$2.prototype.removeListenersWithRef=function(e){Object.keys(this.listenersWithRefs).forEach(t=>{const n=this.listenersWithRefs[t];n.has(e)&&n.delete(e)})},EventSender$2.prototype.removeAllListeners=function(e){e?(delete this.listeners[e],delete this.listenersWithRefs[e]):(this.listeners={},this.listenersWithRefs={})},EventSender$2.prototype.emit=async function(e,t){const n=this.listeners[e];if(n)for(let r=0;r<n.length;r++){const s=n[r];await Promise.resolve(s.call(null,t))}const o=this.listenersWithRefs[e];if(o)for(const[r,s]of o)for(const a of s)await Promise.resolve(a.call(r,t))};function Services(){}Services.events=new EventEmitter$2;class ActiveWarnings{constructor(){this.currentWarnings=new Map}setWarning(t,n,o){if(this.currentWarnings.has(t)){const r=this.currentWarnings.get(t);return r[n]===o?!1:(r[n]=o,!0)}else return this.currentWarnings.set(t,{[n]:o}),!0}clearWarning(t,n){const o=this.currentWarnings.get(t);return!o||!o[n]?!1:(delete o[n],Object.keys(o).length===0&&delete this.currentWarnings.delete(t),!0)}clearWarnings(t){return this.currentWarnings.has(t)===!1?!1:(this.currentWarnings.delete(t),!0)}}function EditorConnection(e){var t=e||{};EventSender$2.call(this),this.runtimeType=t.runtimeType,this.platform=t.platform,this.ws=t.platform&&t.platform.webSocketClass||(typeof WebSocket<"u"?WebSocket:void 0),this.wsOptions=t.platform&&t.platform.webSocketOptions||void 0,this.reconnectOnClose=!0,this.enableDebugger=!1,this.lastSendTimestamp=0,this.sendQueue=[],this.sendTimer=void 0,this.activeWarnings=new ActiveWarnings}EditorConnection.prototype=Object.create(EventSender$2.prototype),EditorConnection.prototype.constructor=EditorConnection,EditorConnection.prototype.isRunningLocally=function(){var e=this.platform.isRunningLocally&&this.platform.isRunningLocally()||typeof document<"u"&&(document.location.hostname==="localhost"||document.location.hostname==="127.0.0.1");return e},EditorConnection.prototype.connect=function(e){this.socket=this.wsOptions?new this.ws(e,this.wsOptions):new this.ws(e);var t=this;this.socket.addEventListener("open",function(){t.clientId=guid$1(),t.socket.send(JSON.stringify({cmd:"register",type:"viewer",clientId:t.clientId})),t.emit("connected")}),this.socket.addEventListener("close",function(n){t.reconnectOnClose&&t.reconnect(e),console.log("Editor connection closed",n.code,n.reason),t.emit("connectionClosed")}),this.socket.addEventListener("error",function(n){console.log("Editor connection error, trying to reconnect")}),this.socket.addEventListener("message",async n=>{const o=typeof n.data=="string"?n.data:await n.data.text(),r=JSON.parse(o);let s;r.cmd==="registered"||(r.cmd==="export"?(s=JSON.parse(r.content),r.type==="full"&&r.target===this.clientId&&t.emit("exportDataFull",s)):r.cmd==="hoverStart"?t.emit("hoverStart",r.content.id):r.cmd==="hoverEnd"?t.emit("hoverEnd",r.content.id):r.cmd==="refresh"?t.emit("reload"):r.cmd==="debugInspectors"?this.debugInspectorsEnabled&&(s=JSON.parse(r.content),t.emit("debugInspectorsUpdated",s.inspectors)):r.cmd==="debuggingEnabled"?t.isRunningLocally()&&(s=JSON.parse(r.content),t.emit("debuggingEnabledChanged",s.enabled)):r.cmd==="getConnectionValue"?t.isRunningLocally()&&(s=JSON.parse(r.content),await t.emit("getConnectionValue",{clientId:s.clientId,connectionId:s.connectionId})):r.cmd==="modelUpdate"?await t.emit("modelUpdate",r.content):r.cmd==="publish"?Services.pubsub.routeMessage(r):r.cmd==="noodlModules"?t.emit("noodlModules",JSON.parse(r.content)):r.cmd==="mqttUpdate"?t.emit("mqttUpdate",r.content):r.cmd==="activeComponentChanged"?t.emit("activeComponentChanged",r.component):console.log("Command not implemented",r))})},EditorConnection.prototype.reconnect=function(e){var t=this;setTimeout(function(){t.connect(e)},2e3)},EditorConnection.prototype.isConnected=function(){return this.socket!==void 0&&this.socket.readyState===this.ws.OPEN};const getCircularReplacer=()=>{const e=new WeakSet;return(t,n)=>{if(typeof n=="object"&&n!==null){if(e.has(n))return"[Circular]";e.add(n)}return n}};EditorConnection.prototype.send=function(e){const t=this.platform.getCurrentTime(),n=t-this.lastSendTimestamp,o=r=>{try{this.socket.send(JSON.stringify(r))}catch(s){if(s.message&&s.message.startsWith("Converting circular"))try{this.socket.send(JSON.stringify(r,getCircularReplacer()))}catch(a){console.log("failed to send message to editor",r,a)}else console.log("failed to send message to editor",r,s)}};n<200||this.sendTimer||!this.isConnected()?(this.sendQueue.push(e),this.sendTimer||(this.sendTimer=setTimeout(()=>{if(this.isConnected()===!1)return;const r=50;for(let s=0;s<this.sendQueue.length;s+=r){const a=this.sendQueue.slice(s,s+r);o(a)}this.sendQueue=[],this.sendTimer=void 0,this.lastSendTimestamp=this.platform.getCurrentTime()},100))):(this.lastSendTimestamp=t,o(e))},EditorConnection.prototype.sendInspectId=function(e){this.send({cmd:"select",type:"viewer",content:JSON.stringify({id:e})})},EditorConnection.prototype.sendSelectComponent=function(e){this.send({cmd:"select",type:"viewer",content:JSON.stringify({componentName:e})})},EditorConnection.prototype.sendPulsingConnections=function(e){var t=[];Object.keys(e).forEach(function(n){var o=e[n];t=t.concat(o.connections)}),this.send({cmd:"connectiondebugpulse",type:"viewer",content:JSON.stringify({connectionsToPulse:t})})},EditorConnection.prototype.sendDebugInspectorValues=function(e){this.send({cmd:"debuginspectorvalues",type:"viewer",content:{inspectors:e}})},EditorConnection.prototype.sendConnectionValue=function(e,t){this.send({cmd:"connectionValue",type:"viewer",content:{connectionId:e,value:t}})};const dynamicPortsHash={};function _detectRename(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}}EditorConnection.prototype.sendDynamicPorts=function(e,t,n){var o=JSON.stringify(t);if(dynamicPortsHash[e]!==o){if(dynamicPortsHash[e]&&t&&n&&n.detectRenamed){var r=Array.isArray(n.detectRenamed)?n.detectRenamed:[n.detectRenamed],s=[];r.forEach(a=>{var l=JSON.parse(dynamicPortsHash[e]),u=[].concat(t);a.prefix&&(l=l.filter(h=>h.name.startsWith(a.prefix)),u=u.filter(h=>h.name.startsWith(a.prefix))),a.plug&&(l=l.filter(h=>h.plug===a.plug),u=u.filter(h=>h.plug===a.plug)),u=u.map(h=>h.name.substring((a.prefix||"").length)),l=l.map(h=>h.name.substring((a.prefix||"").length));var d=_detectRename(l,u);d&&s.push({plug:a.plug,patterns:[(a.prefix||"")+"{{*}}"],before:d.before,after:d.after})}),s.length>0&&(n.renamed=s),delete n.detectRenamed}dynamicPortsHash[e]=o,this.send({cmd:"instanceports",type:"viewer",content:JSON.stringify({nodeid:e,ports:t,options:n})})}},EditorConnection.prototype.sendWarning=function(e,t,n,o){this.activeWarnings.setWarning(t,n,o)&&this.send({cmd:"showwarning",type:"viewer",content:JSON.stringify({componentName:e,nodeId:t,key:n,warning:o})})},EditorConnection.prototype.clearWarning=function(e,t,n){this.activeWarnings.clearWarning(t,n)&&this.send({cmd:"showwarning",type:"viewer",content:JSON.stringify({componentName:e,nodeId:t,key:n,warning:void 0})})},EditorConnection.prototype.clearWarnings=function(e,t){this.activeWarnings.clearWarnings(t)&&this.send({cmd:"clearwarnings",type:"viewer",content:JSON.stringify({componentName:e,nodeId:t})})},EditorConnection.prototype.sendPatches=function(e){this.send({cmd:"patchproject",type:"viewer",content:JSON.stringify(e)})},EditorConnection.prototype.requestFullExport=function(){this.send({cmd:"register",type:"viewer"})},EditorConnection.prototype.requestNoodlModules=function(){this.send({cmd:"getNoodlModules",type:"viewer"})};var serviceRequests={};EditorConnection.prototype.sendServiceRequest=function(e,t){e.token=guid$1(),e.clientId=this.clientId,serviceRequests[e.token]=t,this.send(e)},EditorConnection.prototype.close=function(){this.reconnectOnClose=!1,this.isConnected()!==!1&&this.socket.close()},EditorConnection.prototype.sendNodeLibrary=function(e){this.send({cmd:"nodelibrary",type:"viewer",runtimeType:this.runtimeType,content:e,clientId:this.clientId})},EditorConnection.prototype.sendComponentMetadata=function(e,t,n){this.send({cmd:"componentMetadata",type:"viewer",content:JSON.stringify({componentName:e,key:t,data:n})})},EditorConnection.prototype.sendProjectMetadata=function(e,t){this.send({cmd:"projectMetadata",type:"viewer",content:JSON.stringify({key:e,data:t})})};function formatDynamicPorts(e){const t=[];for(const n of e.dynamicports)if(n.ports||n.template||n.port||n.channelPort)t.push(n);else if(n.inputs||n.outputs){const o=[];if(n.inputs)for(const s of n.inputs)o.push(formatPort(s,e.inputs[s],"input"));if(n.outputs)for(const s of n.outputs)o.push(formatPort(s,e.outputs[s],"output"));const r={name:n.name||"conditionalports/basic",condition:n.condition,ports:o};t.push(r)}return t}function formatPort(e,t,n){var o={name:e,type:t.type,plug:n};return t.group&&(o.group=t.group),t.displayName&&(o.displayName=t.displayName),t.description&&(o.description=t.description),t.editorName&&(o.editorName=t.editorName),t.default!==void 0&&(o.default=t.default),t.hasOwnProperty("index")&&(o.index=t.index),t.tooltip&&(o.tooltip=t.tooltip),t.tab&&(o.tab=t.tab),t.popout&&(o.popout=t.popout),t.allowVisualStates&&(o.allowVisualStates=t.allowVisualStates),o}function generateNodeLibrary(e){var t={typecasts:[{from:"string",to:["number","boolean","image","color","enum","textStyle","dimension","array","object"]},{from:"boolean",to:["number","string","signal"]},{from:"number",to:["boolean","string","dimension"]},{from:"date",to:["string"]},{from:"signal",to:["boolean","number"]},{from:"image",to:[]},{from:"cloudfile",to:["string","image"]},{from:"color",to:[]},{from:"enum",to:[]},{from:"object",to:[]},{from:"domelement",to:[]},{from:"reference",to:[]},{from:"font",to:[]},{from:"textStyle",to:["string"]},{from:"collection",to:["array"]},{from:"array",to:["collection"]}],dynamicports:[{type:"conditionalports",name:"basic"},{type:"expand",name:"basic"}],colors:{nodes:{component:{base:"#643D8B",baseHighlighted:"#79559b",header:"#4E2877",headerHighlighted:"#643d8b",outline:"#4E2877",outlineHighlighted:"#b58900",text:"#dbd0e4"},visual:{base:"#315272",baseHighlighted:"#4d6784",header:"#173E5D",headerHighlighted:"#315272",outline:"#173E5D",outlineHighlighted:"#b58900",text:"#cfd5de"},data:{base:"#465524",baseHighlighted:"#5b6a37",header:"#314110",headerHighlighted:"#465524",outline:"#314110",outlineHighlighted:"#b58900",text:"#d2d6c5"},javascript:{base:"#7E3660",baseHighlighted:"#944e74",header:"#67214B",headerHighlighted:"#7e3660",outline:"#67214B",outlineHighlighted:"#d57bab",text:"#e4cfd9"},default:{base:"#4C4F59",baseHighlighted:"#62656e",header:"#373B45",headerHighlighted:"#4c4f59",outline:"#373B45",outlineHighlighted:"#b58900",text:"#d3d4d6"}},connections:{signal:{normal:"#006f82",highlighted:"#7ec2cf",pulsing:"#ffffff"},default:{normal:"#875d00",highlighted:"#e5ae32",pulsing:"#ffffff"}}},nodetypes:[{name:"Component Children",shortDesc:"This node is a placeholder for where children of this component will be inserted.",docs:"https://docs.noodl.net/nodes/component-utilities/component-children",color:"component",allowAsChild:!0,category:"Visual",haveComponentChildren:["Visual"]}]},n=Object.keys(e._constructors);n.forEach(function(s){var a=e._constructors[s].metadata,l={name:s,searchTags:a.searchTags};t.nodetypes.push(l),a.version&&(l.version=a.version),a.displayNodeName&&(l.displayNodeName=a.displayNodeName),a.nodeDoubleClickAction&&(l.nodeDoubleClickAction=a.nodeDoubleClickAction),a.shortDesc&&(l.shortDesc=a.shortDesc),a.module&&(l.module=a.module),a.deprecated&&(l.deprecated=!0),a.haveComponentPorts&&(l.haveComponentPorts=!0),a.category==="Visual"&&(l.allowAsChild=!0,l.allowAsExportRoot=!0,l.color="visual"),a.allowAsExportRoot!==void 0&&(l.allowAsExportRoot=a.allowAsExportRoot),a.allowChildren&&(l.allowChildrenWithCategory=["Visual"],l.color="visual"),a.allowChildrenWithCategory&&(l.allowChildrenWithCategory=a.allowChildrenWithCategory),a.singleton&&(l.singleton=!0),a.allowAsChild&&(l.allowAsChild=!0),a.docs&&(l.docs=a.docs),a.shortDocs?l.shortDocs=a.shortDocs:a.docs&&a.docs.indexOf("https://docs.noodl.net")===0&&(l.shortDocs=a.docs.replace("/#","")+"-short.md"),l.category=a.category,a.panels&&(l.panels=a.panels),a.usePortAsLabel&&(l.usePortAsLabel=a.usePortAsLabel,l.portLabelTruncationMode=a.portLabelTruncationMode),a.color&&(l.color=a.color),a.dynamicports&&(l.dynamicports=formatDynamicPorts(a)),a.exportDynamicPorts&&(l.exportDynamicPorts=a.exportDynamicPorts),a.visualStates&&(l.visualStates=a.visualStates),a.useVariants&&(l.useVariants=a.useVariants),a.connectionPanel&&(l.connectionPanel=a.connectionPanel),l.ports=[];var u=l.dynamicports||[],d={},h={};u.filter(g=>g.channelPort!==void 0).forEach(g=>{h[g.channelPort.plug+"/"+g.channelPort.name]=!0}),u.length&&(l.dynamicports=u),Object.keys(a.inputs).forEach(function(g){if(!(d.hasOwnProperty("input/"+g)||h.hasOwnProperty("input/"+g))){var b=a.inputs[g];b.exportToEditor!==!1&&l.ports.push(formatPort(g,b,"input"))}});function f(g,b){var _={name:g,type:b.type,plug:"output"};b.group&&(_.group=b.group),b.displayName&&(_.displayName=b.displayName),b.editorName&&(_.editorName=b.editorName),b.hasOwnProperty("index")&&(_.index=b.index),l.ports.push(_)}Object.keys(a.outputs).forEach(function(g){if(!(d.hasOwnProperty("output/"+g)||h.hasOwnProperty("output/"+g))){var b=a.outputs[g];f(g,b)}})});const o=[{name:"UI Elements",description:"Buttons, inputs, containers, media",type:"visual",subCategories:[{name:"Basic Elements",items:["Group","net.noodl.visual.columns","Text","Image","Video","Circle","net.noodl.visual.icon"]},{name:"UI Controls",items:["net.noodl.controls.button","net.noodl.controls.checkbox","net.noodl.controls.options","net.noodl.controls.radiobutton","Radio Button Group","net.noodl.controls.range","net.noodl.controls.textinput"]}]},{name:"Navigation & Popups",description:"Page routing, navigation, popups",type:"logic",subCategories:[{name:"Navigation",items:["Router","RouterNavigate","PageInputs","net.noodl.externallink","PageStackNavigateToPath"]},{name:"Component Stack",items:["Page Stack","PageStackNavigate","PageStackNavigateBack"]},{name:"Popups",items:["NavigationShowPopup","NavigationClosePopup"]}]},{name:"Logic & Utilities",description:"Logic, events, string manipulation",type:"logic",subCategories:[{name:"General Utils",items:["States","Value Changed","Timer","Color Blend","Number Remapper","Counter","Drag","net.noodl.animatetovalue"]},{name:"Logic",items:["Boolean To String","Switch","And","Or","Condition","Inverter"]},{name:"Events",items:["Event Sender","Event Receiver"]},{name:"String Manipulation",items:["Substring","String Mapper","String Format","Date To String","Unique Id"]},{name:"System",items:["Screen Resolution","Open File Picker"]},{name:"Variables",items:["String","Boolean","Color","Number"]}]},{name:"Component Utilities",description:"Component inputs, outputs & object",type:"component",subCategories:[{name:"",items:["Component Inputs","Component Outputs","Component Children","net.noodl.ComponentObject","net.noodl.ParentComponentObject","net.noodl.SetComponentObjectProperties","net.noodl.SetParentComponentObjectProperties"]}]},{name:"Read & Write Data",description:"Arrays, objects, cloud data",type:"data",subCategories:[{name:"",items:["RunTasks","For Each","For Each Actions","Model2","SetModelProperties","NewModel","Set Variable","Variable2"]},{name:"Array",items:["Collection2","CollectionNew","CollectionRemove","CollectionClear","CollectionInsert","Filter Collection","Map Collection","Static Data"]},{name:"Cloud Data",items:["DbModel2","NewDbModelProperties","FilterDBModels","SetDbModelProperties","DbCollection2","DeleteDbModelProperties","AddDbModelRelation","RemoveDbModelRelation","Cloud File","Upload File","CloudFunction2","DbConfig"]},{name:"User",items:["net.noodl.user.LogIn","net.noodl.user.LogOut","net.noodl.user.SignUp","net.noodl.user.User","net.noodl.user.SetUserProperties","net.noodl.user.VerifyEmail","net.noodl.user.SendEmailVerification","net.noodl.user.ResetPassword","net.noodl.user.RequestPasswordReset"]},{name:"External Data",items:["REST2"]}]},{name:"Custom Code",description:"Custom JavaScript and CSS",type:"javascript",subCategories:[{name:"",items:["Expression","JavaScriptFunction","Javascript2","CSS Definition"]}]},{name:"Cloud Functions",description:"Nodes to be used in cloud functions",type:"data",subCategories:[{name:"",items:["noodl.cloud.request","noodl.cloud.response"]},{name:"Cloud Data",items:["noodl.cloud.aggregate"]}]}];t.nodeIndex={coreNodes:o};const r=[];return n.forEach(s=>{e._constructors[s].metadata.module&&r.push(s)}),r.length&&(t.nodeIndex.moduleNodes=[{name:"",items:r}]),t}function addModuleSettings(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.settings&&o.settings.forEach(function(r){e.ports.push(r)})}}function generateProjectSettings(e,t){const n={dynamicports:[],ports:[]};return addModuleSettings(n,t),n}function NodeModel(e,t){EventSender$2.call(this),this.id=e,this.type=t,this.inputs=[],this.outputs=[],this.children=[],this.parameters={},this.inputPorts={},this.outputPorts={}}NodeModel.prototype=Object.create(EventSender$2.prototype),NodeModel.prototype.setParameter=function(e,t,n){n?(this.stateParameters||(this.stateParameters={}),this.stateParameters[n]||(this.stateParameters[n]={}),t===void 0?delete this.stateParameters[n][e]:this.stateParameters[n][e]=t):t===void 0?delete this.parameters[e]:this.parameters[e]=t,this.emit("parameterUpdated",{name:e,value:t,state:n})},NodeModel.prototype.setParameters=function(e){Object.keys(e).forEach(t=>{this.setParameter(t,e[t])})},NodeModel.prototype.setStateParameters=function(e){this.stateParameters=e},NodeModel.prototype.setStateTransitions=function(e){this.stateTransitions=e},NodeModel.prototype.setStateTransitionParamter=function(e,t,n){this.stateTransitions||(this.stateTransitions={}),t?this.stateTransitions[n][e]=t:delete this.stateTransitions[n][e]},NodeModel.prototype.setDefaultStateTransition=function(e,t){this.defaultStateTransitions||(this.defaultStateTransitions={}),this.defaultStateTransitions[t]=e},NodeModel.prototype.addInputPort=function(e){this.inputPorts[e.name]=e,this.emit("inputPortAdded",e)},NodeModel.prototype.getInputPort=function(e){return this.inputPorts[e]},NodeModel.prototype.getInputPorts=function(){return this.inputPorts},NodeModel.prototype.removeInputPortWithName=function(e){if(this.inputPorts.hasOwnProperty(e)){var t=this.inputPorts[e];delete this.inputPorts[e],this.emit("inputPortRemoved",t)}},NodeModel.prototype.updateInputPortTypes=function(e){var t=!1;for(var n in e)this.inputPorts[n]!==void 0&&(this.inputPorts[n].type=e[n].type,t=!0);t&&this.emit("inputPortTypesUpdated")},NodeModel.prototype.addOutputPort=function(e){this.outputPorts[e.name]=e,this.emit("outputPortAdded",e)},NodeModel.prototype.getOutputPort=function(e){return this.outputPorts[e]},NodeModel.prototype.getOutputPorts=function(){return this.outputPorts},NodeModel.prototype.removeOutputPortWithName=function(e){if(this.outputPorts.hasOwnProperty(e)){var t=this.outputPorts[e];delete this.outputPorts[e],this.emit("outputPortRemoved",t)}},NodeModel.prototype.updateOutputPortTypes=function(e){var t=!1;for(var n in e)this.outputPorts[n]!==void 0&&(this.outputPorts[n].type=e[n].type,t=!0);t&&this.emit("outputPortTypesUpdated")},NodeModel.prototype.addChild=function(e,t){e.parent=this,t===void 0?this.children.push(e):this.children.splice(t,0,e),this.emit("childAdded",e)},NodeModel.prototype.removeChild=function(e){e.parent=void 0;var t=this.children.indexOf(e);this.children.splice(t,1),this.emit("childRemoved",e)},NodeModel.prototype.reset=function(){this.removeAllListeners()},NodeModel.prototype.setVariant=function(e){this.variant=e,this.emit("variantUpdated",e)},NodeModel.createFromExportData=function(e){var t=new NodeModel(e.id,e.type);if(e.parameters&&t.setParameters(e.parameters),e.stateParameters&&t.setStateParameters(e.stateParameters),e.stateTransitions&&t.setStateTransitions(e.stateTransitions),e.defaultStateTransitions)for(const n in e.defaultStateTransitions)t.setDefaultStateTransition(e.defaultStateTransitions[n],n);return e.ports&&e.ports.forEach(function(n){n.plug==="outputs"&&(n.plug="output"),(n.plug==="input"||n.plug==="input/output")&&t.addInputPort(n),(n.plug==="output"||n.plug==="input/output")&&t.addOutputPort(n)}),e.variant&&t.setVariant(e.variant),t};function ComponentModel(e){EventSender$2.call(this),this.name=e,this.nodes=[],this.connections=[],this.roots=[],this.inputPorts={},this.outputPorts={},this.metadata={}}ComponentModel.prototype=Object.create(EventSender$2.prototype),ComponentModel.prototype.addNode=async function(e){e.component=this,this.nodes[e.id]=e,await this.emit("nodeAdded",e)},ComponentModel.prototype.hasNodeWithId=function(e){return this.getNodeWithId(e)!==void 0},ComponentModel.prototype.getNodeWithId=function(e){return this.nodes[e]},ComponentModel.prototype.getAllNodes=function(){return Object.values(this.nodes)},ComponentModel.prototype.getNodesWithType=function(e){var t=[],n=this;return Object.keys(this.nodes).forEach(function(o){var r=n.nodes[o];r.type===e&&t.push(r)}),t},ComponentModel.prototype.addConnection=function(e){if(this.connections.push(e),this.emit("connectionAdded",e),e.targetId){const t=this.getNodeWithId(e.targetId);t&&t.emit("inputConnectionAdded",e)}},ComponentModel.prototype.removeConnection=function(e){const t=this.connections.findIndex(n=>n.sourceId===e.sourceId&&n.sourcePort===e.sourcePort&&n.targetId===e.targetId&&n.targetPort===e.targetPort);if(t===-1){console.log("Connection doesn't exist",e);return}if(this.connections.splice(t,1),this.emit("connectionRemoved",e),e.targetId){const n=this.getNodeWithId(e.targetId);n&&n.emit("inputConnectionRemoved",e)}},ComponentModel.prototype.getConnectionsFromPort=function(e,t){return this.connections.filter(function(n){return n.sourceId===e&&n.sourcePort===t})},ComponentModel.prototype.getConnectionsToPort=function(e,t){return this.connections.filter(function(n){return n.targetId===e&&n.targetPort===t})},ComponentModel.prototype.getConnectionsFrom=function(e){return this.connections.filter(function(t){return t.sourceId===e})},ComponentModel.prototype.getConnectionsTo=function(e){return this.connections.filter(function(t){return t.targetId===e})},ComponentModel.prototype.addRootId=function(e){this.roots.indexOf(e)===-1&&(this.roots.push(e),this.emit("rootAdded",e))},ComponentModel.prototype.removeRootId=function(e){const t=this.roots.indexOf(e);t!==-1&&(this.roots.splice(t,1),this.emit("rootRemoved",e))},ComponentModel.prototype.getRoots=function(){return this.roots},ComponentModel.prototype.removeNodeWithId=async function(e){const t=this.getNodeWithId(e);if(!t)return console.warn("ERROR: Attempted to remove non-existing node with ID:",e),!1;for(;t.children.length>0;){const o=t.children[0];await this.removeNodeWithId(o.id)||t.children.shift()}const n=this.getConnectionsTo(e).concat(this.getConnectionsFrom(e));for(let o=0;o<n.length;o++)this.removeConnection(n[o]);return this.setNodeParent(t,null),this.roots.indexOf(t.id)!==-1&&this.removeRootId(t.id),await this.emit("nodeRemoved",t),t.removeAllListeners(),delete this.nodes[e],await this.emit("nodeWasRemoved",t),!0},ComponentModel.prototype.getAllConnections=function(){return this.connections},ComponentModel.prototype.getInputPorts=function(){return this.inputPorts},ComponentModel.prototype.getOutputPorts=function(){return this.outputPorts},ComponentModel.prototype.addInputPort=function(e){this.inputPorts[e.name]=e,this.emit("inputPortAdded",e)},ComponentModel.prototype.addOutputPort=function(e){this.outputPorts[e.name]=e,this.emit("outputPortAdded",e)},ComponentModel.prototype.removeOutputPortWithName=function(e){if(this.outputPorts.hasOwnProperty(e)){var t=this.outputPorts[e];delete this.outputPorts[e],this.emit("outputPortRemoved",t)}},ComponentModel.prototype.removeInputPortWithName=function(e){if(this.inputPorts.hasOwnProperty(e)){var t=this.inputPorts[e];delete this.inputPorts[e],this.emit("inputPortRemoved",t)}},ComponentModel.prototype.updateInputPortTypes=function(e){var t=!1;for(var n in e)this.inputPorts[n]!==void 0&&(this.inputPorts[n].type=e[n].type,t=!0);t&&this.emit("inputPortTypesUpdated")},ComponentModel.prototype.updateOutputPortTypes=function(e){var t=!1;for(var n in e)this.outputPorts[n]!==void 0&&(this.outputPorts[n].type=e[n].type,t=!0);t&&this.emit("outputPortTypesUpdated")},ComponentModel.prototype.renameInputPortOnNodeWithId=function(e,t,n){var o=this.getConnectionsToPort(e,t);o.forEach(this.removeConnection.bind(this));var r=this.getNodeWithId(e),s={...r.getInputPort(t)};s&&(r.removeInputPortWithName(t),s.name=n,r.addInputPort(s)),o.forEach(function(a){a.targetPort=n}),o.forEach(this.addConnection.bind(this))},ComponentModel.prototype.renameOutputPortOnNodeWithId=function(e,t,n){var o=this.getConnectionsFromPort(e,t);o.forEach(this.removeConnection.bind(this));var r=this.getNodeWithId(e),s={...r.getOutputPort(t)};r.removeOutputPortWithName(t),s.name=n,r.addOutputPort(s),o.forEach(function(a){a.sourcePort=n}),o.forEach(this.addConnection.bind(this))},ComponentModel.prototype.setNodeParent=function(e,t,n){this.roots.indexOf(e.id)!==-1&&this.removeRootId(e.id),e.parent&&(this.emit("nodeParentWillBeRemoved",e),e.parent.removeChild(e)),e.emit("parentUpdated",t),t&&(t.addChild(e,n),this.emit("nodeParentUpdated",e))},ComponentModel.prototype.importEditorNodeData=async function(e,t,n){var o=NodeModel.createFromExportData(e);if(await this.addNode(o),t&&this.setNodeParent(o,this.getNodeWithId(t),n),e.children)for(let r=0;r<e.children.length;r++){const s=e.children[r];await this.importEditorNodeData(s,o.id,r)}},ComponentModel.prototype.reset=async function(){for(;this.roots.length;)await this.removeNodeWithId(this.roots[0]);for(const e of this.nodes)this.hasNodeWithId(e)&&await this.removeNodeWithId(e);if(this.nodes.length>0)throw new Error("Not all nodes were removed during a reset");if(this.connections.length>0)throw new Error("Not all connections were removed during a reset")},ComponentModel.prototype.rename=function(e){var t=this.name;this.name=e,this.emit("renamed",{oldName:t,newName:e})},ComponentModel.prototype.setMetadata=function(e,t){this.metadata[e]=t},ComponentModel.prototype.getMetadata=function(e){return e?this.metadata[e]:this.metadata},ComponentModel.createFromExportData=async function(e){var t=new ComponentModel(e.name);if(e.metadata)for(const n in e.metadata)t.setMetadata(n,e.metadata[n]);if(e.ports&&e.ports.forEach(function(n){(n.plug==="input"||n.plug==="input/output")&&t.addInputPort(n),(n.plug==="output"||n.plug==="input/output")&&t.addOutputPort(n)}),e.nodes)for(const n of e.nodes)await t.importEditorNodeData(n);return e.connections&&e.connections.forEach(n=>t.addConnection(n)),e.roots&&e.roots.forEach(n=>t.addRootId(n)),t};function GraphModel(){EventSender$2.call(this),this.components={},this.settings={},this.metadata={}}GraphModel.prototype=Object.create(EventSender$2.prototype),GraphModel.prototype.importComponentFromEditorData=async function(e){var t=await ComponentModel.createFromExportData(e);this.addComponent(t)},GraphModel.prototype.getBundleContainingComponent=function(e){return this.componentToBundleMap.get(e)},GraphModel.prototype.getBundlesContainingSheet=function(e){const t=new Set;for(const n of this.componentToBundleMap.keys()){const o=n.indexOf("/#")!==0;(o&&e==="Default"||!o&&n.indexOf("/#"+e)===0)&&t.add(this.componentToBundleMap.get(n))}return Array.from(t)},GraphModel.prototype.getBundleDependencies=function(e){const t=new Set,n=o=>{const r=this.componentIndex[o];for(const s of r.dependencies)t.has(s)||(t.add(s),n(s))};return n(e),Array.from(t)},GraphModel.prototype.importEditorData=async function(e){this.componentIndex=e.componentIndex,this.routerIndex=e.routerIndex,this.componentToBundleMap=new Map;for(const t in e.componentIndex){const n=e.componentIndex[t];for(const o of n.components)this.componentToBundleMap.set(o,t)}this.variants=e.variants||[],e.settings&&this.setSettings(e.settings),e.metadata&&this.setAllMetaData(e.metadata);for(const t of e.components)await this.importComponentFromEditorData(t);this.setRootComponentName(e.rootComponent)},GraphModel.prototype.setRootComponentName=function(e){this.rootComponent=e,this.emit("rootComponentNameUpdated",e)},GraphModel.prototype.getNodesWithType=function(e){for(var t=[],n=Object.keys(this.components),o=0;o<n.length;o++){var r=this.components[n[o]];t=t.concat(r.getNodesWithType(e))}return t},GraphModel.prototype.getComponentWithName=function(e){return this.components[e]},GraphModel.prototype.hasComponentWithName=function(e){return!!this.components[e]},GraphModel.prototype.getAllComponents=function(){return Object.keys(this.components).map(e=>this.components[e])},GraphModel.prototype.getAllNodes=function(){for(var e=[],t=Object.keys(this.components),n=0;n<t.length;n++){var o=this.components[t[n]];e=e.concat(o.getAllNodes())}return e},GraphModel.prototype.addComponent=function(e){this.components[e.name]=e,this.getNodesWithType(e.name).forEach(this._addComponentPorts.bind(this)),e.getAllNodes().forEach(this._onNodeAdded.bind(this)),e.on("nodeAdded",this._onNodeAdded.bind(this),this),e.on("nodeRemoved",this._onNodeRemoved.bind(this),this),e.on("nodeWasRemoved",this._onNodeWasRemoved.bind(this),this),this.emit("componentAdded",e)},GraphModel.prototype.removeComponentWithName=async function(e){if(this.components.hasOwnProperty(e)===!1){console.error("GraphModel: Component with name "+e+" not in graph");return}var t=this.components[e];await t.reset(),t.removeAllListeners(),delete this.components[t.name],this.emit("componentRemoved",t)},GraphModel.prototype.renameComponent=function(e,t){if(this.components.hasOwnProperty(e)===!1){console.error("GraphModel: Component with name "+e+" not in graph");return}this.getNodesWithType(e).forEach(function(o){o.type=t});var n=this.components[e];n.rename(t),delete this.components[e],this.components[t]=n,this.emit("componentRenamed",n)},GraphModel.prototype._addComponentPorts=function(e){if(this.components.hasOwnProperty(e.type)){var t=this.components[e.type];const n=t.getInputPorts(),o=t.getOutputPorts();Object.keys(n).forEach(r=>{e.addInputPort(n[r])}),Object.keys(o).forEach(r=>{e.addOutputPort(o[r])})}},GraphModel.prototype._onNodeAdded=function(e){this._addComponentPorts(e),this.emit("nodeAdded",e),this.emit("nodeAdded."+e.type,e)},GraphModel.prototype._onNodeRemoved=function(e){this.emit("nodeRemoved",e),this.emit("nodeRemoved."+e.type,e)},GraphModel.prototype._onNodeWasRemoved=function(e){this.emit("nodeWasRemoved",e),this.emit("nodeWasRemoved."+e.type,e)},GraphModel.prototype.reset=async function(){for(const e of Object.keys(this.components))await this.removeComponentWithName(e);this.setSettings({})},GraphModel.prototype.isEmpty=function(){return Object.keys(this.components).length===0},GraphModel.prototype.setSettings=function(e){this.settings=e,this.emit("projectSettingsChanged",e)},GraphModel.prototype.getSettings=function(){return this.settings},GraphModel.prototype.setAllMetaData=function(e){for(const t in e)this.setMetaData(t,e[t])},GraphModel.prototype.setMetaData=function(e,t){this.metadata[e]&&JSON.stringify(this.metadata[e])===JSON.stringify(t)||(this.metadata[e]=t,this.emit("metadataChanged",{key:e,data:t}),this.emit("metadataChanged."+e,t))},GraphModel.prototype.getMetaData=function(e){return e?this.metadata[e]:this.metadata},GraphModel.prototype.getVariants=function(){return this.variants||[]},GraphModel.prototype.getVariant=function(e,t){return this.variants.find(n=>n.name===t&&n.typename===e)},GraphModel.prototype.updateVariant=function(e){const t=this.variants.findIndex(n=>n.name===e.name&&n.typename===e.typename);t!==-1&&this.variants.splice(t,1),this.variants.push(e),this.emit("variantUpdated",e)},GraphModel.prototype.updateVariantParameter=function(e,t,n,o,r){const s=this.getVariant(t,e);if(!s){console.log("updateVariantParameter: can't find variant",e,t);return}r?(s.stateParameters.hasOwnProperty(r)||(s.stateParameters[r]={}),o===void 0?delete s.stateParameters[r][n]:s.stateParameters[r][n]=o):o===void 0?delete s.parameters[n]:s.parameters[n]=o,this.emit("variantUpdated",s)},GraphModel.prototype.updateVariantDefaultStateTransition=function(e,t,n,o){const r=this.getVariant(t,e);r&&(r.defaultStateTransitions[o]=n,this.emit("variantUpdated",r))},GraphModel.prototype.updateVariantStateTransition=function(e){const{variantTypeName:t,variantName:n,state:o,parameterName:r,curve:s}=e,a=this.getVariant(t,n);a&&(a.stateTransitions[o]||(a.stateTransitions[o]={}),a.stateTransitions[o][r]=s)},GraphModel.prototype.deleteVariant=function(e,t){const n=this.variants.findIndex(o=>o.name===t&&o.typename===e);n!==-1&&this.variants.splice(n,1)};function createSetter(e){var t=!1;return function(n){n=!!n,n&&t===!1&&e.valueChangedToTrue.call(this),t=n}}const EdgeTriggeredInput=Object.freeze(Object.defineProperty({__proto__:null,createSetter},Symbol.toStringTag,{value:"Module"}));function createNodeConstructor(e){const t=class extends Node{constructor(n,o){super(n,o)}getInspectInfo(){return e.getInspectInfo?.()??void 0}nodeScopeDidInitialize(){return e.nodeScopeDidInitialize?.()??void 0}};return e.prototypeExtensions&&Object.defineProperties(t.prototype,e.prototypeExtensions),Object.defineProperty(t.prototype,"name",{value:e.name}),t}function registerInput(e,t,n,o){if(e.hasOwnProperty(n))throw new Error("Input property "+n+" already registered");!o.set&&!o.valueChangedToTrue&&(o.set=()=>{}),o.set&&(e[n]={set:o.set},["color","textStyle","array"].forEach(r=>{o.type&&(o.type===r||o.type.name===r)&&(e[n].type=r)})),o.setUnitType&&(e[n].setUnitType=o.setUnitType),t.inputs[n]={displayName:o.displayName,editorName:o.editorName,group:o.group,type:o.type,default:o.default,index:o.index,exportToEditor:o.hasOwnProperty("exportToEditor")?o.exportToEditor:!0,inputPriority:o.inputPriority||0,tooltip:o.tooltip,tab:o.tab,popout:o.popout,allowVisualStates:o.allowVisualStates,nodeDoubleClickAction:o.nodeDoubleClickAction},o.valueChangedToTrue&&(t.inputs[n].type={name:"signal",allowConnectionsOnly:!0})}function registerInputs(e,t,n){Object.keys(n).forEach(function(o){registerInput(e,t,o,n[o])})}function registerNumberedInputs(e,t){for(const n of Object.keys(t))registerNumberedInput(e,n,t[n])}function registerNumberedInput(e,t,n){const o=e.registerInputIfNeeded;e.registerInputIfNeeded=function(r){if(o&&o.call(e,r),e.hasInput(r)||!r.startsWith(t))return;const s=Number(r.slice(t.length+1));e.registerInput(r,{type:n.type,set:n.createSetter.call(e,s)})}}function registerOutputsMetadata(e,t){Object.keys(t).forEach(function(n){var o=t[n];e.outputs[n]={displayName:o.displayName,editorName:o.editorName,group:o.group,type:o.type,index:o.index,exportToEditor:o.hasOwnProperty("exportToEditor")?o.exportToEditor:!0}})}function initializeDefaultValues(e,t){Object.keys(t).forEach(n=>{const o=t[n].default;o!==void 0&&(t[n].type.defaultUnit?e[n]={unit:t[n].type.defaultUnit,value:o}:e[n]=o)})}function defineNode(e){if(!e.category)throw new Error("Node must have a category");if(!e.name)throw new Error("Node must have a name");const t={inputs:{},outputs:{},category:e.category,dynamicports:e.dynamicports,exportDynamicPorts:e.exportDynamicPorts,useVariants:e.useVariants,allowChildren:e.allowChildren,allowChildrenWithCategory:e.allowChildrenWithCategory,singleton:e.singleton,connectionPanel:e.connectionPanel,allowAsChild:e.allowAsChild,visualStates:e.visualStates,panels:e.panels,color:e.color,usePortAsLabel:e.usePortAsLabel,portLabelTruncationMode:e.portLabelTruncationMode,name:e.name,displayNodeName:e.displayNodeName||e.displayName,deprecated:e.deprecated,haveComponentPorts:e.haveComponentPorts,version:e.version,module:e.module,docs:e.docs,allowAsExportRoot:e.allowAsExportRoot,nodeDoubleClickAction:e.nodeDoubleClickAction,searchTags:e.searchTags};e._internal=e._internal||{},e.prototypeExtensions=e.methods||e.prototypeExtensions||{},e.inputs=e.inputs||{},e.outputs=e.outputs||{},e.initialize=e.initialize||function(){};let n={};registerInputs(n,t,e.inputs),registerOutputsMetadata(t,e.outputs),Object.keys(e.prototypeExtensions).forEach(function(s){e.prototypeExtensions[s].value||(e.prototypeExtensions[s]={value:e.prototypeExtensions[s]})});const o=createNodeConstructor({name:e.name,getInspectInfo:e.getInspectInfo,nodeScopeDidInitialize:e.nodeScopeDidInitialize,prototypeExtensions:e.prototypeExtensions}),r=function(s,a,l){const u=new o(s,a);return u._inputs=Object.create(n),Object.keys(e.inputs).forEach(function(d){var h=e.inputs[d];h.valueChangedToTrue&&(u._inputs[d]={set:createSetter({valueChangedToTrue:h.valueChangedToTrue})})}),Object.keys(e.outputs).forEach(function(d){var h=e.outputs[d];h.type==="signal"?u.registerOutput(d,{getter(){}}):u.registerOutput(d,h)}),e.numberedInputs&&registerNumberedInputs(u,e.numberedInputs),u.nodeScope=l,initializeDefaultValues(u._inputValues,t.inputs),e.initialize.call(u),u};return r.metadata=t,e.numberedInputs&&registerSetupFunctionForNumberedInputs(r,e.name,e.numberedInputs),r}function registerSetupFunctionForNumberedInputs(e,t,n){const o=Object.keys(n);o.length&&(e.setupNumberedInputDynamicPorts=function(r,s){const a=r.editorConnection;if(!a||!a.isRunningLocally())return;function l(d,h,f){const g=d.component.getConnectionsTo(d.id).map(A=>A.targetPort),b=Object.keys(d.parameters).concat(g).filter(A=>A.startsWith(h+" ")),_=(b.length?1+Math.max(...b.map(A=>Number(A.slice(h.length+1)))):0)+1,T=[];for(let A=0;A<_;A++){const v={name:h+" "+A,displayName:(f.displayPrefix||h)+" "+A,type:f.type,plug:"input",group:f.group};f.hasOwnProperty("index")&&(v.index=f.index+A),T.push(v)}return T}function u(d){const h=o.map(f=>l(d,f,n[f])).flat();a.sendDynamicPorts(d.id,h)}s.on("nodeAdded."+t,d=>{u(d),d.on("parameterUpdated",()=>{u(d)}),d.on("inputConnectionAdded",()=>{u(d)}),d.on("inputConnectionRemoved",()=>{u(d)})})})}function extend$4(e,t){for(var n in t)if(n==="initialize"&&e.initialize){var o=e.initialize;e.initialize=function(){o.call(this),t.initialize.call(this)}}else t[n]&&t[n].constructor===Object?e[n]=extend$4(e[n]||{},t[n]):t[n]&&t[n].constructor===Array&&e[n]&&e[n].constructor==Array?e[n]=e[n].concat(t[n]):e[n]=t[n];return e}function difference$1(e,t){const n=new Set(t);return e.filter(o=>!n.has(o))}async function handleEvent(e,t,n){function o(l,u){var d={},h={};u.forEach(function(v){v&&v.plug==="outputs"&&(v.plug="output"),(v.plug==="input"||v.plug==="input/output")&&(d[v.name]=v),(v.plug==="output"||v.plug==="input/output")&&(h[v.name]=v)});var f=Object.keys(l.getInputPorts()),g=difference$1(f,Object.keys(d)),b=difference$1(Object.keys(d),f);l.updateInputPortTypes(d),g.forEach(l.removeInputPortWithName.bind(l)),b.forEach(function(v){l.addInputPort(d[v]),l.parameters&&l.parameters.hasOwnProperty(v)&&r(e.rootComponent.nodeScope,l,v,l.parameters[v])}),l.updateOutputPortTypes(h);var _=Object.keys(l.getOutputPorts()),T=difference$1(_,Object.keys(h)),A=difference$1(Object.keys(h),_);T.forEach(l.removeOutputPortWithName.bind(l)),A.forEach(function(v){l.addOutputPort(h[v])})}function r(l,u,d,h){var f=l.getNodesWithIdRecursive(u.id);f.forEach(function(g){g.queueInput(d,h)})}var s;if(!(n.componentName&&(s=t.getComponentWithName(n.componentName),!s))){n.port&&n.port.plug==="outputs"&&(n.port.plug="output");var a={nodeAdded(l){s.importEditorNodeData(l.model,l.parentId,l.childIndex)},nodeRemoved:async function(l){s.hasNodeWithId(l.model.id)&&await s.removeNodeWithId(l.model.id)},connectionAdded(l){s.addConnection(l.model)},connectionRemoved(l){s.removeConnection(l.model);var u=s.getNodeWithId(l.model.targetId);if(s.getConnectionsToPort(u.id,l.model.targetId).length===0){var d=u.parameters[l.model.targetPort];d===void 0&&(d=e.getDefaultValueForInput(u.type,l.model.targetPort)),r(e.rootComponent.nodeScope,u,l.model.targetPort,d)}},parameterChanged(l){const u=s.getNodeWithId(l.nodeId);if(u===void 0){console.log("parameterChanged: Unknown node id",l);return}if(l.parameters){const d=new Set(Object.keys(l.parameters).concat(Object.keys(l.oldParameters)));for(const h of d)u.setParameter(h,l.parameters[h])}l.parameterName&&u.setParameter(l.parameterName,l.parameterValue,l.state)},nodeAttached(l){s.setNodeParent(s.getNodeWithId(l.nodeId),s.getNodeWithId(l.parentId),l.childIndex)},nodeDetached(l){s.setNodeParent(s.getNodeWithId(l.nodeId),null),s.addRootId(l.nodeId)},componentAdded(l){t.importComponentFromEditorData(l.model)},componentRemoved:async function(l){await t.removeComponentWithName(l.componentName)},rootAdded(l){s.addRootId(l.nodeId)},portAdded(l){var u=s.getNodeWithId(l.nodeId);(l.port.plug==="input"||l.port.plug==="input/output")&&(u.addInputPort(l.port),u.parameters.hasOwnProperty(l.port)&&r(e.rootComponent.nodeScope,u,l.port,u.parameters[l.port])),(l.port.plug==="output"||l.port.plug==="input/output")&&u.addOutputPort(l.port)},portRemoved(l){var u=s.getNodeWithId(l.nodeId);(l.port.plug==="input"||l.port.plug==="input/output")&&u.removeInputPortWithName(l.port.name),(l.port.plug==="output"||l.port.plug==="input/output")&&u.removeOutputPortWithName(l.port.name)},nodePortRenamed(l){(l.port.plug==="input"||l.port.plug==="input/output")&&s.renameInputPortOnNodeWithId(l.nodeId,l.oldName,l.port.name),(l.port.plug==="output"||l.port.plug==="input/output")&&s.renameOutputPortOnNodeWithId(l.nodeId,l.oldName,l.port.name);var u=s.getNodeWithId(l.nodeId);u.type==="Component Inputs"?(s.addInputPort(l.port),t.getNodesWithType(s.name).forEach(function(d){d.component.renameInputPortOnNodeWithId(d.id,l.oldName,l.port.name)}),s.removeInputPortWithName(l.oldName)):u.type==="Component Outputs"&&(s.addOutputPort(l.port),t.getNodesWithType(s.name).forEach(function(d){d.component.renameOutputPortOnNodeWithId(d.id,l.oldName,l.port.name)}),s.removeOutputPortWithName(l.oldName))},componentPortsUpdated(l){o(s,l.ports)},instancePortsChanged(l){if(s.hasNodeWithId(l.nodeId)){var u=s.getNodeWithId(l.nodeId);o(u,l.ports)}},componentRenamed(l){t.renameComponent(l.oldName,l.newName)},settingsChanged(l){t.setSettings(l.settings)},metadataChanged(l){t.setMetaData(l.key,l.data)},componentMetadataChanged(l){const u=t.getComponentWithName(l.componentName);u&&u.setMetadata(l.key,l.data)},variantParametersChanged(l){if(l.variant)t.updateVariant(l.variant);else if(t.updateVariantParameter(l.variantName,l.variantTypeName,l.parameterName,l.parameterValue,l.state),l.parameterValue===void 0){const u=t.getVariant(l.variantTypeName,l.variantName);e.rootComponent.nodeScope.getAllNodesWithVariantRecursive(u).forEach(d=>{d.queueInput(l.parameterName,d.getParameter(l.parameterName))})}},variantDeleted(l){t.deleteVariant(l.variantTypeName,l.variantName)},variantChanged(l){const u=s.getNodeWithId(l.nodeId),d=t.getVariant(u.type,l.variantName);u.setVariant(d)},variantRenamed(l){const u=t.getVariant(l.variantTypeName,l.oldVariantName);u&&(u.name=u.variantName)},defaultStateTransitionChanged(l){s.getNodeWithId(l.nodeId).setDefaultStateTransition(l.curve,l.state)},stateTransitionsChanged(l){const u=s.getNodeWithId(l.nodeId);l.parameterName&&u.setStateTransitionParamter(l.parameterName,l.curve,l.state)},variantDefaultStateTransitionChanged(l){t.updateVariantDefaultStateTransition(l.variantName,l.variantTypeName,l.curve,l.state)},variantStateTransitionsChanged(l){t.updateVariantStateTransition(l)},routerIndexChanged(l){t.routerIndex=l.data}};a.hasOwnProperty(n.type)?(await a[n.type](n),e.scheduleUpdate()):console.log("Unknown event",n)}}async function asyncPool(e,t,n){const o=[],r=[];for(const s of t){const a=Promise.resolve().then(()=>n(s,t));if(o.push(a),e<=t.length){const l=a.then(()=>r.splice(r.indexOf(l),1));r.push(l),r.length>=e&&await Promise.race(r)}}return Promise.all(o)}const ComponentInputs={node:{name:"Component Inputs",shortDesc:"This node is used to define the inputs of a component.",docs:"https://docs.noodl.net/nodes/component-utilities/component-inputs",panels:[{name:"PortEditor",context:["select","connectFrom"],title:"Inputs",plug:"output",type:{name:"*"},canArrangeInGroups:!0},{name:"PropertyEditor",hidden:!0}],getInspectInfo(){return{type:"value",value:this.nodeScope.componentOwner._internal.inputValues}},color:"component",haveComponentPorts:!0,category:"Component Utilities",methods:{registerOutputIfNeeded(e){this.hasOutput(e)||this.registerOutput(e,{getter(){return this.nodeScope.componentOwner._internal.inputValues[e]}})},_updateDependencies(){this.nodeScope.componentOwner.update()}}}},ComponentOutputs={node:{category:"Component Utilities",name:"Component Outputs",shortDesc:"This node is used to define the outputs of a component.",docs:"https://docs.noodl.net/nodes/component-utilities/component-outputs",panels:[{name:"PortEditor",context:["select","connectTo"],title:"Outputs",plug:"input",type:{name:"*"},canArrangeInGroups:!0},{name:"PropertyEditor",hidden:!0}],color:"component",haveComponentPorts:!0,prototypeExtensions:{registerInputIfNeeded(e){this.hasInput(e)||this.registerInput(e,{set(t){this.nodeScope.componentOwner.setOutputFromComponentOutput(e,t)}})}}}};function Model(e,t){this.id=e,this.data=t}const models=Model._models={},proxies={},_modelProxyHandler={get(e,t,n){return typeof e[t]=="function"?e[t].bind(e):t in e?Reflect.get(e,t,n):e.get(t)},set(e,t,n){if(t==="_class")e._class=n;else{if(t==="id")return console.log(`Noodl.Object warning: id is readonly (Id is ${e.id}, trying to set to ${n})`),!0;e.set(t,n)}return!0},ownKeys(e){return Reflect.ownKeys(e.data)},getOwnPropertyDescriptor(e,t){return Object.getOwnPropertyDescriptor(e.data,t)}};Model.get=function(e){return e===void 0&&(e=Model.guid()),models[e]||(models[e]=new Model(e,{}),proxies[e]=new Proxy(models[e],_modelProxyHandler)),proxies[e]},Model.create=function(e){var t=e||{},n=Model.get(t.id);for(var o in t)o!=="id"&&n.set(o,t[o]);return n},Model.exists=function(e){return models[e]!==void 0},Model.instanceOf=function(e){return e instanceof Model||e.target instanceof Model};function _randomString(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let n="";for(let o=0;o<e;++o)n+=t[Math.floor((1+Math.random())*65536)%t.length];return n}Model.guid=function e(){return _randomString(10)},Model.prototype.on=function(e,t){this.listeners||(this.listeners={}),this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)},Model.prototype.off=function(e,t){if(this.listeners&&this.listeners[e]){var n=this.listeners[e].indexOf(t);n!==-1&&this.listeners[e].splice(n,1)}},Model.prototype.notify=function(e,t){if(this.listeners&&this.listeners[e])for(var n=this.listeners[e].slice(),o=0;o<n.length;o++)n[o](t)},Model.prototype.setAll=function(e){for(var t in e)if(t!=="id"&&this.data[t]!==e[t]){var n=this.data[t];this.data[t]=e[t],this.notify("change",{name:t,value:e[t],old:n})}},Model.prototype.fill=function(e=null){for(const t in this.data){if(t==="id")continue;const n=this.data[t];this.data[t]=e,this.notify("change",{name:t,value:this.data[t],old:n})}},Model.prototype.set=function(e,t,n){if(n&&n.resolve&&e.indexOf(".")!==-1){const s=e.split(".");let a=this;for(let l=0;l<s.length-1;l++){const u=a.get(s[l]);if(Model.instanceOf(u))a=u;else return}a.set(s[s.length-1],t);return}const o=n&&n.forceChange,r=this.data[e];this.data[e]=t,(o||r!==t)&&(!n||!n.silent)&&this.notify("change",{name:e,value:t,old:r})},Model.prototype.getId=function(){return this.id},Model.prototype.get=function(e,t){if(t&&t.resolve&&e.indexOf(".")!==-1){const n=e.split(".");let o=this;for(let r=0;r<n.length-1;r++){const s=o.get(n[r]);if(Model.instanceOf(s))o=s;else return}return o.get(n[n.length-1])}return this.data[e]},Model.prototype.toJSON=function(){return Object.assign({},this.data,{id:this.id})},Model.Scope=function(){this.models={},this.proxies={}},Model.Scope.prototype.get=function(e){return e===void 0&&(e=Model.guid()),this.models[e]||(this.models[e]=new Model(e,{}),this.proxies[e]=new Proxy(this.models[e],_modelProxyHandler)),this.proxies[e]},Model.Scope.prototype.create=function(e){var t=e||{},n=this.get(t.id);for(var o in t)o!=="id"&&n.set(o,t[o]);return n},Model.Scope.prototype.exists=function(e){return this.models[e]!==void 0},Model.Scope.prototype.instanceOf=function(e){return e instanceof Model||e.target instanceof Model},Model.Scope.prototype.guid=function e(){return _randomString(10)},Model.Scope.prototype.reset=function(){this.models={},this.proxies={},delete this._cloudStore};function sendSignalOnInput(e,t){e.queueInput(t,!0),e.queueInput(t,!1)}const RunTasksDefinition={name:"RunTasks",displayNodeName:"Run Tasks",docs:"https://docs.noodl.net/nodes/data/run-tasks",color:"data",category:"Data",initialize(){this._internal.queuedOperations=[],this._internal.state="idle",this._internal.maxRunningTasks=10,this._internal.activeTasks=new Map},inputs:{items:{group:"Data",displayName:"Items",type:"array",set(e){e&&e!==this._internal.items&&(this._internal.items=e)}},stopOnFailure:{group:"General",displayName:"Stop On Failure",type:"boolean",default:!1,set(e){this._internal.stopOnFailure=e}},maxRunningTasks:{group:"General",displayName:"Max Running Tasks",type:"number",default:10,set(e){this._internal.maxRunningTasks=e}},taskTemplate:{type:"component",displayName:"Template",group:"General",set(e){this._internal.template=e}},run:{group:"General",displayName:"Do",type:"signal",valueChangedToTrue(){this.scheduleRun()}},abort:{group:"General",displayName:"Abort",type:"signal",valueChangedToTrue(){this.scheduleAbort()}}},outputs:{success:{type:"signal",group:"Events",displayName:"Success"},failure:{type:"signal",group:"Events",displayName:"Failure"},done:{type:"signal",group:"Events",displayName:"Done"},aborted:{type:"signal",group:"Events",displayName:"Aborted"}},methods:{scheduleRun(){var e=this._internal;e.hasScheduledRun||(e.hasScheduledRun=!0,this.scheduleAfterInputsHaveUpdated(()=>{this._queueOperation(()=>{e.hasScheduledRun=!1,this.run()})}))},scheduleAbort(){var e=this._internal;e.hasScheduledAbort||(e.hasScheduledAbort=!0,this.scheduleAfterInputsHaveUpdated(()=>{this._queueOperation(()=>{e.hasScheduledAbort=!1,this.abort()})}))},async createTaskComponent(e){const t=this._internal,n=(this.nodeScope.modelScope||Model).create(e);var o=await this.nodeScope.createNode(t.template,guid$1(),{_forEachModel:n,_forEachNode:this});const r=o.isInputConnected.bind(o);o.isInputConnected=a=>a==="Do"?!0:r(a),o.hasInput("Id")&&o.setInputValue("Id",n.getId()),o.hasInput("id")&&o.setInputValue("id",n.getId());for(var s in o._inputs)n.data[s]!==void 0&&o.setInputValue(s,n.data[s]);return o._internal.creatorCallbacks={onOutputChanged:(a,l,u)=>{(u===!1||u===void 0)&&l===!0&&this.itemOutputSignalTriggered(a,n,o)}},o},async startTask(e){const t=this._internal;try{const n=await this.createTaskComponent(e);t.runningTasks++,sendSignalOnInput(n,"Do"),t.activeTasks.set(n.id,n)}catch(n){console.log(n)}},async run(){const e=this._internal;if(this.context.editorConnection&&(e.state!=="idle"?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"run-tasks",{message:"Cannot start when not in idle mode"}):e.template?e.items?this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"run-tasks"):this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"run-tasks",{message:"No items array provided."}):this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"run-tasks",{message:"No task template specified."})),e.state==="idle"&&e.template&&e.items){e.state="running",e.numTasks=e.items.length,e.failedTasks=0,e.completedTasks=0,e.queuedTasks=[].concat(e.items),e.runningTasks=0,e.items.length===0&&(this.sendSignalOnOutput("success"),e.state="idle");for(let t=0;t<Math.min(e.maxRunningTasks,e.queuedTasks.length);t++){const n=e.queuedTasks.shift();if(!n)break;this.startTask(n)}}},abort(){const e=this._internal;e.state="aborted"},itemOutputSignalTriggered(e,t,n){const o=this._internal;if(o.state==="idle")return;const r=()=>{if(o.state==="aborted"){this.sendSignalOnOutput("aborted"),o.state="idle";return}if(o.completedTasks===o.numTasks)o.failedTasks===0?this.sendSignalOnOutput("success"):this.sendSignalOnOutput("failure"),this.sendSignalOnOutput("done"),o.state="idle";else if(o.stopOnFailure)if(o.failedTasks===0){o.runningTasks++;const s=o.queuedTasks.shift();s&&this.startTask(s)}else this.sendSignalOnOutput("failure"),this.sendSignalOnOutput("aborted");else{o.runningTasks++;const s=o.queuedTasks.shift();s&&this.startTask(s)}};e==="Success"?(o.completedTasks++,o.runningTasks--,r()):e==="Failure"&&(o.completedTasks++,o.failedTasks++,o.runningTasks--,r()),o.activeTasks.delete(n.id),this.nodeScope.deleteNode(n)},_queueOperation(e){this._internal.queuedOperations.push(e),this._runQueueOperations()},async _runQueueOperations(){if(!this.runningOperations){for(this.runningOperations=!0;this._internal.queuedOperations.length;)await this._internal.queuedOperations.shift()();this.runningOperations=!1}}},_deleteAllTasks(){for(const e of this._internal.activeTasks)this.nodeScope.deleteNode(e);this._internal.activeTasks.clear()},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this._deleteAllTasks()}},RunTasks={node:RunTasksDefinition},defaultRequestScript=`//Add custom code to setup the request object before the request
2
2
  //is made.
3
3
  //
4
4
  //*Request.resource contains the resource path of the request.
@@ -17,36 +17,36 @@
17
17
  //*Response.request The request object that resulted in the response.
18
18
  //
19
19
  //*Inputs and *Outputs contain the inputs and outputs of the node.
20
- `,RestNode={name:"REST2",displayNodeName:"REST",docs:"https://docs.noodl.net/nodes/data/rest",category:"Data",color:"data",searchTags:["http","request","fetch"],initialize(){this._internal.inputValues={},this._internal.outputValues={},this._internal.outputValuesProxy=new Proxy(this._internal.outputValues,{set:(e,t,n)=>(n!==this._internal.outputValues[t]&&(this.registerOutputIfNeeded("out-"+t),this._internal.outputValues[t]=n,this.flagOutputDirty("out-"+t)),!0)}),this._internal.self={}},getInspectInfo(){return this._internal.inspectData?{type:"value",value:this._internal.inspectData}:{type:"text",value:"[Not executed yet]"}},inputs:{resource:{type:"string",displayName:"Resource",group:"Request",default:"/",set(e){this._internal.resource=e}},method:{type:{name:"enum",enums:[{label:"GET",value:"GET"},{label:"POST",value:"POST"},{label:"PUT",value:"PUT"},{label:"PATCH",value:"PATCH"},{label:"DELETE",value:"DELETE"}]},displayName:"Method",group:"Request",default:"GET",set(e){this._internal.method=e}},requestScript:{type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},displayName:"Request",default:defaultRequestScript,group:"Scripts",set(e){try{this._internal.requestFunc=new Function("Inputs","Outputs","Request",e)}catch(t){console.log(t)}}},responseScript:{type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},displayName:"Response",default:defaultResponseScript,group:"Scripts",set(e){try{this._internal.responseFunc=new Function("Inputs","Outputs","Response",e)}catch(t){console.log(t)}}},fetch:{type:"signal",displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleFetch()}},cancel:{type:"signal",displayName:"Cancel",group:"Actions",valueChangedToTrue(){this.cancelFetch()}}},outputs:{failure:{type:"signal",displayName:"Failure",group:"Events"},success:{type:"signal",displayName:"Success",group:"Events"},canceled:{type:"signal",displayName:"Canceled",group:"Events"}},prototypeExtensions:{getScriptOutputValue(e){return this._internal.outputValues[e]},setScriptInputValue(e,t){return this._internal.inputValues[e]=t},registerOutputIfNeeded(e){if(!this.hasOutput(e)&&e.startsWith("out-"))return this.registerOutput(e,{getter:this.getScriptOutputValue.bind(this,e.substring(4))})},registerInputIfNeeded(e){if(!this.hasInput(e)&&e.startsWith("in-"))return this.registerInput(e,{set:this.setScriptInputValue.bind(this,e.substring(3))})},scheduleFetch(){var e=this._internal;e.hasScheduledFetch||(e.hasScheduledFetch=!0,this.scheduleAfterInputsHaveUpdated(this.doFetch.bind(this)))},doResponse(e,t,n){this._internal.responseFunc&&this._internal.responseFunc.apply(this._internal.self,[this._internal.inputValues,this._internal.outputValuesProxy,{status:e,content:t,request:n}]),this._internal.inspectData={status:e,content:t},e>=200&&e<300?this.sendSignalOnOutput("success"):this.sendSignalOnOutput("failure")},doExternalFetch(e){var t=e.resource;if(Object.keys(e.parameters).length>0){var n=Object.keys(e.parameters).map(function(a){return a+"="+encodeURIComponent(e.parameters[a])});t+="?"+n.join("&")}if(typeof _noodl_cloud_runtime_version>"u"){var o=this,r=new window.XMLHttpRequest;this._xhr=r,r.open(e.method,t,!0);for(var s in e.headers)r.setRequestHeader(s,e.headers[s]);r.onreadystatechange=function(){var a=!1;if(this.readyState===4||this.readyState===XMLHttpRequest.DONE){var l=this.status,u=this.getResponseHeader("content-type"),d=this.response;if(delete this._xhr,u){u=u.toLowerCase();const p=u.indexOf("json")!==-1?JSON.parse(d):d;o.doResponse(l,p,e),a=!0}a===!1&&o.doResponse(l,d,e)}},r.onerror=function(a){delete this._xhr,o.sendSignalOnOutput("failure")},r.onabort=function(){delete this._xhr,o.sendSignalOnOutput("canceled")},e.content?(r.setRequestHeader("Content-Type","application/json"),r.send(JSON.stringify(e.content))):r.send()}else{const a=Object.assign({},e.headers,e.content?{"Content-Type":"application/json"}:{});fetch(t,{method:e.method,headers:a,body:e.content?JSON.stringify(e.content):void 0}).then(l=>{const u=l.headers.get("content-type");u?u.indexOf("/json")!==-1?l.json().then(d=>{this.doResponse(l.status,d,e)}):this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"rest-run-waring-",{message:"REST only supports json content type in response."}):l.text().then(d=>{this.doResponse(l.status,d,e)})}).catch(l=>{console.log("REST: Failed to request",t),console.log(l),this.sendSignalOnOutput("failure")})}},doFetch(){this._internal.hasScheduledFetch=!1;var e=this._internal.resource;if(e)for(var t in this._internal.inputValues)e=e.replace("{"+t+"}",this._internal.inputValues[t]);var n={resource:e,headers:{},method:this._internal.method!==void 0?this._internal.method:"GET",parameters:{}};this._internal.requestFunc&&this._internal.requestFunc.apply(this._internal.self,[this._internal.inputValues,this._internal.outputValuesProxy,n]),this.doExternalFetch(n)},cancelFetch(){typeof _noodl_cloud_runtime_version>"u"?this._xhr&&this._xhr.abort():this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"rest-run-waring-",{message:"REST doesn't support cancel in cloud functions."})}}};function _parseScriptForErrors(e,t,n,o,r,s){if(r.editorConnection.clearWarning(o.component.name,o.id,"rest-run-waring-"+n),e===void 0){r.editorConnection.clearWarning(o.component.name,o.id,"rest-parse-waring-"+n);return}try{new Function(...t,e),r.editorConnection.clearWarning(o.component.name,o.id,"rest-parse-waring-"+n)}catch(p){r.editorConnection.sendWarning(o.component.name,o.id,"rest-parse-waring-"+n,{message:"<strong>"+n+"</strong>: "+p.message,showGlobally:!0})}function a(p){return s.find(f=>f.name===p)!==void 0}const l=e.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,""),u=l.match(/Inputs\.[A-Za-z0-9]+/g);if(u){const p={};u.forEach(f=>{p[f.substring(7)]=!0}),Object.keys(p).forEach(f=>{a("in-"+f)||s.push({name:"in-"+f,displayName:f,plug:"input",type:"*",group:"Inputs"})})}const d=l.match(/Outputs\.[A-Za-z0-9]+/g);if(d){const p={};d.forEach(f=>{p[f.substring(8)]=!0}),Object.keys(p).forEach(f=>{a("out-"+f)||s.push({name:"out-"+f,displayName:f,plug:"output",type:"*",group:"Outputs"})})}}const RestNode$1={node:RestNode,setup(e,t){if(!e.editorConnection)return;function n(o){function r(){if(!o.parameters)return;var s=[];function a(f){for(var g=0;g<s.length;g++)if(s[g].name===f&&s[g].plug==="input")return!0;return!1}if(o.parameters.resource){var l=o.parameters.resource.match(/\{[A-Za-z0-9_]*\}/g);for(var u in l){var d=l[u],p=d.replace("{","").replace("}","");a("in-"+p)||s.push({name:"in-"+p,displayName:p,type:"string",plug:"input",group:"Inputs"})}}o.parameters.requestScript&&_parseScriptForErrors(o.parameters.requestScript,["Inputs","Outputs","Request"],"Request script",o,e,s),o.parameters.responseScript&&_parseScriptForErrors(o.parameters.responseScript,["Inputs","Outputs","Response"],"Response script",o,e,s),e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(){r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.REST2",function(o){n(o)});for(const o of t.getNodesWithType("REST2"))n(o)})}};var commonjsGlobal$1=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs$1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var lodash_difference,hasRequiredLodash_difference;function requireLodash_difference(){if(hasRequiredLodash_difference)return lodash_difference;hasRequiredLodash_difference=1;var e=200,t="__lodash_hash_undefined__",n=9007199254740991,o="[object Arguments]",r="[object Function]",s="[object GeneratorFunction]",a=/[\\^$.*+?()[\]{}|]/g,l=/^\[object .+?Constructor\]$/,u=typeof commonjsGlobal$1=="object"&&commonjsGlobal$1&&commonjsGlobal$1.Object===Object&&commonjsGlobal$1,d=typeof self=="object"&&self&&self.Object===Object&&self,p=u||d||Function("return this")();function f(C,x,V){switch(V.length){case 0:return C.call(x);case 1:return C.call(x,V[0]);case 2:return C.call(x,V[0],V[1]);case 3:return C.call(x,V[0],V[1],V[2])}return C.apply(x,V)}function g(C,x){var V=C?C.length:0;return!!V&&T(C,x,0)>-1}function b(C,x){for(var V=-1,G=x.length,ee=C.length;++V<G;)C[ee+V]=x[V];return C}function _(C,x,V,G){for(var ee=C.length,oe=V+-1;++oe<ee;)if(x(C[oe],oe,C))return oe;return-1}function T(C,x,V){if(x!==x)return _(C,A,V);for(var G=V-1,ee=C.length;++G<ee;)if(C[G]===x)return G;return-1}function A(C){return C!==C}function v(C,x){return C.has(x)}function I(C,x){return C?.[x]}function k(C){var x=!1;if(C!=null&&typeof C.toString!="function")try{x=!!(C+"")}catch{}return x}var N=Array.prototype,w=Function.prototype,E=Object.prototype,F=p["__core-js_shared__"],L=function(){var C=/[^.]+$/.exec(F&&F.keys&&F.keys.IE_PROTO||"");return C?"Symbol(src)_1."+C:""}(),B=w.toString,H=E.hasOwnProperty,J=E.toString,ie=RegExp("^"+B.call(H).replace(a,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),pe=p.Symbol,xe=E.propertyIsEnumerable,Me=N.splice,ae=pe?pe.isConcatSpreadable:void 0,Ie=Math.max,Te=Se(p,"Map"),Ne=Se(Object,"create");function me(C){var x=-1,V=C?C.length:0;for(this.clear();++x<V;){var G=C[x];this.set(G[0],G[1])}}function Ee(){this.__data__=Ne?Ne(null):{}}function Ae(C){return this.has(C)&&delete this.__data__[C]}function qe(C){var x=this.__data__;if(Ne){var V=x[C];return V===t?void 0:V}return H.call(x,C)?x[C]:void 0}function Fe(C){var x=this.__data__;return Ne?x[C]!==void 0:H.call(x,C)}function Y(C,x){var V=this.__data__;return V[C]=Ne&&x===void 0?t:x,this}me.prototype.clear=Ee,me.prototype.delete=Ae,me.prototype.get=qe,me.prototype.has=Fe,me.prototype.set=Y;function ve(C){var x=-1,V=C?C.length:0;for(this.clear();++x<V;){var G=C[x];this.set(G[0],G[1])}}function Ve(){this.__data__=[]}function re(C){var x=this.__data__,V=K(x,C);if(V<0)return!1;var G=x.length-1;return V==G?x.pop():Me.call(x,V,1),!0}function Oe(C){var x=this.__data__,V=K(x,C);return V<0?void 0:x[V][1]}function $e(C){return K(this.__data__,C)>-1}function Le(C,x){var V=this.__data__,G=K(V,C);return G<0?V.push([C,x]):V[G][1]=x,this}ve.prototype.clear=Ve,ve.prototype.delete=re,ve.prototype.get=Oe,ve.prototype.has=$e,ve.prototype.set=Le;function fe(C){var x=-1,V=C?C.length:0;for(this.clear();++x<V;){var G=C[x];this.set(G[0],G[1])}}function Xe(){this.__data__={hash:new me,map:new(Te||ve),string:new me}}function Be(C){return ue(this,C).delete(C)}function De(C){return ue(this,C).get(C)}function Ue(C){return ue(this,C).has(C)}function je(C,x){return ue(this,C).set(C,x),this}fe.prototype.clear=Xe,fe.prototype.delete=Be,fe.prototype.get=De,fe.prototype.has=Ue,fe.prototype.set=je;function Re(C){var x=-1,V=C?C.length:0;for(this.__data__=new fe;++x<V;)this.add(C[x])}function We(C){return this.__data__.set(C,t),this}function st(C){return this.__data__.has(C)}Re.prototype.add=Re.prototype.push=We,Re.prototype.has=st;function K(C,x){for(var V=C.length;V--;)if(h(C[V][0],x))return V;return-1}function et(C,x,V,G){var ee=-1,oe=g,de=!0,ke=C.length,Ye=[],St=x.length;if(!ke)return Ye;x.length>=e&&(oe=v,de=!1,x=new Re(x));e:for(;++ee<ke;){var Je=C[ee],at=Je;if(Je=Je!==0?Je:0,de&&at===at){for(var ut=St;ut--;)if(x[ut]===at)continue e;Ye.push(Je)}else oe(x,at,G)||Ye.push(Je)}return Ye}function tt(C,x,V,G,ee){var oe=-1,de=C.length;for(V||(V=ge),ee||(ee=[]);++oe<de;){var ke=C[oe];V(ke)&&b(ee,ke)}return ee}function le(C){if(!z(C)||Z(C))return!1;var x=U(C)||k(C)?ie:l;return x.test(Ce(C))}function ye(C,x){return x=Ie(x===void 0?C.length-1:x,0),function(){for(var V=arguments,G=-1,ee=Ie(V.length-x,0),oe=Array(ee);++G<ee;)oe[G]=V[x+G];G=-1;for(var de=Array(x+1);++G<x;)de[G]=V[G];return de[x]=oe,f(C,this,de)}}function ue(C,x){var V=C.__data__;return ze(x)?V[typeof x=="string"?"string":"hash"]:V.map}function Se(C,x){var V=I(C,x);return le(V)?V:void 0}function ge(C){return S(C)||y(C)||!!(ae&&C&&C[ae])}function ze(C){var x=typeof C;return x=="string"||x=="number"||x=="symbol"||x=="boolean"?C!=="__proto__":C===null}function Z(C){return!!L&&L in C}function Ce(C){if(C!=null){try{return B.call(C)}catch{}try{return C+""}catch{}}return""}var c=ye(function(C,x){return M(C)?et(C,tt(x,1,M)):[]});function h(C,x){return C===x||C!==C&&x!==x}function y(C){return M(C)&&H.call(C,"callee")&&(!xe.call(C,"callee")||J.call(C)==o)}var S=Array.isArray;function O(C){return C!=null&&j(C.length)&&!U(C)}function M(C){return q(C)&&O(C)}function U(C){var x=z(C)?J.call(C):"";return x==r||x==s}function j(C){return typeof C=="number"&&C>-1&&C%1==0&&C<=n}function z(C){var x=typeof C;return!!C&&(x=="object"||x=="function")}function q(C){return!!C&&typeof C=="object"}return lodash_difference=c,lodash_difference}var lodash_differenceExports=requireLodash_difference();const difference=getDefaultExportFromCjs$1(lodash_differenceExports),ExpressionNode={name:"Expression",docs:"https://docs.noodl.net/nodes/math/expression",usePortAsLabel:"expression",category:"CustomCode",color:"javascript",nodeDoubleClickAction:{focusPort:"Expression"},searchTags:["javascript"],initialize(){var e=this._internal;e.scope={},e.hasScheduledEvaluation=!1,e.code=void 0,e.cachedValue=0,e.currentExpression="",e.compiledFunction=void 0,e.inputNames=[],e.inputValues=[]},getInspectInfo(){return this._internal.cachedValue},inputs:{expression:{group:"General",inputPriority:1,type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},displayName:"Expression",set(e){var t=this._internal;t.currentExpression=functionPreamble+"return ("+e+");",t.compiledFunction=void 0;var n=parsePorts(e),o=difference(n,t.inputNames),r=difference(t.inputNames,n),s=this;r.forEach(function(a){s.deregisterInput(a),delete t.scope[a]}),o.forEach(function(a){s.hasInput(a)||(s.registerInput(a,{set(l){t.scope[a]=l,this.isInputConnected("run")||this._scheduleEvaluateExpression()}}),t.scope[a]=0,s._inputValues[a]=0)}),t.inputNames=Object.keys(t.scope),this.isInputConnected("run")||this._scheduleEvaluateExpression()}},run:{group:"Actions",displayName:"Run",type:"signal",valueChangedToTrue(){this._scheduleEvaluateExpression()}}},outputs:{result:{group:"Result",type:"*",displayName:"Result",getter(){return this._internal.currentExpression?this._internal.cachedValue:0}},isTrue:{group:"Result",type:"boolean",displayName:"Is True",getter(){return this._internal.currentExpression?!!this._internal.cachedValue:!1}},isFalse:{group:"Result",type:"boolean",displayName:"Is False",getter(){return this._internal.currentExpression?!this._internal.cachedValue:!0}},isTrueEv:{group:"Events",type:"signal",displayName:"On True"},isFalseEv:{group:"Events",type:"signal",displayName:"On False"}},prototypeExtensions:{registerInputIfNeeded:{value(e){this.hasInput(e)||(this._internal.scope[e]=0,this._inputValues[e]=0,this.registerInput(e,{set(t){this._internal.scope[e]=t,this.isInputConnected("run")||this._scheduleEvaluateExpression()}}))}},_scheduleEvaluateExpression:{value(){var e=this._internal;e.hasScheduledEvaluation===!1&&(e.hasScheduledEvaluation=!0,this.flagDirty(),this.scheduleAfterInputsHaveUpdated(function(){var t=e.cachedValue;e.cachedValue=this._calculateExpression(),t!==e.cachedValue&&(this.flagOutputDirty("result"),this.flagOutputDirty("isTrue"),this.flagOutputDirty("isFalse")),e.cachedValue?this.sendSignalOnOutput("isTrueEv"):this.sendSignalOnOutput("isFalseEv"),e.hasScheduledEvaluation=!1}))}},_calculateExpression:{value(){var e=this._internal;e.compiledFunction||(e.compiledFunction=this._compileFunction());for(var t=0;t<e.inputNames.length;++t){var n=e.scope[e.inputNames[t]];e.inputValues[t]=n}try{return e.compiledFunction.apply(null,e.inputValues)}catch(o){console.error("Error in expression:",o.message)}return 0}},_compileFunction:{value(){var e=this._internal.currentExpression,t=Object.keys(this._internal.scope),n=e+t.join(" ");if(compiledFunctionsCache.hasOwnProperty(n)===!1){t.push(e);try{compiledFunctionsCache[n]=construct(Function,t)}catch(o){console.error("Failed to compile JS function",o.message)}}return compiledFunctionsCache[n]}}}};var functionPreamble=["var min = Math.min, max = Math.max, cos = Math.cos, sin = Math.sin, tan = Math.tan, sqrt = Math.sqrt, pi = Math.PI, round = Math.round, floor = Math.floor, ceil = Math.ceil, abs = Math.abs, random = Math.random;"].join("");function construct(e,t){function n(){return e.apply(this,t)}return n.prototype=e.prototype,new n}var compiledFunctionsCache={},portsToIgnore=["min","max","cos","sin","tan","sqrt","pi","round","floor","ceil","abs","random","Math","window","document","undefined","Vars","true","false","null","Boolean"];function parsePorts(e){var t=[];function n(s){portsToIgnore.indexOf(s)===-1&&(t.some(function(a){return a===s})||t.push(s))}e=e.replace(/\"([^\"]*)\"/g,"").replace(/\'([^\']*)\'/g,"");var o=e.matchAll(/[a-zA-Z\_\$][a-zA-Z0-9\.\_\$]*/g);for(const s of o){var r=s[0];r.indexOf(".")!==-1&&(r=r.split(".")[0]),n(r)}return t}function updatePorts$7$1(e,t,n){var o=parsePorts(t),r=o.map(function(s){return{group:"Parameters",name:s,type:{name:"*",editAsType:"string"},plug:"input"}});n.sendDynamicPorts(e,r)}function evalCompileWarnings(e,t){try{new Function(t.parameters.expression),e.clearWarning(t.component.name,t.id,"expression-compile-error")}catch(n){e.sendWarning(t.component.name,t.id,"expression-compile-error",{message:n.message})}}const Expression={node:ExpressionNode,setup(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Expression",function(n){n.parameters.expression&&(updatePorts$7$1(n.id,n.parameters.expression,e.editorConnection),evalCompileWarnings(e.editorConnection,n)),n.on("parameterUpdated",function(o){o.name==="expression"&&(updatePorts$7$1(n.id,n.parameters.expression,e.editorConnection),evalCompileWarnings(e.editorConnection,n))})})}};function getAbsoluteUrl(e){const t=String(e);return!t||t[0]==="/"||t.includes("://")||t.startsWith("data:")?t:(Noodl.baseUrl||"/")+t}function logJavaScriptNodeError(e){typeof e=="string"?console.log("Error in JS node run code.",e):console.log("Error in JS node run code.",Object.getPrototypeOf(e).constructor.name+": "+e.message,e.stack)}var userFunctionsCache={};function JavascriptNodeParser(e,t){this.inputs={},this.outputs={},this.error=void 0,this.code=e;const n=t?t.node:void 0;this._initializeAPIs();var o=userFunctionsCache[e];if(!o)try{o=new Function(["define","script","Node","Component"],JavascriptNodeParser.getCodePrefix()+e),userFunctionsCache[e]=o}catch(r){this.error=r.message,console.error(r)}if(o)try{o(this.define.bind(this),this.script.bind(this),this.apis.Node,n?JavascriptNodeParser.getComponentScopeForNode(n):{}),this._afterSourced()}catch(r){this.error=r.message,console.error(r)}}JavascriptNodeParser.prototype.define=function(e){this.inputs=e.inputs||{},this.outputs=e.outputs||{},this.setup=e.setup,this.change=e.run||e.change,this.destroy=e.destroy,this.definedObject=e};function _scriptExtend(e){var t={inputs:e.inputs||{},outputs:e.outputs||{},setup(o,r){if(this.inputs=o,this.outputs=r,this.setOutputs=function(a){for(var l in a)this.outputs[l]=a[l],this.flagOutputDirty(l)},e.methods)for(var s in e.methods)this[s]=e.methods[s];e.setup&&e.setup.apply(this)},destroy(o,r){this.inputs=o,this.outputs=r,e.destroy&&e.destroy.apply(this)},change(o,r){this.inputs=o,this.outputs=r;var s=this._oldInputs||{};if(e.changed){for(var a in o)if(o[a]!==s[a]){var l=e.changed[a];typeof l=="function"&&l.apply(this,[o[a],s[a]])}}this._oldInputs=Object.assign({},o)}};if(e.signals)for(var n in e.signals)t[n]=e.signals[n],t.inputs[n]="signal";return t}JavascriptNodeParser.prototype.script=function(e){var t=_scriptExtend(e);this.inputs=t.inputs||{},this.outputs=t.outputs||{},this.setup=t.setup,this.change=t.run||t.change,this.destroy=t.destroy,this.definedObject=t},JavascriptNodeParser.prototype._initializeAPIs=function(){this.apis={},this.apis.Node={Inputs:{},Outputs:{},Signals:{},Setters:{}}},JavascriptNodeParser.prototype._afterSourced=function(){if(this.definedObject===void 0){var e=this.apis.Node;if(this.inputs=Object.assign({},e.Inputs||{}),this.outputs=Object.assign({},e.Outputs||{}),this.setup=function(n,o){const r=this;e.setOutputs=function(s){for(var a in s)o[a]=s[a],r.flagOutputDirty(a)},e.OnInit&&e.OnInit.apply(this)},this.destroy=e.OnDestroy||this.destory,this.change=(n,o,r)=>{for(var s in r)typeof e.Setters[s]=="function"&&e.Setters[s](n[s]);typeof e.OnInputsChanged=="function"&&e.OnInputsChanged()},this.definedObject={inputs:this.inputs,outputs:this.outputs,setup:this.setup,destroy:this.destroy,change:this.change},e.Signals!==void 0)for(var t in e.Signals)typeof e.Signals[t]=="function"&&(this.inputs[t]="signal",this.definedObject[t]=e.Signals[t])}},JavascriptNodeParser.createFromCode=function(e,t){return new JavascriptNodeParser(e,t)},JavascriptNodeParser.createFromURL=function(e,t,n){e=getAbsoluteUrl(e);var o=new window.XMLHttpRequest;o.open("GET",e,!0),o.onreadystatechange=function(){(this.readyState===4||this.readyState===XMLHttpRequest.DONE)&&t(new JavascriptNodeParser(this.response))},o.onerror=function(){console.log("Failed to request",e)},o.send()},JavascriptNodeParser.parseAndAddPortsFromScript=function(e,t,n){function o(s){return typeof s=="string"?t.find(a=>a.name===s)!==void 0:t.find(a=>a.name===s.name&&a.plug===s.plug)!==void 0}function r(s,a){if(s==null)return;const l={};for(const u of s){let d=u[1];d!==void 0&&(l[d]=!0)}Object.keys(l).forEach(u=>{o({name:a.prefix+u,plug:a.plug})||t.push({name:a.prefix+u,displayName:u,plug:a.plug,type:a.type,group:a.group})})}n.skipInputs||(r(e.matchAll(/Inputs\.([A-Za-z0-9_]+)/g),{type:n.inputType||"*",plug:"input",group:n.inputGroup||"Inputs",prefix:n.inputPrefix||""}),r(e.matchAll(/Inputs\s*\[\s*(?:'|")(.*)(?:'|")\s*\]/g),{type:n.inputType||"*",plug:"inputs",group:n.inputGroup||"Inputs",prefix:n.inputPrefix||""})),n.skipOutputs||(n.skipOutputSignals||(r(e.matchAll(/Outputs\.([A-Za-z0-9]+)\s*\(\s*\)/g),{type:"signal",plug:"output",group:"Outputs",prefix:n.outputPrefix||""}),r(e.matchAll(/Outputs\s*\[\s*(?:'|")(.*)(?:'|")\s*\]\(\s*\)/g),{type:"signal",plug:"output",group:"Outputs",prefix:n.outputPrefix||""})),n.skipRegularOutputs||(r(e.matchAll(/Outputs\.([A-Za-z0-9_]+)/g),{type:"*",plug:"output",group:"Outputs",prefix:n.outputPrefix||""}),r(e.matchAll(/Outputs\s*\[\s*\"([^\"]*)\"\s*\]/g),{type:"*",plug:"output",group:"Outputs",prefix:n.outputPrefix||""})))},JavascriptNodeParser.prototype.getPorts=function(){var e=[],t=this;return Object.keys(this.inputs).forEach(function(n){var o=t.inputs[n],r={name:n,plug:"input"};if(typeof o=="string")r.type={name:o},r.group="Inputs";else for(var s in o)r[s]=o[s];e.push(r)}),Object.keys(this.outputs).forEach(function(n){e.push({name:n,type:{name:t.outputs[n]},plug:"output",group:"Outputs"})}),JavascriptNodeParser.parseAndAddPortsFromScript(this.code,e,{}),e};const _componentScopes={};function _findParentComponentStateModelId(e){function t(o){let r;if(o.getRoots().length>0){const s=o.getRoots()[0];s.getVisualParentNode?s.getVisualParentNode()&&(r=s.getVisualParentNode().nodeScope.componentOwner):s.parentNodeScope&&(r=o.parentNodeScope.componentOwner)}else o.parentNodeScope&&(r=o.parentNodeScope.componentOwner);if(r&&r.nodeScope&&r.nodeScope.componentOwner!==o)return r.nodeScope.getNodesWithType("net.noodl.ComponentObject").length>0||r.nodeScope.getNodesWithType("Component State").length>0?r:t(r)}const n=t(e.nodeScope.componentOwner);if(n)return"componentState"+n.getInstanceId()}function _findForEachModel(e){for(var t=e.nodeScope.componentOwner;t!==void 0&&t._forEachModel===void 0&&t.parentNodeScope;)t=t.parentNodeScope.componentOwner;return t!==void 0?t._forEachModel:void 0}JavascriptNodeParser.getComponentScopeForNode=function(e){const t=e.nodeScope.componentOwner.getInstanceId();if(_componentScopes[t]===void 0){_componentScopes[t]={};const r=(e.nodeScope.modelScope||Model).get("componentState"+t);_componentScopes[t].Object=r}const n=_findParentComponentStateModelId(e),o=n!==void 0?(e.nodeScope.modelScope||Model).get(n):void 0;return _componentScopes[t].ParentObject=o,_componentScopes[t].RepeaterObject=_findForEachModel(e),_componentScopes[t]},JavascriptNodeParser.getCodePrefix=function(){return`const Script = (typeof Node !== 'undefined')?Node:undefined;
21
- `},JavascriptNodeParser.createNoodlAPI=function(){return typeof window<"u"&&window.Noodl!==void 0?window.Noodl:{}};const SimpleJavascriptNode={name:"JavaScriptFunction",displayNodeName:"Function",docs:"https://docs.noodl.net/nodes/javascript/function",category:"CustomCode",color:"javascript",nodeDoubleClickAction:{focusPort:"Script"},searchTags:["javascript"],exportDynamicPorts:!0,initialize(){this._internal.inputValues={},this._internal.outputValues={},this._internal.outputValuesProxy=new Proxy(this._internal.outputValues,{set:(e,t,n)=>{if(!this._deleted)return n!==this._internal.outputValues[t]&&(this.registerOutputIfNeeded("out-"+t),this._internal.outputValues[t]=n,this.flagOutputDirty("out-"+t)),!0}}),this._internal._this={}},getInspectInfo(){return[{type:"value",value:{inputs:this._internal.inputValues,outputs:this._internal.outputValues}}]},inputs:{scriptInputs:{type:{name:"proplist",allowEditOnly:!0},group:"Script Inputs",set(e){}},scriptOutputs:{type:{name:"proplist",allowEditOnly:!0},group:"Script Outputs",set(e){}},functionScript:{displayName:"Script",plug:"input",type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},group:"General",set(e){if(e===void 0){this._internal.func=void 0;return}this._internal.func=this.parseScript(e),this.isInputConnected("run")||this.scheduleRun()}},run:{type:"signal",displayName:"Run",group:"Actions",valueChangedToTrue(){this.scheduleRun()}}},outputs:{},methods:{scheduleRun(){this.runScheduled||(this.runScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.runScheduled=!1,this._deleted||this.runScript()}))},runScript:async function(){const e=this._internal.func;if(e===void 0)return;const t=this._internal.inputValues,n=this._internal.outputValuesProxy;for(const o in this.model.outputPorts)if(this._isSignalType(o)){const r=()=>{this.hasOutput(o)&&this.sendSignalOnOutput(o)};this._internal.outputValues[o.substring(4)]=r,this._internal.outputValues[o.substring(4)].send=r}try{await e.apply(this._internal._this,[t,n,JavascriptNodeParser.createNoodlAPI(this.nodeScope.modelScope),JavascriptNodeParser.getComponentScopeForNode(this)])}catch(o){logJavaScriptNodeError(o),this.context.editorConnection&&this.context.isWarningTypeEnabled("javascriptExecution")&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"js-function-run-waring",{showGlobally:!0,message:o.message,stack:o.stack})}},setScriptInputValue(e,t){this._internal.inputValues[e]=t,this.isInputConnected("run")||this.scheduleRun()},getScriptOutputValue(e){if(!this._isSignalType(e))return this._internal.outputValues[e]},setScriptInputType(e,t){this._internal.inputTypes[e]=t},setScriptOutputType(e,t){this._internal.outputTypes[e]=t},parseScript(e){var t;try{const n=Object.getPrototypeOf(async function(){}).constructor;t=new n("Inputs","Outputs","Noodl","Component",JavascriptNodeParser.getCodePrefix()+e)}catch(n){console.log("Error while parsing action script: "+n)}return t},_isSignalType(e){return this.model.outputPorts[e]&&this.model.outputPorts[e].type==="signal"},registerInputIfNeeded(e){if(!this.hasInput(e)){if(e.startsWith("in-")){const t=e.substring(3),n={set:this.setScriptInputValue.bind(this,t)};this.model&&this.model.parameters["intype-"+t]&&(n.type=this.model.parameters["intype-"+t]),this.registerInput(e,n)}if(e.startsWith("intype-")){const t=e.substring(7);this.registerInput(e,{set(n){this.hasInput("in"+t)&&(this.getInput("in"+t).type=n)}})}e.startsWith("outtype-")&&this.registerInput(e,{set(){}})}},registerOutputIfNeeded(e){if(!this.hasOutput(e)&&e.startsWith("out-"))return this.registerOutput(e,{getter:this.getScriptOutputValue.bind(this,e.substring(4))})}}};function _parseScriptForErrorsAndPorts(e,t,n,o,r){if(o.editorConnection.clearWarning(n.component.name,n.id,"js-function-run-waring"),e===void 0){o.editorConnection.clearWarning(n.component.name,n.id,"js-function-parse-waring");return}try{const s=Object.getPrototypeOf(async function(){}).constructor;new s("Inputs","Outputs","Noodl","Component",e),o.editorConnection.clearWarning(n.component.name,n.id,"js-function-parse-waring")}catch(s){o.editorConnection.sendWarning(n.component.name,n.id,"js-function-parse-waring",{showGlobally:!0,message:s.message})}JavascriptNodeParser.parseAndAddPortsFromScript(e,r,{inputPrefix:"in-",outputPrefix:"out-"})}const inputTypeEnums=[{value:"string",label:"String"},{value:"boolean",label:"Boolean"},{value:"number",label:"Number"},{value:"object",label:"Object"},{value:"date",label:"Date"},{value:"array",label:"Array"},{value:"color",label:"Color"}],SimpleJavaScript={node:SimpleJavascriptNode,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[];const a=inputTypeEnums.concat([{value:"signal",label:"Signal"}]);o.parameters.scriptOutputs!==void 0&&o.parameters.scriptOutputs.length>0&&o.parameters.scriptOutputs.forEach(l=>{s.push({name:"outtype-"+l.label,displayName:"Type",editorName:l.label+" | Type",plug:"input",type:{name:"enum",enums:a,allowEditOnly:!0},default:"string",parent:"scriptOutputs",parentItemId:l.id}),s.push({name:"out-"+l.label,displayName:l.label,plug:"output",type:o.parameters["outtype-"+l.label]||"*",group:"Outputs"})}),o.parameters.scriptInputs!==void 0&&o.parameters.scriptInputs.length>0&&o.parameters.scriptInputs.forEach(l=>{s.push({name:"intype-"+l.label,displayName:"Type",editorName:l.label+" | Type",plug:"input",type:{name:"enum",enums:inputTypeEnums,allowEditOnly:!0},default:"string",parent:"scriptInputs",parentItemId:l.id}),s.push({name:"in-"+l.label,displayName:l.label,plug:"input",type:o.parameters["intype-"+l.label]||"string",group:"Inputs"})}),_parseScriptForErrorsAndPorts(o.parameters.functionScript,"Script ",o,e,s),s.forEach(l=>{l.type==="signal"&&l.plug==="output"&&(o.outputPorts[l.name]=l)}),e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.JavaScriptFunction",function(o){n(o)});for(const o of t.getNodesWithType("JavaScriptFunction"))n(o)})}};Object.defineProperty(Array.prototype,"items",{enumerable:!1,get(){return this},set(e){this.set(e)}}),Object.defineProperty(Array.prototype,"each",{enumerable:!1,writable:!1,value:Array.prototype.forEach}),Object.defineProperty(Array.prototype,"size",{enumerable:!1,writable:!1,value(){return this.length}}),Object.defineProperty(Array.prototype,"get",{enumerable:!1,writable:!1,value(e){return this[e]}}),Object.defineProperty(Array.prototype,"getId",{enumerable:!1,writable:!1,value(){return this._id}}),Object.defineProperty(Array.prototype,"id",{enumerable:!1,get(){return this.getId()}}),Object.defineProperty(Array.prototype,"set",{enumerable:!1,writable:!1,value(e){var t,n;if(e===this)return;e=e||[];function o(d){for(var p={},f=d.length,g=0;g<f;g++){var b=d[g];p[b.getId()]=b}return p}var r=[];for(t=e.length,n=0;n<t;n++){var s=e[n];Model.instanceOf(s)?r.push(s):r.push(Model.create(s))}var a=this.items,l=o(a),u=o(r);for(t=a.length,n=0;n<t;n++)u.hasOwnProperty(a[n].getId())||(this.removeAtIndex(n),n--,t--);for(n=0;n<Math.min(a.length,r.length);n++)a[n]!==r[n]&&(l.hasOwnProperty(r[n].getId())&&this.remove(r[n]),this.addAtIndex(r[n],n));for(n=a.length;n<r.length;n++)this.add(r[n])}}),Object.defineProperty(Array.prototype,"notify",{enumerable:!1,writable:!1,value:async function(e,t){if(this._listeners&&this._listeners[e])for(var n=this._listeners[e].slice(),o=0;o<n.length;o++)await n[o](t)}}),Object.defineProperty(Array.prototype,"contains",{enumerable:!1,writable:!1,value(e){return this.indexOf(e)!==-1}}),Object.defineProperty(Array.prototype,"add",{enumerable:!1,writable:!1,value:async function(e){this.contains(e)||(this.items.push(e),await this.notify("add",{item:e,index:this.items.length-1}),await this.notify("change"),await e.notify("add",{collection:this}))}}),Object.defineProperty(Array.prototype,"remove",{enumerable:!1,writable:!1,value(e){var t=this.items.indexOf(e);t!==-1&&this.removeAtIndex(t)}}),Object.defineProperty(Array.prototype,"addAtIndex",{enumerable:!1,writable:!1,value:async function(e,t){this.contains(e)||(this.items.splice(t,0,e),await this.notify("add",{item:e,index:t}),await this.notify("change"),await e.notify("add",{collection:this,index:t}))}}),Object.defineProperty(Array.prototype,"removeAtIndex",{enumerable:!1,writable:!1,value:async function(e){var t=this.items[e];this.items.splice(e,1),await this.notify("remove",{item:t,index:e}),await this.notify("change"),await t.notify("remove",{collection:this})}}),Object.defineProperty(Array.prototype,"on",{enumerable:!1,writable:!1,value(e,t){this._listeners||Object.defineProperty(this,"_listeners",{enumerable:!1,writable:!1,value:{}}),this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t)}}),Object.defineProperty(Array.prototype,"off",{enumerable:!1,writable:!1,value(e,t){if(this._listeners&&this._listeners[e]){var n=this._listeners[e].indexOf(t);n!==-1&&this._listeners[e].splice(n,1)}}});class Collection extends Array{}const collections=Collection._collections={};Collection.create=function(e){const t=Model.guid();return collections[t]=new Collection,Object.defineProperty(collections[t],"_id",{enumerable:!1,writable:!1,value:t}),e&&collections[t].set(e),collections[t]},Collection.get=function(e){return e===void 0&&(e=Model.guid()),collections[e]||(collections[e]=new Collection,Object.defineProperty(collections[e],"_id",{enumerable:!1,writable:!1,value:e})),collections[e]},Collection.instanceOf=function(e){return e instanceof Collection},Collection.exists=function(e){return collections[e]!==void 0};function convertVisualFilter(e,t){var n=t.queryParameters;if(e.combinator!==void 0&&e.rules!==void 0){if(e.rules.length===0)return;if(e.rules.length===1)return convertVisualFilter(e.rules[0],t);{const u={},d="$"+e.combinator;return u[d]=[],e.rules.forEach(p=>{var f=convertVisualFilter(p,t);f!==void 0&&u[d].push(f)}),u}}else if(e.operator==="related to"){var o=e.input!==void 0?n[e.input]:void 0;return o===void 0?void 0:{$relatedTo:{object:{__type:"Pointer",objectId:o,className:e.relatedTo},key:e.relationProperty}}}else{const u={};var r,o=e.input!==void 0?n[e.input]:e.value;if(e.operator==="exist")return u[e.property]={$exists:!0},u;if(e.operator==="not exist")return u[e.property]={$exists:!1},u;if(o===void 0)return;if(CloudStore._collections[t.collectionName])var s=CloudStore._collections[t.collectionName].schema;var a=s&&s.properties&&s.properties[e.property]?s.properties[e.property].type:void 0;if(a==="Date"&&(o instanceof Date||(o=new Date(o.toString())),o={__type:"Date",iso:o.toISOString()}),e.operator==="greater than")r={$gt:o};else if(e.operator==="greater than or equal to")r={$gte:o};else if(e.operator==="less than")r={$lt:o};else if(e.operator==="less than or equal to")r={$lte:o};else if(e.operator==="equal to")r={$eq:o};else if(e.operator==="not equal to")r={$ne:o};else if(e.operator==="points to"){var l=s&&s.properties&&s.properties[e.property]?s.properties[e.property].targetClass:void 0;r={$eq:{__type:"Pointer",objectId:o,className:l}}}else e.operator==="contain"&&(r={$regex:o,$options:"i"});return u[e.property]=r,u}}function matchesQuery(e,t){var n=!0;if(t===void 0)return!0;if(t.$and!==void 0)t.$and.forEach(r=>{n&=matchesQuery(e,r)});else if(t.$or!==void 0)n=!1,t.$or.forEach(r=>{n|=matchesQuery(e,r)});else{var o=Object.keys(t);o.forEach(r=>{if(r==="objectId")t[r].$eq!==void 0?n&=e.getId()===t[r].$eq:t[r].$in!==void 0&&(n&=t[r].$in.indexOf(e.getId())!==-1);else if(r==="$relatedTo")n=!1;else{var s=e.get(r);t[r].$eq!==void 0&&t[r].$eq.__type==="Pointer"?n&=s===t[r].$eq.objectId:t[r].$eq!==void 0?n&=s==t[r].$eq:t[r].$ne!==void 0?n&=s!=t[r].$ne:t[r].$lt!==void 0?n&=s<t[r].$lt:t[r].$lte!==void 0?n&=s<=t[r].$lt:t[r].$gt!==void 0?n&=s>t[r].$gt:t[r].$gte!==void 0?n&=s>=t[r].$gte:t[r].$exists!==void 0?n&=s!==void 0:t[r].$in!==void 0?n&=t[r].$in.indexOf(s)!==-1:t[r].$nin!==void 0?n&=t[r].$in.indexOf(s)===-1:t[r].$regex!==void 0&&(n&=new RegExp(t[r].$regex,t[r].$options).test(s))}})}return n}function compareObjects(e,t,n){for(var o=0;o<e.length;o++){let r=e[o];if(r[0]==="-"){let s=r.substring(1);if(t.get(s)>n.get(s))return-1;if(t.get(s)<n.get(s))return 1}else{if(t.get(r)>n.get(r))return 1;if(t.get(r)<n.get(r))return-1}}return 0}function convertVisualSorting(e){return e.map(t=>(t.order==="descending"?"-":"")+t.property)}function _value(e){return e instanceof Date&&typeof e.toISOString=="function"?{__type:"Date",iso:e.toISOString()}:e}function convertFilterOp(e,t){const n=Object.keys(e);if(n.length===0)return{};if(n.length!==1)return t.error("Filter must only have one key found "+n.join(","));const o={},r=n[0];if(e.and!==void 0&&Array.isArray(e.and))o.$and=e.and.map(a=>convertFilterOp(a,t));else if(e.or!==void 0&&Array.isArray(e.or))o.$or=e.or.map(a=>convertFilterOp(a,t));else if(e.idEqualTo!==void 0)o.objectId={$eq:e.idEqualTo};else if(e.idContainedIn!==void 0)o.objectId={$in:e.idContainedIn};else if(e.relatedTo!==void 0){const a=e.relatedTo.id;if(a===void 0)return t.error("Must provide id in relatedTo filter");const l=e.relatedTo.key;if(l===void 0)return t.error("Must provide key in relatedTo filter");const u=e.relatedTo.className||(t.modelScope||Model).get(a)?._class;if(typeof u>"u")return t.error("Must preload the Pointer or include className");o.$relatedTo={object:{__type:"Pointer",objectId:a,className:u},key:l}}else if(typeof e[r]=="object"){const a=e[r];if(a.equalTo!==void 0)o[r]={$eq:_value(a.equalTo)};else if(a.notEqualTo!==void 0)o[r]={$ne:_value(a.notEqualTo)};else if(a.lessThan!==void 0)o[r]={$lt:_value(a.lessThan)};else if(a.greaterThan!==void 0)o[r]={$gt:_value(a.greaterThan)};else if(a.lessThanOrEqualTo!==void 0)o[r]={$lte:_value(a.lessThanOrEqualTo)};else if(a.greaterThanOrEqualTo!==void 0)o[r]={$gte:_value(a.greaterThanOrEqualTo)};else if(a.exists!==void 0)o[r]={$exists:a.exists};else if(a.containedIn!==void 0)o[r]={$in:a.containedIn};else if(a.notContainedIn!==void 0)o[r]={$nin:a.notContainedIn};else if(a.pointsTo!==void 0){let l=null;CloudStore._collections[t.collectionName]&&(l=CloudStore._collections[t.collectionName].schema);const u=l&&l.properties&&l.properties[r]?l.properties[r].targetClass:void 0;(l&&l.properties&&l.properties[r]?l.properties[r].type:void 0)==="Relation"?o[r]={__type:"Pointer",objectId:a.pointsTo,className:u}:Array.isArray(a.pointsTo)?o[r]={$in:a.pointsTo.map(d=>({__type:"Pointer",objectId:d,className:u}))}:o[r]={$eq:{__type:"Pointer",objectId:a.pointsTo,className:u}}}else if(a.matchesRegex!==void 0)o[r]={$regex:a.matchesRegex,$options:a.options};else if(a.text!==void 0&&a.text.search!==void 0){var s=a.text.search;typeof s=="string"?o[r]={$text:{$search:{$term:s,$caseSensitive:!1}}}:o[r]={$text:{$search:{$term:s.term,$language:s.language,$caseSensitive:s.caseSensitive,$diacriticSensitive:s.diacriticSensitive}}}}else if(a.nearSphere!==void 0){var s=a.nearSphere;o[r]={$nearSphere:{__type:"GeoPoint",latitude:s.latitude,longitude:s.longitude},$maxDistanceInMiles:s.$maxDistanceInMiles,$maxDistanceInKilometers:s.maxDistanceInKilometers,$maxDistanceInRadians:s.maxDistanceInRadians}}else if(a.withinBox!==void 0){var s=a.withinBox;o[r]={$within:{$box:s.map(u=>({__type:"GeoPoint",latitude:u.latitude,longitude:u.longitude}))}}}else if(a.withinPolygon!==void 0){var s=a.withinPolygon;o[r]={$geoWithin:{$polygon:s.map(u=>({__type:"GeoPoint",latitude:u.latitude,longitude:u.longitude}))}}}}else t.error("Unrecognized filter keys "+n.join(","));return o}var DbCollectionNode$2={name:"DbCollection2",docs:"https://docs.noodl.net/nodes/data/cloud-data/query-records",displayName:"Query Records",category:"Cloud Services",usePortAsLabel:"collectionName",color:"data",initialize(){var e=this;this._internal.queryParameters={};var t=!1;this._internal.collectionChangedCallback=function(){t||(t=!0,e.scheduleAfterInputsHaveUpdated(function(){e.flagOutputDirty("count"),e.flagOutputDirty("firstItemId"),e.flagOutputDirty("isEmpty"),t=!1}))},this._internal.cloudStoreEvents=function(o){if(e.isInputConnected("storageFetch")===!0||e._internal.collection===void 0||o.collection!==e._internal.name)return;function r(s){if(e._internal.currentQuery.sort!==void 0){for(var a=0;a<e._internal.collection.size()&&!(compareObjects(e._internal.currentQuery.sort,e._internal.collection.get(a),s)>0);a++);e._internal.collection.addAtIndex(s,a)}else e._internal.collection.add(s);let l=e._internal.collection.size();e._internal.currentQuery.limit!==void 0&&l>e._internal.currentQuery.limit&&e._internal.collection.remove(e._internal.collection.get(e._internal.currentQuery.sort!==void 0&&e._internal.currentQuery.sort[0][0]==="-"?l-1:0)),e.flagOutputDirty("items"),e.flagOutputDirty("count"),e.flagOutputDirty("firstItemId"),e.flagOutputDirty("isEmpty")}if(o.type==="create"){const s=Model.get(o.object.objectId);s!==void 0&&matchesQuery(s,e._internal.currentQuery.where)&&r(s)}else if(o.type==="save"){const s=Model.get(o.objectId);if(s!==void 0){const a=matchesQuery(s,e._internal.currentQuery.where);!a&&e._internal.collection.contains(s)?(e._internal.collection.remove(s),e.flagOutputDirty("items"),e.flagOutputDirty("count"),e.flagOutputDirty("firstItemId"),e.flagOutputDirty("isEmpty")):a&&!e._internal.collection.contains(s)&&r(s)}}else if(o.type==="delete"){const s=Model.get(o.objectId);s!==void 0&&(e._internal.collection.remove(s),e.flagOutputDirty("items"),e.flagOutputDirty("count"),e.flagOutputDirty("firstItemId"),e.flagOutputDirty("isEmpty"))}};const n=CloudStore.forScope(this.nodeScope.modelScope);n.on("save",this._internal.cloudStoreEvents),n.on("create",this._internal.cloudStoreEvents),n.on("delete",this._internal.cloudStoreEvents),this._internal.storageSettings={}},getInspectInfo(){const e=this._internal.collection;return e?[{type:"value",value:e.items}]:{type:"text",value:"[Not executed yet]"}},inputs:{},outputs:{items:{type:"array",displayName:"Items",group:"General",getter(){return this._internal.collection}},firstItemId:{type:"string",displayName:"First Record Id",group:"General",getter(){if(this._internal.collection){var e=this._internal.collection.get(0);if(e!==void 0)return e.getId()}}},isEmpty:{type:"boolean",displayName:"Is Empty",group:"General",getter(){return this._internal.collection?this._internal.collection.size()===0:!0}},count:{type:"number",displayName:"Count",group:"General",getter(){return this._internal.collection?this._internal.collection.size():0}},fetched:{group:"Events",type:"signal",displayName:"Success"},failure:{group:"Events",type:"signal",displayName:"Failure"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},prototypeExtensions:{setCollectionName(e){this._internal.name=e,this.isInputConnected("storageFetch")===!1&&this.scheduleFetch()},setCollection(e){this.bindCollection(e),this.flagOutputDirty("firstItemId"),this.flagOutputDirty("isEmpty"),this.flagOutputDirty("items"),this.flagOutputDirty("count")},unbindCurrentCollection(){var e=this._internal.collection;e&&(e.off("change",this._internal.collectionChangedCallback),this._internal.collection=void 0)},bindCollection(e){this.unbindCurrentCollection(),this._internal.collection=e,e&&e.on("change",this._internal.collectionChangedCallback)},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this.unbindCurrentCollection();const e=CloudStore.forScope(this.nodeScope.modelScope);e.off("insert",this._internal.cloudStoreEvents),e.off("delete",this._internal.cloudStoreEvents),e.off("save",this._internal.cloudStoreEvents)},setError(e){this._internal.err=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure")},scheduleFetch(){var e=this._internal;e.fetchScheduled||(e.fetchScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.fetchScheduled=!1,this.fetch()}))},fetch(){this.context.editorConnection&&(this._internal.name===void 0?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"query-collection",{message:"No collection specified for query"}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"query-collection"));const e=Collection.get(),t=this.getStorageFilter(),n=this.getStorageLimit(),o=this.getStorageSkip(),r=this.getStorageFetchTotalCount();this._internal.currentQuery={where:t.where,sort:t.sort,limit:n,skip:o},CloudStore.forScope(this.nodeScope.modelScope).query({collection:this._internal.name,where:t.where,sort:t.sort,limit:n,skip:o,count:r,success:(s,a)=>{s!==void 0&&e.set(s.map(l=>{var u=CloudStore._fromJSON(l,this._internal.name,this.nodeScope.modelScope);return u})),a!==void 0&&(this._internal.storageSettings.storageTotalCount=a,this.hasOutput("storageTotalCount")&&this.flagOutputDirty("storageTotalCount")),this.setCollection(e),this.sendSignalOnOutput("fetched")},error:s=>{this.setCollection(e),this.setError(s||"Failed to fetch.")}})},getStorageFilter(){const e=this._internal.storageSettings;if(e.storageFilterType===void 0||e.storageFilterType==="simple"){const d=this._internal.visualFilter!==void 0?convertVisualFilter(this._internal.visualFilter,{queryParameters:this._internal.queryParameters,collectionName:this._internal.name}):void 0,p=this._internal.visualSorting!==void 0?convertVisualSorting(this._internal.visualSorting):void 0;return{where:d,sort:p}}else if(e.storageFilterType==="json"){if(!this._internal.filterFunc)try{var t=e.storageJSONFilter;t=t.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,""),this._internal.filterVariables=t.match(/\$[A-Za-z0-9]+/g)||[];var n=["filter","where","sort","Inputs"].concat(this._internal.filterVariables).concat([t]);this._internal.filterFunc=Function.apply(null,n)}catch(p){this._internal.filterFunc=void 0,console.log("Error while parsing filter script: "+p)}if(!this._internal.filterFunc)return;var o={},r=[],s=this,a=function(p){o=convertFilterOp(p,{collectionName:s._internal.name,error(f){s.context.editorConnection.sendWarning(s.nodeScope.componentOwner.name,s.id,"query-collection-filter",{message:f})}})},l=function(p){r=p};const d={};for(let p in e)p.startsWith("storageFilterValue-")&&(d[p.substring(19)]=e[p]);var u=[a,a,l,d];this._internal.filterVariables.forEach(p=>{u.push(e["storageFilterValue-"+p.substring(1)])});try{this._internal.filterFunc.apply(this,u)}catch(p){console.log("Error while running filter script: "+p)}return{where:o,sort:r}}},getStorageLimit(){const e=this._internal.storageSettings;if(e.storageEnableLimit)return e.storageLimit||10},getStorageSkip(){const e=this._internal.storageSettings;if(e.storageEnableLimit)return e.storageSkip||0},getStorageFetchTotalCount(){return!!this._internal.storageSettings.storageEnableCount},registerOutputIfNeeded(e){this.hasOutput(e)||this.registerOutput(e,{getter:userOutputGetter$2$1.bind(this,e)})},setVisualFilter(e){this._internal.visualFilter=e,this.isInputConnected("storageFetch")===!1&&this.scheduleFetch()},setVisualSorting(e){this._internal.visualSorting=e,this.isInputConnected("storageFetch")===!1&&this.scheduleFetch()},setQueryParameter(e,t){this._internal.queryParameters[e]=t,this.isInputConnected("storageFetch")===!1&&this.scheduleFetch()},registerInputIfNeeded(e){if(this.hasInput(e))return;if(e.startsWith("qp-"))return this.registerInput(e,{set:this.setQueryParameter.bind(this,e.substring(3))});const t={storageFetch:this.scheduleFetch.bind(this)};if(t[e])return this.registerInput(e,{set:createSetter({valueChangedToTrue:t[e]})});const n={collectionName:this.setCollectionName.bind(this),visualFilter:this.setVisualFilter.bind(this),visualSort:this.setVisualSorting.bind(this)};if(n[e])return this.registerInput(e,{set:n[e]});this.registerInput(e,{set:userInputSetter$4$1.bind(this,e)})}}};function userOutputGetter$2$1(e){return this._internal.storageSettings[e]}function userInputSetter$4$1(e,t){this._internal.storageSettings[e]=t,this.isInputConnected("storageFetch")===!1&&this.scheduleFetch()}const _defaultJSONQuery$1=`// Write your query script here, check out the reference documentation for examples
20
+ `,RestNode={name:"REST2",displayNodeName:"REST",docs:"https://docs.noodl.net/nodes/data/rest",category:"Data",color:"data",searchTags:["http","request","fetch"],initialize(){this._internal.inputValues={},this._internal.outputValues={},this._internal.outputValuesProxy=new Proxy(this._internal.outputValues,{set:(e,t,n)=>(n!==this._internal.outputValues[t]&&(this.registerOutputIfNeeded("out-"+t),this._internal.outputValues[t]=n,this.flagOutputDirty("out-"+t)),!0)}),this._internal.self={}},getInspectInfo(){return this._internal.inspectData?{type:"value",value:this._internal.inspectData}:{type:"text",value:"[Not executed yet]"}},inputs:{resource:{type:"string",displayName:"Resource",group:"Request",default:"/",set(e){this._internal.resource=e}},method:{type:{name:"enum",enums:[{label:"GET",value:"GET"},{label:"POST",value:"POST"},{label:"PUT",value:"PUT"},{label:"PATCH",value:"PATCH"},{label:"DELETE",value:"DELETE"}]},displayName:"Method",group:"Request",default:"GET",set(e){this._internal.method=e}},requestScript:{type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},displayName:"Request",default:defaultRequestScript,group:"Scripts",set(e){try{this._internal.requestFunc=new Function("Inputs","Outputs","Request",e)}catch(t){console.log(t)}}},responseScript:{type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},displayName:"Response",default:defaultResponseScript,group:"Scripts",set(e){try{this._internal.responseFunc=new Function("Inputs","Outputs","Response",e)}catch(t){console.log(t)}}},fetch:{type:"signal",displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleFetch()}},cancel:{type:"signal",displayName:"Cancel",group:"Actions",valueChangedToTrue(){this.cancelFetch()}}},outputs:{failure:{type:"signal",displayName:"Failure",group:"Events"},success:{type:"signal",displayName:"Success",group:"Events"},canceled:{type:"signal",displayName:"Canceled",group:"Events"}},prototypeExtensions:{getScriptOutputValue(e){return this._internal.outputValues[e]},setScriptInputValue(e,t){return this._internal.inputValues[e]=t},registerOutputIfNeeded(e){if(!this.hasOutput(e)&&e.startsWith("out-"))return this.registerOutput(e,{getter:this.getScriptOutputValue.bind(this,e.substring(4))})},registerInputIfNeeded(e){if(!this.hasInput(e)&&e.startsWith("in-"))return this.registerInput(e,{set:this.setScriptInputValue.bind(this,e.substring(3))})},scheduleFetch(){var e=this._internal;e.hasScheduledFetch||(e.hasScheduledFetch=!0,this.scheduleAfterInputsHaveUpdated(this.doFetch.bind(this)))},doResponse(e,t,n){this._internal.responseFunc&&this._internal.responseFunc.apply(this._internal.self,[this._internal.inputValues,this._internal.outputValuesProxy,{status:e,content:t,request:n}]),this._internal.inspectData={status:e,content:t},e>=200&&e<300?this.sendSignalOnOutput("success"):this.sendSignalOnOutput("failure")},doExternalFetch(e){var t=e.resource;if(Object.keys(e.parameters).length>0){var n=Object.keys(e.parameters).map(function(a){return a+"="+encodeURIComponent(e.parameters[a])});t+="?"+n.join("&")}if(typeof _noodl_cloud_runtime_version>"u"){var o=this,r=new window.XMLHttpRequest;this._xhr=r,r.open(e.method,t,!0);for(var s in e.headers)r.setRequestHeader(s,e.headers[s]);r.onreadystatechange=function(){var a=!1;if(this.readyState===4||this.readyState===XMLHttpRequest.DONE){var l=this.status,u=this.getResponseHeader("content-type"),d=this.response;if(delete this._xhr,u){u=u.toLowerCase();const h=u.indexOf("json")!==-1?JSON.parse(d):d;o.doResponse(l,h,e),a=!0}a===!1&&o.doResponse(l,d,e)}},r.onerror=function(a){delete this._xhr,o.sendSignalOnOutput("failure")},r.onabort=function(){delete this._xhr,o.sendSignalOnOutput("canceled")},e.content?(r.setRequestHeader("Content-Type","application/json"),r.send(JSON.stringify(e.content))):r.send()}else{const a=Object.assign({},e.headers,e.content?{"Content-Type":"application/json"}:{});fetch(t,{method:e.method,headers:a,body:e.content?JSON.stringify(e.content):void 0}).then(l=>{const u=l.headers.get("content-type");u?u.indexOf("/json")!==-1?l.json().then(d=>{this.doResponse(l.status,d,e)}):this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"rest-run-waring-",{message:"REST only supports json content type in response."}):l.text().then(d=>{this.doResponse(l.status,d,e)})}).catch(l=>{console.log("REST: Failed to request",t),console.log(l),this.sendSignalOnOutput("failure")})}},doFetch(){this._internal.hasScheduledFetch=!1;var e=this._internal.resource;if(e)for(var t in this._internal.inputValues)e=e.replace("{"+t+"}",this._internal.inputValues[t]);var n={resource:e,headers:{},method:this._internal.method!==void 0?this._internal.method:"GET",parameters:{}};this._internal.requestFunc&&this._internal.requestFunc.apply(this._internal.self,[this._internal.inputValues,this._internal.outputValuesProxy,n]),this.doExternalFetch(n)},cancelFetch(){typeof _noodl_cloud_runtime_version>"u"?this._xhr&&this._xhr.abort():this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"rest-run-waring-",{message:"REST doesn't support cancel in cloud functions."})}}};function _parseScriptForErrors(e,t,n,o,r,s){if(r.editorConnection.clearWarning(o.component.name,o.id,"rest-run-waring-"+n),e===void 0){r.editorConnection.clearWarning(o.component.name,o.id,"rest-parse-waring-"+n);return}try{new Function(...t,e),r.editorConnection.clearWarning(o.component.name,o.id,"rest-parse-waring-"+n)}catch(h){r.editorConnection.sendWarning(o.component.name,o.id,"rest-parse-waring-"+n,{message:"<strong>"+n+"</strong>: "+h.message,showGlobally:!0})}function a(h){return s.find(f=>f.name===h)!==void 0}const l=e.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,""),u=l.match(/Inputs\.[A-Za-z0-9]+/g);if(u){const h={};u.forEach(f=>{h[f.substring(7)]=!0}),Object.keys(h).forEach(f=>{a("in-"+f)||s.push({name:"in-"+f,displayName:f,plug:"input",type:"*",group:"Inputs"})})}const d=l.match(/Outputs\.[A-Za-z0-9]+/g);if(d){const h={};d.forEach(f=>{h[f.substring(8)]=!0}),Object.keys(h).forEach(f=>{a("out-"+f)||s.push({name:"out-"+f,displayName:f,plug:"output",type:"*",group:"Outputs"})})}}const RestNode$1={node:RestNode,setup(e,t){if(!e.editorConnection)return;function n(o){function r(){if(!o.parameters)return;var s=[];function a(f){for(var g=0;g<s.length;g++)if(s[g].name===f&&s[g].plug==="input")return!0;return!1}if(o.parameters.resource){var l=o.parameters.resource.match(/\{[A-Za-z0-9_]*\}/g);for(var u in l){var d=l[u],h=d.replace("{","").replace("}","");a("in-"+h)||s.push({name:"in-"+h,displayName:h,type:"string",plug:"input",group:"Inputs"})}}o.parameters.requestScript&&_parseScriptForErrors(o.parameters.requestScript,["Inputs","Outputs","Request"],"Request script",o,e,s),o.parameters.responseScript&&_parseScriptForErrors(o.parameters.responseScript,["Inputs","Outputs","Response"],"Response script",o,e,s),e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(){r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.REST2",function(o){n(o)});for(const o of t.getNodesWithType("REST2"))n(o)})}};var commonjsGlobal$1=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs$1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var lodash_difference,hasRequiredLodash_difference;function requireLodash_difference(){if(hasRequiredLodash_difference)return lodash_difference;hasRequiredLodash_difference=1;var e=200,t="__lodash_hash_undefined__",n=9007199254740991,o="[object Arguments]",r="[object Function]",s="[object GeneratorFunction]",a=/[\\^$.*+?()[\]{}|]/g,l=/^\[object .+?Constructor\]$/,u=typeof commonjsGlobal$1=="object"&&commonjsGlobal$1&&commonjsGlobal$1.Object===Object&&commonjsGlobal$1,d=typeof self=="object"&&self&&self.Object===Object&&self,h=u||d||Function("return this")();function f(C,x,V){switch(V.length){case 0:return C.call(x);case 1:return C.call(x,V[0]);case 2:return C.call(x,V[0],V[1]);case 3:return C.call(x,V[0],V[1],V[2])}return C.apply(x,V)}function g(C,x){var V=C?C.length:0;return!!V&&T(C,x,0)>-1}function b(C,x){for(var V=-1,G=x.length,ee=C.length;++V<G;)C[ee+V]=x[V];return C}function _(C,x,V,G){for(var ee=C.length,oe=V+-1;++oe<ee;)if(x(C[oe],oe,C))return oe;return-1}function T(C,x,V){if(x!==x)return _(C,A,V);for(var G=V-1,ee=C.length;++G<ee;)if(C[G]===x)return G;return-1}function A(C){return C!==C}function v(C,x){return C.has(x)}function I(C,x){return C?.[x]}function k(C){var x=!1;if(C!=null&&typeof C.toString!="function")try{x=!!(C+"")}catch{}return x}var N=Array.prototype,w=Function.prototype,E=Object.prototype,F=h["__core-js_shared__"],L=function(){var C=/[^.]+$/.exec(F&&F.keys&&F.keys.IE_PROTO||"");return C?"Symbol(src)_1."+C:""}(),B=w.toString,H=E.hasOwnProperty,J=E.toString,ie=RegExp("^"+B.call(H).replace(a,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),pe=h.Symbol,xe=E.propertyIsEnumerable,Me=N.splice,ae=pe?pe.isConcatSpreadable:void 0,Ie=Math.max,Te=Se(h,"Map"),Ne=Se(Object,"create");function me(C){var x=-1,V=C?C.length:0;for(this.clear();++x<V;){var G=C[x];this.set(G[0],G[1])}}function Ee(){this.__data__=Ne?Ne(null):{}}function Ae(C){return this.has(C)&&delete this.__data__[C]}function qe(C){var x=this.__data__;if(Ne){var V=x[C];return V===t?void 0:V}return H.call(x,C)?x[C]:void 0}function Fe(C){var x=this.__data__;return Ne?x[C]!==void 0:H.call(x,C)}function Y(C,x){var V=this.__data__;return V[C]=Ne&&x===void 0?t:x,this}me.prototype.clear=Ee,me.prototype.delete=Ae,me.prototype.get=qe,me.prototype.has=Fe,me.prototype.set=Y;function ve(C){var x=-1,V=C?C.length:0;for(this.clear();++x<V;){var G=C[x];this.set(G[0],G[1])}}function Ve(){this.__data__=[]}function re(C){var x=this.__data__,V=K(x,C);if(V<0)return!1;var G=x.length-1;return V==G?x.pop():Me.call(x,V,1),!0}function Oe(C){var x=this.__data__,V=K(x,C);return V<0?void 0:x[V][1]}function $e(C){return K(this.__data__,C)>-1}function Le(C,x){var V=this.__data__,G=K(V,C);return G<0?V.push([C,x]):V[G][1]=x,this}ve.prototype.clear=Ve,ve.prototype.delete=re,ve.prototype.get=Oe,ve.prototype.has=$e,ve.prototype.set=Le;function fe(C){var x=-1,V=C?C.length:0;for(this.clear();++x<V;){var G=C[x];this.set(G[0],G[1])}}function Xe(){this.__data__={hash:new me,map:new(Te||ve),string:new me}}function Be(C){return ue(this,C).delete(C)}function De(C){return ue(this,C).get(C)}function Ue(C){return ue(this,C).has(C)}function je(C,x){return ue(this,C).set(C,x),this}fe.prototype.clear=Xe,fe.prototype.delete=Be,fe.prototype.get=De,fe.prototype.has=Ue,fe.prototype.set=je;function Re(C){var x=-1,V=C?C.length:0;for(this.__data__=new fe;++x<V;)this.add(C[x])}function We(C){return this.__data__.set(C,t),this}function st(C){return this.__data__.has(C)}Re.prototype.add=Re.prototype.push=We,Re.prototype.has=st;function K(C,x){for(var V=C.length;V--;)if(p(C[V][0],x))return V;return-1}function et(C,x,V,G){var ee=-1,oe=g,de=!0,ke=C.length,Ye=[],St=x.length;if(!ke)return Ye;x.length>=e&&(oe=v,de=!1,x=new Re(x));e:for(;++ee<ke;){var Je=C[ee],at=Je;if(Je=Je!==0?Je:0,de&&at===at){for(var ut=St;ut--;)if(x[ut]===at)continue e;Ye.push(Je)}else oe(x,at,G)||Ye.push(Je)}return Ye}function tt(C,x,V,G,ee){var oe=-1,de=C.length;for(V||(V=ge),ee||(ee=[]);++oe<de;){var ke=C[oe];V(ke)&&b(ee,ke)}return ee}function le(C){if(!z(C)||Z(C))return!1;var x=U(C)||k(C)?ie:l;return x.test(Ce(C))}function ye(C,x){return x=Ie(x===void 0?C.length-1:x,0),function(){for(var V=arguments,G=-1,ee=Ie(V.length-x,0),oe=Array(ee);++G<ee;)oe[G]=V[x+G];G=-1;for(var de=Array(x+1);++G<x;)de[G]=V[G];return de[x]=oe,f(C,this,de)}}function ue(C,x){var V=C.__data__;return ze(x)?V[typeof x=="string"?"string":"hash"]:V.map}function Se(C,x){var V=I(C,x);return le(V)?V:void 0}function ge(C){return S(C)||y(C)||!!(ae&&C&&C[ae])}function ze(C){var x=typeof C;return x=="string"||x=="number"||x=="symbol"||x=="boolean"?C!=="__proto__":C===null}function Z(C){return!!L&&L in C}function Ce(C){if(C!=null){try{return B.call(C)}catch{}try{return C+""}catch{}}return""}var c=ye(function(C,x){return M(C)?et(C,tt(x,1,M)):[]});function p(C,x){return C===x||C!==C&&x!==x}function y(C){return M(C)&&H.call(C,"callee")&&(!xe.call(C,"callee")||J.call(C)==o)}var S=Array.isArray;function O(C){return C!=null&&j(C.length)&&!U(C)}function M(C){return q(C)&&O(C)}function U(C){var x=z(C)?J.call(C):"";return x==r||x==s}function j(C){return typeof C=="number"&&C>-1&&C%1==0&&C<=n}function z(C){var x=typeof C;return!!C&&(x=="object"||x=="function")}function q(C){return!!C&&typeof C=="object"}return lodash_difference=c,lodash_difference}var lodash_differenceExports=requireLodash_difference();const difference=getDefaultExportFromCjs$1(lodash_differenceExports),ExpressionNode={name:"Expression",docs:"https://docs.noodl.net/nodes/math/expression",usePortAsLabel:"expression",category:"CustomCode",color:"javascript",nodeDoubleClickAction:{focusPort:"Expression"},searchTags:["javascript"],initialize(){var e=this._internal;e.scope={},e.hasScheduledEvaluation=!1,e.code=void 0,e.cachedValue=0,e.currentExpression="",e.compiledFunction=void 0,e.inputNames=[],e.inputValues=[]},getInspectInfo(){return this._internal.cachedValue},inputs:{expression:{group:"General",inputPriority:1,type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},displayName:"Expression",set(e){var t=this._internal;t.currentExpression=functionPreamble+"return ("+e+");",t.compiledFunction=void 0;var n=parsePorts(e),o=difference(n,t.inputNames),r=difference(t.inputNames,n),s=this;r.forEach(function(a){s.deregisterInput(a),delete t.scope[a]}),o.forEach(function(a){s.hasInput(a)||(s.registerInput(a,{set(l){t.scope[a]=l,this.isInputConnected("run")||this._scheduleEvaluateExpression()}}),t.scope[a]=0,s._inputValues[a]=0)}),t.inputNames=Object.keys(t.scope),this.isInputConnected("run")||this._scheduleEvaluateExpression()}},run:{group:"Actions",displayName:"Run",type:"signal",valueChangedToTrue(){this._scheduleEvaluateExpression()}}},outputs:{result:{group:"Result",type:"*",displayName:"Result",getter(){return this._internal.currentExpression?this._internal.cachedValue:0}},isTrue:{group:"Result",type:"boolean",displayName:"Is True",getter(){return this._internal.currentExpression?!!this._internal.cachedValue:!1}},isFalse:{group:"Result",type:"boolean",displayName:"Is False",getter(){return this._internal.currentExpression?!this._internal.cachedValue:!0}},isTrueEv:{group:"Events",type:"signal",displayName:"On True"},isFalseEv:{group:"Events",type:"signal",displayName:"On False"}},prototypeExtensions:{registerInputIfNeeded:{value(e){this.hasInput(e)||(this._internal.scope[e]=0,this._inputValues[e]=0,this.registerInput(e,{set(t){this._internal.scope[e]=t,this.isInputConnected("run")||this._scheduleEvaluateExpression()}}))}},_scheduleEvaluateExpression:{value(){var e=this._internal;e.hasScheduledEvaluation===!1&&(e.hasScheduledEvaluation=!0,this.flagDirty(),this.scheduleAfterInputsHaveUpdated(function(){var t=e.cachedValue;e.cachedValue=this._calculateExpression(),t!==e.cachedValue&&(this.flagOutputDirty("result"),this.flagOutputDirty("isTrue"),this.flagOutputDirty("isFalse")),e.cachedValue?this.sendSignalOnOutput("isTrueEv"):this.sendSignalOnOutput("isFalseEv"),e.hasScheduledEvaluation=!1}))}},_calculateExpression:{value(){var e=this._internal;e.compiledFunction||(e.compiledFunction=this._compileFunction());for(var t=0;t<e.inputNames.length;++t){var n=e.scope[e.inputNames[t]];e.inputValues[t]=n}try{return e.compiledFunction.apply(null,e.inputValues)}catch(o){console.error("Error in expression:",o.message)}return 0}},_compileFunction:{value(){var e=this._internal.currentExpression,t=Object.keys(this._internal.scope),n=e+t.join(" ");if(compiledFunctionsCache.hasOwnProperty(n)===!1){t.push(e);try{compiledFunctionsCache[n]=construct(Function,t)}catch(o){console.error("Failed to compile JS function",o.message)}}return compiledFunctionsCache[n]}}}};var functionPreamble=["var min = Math.min, max = Math.max, cos = Math.cos, sin = Math.sin, tan = Math.tan, sqrt = Math.sqrt, pi = Math.PI, round = Math.round, floor = Math.floor, ceil = Math.ceil, abs = Math.abs, random = Math.random;"].join("");function construct(e,t){function n(){return e.apply(this,t)}return n.prototype=e.prototype,new n}var compiledFunctionsCache={},portsToIgnore=["min","max","cos","sin","tan","sqrt","pi","round","floor","ceil","abs","random","Math","window","document","undefined","Vars","true","false","null","Boolean"];function parsePorts(e){var t=[];function n(s){portsToIgnore.indexOf(s)===-1&&(t.some(function(a){return a===s})||t.push(s))}e=e.replace(/\"([^\"]*)\"/g,"").replace(/\'([^\']*)\'/g,"");var o=e.matchAll(/[a-zA-Z\_\$][a-zA-Z0-9\.\_\$]*/g);for(const s of o){var r=s[0];r.indexOf(".")!==-1&&(r=r.split(".")[0]),n(r)}return t}function updatePorts$7$1(e,t,n){var o=parsePorts(t),r=o.map(function(s){return{group:"Parameters",name:s,type:{name:"*",editAsType:"string"},plug:"input"}});n.sendDynamicPorts(e,r)}function evalCompileWarnings(e,t){try{new Function(t.parameters.expression),e.clearWarning(t.component.name,t.id,"expression-compile-error")}catch(n){e.sendWarning(t.component.name,t.id,"expression-compile-error",{message:n.message})}}const Expression={node:ExpressionNode,setup(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Expression",function(n){n.parameters.expression&&(updatePorts$7$1(n.id,n.parameters.expression,e.editorConnection),evalCompileWarnings(e.editorConnection,n)),n.on("parameterUpdated",function(o){o.name==="expression"&&(updatePorts$7$1(n.id,n.parameters.expression,e.editorConnection),evalCompileWarnings(e.editorConnection,n))})})}};function getAbsoluteUrl(e){const t=String(e);return!t||t[0]==="/"||t.includes("://")||t.startsWith("data:")?t:(Noodl.baseUrl||"/")+t}function logJavaScriptNodeError(e){typeof e=="string"?console.log("Error in JS node run code.",e):console.log("Error in JS node run code.",Object.getPrototypeOf(e).constructor.name+": "+e.message,e.stack)}var userFunctionsCache={};function JavascriptNodeParser(e,t){this.inputs={},this.outputs={},this.error=void 0,this.code=e;const n=t?t.node:void 0;this._initializeAPIs();var o=userFunctionsCache[e];if(!o)try{o=new Function(["define","script","Node","Component"],JavascriptNodeParser.getCodePrefix()+e),userFunctionsCache[e]=o}catch(r){this.error=r.message,console.error(r)}if(o)try{o(this.define.bind(this),this.script.bind(this),this.apis.Node,n?JavascriptNodeParser.getComponentScopeForNode(n):{}),this._afterSourced()}catch(r){this.error=r.message,console.error(r)}}JavascriptNodeParser.prototype.define=function(e){this.inputs=e.inputs||{},this.outputs=e.outputs||{},this.setup=e.setup,this.change=e.run||e.change,this.destroy=e.destroy,this.definedObject=e};function _scriptExtend(e){var t={inputs:e.inputs||{},outputs:e.outputs||{},setup(o,r){if(this.inputs=o,this.outputs=r,this.setOutputs=function(a){for(var l in a)this.outputs[l]=a[l],this.flagOutputDirty(l)},e.methods)for(var s in e.methods)this[s]=e.methods[s];e.setup&&e.setup.apply(this)},destroy(o,r){this.inputs=o,this.outputs=r,e.destroy&&e.destroy.apply(this)},change(o,r){this.inputs=o,this.outputs=r;var s=this._oldInputs||{};if(e.changed){for(var a in o)if(o[a]!==s[a]){var l=e.changed[a];typeof l=="function"&&l.apply(this,[o[a],s[a]])}}this._oldInputs=Object.assign({},o)}};if(e.signals)for(var n in e.signals)t[n]=e.signals[n],t.inputs[n]="signal";return t}JavascriptNodeParser.prototype.script=function(e){var t=_scriptExtend(e);this.inputs=t.inputs||{},this.outputs=t.outputs||{},this.setup=t.setup,this.change=t.run||t.change,this.destroy=t.destroy,this.definedObject=t},JavascriptNodeParser.prototype._initializeAPIs=function(){this.apis={},this.apis.Node={Inputs:{},Outputs:{},Signals:{},Setters:{}}},JavascriptNodeParser.prototype._afterSourced=function(){if(this.definedObject===void 0){var e=this.apis.Node;if(this.inputs=Object.assign({},e.Inputs||{}),this.outputs=Object.assign({},e.Outputs||{}),this.setup=function(n,o){const r=this;e.setOutputs=function(s){for(var a in s)o[a]=s[a],r.flagOutputDirty(a)},e.OnInit&&e.OnInit.apply(this)},this.destroy=e.OnDestroy||this.destory,this.change=(n,o,r)=>{for(var s in r)typeof e.Setters[s]=="function"&&e.Setters[s](n[s]);typeof e.OnInputsChanged=="function"&&e.OnInputsChanged()},this.definedObject={inputs:this.inputs,outputs:this.outputs,setup:this.setup,destroy:this.destroy,change:this.change},e.Signals!==void 0)for(var t in e.Signals)typeof e.Signals[t]=="function"&&(this.inputs[t]="signal",this.definedObject[t]=e.Signals[t])}},JavascriptNodeParser.createFromCode=function(e,t){return new JavascriptNodeParser(e,t)},JavascriptNodeParser.createFromURL=function(e,t,n){e=getAbsoluteUrl(e);var o=new window.XMLHttpRequest;o.open("GET",e,!0),o.onreadystatechange=function(){(this.readyState===4||this.readyState===XMLHttpRequest.DONE)&&t(new JavascriptNodeParser(this.response))},o.onerror=function(){console.log("Failed to request",e)},o.send()},JavascriptNodeParser.parseAndAddPortsFromScript=function(e,t,n){function o(s){return typeof s=="string"?t.find(a=>a.name===s)!==void 0:t.find(a=>a.name===s.name&&a.plug===s.plug)!==void 0}function r(s,a){if(s==null)return;const l={};for(const u of s){let d=u[1];d!==void 0&&(l[d]=!0)}Object.keys(l).forEach(u=>{o({name:a.prefix+u,plug:a.plug})||t.push({name:a.prefix+u,displayName:u,plug:a.plug,type:a.type,group:a.group})})}n.skipInputs||(r(e.matchAll(/Inputs\.([A-Za-z0-9_]+)/g),{type:n.inputType||"*",plug:"input",group:n.inputGroup||"Inputs",prefix:n.inputPrefix||""}),r(e.matchAll(/Inputs\s*\[\s*(?:'|")(.*)(?:'|")\s*\]/g),{type:n.inputType||"*",plug:"inputs",group:n.inputGroup||"Inputs",prefix:n.inputPrefix||""})),n.skipOutputs||(n.skipOutputSignals||(r(e.matchAll(/Outputs\.([A-Za-z0-9]+)\s*\(\s*\)/g),{type:"signal",plug:"output",group:"Outputs",prefix:n.outputPrefix||""}),r(e.matchAll(/Outputs\s*\[\s*(?:'|")(.*)(?:'|")\s*\]\(\s*\)/g),{type:"signal",plug:"output",group:"Outputs",prefix:n.outputPrefix||""})),n.skipRegularOutputs||(r(e.matchAll(/Outputs\.([A-Za-z0-9_]+)/g),{type:"*",plug:"output",group:"Outputs",prefix:n.outputPrefix||""}),r(e.matchAll(/Outputs\s*\[\s*\"([^\"]*)\"\s*\]/g),{type:"*",plug:"output",group:"Outputs",prefix:n.outputPrefix||""})))},JavascriptNodeParser.prototype.getPorts=function(){var e=[],t=this;return Object.keys(this.inputs).forEach(function(n){var o=t.inputs[n],r={name:n,plug:"input"};if(typeof o=="string")r.type={name:o},r.group="Inputs";else for(var s in o)r[s]=o[s];e.push(r)}),Object.keys(this.outputs).forEach(function(n){e.push({name:n,type:{name:t.outputs[n]},plug:"output",group:"Outputs"})}),JavascriptNodeParser.parseAndAddPortsFromScript(this.code,e,{}),e};const _componentScopes={};function _findParentComponentStateModelId(e){function t(o){let r;if(o.getRoots().length>0){const s=o.getRoots()[0];s.getVisualParentNode?s.getVisualParentNode()&&(r=s.getVisualParentNode().nodeScope.componentOwner):s.parentNodeScope&&(r=o.parentNodeScope.componentOwner)}else o.parentNodeScope&&(r=o.parentNodeScope.componentOwner);if(r&&r.nodeScope&&r.nodeScope.componentOwner!==o)return r.nodeScope.getNodesWithType("net.noodl.ComponentObject").length>0||r.nodeScope.getNodesWithType("Component State").length>0?r:t(r)}const n=t(e.nodeScope.componentOwner);if(n)return"componentState"+n.getInstanceId()}function _findForEachModel(e){for(var t=e.nodeScope.componentOwner;t!==void 0&&t._forEachModel===void 0&&t.parentNodeScope;)t=t.parentNodeScope.componentOwner;return t!==void 0?t._forEachModel:void 0}JavascriptNodeParser.getComponentScopeForNode=function(e){const t=e.nodeScope.componentOwner.getInstanceId();if(_componentScopes[t]===void 0){_componentScopes[t]={};const r=(e.nodeScope.modelScope||Model).get("componentState"+t);_componentScopes[t].Object=r}const n=_findParentComponentStateModelId(e),o=n!==void 0?(e.nodeScope.modelScope||Model).get(n):void 0;return _componentScopes[t].ParentObject=o,_componentScopes[t].RepeaterObject=_findForEachModel(e),_componentScopes[t]},JavascriptNodeParser.getCodePrefix=function(){return`const Script = (typeof Node !== 'undefined')?Node:undefined;
21
+ `},JavascriptNodeParser.createNoodlAPI=function(){return typeof window<"u"&&window.Noodl!==void 0?window.Noodl:{}};const SimpleJavascriptNode={name:"JavaScriptFunction",displayNodeName:"Function",docs:"https://docs.noodl.net/nodes/javascript/function",category:"CustomCode",color:"javascript",nodeDoubleClickAction:{focusPort:"Script"},searchTags:["javascript"],exportDynamicPorts:!0,initialize(){this._internal.inputValues={},this._internal.outputValues={},this._internal.outputValuesProxy=new Proxy(this._internal.outputValues,{set:(e,t,n)=>{if(!this._deleted)return n!==this._internal.outputValues[t]&&(this.registerOutputIfNeeded("out-"+t),this._internal.outputValues[t]=n,this.flagOutputDirty("out-"+t)),!0}}),this._internal._this={}},getInspectInfo(){return[{type:"value",value:{inputs:this._internal.inputValues,outputs:this._internal.outputValues}}]},inputs:{scriptInputs:{type:{name:"proplist",allowEditOnly:!0},group:"Script Inputs",set(e){}},scriptOutputs:{type:{name:"proplist",allowEditOnly:!0},group:"Script Outputs",set(e){}},functionScript:{displayName:"Script",plug:"input",type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},group:"General",set(e){if(e===void 0){this._internal.func=void 0;return}this._internal.func=this.parseScript(e),this.isInputConnected("run")||this.scheduleRun()}},run:{type:"signal",displayName:"Run",group:"Actions",valueChangedToTrue(){this.scheduleRun()}}},outputs:{},methods:{scheduleRun(){this.runScheduled||(this.runScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.runScheduled=!1,this._deleted||this.runScript()}))},runScript:async function(){const e=this._internal.func;if(e===void 0)return;const t=this._internal.inputValues,n=this._internal.outputValuesProxy;for(const o in this.model.outputPorts)if(this._isSignalType(o)){const r=()=>{this.hasOutput(o)&&this.sendSignalOnOutput(o)};this._internal.outputValues[o.substring(4)]=r,this._internal.outputValues[o.substring(4)].send=r}try{await e.apply(this._internal._this,[t,n,JavascriptNodeParser.createNoodlAPI(this.nodeScope.modelScope),JavascriptNodeParser.getComponentScopeForNode(this)])}catch(o){logJavaScriptNodeError(o),this.context.editorConnection&&this.context.isWarningTypeEnabled("javascriptExecution")&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"js-function-run-waring",{showGlobally:!0,message:o.message,stack:o.stack})}},setScriptInputValue(e,t){this._internal.inputValues[e]=t,this.isInputConnected("run")||this.scheduleRun()},getScriptOutputValue(e){if(!this._isSignalType(e))return this._internal.outputValues[e]},setScriptInputType(e,t){this._internal.inputTypes[e]=t},setScriptOutputType(e,t){this._internal.outputTypes[e]=t},parseScript(e){var t;try{const n=Object.getPrototypeOf(async function(){}).constructor;t=new n("Inputs","Outputs","Noodl","Component",JavascriptNodeParser.getCodePrefix()+e)}catch(n){console.log("Error while parsing action script: "+n)}return t},_isSignalType(e){return this.model.outputPorts[e]&&this.model.outputPorts[e].type==="signal"},registerInputIfNeeded(e){if(!this.hasInput(e)){if(e.startsWith("in-")){const t=e.substring(3),n={set:this.setScriptInputValue.bind(this,t)};this.model&&this.model.parameters["intype-"+t]&&(n.type=this.model.parameters["intype-"+t]),this.registerInput(e,n)}if(e.startsWith("intype-")){const t=e.substring(7);this.registerInput(e,{set(n){this.hasInput("in"+t)&&(this.getInput("in"+t).type=n)}})}e.startsWith("outtype-")&&this.registerInput(e,{set(){}})}},registerOutputIfNeeded(e){if(!this.hasOutput(e)&&e.startsWith("out-"))return this.registerOutput(e,{getter:this.getScriptOutputValue.bind(this,e.substring(4))})}}};function _parseScriptForErrorsAndPorts(e,t,n,o,r){if(o.editorConnection.clearWarning(n.component.name,n.id,"js-function-run-waring"),e===void 0){o.editorConnection.clearWarning(n.component.name,n.id,"js-function-parse-waring");return}try{const s=Object.getPrototypeOf(async function(){}).constructor;new s("Inputs","Outputs","Noodl","Component",e),o.editorConnection.clearWarning(n.component.name,n.id,"js-function-parse-waring")}catch(s){o.editorConnection.sendWarning(n.component.name,n.id,"js-function-parse-waring",{showGlobally:!0,message:s.message})}JavascriptNodeParser.parseAndAddPortsFromScript(e,r,{inputPrefix:"in-",outputPrefix:"out-"})}const inputTypeEnums=[{value:"string",label:"String"},{value:"boolean",label:"Boolean"},{value:"number",label:"Number"},{value:"object",label:"Object"},{value:"date",label:"Date"},{value:"array",label:"Array"},{value:"color",label:"Color"}],SimpleJavaScript={node:SimpleJavascriptNode,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[];const a=inputTypeEnums.concat([{value:"signal",label:"Signal"}]);o.parameters.scriptOutputs!==void 0&&o.parameters.scriptOutputs.length>0&&o.parameters.scriptOutputs.forEach(l=>{s.push({name:"outtype-"+l.label,displayName:"Type",editorName:l.label+" | Type",plug:"input",type:{name:"enum",enums:a,allowEditOnly:!0},default:"string",parent:"scriptOutputs",parentItemId:l.id}),s.push({name:"out-"+l.label,displayName:l.label,plug:"output",type:o.parameters["outtype-"+l.label]||"*",group:"Outputs"})}),o.parameters.scriptInputs!==void 0&&o.parameters.scriptInputs.length>0&&o.parameters.scriptInputs.forEach(l=>{s.push({name:"intype-"+l.label,displayName:"Type",editorName:l.label+" | Type",plug:"input",type:{name:"enum",enums:inputTypeEnums,allowEditOnly:!0},default:"string",parent:"scriptInputs",parentItemId:l.id}),s.push({name:"in-"+l.label,displayName:l.label,plug:"input",type:o.parameters["intype-"+l.label]||"string",group:"Inputs"})}),_parseScriptForErrorsAndPorts(o.parameters.functionScript,"Script ",o,e,s),s.forEach(l=>{l.type==="signal"&&l.plug==="output"&&(o.outputPorts[l.name]=l)}),e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.JavaScriptFunction",function(o){n(o)});for(const o of t.getNodesWithType("JavaScriptFunction"))n(o)})}};Object.defineProperty(Array.prototype,"items",{enumerable:!1,get(){return this},set(e){this.set(e)}}),Object.defineProperty(Array.prototype,"each",{enumerable:!1,writable:!1,value:Array.prototype.forEach}),Object.defineProperty(Array.prototype,"size",{enumerable:!1,writable:!1,value(){return this.length}}),Object.defineProperty(Array.prototype,"get",{enumerable:!1,writable:!1,value(e){return this[e]}}),Object.defineProperty(Array.prototype,"getId",{enumerable:!1,writable:!1,value(){return this._id}}),Object.defineProperty(Array.prototype,"id",{enumerable:!1,get(){return this.getId()}}),Object.defineProperty(Array.prototype,"set",{enumerable:!1,writable:!1,value(e){var t,n;if(e===this)return;e=e||[];function o(d){for(var h={},f=d.length,g=0;g<f;g++){var b=d[g];h[b.getId()]=b}return h}var r=[];for(t=e.length,n=0;n<t;n++){var s=e[n];Model.instanceOf(s)?r.push(s):r.push(Model.create(s))}var a=this.items,l=o(a),u=o(r);for(t=a.length,n=0;n<t;n++)u.hasOwnProperty(a[n].getId())||(this.removeAtIndex(n),n--,t--);for(n=0;n<Math.min(a.length,r.length);n++)a[n]!==r[n]&&(l.hasOwnProperty(r[n].getId())&&this.remove(r[n]),this.addAtIndex(r[n],n));for(n=a.length;n<r.length;n++)this.add(r[n])}}),Object.defineProperty(Array.prototype,"notify",{enumerable:!1,writable:!1,value:async function(e,t){if(this._listeners&&this._listeners[e])for(var n=this._listeners[e].slice(),o=0;o<n.length;o++)await n[o](t)}}),Object.defineProperty(Array.prototype,"contains",{enumerable:!1,writable:!1,value(e){return this.indexOf(e)!==-1}}),Object.defineProperty(Array.prototype,"add",{enumerable:!1,writable:!1,value:async function(e){this.contains(e)||(this.items.push(e),await this.notify("add",{item:e,index:this.items.length-1}),await this.notify("change"),await e.notify("add",{collection:this}))}}),Object.defineProperty(Array.prototype,"remove",{enumerable:!1,writable:!1,value(e){var t=this.items.indexOf(e);t!==-1&&this.removeAtIndex(t)}}),Object.defineProperty(Array.prototype,"addAtIndex",{enumerable:!1,writable:!1,value:async function(e,t){this.contains(e)||(this.items.splice(t,0,e),await this.notify("add",{item:e,index:t}),await this.notify("change"),await e.notify("add",{collection:this,index:t}))}}),Object.defineProperty(Array.prototype,"removeAtIndex",{enumerable:!1,writable:!1,value:async function(e){var t=this.items[e];this.items.splice(e,1),await this.notify("remove",{item:t,index:e}),await this.notify("change"),await t.notify("remove",{collection:this})}}),Object.defineProperty(Array.prototype,"on",{enumerable:!1,writable:!1,value(e,t){this._listeners||Object.defineProperty(this,"_listeners",{enumerable:!1,writable:!1,value:{}}),this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t)}}),Object.defineProperty(Array.prototype,"off",{enumerable:!1,writable:!1,value(e,t){if(this._listeners&&this._listeners[e]){var n=this._listeners[e].indexOf(t);n!==-1&&this._listeners[e].splice(n,1)}}});class Collection extends Array{}const collections=Collection._collections={};Collection.create=function(e){const t=Model.guid();return collections[t]=new Collection,Object.defineProperty(collections[t],"_id",{enumerable:!1,writable:!1,value:t}),e&&collections[t].set(e),collections[t]},Collection.get=function(e){return e===void 0&&(e=Model.guid()),collections[e]||(collections[e]=new Collection,Object.defineProperty(collections[e],"_id",{enumerable:!1,writable:!1,value:e})),collections[e]},Collection.instanceOf=function(e){return e instanceof Collection},Collection.exists=function(e){return collections[e]!==void 0};function convertVisualFilter(e,t){var n=t.queryParameters;if(e.combinator!==void 0&&e.rules!==void 0){if(e.rules.length===0)return;if(e.rules.length===1)return convertVisualFilter(e.rules[0],t);{const u={},d="$"+e.combinator;return u[d]=[],e.rules.forEach(h=>{var f=convertVisualFilter(h,t);f!==void 0&&u[d].push(f)}),u}}else if(e.operator==="related to"){var o=e.input!==void 0?n[e.input]:void 0;return o===void 0?void 0:{$relatedTo:{object:{__type:"Pointer",objectId:o,className:e.relatedTo},key:e.relationProperty}}}else{const u={};var r,o=e.input!==void 0?n[e.input]:e.value;if(e.operator==="exist")return u[e.property]={$exists:!0},u;if(e.operator==="not exist")return u[e.property]={$exists:!1},u;if(o===void 0)return;if(CloudStore._collections[t.collectionName])var s=CloudStore._collections[t.collectionName].schema;var a=s&&s.properties&&s.properties[e.property]?s.properties[e.property].type:void 0;if(a==="Date"&&(o instanceof Date||(o=new Date(o.toString())),o={__type:"Date",iso:o.toISOString()}),e.operator==="greater than")r={$gt:o};else if(e.operator==="greater than or equal to")r={$gte:o};else if(e.operator==="less than")r={$lt:o};else if(e.operator==="less than or equal to")r={$lte:o};else if(e.operator==="equal to")r={$eq:o};else if(e.operator==="not equal to")r={$ne:o};else if(e.operator==="points to"){var l=s&&s.properties&&s.properties[e.property]?s.properties[e.property].targetClass:void 0;r={$eq:{__type:"Pointer",objectId:o,className:l}}}else e.operator==="contain"&&(r={$regex:o,$options:"i"});return u[e.property]=r,u}}function matchesQuery(e,t){var n=!0;if(t===void 0)return!0;if(t.$and!==void 0)t.$and.forEach(r=>{n&=matchesQuery(e,r)});else if(t.$or!==void 0)n=!1,t.$or.forEach(r=>{n|=matchesQuery(e,r)});else{var o=Object.keys(t);o.forEach(r=>{if(r==="objectId")t[r].$eq!==void 0?n&=e.getId()===t[r].$eq:t[r].$in!==void 0&&(n&=t[r].$in.indexOf(e.getId())!==-1);else if(r==="$relatedTo")n=!1;else{var s=e.get(r);t[r].$eq!==void 0&&t[r].$eq.__type==="Pointer"?n&=s===t[r].$eq.objectId:t[r].$eq!==void 0?n&=s==t[r].$eq:t[r].$ne!==void 0?n&=s!=t[r].$ne:t[r].$lt!==void 0?n&=s<t[r].$lt:t[r].$lte!==void 0?n&=s<=t[r].$lt:t[r].$gt!==void 0?n&=s>t[r].$gt:t[r].$gte!==void 0?n&=s>=t[r].$gte:t[r].$exists!==void 0?n&=s!==void 0:t[r].$in!==void 0?n&=t[r].$in.indexOf(s)!==-1:t[r].$nin!==void 0?n&=t[r].$in.indexOf(s)===-1:t[r].$regex!==void 0&&(n&=new RegExp(t[r].$regex,t[r].$options).test(s))}})}return n}function compareObjects(e,t,n){for(var o=0;o<e.length;o++){let r=e[o];if(r[0]==="-"){let s=r.substring(1);if(t.get(s)>n.get(s))return-1;if(t.get(s)<n.get(s))return 1}else{if(t.get(r)>n.get(r))return 1;if(t.get(r)<n.get(r))return-1}}return 0}function convertVisualSorting(e){return e.map(t=>(t.order==="descending"?"-":"")+t.property)}function _value(e){return e instanceof Date&&typeof e.toISOString=="function"?{__type:"Date",iso:e.toISOString()}:e}function convertFilterOp(e,t){const n=Object.keys(e);if(n.length===0)return{};if(n.length!==1)return t.error("Filter must only have one key found "+n.join(","));const o={},r=n[0];if(e.and!==void 0&&Array.isArray(e.and))o.$and=e.and.map(a=>convertFilterOp(a,t));else if(e.or!==void 0&&Array.isArray(e.or))o.$or=e.or.map(a=>convertFilterOp(a,t));else if(e.idEqualTo!==void 0)o.objectId={$eq:e.idEqualTo};else if(e.idContainedIn!==void 0)o.objectId={$in:e.idContainedIn};else if(e.relatedTo!==void 0){const a=e.relatedTo.id;if(a===void 0)return t.error("Must provide id in relatedTo filter");const l=e.relatedTo.key;if(l===void 0)return t.error("Must provide key in relatedTo filter");const u=e.relatedTo.className||(t.modelScope||Model).get(a)?._class;if(typeof u>"u")return t.error("Must preload the Pointer or include className");o.$relatedTo={object:{__type:"Pointer",objectId:a,className:u},key:l}}else if(typeof e[r]=="object"){const a=e[r];if(a.equalTo!==void 0)o[r]={$eq:_value(a.equalTo)};else if(a.notEqualTo!==void 0)o[r]={$ne:_value(a.notEqualTo)};else if(a.lessThan!==void 0)o[r]={$lt:_value(a.lessThan)};else if(a.greaterThan!==void 0)o[r]={$gt:_value(a.greaterThan)};else if(a.lessThanOrEqualTo!==void 0)o[r]={$lte:_value(a.lessThanOrEqualTo)};else if(a.greaterThanOrEqualTo!==void 0)o[r]={$gte:_value(a.greaterThanOrEqualTo)};else if(a.exists!==void 0)o[r]={$exists:a.exists};else if(a.containedIn!==void 0)o[r]={$in:a.containedIn};else if(a.notContainedIn!==void 0)o[r]={$nin:a.notContainedIn};else if(a.pointsTo!==void 0){let l=null;CloudStore._collections[t.collectionName]&&(l=CloudStore._collections[t.collectionName].schema);const u=l&&l.properties&&l.properties[r]?l.properties[r].targetClass:void 0;(l&&l.properties&&l.properties[r]?l.properties[r].type:void 0)==="Relation"?o[r]={__type:"Pointer",objectId:a.pointsTo,className:u}:Array.isArray(a.pointsTo)?o[r]={$in:a.pointsTo.map(d=>({__type:"Pointer",objectId:d,className:u}))}:o[r]={$eq:{__type:"Pointer",objectId:a.pointsTo,className:u}}}else if(a.matchesRegex!==void 0)o[r]={$regex:a.matchesRegex,$options:a.options};else if(a.text!==void 0&&a.text.search!==void 0){var s=a.text.search;typeof s=="string"?o[r]={$text:{$search:{$term:s,$caseSensitive:!1}}}:o[r]={$text:{$search:{$term:s.term,$language:s.language,$caseSensitive:s.caseSensitive,$diacriticSensitive:s.diacriticSensitive}}}}else if(a.nearSphere!==void 0){var s=a.nearSphere;o[r]={$nearSphere:{__type:"GeoPoint",latitude:s.latitude,longitude:s.longitude},$maxDistanceInMiles:s.$maxDistanceInMiles,$maxDistanceInKilometers:s.maxDistanceInKilometers,$maxDistanceInRadians:s.maxDistanceInRadians}}else if(a.withinBox!==void 0){var s=a.withinBox;o[r]={$within:{$box:s.map(u=>({__type:"GeoPoint",latitude:u.latitude,longitude:u.longitude}))}}}else if(a.withinPolygon!==void 0){var s=a.withinPolygon;o[r]={$geoWithin:{$polygon:s.map(u=>({__type:"GeoPoint",latitude:u.latitude,longitude:u.longitude}))}}}}else t.error("Unrecognized filter keys "+n.join(","));return o}var DbCollectionNode$2={name:"DbCollection2",docs:"https://docs.noodl.net/nodes/data/cloud-data/query-records",displayName:"Query Records",category:"Cloud Services",usePortAsLabel:"collectionName",color:"data",initialize(){var e=this;this._internal.queryParameters={};var t=!1;this._internal.collectionChangedCallback=function(){t||(t=!0,e.scheduleAfterInputsHaveUpdated(function(){e.flagOutputDirty("count"),e.flagOutputDirty("firstItemId"),e.flagOutputDirty("isEmpty"),t=!1}))},this._internal.cloudStoreEvents=function(o){if(e.isInputConnected("storageFetch")===!0||e._internal.collection===void 0||o.collection!==e._internal.name)return;function r(s){if(e._internal.currentQuery.sort!==void 0){for(var a=0;a<e._internal.collection.size()&&!(compareObjects(e._internal.currentQuery.sort,e._internal.collection.get(a),s)>0);a++);e._internal.collection.addAtIndex(s,a)}else e._internal.collection.add(s);let l=e._internal.collection.size();e._internal.currentQuery.limit!==void 0&&l>e._internal.currentQuery.limit&&e._internal.collection.remove(e._internal.collection.get(e._internal.currentQuery.sort!==void 0&&e._internal.currentQuery.sort[0][0]==="-"?l-1:0)),e.flagOutputDirty("items"),e.flagOutputDirty("count"),e.flagOutputDirty("firstItemId"),e.flagOutputDirty("isEmpty")}if(o.type==="create"){const s=Model.get(o.object.objectId);s!==void 0&&matchesQuery(s,e._internal.currentQuery.where)&&r(s)}else if(o.type==="save"){const s=Model.get(o.objectId);if(s!==void 0){const a=matchesQuery(s,e._internal.currentQuery.where);!a&&e._internal.collection.contains(s)?(e._internal.collection.remove(s),e.flagOutputDirty("items"),e.flagOutputDirty("count"),e.flagOutputDirty("firstItemId"),e.flagOutputDirty("isEmpty")):a&&!e._internal.collection.contains(s)&&r(s)}}else if(o.type==="delete"){const s=Model.get(o.objectId);s!==void 0&&(e._internal.collection.remove(s),e.flagOutputDirty("items"),e.flagOutputDirty("count"),e.flagOutputDirty("firstItemId"),e.flagOutputDirty("isEmpty"))}};const n=CloudStore.forScope(this.nodeScope.modelScope);n.on("save",this._internal.cloudStoreEvents),n.on("create",this._internal.cloudStoreEvents),n.on("delete",this._internal.cloudStoreEvents),this._internal.storageSettings={}},getInspectInfo(){const e=this._internal.collection;return e?[{type:"value",value:e.items}]:{type:"text",value:"[Not executed yet]"}},inputs:{},outputs:{items:{type:"array",displayName:"Items",group:"General",getter(){return this._internal.collection}},firstItemId:{type:"string",displayName:"First Record Id",group:"General",getter(){if(this._internal.collection){var e=this._internal.collection.get(0);if(e!==void 0)return e.getId()}}},isEmpty:{type:"boolean",displayName:"Is Empty",group:"General",getter(){return this._internal.collection?this._internal.collection.size()===0:!0}},count:{type:"number",displayName:"Count",group:"General",getter(){return this._internal.collection?this._internal.collection.size():0}},fetched:{group:"Events",type:"signal",displayName:"Success"},failure:{group:"Events",type:"signal",displayName:"Failure"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},prototypeExtensions:{setCollectionName(e){this._internal.name=e,this.isInputConnected("storageFetch")===!1&&this.scheduleFetch()},setCollection(e){this.bindCollection(e),this.flagOutputDirty("firstItemId"),this.flagOutputDirty("isEmpty"),this.flagOutputDirty("items"),this.flagOutputDirty("count")},unbindCurrentCollection(){var e=this._internal.collection;e&&(e.off("change",this._internal.collectionChangedCallback),this._internal.collection=void 0)},bindCollection(e){this.unbindCurrentCollection(),this._internal.collection=e,e&&e.on("change",this._internal.collectionChangedCallback)},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this.unbindCurrentCollection();const e=CloudStore.forScope(this.nodeScope.modelScope);e.off("insert",this._internal.cloudStoreEvents),e.off("delete",this._internal.cloudStoreEvents),e.off("save",this._internal.cloudStoreEvents)},setError(e){this._internal.err=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure")},scheduleFetch(){var e=this._internal;e.fetchScheduled||(e.fetchScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.fetchScheduled=!1,this.fetch()}))},fetch(){this.context.editorConnection&&(this._internal.name===void 0?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"query-collection",{message:"No collection specified for query"}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"query-collection"));const e=Collection.get(),t=this.getStorageFilter(),n=this.getStorageLimit(),o=this.getStorageSkip(),r=this.getStorageFetchTotalCount();this._internal.currentQuery={where:t.where,sort:t.sort,limit:n,skip:o},CloudStore.forScope(this.nodeScope.modelScope).query({collection:this._internal.name,where:t.where,sort:t.sort,limit:n,skip:o,count:r,success:(s,a)=>{s!==void 0&&e.set(s.map(l=>{var u=CloudStore._fromJSON(l,this._internal.name,this.nodeScope.modelScope);return u})),a!==void 0&&(this._internal.storageSettings.storageTotalCount=a,this.hasOutput("storageTotalCount")&&this.flagOutputDirty("storageTotalCount")),this.setCollection(e),this.sendSignalOnOutput("fetched")},error:s=>{this.setCollection(e),this.setError(s||"Failed to fetch.")}})},getStorageFilter(){const e=this._internal.storageSettings;if(e.storageFilterType===void 0||e.storageFilterType==="simple"){const d=this._internal.visualFilter!==void 0?convertVisualFilter(this._internal.visualFilter,{queryParameters:this._internal.queryParameters,collectionName:this._internal.name}):void 0,h=this._internal.visualSorting!==void 0?convertVisualSorting(this._internal.visualSorting):void 0;return{where:d,sort:h}}else if(e.storageFilterType==="json"){if(!this._internal.filterFunc)try{var t=e.storageJSONFilter;t=t.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,""),this._internal.filterVariables=t.match(/\$[A-Za-z0-9]+/g)||[];var n=["filter","where","sort","Inputs"].concat(this._internal.filterVariables).concat([t]);this._internal.filterFunc=Function.apply(null,n)}catch(h){this._internal.filterFunc=void 0,console.log("Error while parsing filter script: "+h)}if(!this._internal.filterFunc)return;var o={},r=[],s=this,a=function(h){o=convertFilterOp(h,{collectionName:s._internal.name,error(f){s.context.editorConnection.sendWarning(s.nodeScope.componentOwner.name,s.id,"query-collection-filter",{message:f})}})},l=function(h){r=h};const d={};for(let h in e)h.startsWith("storageFilterValue-")&&(d[h.substring(19)]=e[h]);var u=[a,a,l,d];this._internal.filterVariables.forEach(h=>{u.push(e["storageFilterValue-"+h.substring(1)])});try{this._internal.filterFunc.apply(this,u)}catch(h){console.log("Error while running filter script: "+h)}return{where:o,sort:r}}},getStorageLimit(){const e=this._internal.storageSettings;if(e.storageEnableLimit)return e.storageLimit||10},getStorageSkip(){const e=this._internal.storageSettings;if(e.storageEnableLimit)return e.storageSkip||0},getStorageFetchTotalCount(){return!!this._internal.storageSettings.storageEnableCount},registerOutputIfNeeded(e){this.hasOutput(e)||this.registerOutput(e,{getter:userOutputGetter$2$1.bind(this,e)})},setVisualFilter(e){this._internal.visualFilter=e,this.isInputConnected("storageFetch")===!1&&this.scheduleFetch()},setVisualSorting(e){this._internal.visualSorting=e,this.isInputConnected("storageFetch")===!1&&this.scheduleFetch()},setQueryParameter(e,t){this._internal.queryParameters[e]=t,this.isInputConnected("storageFetch")===!1&&this.scheduleFetch()},registerInputIfNeeded(e){if(this.hasInput(e))return;if(e.startsWith("qp-"))return this.registerInput(e,{set:this.setQueryParameter.bind(this,e.substring(3))});const t={storageFetch:this.scheduleFetch.bind(this)};if(t[e])return this.registerInput(e,{set:createSetter({valueChangedToTrue:t[e]})});const n={collectionName:this.setCollectionName.bind(this),visualFilter:this.setVisualFilter.bind(this),visualSort:this.setVisualSorting.bind(this)};if(n[e])return this.registerInput(e,{set:n[e]});this.registerInput(e,{set:userInputSetter$4$1.bind(this,e)})}}};function userOutputGetter$2$1(e){return this._internal.storageSettings[e]}function userInputSetter$4$1(e,t){this._internal.storageSettings[e]=t,this.isInputConnected("storageFetch")===!1&&this.scheduleFetch()}const _defaultJSONQuery$1=`// Write your query script here, check out the reference documentation for examples
22
22
  where({ })
23
- `;function updatePorts$6$1(e,t,n,o){var r=[];const s=o.getMetaData("dbCollections"),a=o.getMetaData("systemCollections"),l=[{label:"User",value:"_User"},{label:"Role",value:"_Role"}];if(r.push({name:"collectionName",type:{name:"enum",enums:l.concat(s!==void 0?s.map(f=>({value:f.name,label:f.name})):[]),allowEditOnly:!0},displayName:"Class",plug:"input",group:"General"}),r.push({name:"storageFilterType",type:{name:"enum",allowEditOnly:!0,enums:[{value:"simple",label:"Visual"},{value:"json",label:"Javascript"}]},displayName:"Filter",default:"simple",plug:"input",group:"General"}),r.push({type:"boolean",plug:"input",group:"Limit",name:"storageEnableLimit",displayName:"Use limit"}),t.storageEnableLimit&&(r.push({type:"number",default:10,plug:"input",group:"Limit",name:"storageLimit",displayName:"Limit"}),r.push({type:"number",default:0,plug:"input",group:"Limit",name:"storageSkip",displayName:"Skip"})),r.push({type:"signal",plug:"input",group:"Actions",name:"storageFetch",displayName:"Do"}),r.push({type:"boolean",plug:"input",group:"Total Count",name:"storageEnableCount",displayName:"Fetch total count"}),t.storageEnableCount&&r.push({type:"number",plug:"output",group:"General",name:"storageTotalCount",displayName:"Total Count"}),t.storageFilterType===void 0||t.storageFilterType==="simple"){if(t.collectionName!==void 0){var u=s&&s.find(f=>f.name===t.collectionName);if(u===void 0&&a&&(u=a.find(f=>f.name===t.collectionName)),u&&u.schema&&u.schema.properties){let f=function(b){if(b.schema!==void 0&&b.schema.properties!==void 0)for(var _ in b.schema.properties){var T=b.schema.properties[_];T.type==="Relation"&&T.targetClass===t.collectionName&&(g.relations===void 0&&(g.relations={}),g.relations[b.name]===void 0&&(g.relations[b.name]=[]),g.relations[b.name].push({property:_}))}};const g=JSON.parse(JSON.stringify(u.schema));s&&s.forEach(f),a&&a.forEach(f),r.push({name:"visualFilter",plug:"input",type:{name:"query-filter",schema:g,allowEditOnly:!0},displayName:"Filter",group:"Filter"}),r.push({name:"visualSort",plug:"input",type:{name:"query-sorting",schema:g,allowEditOnly:!0},displayName:"Sort",group:"Sorting"})}if(t.visualFilter!==void 0){let f=function(b){b!==void 0&&(b.rules!==void 0?b.rules.forEach(_=>f(_)):b.input!==void 0&&(g[b.input]=!0))};const g={};f(t.visualFilter),Object.keys(g).forEach(b=>{r.push({name:"qp-"+b,plug:"input",type:"*",displayName:b,group:"Query Parameters"})})}}}else if(t.storageFilterType==="json"){r.push({type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},plug:"input",group:"Filter",name:"storageJSONFilter",default:_defaultJSONQuery$1,displayName:"Filter"});var d=t.storageJSONFilter;if(d){d=d.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,"");var p=d.match(/\$[A-Za-z0-9]+/g);if(p){const f={};p.forEach(g=>{f[g]=!0}),Object.keys(f).forEach(g=>{r.push({name:"storageFilterValue-"+g.substring(1),displayName:g.substring(1),group:"Filter Values",plug:"input",type:{name:"*",allowConnectionsOnly:!0}})})}JavascriptNodeParser.parseAndAddPortsFromScript(d,r,{inputPrefix:"storageFilterValue-",inputGroup:"Filter Values",inputType:{name:"*",allowConnectionsOnly:!0},skipOutputs:!0})}}n.sendDynamicPorts(e,r)}const DbCollectionNode2={node:DbCollectionNode$2,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$6$1(o.id,o.parameters,e.editorConnection,t),o.on("parameterUpdated",function(r){(r.name.startsWith("storage")||r.name==="visualFilter"||r.name==="collectionName")&&updatePorts$6$1(o.id,o.parameters,e.editorConnection,t)}),t.on("metadataChanged.dbCollections",function(r){CloudStore.invalidateCollections(),updatePorts$6$1(o.id,o.parameters,e.editorConnection,t)}),t.on("metadataChanged.systemCollections",function(r){CloudStore.invalidateCollections(),updatePorts$6$1(o.id,o.parameters,e.editorConnection,t)}),t.on("metadataChanged.cloudservices",function(r){CloudStore.instance._initCloudServices()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.DbCollection2",function(o){n(o)});for(const o of t.getNodesWithType("DbCollection2"))n(o)})}},ModelNodeDefinition$1$1={name:"DbModel2",docs:"https://docs.noodl.net/nodes/data/cloud-data/record",displayNodeName:"Record",shortDesc:"Database model",category:"Cloud Services",usePortAsLabel:"collectionName",color:"data",dynamicports:[{name:"conditionalports/extended",condition:"idSource = explicit OR idSource NOT SET",inputs:["modelId"]}],initialize(){const e=this._internal;e.inputValues={},e.relationModelIds={};const t=this;this._internal.onModelChangedCallback=function(n){t.isInputConnected("fetch")||(t.hasOutput("prop-"+n.name)&&t.flagOutputDirty("prop-"+n.name),t.hasOutput("changed-"+n.name)&&t.sendSignalOnOutput("changed-"+n.name),t.sendSignalOnOutput("changed"))}},getInspectInfo(){const e=this._internal.model;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:e.data}]:"[No Record]"},outputs:{id:{type:"string",displayName:"Id",group:"General",getter(){return this._internal.model?this._internal.model.getId():this._internal.modelId}},fetched:{type:"signal",displayName:"Fetched",group:"Events"},changed:{type:"signal",displayName:"Changed",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},inputs:{idSource:{type:{name:"enum",enums:[{label:"Specify explicitly",value:"explicit"},{label:"From repeater",value:"foreach"}],allowEditOnly:!0},default:"explicit",displayName:"Id Source",group:"General",set(e){e==="foreach"&&this.scheduleAfterInputsHaveUpdated(()=>{for(var t=this.nodeScope.componentOwner;t!==void 0&&t._forEachModel===void 0&&t.parentNodeScope;)t=t.parentNodeScope.componentOwner;this.setModel(t!==void 0?t._forEachModel:void 0)})}},modelId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Id",group:"General",set(e){e instanceof Model?e=e.getId():typeof e=="object"&&(e=Model.create(e).getId()),this._internal.modelId=e,this.isInputConnected("fetch")===!1?this.setModelID(e):this.flagOutputDirty("id")}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleFetch()}}},methods:{setCollectionID(e){this._internal.collectionId=e},setModelID(e){var t=(this.nodeScope.modelScope||Model).get(e);this.setModel(t)},setModel(e){this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback),this._internal.model=e,this.flagOutputDirty("id"),e.on("change",this._internal.onModelChangedCallback);for(var t in e.data)this.hasOutput("prop-"+t)&&this.flagOutputDirty("prop-"+t);this.sendSignalOnOutput("fetched")},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},scheduleOnce(e,t){const n=this,o="hasScheduled"+e;this._internal[o]||(this._internal[o]=!0,this.scheduleAfterInputsHaveUpdated(function(){n._internal[o]=!1,t()}))},setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning")},scheduleFetch(){const e=this,t=this._internal;this.scheduleOnce("Fetch",function(){if(t.modelId===void 0||t.modelId===""){e.setError("Missing Id.");return}const n=CloudStore.forScope(e.nodeScope.modelScope);n.fetch({collection:t.collectionId,objectId:t.modelId,success(o){const r=n._fromJSON(o,t.collectionId);t.model!==r&&(t.model&&t.model.off("change",t.onModelChangedCallback),t.model=r,r.on("change",t.onModelChangedCallback)),e.flagOutputDirty("id"),delete o.objectId;for(const s in o)e.hasOutput("prop-"+s)&&e.flagOutputDirty("prop-"+s);e.sendSignalOnOutput("fetched")},error(o){e.setError(o||"Failed to fetch.")}})})},scheduleStore(){var e=this._internal;e.model&&this.scheduleOnce("Store",function(){for(var t in e.inputValues)e.model.set(t,e.inputValues[t],{resolve:!0})})},registerOutputIfNeeded(e){this.hasOutput(e)||e.startsWith("prop-")&&this.registerOutput(e,{getter:userOutputGetter$1$1.bind(this,e.substring(5))})},registerInputIfNeeded(e){if(this.hasInput(e))return;const t={};if(t[e])return this.registerInput(e,{set:createSetter({valueChangedToTrue:t[e]})});const n={collectionName:this.setCollectionID.bind(this)};if(n[e])return this.registerInput(e,{set:n[e]});e.startsWith("prop-")&&this.registerInput(e,{set:userInputSetter$3$1.bind(this,e.substring(5))})}}};function userOutputGetter$1$1(e){return this._internal.model?this._internal.model.get(e,{resolve:!0}):void 0}function userInputSetter$3$1(e,t){this._internal.inputValues[e]=t}function updatePorts$5$1(e,t,n,o){var r=[];const s=o.getMetaData("dbCollections"),a=o.getMetaData("systemCollections"),l=[{label:"User",value:"_User"},{label:"Role",value:"_Role"}];if(r.push({name:"collectionName",displayName:"Class",group:"General",type:{name:"enum",enums:l.concat(s!==void 0?s.map(g=>({value:g.name,label:g.name})):[]),allowEditOnly:!0},plug:"input"}),t.collectionName&&s){var u=s.find(g=>g.name===t.collectionName);if(u===void 0&&a&&(u=a.find(g=>g.name===t.collectionName)),u&&u.schema&&u.schema.properties){var d=u.schema.properties;for(var p in d){var f=d[p];if(!r.find(g=>g.name===p)&&f.type!=="Relation"){const g={String:"string",Boolean:"boolean",Number:"number",Date:"date"};r.push({type:{name:g[f.type]?g[f.type]:"*"},plug:"output",group:"Properties",name:"prop-"+p,displayName:p}),r.push({type:"signal",plug:"output",group:"Changed Events",displayName:p+" Changed",name:"changed-"+p})}}}}n.sendDynamicPorts(e,r)}const DbModelNode2={node:ModelNodeDefinition$1$1,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$5$1(o.id,o.parameters,e.editorConnection,t),o.on("parameterUpdated",function(){updatePorts$5$1(o.id,o.parameters,e.editorConnection,t)}),t.on("metadataChanged.dbCollections",function(){CloudStore.invalidateCollections(),updatePorts$5$1(o.id,o.parameters,e.editorConnection,t)}),t.on("metadataChanged.systemCollections",function(){CloudStore.invalidateCollections(),updatePorts$5$1(o.id,o.parameters,e.editorConnection,t)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.DbModel2",function(o){n(o)});for(const o of t.getNodesWithType("DbModel2"))n(o)})}};function addBaseInfo$1(e,t){const n=t===void 0||t.includeInputProperties,o=t!==void 0&&t.includeRelations;Object.assign(e.node,{category:"Data",color:"data",inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),Object.assign(e.node.outputs,{failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}}),Object.assign(e.node.methods,{scheduleOnce(r,s){const a=this,l="hasScheduled"+r;this._internal[l]||(this._internal[l]=!0,this.scheduleAfterInputsHaveUpdated(function(){a._internal[l]=!1,s()}))},checkWarningsBeforeCloudOp(){return this.clearWarnings(),this._internal.collectionId?!0:(this.setError("No class name specified"),!1)},setError(r){this._internal.error=r,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning",{message:r,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning")}}),Object.assign(e,{setup(r,s){if(!r.editorConnection||!r.editorConnection.isRunningLocally())return;function a(l){function u(){var d=[];const p=s.getMetaData("dbCollections"),f=s.getMetaData("systemCollections"),g=[{label:"User",value:"_User"},{label:"Role",value:"_Role"}],b=l.parameters;if(d.push({name:"collectionName",displayName:"Class",group:"General",type:{name:"enum",enums:g.concat(p!==void 0?p.map(I=>({value:I.name,label:I.name})):[]),allowEditOnly:!0},plug:"input"}),o&&b.collectionName&&p){var _=p.find(I=>I.name===b.collectionName);if(_===void 0&&f&&(_=f.find(I=>I.name===b.collectionName)),_&&_.schema&&_.schema.properties){const I=_.schema.properties,k=Object.keys(I).filter(N=>I[N].type==="Relation").map(N=>({label:N,value:N}));d.push({name:"relationProperty",displayName:"Relation",group:"General",type:{name:"enum",enums:k,allowEditOnly:!0},plug:"input"})}}if(n&&b.collectionName&&p){const I={String:"string",Boolean:"boolean",Number:"number",Date:"date"};var _=p.find(N=>N.name===b.collectionName);if(_===void 0&&f&&(_=f.find(N=>N.name===b.collectionName)),_&&_.schema&&_.schema.properties){var T=_.schema.properties;for(var A in T){var v=T[A];d.find(N=>N.name===A)||d.push({type:{name:I[v.type]?I[v.type]:"*"},plug:"input",group:"Properties",name:"prop-"+A,displayName:A})}}}e._additionalDynamicPorts&&e._additionalDynamicPorts(l,d,s),r.editorConnection.sendDynamicPorts(l.id,d)}u(),l.on("parameterUpdated",function(d){u()}),s.on("metadataChanged.dbCollections",function(d){CloudStore.invalidateCollections(),u()}),s.on("metadataChanged.systemCollections",function(d){CloudStore.invalidateCollections(),u()})}s.on("editorImportComplete",()=>{s.on("nodeAdded."+e.node.name,function(l){a(l)});for(const l of s.getNodesWithType(e.node.name))a(l)})}})}function addModelId$1(e,t){Object.assign({},e.node),e.setup;var n=Object.assign({},e.node.methods);const o=t===void 0||t.includeInputs,r=t===void 0||t.includeOutputs;Object.assign(e.node,{inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),o&&(Object.assign(e.node,{usePortAsLabel:"collectionName"}),e.node.dynamicports=(e.node.dynamicports||[]).concat([{name:"conditionalports/extended",condition:"idSource = explicit OR idSource NOT SET",inputs:["modelId"]}]),Object.assign(e.node.inputs,{idSource:{type:{name:"enum",enums:[{label:"Specify explicitly",value:"explicit"},{label:"From repeater",value:"foreach"}],allowEditOnly:!0},default:"explicit",displayName:"Id Source",group:"General",tooltip:`Choose if you want to specify the Id explicitly,
24
- or if you want it to be that of the current record in a repeater.`,set(s){s==="foreach"&&this.scheduleAfterInputsHaveUpdated(()=>{for(var a=this.nodeScope.componentOwner;a!==void 0&&a._forEachModel===void 0&&a.parentNodeScope;)a=a.parentNodeScope.componentOwner;this.setModel(a!==void 0?a._forEachModel:void 0)})}},modelId:{type:{name:"string",identifierOf:"ModelName",identifierDisplayName:"Object Ids"},displayName:"Id",group:"General",set(s){s instanceof Model&&(s=s.getId()),this._internal.modelId=s,this.setModelID(s)}}})),r&&Object.assign(e.node.outputs,{id:{type:"string",displayName:"Id",group:"General",getter(){return this._internal.model?this._internal.model.getId():this._internal.modelId}}}),Object.assign(e.node.methods,{setCollectionID(s){this._internal.collectionId=s,this.clearWarnings()},setModelID(s){var a=(this.nodeScope.modelScope||Model).get(s);this.setModel(a)},setModel(s){this._internal.model=s,this.flagOutputDirty("id")},registerInputIfNeeded(s){this.hasInput(s)||(s==="collectionName"&&this.registerInput(s,{set:this.setCollectionID.bind(this)}),n&&n.registerInputIfNeeded&&n.registerInputIfNeeded.call(this,s))}})}function addInputProperties$1(e){var t={node:Object.assign({},e.node),setup:e.setup},n=Object.assign({},e.node.methods);Object.assign(e.node,{inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),Object.assign(e.node,{initialize(){var o=this._internal;o.inputValues={},t.node.initialize&&t.node.initialize.call(this)}}),Object.assign(e.node.outputs,{}),Object.assign(e.node.inputs,{}),Object.assign(e.node.methods,{registerInputIfNeeded(o){this.hasInput(o)||(o.startsWith("prop-")&&this.registerInput(o,{set:this._setInputValue.bind(this,o.substring(5))}),n&&n.registerInputIfNeeded&&n.registerInputIfNeeded.call(this,o))},_setInputValue(o,r){this._internal.inputValues[o]=r}})}function addRelationProperty(e){Object.assign({},e.node),e.setup;var t=Object.assign({},e.node.methods);Object.assign(e.node,{inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),Object.assign(e.node.inputs,{targetId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Target Record Id",group:"General",set(n){this._internal.targetModelId=n}}}),Object.assign(e.node.methods,{registerInputIfNeeded(n){this.hasInput(n)||(n==="relationProperty"&&this.registerInput(n,{set:this.setRelationProperty.bind(this)}),t&&t.registerInputIfNeeded&&t.registerInputIfNeeded.call(this,n))},setRelationProperty(n){this._internal.relationProperty=n}})}function _getCurrentUser(e){if(typeof _noodl_cloud_runtime_version>"u"){var t=localStorage["Parse/"+CloudStore.instance.appId+"/currentUser"];if(t!==void 0){let n;try{n=JSON.parse(t)}catch{}return n!==void 0?n.objectId:void 0}}else return e.get("Request").UserId}function addAccessControl(e){var t={node:Object.assign({},e.node),setup:e.setup},n=Object.assign({},e.node.methods);Object.assign(e.node,{inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),Object.assign(e.node,{initialize(){var r=this._internal;r.accessControl={},t.node.initialize&&t.node.initialize.call(this)}}),Object.assign(e.node.inputs,{accessControl:{type:{name:"proplist",autoName:"Rule",allowEditOnly:!0},index:1e3,displayName:"Access Control Rules",group:"Access Control Rules",set(r){this._internal.accessControlRules=r}}});const o=e._additionalDynamicPorts;e._additionalDynamicPorts=function(r,s,a){r.parameters.accessControl!==void 0&&r.parameters.accessControl.length>0&&r.parameters.accessControl.forEach(l=>{const u="acl-"+l.id;s.push({name:u+"-target",displayName:"Target",editorName:l.label+" | Target",plug:"input",type:{name:"enum",enums:[{value:"user",label:"User"},{value:"everyone",label:"Everyone"},{value:"role",label:"Role"}],allowEditOnly:!0},group:l.label+" Access Rule",default:"user",parent:"accessControl",parentItemId:l.id}),r.parameters[u+"-target"]==="role"?s.push({name:u+"-role",displayName:"Role",editorName:l.label+" | Role",group:l.label+" Access Rule",plug:"input",type:"string",parent:"accessControl",parentItemId:l.id}):(r.parameters[u+"-target"]===void 0||r.parameters[u+"-target"]==="user")&&s.push({name:u+"-userid",displayName:"User Id",group:l.label+" Access Rule",editorName:l.label+" | User Id",plug:"input",type:{name:"string",allowConnectionsOnly:!0},parent:"accessControl",parentItemId:l.id}),s.push({name:u+"-read",displayName:"Read",editorName:l.label+" | Read",group:l.label+" Access Rule",plug:"input",type:{name:"boolean"},default:!0,parent:"accessControl",parentItemId:l.id}),s.push({name:u+"-write",displayName:"Write",editorName:l.label+" | Write",group:l.label+" Access Rule",plug:"input",type:{name:"boolean"},default:!0,parent:"accessControl",parentItemId:l.id})}),o&&o(r,s,a)},Object.assign(e.node.methods,{registerInputIfNeeded(r){this.hasInput(r)||(r.startsWith("acl-")&&this.registerInput(r,{set:this.setAccessControl.bind(this,r)}),n&&n.registerInputIfNeeded&&n.registerInputIfNeeded.call(this,r))},_getACL(){let r={};function s(l){return{read:l.read===void 0?!0:l.read,write:l.write===void 0?!0:l.write}}const a=_getCurrentUser(this.nodeScope.modelScope);return this._internal.accessControlRules!==void 0&&this._internal.accessControlRules.forEach(l=>{const u=this._internal.accessControl[l.id];if(u===void 0){const d=a;d!==void 0&&(r[d]={write:!0,read:!0})}else if(u.target==="everyone")r["*"]=s(u);else if(u.target==="user"){const d=u.userid||a;r[d]=s(u)}else u.target==="role"&&(r["role:"+u.role]=s(u))}),Object.keys(r).length>0?r:void 0},setAccessControl(r,s){const a=r.split("-");this._internal.accessControl[a[1]]===void 0&&(this._internal.accessControl[a[1]]={}),this._internal.accessControl[a[1]][a[2]]=s}})}const SetDbModelPropertiedNodeDefinition={node:{name:"SetDbModelProperties",docs:"https://docs.noodl.net/nodes/data/cloud-data/set-record-properties",displayNodeName:"Set Record Properties",usePortAsLabel:"collectionName",dynamicports:[{name:"conditionalports/extended",condition:"storeType = cloud OR storeType NOT SET",inputs:["storeProperties"]}],inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this._internal.storeType===void 0||this._internal.storeType==="cloud"?this.scheduleSave():this.scheduleStore()}},storeProperties:{displayName:"Properties to store",group:"General",type:{name:"enum",enums:[{label:"Only specified",value:"specified"},{label:"All",value:"all"}]},default:"specified",set(e){this._internal.storeProperties=e}},storeType:{displayName:"Store to",group:"General",type:{name:"enum",enums:[{label:"Cloud and local",value:"cloud"},{label:"Local only",value:"local"}]},default:"cloud",set(e){this._internal.storeType=e}}},outputs:{stored:{type:"signal",displayName:"Success",group:"Events"}},methods:{scheduleSave(){const e=this,t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageSave",function(){if(!t.model){e.setError("Missing Record Id");return}const n=t.model;for(const o in t.inputValues)n.set(o,t.inputValues[o],{resolve:!0});CloudStore.forScope(e.nodeScope.modelScope).save({collection:t.collectionId,objectId:n.getId(),data:t.storeProperties==="all"?n.data:t.inputValues,acl:e._getACL(),success(o){for(var r in o)n.set(r,o[r]);e.sendSignalOnOutput("stored")},error(o){e.setError(o||"Failed to save.")}})})},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});this.sendSignalOnOutput("stored")}})}}}}};addBaseInfo$1(SetDbModelPropertiedNodeDefinition),addModelId$1(SetDbModelPropertiedNodeDefinition),addInputProperties$1(SetDbModelPropertiedNodeDefinition),addAccessControl(SetDbModelPropertiedNodeDefinition);var DeleteDbModelPropertiedNodeDefinition={node:{name:"DeleteDbModelProperties",docs:"https://docs.noodl.net/nodes/data/cloud-data/delete-record",displayNodeName:"Delete Record",shortDesc:"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.",inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.storageDelete()}}},outputs:{deleted:{type:"signal",displayName:"Success",group:"Events"}},methods:{storageDelete(){const e=this,t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageDelete",function(){if(!t.model){e.setError("Missing Record Id");return}CloudStore.forScope(e.nodeScope.ModelScope).delete({collection:t.collectionId,objectId:t.model.getId(),success(){t.model.notify("delete"),e.sendSignalOnOutput("deleted")},error(n){e.setError(n||"Failed to delete.")}})})}}}};addBaseInfo$1(DeleteDbModelPropertiedNodeDefinition,{includeInputProperties:!1}),addModelId$1(DeleteDbModelPropertiedNodeDefinition);var NewDbModelPropertiedNodeDefinition={node:{name:"NewDbModelProperties",docs:"https://docs.noodl.net/nodes/data/cloud-data/create-new-record",displayName:"Create New Record",usePortAsLabel:"collectionName",inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.storageInsert()}},sourceObjectId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Source Object Id",group:"General",set(e){e instanceof Model&&(e=e.getId()),this._internal.sourceObjectId=e}}},outputs:{created:{type:"signal",displayName:"Success",group:"Events"}},methods:{storageInsert(){const e=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageInsert",()=>{const t=Object.assign({},e.sourceObjectId?(this.nodeScope.modelScope||Model).get(e.sourceObjectId).data:{},e.inputValues),n=CloudStore.forScope(this.nodeScope.modelScope);n.create({collection:e.collectionId,data:t,acl:this._getACL(),success:o=>{const r=n._fromJSON(o,e.collectionId);this.setModel(r),this.sendSignalOnOutput("created")},error:o=>{this.setError(o||"Failed to insert.")}})})}}}};addBaseInfo$1(NewDbModelPropertiedNodeDefinition),addModelId$1(NewDbModelPropertiedNodeDefinition,{includeOutputs:!0}),addInputProperties$1(NewDbModelPropertiedNodeDefinition),addAccessControl(NewDbModelPropertiedNodeDefinition);var AddDbModelRelationNodeDefinition$1={node:{name:"AddDbModelRelation",docs:"https://docs.noodl.net/nodes/data/cloud-data/add-record-relation",displayNodeName:"Add Record Relation",usePortAsLabel:"collectionName",inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleAddRelation()}}},outputs:{relationAdded:{type:"signal",displayName:"Success",group:"Events"}},methods:{validateInputs(){if(!this.context.editorConnection)return;const e=t=>{this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"add-relation",{message:t})};this._internal.collectionId===void 0?e("No class specified"):this._internal.relationProperty===void 0?e("No relation property specified"):this._internal.targetModelId===void 0?e("No target record Id (the record to add a relation to) specified"):this._internal.model===void 0?e("No record Id specified (the record that should get the relation)"):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"add-relation")},scheduleAddRelation(e){const t=this,n=this._internal;this.scheduleOnce("StorageAddRelation",function(){if(t.validateInputs(),!!n.model){var o=n.model,r=n.targetModelId;r!==void 0&&CloudStore.forScope(t.nodeScope.modelScope).addRelation({collection:n.collectionId,objectId:o.getId(),key:n.relationProperty,targetObjectId:r,targetClass:(t.nodeScope.modelScope||Model).get(r)._class,success(s){for(var a in s)o.set(a,s[a]);t.sendSignalOnOutput("relationAdded")},error(s){t.setError(s||"Failed to add relation.")}})}})}}}};addBaseInfo$1(AddDbModelRelationNodeDefinition$1,{includeRelations:!0}),addModelId$1(AddDbModelRelationNodeDefinition$1),addRelationProperty(AddDbModelRelationNodeDefinition$1);var AddDbModelRelationNodeDefinition={node:{name:"RemoveDbModelRelation",docs:"https://docs.noodl.net/nodes/data/cloud-data/remove-record-relation",displayName:"Remove Record Relation",usePortAsLabel:"collectionName",inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleRemoveRelation()}}},outputs:{relationRemoved:{type:"signal",displayName:"Success",group:"Events"}},methods:{validateInputs(){if(!this.context.editorConnection)return;const e=t=>{this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"add-relation",{message:t})};this._internal.collectionId===void 0?e("No class specified"):this._internal.relationProperty===void 0?e("No relation property specified"):this._internal.targetModelId===void 0?e("No target record Id (the record to add a relation to) specified"):this._internal.model===void 0?e("No record Id specified (the record that should get the relation)"):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"add-relation")},scheduleRemoveRelation(e){const t=this,n=this._internal;this.scheduleOnce("StorageRemoveRelation",function(){if(t.validateInputs(),!!n.model){var o=n.model,r=n.targetModelId;r!==void 0&&CloudStore.forScope(t.nodeScope.modelScope).removeRelation({collection:n.collectionId,objectId:o.getId(),key:n.relationProperty,targetObjectId:r,targetClass:(t.nodeScope.modelScope||Model).get(r)._class,success(s){for(var a in s)o.set(a,s[a]);t.sendSignalOnOutput("relationRemoved")},error(s){t.setError(s||"Failed to remove relation.")}})}})}}}};addBaseInfo$1(AddDbModelRelationNodeDefinition,{includeRelations:!0}),addModelId$1(AddDbModelRelationNodeDefinition),addRelationProperty(AddDbModelRelationNodeDefinition);var FilterDBModelsNode={name:"FilterDBModels",docs:"https://docs.noodl.net/nodes/data/cloud-data/filter-records",displayNodeName:"Filter Records",shortDesc:"Filter, sort and limit array",category:"Data",color:"data",initialize(){var e=this;this._internal.collectionChangedCallback=function(){e.isInputConnected("filter")!==!0&&e.scheduleFilter()},this._internal.cloudStoreEvents=function(t){e.isInputConnected("filter")!==!0&&e._internal.visualFilter!==void 0&&e._internal.collection!==void 0&&t.collection===e._internal.collectionName&&t.objectId!==void 0&&e._internal.collection.contains(Model.get(t.objectId))&&e.scheduleFilter()},CloudStore.instance.on("save",this._internal.cloudStoreEvents),this._internal.enabled=!0,this._internal.filterSettings={},this._internal.filterParameters={}},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(e){this._internal.enabled=e,this.isInputConnected("filter")===!1&&this.scheduleFilter()}},filter:{type:"signal",group:"Actions",displayName:"Filter",valueChangedToTrue(){this.scheduleFilter()}}},outputs:{items:{type:"array",displayName:"Items",group:"General",getter(){return this._internal.filteredCollection}},firstItemId:{type:"string",displayName:"First Record Id",group:"General",getter(){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(){return this._internal.filteredCollection?this._internal.filteredCollection.size():0}},modified:{group:"Events",type:"signal",displayName:"Filtered"}},prototypeExtensions:{unbindCurrentCollection(){var e=this._internal.collection;e&&(e.off("change",this._internal.collectionChangedCallback),this._internal.collection=void 0)},bindCollection(e){this.unbindCurrentCollection(),this._internal.collection=e,e&&e.on("change",this._internal.collectionChangedCallback)},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this.unbindCurrentCollection(),CloudStore.instance.off("save",this._internal.cloudStoreEvents)},getLimit(){const e=this._internal.filterSettings;if(e.filterEnableLimit)return e.filterLimit||10},getSkip(){const e=this._internal.filterSettings;if(e.filterEnableLimit)return e.filterSkip||0},scheduleFilter(){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){const a=this._internal.visualFilter;if(a!==void 0){var t=convertVisualFilter(a,{queryParameters:this._internal.filterParameters,collectionName:this._internal.collectionName});t&&(e=e.filter(l=>matchesQuery(l,t)))}var n=this._internal.visualSorting;if(n!==void 0&&n.length>0)var o=convertVisualSorting(n);o&&e.sort(compareObjects.bind(this,o));var r=this.getSkip();r&&(e=e.slice(r,e.length));var s=this.getLimit();s&&(e=e.slice(0,s))}this._internal.filteredCollection=Collection.create(e),this.sendSignalOnOutput("modified"),this.flagOutputDirty("firstItemId"),this.flagOutputDirty("items"),this.flagOutputDirty("count")}}))},setCollectionName(e){this._internal.collectionName=e},setVisualFilter(e){this._internal.visualFilter=e,this.isInputConnected("filter")===!1&&this.scheduleFilter()},setVisualSorting(e){this._internal.visualSorting=e,this.isInputConnected("filter")===!1&&this.scheduleFilter()},setFilterParameter(e,t){this._internal.filterParameters[e]=t,this.isInputConnected("filter")===!1&&this.scheduleFilter()},registerInputIfNeeded(e){if(!this.hasInput(e)){if(e==="collectionName")return this.registerInput(e,{set:this.setCollectionName.bind(this)});if(e==="visualFilter")return this.registerInput(e,{set:this.setVisualFilter.bind(this)});if(e==="visualSorting")return this.registerInput(e,{set:this.setVisualSorting.bind(this)});if(e.startsWith("fp-"))return this.registerInput(e,{set:this.setFilterParameter.bind(this,e.substring(3))});this.registerInput(e,{set:userInputSetter$2$1.bind(this,e)})}}}};function userInputSetter$2$1(e,t){this._internal.filterSettings[e]=t,this.isInputConnected("filter")===!1&&this.scheduleFilter()}function updatePorts$4$1(e,t,n,o){var r=[];if(r.push({name:"collectionName",type:{name:"enum",enums:o!==void 0?o.map(l=>({value:l.name,label:l.name})):[],allowEditOnly:!0},displayName:"Class",plug:"input",group:"General"}),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"})),t.collectionName!==void 0){var s=o.find(l=>l.name===t.collectionName);if(s&&s.schema&&s.schema.properties){const l=JSON.parse(JSON.stringify(s.schema)),u={Boolean:!0,String:!0,Date:!0,Number:!0,Pointer:!0};for(var a in l.properties)u[l.properties[a].type]||delete l.properties[a];r.push({name:"visualFilter",plug:"input",type:{name:"query-filter",schema:l,allowEditOnly:!0},displayName:"Filter",group:"Filter"}),r.push({name:"visualSorting",plug:"input",type:{name:"query-sorting",schema:l,allowEditOnly:!0},displayName:"Sorting",group:"Sorting"})}if(t.visualFilter!==void 0){let l=function(d){d!==void 0&&(d.rules!==void 0?d.rules.forEach(p=>l(p)):d.input!==void 0&&(u[d.input]=!0))};const u={};l(t.visualFilter),Object.keys(u).forEach(d=>{r.push({name:"fp-"+d,plug:"input",type:"*",displayName:d,group:"Filter Parameters"})})}}n.sendDynamicPorts(e,r)}const FilterDbModelsNode={node:FilterDBModelsNode,setup(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.FilterDBModels",function(n){updatePorts$4$1(n.id,n.parameters,e.editorConnection,t.getMetaData("dbCollections")),n.on("parameterUpdated",function(o){updatePorts$4$1(n.id,n.parameters,e.editorConnection,t.getMetaData("dbCollections"))}),t.on("metadataChanged.dbCollections",function(o){CloudStore.invalidateCollections(),updatePorts$4$1(n.id,n.parameters,e.editorConnection,o)}),t.on("metadataChanged.systemCollections",function(o){CloudStore.invalidateCollections(),updatePorts$4$1(n.id,n.parameters,e.editorConnection,o)})})}};var ModelNodeDefinition$2={name:"Model2",docs:"https://docs.noodl.net/nodes/data/object/object-node",displayNodeName:"Object",shortDesc:"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.",category:"Data",usePortAsLabel:"modelId",color:"data",dynamicports:[{name:"conditionalports/extended",condition:"idSource = explicit OR idSource NOT SET",inputs:["modelId"]}],initialize(){var e=this._internal;e.inputValues={},e.dirtyValues={};var t=this;this._internal.onModelChangedCallback=function(n){t.isInputConnected("fetch")!==!0&&(t.hasOutput("prop-"+n.name)&&t.flagOutputDirty("prop-"+n.name),t.hasOutput("changed-"+n.name)&&t.sendSignalOnOutput("changed-"+n.name),t.sendSignalOnOutput("changed"))}},getInspectInfo(){const e=this._internal.model;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:e.data}]:"[No Object]"},outputs:{id:{type:"string",displayName:"Id",group:"General",getter(){return this._internal.model?this._internal.model.getId():this._internal.modelId}},changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"}},inputs:{idSource:{type:{name:"enum",enums:[{label:"Specify explicitly",value:"explicit"},{label:"From repeater",value:"foreach"}],allowEditOnly:!0},default:"explicit",displayName:"Get Id from",group:"General",set(e){e==="foreach"&&this.scheduleAfterInputsHaveUpdated(()=>{for(var t=this.nodeScope.componentOwner;t!==void 0&&t._forEachModel===void 0&&t.parentNodeScope;)t=t.parentNodeScope.componentOwner;this.setModel(t!==void 0?t._forEachModel:void 0)})}},modelId:{type:{name:"string",identifierOf:"ModelName",identifierDisplayName:"Object Ids"},displayName:"Id",group:"General",set(e){e instanceof Model?e=e.getId():typeof e=="object"&&(e=Model.create(e).getId()),this._internal.modelId=e,this.isInputConnected("fetch")===!1?this.setModelID(e):this.flagOutputDirty("id")}},properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set(e){}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleSetModel()}}},prototypeExtensions:{scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{if(this.hasScheduledStore=!1,!!e.model){for(var t in e.dirtyValues)e.model.set(t,e.inputValues[t],{resolve:!0});e.dirtyValues={}}})}},scheduleSetModel(){this.hasScheduledSetModel||(this.hasScheduledSetModel=!0,this._internal,this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledSetModel=!1,this.setModelID(this._internal.modelId)}))},setModelID(e){var t=(this.nodeScope.modelScope||Model).get(e);this.setModel(t),this.sendSignalOnOutput("fetched")},setModel(e){if(this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback),this._internal.model=e,this.flagOutputDirty("id"),e){e.on("change",this._internal.onModelChangedCallback);for(var t in e.data)this.hasOutput("prop-"+t)&&this.flagOutputDirty("prop-"+t)}},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},registerOutputIfNeeded(e){this.hasOutput(e)||e.startsWith("prop-")&&this.registerOutput(e,{getter:userOutputGetter$4.bind(this,e.substring(5))})},registerInputIfNeeded(e){this.hasInput(e)||e.startsWith("prop-")&&this.registerInput(e,{set:userInputSetter$1$1.bind(this,e.substring(5))})}}};function userOutputGetter$4(e){return this._internal.model?this._internal.model.get(e,{resolve:!0}):void 0}function userInputSetter$1$1(e,t){this._internal.inputValues[e]=t;const n=this._internal.model;(!n||n.get(e)!==t)&&(this._internal.dirtyValues[e]=!0,this.scheduleStore())}function updatePorts$3$1(e,t,n){var o=[],r=t.properties;if(r){r=r?r.split(","):void 0;for(var s in r){var a=r[s];o.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name:"prop-"+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 ModelNode2={node:ModelNodeDefinition$2,setup(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Model2",function(n){updatePorts$3$1(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",function(o){updatePorts$3$1(n.id,n.parameters,e.editorConnection)})})}};function addBaseInfo(e){Object.assign(e.node,{category:"Data",color:"data"})}function addModelId(e,t){const n=t===void 0||t.includeInputs,o=t===void 0||t.includeOutputs;Object.assign(e.node,{inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),n&&(Object.assign(e.node,{usePortAsLabel:"modelId"}),e.node.dynamicports=(e.node.dynamicports||[]).concat([{name:"conditionalports/extended",condition:"idSource = explicit OR idSource NOT SET",inputs:["modelId"]}]),Object.assign(e.node.inputs,{idSource:{type:{name:"enum",enums:[{label:"Specify explicitly",value:"explicit"},{label:"From repeater",value:"foreach"}],allowEditOnly:!0},default:"explicit",displayName:"Id Source",group:"General",set(r){r==="foreach"&&this.scheduleAfterInputsHaveUpdated(()=>{for(var s=this.nodeScope.componentOwner;s!==void 0&&s._forEachModel===void 0&&s.parentNodeScope;)s=s.parentNodeScope.componentOwner;this.setModel(s!==void 0?s._forEachModel:void 0)})}},modelId:{type:{name:"string",identifierOf:"ModelName",identifierDisplayName:"Object Ids"},displayName:"Id",group:"General",set(r){r instanceof Model&&(r=r.getId()),this._internal.modelId=r,this.setModelID(r)}}})),o&&Object.assign(e.node.outputs,{id:{type:"string",displayName:"Id",group:"General",getter(){return this._internal.model?this._internal.model.getId():this._internal.modelId}}}),Object.assign(e.node.methods,{setModelID(r){var s=(this.nodeScope.modelScope||Model).get(r);this.setModel(s)},setModel(r){this._internal.model=r,this.flagOutputDirty("id")}}),e.node.getInspectInfo||(e.node.getInspectInfo=function(){const r=this._internal.model;return r?[{type:"text",value:"Id: "+r.getId()},{type:"value",value:r.data}]:"[No Object]"})}function addInputProperties(def){var _def={node:Object.assign({},def.node),setup:def.setup},_methods=Object.assign({},def.node.methods);Object.assign(def.node,{inputs:def.node.inputs||{},outputs:def.node.outputs||{},methods:def.node.methods||{}}),Object.assign(def,{setup(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||(t.on("nodeAdded."+def.node.name,function(n){function o(){var r=[];const s=[{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 a=n.parameters.properties;if(a){a=a?a.split(","):void 0;for(var l in a){var u=a[l];r.push({type:{name:n.parameters["type-"+u]===void 0?"*":n.parameters["type-"+u]},plug:"input",group:"Property Values",displayName:u,name:"prop-"+u}),r.push({type:{name:"enum",enums:s,allowEditOnly:!0},plug:"input",group:"Property Types",displayName:u,default:"*",name:"type-"+u})}}e.editorConnection.sendDynamicPorts(n.id,r,{detectRenamed:{plug:"input"}})}o(),n.on("parameterUpdated",function(r){o()})}),_def.setup&&_def.setup(e,t))}}),Object.assign(def.node,{initialize(){var e=this._internal;e.inputValues={},e.inputTypes={},_def.node.initialize&&_def.node.initialize.call(this)}}),Object.assign(def.node.outputs,{}),Object.assign(def.node.inputs,{properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties to set",set(e){}}}),Object.assign(def.node.methods,{_pushInputValues(model){var internal=this._internal;const _defaultValueForType={boolean:!1,string:"",number:0,date:new Date},_allKeys={};for(const e in internal.inputTypes)_allKeys[e]=!0;for(const e in internal.inputValues)_allKeys[e]=!0;const properties=this.model.parameters.properties||"",validProperties=properties.split(","),keysToSet=Object.keys(_allKeys).filter(e=>validProperties.indexOf(e)!==-1);for(const i of keysToSet){var value=internal.inputValues[i];if(value!==void 0){if(internal.inputTypes[i]!==void 0&&internal.inputTypes[i]==="array"&&typeof value=="string"){this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"invalid-array-"+i);try{value=eval(value)}catch(e){value.indexOf("[")!==-1||value.indexOf("{")!==-1?(this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"invalid-array-"+i,{showGlobally:!0,message:"Invalid array<br>"+e.toString()}),value=[]):value=Collection.get(value)}}internal.inputTypes[i]!==void 0&&internal.inputTypes[i]==="object"&&typeof value=="string"&&(value=(this.nodeScope.modelScope||Model).get(value)),model.set(i,value,{resolve:!0})}else model.set(i,_defaultValueForType[internal.inputTypes[i]],{resolve:!0})}},scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledStore=!1,e.model&&(this._pushInputValues(e.model),this.sendSignalOnOutput("stored"))})}},registerInputIfNeeded(e){this.hasInput(e)||(e.startsWith("prop-")&&this.registerInput(e,{set:this._setInputValue.bind(this,e.substring(5))}),e.startsWith("type-")&&this.registerInput(e,{set:this._setInputType.bind(this,e.substring(5))}),_methods&&_methods.registerInputIfNeeded&&_def.node.methods.registerInputIfNeeded.call(this,e))},_setInputValue(e,t){this._internal.inputValues[e]=t},_setInputType(e,t){this._internal.inputTypes[e]=t}})}var SetModelPropertiedNodeDefinition={node:{name:"SetModelProperties",docs:"https://docs.noodl.net/nodes/data/object/set-object-properties",displayNodeName:"Set Object Properties",inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleStore()}}},outputs:{stored:{type:"signal",displayName:"Done",group:"Events"}}}};addBaseInfo(SetModelPropertiedNodeDefinition),addModelId(SetModelPropertiedNodeDefinition),addInputProperties(SetModelPropertiedNodeDefinition);var NewModelNodeDefinition={node:{name:"NewModel",docs:"https://docs.noodl.net/nodes/data/object/create-new-object",displayNodeName:"Create New Object",inputs:{new:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleNew()}}},outputs:{created:{type:"signal",displayName:"Done",group:"Events"}},methods:{scheduleNew(){this.hasScheduledNew||(this.hasScheduledNew=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledNew=!1;const e=(this.nodeScope.modelScope||Model).get();this._pushInputValues(e),this.setModel(e),this.sendSignalOnOutput("created")}))}}}};addBaseInfo(NewModelNodeDefinition),addModelId(NewModelNodeDefinition,{includeOutputs:!0}),addInputProperties(NewModelNodeDefinition);const CloudFileNode={name:"Cloud File",docs:"https://docs.noodl.net/nodes/data/cloud-data/cloud-file",category:"Cloud Services",color:"data",getInspectInfo(){return this._internal.cloudFile&&this._internal.cloudFile.getUrl()},outputs:{url:{type:"string",displayName:"URL",group:"General",get(){return this._internal.cloudFile&&this._internal.cloudFile.getUrl()}},name:{type:"string",displayName:"Name",group:"General",get(){if(!this._internal.cloudFile)return;const e=this._internal.cloudFile.getName().split("_");return e.length===1?e[0]:e.slice(1).join("_")}}},inputs:{file:{type:"cloudfile",displayName:"Cloud File",group:"General",set(e){e instanceof CloudFile&&(this._internal.cloudFile=e,this.flagOutputDirty("name"),this.flagOutputDirty("url"))}}}},CloudFileNode$1={node:CloudFileNode},$=class{constructor(){this.cacheDuration=15*60*1e3}_makeRequest(t,n){if(typeof _noodl_cloud_runtime_version>"u"){var o=new XMLHttpRequest;o.onreadystatechange=function(){if(o.readyState===4){var l;try{l=JSON.parse(o.response)}catch{}o.status===200||o.status===201?n.success(l):n.error(l||{error:o.responseText,status:o.status})}};const r=Runtime.instance.getMetaData("cloudservices"),s=r.appId,a=r.endpoint;o.open("GET",a+t,!0),o.setRequestHeader("X-Parse-Application-Id",s),o.send()}else{const r=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.endpoint:this.endpoint,s=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.appId:this.appId,a=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.masterKey:void 0;fetch(r+t,{method:"GET",headers:{"X-Parse-Application-Id":s,"X-Parse-Master-Key":a}}).then(l=>{l.status===200||l.status===201?l.json().then(u=>n.success(u)).catch(u=>n.error({error:"Config: Failed to get json result."})):l.json().then(u=>n.error(u)).catch(u=>n.error({error:"Failed to fetch."}))}).catch(l=>{n.error({error:l.message})})}}_getConfig(){return new Promise((t,n)=>{this._makeRequest("/config",{success:o=>{t(o.params||{})},error:o=>{n(o)}})})}async getConfig(){return this.configCachePending?this.configCachePending:this.configCache?(Date.now()>this.ttl&&this._getConfig().then(t=>{this.configCache=t,this.ttl=Date.now()+this.cacheDuration}),this.configCache):(this.configCachePending=this._getConfig(),this.configCache=await this.configCachePending,delete this.configCachePending,this.ttl=Date.now()+this.cacheDuration,this.configCache)}clearCache(){delete this.configCache}};$.instance=new $;let ConfigService=$;var ConfigNodeDefinition={name:"DbConfig",docs:"https://docs.noodl.net/nodes/data/cloud-data/config",displayNodeName:"Config",category:"Cloud Services",usePortAsLabel:"configKey",color:"data",initialize(){var e=this._internal;ConfigService.instance.getConfig().then(t=>{e.config=t,this.hasOutput("value")&&this.flagOutputDirty("value")})},getInspectInfo(){const e=this.getValue();return e===void 0?"[No Value]":[{type:"value",value:e}]},inputs:{},outputs:{},methods:{getValue(){const e=this._internal;if(e.useDevValue&&this.context.editorConnection&&this.context.editorConnection.isRunningLocally())return e.devValue;if(e.config!==void 0&&e.configKey!==void 0)return e.config[e.configKey]},setInternal(e,t){this._internal[e]=t,this.hasOutput("value")&&this.flagOutputDirty("value")},registerOutputIfNeeded(e){if(!this.hasOutput(e)&&e==="value")return this.registerOutput(e,{getter:this.getValue.bind(this)})},registerInputIfNeeded(e){if(!this.hasInput(e)&&(e==="configKey"||e==="useDevValue"||e==="devValue"))return this.registerInput(e,{set:this.setInternal.bind(this,e)})}}};const DbConfig={node:ConfigNodeDefinition,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(r){var s=[];e.editorConnection.clearWarning(r.component.name,r.id,"dbconfig-warning");const a=t.getMetaData("dbConfigSchema");let l;if(a){const u=typeof _noodl_cloud_runtime_version<"u";s.push({name:"configKey",displayName:"Parameter",group:"General",type:{name:"enum",enums:Object.keys(a).filter(d=>u||!a[d].masterKeyOnly).map(d=>({value:d,label:d})),allowEditOnly:!0},plug:"input"}),r.parameters.configKey!==void 0&&a&&a[r.parameters.configKey]?(l=a[r.parameters.configKey].type,(l==="string"||l==="boolean"||l==="number"||l==="object"||l==="array")&&(s.push({name:"useDevValue",displayName:"Enable",group:"Local Override",type:"boolean",default:!1,plug:"input"}),r.parameters.useDevValue===!0&&s.push({name:"devValue",displayName:"Value",group:"Local Override",type:l,plug:"input"}))):r.parameters.configKey!==void 0&&e.editorConnection.sendWarning(r.component.name,r.id,"dbconfig-warning",{showGlobally:!0,message:r.parameters.configKey+" config parameter is missing, add it to your cloud service."})}else e.editorConnection.sendWarning(r.component.name,r.id,"dbconfig-warning",{showGlobally:!0,message:"You need an active cloud service."});s.push({name:"value",displayName:"Value",group:"General",type:l||"*",plug:"output"}),e.editorConnection.sendDynamicPorts(r.id,s)}function o(r){n(r),r.on("parameterUpdated",function(s){n(r)}),t.on("metadataChanged.dbConfigSchema",function(s){ConfigService.instance.clearCache(),n(r)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.DbConfig",function(r){o(r)});for(const r of t.getNodesWithType("DbConfig"))o(r)})}};function createDefinition(e){return{name:e.name,docs:e.docs,shortDesc:e.shortDesc,nodeDoubleClickAction:e.nodeDoubleClickAction,category:"Variables",initialize(){this._internal.currentValue=e.startValue,this._internal.latestValue=0},getInspectInfo(){return[{type:e.type.name==="color"?"color":"text",value:this._internal.currentValue}]},inputs:{value:{type:e.type,displayName:"Value",default:e.startValue,set(t){this.isInputConnected("saveValue")===!1?this.setValueTo(t):this._internal.latestValue=t}},saveValue:{displayName:"Set",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(function(){this.setValueTo(this._internal.latestValue),this.sendSignalOnOutput("stored")})}}},outputs:{savedValue:{type:e.type.name,displayName:"Value",getter(){return this._internal.currentValue}},changed:{type:"signal",displayName:"Changed"},stored:{type:"signal",displayName:"Stored"}},prototypeExtensions:{setValueTo(t){t=e.cast(t);const n=this._internal.currentValue!==t;this._internal.currentValue=t,n&&(this.flagOutputDirty("savedValue"),this.sendSignalOnOutput("changed"),e.onChanged&&e.onChanged.call(this))}}}}const NumberNode=createDefinition({name:"Number",docs:"https://docs.noodl.net/nodes/data/number",startValue:0,nodeDoubleClickAction:{focusPort:"value"},type:{name:"number"},cast(e){return Number(e)}}),NumberVar={node:NumberNode},StringNode=createDefinition({name:"String",docs:"https://docs.noodl.net/nodes/data/string",shortDesc:"Contains a string (text).",startValue:"",nodeDoubleClickAction:{focusPort:"value"},type:{name:"string"},cast(e){return String(e)},onChanged(){this.flagOutputDirty("length")}});extend$4(StringNode,{usePortAsLabel:"value",portLabelTruncationMode:"length",outputs:{length:{type:"number",displayName:"Length",getter(){return this._internal.currentValue.length}}}});const StringVar={node:StringNode},BooleanNode=createDefinition({name:"Boolean",docs:"https://docs.noodl.net/nodes/data/boolean",startValue:!1,type:{name:"boolean"},cast(e){return!!e}}),BooleanVar={node:BooleanNode},ConditionNode={name:"Condition",docs:"https://docs.noodl.net/nodes/utilities/logic/condition",category:"Logic",initialize(){},getInspectInfo(){const e=this.getInputValue("condition");let t;return e===void 0&&(t="[No input]"),t=e,[{type:"value",value:t}]},inputs:{condition:{type:"boolean",displayName:"Condition",group:"General",set(e){this.isInputConnected("eval")||this.scheduleEvaluate()}},eval:{type:"signal",displayName:"Evaluate",group:"Actions",valueChangedToTrue(){this.scheduleEvaluate()}}},outputs:{ontrue:{type:"signal",displayName:"On True",group:"Events"},onfalse:{type:"signal",displayName:"On False",group:"Events"},result:{type:"boolean",displayName:"Is True",group:"Booleans",get(){return!!this.getInputValue("condition")}},isfalse:{type:"boolean",displayName:"Is False",group:"Booleans",get(){return!this.getInputValue("condition")}}},methods:{scheduleEvaluate(){this.scheduleAfterInputsHaveUpdated(()=>{this.flagOutputDirty("result"),this.flagOutputDirty("isfalse");const e=this.getInputValue("condition");this.sendSignalOnOutput(e?"ontrue":"onfalse")})}}},Condition={node:ConditionNode},AndNode={name:"And",docs:"https://docs.noodl.net/nodes/logic/and",category:"Logic",initialize(){this._internal.inputs=[]},getInspectInfo(){return and(this._internal.inputs)},numberedInputs:{input:{displayPrefix:"Input",type:"boolean",createSetter(e){return function(t){if(t=!!t,this._internal.inputs[e]===t)return;this._internal.inputs[e]=t;const n=and(this._internal.inputs);this._internal.result!==n&&(this._internal.result=n,this.flagOutputDirty("result"))}}}},outputs:{result:{type:"boolean",displayName:"Result",get(){return this._internal.result}}}},And={node:AndNode};function and(e){return e.length>0&&e.some(t=>!t)===!1}const OrNode={name:"Or",docs:"https://docs.noodl.net/nodes/logic/or",category:"Logic",initialize(){this._internal.inputs=[]},getInspectInfo(){return this._internal.inputs.some(isTrue)},numberedInputs:{input:{type:"boolean",displayPrefix:"Input",createSetter(e){return function(t){this._internal.inputs[e]!==t&&(this._internal.inputs[e]=t,this.flagOutputDirty("result"))}}}},outputs:{result:{type:"boolean",displayName:"Result",getter(){return this._internal.inputs.some(isTrue)}}}},Or={node:OrNode};function isTrue(e){return!!e}const BooleanToStringNode={name:"Boolean To String",docs:"https://docs.noodl.net/nodes/utilities/boolean-to-string",category:"Utilities",initialize(){this._internal.inputs=[],this._internal.currentSelectedIndex=0,this._internal.indexChanged=!1,this._internal.trueString="",this._internal.falseString=""},inputs:{trueString:{displayName:"String for true",type:"string",set(e){this._internal.trueString!==e&&(this._internal.trueString=e,this._internal.currentInput&&this.flagOutputDirty("currentValue"))}},falseString:{displayName:"String for false",type:"string",set(e){this._internal.falseString!==e&&(this._internal.falseString=e,this._internal.currentInput||this.flagOutputDirty("currentValue"))}},input:{type:{name:"boolean"},displayName:"Selector",set(e){this._internal.currentInput!==e&&(this._internal.currentInput=e,this.flagOutputDirty("currentValue"),this.sendSignalOnOutput("inputChanged"))}}},outputs:{currentValue:{type:"string",displayName:"Current Value",group:"Value",getter(){return this._internal.currentInput?this._internal.trueString:this._internal.falseString}},inputChanged:{type:"signal",displayName:"Selector Changed",group:"Signals"}}},BooleanToString={node:BooleanToStringNode},DateToStringNode={name:"Date To String",docs:"https://docs.noodl.net/nodes/utilities/date-to-string",category:"Utilities",initialize(){this._internal.formatString="{year}-{month}-{date}"},inputs:{formatString:{displayName:"Format",type:"string",default:"{year}-{month}-{date}",set(e){this._internal.formatString!==e&&(this._internal.formatString=e,this._internal.currentInput!==void 0&&(this._format(),this.flagOutputDirty("currentValue")))}},input:{type:{name:"date"},displayName:"Date",set(e){const t=typeof e=="string"?new Date(e):e;this._internal.currentInput!==t&&(this._internal.currentInput=t,this._format())}}},outputs:{currentValue:{type:"string",displayName:"Date String",group:"Value",getter(){return this._internal.dateString}},inputChanged:{type:"signal",displayName:"Date Changed",group:"Signals"},onError:{type:"signal",displayName:"Invalid Date",group:"Signals"}},methods:{_format(){try{const e=this._internal.currentInput,t=this._internal.formatString,n=("0"+e.getDate()).slice(-2),o=("0"+(e.getMonth()+1)).slice(-2),r=new Intl.DateTimeFormat("en-US",{month:"short"}).format(e),s=e.getFullYear(),a=s.toString().substring(2),l=("0"+e.getHours()).slice(-2),u=("0"+e.getMinutes()).slice(-2),d=("0"+e.getSeconds()).slice(-2);this._internal.dateString=t.replace(/\{date\}/g,n).replace(/\{month\}/g,o).replace(/\{monthShort\}/g,r).replace(/\{year\}/g,s).replace(/\{yearShort\}/g,a).replace(/\{hours\}/g,l).replace(/\{minutes\}/g,u).replace(/\{seconds\}/g,d)}catch{this._internal.dateString="",this.flagOutputDirty("onError")}this.flagOutputDirty("currentValue"),this.sendSignalOnOutput("inputChanged")}}},DateToString={node:DateToStringNode},StringMapperNode={name:"String Mapper",docs:"https://docs.noodl.net/nodes/string-manipulation/string-mapper",category:"Utilities",initialize(){this._internal.inputs=[],this._internal.mappings=[]},getInspectInfo(){return this._internal.mappedString},numberedInputs:{input:{type:"string",displayPrefix:"Input",group:"Inputs",index:10,createSetter(e){return function(t){t=t===void 0?"":t.toString(),this._internal.inputs[e]=t,this.scheduleMapping()}}},output:{type:"string",displayPrefix:"Mapping",index:1001,group:"Mappings",createSetter(e){return function(t){t=t===void 0?"":t.toString(),this._internal.mappings[e]=t,this.scheduleMapping()}}}},inputs:{inputString:{type:{name:"string"},index:1,displayName:"Input String",set(e){this._internal.currentInputString=e!==void 0?e.toString():void 0,this.scheduleMapping()}},defaultMapping:{type:"string",displayName:"Default",index:1e3,group:"Mappings",set(e){this._internal.defaultMapping=e,this.scheduleMapping()}}},outputs:{mappedString:{type:"string",displayName:"Mapped String",group:"Value",getter(){return this._internal.mappedString}}},prototypeExtensions:{doMapping(){this._internal.hasScheduledFetch=!1;var e=this._internal.inputs.indexOf(this._internal.currentInputString);e!==-1?this._internal.mappedString=this._internal.mappings[e]:this._internal.mappedString=this._internal.defaultMapping,this.flagOutputDirty("mappedString")},scheduleMapping(){var e=this._internal;e.hasScheduledFetch||(e.hasScheduledFetch=!0,this.scheduleAfterInputsHaveUpdated(this.doMapping.bind(this)))}}},StringMapper={node:StringMapperNode};function invert(e){if(e!==void 0)return!e}const InverterNode={name:"Inverter",docs:"https://docs.noodl.net/nodes/logic/inverter",category:"Logic",initialize(){this._internal.currentValue=void 0},getInspectInfo(){return String(invert(this._internal.currentValue))},inputs:{value:{type:{name:"boolean"},displayName:"Value",set(e){this._internal.currentValue=e,this.flagOutputDirty("result")}}},outputs:{result:{type:"boolean",displayName:"Result",getter(){return invert(this._internal.currentValue)}}}},Inverter={node:InverterNode},SubStringNode={name:"Substring",docs:"https://docs.noodl.net/nodes/string-manipulation/substring",category:"String Manipulation",initialize(){var e=this._internal;e.startIndex=0,e.endIndex=-1,e.cachedResult="",e.inputString="",e.resultDirty=!1},inputs:{start:{type:"number",displayName:"Start",default:0,set(e){this._internal.startIndex=e,this._internal.resultDirty=!0,this.flagOutputDirty("result")}},end:{type:"number",displayName:"End",default:0,set(e){this._internal.endIndex=e,this._internal.resultDirty=!0,this.flagOutputDirty("result")}},string:{type:{name:"string"},displayName:"String",default:"",set(e){e=e.toString(),this._internal.inputString=e,this._internal.resultDirty=!0,this.flagOutputDirty("result")}}},outputs:{result:{type:"string",displayName:"Result",getter(){var e=this._internal;return e.resultDirty&&(e.endIndex===-1?e.cachedResult=e.inputString.substr(e.startIndex):e.cachedResult=e.inputString.substr(e.startIndex,e.endIndex-e.startIndex),e.resultDirty=!1),e.cachedResult}}}},Substring={node:SubStringNode},StringFormatDefinition={name:"String Format",docs:"https://docs.noodl.net/nodes/string-manipulation/string-format",category:"String Manipulation",usePortAsLabel:"format",portLabelTruncationMode:"length",initialize(){const e=this._internal;e.format="",e.cachedResult="",e.resultDirty=!1,e.inputValues={}},getInspectInfo(){return this.formatValue()},inputs:{format:{type:{name:"string",multiline:!0},displayName:"Format",set(e){this._internal.format!==e&&(this._internal.format=e,this._internal.resultDirty=!0,this.scheduleFormat())}}},outputs:{formatted:{type:"string",displayName:"Formatted",get(){return this.formatValue()}}},methods:{formatValue(){var e=this._internal;if(e.resultDirty){var t=e.format,n=e.format.match(/\{[A-Za-z0-9_]*\}/g),o=[];n&&(o=n.map(function(r){return r.replace("{","").replace("}","")})),o.forEach(function(r){var s=e.inputValues[r];t=t.replace("{"+r+"}",s!==void 0?s:"")}),e.cachedResult=t,e.resultDirty=!1}return e.cachedResult},registerInputIfNeeded(e){this.hasInput(e)||this.registerInput(e,{set:userInputSetter$5.bind(this,e)})},scheduleFormat(){this.formatScheduled||(this.formatScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.formatValue(),this.flagOutputDirty("formatted"),this.formatScheduled=!1}))}}};function userInputSetter$5(e,t){this._internal.inputValues[e]!==t&&(this._internal.inputValues[e]=t,this._internal.resultDirty=!0,this.scheduleFormat())}function updatePorts$2$1(e,t,n){var o=t.match(/\{[A-Za-z0-9_]*\}/g)||[],r=o.map(function(a){return a.replace("{","").replace("}","")}),s=r.filter(function(a,l,u){return u.indexOf(a)===l}).map(function(a){return{name:a,type:"string",plug:"input"}});n.sendDynamicPorts(e,s)}const StringFormat={node:StringFormatDefinition,setup(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.String Format",function(n){n.parameters.format&&updatePorts$2$1(n.id,n.parameters.format,e.editorConnection),n.on("parameterUpdated",function(o){o.name==="format"&&updatePorts$2$1(n.id,n.parameters.format,e.editorConnection)})})}},CounterNode={name:"Counter",docs:"https://docs.noodl.net/nodes/math/counter",category:"Math",initialize(){this._internal.currentValue=0,this._internal.startValue=0,this._internal.startValueSet=!1,this._internal.limitsEnabled=!1,this._internal.limitsMin=0,this._internal.limitsMax=0},getInspectInfo(){return"Count: "+this._internal.currentValue},inputs:{increase:{group:"Actions",displayName:"Increase Count",valueChangedToTrue(){this._internal.limitsEnabled&&this._internal.currentValue>=this._internal.limitsMax||(this._internal.currentValue++,this.flagOutputDirty("currentCount"),this.sendSignalOnOutput("countChanged"))}},decrease:{group:"Actions",displayName:"Decrease Count",valueChangedToTrue(){this._internal.limitsEnabled&&this._internal.currentValue<=this._internal.limitsMin||(this._internal.currentValue--,this.flagOutputDirty("currentCount"),this.sendSignalOnOutput("countChanged"))}},reset:{group:"Actions",displayName:"Reset To Start",valueChangedToTrue(){this.currentValue!==0&&(this._internal.currentValue=this._internal.startValue,this.flagOutputDirty("currentCount"),this.sendSignalOnOutput("countChanged"))}},startValue:{type:"number",displayName:"Start Value",default:0,set(e){this._internal.startValue=Number(e),this._internal.startValueSet===!1&&(this._internal.startValueSet=!0,this._internal.currentValue=this._internal.startValue,this.flagOutputDirty("currentCount"),this.sendSignalOnOutput("countChanged"))}},limitsMin:{type:{name:"number"},displayName:"Min Value",group:"Limits",default:0,set(e){this._internal.limitsMin=Number(e)}},limitsMax:{type:{name:"number"},displayName:"Max Value",group:"Limits",default:0,set(e){this._internal.limitsMax=Number(e)}},limitsEnabled:{type:{name:"boolean"},displayName:"Limits Enabled",group:"Limits",default:!1,set(e){this._internal.limitsEnabled=!!e}}},outputs:{currentCount:{displayName:"Current Count",type:"number",getter(){return this._internal.currentValue}},countChanged:{displayName:"Count Changed",type:"signal"}}},Counter={node:CounterNode},UniqueIdNode={name:"Unique Id",docs:"https://docs.noodl.net/nodes/utilities/unique-id",category:"String Manipulation",initialize(){var e=this._internal;e.guid=Model.guid()},getInspectInfo(){return this._internal.guid},inputs:{new:{displayName:"New",valueChangedToTrue(){var e=this._internal;e.guid=Model.guid(),this.flagOutputDirty("guid")}}},outputs:{guid:{type:"string",displayName:"Id",getter(){var e=this._internal;return e.guid}}},prototypeExtensions:{}},UniqueId={node:UniqueIdNode},SetUserPropertiesNodeDefinition={name:"net.noodl.user.SetUserProperties",docs:"https://docs.noodl.net/nodes/data/user/set-user-properties",displayNodeName:"Set User Properties",category:"Cloud Services",color:"data",initialize(){var e=this._internal;e.userProperties={}},getInspectInfo(){},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleStore()}},email:{displayName:"Email",type:"string",group:"General",set(e){this._internal.email=e}},username:{displayName:"Username",type:"string",group:"General",set(e){this._internal.username=e}}},methods:{setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-set-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-set-warning")},scheduleStore(){const e=this._internal;this.storeScheduled!==!0&&(this.storeScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.storeScheduled=!1,Runtime.Services.UserService.forScope(this.nodeScope.modelScope).setUserProperties({email:this._internal.email,username:this._internal.username,properties:e.userProperties,success:()=>{this.sendSignalOnOutput("success")},error:t=>{this.setError(t)}})}))},setUserProperty(e,t){this._internal.userProperties[e]=t},registerInputIfNeeded(e){if(!this.hasInput(e)&&e.startsWith("prop-"))return this.registerInput(e,{set:this.setUserProperty.bind(this,e.substring(5))})}}};function updatePorts$1$1(e,t,n,o){var r=[];if(o){var s=o.find(d=>d.name==="_User");if(s&&s.schema&&s.schema.properties){var a=s.schema.properties;const d=typeof _noodl_cloud_runtime_version>"u"?["authData","createdAt","updatedAt","email","username","emailVerified","password"]:["authData","createdAt","updatedAt","email","username"];for(var l in a)if(d.indexOf(l)===-1){var u=a[l];if(!r.find(p=>p.name===l)&&u.type!=="Relation"){const p={String:"string",Boolean:"boolean",Number:"number",Date:"date"};r.push({type:{name:p[u.type]?p[u.type]:"*"},plug:"input",group:"Properties",name:"prop-"+l,displayName:l})}}}}n.sendDynamicPorts(e,r)}const SetUserProperties={node:SetUserPropertiesNodeDefinition,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$1$1(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections")),o.on("parameterUpdated",function(r){updatePorts$1$1(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections"))}),t.on("metadataChanged.systemCollections",function(r){updatePorts$1$1(o.id,o.parameters,e.editorConnection,r)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.net.noodl.user.SetUserProperties",function(o){n(o)});for(const o of t.getNodesWithType("net.noodl.user.SetUserProperties"))n(o)})}};var UserNodeDefinition={name:"net.noodl.user.User",docs:"https://docs.noodl.net/nodes/data/user/user-node",displayNodeName:"User",category:"Cloud Services",color:"data",initialize(){var e=this;this._internal.onModelChangedCallback=function(n){e.isInputConnected("fetch")||(e.hasOutput("prop-"+n.name)&&e.flagOutputDirty("prop-"+n.name),e.hasOutput("changed-"+n.name)&&e.sendSignalOnOutput("changed-"+n.name),e.sendSignalOnOutput("changed"))};const t=Runtime.Services.UserService.forScope(this.nodeScope.modelScope);this.setUserModel(t.current),t.on("loggedIn",()=>{this.setUserModel(t.current),this.hasOutput("loggedIn")&&this.sendSignalOnOutput("loggedIn")}),t.on("sessionGained",()=>{this.setUserModel(t.current)}),t.on("loggedOut",()=>{this.setUserModel(void 0),this.hasOutput("loggedOut")&&this.sendSignalOnOutput("loggedOut")}),t.on("sessionLost",()=>{this.setUserModel(void 0),this.hasOutput("sessionLost")&&this.sendSignalOnOutput("sessionLost")})},getInspectInfo(){const e=this._internal.model;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:this._internal.model.data}]:"[No Model]"},outputs:{id:{type:"string",displayName:"Id",group:"General",getter(){return this._internal.model!==void 0?this._internal.model.getId():void 0}},fetched:{type:"signal",displayName:"Fetched",group:"Events"},changed:{type:"signal",displayName:"Changed",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}},username:{type:"string",displayName:"Username",group:"General",getter(){return this._internal.model!==void 0?this._internal.model.get("username"):void 0}},email:{type:"string",displayName:"Email",group:"General",getter(){return this._internal.model!==void 0?this._internal.model.get("email"):void 0}},authenticated:{type:"boolean",displayName:"Authenticated",group:"General",getter(){return this._internal.model!==void 0}}},inputs:{fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleFetch()}}},methods:{_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},scheduleOnce(e,t){const n=this,o="hasScheduled"+e;this._internal[o]||(this._internal[o]=!0,this.scheduleAfterInputsHaveUpdated(function(){n._internal[o]=!1,t()}))},setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-warning")},setUserModel(e){const t=this._internal;if(t.model!==e&&(t.model&&t.model.off("change",t.onModelChangedCallback),t.model=e,e&&e.on("change",t.onModelChangedCallback)),this.flagOutputDirty("id"),this.flagOutputDirty("authenticated"),this.flagOutputDirty("email"),this.flagOutputDirty("username"),e)for(var n in e.data)this.hasOutput("prop-"+n)&&this.flagOutputDirty("prop-"+n)},scheduleFetch(){this._internal,this.scheduleOnce("Fetch",()=>{const e=Runtime.Services.UserService.forScope(this.nodeScope.modelScope);e.fetchCurrentUser({success:t=>{this.setUserModel(e.current),this.sendSignalOnOutput("fetched")},error:t=>{this.setError(t||"Failed to fetch.")}})})},registerOutputIfNeeded(e){if(!this.hasOutput(e)){if(e==="loggedOut"||e==="loggedIn"||e==="sessionLost"){this.registerOutput(e,{getter:()=>{}});return}e.startsWith("prop-")&&this.registerOutput(e,{getter:this.getUserProperty.bind(this,e.substring(5))})}},getUserProperty(e){return this._internal.model!==void 0?this._internal.model.get(e):void 0}}};function updatePorts$b(e,t,n,o){var r=[];if(o){var s=o.find(d=>d.name==="_User");if(s&&s.schema&&s.schema.properties){var a=s.schema.properties;const d=["authData","password","username","email"];for(var l in a)if(d.indexOf(l)===-1){var u=a[l];if(!r.find(p=>p.name===l)&&u.type!=="Relation"){const p={String:"string",Boolean:"boolean",Number:"number",Date:"date"};r.push({type:{name:p[u.type]?p[u.type]:"*"},plug:"output",group:"Properties",name:"prop-"+l,displayName:l}),r.push({type:"signal",plug:"output",group:"Changed Events",displayName:l+" Changed",name:"changed-"+l})}}}}typeof _noodl_cloud_runtime_version>"u"&&(r.push({plug:"output",name:"loggedIn",type:"signal",displayName:"Logged In",group:"Events"}),r.push({plug:"output",name:"loggedOut",type:"signal",displayName:"Logged Out",group:"Events"}),r.push({plug:"output",name:"sessionLost",type:"signal",displayName:"Session Lost",group:"Events"})),n.sendDynamicPorts(e,r)}const User={node:UserNodeDefinition,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$b(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections")),o.on("parameterUpdated",function(r){updatePorts$b(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections"))}),t.on("metadataChanged.systemCollections",function(r){updatePorts$b(o.id,o.parameters,e.editorConnection,r)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.net.noodl.user.User",function(o){n(o)});for(const o of t.getNodesWithType("net.noodl.user.User"))n(o)})}};function registerNodes$1(e){[ComponentInputs,ComponentOutputs,RunTasks,RestNode$1,Expression,SimpleJavaScript,DbCollectionNode2,DbModelNode2,SetDbModelPropertiedNodeDefinition,DeleteDbModelPropertiedNodeDefinition,NewDbModelPropertiedNodeDefinition,AddDbModelRelationNodeDefinition$1,AddDbModelRelationNodeDefinition,FilterDbModelsNode,ModelNode2,SetModelPropertiedNodeDefinition,NewModelNodeDefinition,CloudFileNode$1,DbConfig,NumberVar,StringVar,BooleanVar,Condition,And,Or,BooleanToString,DateToString,StringMapper,Inverter,Substring,StringFormat,Counter,UniqueId,SetUserProperties,User].forEach(t=>e.registerNode(t))}function Runtime(e){if(e=e||{},e.platform=e.platform||{},Runtime.instance=this,this.type=e.type||"browser",this.noodlModules=[],this.eventEmitter=new EventEmitter$2,this.updateScheduled=!1,this.rootComponent=null,this._currentLoadedData=null,this.isWaitingForExport=!0,this.graphModel=new GraphModel,this.errorHandlers=[],this.frameNumber=0,this.dontCreateRootComponent=!!e.dontCreateRootComponent,this.componentFilter=e.componentFilter,this.runningInEditor=!e.runDeployed,this.platform={requestUpdate:e.platform.requestUpdate,getCurrentTime:e.platform.getCurrentTime,webSocketOptions:e.platform.webSocketOptions,objectToString:e.platform.objectToString},!e.platform.requestUpdate)throw new Error("platform.requestUpdate must be set");if(!e.platform.getCurrentTime)throw new Error("platform.getCurrentTime must be set");this.editorConnection=new EditorConnection({platform:e.platform,runtimeType:this.type}),this.context=new NodeContext({runningInEditor:!e.runDeployed,editorConnection:this.editorConnection,platform:this.platform,graphModel:this.graphModel}),this.context.eventEmitter.on("scheduleUpdate",this.scheduleUpdate.bind(this)),e.runDeployed||this._setupEditorCommunication(e),this.registerGraphModelListeners(),registerNodes$1(this)}Runtime.prototype.prefetchBundles=async function(e,t){await asyncPool(t,e,async n=>{await this.context.fetchComponentBundle(n)})},Runtime.prototype._setupEditorCommunication=function(e){function t(n,o){if(n==null||o===null||o===void 0)return n===o;if(n===o)return!0;if(Array.isArray(n)&&n.length!==o.length||!(n instanceof Object)||!(o instanceof Object))return!1;var r=Object.keys(n);return Object.keys(o).every(function(s){return r.indexOf(s)!==-1})&&r.every(function(s){return t(n[s],o[s])})}this.editorConnection.on("exportDataFull",async n=>{if(this.graphModel.isEmpty()===!1){this.reload();return}if(this.isWaitingForExport=!1,t(this._currentLoadedData,n)===!1){if(this.componentFilter&&(n.components=n.components.filter(o=>this.componentFilter(o))),await this.setData(n),n.componentIndex){const o=Object.keys(n.componentIndex);await this.prefetchBundles(o,2)}this.graphModel.emit("editorImportComplete")}}),this.editorConnection.on("reload",this.reload.bind(this)),this.editorConnection.on("modelUpdate",this.onModelUpdateReceived.bind(this)),this.editorConnection.on("metadataUpdate",this.onMetaDataUpdateReceived.bind(this)),this.editorConnection.on("connected",()=>{this.sendNodeLibrary()})},Runtime.prototype.setDebugInspectorsEnabled=function(e){this.context.setDebugInspectorsEnabled(e)},Runtime.prototype.registerModule=function(e){if(e.nodes)for(let t of e.nodes)t.node||(t={node:t}),t.node.module=e.name||"Unknown Module",this.registerNode(t);this.noodlModules.push(e)},Runtime.prototype.registerGraphModelListeners=function(){var e=this;this.graphModel.on("componentAdded",function(t){e.context.registerComponentModel(t)},this),this.graphModel.on("componentRemoved",function(t){e.context.deregisterComponentModel(t)},this)},Runtime.prototype.reload=function(){location.reload()},Runtime.prototype.registerNode=function(e){if(e.node){const t=defineNode(e.node);this.context.nodeRegister.register(t),t.setupNumberedInputDynamicPorts&&t.setupNumberedInputDynamicPorts(this.context,this.graphModel)}else this.context.nodeRegister.register(e);e.setup&&e.setup(this.context,this.graphModel)},Runtime.prototype._setRootComponent=async function(e){this.rootComponent&&this.rootComponent.name===e||(this.rootComponent&&(this.rootComponent.model&&this.rootComponent.model.removeListenersWithRef(this),this.rootComponent=void 0),e&&(this.rootComponent=await this.context.createComponentInstanceNode(e,"rootComponent"),this.rootComponent.componentModel.on("rootAdded",()=>this.eventEmitter.emit("rootComponentUpdated"),this),this.rootComponent.componentModel.on("rootRemoved",()=>this.eventEmitter.emit("rootComponentUpdated"),this),this.context.setRootComponent(this.rootComponent)),this.eventEmitter.emit("rootComponentUpdated"))},Runtime.prototype.setData=async function(e){if(!this._disableLoad){this._currentLoadedData=e,await this.graphModel.importEditorData(e);for(const t of this.noodlModules)typeof t.setup=="function"&&t.setup.apply(t);this.dontCreateRootComponent!==!0&&(await this._setRootComponent(this.graphModel.rootComponent),this.graphModel.on("rootComponentNameUpdated",t=>{this._setRootComponent(t)}),this.graphModel.on("componentRemoved",t=>{this.rootComponent&&this.rootComponent.name===t.name&&this._setRootComponent(null)}),this.graphModel.on("componentAdded",t=>{setTimeout(()=>{!this.rootComponent&&this.graphModel.rootComponent===t.name&&this._setRootComponent(t.name)},1)})),this.scheduleUpdate()}},Runtime.prototype.scheduleUpdate=function(){this.updateScheduled||(this.updateScheduled=!0,this.platform.requestUpdate(Runtime.prototype._doUpdate.bind(this)))},Runtime.prototype._doUpdate=function(){this.updateScheduled=!1,this.context.currentFrameTime=this.platform.getCurrentTime(),this.context.eventEmitter.emit("frameStart"),this.context.update(),this.context.eventEmitter.emit("frameEnd"),this.frameNumber++},Runtime.prototype.setProjectSettings=function(e){this.projectSettings=e},Runtime.prototype.getNodeLibrary=function(){var e=generateProjectSettings(this.graphModel.getSettings(),this.noodlModules);this.projectSettings&&(this.projectSettings.ports&&(e.ports=e.ports.concat(this.projectSettings.ports)),this.projectSettings.dynamicports&&(e.dynamicports=e.ports.concat(this.projectSettings.dynamicports)));var t=generateNodeLibrary(this.context.nodeRegister);return t.projectsettings=e,JSON.stringify(t,null,3)},Runtime.prototype.sendNodeLibrary=function(){const e=this.getNodeLibrary();this.lastSentNodeLibrary!==e&&(this.lastSentNodeLibrary=e,this.editorConnection.sendNodeLibrary(e))},Runtime.prototype.connectToEditor=function(e){this.editorConnection.connect(e)},Runtime.prototype.onMetaDataUpdateReceived=function(e){this.graphModel.isEmpty()||EditorMetaDataEventsHandler.handleEvent(this.context,this.graphModel,e)},Runtime.prototype.onModelUpdateReceived=async function(e){this.isWaitingForExport||(e.type==="projectInstanceChanged"?this.reload():this.graphModel.isEmpty()===!1&&await handleEvent(this.context,this.graphModel,e))},Runtime.prototype.addErrorHandler=function(e){this.errorHandlers.push(e)},Runtime.prototype.reportError=function(e){this.errorHandlers.forEach(function(t){t(e)})},Runtime.prototype.getProjectSettings=function(){return this.graphModel.getSettings()},Runtime.prototype.getMetaData=function(e){return this.graphModel.getMetaData(e)},Runtime.Services=Services,Runtime.Node=Node,Runtime.NodeDefinition={defineNode},Runtime.EdgeTriggeredInput=EdgeTriggeredInput;const _protectedFields={_common:["_createdAt","_updatedAt","objectId"],_User:["_email_verify_token"]};function _removeProtectedFields(e,t){const n=Object.assign({},e);return _protectedFields._common.forEach(o=>delete n[o]),t&&_protectedFields[t]&&_protectedFields[t].forEach(o=>delete n[o]),n}class CloudStore{constructor(t){this._initCloudServices(),this.events=new EventEmitter$2,this.events.setMaxListeners(1e4),this.modelScope=t,this._fromJSON=(n,o)=>CloudStore._fromJSON(n,o,t),this._deserializeJSON=(n,o)=>CloudStore._deserializeJSON(n,o,t),this._serializeObject=(n,o)=>CloudStore._serializeObject(n,o,t)}_initCloudServices(){_collections=void 0;const t=Runtime.instance.getMetaData("cloudservices");t&&(this.appId=t.appId,this.endpoint=t.endpoint);const n=Runtime.instance.getMetaData("dbVersionMajor");this.dbVersionMajor=n}on(){this.events.on.apply(this.events,arguments)}off(){this.events.off.apply(this.events,arguments)}_makeRequest(t,n){if(typeof _noodl_cloud_runtime_version>"u"){var o=new XMLHttpRequest;o.onreadystatechange=function(){if(o.readyState===4){var s;try{s=JSON.parse(o.response||o.responseText)}catch{}o.status===200||o.status===201?n.success(s):n.error(s||{error:o.responseText,status:o.status})}},o.open(n.method||"GET",this.endpoint+t,!0),o.setRequestHeader("X-Parse-Application-Id",this.appId),typeof _noodl_cloudservices<"u"&&o.setRequestHeader("X-Parse-Master-Key",_noodl_cloudservices.masterKey);var r=localStorage["Parse/"+this.appId+"/currentUser"];if(r!==void 0)try{const s=JSON.parse(r);o.setRequestHeader("X-Parse-Session-Token",s.sessionToken)}catch{}n.onUploadProgress&&(o.upload.onprogress=s=>n.onUploadProgress(s)),n.content instanceof File?o.send(n.content):(o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify(n.content)))}else{const s=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.endpoint:this.endpoint,a=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.appId:this.appId,l=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.masterKey:void 0;fetch(s+t,{method:n.method||"GET",headers:{"X-Parse-Application-Id":a,"X-Parse-Master-Key":l,"Content-Type":"application/json"},body:JSON.stringify(n.content)}).then(u=>{u.status===200||u.status===201?n.method==="DELETE"?n.success(void 0):u.json().then(d=>n.success(d)).catch(d=>n.error({error:"CloudStore: Failed to get json result."})):n.method==="DELETE"?n.error({error:"Failed to delete."}):u.json().then(d=>n.error(d)).catch(d=>n.error({error:"Failed to fetch."}))}).catch(u=>{n.error({error:u.message})})}}query(t){this._makeRequest("/classes/"+t.collection,{method:"POST",content:{_method:"GET",where:t.where,limit:t.limit,skip:t.skip,include:Array.isArray(t.include)?t.include.join(","):t.include,keys:Array.isArray(t.select)?t.select.join(","):t.select,order:Array.isArray(t.sort)?t.sort.join(","):t.sort,count:t.count},success(n){t.success(n.results,n.count)},error(){t.error()}})}aggregate(t){const n=[];if(!t.group){t.error("You need to provide group option.");return}t.limit&&n.push("limit="+t.limit),t.skip&&n.push("skip="+t.skip);const o={};Object.keys(t.group).forEach(r=>{const s={},a=t.group[r];a.avg!==void 0?s.$avg="$"+a.avg:a.sum!==void 0?s.$sum="$"+a.sum:a.max!==void 0?s.$max="$"+a.max:a.min!==void 0?s.$min="$"+a.min:a.distinct!==void 0&&(s.$addToSet="$"+a.distinct),o[r]=s}),this.dbVersionMajor&&this.dbVersionMajor>4?(o._id=null,t.where&&n.push("$match="+encodeURIComponent(JSON.stringify(t.where))),n.push("$group="+JSON.stringify(o))):(o.objectId=null,t.where&&n.push("match="+encodeURIComponent(JSON.stringify(t.where))),n.push("group="+JSON.stringify(o))),this._makeRequest("/aggregate/"+t.collection+(n.length>0?"?"+n.join("&"):""),{success(r){const s={};if(!r.results||r.results.length!==1){t.success({});return}Object.keys(t.group).forEach(a=>{s[a]=r.results[0][a]}),t.success(s)},error(){t.error()}})}count(t){const n=[];t.where&&n.push("where="+encodeURIComponent(JSON.stringify(t.where))),n.push("limit=0"),n.push("count=1"),this._makeRequest("/classes/"+t.collection+(n.length>0?"?"+n.join("&"):""),{success(o){t.success(o.count)},error(){t.error()}})}distinct(t){const n=[];t.where&&n.push("where="+encodeURIComponent(JSON.stringify(t.where))),n.push("distinct="+t.property),this._makeRequest("/aggregate/"+t.collection+(n.length>0?"?"+n.join("&"):""),{success(o){t.success(o.results)},error(){t.error()}})}fetch(t){const n=[];t.include&&n.push("include="+(Array.isArray(t.include)?t.include.join(","):t.include)),t.keys&&n.push("keys="+(Array.isArray(t.keys)?t.keys.join(","):t.keys)),t.excludeKeys&&n.push("excludeKeys="+(Array.isArray(t.excludeKeys)?t.excludeKeys.join(","):t.excludeKeys)),this._makeRequest("/classes/"+t.collection+"/"+t.objectId+(n.length>0?"?"+n.join("&"):""),{method:"GET",success:o=>{t.success(o),this.events.emit("fetch",{type:"fetch",objectId:t.objectId,object:o,collection:t.collection})},error(o){t.error(o.error)}})}create(t){this._makeRequest("/classes/"+t.collection,{method:"POST",content:Object.assign(_removeProtectedFields(_serializeObject(t.data,t.collection),t.collection),{ACL:t.acl}),success:n=>{const o=Object.assign({},t.data,n);t.success(o),this.events.emit("create",{type:"create",objectId:t.objectId,object:o,collection:t.collection})},error(n){t.error(n.error)}})}increment(t){const n={};for(let o in t.properties)n[o]={__op:"Increment",amount:t.properties[o]};this._makeRequest("/classes/"+t.collection+"/"+t.objectId,{method:"PUT",content:n,success:o=>{t.success(o)},error(o){t.error(o.error)}})}save(t){const n=Object.assign({},t.data);delete n.createdAt,delete n.updatedAt,this._makeRequest("/classes/"+t.collection+"/"+t.objectId,{method:"PUT",content:Object.assign(_removeProtectedFields(_serializeObject(n,t.collection),t.collection),{ACL:t.acl}),success:o=>{t.success(o),this.events.emit("save",{type:"save",objectId:t.objectId,object:Object.assign({},t.data,o),collection:t.collection})},error(o){t.error(o.error)}})}delete(t){this._makeRequest("/classes/"+t.collection+"/"+t.objectId,{method:"DELETE",success:()=>{t.success(),this.events.emit("delete",{type:"delete",objectId:t.objectId,collection:t.collection})},error(n){t.error(n.error)}})}addRelation(t){const n={};n[t.key]={__op:"AddRelation",objects:[{__type:"Pointer",objectId:t.targetObjectId,className:t.targetClass}]},this._makeRequest("/classes/"+t.collection+"/"+t.objectId,{method:"PUT",content:n,success(o){t.success(o)},error(o){t.error(o.error)}})}removeRelation(t){const n={};n[t.key]={__op:"RemoveRelation",objects:[{__type:"Pointer",objectId:t.targetObjectId,className:t.targetClass}]},this._makeRequest("/classes/"+t.collection+"/"+t.objectId,{method:"PUT",content:n,success(o){t.success(o)},error(o){t.error(o.error)}})}uploadFile(t){this._makeRequest("/files/"+t.file.name,{method:"POST",content:t.file,contentType:t.file.type,success:n=>t.success(Object.assign({},t.data,n)),error:n=>t.error(n),onUploadProgress:t.onUploadProgress})}deleteFile(t){this._makeRequest("/files/"+t.file.name,{method:"DELETE",success:n=>t.success(Object.assign({},t.data,n)),error:n=>t.error(n)})}}function _isArrayOfObjects(e){if(!Array.isArray(e))return!1;for(let t=0;t<e.length;t++)if(typeof e[t]!="object"||e[t]===null)return!1;return!0}function _toJSON(e){if(e instanceof Model){var t={};for(var n in e.data)t[n]=_toJSON(e.data[n]);return t}else if(e instanceof Collection){var t=[];return e.items.forEach(r=>{t.push(_toJSON(r))}),t}return e}function _serializeObject(e,t,n){if(CloudStore._collections[t])var o=CloudStore._collections[t].schema;for(var r in e){var s=o&&o.properties&&o.properties[r]?o.properties[r].type:void 0;if(!(e[r]===void 0||e[r]===null))if(s==="Pointer"&&typeof e[r]=="string")e[r]={__type:"Pointer",className:o.properties[r].targetClass,objectId:e[r]};else if(s==="Pointer"&&typeof e[r]=="object"&&(n||Model).instanceOf(e[r]))e[r]={__type:"Pointer",className:o.properties[r].targetClass,objectId:e[r].getId()};else if(s==="Date"&&(typeof e[r]=="string"||e[r]instanceof Date))e[r]={__type:"Date",iso:e[r]instanceof Date?e[r].toISOString():e[r]};else if(s==="File"&&e[r]instanceof CloudFile){const a=e[r];e[r]={__type:"File",url:a.getUrl(),name:a.getName()}}else s==="Array"&&typeof e[r]=="string"&&Collection.exists(e[r])?e[r]=_toJSON(Collection.get(e[r])):s==="Object"&&typeof e[r]=="string"&&(n||Model).exists(e[r])?e[r]=_toJSON((n||Model).get(e[r])):s==="GeoPoint"&&typeof e[r]=="object"?e[r]={__type:"GeoPoint",latitude:Number(e[r].latitude),longitude:Number(e[r].longitude)}:e[r]=_toJSON(e[r])}return e}function _deserializeJSON(e,t,n){if(e!==void 0){if(e===null)return null;if(!(t==="Relation"&&e.__type==="Relation")){if(t==="Pointer"&&e.__type==="Pointer")return e.objectId;if(t==="Date"&&e.__type==="Date")return new Date(e.iso);if(t==="Date"&&typeof e=="string")return new Date(e);if(t==="File"&&e.__type==="File")return new CloudFile(e);if(t==="GeoPoint"&&e.__type==="GeoPoint")return{latitude:e.latitude,longitude:e.longitude};if(_isArrayOfObjects(e)){const o=[];for(let s=0;s<e.length;s++)o.push(_deserializeJSON(e[s],void 0,n));const r=Collection.get();return r.set(o),r}if(Array.isArray(e))return e;if(e&&e.__type==="Object"&&e.className!==void 0&&e.objectId!==void 0){const o=Object.assign({},e);return delete o.className,delete o.__type,_fromJSON(o,e.className,n)}if(typeof e=="object"&&e!==null){const o=(n||Model).get(e.id);for(const r in e){const s=_deserializeJSON(e[r],void 0,n);o.set(r,s)}return o}return e}}}function _fromJSON(e,t,n){const o=(n||Model).get(e.objectId||e.id);o._class=t;let r;t!==void 0&&CloudStore._collections[t]!==void 0&&(r=CloudStore._collections[t].schema);for(const s in e){if(s==="objectId"||s==="ACL")continue;const a=r&&r.properties&&r.properties[s]?r.properties[s].type:void 0,l=_deserializeJSON(e[s],a,n);o.set(s,l)}return o}CloudStore._fromJSON=_fromJSON,CloudStore._deserializeJSON=_deserializeJSON,CloudStore._serializeObject=_serializeObject,CloudStore.forScope=e=>e===void 0?CloudStore.instance:(e._cloudStore||(e._cloudStore=new CloudStore(e)),e._cloudStore);var _instance$1;Object.defineProperty(CloudStore,"instance",{get(){return _instance$1===void 0&&(_instance$1=new CloudStore),_instance$1}});var _collections;Object.defineProperty(CloudStore,"_collections",{get(){return _collections===void 0&&(_collections={},(Runtime.instance.getMetaData("dbCollections")||[]).forEach(e=>{_collections[e.name]=e}),(Runtime.instance.getMetaData("systemCollections")||[]).forEach(e=>{_collections[e.name]=e})),_collections}}),CloudStore.invalidateCollections=()=>{_collections=void 0};function createRecordsAPI(e){let t;const n=()=>(t||(t=new CloudStore(e)),t);return{async query(o,r,s){if(typeof o>"u")throw new Error("'className' is undefined");return new Promise((a,l)=>{n().query({collection:o,where:convertFilterOp(r||{},{collectionName:o,error:u=>l(u),modelScope:e}),limit:s?s.limit:void 0,sort:s?s.sort:void 0,skip:s?s.skip:void 0,include:s?s.include:void 0,select:s?s.select:void 0,count:s?s.count:void 0,success:(u,d)=>{const p=u.map(f=>n()._fromJSON(f,o));a(d!==void 0?{results:p,count:d}:p)},error:u=>{l(Error(u||"Failed to query."))}})})},async count(o,r){if(typeof o>"u")throw new Error("'className' is undefined");return new Promise((s,a)=>{n().count({collection:o,where:r?convertFilterOp(r||{},{collectionName:o,error:l=>a(l),modelScope:e}):void 0,success:l=>{s(l)},error:l=>{a(Error(l||"Failed to query."))}})})},async distinct(o,r,s){if(typeof o>"u")throw new Error("'className' is undefined");return new Promise((a,l)=>{n().distinct({collection:o,property:r,where:s?convertFilterOp(s||{},{collectionName:o,error:u=>l(u),modelScope:e}):void 0,success:u=>{a(u)},error:u=>{l(Error(u||"Failed to query."))}})})},async aggregate(o,r,s){if(typeof o>"u")throw new Error("'className' is undefined");return new Promise((a,l)=>{n().aggregate({collection:o,group:r,where:s?convertFilterOp(s||{},{collectionName:o,error:u=>l(u),modelScope:e}):void 0,success:u=>{a(u)},error:u=>{l(Error(u||"Failed to aggregate."))}})})},async fetch(o,r){if(typeof o>"u")return Promise.reject(new Error("'objectOrId' is undefined."));typeof o!="string"&&(o=o.getId());const s=(r?r.className:void 0)||Model.get(o)._class;return new Promise((a,l)=>{if(!s)return l("No class name specified");n().fetch({collection:s,objectId:o,keys:r?.keys,include:r?.include,excludeKeys:r?.excludeKeys,success(u){const d=n()._fromJSON(u,s);a(d)},error(u){l(Error(u||"Failed to fetch."))}})})},async increment(o,r,s){if(typeof o>"u")return Promise.reject(new Error("'objectOrId' is undefined."));typeof o!="string"&&(o=o.getId());const a=(s?s.className:void 0)||Model.get(o)._class;return new Promise((l,u)=>{if(!a)return u("No class name specified");n().increment({collection:a,objectId:o,properties:r,success:d=>{n()._fromJSON(Object.assign({objectId:o},d),a),l()},error:d=>{u(Error(d||"Failed to increment."))}})})},async save(o,r,s){if(typeof o>"u")return Promise.reject(new Error("'objectOrId' is undefined."));typeof o!="string"&&(o=o.getId());const a=(s?s.className:void 0)||Model.get(o)._class,l=Model.get(o);return r&&Object.keys(r).forEach(u=>{l.set(u,r[u])}),new Promise((u,d)=>{if(!a)return d("No class name specified");n().save({collection:a,objectId:o,data:r||l.data,acl:s?s.acl:void 0,success:p=>{n()._fromJSON(Object.assign({objectId:o},p),a),u()},error:p=>{d(Error(p||"Failed to save."))}})})},async create(o,r,s){if(typeof o>"u")throw new Error("'className' is undefined");return new Promise((a,l)=>{n().create({collection:o,data:r,acl:s?s.acl:void 0,success:u=>{const d=n()._fromJSON(u,o);a(d)},error:u=>{l(Error(u||"Failed to insert."))}})})},async delete(o,r){if(typeof o>"u")return Promise.reject(new Error("'objectOrId' is undefined."));typeof o!="string"&&(o=o.getId());const s=(r?r.className:void 0)||Model.get(o)._class;return new Promise((a,l)=>{if(!s)return l("No class name specified");n().delete({collection:s,objectId:o,success:()=>{Model.get(o).notify("delete"),a()},error:u=>{l(Error(u||"Failed to delete."))}})})},async addRelation(o){const r=o.recordId||o.record.getId(),s=o.className||Model.get(r)._class,a=o.targetRecordId||o.targetRecord.getId(),l=o.targetClassName||Model.get(a)._class;return new Promise((u,d)=>{if(!s)return d("No class name specified");if(!l)return d("No target class name specified");n().addRelation({collection:s,objectId:r,key:o.key,targetObjectId:a,targetClass:l,success:p=>{u()},error:p=>{d(Error(p||"Failed to add relation."))}})})},async removeRelation(o){const r=o.recordId||o.record.getId(),s=o.className||Model.get(r)._class,a=o.targetRecordId||o.targetRecord.getId(),l=o.targetClassName||Model.get(a)._class;return new Promise((u,d)=>{if(!s)return d("No class name specified");if(!l)return d("No target class name specified");n().removeRelation({collection:s,objectId:r,key:o.key,targetObjectId:a,targetClass:l,success:p=>{u()},error:p=>{d(Error(p||"Failed to add relation."))}})})}}}function registerPolyfills(){String.prototype.matchAll||(String.prototype.matchAll=function(t){var n=new RegExp(t,"g"),o=[],r=this.match(n);for(let a in r){var s=r[a];o[a]=s.match(new RegExp(t))}return o})}function NoHomeError(){return React.createElement("div",{style:{overflowY:"auto",padding:"24px",fontFamily:"Open Sans",fontSize:"16px",width:"100vw",height:"100vh",backgroundColor:"#F57569"}},React.createElement("div",{style:{marginBottom:"50px",fontWeight:"bold",display:"flex",alignItems:"center"}},React.createElement("span",null,"ERROR"),React.createElement("img",{src:"ndl_assets/noodl-logo-black.svg",style:{marginLeft:"auto"}})),React.createElement("div",{style:{margin:"0 auto",alignItems:"center",display:"flex",flexDirection:"column"}},React.createElement("div",{style:{fontSize:"24px",textAlign:"center",marginBottom:"50px"}},"No"," ",React.createElement("img",{src:"ndl_assets/home-icon.svg",style:{marginRight:"-6px"}})," ",React.createElement("span",{style:{fontWeight:"bold"}},"HOME")," component selected"),React.createElement("div",{style:{textAlign:"center"}},"Click ",React.createElement("span",{style:{fontWeight:"bold"}},"Make home")," as shown below."),React.createElement("img",{style:{marginTop:"24px"},srcSet:"ndl_assets/make-home-instructions@2x.png 2x"})))}class GraphWarnings{constructor(t,n){this.graphModel=t,this.editorConnection=n,this.graphModel.getAllComponents().forEach(o=>this._bindComponentModel(o)),this.graphModel.on("componentAdded",o=>this._bindComponentModel(o),this),this.graphModel.on("componentRemoved",o=>o.removeListenersWithRef(this),this)}_bindComponentModel(t){t.on("rootAdded",()=>this._evaluateWarnings(t),this),t.on("rootRemoved",n=>{this.editorConnection.clearWarning(t.name,n,"multiple-visual-roots-warning"),this._evaluateWarnings(t)},this),this._evaluateWarnings(t)}_evaluateWarnings(t){const n=t.getRoots();if(n.lenth!==0){this.editorConnection.clearWarning(t.name,n[0],"multiple-visual-roots-warning");for(let o=1;o<n.length;o++)this.editorConnection.sendWarning(t.name,n[o],"multiple-visual-roots-warning",{message:"This node is detached from the main node tree<br>and won't be rendered",level:"info"})}}dispose(){this.graphModel.getAllComponents().forEach(t=>{t.removeListenersWithRef(this)}),this.graphModel.removeListenersWithRef(this)}}class Highlighter{constructor(t){this.highlightedNodes=new Map,this.selectedNodes=new Map,this.noodlRuntime=t,this.isUpdatingHighlights=!1;const n=document.createElement("div");n.style.width="100%",n.style.height="100%",n.style.top="0",n.style.left="0",n.style.overflow="hidden",n.style.position="fixed",n.style.zIndex="1000000000",n.style.pointerEvents="none",document.body.appendChild(n),this.highlightRootDiv=n,this.windowBorderDiv=this.createHighlightDiv(),this.windowBorderDiv.style.position="absolute",this.windowBorderDiv.style.top="0",this.windowBorderDiv.style.left="0",this.windowBorderDiv.style.boxShadow="inset 0 0 0 3px #2CA7BA",this.windowBorderDiv.style.opacity="1.0",this.windowBorderDiv.style.width="100vw",this.windowBorderDiv.style.height="100vh"}createHighlightDiv(){const t=document.createElement("div");return t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.outline="2px solid #2CA7BA",t.style.opacity="1.0",t}setWindowSelected(t){}updateHighlights(){const t=Array.from(this.highlightedNodes.entries()).concat(Array.from(this.selectedNodes.entries()));for(const n of t){const o=n[0].getRef()&&ReactDOM.findDOMNode(n[0].getRef());if(!o){this.highlightedNodes.delete(n[0]),n[1].remove();continue}const r=o.getBoundingClientRect(),s=n[1];s.style.transform=`translateX(${r.x}px) translateY(${r.y}px)`,s.style.width=r.width+"px",s.style.height=r.height+"px"}this.isUpdatingHighlights=this.highlightedNodes.size>0||this.selectedNodes.size>0,this.isUpdatingHighlights&&requestAnimationFrame(this.updateHighlights.bind(this))}highlightNodesWithId(t){const n=getNodes(this.noodlRuntime,t).filter(o=>o.getRef).filter(o=>!this.highlightedNodes.has(o));for(const o of n){const r=this.createHighlightDiv();this.highlightRootDiv.appendChild(r),this.highlightedNodes.set(o,r)}(this.selectedNodes.size>0||this.highlightedNodes.size>0)&&!this.isUpdatingHighlights&&this.updateHighlights()}disableHighlight(){const t=Array.from(this.highlightedNodes.entries());for(const[n,o]of t)o&&o.remove();this.highlightedNodes.clear()}selectNodesWithId(t){this.noodlRuntime.rootComponent||this.noodlRuntime.eventEmitter.once("rootComponentUpdated",()=>{setTimeout(()=>{this.selectNodesWithId(t)},300)});const n=getNodes(this.noodlRuntime,t).filter(o=>o.getRef).filter(o=>!this.selectedNodes.has(o));for(const o of n){const r=this.createHighlightDiv();this.highlightRootDiv.appendChild(r),this.selectedNodes.set(o,r)}return this.selectedNodes.size>0&&this.setWindowSelected(!1),(this.selectedNodes.size>0||this.highlightedNodes.size>0)&&!this.isUpdatingHighlights&&this.updateHighlights(),n}deselectNodes(){const t=Array.from(this.selectedNodes.entries());for(const[n,o]of t)o&&o.remove();this.selectedNodes.clear()}}function getNodes(e,t){return e.rootComponent?e.rootComponent.nodeScope.getNodesWithIdRecursive(t):[]}class Inspector{constructor({onInspect:t,onHighlight:n,onDisableHighlight:o}){this.onMouseMove=r=>{o();const s=this.findNoodlNode(r.target);s?(document.body.style.cursor="pointer",n(s.id)):document.body.style.cursor="initial",r.stopPropagation()},this.onClick=r=>{o();const s=this.findNoodlNode(r.target);s&&t([s.id]),r.stopPropagation(),r.preventDefault(),document.activeElement&&document.activeElement.blur()},this.onContextMenu=r=>{const s=document.elementsFromPoint(r.clientX,r.clientY).map(a=>this.findNoodlNode(a)).filter(a=>!!a).map(a=>a.id);s.length&&t(s),r.stopPropagation(),r.preventDefault(),document.activeElement&&document.activeElement.blur()},this.onMouseOut=r=>{o()},this.blockEvent=r=>{r.stopPropagation()},this.onDisableHighlight=o}setComponent(t){this.component=t}enable(){document.activeElement&&document.activeElement.blur(),document.addEventListener("mouseenter",this.blockEvent,!0),document.addEventListener("mouseover",this.blockEvent,!0),document.addEventListener("mousedown",this.blockEvent,!0),document.addEventListener("mouseup",this.blockEvent,!0),document.addEventListener("mousemove",this.onMouseMove,!0),document.addEventListener("mouseout",this.onMouseOut,!0),document.addEventListener("click",this.onClick,!0),document.addEventListener("contextmenu",this.onContextMenu,!0)}disable(){document.body.style.cursor="initial",document.removeEventListener("mouseenter",this.blockEvent,!0),document.removeEventListener("mouseover",this.blockEvent,!0),document.removeEventListener("mousedown",this.blockEvent,!0),document.removeEventListener("mouseup",this.blockEvent,!0),document.removeEventListener("mousemove",this.onMouseMove,!0),document.removeEventListener("mouseout",this.onMouseOut,!0),document.removeEventListener("click",this.onClick,!0),document.removeEventListener("contextmenu",this.onContextMenu,!0),this.onDisableHighlight()}findNoodlNode(t){let n;for(;!n&&t;){const a=Object.keys(t).find(l=>l.startsWith("__reactInternalInstance$"));n=t[a],n||(t=t.parentElement)}if(!n)return;const o=a=>{let l=a.return;for(;l&&typeof l.type=="string";)l=l.return;return l};let r=o(n);for(;r&&(!r.stateNode||!r.stateNode.props||!r.stateNode.props.noodlNode);)r=o(r);const s=r?r.stateNode.props.noodlNode:void 0;if(s){if(this.component){let a=s;for(;a;)if(a.parentNodeScope){if(a.parentNodeScope.componentOwner.name===this.component.name)return a;a=a.parentNodeScope.componentOwner}else{if(a.nodeScope.componentOwner.name===this.component.name)return a;a=a.nodeScope.componentOwner}return a}return s}}}const IS_BROWSER=typeof document<"u";class SeoApi{constructor(){this._title="",this._meta={}}get title(){return IS_BROWSER?document.title:this._title}setTitle(t){this._title=t,IS_BROWSER&&(document.title=t)}get meta(){return this._meta}clearMeta(){IS_BROWSER&&Object.keys(this._meta).forEach(t=>{const n=document.querySelector(`meta[name="${t}"]`);n&&n.remove()}),this._meta={}}getMeta(t){return this._meta[t]}setMeta(t,n){if(this._meta[t]=n,IS_BROWSER){const o=document.querySelector(`meta[name="${t}"]`);if(o)n?o.setAttribute("content",n):o.remove();else if(n){const r=document.createElement("meta");r.setAttribute("name",t),r.setAttribute("property",t),r.setAttribute("content",n),document.head.appendChild(r)}}}}var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var events={exports:{}},hasRequiredEvents;function requireEvents(){if(hasRequiredEvents)return events.exports;hasRequiredEvents=1;var e=typeof Reflect=="object"?Reflect:null,t=e&&typeof e.apply=="function"?e.apply:function(w,E,F){return Function.prototype.apply.call(w,E,F)},n;e&&typeof e.ownKeys=="function"?n=e.ownKeys:Object.getOwnPropertySymbols?n=function(w){return Object.getOwnPropertyNames(w).concat(Object.getOwnPropertySymbols(w))}:n=function(w){return Object.getOwnPropertyNames(w)};function o(N){console&&console.warn&&console.warn(N)}var r=Number.isNaN||function(w){return w!==w};function s(){s.init.call(this)}events.exports=s,events.exports.once=v,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var a=10;function l(N){if(typeof N!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof N)}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(N){if(typeof N!="number"||N<0||r(N))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+N+".");a=N}}),s.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(w){if(typeof w!="number"||w<0||r(w))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+w+".");return this._maxListeners=w,this};function u(N){return N._maxListeners===void 0?s.defaultMaxListeners:N._maxListeners}s.prototype.getMaxListeners=function(){return u(this)},s.prototype.emit=function(w){for(var E=[],F=1;F<arguments.length;F++)E.push(arguments[F]);var L=w==="error",B=this._events;if(B!==void 0)L=L&&B.error===void 0;else if(!L)return!1;if(L){var H;if(E.length>0&&(H=E[0]),H instanceof Error)throw H;var J=new Error("Unhandled error."+(H?" ("+H.message+")":""));throw J.context=H,J}var ie=B[w];if(ie===void 0)return!1;if(typeof ie=="function")t(ie,this,E);else for(var pe=ie.length,xe=_(ie,pe),F=0;F<pe;++F)t(xe[F],this,E);return!0};function d(N,w,E,F){var L,B,H;if(l(E),B=N._events,B===void 0?(B=N._events=Object.create(null),N._eventsCount=0):(B.newListener!==void 0&&(N.emit("newListener",w,E.listener?E.listener:E),B=N._events),H=B[w]),H===void 0)H=B[w]=E,++N._eventsCount;else if(typeof H=="function"?H=B[w]=F?[E,H]:[H,E]:F?H.unshift(E):H.push(E),L=u(N),L>0&&H.length>L&&!H.warned){H.warned=!0;var J=new Error("Possible EventEmitter memory leak detected. "+H.length+" "+String(w)+" listeners added. Use emitter.setMaxListeners() to increase limit");J.name="MaxListenersExceededWarning",J.emitter=N,J.type=w,J.count=H.length,o(J)}return N}s.prototype.addListener=function(w,E){return d(this,w,E,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(w,E){return d(this,w,E,!0)};function p(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(N,w,E){var F={fired:!1,wrapFn:void 0,target:N,type:w,listener:E},L=p.bind(F);return L.listener=E,F.wrapFn=L,L}s.prototype.once=function(w,E){return l(E),this.on(w,f(this,w,E)),this},s.prototype.prependOnceListener=function(w,E){return l(E),this.prependListener(w,f(this,w,E)),this},s.prototype.removeListener=function(w,E){var F,L,B,H,J;if(l(E),L=this._events,L===void 0)return this;if(F=L[w],F===void 0)return this;if(F===E||F.listener===E)--this._eventsCount===0?this._events=Object.create(null):(delete L[w],L.removeListener&&this.emit("removeListener",w,F.listener||E));else if(typeof F!="function"){for(B=-1,H=F.length-1;H>=0;H--)if(F[H]===E||F[H].listener===E){J=F[H].listener,B=H;break}if(B<0)return this;B===0?F.shift():T(F,B),F.length===1&&(L[w]=F[0]),L.removeListener!==void 0&&this.emit("removeListener",w,J||E)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(w){var E,F,L;if(F=this._events,F===void 0)return this;if(F.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):F[w]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete F[w]),this;if(arguments.length===0){var B=Object.keys(F),H;for(L=0;L<B.length;++L)H=B[L],H!=="removeListener"&&this.removeAllListeners(H);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(E=F[w],typeof E=="function")this.removeListener(w,E);else if(E!==void 0)for(L=E.length-1;L>=0;L--)this.removeListener(w,E[L]);return this};function g(N,w,E){var F=N._events;if(F===void 0)return[];var L=F[w];return L===void 0?[]:typeof L=="function"?E?[L.listener||L]:[L]:E?A(L):_(L,L.length)}s.prototype.listeners=function(w){return g(this,w,!0)},s.prototype.rawListeners=function(w){return g(this,w,!1)},s.listenerCount=function(N,w){return typeof N.listenerCount=="function"?N.listenerCount(w):b.call(N,w)},s.prototype.listenerCount=b;function b(N){var w=this._events;if(w!==void 0){var E=w[N];if(typeof E=="function")return 1;if(E!==void 0)return E.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]};function _(N,w){for(var E=new Array(w),F=0;F<w;++F)E[F]=N[F];return E}function T(N,w){for(;w+1<N.length;w++)N[w]=N[w+1];N.pop()}function A(N){for(var w=new Array(N.length),E=0;E<w.length;++E)w[E]=N[E].listener||N[E];return w}function v(N,w){return new Promise(function(E,F){function L(H){N.removeListener(w,B),F(H)}function B(){typeof N.removeListener=="function"&&N.removeListener("error",L),E([].slice.call(arguments))}k(N,w,B,{once:!0}),w!=="error"&&I(N,L,{once:!0})})}function I(N,w,E){typeof N.on=="function"&&k(N,"error",w,E)}function k(N,w,E,F){if(typeof N.on=="function")F.once?N.once(w,E):N.on(w,E);else if(typeof N.addEventListener=="function")N.addEventListener(w,function L(B){F.once&&N.removeEventListener(w,L),E(B)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof N)}return events.exports}var eventsExports=requireEvents();function guid(){function e(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)}return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}class UserService{constructor(){this._initCloudServices(),this.events=new eventsExports.EventEmitter,this.events.setMaxListeners(1e5),this.getUserFromLocalStorage()&&(this.current=this.getUserModel(),this.fetchCurrentUser({success:()=>{},error:()=>{delete localStorage["Parse/"+this.appId+"/currentUser"],delete this.current,this.events.emit("sessionLost")}}))}getUserFromLocalStorage(){const t=localStorage["Parse/"+this.appId+"/currentUser"];if(t)try{return JSON.parse(t)}catch{}}_initCloudServices(){const t=Runtime.instance.getMetaData("cloudservices");t&&(this.appId=t.appId,this.endpoint=t.endpoint)}on(){this.events.on.apply(this.events,arguments)}off(){this.events.off.apply(this.events,arguments)}_makeRequest(t,n){if(!this.endpoint){n.error&&n.error({error:"No active cloud service",status:0});return}var o=new XMLHttpRequest;o.onreadystatechange=function(){if(o.readyState===4){var a;try{a=JSON.parse(o.response)}catch{}o.status===200||o.status===201?n.success(a||o.response):n.error(a||{error:o.responseText,status:o.status})}},o.open(n.method||"GET",this.endpoint+t,!0),o.setRequestHeader("X-Parse-Application-Id",this.appId);var r=localStorage["Parse/"+this.appId+"/installationId"];if(r===void 0&&(r=localStorage["Parse/"+this.appId+"/installationId"]=guid()),o.setRequestHeader("X-Parse-Installation-Id",r),n.sessionToken)o.setRequestHeader("X-Parse-Session-Token",n.sessionToken);else{var s=this.getUserFromLocalStorage();s!==void 0&&o.setRequestHeader("X-Parse-Session-Token",s.sessionToken)}o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify(n.content))}logIn(t){this._makeRequest("/login",{method:"POST",content:{username:t.username,password:t.password,_method:"GET"},success:n=>{localStorage["Parse/"+this.appId+"/currentUser"]=JSON.stringify(n),this.current=this.getUserModel(),t.success(n),this.events.emit("loggedIn")},error:n=>{t.error(n.error)}})}logOut(t){this._makeRequest("/logout",{method:"POST",content:{},success:n=>{delete localStorage["Parse/"+this.appId+"/currentUser"],delete this.current,t.success(),this.events.emit("loggedOut")},error:n=>{t.error(n.error)}})}signUp(t){const n=t.properties?CloudStore._serializeObject({...t.properties},"_User"):{};this._makeRequest("/users",{method:"POST",content:Object.assign({},n,{username:t.username,password:t.password,email:t.email}),success:o=>{const r=Object.assign(o,{username:t.username},t.properties);localStorage["Parse/"+this.appId+"/currentUser"]=JSON.stringify(r),this.current=this.getUserModel(),t.success(o),this.events.emit("loggedIn")},error:o=>{t.error(o.error)}})}setUserProperties(t){const n=this.getCurrentUser();if(n!==void 0){const o=CloudStore._serializeObject({...t.properties},"_User"),r=Object.assign({},{email:t.email,username:t.username},o);delete r.emailVerified,delete r.createdAt,delete r.updatedAt,this._makeRequest("/users/"+n.objectId,{method:"PUT",content:r,success:s=>{Object.assign(n,r),localStorage["Parse/"+this.appId+"/currentUser"]=JSON.stringify(n),this.current=this.getUserModel(),t.success(s)},error:s=>{t.error(s.error)}})}}fetchCurrentUser(t){this._makeRequest("/users/me",{method:"GET",sessionToken:t.sessionToken,success:n=>{localStorage["Parse/"+this.appId+"/currentUser"]=JSON.stringify(n),this.current=this.getUserModel(),this.events.emit("sessionGained"),t.success(n)},error:n=>{n.code===209&&(delete localStorage["Parse/"+this.appId+"/currentUser"],this.events.emit("sessionLost")),t.error(n.error)}})}verifyEmail(t){this._makeRequest("/apps/"+this.appId+"/verify_email?username="+t.username+"&token="+t.token,{method:"GET",success:n=>{n.indexOf("Successfully verified your email")!==-1?t.success():n.indexOf("Invalid Verification Link")?t.error("Invalid verification token"):t.error("Failed to verify email")},error:n=>{t.error(n.error)}})}sendEmailVerification(t){this._makeRequest("/verificationEmailRequest",{method:"POST",content:{email:t.email},success:n=>{t.success()},error:n=>{t.error(n.error)}})}resetPassword(t){this._makeRequest("/apps/"+this.appId+"/request_password_reset",{method:"POST",content:{username:t.username,token:t.token,new_password:t.newPassword},success:n=>{n.indexOf("Password successfully reset")!==-1||n.indexOf("Successfully updated your password")!==-1?t.success():n.indexOf("Invalid Link")?t.error("Invalid verification token"):t.error("Failed to verify email")},error:n=>{t.error(n.error)}})}requestPasswordReset(t){this._makeRequest("/requestPasswordReset",{method:"POST",content:{email:t.email},success:n=>{t.success()},error:n=>{t.error(n.error)}})}getCurrentUser(){var t=localStorage["Parse/"+this.appId+"/currentUser"];if(t!==void 0)return JSON.parse(t)}getUserModel(){const t=this.getCurrentUser();if(t!==void 0)return delete t.sessionToken,delete t.ACL,delete t.className,delete t.__type,CloudStore._fromJSON(t,"_User")}}UserService.forScope=e=>UserService.instance;var _instance;Object.defineProperty(UserService,"instance",{get:function(){return _instance===void 0&&(_instance=new UserService),_instance}}),Runtime.Services.UserService=UserService;const users={async logIn(e){return new Promise((t,n)=>{UserService.instance.logIn({username:e.username,password:e.password,success:()=>{t()},error:o=>{n(o)}})})},async signUp(e){return new Promise((t,n)=>{UserService.instance.signUp({username:e.username,password:e.password,email:e.email,properties:e.properties,success:()=>{t()},error:o=>{n(o)}})})},async become(e){return new Promise((t,n)=>{UserService.instance.fetchCurrentUser({sessionToken:e,success:()=>{t()},error:o=>{n(o)}})})},on(e,t){UserService.instance.on(e,t)},off(e,t){UserService.instance.off(e,t)}},_currentUser={async logOut(){return new Promise((e,t)=>{UserService.instance.logOut({success:()=>{e()},error:n=>{t(n)}})})},async save(){return new Promise((e,t)=>{const n=Object.assign({},_currentUser.Properties.data);UserService.instance.setUserProperties({properties:n,success:()=>{e()},error:o=>{t(o)}})})},async fetch(){return new Promise((e,t)=>{UserService.instance.fetchCurrentUser({success:()=>{e()},error:n=>{t(n)}})})}};Object.defineProperty(users,"Current",{get:function(){const e=UserService.instance.current;if(e!==void 0)return _currentUser.email=e.email,_currentUser.username=e.username,_currentUser.id=e.id,_currentUser.emailVerified=e.emailVerified,_currentUser.Properties=e,_currentUser}});function _makeRequest$2(e,t){var n=new XMLHttpRequest;n.onreadystatechange=function(){if(n.readyState===4){var s;try{s=JSON.parse(n.response)}catch{}n.status===200||n.status===201?t.success(s):t.error(s)}},n.open(t.method||"GET",t.endpoint+e,!0),n.setRequestHeader("X-Parse-Application-Id",t.appId),n.setRequestHeader("Content-Type","application/json");const o=Runtime.instance.getMetaData("cloudservices");o&&o.deployVersion&&n.setRequestHeader("x-noodl-cloud-version",o.deployVersion);var r=localStorage["Parse/"+t.appId+"/currentUser"];if(r!==void 0)try{const s=JSON.parse(r);n.setRequestHeader("X-Parse-Session-Token",s.sessionToken)}catch{}n.send(JSON.stringify(t.content))}const cloudfunctions={async run(e,t){return new Promise((n,o)=>{const r=Runtime.instance.getMetaData("cloudservices");if(r===void 0){o("No cloud services defined in this project.");return}const s=r.appId,a=Runtime.instance.editorConnection.isRunningLocally()?`http://${window.location.hostname}:8577`:r.endpoint;_makeRequest$2("/functions/"+encodeURIComponent(e),{appId:s,endpoint:a,content:t,method:"POST",success:l=>{n(l?l.result:void 0)},error:l=>{o(l)}})})}},pt=class pt{constructor(){this._routers={},this._navigationQueue=[]}navigate(t,n){setTimeout(()=>{const o=Object.keys(this._routers);if(o.length===1&&(t=o[0]),this._routers[t])for(const r of this._routers[t])r.navigate(n);else this._navigationQueue.push({name:t,args:n})},1)}registerRouter(t,n){t=t||"Main",this._routers[t]||(this._routers[t]=[]),this._routers[t].push(n);let o=!1,r=0;for(;r<this._navigationQueue.length;){const s=this._navigationQueue[r];s.name===t?(n.navigate(s.args),o=!0,this._navigationQueue.splice(r,1)):r++}o||n.reset()}deregisterRouter(t,n){if(t=t||"Main",!this._routers[t])return;const o=this._routers[t].indexOf(n);o!==-1&&(this._routers[t].splice(o,1),this._routers[t].length===0&&delete this._routers[t])}getPagesForRouter(t){const o=Runtime.instance.graphModel.routerIndex.routers;if(o===void 0||o.length===0)return[];const r=t===void 0?[o[0]]:o.filter(a=>a.name===t),s=new Set;return r.forEach(a=>{const l=a.pages;l!==void 0&&l.routes!==void 0&&l.routes.forEach(u=>{s.add(u)})}),Array.from(s).map(a=>this.getPageInfoForComponent(String(a))).filter(a=>!!a)}getPageInfoForComponent(t){return Runtime.instance.graphModel.routerIndex.pages.find(r=>r.component===t)}onNavigated(t,n){window.Noodl.Events.emit("NoodlApp_Navigated",{routerName:t,...n})}};pt.instance=new pt;let RouterHandler=pt;const navigation={_noodlRuntime:void 0,async showPopup(e,t){return new Promise(n=>{navigation._noodlRuntime.context.showPopup(e,t,{onClosePopup:(o,r)=>{n({action:o?.replace("closeAction-",""),parameters:r})}})})},navigate(e,t,n){RouterHandler.instance.navigate(e,{target:t,params:n})},navigateToPath(e,t){let n,o;var r=Runtime.instance.getProjectSettings().navigationPathType;r===void 0||r==="hash"?n=e:o=e;var s=[];if(t&&t.query!==void 0)for(let l in t.query)s.push(l+"="+t.query[l]);var a=(o!==void 0?o:"")+(s.length>=1?"?"+s.join("&"):"")+(n!==void 0?"#"+n:"");window.history.pushState({},"",a),dispatchEvent(new PopStateEvent("popstate",{}))}},files={async upload(e,t){return new Promise((n,o)=>{CloudStore.instance.uploadFile({file:e,onUploadProgress:r=>{t&&t.onProgress&&t.onProgress(r)},success:r=>{n(new CloudFile(r))},error:r=>{o(r)}})})}};function createNoodlAPI(e){const t=typeof window<"u"?window:globalThis;t.Noodl.getProjectSettings=e.getProjectSettings.bind(e),t.Noodl.getMetaData=e.getMetaData.bind(e),t.Noodl.Collection=t.Noodl.Array=Collection,t.Noodl.Model=t.Noodl.Object=Model,t.Noodl.Variables=t.Noodl.Object.get("--ndl--global-variables"),t.Noodl.Events=t.Noodl.eventEmitter=e.context.eventSenderEmitter,t.Noodl.Records=createRecordsAPI(),t.Noodl.Users=users,t.Noodl.CloudFunctions=cloudfunctions,t.Noodl.Navigation=navigation,t.Noodl.Navigation._noodlRuntime=e,t.Noodl.Files=files,t.Noodl.SEO=new SeoApi,t.Noodl.Env||(t.Noodl.Env={}),t.Noodl.Arrays=new Proxy(t.Noodl.Array,{get(n,o,r){return Noodl.Array.get(o)},set(n,o,r){if(!Array.isArray(r))throw new Error("Cannot assign non array value to array with id "+o);Noodl.Array.get(o).set(r)}}),t.Noodl.Objects=new Proxy(t.Noodl.Object,{get(n,o,r){return Noodl.Object.get(o)},set(n,o,r){Noodl.Object.get(o).setAll(r)}})}const projectSettings={ports:[{name:"htmlTitle",displayName:"Title",group:"General",plug:"input",type:"string",default:"Fluxscape Viewer",tooltip:"The title that web browsers show",ignoreInExport:!0},{name:"headCode",displayName:"Head Code",group:"Custom Code",plug:"input",type:{name:"string",codeeditor:"html"},tooltip:"Add custom code to the &lt;head&gt; tag",ignoreInExport:!0},{name:"navigationPathType",displayName:"URL Path Type",group:"Navigation",plug:"input",type:{name:"enum",enums:[{label:"Hash",value:"hash"},{label:"Path",value:"path"}]},default:"hash"},{name:"bodyScroll",displayName:"Body Scroll",group:"Experimental features",plug:"input",type:{name:"boolean"},tooltip:"Changes so the &lt;body&gt; tag will scroll by default"},{name:"repeaterDisabledWhenUnmounted",displayName:"Disable when unmounted",group:"Experimental features - Repeater",plug:"input",type:{name:"boolean"},tooltip:"Repeater will only create components when it's mounted"},{name:"repeaterCreateComponentsAsync",displayName:"Create asynchronously",group:"Experimental features - Repeater",plug:"input",type:{name:"boolean"},tooltip:"Repeater items will be created in chunks to keep UI responsive"}]};class DOMBoundingBoxObserver{constructor(t,n){this.isRunning=!1,this.numBoundingBoxObservers=0,this.callback=t,this.pollDelay=n}addObserver(){this.numBoundingBoxObservers++,this.isRunning||this._startObserver()}removeObserver(){this.numBoundingBoxObservers--,this.numBoundingBoxObservers===0&&this._stopObserver()}setTarget(t){this.target=t,this.numBoundingBoxObservers>0&&!this.isRunning&&this._startObserver()}_startObserver(){if(this.isRunning||!this.target)return;this.isRunning=!0;let t={};const n=()=>{if(!this.target){this.isRunning=!1;return}const o=this.target.getBoundingClientRect();t.x!==o.x&&this.callback("x",o),t.y!==o.y&&this.callback("y",o),t.width!==o.width&&this.callback("width",o),t.height!==o.height&&this.callback("height",o),t=o,this.isRunning&&(this.pollDelay?setTimeout(n,this.pollDelay):window.requestAnimationFrame(n))};window.requestAnimationFrame(n)}_stopObserver(){this.isRunning=!1}}function isObject$1(e){return e&&typeof e=="object"&&!Array.isArray(e)}function mergeDeep(e,...t){if(!t.length)return e;const n=t.shift();if(isObject$1(e)&&isObject$1(n))for(const o in n)isObject$1(n[o])?(e[o]||Object.assign(e,{[o]:{}}),mergeDeep(e[o],n[o])):Object.assign(e,{[o]:n[o]});return mergeDeep(e,...t)}var webfontloader={exports:{}},hasRequiredWebfontloader;function requireWebfontloader(){return hasRequiredWebfontloader||(hasRequiredWebfontloader=1,function(e){(function(){function t(c,h,y){return c.call.apply(c.bind,arguments)}function n(c,h,y){if(!c)throw Error();if(2<arguments.length){var S=Array.prototype.slice.call(arguments,2);return function(){var O=Array.prototype.slice.call(arguments);return Array.prototype.unshift.apply(O,S),c.apply(h,O)}}return function(){return c.apply(h,arguments)}}function o(c,h,y){return o=Function.prototype.bind&&Function.prototype.bind.toString().indexOf("native code")!=-1?t:n,o.apply(null,arguments)}var r=Date.now||function(){return+new Date};function s(c,h){this.a=c,this.o=h||c,this.c=this.o.document}var a=!!window.FontFace;function l(c,h,y,S){if(h=c.c.createElement(h),y)for(var O in y)y.hasOwnProperty(O)&&(O=="style"?h.style.cssText=y[O]:h.setAttribute(O,y[O]));return S&&h.appendChild(c.c.createTextNode(S)),h}function u(c,h,y){c=c.c.getElementsByTagName(h)[0],c||(c=document.documentElement),c.insertBefore(y,c.lastChild)}function d(c){c.parentNode&&c.parentNode.removeChild(c)}function p(c,h,y){h=h||[],y=y||[];for(var S=c.className.split(/\s+/),O=0;O<h.length;O+=1){for(var M=!1,U=0;U<S.length;U+=1)if(h[O]===S[U]){M=!0;break}M||S.push(h[O])}for(h=[],O=0;O<S.length;O+=1){for(M=!1,U=0;U<y.length;U+=1)if(S[O]===y[U]){M=!0;break}M||h.push(S[O])}c.className=h.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function f(c,h){for(var y=c.className.split(/\s+/),S=0,O=y.length;S<O;S++)if(y[S]==h)return!0;return!1}function g(c){return c.o.location.hostname||c.a.location.hostname}function b(c,h,y){function S(){j&&O&&M&&(j(U),j=null)}h=l(c,"link",{rel:"stylesheet",href:h,media:"all"});var O=!1,M=!0,U=null,j=y||null;a?(h.onload=function(){O=!0,S()},h.onerror=function(){O=!0,U=Error("Stylesheet failed to load"),S()}):setTimeout(function(){O=!0,S()},0),u(c,"head",h)}function _(c,h,y,S){var O=c.c.getElementsByTagName("head")[0];if(O){var M=l(c,"script",{src:h}),U=!1;return M.onload=M.onreadystatechange=function(){U||this.readyState&&this.readyState!="loaded"&&this.readyState!="complete"||(U=!0,y&&y(null),M.onload=M.onreadystatechange=null,M.parentNode.tagName=="HEAD"&&O.removeChild(M))},O.appendChild(M),setTimeout(function(){U||(U=!0,y&&y(Error("Script load timeout")))},S||5e3),M}return null}function T(){this.a=0,this.c=null}function A(c){return c.a++,function(){c.a--,I(c)}}function v(c,h){c.c=h,I(c)}function I(c){c.a==0&&c.c&&(c.c(),c.c=null)}function k(c){this.a=c||"-"}k.prototype.c=function(c){for(var h=[],y=0;y<arguments.length;y++)h.push(arguments[y].replace(/[\W_]+/g,"").toLowerCase());return h.join(this.a)};function N(c,h){this.c=c,this.f=4,this.a="n";var y=(h||"n4").match(/^([nio])([1-9])$/i);y&&(this.a=y[1],this.f=parseInt(y[2],10))}function w(c){return L(c)+" "+(c.f+"00")+" 300px "+E(c.c)}function E(c){var h=[];c=c.split(/,\s*/);for(var y=0;y<c.length;y++){var S=c[y].replace(/['"]/g,"");S.indexOf(" ")!=-1||/^\d/.test(S)?h.push("'"+S+"'"):h.push(S)}return h.join(",")}function F(c){return c.a+c.f}function L(c){var h="normal";return c.a==="o"?h="oblique":c.a==="i"&&(h="italic"),h}function B(c){var h=4,y="n",S=null;return c&&((S=c.match(/(normal|oblique|italic)/i))&&S[1]&&(y=S[1].substr(0,1).toLowerCase()),(S=c.match(/([1-9]00|normal|bold)/i))&&S[1]&&(/bold/i.test(S[1])?h=7:/[1-9]00/.test(S[1])&&(h=parseInt(S[1].substr(0,1),10)))),y+h}function H(c,h){this.c=c,this.f=c.o.document.documentElement,this.h=h,this.a=new k("-"),this.j=h.events!==!1,this.g=h.classes!==!1}function J(c){c.g&&p(c.f,[c.a.c("wf","loading")]),pe(c,"loading")}function ie(c){if(c.g){var h=f(c.f,c.a.c("wf","active")),y=[],S=[c.a.c("wf","loading")];h||y.push(c.a.c("wf","inactive")),p(c.f,y,S)}pe(c,"inactive")}function pe(c,h,y){c.j&&c.h[h]&&(y?c.h[h](y.c,F(y)):c.h[h]())}function xe(){this.c={}}function Me(c,h,y){var S=[],O;for(O in h)if(h.hasOwnProperty(O)){var M=c.c[O];M&&S.push(M(h[O],y))}return S}function ae(c,h){this.c=c,this.f=h,this.a=l(this.c,"span",{"aria-hidden":"true"},this.f)}function Ie(c){u(c.c,"body",c.a)}function Te(c){return"display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:"+E(c.c)+";"+("font-style:"+L(c)+";font-weight:"+(c.f+"00")+";")}function Ne(c,h,y,S,O,M){this.g=c,this.j=h,this.a=S,this.c=y,this.f=O||3e3,this.h=M||void 0}Ne.prototype.start=function(){var c=this.c.o.document,h=this,y=r(),S=new Promise(function(U,j){function z(){r()-y>=h.f?j():c.fonts.load(w(h.a),h.h).then(function(q){1<=q.length?U():setTimeout(z,25)},function(){j()})}z()}),O=null,M=new Promise(function(U,j){O=setTimeout(j,h.f)});Promise.race([M,S]).then(function(){O&&(clearTimeout(O),O=null),h.g(h.a)},function(){h.j(h.a)})};function me(c,h,y,S,O,M,U){this.v=c,this.B=h,this.c=y,this.a=S,this.s=U||"BESbswy",this.f={},this.w=O||3e3,this.u=M||null,this.m=this.j=this.h=this.g=null,this.g=new ae(this.c,this.s),this.h=new ae(this.c,this.s),this.j=new ae(this.c,this.s),this.m=new ae(this.c,this.s),c=new N(this.a.c+",serif",F(this.a)),c=Te(c),this.g.a.style.cssText=c,c=new N(this.a.c+",sans-serif",F(this.a)),c=Te(c),this.h.a.style.cssText=c,c=new N("serif",F(this.a)),c=Te(c),this.j.a.style.cssText=c,c=new N("sans-serif",F(this.a)),c=Te(c),this.m.a.style.cssText=c,Ie(this.g),Ie(this.h),Ie(this.j),Ie(this.m)}var Ee={D:"serif",C:"sans-serif"},Ae=null;function qe(){if(Ae===null){var c=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);Ae=!!c&&(536>parseInt(c[1],10)||parseInt(c[1],10)===536&&11>=parseInt(c[2],10))}return Ae}me.prototype.start=function(){this.f.serif=this.j.a.offsetWidth,this.f["sans-serif"]=this.m.a.offsetWidth,this.A=r(),Y(this)};function Fe(c,h,y){for(var S in Ee)if(Ee.hasOwnProperty(S)&&h===c.f[Ee[S]]&&y===c.f[Ee[S]])return!0;return!1}function Y(c){var h=c.g.a.offsetWidth,y=c.h.a.offsetWidth,S;(S=h===c.f.serif&&y===c.f["sans-serif"])||(S=qe()&&Fe(c,h,y)),S?r()-c.A>=c.w?qe()&&Fe(c,h,y)&&(c.u===null||c.u.hasOwnProperty(c.a.c))?Ve(c,c.v):Ve(c,c.B):ve(c):Ve(c,c.v)}function ve(c){setTimeout(o(function(){Y(this)},c),50)}function Ve(c,h){setTimeout(o(function(){d(this.g.a),d(this.h.a),d(this.j.a),d(this.m.a),h(this.a)},c),0)}function re(c,h,y){this.c=c,this.a=h,this.f=0,this.m=this.j=!1,this.s=y}var Oe=null;re.prototype.g=function(c){var h=this.a;h.g&&p(h.f,[h.a.c("wf",c.c,F(c).toString(),"active")],[h.a.c("wf",c.c,F(c).toString(),"loading"),h.a.c("wf",c.c,F(c).toString(),"inactive")]),pe(h,"fontactive",c),this.m=!0,$e(this)},re.prototype.h=function(c){var h=this.a;if(h.g){var y=f(h.f,h.a.c("wf",c.c,F(c).toString(),"active")),S=[],O=[h.a.c("wf",c.c,F(c).toString(),"loading")];y||S.push(h.a.c("wf",c.c,F(c).toString(),"inactive")),p(h.f,S,O)}pe(h,"fontinactive",c),$e(this)};function $e(c){--c.f==0&&c.j&&(c.m?(c=c.a,c.g&&p(c.f,[c.a.c("wf","active")],[c.a.c("wf","loading"),c.a.c("wf","inactive")]),pe(c,"active")):ie(c.a))}function Le(c){this.j=c,this.a=new xe,this.h=0,this.f=this.g=!0}Le.prototype.load=function(c){this.c=new s(this.j,c.context||this.j),this.g=c.events!==!1,this.f=c.classes!==!1,Xe(this,new H(this.c,c),c)};function fe(c,h,y,S,O){var M=--c.h==0;(c.f||c.g)&&setTimeout(function(){var U=O||null,j=S||null||{};if(y.length===0&&M)ie(h.a);else{h.f+=y.length,M&&(h.j=M);var z,q=[];for(z=0;z<y.length;z++){var C=y[z],x=j[C.c],V=h.a,G=C;if(V.g&&p(V.f,[V.a.c("wf",G.c,F(G).toString(),"loading")]),pe(V,"fontloading",G),V=null,Oe===null)if(window.FontFace){var G=/Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent),ee=/OS X.*Version\/10\..*Safari/.exec(window.navigator.userAgent)&&/Apple/.exec(window.navigator.vendor);Oe=G?42<parseInt(G[1],10):!ee}else Oe=!1;Oe?V=new Ne(o(h.g,h),o(h.h,h),h.c,C,h.s,x):V=new me(o(h.g,h),o(h.h,h),h.c,C,h.s,U,x),q.push(V)}for(z=0;z<q.length;z++)q[z].start()}},0)}function Xe(c,h,y){var O=[],S=y.timeout;J(h);var O=Me(c.a,y,c.c),M=new re(c.c,h,S);for(c.h=O.length,h=0,y=O.length;h<y;h++)O[h].load(function(U,j,z){fe(c,M,U,j,z)})}function Be(c,h){this.c=c,this.a=h}Be.prototype.load=function(c){function h(){if(M["__mti_fntLst"+S]){var U=M["__mti_fntLst"+S](),j=[],z;if(U)for(var q=0;q<U.length;q++){var C=U[q].fontfamily;U[q].fontStyle!=null&&U[q].fontWeight!=null?(z=U[q].fontStyle+U[q].fontWeight,j.push(new N(C,z))):j.push(new N(C))}c(j)}else setTimeout(function(){h()},50)}var y=this,S=y.a.projectId,O=y.a.version;if(S){var M=y.c.o;_(this.c,(y.a.api||"https://fast.fonts.net/jsapi")+"/"+S+".js"+(O?"?v="+O:""),function(U){U?c([]):(M["__MonotypeConfiguration__"+S]=function(){return y.a},h())}).id="__MonotypeAPIScript__"+S}else c([])};function De(c,h){this.c=c,this.a=h}De.prototype.load=function(c){var h,y,S=this.a.urls||[],O=this.a.families||[],M=this.a.testStrings||{},U=new T;for(h=0,y=S.length;h<y;h++)b(this.c,S[h],A(U));var j=[];for(h=0,y=O.length;h<y;h++)if(S=O[h].split(":"),S[1])for(var z=S[1].split(","),q=0;q<z.length;q+=1)j.push(new N(S[0],z[q]));else j.push(new N(S[0]));v(U,function(){c(j,M)})};function Ue(c,h){c?this.c=c:this.c=je,this.a=[],this.f=[],this.g=h||""}var je="https://fonts.googleapis.com/css";function Re(c,h){for(var y=h.length,S=0;S<y;S++){var O=h[S].split(":");O.length==3&&c.f.push(O.pop());var M="";O.length==2&&O[1]!=""&&(M=":"),c.a.push(O.join(M))}}function We(c){if(c.a.length==0)throw Error("No fonts to load!");if(c.c.indexOf("kit=")!=-1)return c.c;for(var h=c.a.length,y=[],S=0;S<h;S++)y.push(c.a[S].replace(/ /g,"+"));return h=c.c+"?family="+y.join("%7C"),0<c.f.length&&(h+="&subset="+c.f.join(",")),0<c.g.length&&(h+="&text="+encodeURIComponent(c.g)),h}function st(c){this.f=c,this.a=[],this.c={}}var K={latin:"BESbswy","latin-ext":"çöüğş",cyrillic:"йяЖ",greek:"αβΣ",khmer:"កខគ",Hanuman:"កខគ"},et={thin:"1",extralight:"2","extra-light":"2",ultralight:"2","ultra-light":"2",light:"3",regular:"4",book:"4",medium:"5","semi-bold":"6",semibold:"6","demi-bold":"6",demibold:"6",bold:"7","extra-bold":"8",extrabold:"8","ultra-bold":"8",ultrabold:"8",black:"9",heavy:"9",l:"3",r:"4",b:"7"},tt={i:"i",italic:"i",n:"n",normal:"n"},le=/^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/;function ye(c){for(var h=c.f.length,y=0;y<h;y++){var S=c.f[y].split(":"),O=S[0].replace(/\+/g," "),M=["n4"];if(2<=S.length){var U,j=S[1];if(U=[],j)for(var j=j.split(","),z=j.length,q=0;q<z;q++){var C;if(C=j[q],C.match(/^[\w-]+$/)){var x=le.exec(C.toLowerCase());if(x==null)C="";else{if(C=x[2],C=C==null||C==""?"n":tt[C],x=x[1],x==null||x=="")x="4";else var V=et[x],x=V||(isNaN(x)?"4":x.substr(0,1));C=[C,x].join("")}}else C="";C&&U.push(C)}0<U.length&&(M=U),S.length==3&&(S=S[2],U=[],S=S?S.split(","):U,0<S.length&&(S=K[S[0]])&&(c.c[O]=S))}for(c.c[O]||(S=K[O])&&(c.c[O]=S),S=0;S<M.length;S+=1)c.a.push(new N(O,M[S]))}}function ue(c,h){this.c=c,this.a=h}var Se={Arimo:!0,Cousine:!0,Tinos:!0};ue.prototype.load=function(c){var h=new T,y=this.c,S=new Ue(this.a.api,this.a.text),O=this.a.families;Re(S,O);var M=new st(O);ye(M),b(y,We(S),A(h)),v(h,function(){c(M.a,M.c,Se)})};function ge(c,h){this.c=c,this.a=h}ge.prototype.load=function(c){var h=this.a.id,y=this.c.o;h?_(this.c,(this.a.api||"https://use.typekit.net")+"/"+h+".js",function(S){if(S)c([]);else if(y.Typekit&&y.Typekit.config&&y.Typekit.config.fn){S=y.Typekit.config.fn;for(var O=[],M=0;M<S.length;M+=2)for(var U=S[M],j=S[M+1],z=0;z<j.length;z++)O.push(new N(U,j[z]));try{y.Typekit.load({events:!1,classes:!1,async:!0})}catch{}c(O)}},2e3):c([])};function ze(c,h){this.c=c,this.f=h,this.a=[]}ze.prototype.load=function(c){var h=this.f.id,y=this.c.o,S=this;h?(y.__webfontfontdeckmodule__||(y.__webfontfontdeckmodule__={}),y.__webfontfontdeckmodule__[h]=function(O,M){for(var U=0,j=M.fonts.length;U<j;++U){var z=M.fonts[U];S.a.push(new N(z.name,B("font-weight:"+z.weight+";font-style:"+z.style)))}c(S.a)},_(this.c,(this.f.api||"https://f.fontdeck.com/s/css/js/")+g(this.c)+"/"+h+".js",function(O){O&&c([])})):c([])};var Z=new Le(window);Z.a.c.custom=function(c,h){return new De(h,c)},Z.a.c.fontdeck=function(c,h){return new ze(h,c)},Z.a.c.monotype=function(c,h){return new Be(h,c)},Z.a.c.typekit=function(c,h){return new ge(h,c)},Z.a.c.google=function(c,h){return new ue(h,c)};var Ce={load:o(Z.load,Z)};e.exports?e.exports=Ce:(window.WebFont=Ce,window.WebFontConfig&&Z.load(window.WebFontConfig))})()}(webfontloader)),webfontloader.exports}var webfontloaderExports=requireWebfontloader();const WebFontLoader=getDefaultExportFromCjs(webfontloaderExports);function FontLoader(){this.loadedFontFamilies={},this.fontCssFamiliesAdded={},this.fontCallbacks={};var e=this;["Arial","Arial Black","Courier New","Helvetica","Impact","Lucida Console","Tahoma","Times New Roman"].forEach(function(t){e.loadedFontFamilies[t]=!0})}function removeFileEnding(e){return e.replace(/\.[^/.]+$/,"")}FontLoader.prototype.loadFont=function(e){if(typeof document>"u")return;e=getAbsoluteUrl(e);var t=removeFileEnding(e).split("/").pop();if(this.loadedFontFamilies[t]){this.fontCallbacks[t]&&this.fontCallbacks[t].forEach(function(s){s()});return}if(this.fontCssFamiliesAdded[t])return;this.fontCssFamiliesAdded[t]=!0;var n=document.createElement("style");n.type="text/css";let o=Noodl.Env.BaseUrl||"/";if(e.startsWith("/")&&(e=e.substring(1)),n.appendChild(document.createTextNode("@font-face { font-family: '"+t+"'; src: url('"+o+e+`'); }
25
- `)),document.head.appendChild(n),typeof window<"u"){var r=this;WebFontLoader.load({timeout:1e3*600,custom:{families:[t]},fontactive:function(s){r.loadedFontFamilies[s]=!0,r.fontCallbacks[s]&&r.fontCallbacks[s].forEach(function(a){a()})}})}},FontLoader.prototype.callWhenFontIsActive=function(e,t){if(this.loadedFontFamilies[e]){t();return}this.fontCallbacks[e]||(this.fontCallbacks[e]=[]),this.fontCallbacks[e].push(t)},FontLoader.instance=new FontLoader;function createTooltip({title:e,body:t,images:n}){let o=`<h3>${e}</h3>`;if(t&&(t=Array.isArray(t)?t:[t],o+=t.map(r=>`<p>${r}</p>`).join("")),n){let r="";n.forEach(s=>{r+='<div class="popup-layer-image-item">',r+=`<img src="../assets/images/tooltips/${s.src}">`,s.label&&(r+=`<h3>${s.label}</h3>`),s.body&&(r+=`<p>${s.body}</p>`),r+="</div>"}),o+=`<div class="popup-layer-image-row">${r}</div>`}return o}function addInputCss(e,t){e.inputCss||(e.inputCss={}),e.defaultCss||(e.defaultCss={});for(const n in t)e.inputCss[n]=t[n]}function mergeAttribute$2(e,t,n){e[t]||(e[t]={});for(const o in n)e[t][o]=n[o]}function addInputs$1(e,t){mergeAttribute$2(e,"inputs",t)}function addInputProps$2(e,t){mergeAttribute$2(e,"inputProps",t)}function addDynamicInputPorts(e,t,n){e.dynamicports||(e.dynamicports=[]),e.dynamicports.push({condition:t,inputs:n})}function addOutputProps$2(e,t){mergeAttribute$2(e,"outputProps",t)}const NodeSharedPortDefinitions={addInputProps:addInputProps$2,addInputs:addInputs$1,addDynamicInputPorts,addInputCss,addSharedVisualInputs(e){addInputCss(e,{opacity:{index:200,group:"Style",displayName:"Opacity",type:"number",default:1,allowVisualStates:!0},mixBlendMode:{index:201,group:"Style",displayName:"Blend Mode",type:{name:"enum",enums:[{label:"Normal",value:"normal"},{label:"Multiply",value:"multiply"},{label:"Screen",value:"screen"},{label:"Overlay",value:"overlay"},{label:"Darken",value:"darken"},{label:"Lighten",value:"lighten"},{label:"Color Dodge",value:"color-dodge"},{label:"Color Burn",value:"color-burn"},{label:"Hard Light",value:"hard-light"},{label:"Soft Light",value:"soft-light"},{label:"Difference",value:"difference"},{label:"Exclusion",value:"exclusion"},{label:"Hue",value:"hue"},{label:"Saturation",value:"saturation"},{label:"Color",value:"color"},{label:"Luminosity",value:"luminosity"}]},default:"normal",applyDefault:!1,allowVisualStates:!0}}),addInputs$1(e,{visible:{index:210,displayName:"Visible",group:"Style",default:!0,type:"boolean",set(t){t?this.removeStyle(["visibility"]):this.setStyle({visibility:"hidden"})}},zIndex:{index:211,displayName:"zIndex",group:"Style",type:"number",allowVisualStates:!0,set(t){t===void 0?this.removeStyle(["zIndex"]):this.setStyle({zIndex:Number(t)})}}})},addMarginInputs(e){addInputCss(e,{marginLeft:{index:1,group:"Margin and padding",displayName:"Margin Left",type:{name:"number",units:["px","%"],defaultUnit:"px",marginPaddingComp:"margin-left"},allowVisualStates:!0},marginRight:{index:2,group:"Margin and padding",displayName:"Margin Right",type:{name:"number",units:["px","%"],defaultUnit:"px",marginPaddingComp:"margin-right"},allowVisualStates:!0},marginTop:{index:3,group:"Margin and padding",displayName:"Margin Top",type:{name:"number",units:["px","%"],defaultUnit:"px",marginPaddingComp:"margin-top"},allowVisualStates:!0},marginBottom:{index:4,group:"Margin and padding",displayName:"Margin Bottom",type:{name:"number",units:["px","%"],defaultUnit:"px",marginPaddingComp:"margin-bottom"},allowVisualStates:!0}})},addPaddingInputs(e,t){t=t||{};const n=t.defaults?t.defaults:{},o=t.styleTag;addInputCss(e,{paddingLeft:{index:64,group:"Margin and padding",default:n.paddingLeft||0,applyDefault:!1,displayName:"Pad Left",type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-left"},allowVisualStates:!0,styleTag:o},paddingRight:{index:65,group:"Margin and padding",default:n.paddingRight||0,applyDefault:!1,displayName:"Pad Right",type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-right"},allowVisualStates:!0,styleTag:o},paddingTop:{index:66,group:"Margin and padding",displayName:"Pad Top",default:n.paddingTop||0,applyDefault:!1,type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-top"},allowVisualStates:!0,styleTag:o},paddingBottom:{index:67,group:"Margin and padding",displayName:"Pad Bottom",default:n.paddingBottom||0,applyDefault:!1,type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-bottom"},allowVisualStates:!0,styleTag:o}})},addTransformInputs(e){addInputs$1(e,{transformX:{group:"Placement",displayName:"Pos X",default:0,index:300,allowVisualStates:!0,type:{name:"number",units:["px","%"],defaultUnit:"px"},set(t){this.transforms||(this.transforms={}),this.transforms.x=t.value+t.unit,this.updateTransform()}},transformY:{group:"Placement",displayName:"Pos Y",default:0,index:301,allowVisualStates:!0,type:{name:"number",units:["px","%"],defaultUnit:"px"},set(t){this.transforms||(this.transforms={}),this.transforms.y=t.value+t.unit,this.updateTransform()}},transformRotation:{index:302,group:"Placement",displayName:"Rotation",default:0,allowVisualStates:!0,type:{name:"number",units:["deg"],defaultUnit:"deg"},set(t){this.transforms||(this.transforms={}),this.transforms.rotation=t.value+t.unit,this.updateTransform()}},transformScale:{index:303,group:"Placement",displayName:"Scale",default:1,allowVisualStates:!0,type:{name:"number"},set(t){this.transforms||(this.transforms={}),this.transforms.scale=t,this.updateTransform()}},transformOriginX:{index:304,group:"Placement",displayName:"Transform Origin X",allowVisualStates:!0,type:{name:"number",units:["px","%"],defaultUnit:"%"},default:"50",set(t){this.transformOriginX=t.value+t.unit,this.updateTransformOrigin()}},transformOriginY:{index:305,group:"Placement",displayName:"Transform Origin Y",allowVisualStates:!0,type:{name:"number",units:["px","%"],defaultUnit:"%"},default:"50",set(t){this.transformOriginY=t.value+t.unit,this.updateTransformOrigin()}}}),e.methods||(e.methods={}),e.methods.updateTransform=function(){let t="";const{x:n,y:o,rotation:r,scale:s}=this.transforms;n&&(t+=`translateX(${n}) `),o&&(t+=`translateY(${o}) `),r&&(t+=`rotate(${r}) `),s!==void 0&&(t+=`scale(${s},${s})`),this.setStyle({transform:t})},e.methods.updateTransformOrigin=function(){const t=this.transformOriginX!==void 0?this.transformOriginX:"50%",n=this.transformOriginY!==void 0?this.transformOriginY:"50%";this.setStyle({transformOrigin:`${t} ${n}`})}},addAlignInputs(e){addInputCss(e,{position:{index:11,displayName:"Position",group:"Layout",type:{name:"enum",enums:[{label:"In Layout",value:"relative"},{label:"Absolute",value:"absolute"},{label:"Sticky",value:"sticky"},{label:"Fixed",value:"fixed"}]},default:"relative"}}),addInputProps$2(e,{alignX:{index:5,group:"Alignment",displayName:"Align X",type:{name:"enum",enums:[{label:"Left",value:"left"},{label:"Center",value:"center"},{label:"Right",value:"right"}],alignComp:"horizontal"}},alignY:{index:6,group:"Alignment",displayName:"Align Y",type:{name:"enum",enums:[{label:"Top",value:"top"},{label:"Center",value:"center"},{label:"Bottom",value:"bottom"}],alignComp:"vertical"}}}),addPositionAndAlignTooltips(e)},addPointerEventOutputs(e){addInputs$1(e,{pointerEventsMode:{index:403,displayName:"Pointer Events Mode",type:{name:"enum",enums:[{label:"Inherit",value:"inherit"},{label:"Explicit",value:"explicit"}]},default:"inherit",group:"Pointer Events",set(t){if(t==="inherit")this.removeStyle(["pointerEvents"]);else{let n="auto";this._internal.pointerEventsEnabled!==void 0&&(n=this._internal.pointerEventsEnabled?"auto":"none"),this.setStyle({pointerEvents:n})}}},pointerEventsEnabled:{index:404,displayName:"Pointer Events Enabled",type:"boolean",group:"Pointer Events",default:!0,set(t){this._internal.pointerEventsEnabled=!!t,this.setStyle({pointerEvents:this._internal.pointerEventsEnabled?"auto":"none"})}}}),addInputProps$2(e,{blockTouch:{index:450,displayName:"Block Pointer Events",group:"Pointer Events",type:"boolean"}}),addDynamicInputPorts(e,"pointerEventsMode = explicit",["pointerEventsEnabled"]),addOutputProps$2(e,{onClick:{displayName:"Click",group:"Events",type:"signal",propPath:"pointer"},pointerDown:{displayName:"Pointer Down",group:"Pointer Events",type:"signal",propPath:"pointer",props:{onMouseDown(){this.sendSignalOnOutput("pointerDown")},onTouchStart(){this.sendSignalOnOutput("pointerDown")}}},pointerUp:{displayName:"Pointer Up",group:"Pointer Events",type:"signal",propPath:"pointer",props:{onMouseUp(){this.sendSignalOnOutput("pointerUp")},onTouchEnd(){this.sendSignalOnOutput("pointerUp")},onTouchCancel(){this.sendSignalOnOutput("pointerUp")}}},pointerEnter:{displayName:"Pointer Enter",group:"Pointer Events",type:"signal",propPath:"pointer",props:{onMouseEnter(){this.sendSignalOnOutput("pointerEnter")}}},hoverStart:{displayName:"Hover Start",group:"Hover Events",type:"signal",propPath:"pointer",props:{onMouseOver(){this.sendSignalOnOutput("hoverStart"),this.setVisualStates(["hover"])}}},hoverEnd:{displayName:"Hover End",group:"Hover Events",type:"signal",propPath:"pointer",props:{onMouseLeave(){this.sendSignalOnOutput("hoverEnd"),this.setVisualStates([""])}}}}),addPointerEventsTooltips(e)},addDimensions(e,{defaultSizeMode:t="explicit",contentLabel:n="Content",useDimensionConstraints:o=!0}={}){let r="sizeMode = explicit OR sizeMode = contentHeight",s="sizeMode = explicit OR sizeMode = contentWidth";(t==="explicit"||t==="contentHeight")&&(r+=" OR sizeMode NOT SET"),(t==="explicit"||t==="contentWidth")&&(s+=" OR sizeMode NOT SET"),addDynamicInputPorts(e,r,["width"]),addDynamicInputPorts(e,s,["height"]),addInputProps$2(e,{sizeMode:{index:10,type:{name:"enum",enums:[{value:"explicit",label:"Explicit"},{value:"contentWidth",label:"Content Width"},{value:"contentHeight",label:"Content Height"},{value:"contentSize",label:"Content Size"}],allowEditOnly:!0,sizeComp:"mode"},group:"Dimensions",displayName:"Size Mode",default:t,allowVisualStates:!0},width:{index:11,group:"Dimensions",displayName:"Width",type:{name:"dimension",units:["%","px","vw","vh"],defaultUnit:"%"},default:100,allowVisualStates:!0,onChange(a){this.props.fixedWidth=a.isFixed}},height:{index:13,group:"Dimensions",displayName:"Height",type:{name:"dimension",units:["%","px","vw","vh"],defaultUnit:"%"},default:100,allowVisualStates:!0,onChange(a){this.props.fixedHeight=a.isFixed}}}),Noodl.deployed||addDimensionTooltips(e,n),o&&(addInputCss(e,{minWidth:{index:400,group:"Dimension Constraints",displayName:"Min Width",allowVisualStates:!0,type:{name:"number",units:["%","px","vw","vh"],defaultUnit:"%"}},maxWidth:{index:401,group:"Dimension Constraints",displayName:"Max Width",allowVisualStates:!0,type:{name:"number",units:["%","px","vw","vh"],defaultUnit:"%"}},minHeight:{index:402,group:"Dimension Constraints",displayName:"Min Height",allowVisualStates:!0,type:{name:"number",units:["%","px","vw","vh"],defaultUnit:"%"}},maxHeight:{index:403,group:"Dimension Constraints",displayName:"Max Height",allowVisualStates:!0,type:{name:"number",units:["%","px","vw","vh"],defaultUnit:"%"}}}),Noodl.deployed||addDimensionConstraintsTooltips(e))},_addCornerRadius(e,t){t=t||{};const n=t.defaults||{},o=t.styleTag;n.borderRadius||(n.borderRadius=0);function r(a,l,u,d){const p=b=>`${b} ${l?"("+l+")":""}`,f={group:"corners",tab:u,label:l},g=`border${l}Radius`;addInputs$1(a,{[g]:{index:240+d,displayName:"Corner Radius",editorName:p("Corner Radius"),group:"Corner Radius",type:{name:"number",units:["px","%"],defaultUnit:"px"},allowVisualStates:!0,default:n[g],tab:f,set(b){this._internal.borderRadius[g]=b.value===void 0?Number(b)+"px":b.value+b.unit,this._updateCornerRadii()}}})}r(e,"","corners-all",0),r(e,"TopLeft","corners-top-left",1),r(e,"TopRight","corners-top-right",2),r(e,"BottomRight","corners-bottom-right",3),r(e,"BottomLeft","corners-bottom-left",4),e.methods._updateCornerRadii=function(){const a=this._internal.borderRadius;function l(d,p){const f=`border${p}Radius`;d[f]=a[f]||a.borderRadius}const u={};l(u,"TopLeft"),l(u,"TopRight"),l(u,"BottomRight"),l(u,"BottomLeft"),this.setStyle(u,o)};const s=e.initialize;e.initialize=function(){s&&s.call(this),this._internal.borderRadius={...n},n.borderRadius&&this._updateCornerRadii()}},addBorderInputs(e,t){t=t||{};const n=t.defaults||{},o=t.styleTag;n.borderStyle===void 0&&(n.borderStyle="none"),n.borderWidth===void 0&&(n.borderWidth=2),n.borderColor===void 0&&(n.borderColor="#000000");function r(a,l,u,d){const p=`border${l}Style`,f=`border${l}Width`,g=`border${l}Color`;let b=n.borderStyle!=="none"?"OR borderStyle NOT SET":"";l?(n[p]&&n[p]!=="none"&&(b+=`OR ${p} NOT SET`),addDynamicInputPorts(a,`${p} = solid OR ${p} = dashed OR ${p} = dotted OR borderStyle = solid OR borderStyle = dashed OR borderStyle = dotted ${b}`,[`${f}`,`${g}`])):addDynamicInputPorts(a,`${p} = solid OR ${p} = dashed OR ${p} = dotted ${b}`,[`${f}`,`${g}`]);const _={group:"border-styles",tab:u,label:l},T=v=>`${v} ${l?"("+l+")":""}`,A=202+d*4;addInputs$1(a,{[p]:{index:A+1,displayName:"Border Style",editorName:T("Border Style"),group:"Border Style",allowVisualStates:!0,type:{name:"enum",enums:[{label:"None",value:"none"},{label:"Solid",value:"solid"},{label:"Dotted",value:"dotted"},{label:"Dashed",value:"dashed"}]},default:n[p],tab:_,set(v){this._internal.borders[p]=v,this._updateBorders()}},[f]:{index:A+2,displayName:"Border Width",editorName:T("Border Width"),group:"Border Style",allowVisualStates:!0,type:{name:"number",units:["px"],defaultUnit:"px"},default:n[f],tab:_,set(v){this._internal.borders[f]=v.value===void 0?Number(v)+"px":v.value+v.unit,this._updateBorders()}},[g]:{index:A+3,displayName:"Border Color",editorName:T("Border Color"),group:"Border Style",type:"color",default:n[g],allowVisualStates:!0,tab:_,set(v){this._internal.borders[g]=v,this._updateBorders()}}})}r(e,"","borders-all",0),r(e,"Left","borders-left",1),r(e,"Top","borders-top",2),r(e,"Right","borders-right",3),r(e,"Bottom","borders-bottom",4),e.methods._updateBorders=function(){const a=this._internal.borders;function l(d,p){const f=`border${p}Width`,g=`border${p}Color`,b=`border${p}Style`;d[f]=a[f]||a.borderWidth,d[g]=a[g]||a.borderColor,d[b]=a[b]||a.borderStyle}const u={};l(u,"Top"),l(u,"Right"),l(u,"Bottom"),l(u,"Left"),this.setStyle(u,o)};const s=e.initialize;e.initialize=function(){s&&s.call(this),this._internal.borders={...n},(n.borderStyle!=="none"||n.borderTopStyle&&n.borderTopStyle!=="none"||n.borderRightStyle&&n.borderRightStyle!=="none"||n.borderBottomStyle&&n.borderBottomStyle!=="none"||n.borderRightStyle&&n.borderRightStyle!=="none")&&this._updateBorders()},this._addCornerRadius(e,{defaults:n,styleTag:o})},addShadowInputs(e,t){t=t||{};const n=t.styleTag;addDynamicInputPorts(e,"boxShadowEnabled = true",["boxShadowOffsetX","boxShadowOffsetY","boxShadowInset","boxShadowBlurRadius","boxShadowSpreadRadius","boxShadowColor"]),addInputs$1(e,{boxShadowEnabled:{index:250,group:"Box Shadow",displayName:"Shadow Enabled",type:"boolean",default:!1,allowVisualStates:!0,set(r){this._internal.boxShadowEnabled=r,this._updateBoxShadow()}},boxShadowOffsetX:{index:251,group:"Box Shadow",displayName:"Offset X",default:0,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,set(r){this._internal.boxShadowOffsetX=r.value+r.unit,this._updateBoxShadow()}},boxShadowOffsetY:{index:252,group:"Box Shadow",displayName:"Offset Y",default:0,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,set(r){this._internal.boxShadowOffsetY=r.value+r.unit,this._updateBoxShadow()}},boxShadowBlurRadius:{index:253,group:"Box Shadow",displayName:"Blur Radius",default:5,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,set(r){this._internal.boxShadowBlurRadius=r.value+r.unit,this._updateBoxShadow()}},boxShadowSpreadRadius:{index:254,group:"Box Shadow",displayName:"Spread Radius",default:2,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,set(r){this._internal.boxShadowSpreadRadius=r.value+r.unit,this._updateBoxShadow()}},boxShadowInset:{index:255,group:"Box Shadow",displayName:"Inset",type:"boolean",default:!1,allowVisualStates:!0,set(r){this._internal.boxShadowInset=r,this._updateBoxShadow()}},boxShadowColor:{index:256,group:"Box Shadow",displayName:"Shadow Color",type:"color",default:"#00000033",allowVisualStates:!0,set(r){this._internal.boxShadowColor=r,this._updateBoxShadow()}}}),e.methods._updateBoxShadow=function(){const r=this._internal;r.boxShadowEnabled?this.setStyle({boxShadow:`${r.boxShadowInset?"inset ":""}${r.boxShadowOffsetX} ${r.boxShadowOffsetY} ${r.boxShadowBlurRadius} ${r.boxShadowSpreadRadius} ${r.boxShadowColor}`},n):this.removeStyle(["boxShadow"],n)};const o=e.initialize;e.initialize=function(){o&&o.call(this),this._internal.boxShadowOffsetX=0,this._internal.boxShadowOffsetY=0,this._internal.boxShadowBlurRadius="5px",this._internal.boxShadowSpreadRadius="2px",this._internal.boxShadowColor="#00000033"}},addIconInputs(e,t){t=t||{};const n=20,o={useIcon:!0,iconColor:"#FFFFFF"};t.defaults&&Object.assign(o,t.defaults);let r="useIcon = true";o.useIcon&&(r+=" OR useIcon NOT SET");const s=["iconSourceType","iconSize"];t.enableIconPlacement&&(s.push("iconPlacement"),s.push("iconSpacing")),addDynamicInputPorts(e,r,s),o.useIcon?(addDynamicInputPorts(e,"#js (params.useIcon===true || params.useIcon===undefined) && params.iconSourceType === 'image'",["iconImageSource"]),addDynamicInputPorts(e,"#js (params.useIcon===true || params.useIcon===undefined) && params.iconSourceType === 'icon'",["iconIconSource","iconColor"])):(addDynamicInputPorts(e,"useIcon = true AND iconSourceType = image",["iconImageSource"]),addDynamicInputPorts(e,"useIcon = true AND iconSourceType = icon",["iconIconSource","iconColor"])),t.hideEnableIconInput||addInputProps$2(e,{useIcon:{type:"boolean",group:"Icon",displayName:"Enable Icon",default:o.useIcon,allowVisualStates:!0,index:n}}),addInputProps$2(e,{iconSourceType:{type:{name:"enum",enums:[{label:"Image",value:"image"},{label:"Icon",value:"icon"}]},group:"Icon",displayName:"Type",default:"icon",allowVisualStates:!0,index:n+1},iconIconSource:{type:"icon",displayName:"Icon Source",group:"Icon",allowVisualStates:!0,index:n+3}}),addInputs$1(e,{iconImageSource:{type:"image",displayName:"Image Source",group:"Icon",allowVisualStates:!0,index:n+2,set(a){this.props.iconImageSource=getAbsoluteUrl(a)}}}),t.enableIconPlacement&&addInputProps$2(e,{iconSpacing:{group:"Icon",displayName:"Spacing",default:10,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,index:n+4},iconPlacement:{type:{name:"enum",enums:[{label:"Left",value:"left"},{label:"Right",value:"right"}]},group:"Icon",displayName:"Placement",default:"left",allowVisualStates:!0,index:n+5}}),addInputProps$2(e,{iconSize:{group:"Icon",displayName:"Size",default:16,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,index:n+6},iconColor:{group:"Icon",displayName:"Color",editorName:"Icon Color",default:o.iconColor,type:"color",allowVisualStates:!0,index:n+7}})},addLabelInputs(e,t){t=t||{};const n={useLabel:!1};t.defaults&&Object.assign(n,t.defaults);const o=n.useLabel?"useLabel = true OR useLabel NOT SET":"useLabel = true",r=t.styleTag||"",s=["label"].concat(["textStyle","fontFamily","fontSize","color","letterSpacing","lineHeight","textTransform"].map(a=>r+a));t.enableSpacing&&s.push("labelSpacing"),addDynamicInputPorts(e,o,s),addInputProps$2(e,{useLabel:{index:18,type:"boolean",displayName:"Enable Label",group:"Label",default:n.useLabel},label:{type:"string",displayName:"Label",group:"Label",default:"Label"}}),t.enableSpacing&&addInputProps$2(e,{labelSpacing:{displayName:"Spacing",group:"Label",type:{name:"number",units:["px"],defaultUnit:"px"},default:10}}),this.addTextStyleInputs(e,{...t,group:"Label Text Style",popout:{group:"label-text-style",label:"Text Style",parentGroup:"Label"}})},addTextStyleInputs(e,t){t=t||{};const n=t.group||"Text Style",o=t.styleTag,r=t.hasOwnProperty("portPrefix")?t.portPrefix:t.styleTag||"",s=r+"textStyle",a=t.portIndex!==void 0?t.portIndex:19;function l(d){return t.displayName?t.displayName+" "+d:d}addInputs$1(e,{[s]:{index:a,type:{name:"textStyle",childPorts:["fontFamily","fontSize","color","letterSpacing","lineHeight","textTransform"],childPortPrefix:r},group:n,displayName:"Text Style",editorName:l("Text Style"),default:"None",set(d){this.props[s]=this.context.styles.getTextStyle(d),this.forceUpdate()},allowVisualStates:!0,popout:t.popout},[r+"fontFamily"]:{index:a+1,type:{name:"font",parentPort:s},group:n,displayName:"Font Family",editorName:l("Font Family"),set(d){if(d){let p=d;p.split(".").length>1&&(FontLoader.instance.loadFont(p),p=p.replace(/\.[^/.]+$/,""),p=p.split("/").pop()),this.setStyle({fontFamily:p},o)}else this.removeStyle(["fontFamily"],o);this.props[s]&&this.forceUpdate()},allowVisualStates:!0,popout:t.popout}}),addInputCss(e,{[r+"fontSize"]:{index:a+2,group:n,displayName:"Font Size",editorName:l("Font Size"),targetStyleProperty:"fontSize",type:{name:"number",units:["px"],defaultUnit:"px",parentPort:s},onChange(){this.props[s]&&this.forceUpdate()},allowVisualStates:!0,popout:t.popout,styleTag:o},[r+"color"]:{index:a+3,type:{name:"color",parentPort:s},displayName:"Color",editorName:l("Color"),group:n,targetStyleProperty:"color",allowVisualStates:!0,popout:t.popout,styleTag:o,onChange(){this.props[s]&&this.forceUpdate()}},[r+"letterSpacing"]:{index:a+4,group:n,displayName:"Letter Spacing",editorName:l("Letter Spacing"),targetStyleProperty:"letterSpacing",type:{name:"number",units:["px","em"],defaultUnit:"px"},allowVisualStates:!0,popout:t.popout,styleTag:o,default:"Auto",applyDefault:!1,onChange(){this.props[s]&&this.forceUpdate()}},[r+"lineHeight"]:{index:a+5,group:n,displayName:"Line Height",editorName:l("Line Height"),targetStyleProperty:"lineHeight",type:{name:"number",units:["","px","%"],defaultUnit:"",parentPort:s},allowVisualStates:!0,onChange(){this.props[s]&&this.forceUpdate()},popout:t.popout,styleTag:o,default:"Auto",applyDefault:!1},[r+"textTransform"]:{index:a+6,group:n,displayName:"Case",editorName:l("Case"),applyDefault:!1,targetStyleProperty:"textTransform",type:{name:"enum",enums:[{label:"None",value:"none"},{label:"Uppercase",value:"uppercase"},{label:"Lowercase",value:"lowercase"},{label:"Capitalize",value:"capitalize"}],parentPort:s},default:"none",popout:t.popout,styleTag:o,allowVisualStates:!0,onChange(){this.props[s]&&this.forceUpdate()}}});const u=r+"fontFamily";e.setup=function(d,p){p.on("nodeAdded."+e.name,function(f){f.parameters[u]&&f.parameters[u].split(".").length>1&&FontLoader.instance.loadFont(f.parameters[u]),f.on("parameterUpdated",function(g){g.name===u&&g.value&&g.value.split(".").length>1&&FontLoader.instance.loadFont(g.value)})})}}};function addDimensionTooltips(e,t){e.inputProps.sizeMode.tooltip={explicit:{standard:"Explicit width & height",extended:createTooltip({title:"Explicit width & height",body:"Set width & height explicitly in pixels(px), percentage(%) or viewport size(vh/vw).",images:[{src:"size-mode-explicit.svg"}]})},contentWidth:{standard:`${t} width & explicit height`,extended:createTooltip({title:`${t} width & explicit height`,body:`The width will match the width of the ${t.toLowerCase()}. Height is set explicitly.`,images:[{src:"size-mode-content-width.svg"}]})},contentHeight:{standard:`Explicit width & ${t.toLowerCase()} height`,extended:createTooltip({title:`Explicit width & ${t.toLowerCase()} height`,body:`The width is set explicitly. The height will match the height of the ${t.toLowerCase()}`,images:[{src:"size-mode-content-height.svg"}]})},contentSize:{standard:`${t} width & height`,extended:createTooltip({title:`${t} width & height`,body:`The width and height will match the size of the ${t.toLowerCase()}`,images:[{src:"size-mode-content-size.svg"}]})}};const n=["- %: Relative to parents size. If 'fixed' is false this element will resize to share space with siblings. If 'Clip Content' is disabled, it'll also expand to fit the boundaries of all its content","- px: Pixels","- vw: Relative to viewport width. 100 makes the element the same width as the screen","- vh: Relative to viewport height. 100 makes the element the same height as the screen"],o=createTooltip({title:"Fixed",body:["- Enabled: Elements will be the exact size set","- Disabled: Element will resize to fill up empty space, or shrink to make space for siblings. Use the dimension constraints, min and max size, to control the boundaries"]});e.inputProps.width.tooltip={dimension:createTooltip({title:"Width",body:n}),fixed:o},e.inputProps.height.tooltip={dimension:createTooltip({title:"Height",body:n}),fixed:o}}function addDimensionConstraintsTooltips(e){e.inputCss.minWidth.tooltip=createTooltip({title:"Minimum width",body:"This is prioritized over other properties, so the element won't shrink below this size"}),e.inputCss.minHeight.tooltip=createTooltip({title:"Minimum height",body:"This is prioritized over other properties, so the element won't shrink below this size"}),e.inputCss.maxWidth.tooltip=createTooltip({title:"Maximum width",body:"This is prioritized over other properties, so the element won't grow beyond this size"}),e.inputCss.maxHeight.tooltip=createTooltip({title:"Maximum height",body:"This is prioritized over other properties, so the element won't grow beyond this size"})}function addPointerEventsTooltips(e){e.inputs.pointerEventsMode.tooltip=createTooltip({title:"Pointer events mode",body:["Control if mouse and touch events are enabled on this node","- Inherit: Same settings as parent","- Explicit: Enable control on this element"]}),e.inputs.pointerEventsEnabled.tooltip=createTooltip({title:"Pointer events enabled",body:["- Enabled: This element will receive mouse and touch events","- Disabled: No mouse or touch events will be captured by this element and the element below will receive it instead"]})}function addPositionAndAlignTooltips(e){e.inputCss.position.tooltip=createTooltip({title:"Position",images:[{label:"Relative",body:"Relative to its siblings",src:"position-relative.svg"},{label:"Absolute",body:"Not affected by siblings or parent's layout",src:"position-absolute.svg"},{label:"Sticky",body:"Stick to parent's edge on overflow",src:"position-sticky.svg"},{label:"Fixed",body:"Always stay in the same place and take no space in the layout",src:"position-sticky.svg"}]})}var bezierEasing,hasRequiredBezierEasing;function requireBezierEasing(){if(hasRequiredBezierEasing)return bezierEasing;hasRequiredBezierEasing=1;var e=4,t=.001,n=1e-7,o=10,r=11,s=1/(r-1),a=typeof Float32Array=="function";function l(T,A){return 1-3*A+3*T}function u(T,A){return 3*A-6*T}function d(T){return 3*T}function p(T,A,v){return((l(A,v)*T+u(A,v))*T+d(A))*T}function f(T,A,v){return 3*l(A,v)*T*T+2*u(A,v)*T+d(A)}function g(T,A,v,I,k){var N,w,E=0;do w=A+(v-A)/2,N=p(w,I,k)-T,N>0?v=w:A=w;while(Math.abs(N)>n&&++E<o);return w}function b(T,A,v,I){for(var k=0;k<e;++k){var N=f(A,v,I);if(N===0)return A;var w=p(A,v,I)-T;A-=w/N}return A}function _(T,A,v,I){if(arguments.length===4)return new _([T,A,v,I]);if(!(this instanceof _))return new _(T);if(!T||T.length!==4)throw new Error("BezierEasing: points must contains 4 values");for(var k=0;k<4;++k)if(typeof T[k]!="number"||isNaN(T[k])||!isFinite(T[k]))throw new Error("BezierEasing: points should be integers.");if(T[0]<0||T[0]>1||T[2]<0||T[2]>1)throw new Error("BezierEasing x values must be in [0, 1] range.");this._str="BezierEasing("+T+")",this._css="cubic-bezier("+T+")",this._p=T,this._mSampleValues=a?new Float32Array(r):new Array(r),this._precomputed=!1,this.get=this.get.bind(this)}return _.prototype={get:function(T){var A=this._p[0],v=this._p[1],I=this._p[2],k=this._p[3];return this._precomputed||this._precompute(),A===v&&I===k?T:T===0?0:T===1?1:p(this._getTForX(T),v,k)},getPoints:function(){return this._p},toString:function(){return this._str},toCSS:function(){return this._css},_precompute:function(){var T=this._p[0],A=this._p[1],v=this._p[2],I=this._p[3];this._precomputed=!0,(T!==A||v!==I)&&this._calcSampleValues()},_calcSampleValues:function(){for(var T=this._p[0],A=this._p[2],v=0;v<r;++v)this._mSampleValues[v]=p(v*s,T,A)},_getTForX:function(T){for(var A=this._p[0],v=this._p[2],I=this._mSampleValues,k=0,N=1,w=r-1;N!==w&&I[N]<=T;++N)k+=s;--N;var E=(T-I[N])/(I[N+1]-I[N]),F=k+E*s,L=f(F,A,v);return L>=t?b(T,F,A,v):L===0?F:g(T,k,k+s,A,v)}},_.css={ease:_.ease=_(.25,.1,.25,1),linear:_.linear=_(0,0,1,1),"ease-in":_.easeIn=_(.42,0,1,1),"ease-out":_.easeOut=_(0,0,.58,1),"ease-in-out":_.easeInOut=_(.42,0,.58,1)},bezierEasing=_,bezierEasing}var bezierEasingExports=requireBezierEasing();const BezierEasing=getDefaultExportFromCjs(bezierEasingExports);var EaseCurves={easeOutQuartic:function(e,t,n){return n--,-(t-e)*(n*n*n*n-1)+e},easeInQuartic:function(e,t,n){return(t-e)*(n*n*n*n)+e},easeInOutQuartic:function(e,t,n){return n*=2,n<1?(t-e)/2*n*n*n*n+e:(n-=2,-(t-e)/2*(n*n*n*n-2)+e)},easeOutCubic:function(e,t,n){return n--,(t-e)*(n*n*n+1)+e},easeInCubic:function(e,t,n){return(t-e)*(n*n*n)+e},easeInOutCubic:function(e,t,n){return n*=2,n<1?(t-e)/2*n*n*n+e:(n-=2,(t-e)/2*(n*n*n+2)+e)},easeOutQuadratic:function(e,t,n){return-(t-e)*n*(n-2)+e},easeInQuadratic:function(e,t,n){return(t-e)*(n*n)+e},easeInOutQuadratic:function(e,t,n){return n*=2,n<1?(t-e)/2*n*n+e:(n-=1,-(t-e)/2*(n*(n-2)-1)+e)},linear:function(e,t,n){return e+(t-e)*n}};EaseCurves.easeIn=EaseCurves.easeInCubic,EaseCurves.easeOut=EaseCurves.easeOutCubic,EaseCurves.easeInOut=EaseCurves.easeInOutCubic;function transitionParameter(e,t,n,o){e._transitions&&e._transitions[t]&&(e._transitions[t].stop(),delete e._transitions[t]);const r=e.getInputValue(t),s=e.getInput(t);let a;if(s&&s.type==="color"?a=colorAnimation(e.context.styles.resolveColor(r),e.context.styles.resolveColor(n)):typeof r=="number"&&typeof n=="number"?a=numberAnimation(r,n):typeof r=="object"&&r.hasOwnProperty("value")&&typeof n=="object"&&n.hasOwnProperty("value")&&(a=numberAnimation(r.value,n.value)),a){e._transitions||(e._transitions={});const l=BezierEasing(o.curve);e._transitions[t]=e.context.timerScheduler.createTimer({duration:o.dur,onRunning:u=>{const d=a(l.get(u));e.queueInput(t,d)},onFinish:()=>{delete e._transitions[t]}}),e._transitions[t].start()}else e.queueInput(t,n)}function numberAnimation(e,t){return n=>EaseCurves.linear(e,t,n)}function setRGBA$1(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$2(e){var t=e.toString(16);return t.length==1?"0"+t:t}function rgbaToHex$1(e){return"#"+componentToHex$2(e[0])+componentToHex$2(e[1])+componentToHex$2(e[2])+componentToHex$2(e[3])}function colorAnimation(e,t){const n=[0,0,0,255];setRGBA$1(n,e);const o=[0,0,0,255];setRGBA$1(o,t),(!e||e==="transparent")&&(n[0]=o[0],n[1]=o[1],n[2]=o[2]),(!t||t==="transparent")&&(o[0]=n[0],o[1]=n[1],o[2]=n[2]);const r=[0,0,0,0];return s=>(r[0]=Math.floor(EaseCurves.linear(n[0],o[0],s)),r[1]=Math.floor(EaseCurves.linear(n[1],o[1],s)),r[2]=Math.floor(EaseCurves.linear(n[2],o[2],s)),r[3]=Math.floor(EaseCurves.linear(n[3],o[3],s)),rgbaToHex$1(r))}function isPercentage$1(e){return e&&e[e.length-1]==="%"}function getPercentage(e){return Number(e.slice(0,-1))}function getSizeWithMargins(e,t,n){if(!t&&!n)return e;let o=`calc(${e}`;return t&&(o+=` - ${t}`),n&&(o+=` - ${n}`),o+=")",o}const Layout={size(e,t){t.parentLayout==="none"&&(e.position="absolute"),t.sizeMode==="explicit"?(e.width=t.width,e.height=t.height):t.sizeMode==="contentHeight"?e.width=t.width:t.sizeMode==="contentWidth"&&(e.height=t.height),e.flexShrink=0,t.parentLayout==="row"&&e.position==="relative"?(isPercentage$1(e.width)&&!t.fixedWidth&&(e.flexGrow=getPercentage(e.width),e.flexShrink=1),isPercentage$1(e.height)&&!t.fixedHeight&&(e.height=getSizeWithMargins(e.height,e.marginTop,e.marginBottom))):t.parentLayout==="column"&&e.position==="relative"?(isPercentage$1(e.width)&&!t.fixedWidth&&(e.width=getSizeWithMargins(e.width,e.marginLeft,e.marginRight)),isPercentage$1(e.height)&&!t.fixedHeight&&(e.flexGrow=getPercentage(e.height),e.flexShrink=1)):e.position!=="relative"&&(isPercentage$1(e.width)&&(e.width=getSizeWithMargins(e.width,e.marginLeft,e.marginRight)),isPercentage$1(e.height)&&(e.height=getSizeWithMargins(e.height,e.marginTop,e.marginBottom)))},align(e,t){const{position:n}=e;let{alignX:o,alignY:r}=t;n!=="relative"&&(o=o||"left",r=r||"top");let s="";const a=t.parentLayout||"column";if(o){if(n!=="relative")o==="left"?e.left=0:o==="center"?(e.left="50%",s+="translateX(-50%) "):e.right=0;else if(n==="relative"&&a==="row")switch(o){case"left":e.marginRight=e.marginRight?e.marginRight:"auto";break;case"center":e.marginRight=e.marginRight?e.marginRight:"auto",e.marginLeft=e.marginLeft?e.marginLeft:"auto";break;case"right":e.marginLeft=e.marginLeft?e.marginLeft:"auto";break}else if(n==="relative"&&a==="column")switch(o){case"left":e.alignSelf="flex-start";break;case"center":e.alignSelf="center";break;case"right":e.alignSelf="flex-end";break}}if(r){if(n!=="relative")r==="top"?e.top=0:r==="center"?(e.top="50%",s+="translateY(-50%)"):e.bottom=0;else if(n==="relative"&&a==="column")switch(r){case"top":e.marginBottom=e.marginBottom?e.marginBottom:"auto";break;case"center":e.marginTop=e.marginTop?e.marginTop:"auto",e.marginBottom=e.marginBottom?e.marginBottom:"auto";break;case"bottom":e.marginTop=e.marginTop?e.marginTop:"auto";break}else if(n==="relative"&&a==="row")switch(r){case"top":e.alignSelf="flex-start";break;case"center":e.alignSelf="center";break;case"bottom":e.alignSelf="flex-end";break}}s&&(e.transform=s+(e.transform||""))}};class NoodlReactComponent extends React.Component{componentDidMount(){this.props.noodlNode.sendSignalOnOutput("didMount")}componentWillUnmount(){this.props.noodlNode.sendSignalOnOutput("willUnmount");const t=this.props.noodlNode;if(t.currentVisualStates){const n=["hover","pressed","focused"],o=t.currentVisualStates.filter(r=>!n.includes(r));t.setVisualStates(o)}}render(){const{noodlNode:t,style:n,...o}=this.props;let r=t.style;n&&(r={...t.style,...n});const s={ref:a=>{t.innerReactComponentRef=a},style:r,...t.props,...o};if(t.noodlNodeAsProp){s.noodlNode=t;const a=t.getVisualParentNode();a&&a.props.layout&&(s.parentLayout=a.props.layout)}return t.renderedAtFrame=t.context.frameNumber,t.useFrame&&(s.textStyle!==void 0&&(s.style=r=Object.assign({},s.textStyle,r)),Layout.size(r,s),Layout.align(r,s)),React.createElement(t.reactComponent,s,t.renderChildren())}}function addOutputPropHandler(e,t,n){const o=n?e.props[n]:e.props;for(const r in t)if(o[r]){const s=o[r];o[r]=()=>{s(),t[r].call(e)}}else o[r]=t[r].bind(e);e.forceUpdate()}function addPrimitiveOutputPropHandler(e,t,n){let o;n.type==="signal"?o=()=>{e.sendSignalOnOutput(t)}:o=(...r)=>{e.outputPropValues[t]=n.getValue?n.getValue.call(e,...r):r[0],e.flagOutputDirty(t),n.onChange&&n.onChange.call(e,e.outputPropValues[t])},addOutputPropHandler(e,{[t]:o},n.propPath)}function defineRegularInputProp(e,t){if(!e.type)throw new Error(`input ${t} is missing a type`);e.type.units?e.set=function(n){const o=e.propPath?this.props[e.propPath]:this.props;n&&n.value!==void 0?o[t]=n.value+n.unit:delete o[t],e.onChange&&e.onChange.call(this,n),this.forceUpdate()}:e.set=function(n){const o=e.propPath?this.props[e.propPath]:this.props;n!==void 0?o[t]=n:delete o[t],e.onChange&&e.onChange.call(this,n),this.forceUpdate()}}function flattenArray(e,t){for(const n of t)Array.isArray(n)?flattenArray(e,n):n!==void 0&&e.push(n)}function setStylesOnDOMNode(e,t,n){let o=e;if(n&&o.getAttribute("noodl-style-tag")!==n&&(o=e.querySelector(`[noodl-style-tag=${n}]`)),!!o)for(const r in t)o.style[r]=t[r]}let reactKeyCounter=0;function createNodeFromReactComponent(e){const{frame:t}=e;t!==void 0&&(t.dimensions&&NodeSharedPortDefinitions.addDimensions(e,typeof t.dimensions=="object"?t.dimensions:void 0),t.position&&NodeSharedPortDefinitions.addTransformInputs(e),t.margins&&NodeSharedPortDefinitions.addMarginInputs(e),t.padding&&NodeSharedPortDefinitions.addPaddingInputs(e),t.align&&NodeSharedPortDefinitions.addAlignInputs(e));const{initialize:n,inputs:o,inputProps:r,inputCss:s,outputs:a,outputProps:l,dynamicports:u,defaultCss:d={},methods:p}=e,f=Object.assign({},d),g={};for(const v in s){const I=s[v],k=I.hasOwnProperty("default")&&I.applyDefault!==!1;if(I.styleTag&&!g.hasOwnProperty(I.styleTag)&&(g[I.styleTag]={}),k){const N=I.type.units?I.default+I.type.defaultUnit:I.default;I.styleTag?g[I.styleTag][v]=N:f[v]=N}}function b(v,I){this.clientBoundingRect=I,v==="x"?this.flagOutputDirty("screenPositionX"):v==="y"?this.flagOutputDirty("screenPositionY"):v==="width"?this.flagOutputDirty("boundingWidth"):v==="height"&&this.flagOutputDirty("boundingHeight")}const _=e.useVariants!==void 0?e.useVariants:!0,T={name:e.name,docs:e.docs,displayNodeName:e.displayNodeName||e.displayName,shortDesc:"",category:"Visual",allowChildren:e.allowChildren===void 0?!0:e.allowChildren,visualStates:e.visualStates,allowAsExportRoot:e.allowAsExportRoot,singleton:e.singleton,useVariants:_,usePortAsLabel:e.usePortAsLabel,portLabelTruncationMode:e.portLabelTruncationMode,connectionPanel:e.connectionPanel,nodeDoubleClickAction:e.nodeDoubleClickAction,initialize(){this.reactKey="key"+reactKeyCounter,reactKeyCounter++,this.children=[],A&&(this.childrenCount=0),this.props={styles:{}},this.outputPropValues={},this.style=Object.assign({},f);for(const I in g)this.props.styles[I]=Object.assign({},g[I]);this.childIndex=0,this.clientBoundingRect={},this.noodlNodeAsProp=!!e.noodlNodeAsProp;const v=this.context&&this.context.runningInCanvas?300:0;this.boundingBoxObserver=new DOMBoundingBoxObserver(b.bind(this),v),this.wantsToBeMounted=!0,this.useFrame=!!t;for(const I in r){const k=r[I];k.propPath&&!this.props.hasOwnProperty(k.propPath)&&(this.props[k.propPath]={});const N=k.propPath?this.props[k.propPath]:this.props;k.hasOwnProperty("default")&&(k.type.defaultUnit&&k.default!==void 0?N[I]=k.default+k.type.defaultUnit:N[I]=k.default)}for(const I in l){const k=l[I];k.propPath&&!this.props.hasOwnProperty(k.propPath)&&(this.props[k.propPath]={}),k.props?addOutputPropHandler(this,k.props,k.propPath):addPrimitiveOutputPropHandler(this,I,k)}this.reactComponentRef=null,this.reactComponent=e.getReactComponent.call(this),n&&n.call(this)},getInspectInfo:e.getInspectInfo,nodeScopeDidInitialize:e.nodeScopeDidInitialize,dynamicports:u,inputs:{cssClassName:{index:100010,displayName:"CSS Class",group:"Advanced HTML",type:"string",default:"",set(v){this.props.className=v,this.forceUpdate()}},styleCss:{index:100011,displayName:"CSS Style",group:"Advanced HTML",type:{name:"string",codeeditor:"text",allowEditOnly:!0},default:"/* background-color: red; */",set(v){this.updateAdvancedStyle({content:v})}}},outputs:{childIndex:{displayName:"Child Index",type:"number",get(){return this.childIndex}},this:{displayName:"This",type:"reference",get(){return this}},screenPositionX:{group:"Bounding Box",displayName:"Screen Position X",type:"number",get(){return this.clientBoundingRect.x},onFirstConnectionAdded(){this.boundingBoxObserver.addObserver()},onLastConnectionRemoved(){this.boundingBoxObserver.removeObserver()}},screenPositionY:{group:"Bounding Box",displayName:"Screen Position Y",type:"number",get(){return this.clientBoundingRect.y},onFirstConnectionAdded(){this.boundingBoxObserver.addObserver()},onLastConnectionRemoved(){this.boundingBoxObserver.removeObserver()}},boundingWidth:{group:"Bounding Box",displayName:"Width",type:"number",get(){return this.clientBoundingRect.width},onFirstConnectionAdded(){this.boundingBoxObserver.addObserver()},onLastConnectionRemoved(){this.boundingBoxObserver.removeObserver()}},boundingHeight:{group:"Bounding Box",displayName:"Height",type:"number",get(){return this.clientBoundingRect.height},onFirstConnectionAdded(){this.boundingBoxObserver.addObserver()},onLastConnectionRemoved(){this.boundingBoxObserver.removeObserver()}},didMount:{group:"Mounted",displayName:"Did Mount",type:"signal"},willUnmount:{group:"Mounted",displayName:"Will Unmount",type:"signal"}},methods:{updateAdvancedStyle(v){this.customCssStyles&&(this.removeStyle(Object.keys(this.customCssStyles)),this.customCssStyles=void 0);let I,k="",N=(v.content||"").replace(`
23
+ `;function updatePorts$6$1(e,t,n,o){var r=[];const s=o.getMetaData("dbCollections"),a=o.getMetaData("systemCollections"),l=[{label:"User",value:"_User"},{label:"Role",value:"_Role"}];if(r.push({name:"collectionName",type:{name:"enum",enums:l.concat(s!==void 0?s.map(f=>({value:f.name,label:f.name})):[]),allowEditOnly:!0},displayName:"Class",plug:"input",group:"General"}),r.push({name:"storageFilterType",type:{name:"enum",allowEditOnly:!0,enums:[{value:"simple",label:"Visual"},{value:"json",label:"Javascript"}]},displayName:"Filter",default:"simple",plug:"input",group:"General"}),r.push({type:"boolean",plug:"input",group:"Limit",name:"storageEnableLimit",displayName:"Use limit"}),t.storageEnableLimit&&(r.push({type:"number",default:10,plug:"input",group:"Limit",name:"storageLimit",displayName:"Limit"}),r.push({type:"number",default:0,plug:"input",group:"Limit",name:"storageSkip",displayName:"Skip"})),r.push({type:"signal",plug:"input",group:"Actions",name:"storageFetch",displayName:"Do"}),r.push({type:"boolean",plug:"input",group:"Total Count",name:"storageEnableCount",displayName:"Fetch total count"}),t.storageEnableCount&&r.push({type:"number",plug:"output",group:"General",name:"storageTotalCount",displayName:"Total Count"}),t.storageFilterType===void 0||t.storageFilterType==="simple"){if(t.collectionName!==void 0){var u=s&&s.find(f=>f.name===t.collectionName);if(u===void 0&&a&&(u=a.find(f=>f.name===t.collectionName)),u&&u.schema&&u.schema.properties){let f=function(b){if(b.schema!==void 0&&b.schema.properties!==void 0)for(var _ in b.schema.properties){var T=b.schema.properties[_];T.type==="Relation"&&T.targetClass===t.collectionName&&(g.relations===void 0&&(g.relations={}),g.relations[b.name]===void 0&&(g.relations[b.name]=[]),g.relations[b.name].push({property:_}))}};const g=JSON.parse(JSON.stringify(u.schema));s&&s.forEach(f),a&&a.forEach(f),r.push({name:"visualFilter",plug:"input",type:{name:"query-filter",schema:g,allowEditOnly:!0},displayName:"Filter",group:"Filter"}),r.push({name:"visualSort",plug:"input",type:{name:"query-sorting",schema:g,allowEditOnly:!0},displayName:"Sort",group:"Sorting"})}if(t.visualFilter!==void 0){let f=function(b){b!==void 0&&(b.rules!==void 0?b.rules.forEach(_=>f(_)):b.input!==void 0&&(g[b.input]=!0))};const g={};f(t.visualFilter),Object.keys(g).forEach(b=>{r.push({name:"qp-"+b,plug:"input",type:"*",displayName:b,group:"Query Parameters"})})}}}else if(t.storageFilterType==="json"){r.push({type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},plug:"input",group:"Filter",name:"storageJSONFilter",default:_defaultJSONQuery$1,displayName:"Filter"});var d=t.storageJSONFilter;if(d){d=d.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,"");var h=d.match(/\$[A-Za-z0-9]+/g);if(h){const f={};h.forEach(g=>{f[g]=!0}),Object.keys(f).forEach(g=>{r.push({name:"storageFilterValue-"+g.substring(1),displayName:g.substring(1),group:"Filter Values",plug:"input",type:{name:"*",allowConnectionsOnly:!0}})})}JavascriptNodeParser.parseAndAddPortsFromScript(d,r,{inputPrefix:"storageFilterValue-",inputGroup:"Filter Values",inputType:{name:"*",allowConnectionsOnly:!0},skipOutputs:!0})}}n.sendDynamicPorts(e,r)}const DbCollectionNode2={node:DbCollectionNode$2,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$6$1(o.id,o.parameters,e.editorConnection,t),o.on("parameterUpdated",function(r){(r.name.startsWith("storage")||r.name==="visualFilter"||r.name==="collectionName")&&updatePorts$6$1(o.id,o.parameters,e.editorConnection,t)}),t.on("metadataChanged.dbCollections",function(r){CloudStore.invalidateCollections(),updatePorts$6$1(o.id,o.parameters,e.editorConnection,t)}),t.on("metadataChanged.systemCollections",function(r){CloudStore.invalidateCollections(),updatePorts$6$1(o.id,o.parameters,e.editorConnection,t)}),t.on("metadataChanged.cloudservices",function(r){CloudStore.instance._initCloudServices()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.DbCollection2",function(o){n(o)});for(const o of t.getNodesWithType("DbCollection2"))n(o)})}},ModelNodeDefinition$1$1={name:"DbModel2",docs:"https://docs.noodl.net/nodes/data/cloud-data/record",displayNodeName:"Record",shortDesc:"Database model",category:"Cloud Services",usePortAsLabel:"collectionName",color:"data",dynamicports:[{name:"conditionalports/extended",condition:"idSource = explicit OR idSource NOT SET",inputs:["modelId"]}],initialize(){const e=this._internal;e.inputValues={},e.relationModelIds={};const t=this;this._internal.onModelChangedCallback=function(n){t.isInputConnected("fetch")||(t.hasOutput("prop-"+n.name)&&t.flagOutputDirty("prop-"+n.name),t.hasOutput("changed-"+n.name)&&t.sendSignalOnOutput("changed-"+n.name),t.sendSignalOnOutput("changed"))}},getInspectInfo(){const e=this._internal.model;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:e.data}]:"[No Record]"},outputs:{id:{type:"string",displayName:"Id",group:"General",getter(){return this._internal.model?this._internal.model.getId():this._internal.modelId}},fetched:{type:"signal",displayName:"Fetched",group:"Events"},changed:{type:"signal",displayName:"Changed",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},inputs:{idSource:{type:{name:"enum",enums:[{label:"Specify explicitly",value:"explicit"},{label:"From repeater",value:"foreach"}],allowEditOnly:!0},default:"explicit",displayName:"Id Source",group:"General",set(e){e==="foreach"&&this.scheduleAfterInputsHaveUpdated(()=>{for(var t=this.nodeScope.componentOwner;t!==void 0&&t._forEachModel===void 0&&t.parentNodeScope;)t=t.parentNodeScope.componentOwner;this.setModel(t!==void 0?t._forEachModel:void 0)})}},modelId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Id",group:"General",set(e){e instanceof Model?e=e.getId():typeof e=="object"&&(e=Model.create(e).getId()),this._internal.modelId=e,this.isInputConnected("fetch")===!1?this.setModelID(e):this.flagOutputDirty("id")}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleFetch()}}},methods:{setCollectionID(e){this._internal.collectionId=e},setModelID(e){var t=(this.nodeScope.modelScope||Model).get(e);this.setModel(t)},setModel(e){this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback),this._internal.model=e,this.flagOutputDirty("id"),e.on("change",this._internal.onModelChangedCallback);for(var t in e.data)this.hasOutput("prop-"+t)&&this.flagOutputDirty("prop-"+t);this.sendSignalOnOutput("fetched")},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},scheduleOnce(e,t){const n=this,o="hasScheduled"+e;this._internal[o]||(this._internal[o]=!0,this.scheduleAfterInputsHaveUpdated(function(){n._internal[o]=!1,t()}))},setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning")},scheduleFetch(){const e=this,t=this._internal;this.scheduleOnce("Fetch",function(){if(t.modelId===void 0||t.modelId===""){e.setError("Missing Id.");return}const n=CloudStore.forScope(e.nodeScope.modelScope);n.fetch({collection:t.collectionId,objectId:t.modelId,success(o){const r=n._fromJSON(o,t.collectionId);t.model!==r&&(t.model&&t.model.off("change",t.onModelChangedCallback),t.model=r,r.on("change",t.onModelChangedCallback)),e.flagOutputDirty("id"),delete o.objectId;for(const s in o)e.hasOutput("prop-"+s)&&e.flagOutputDirty("prop-"+s);e.sendSignalOnOutput("fetched")},error(o){e.setError(o||"Failed to fetch.")}})})},scheduleStore(){var e=this._internal;e.model&&this.scheduleOnce("Store",function(){for(var t in e.inputValues)e.model.set(t,e.inputValues[t],{resolve:!0})})},registerOutputIfNeeded(e){this.hasOutput(e)||e.startsWith("prop-")&&this.registerOutput(e,{getter:userOutputGetter$1$1.bind(this,e.substring(5))})},registerInputIfNeeded(e){if(this.hasInput(e))return;const t={};if(t[e])return this.registerInput(e,{set:createSetter({valueChangedToTrue:t[e]})});const n={collectionName:this.setCollectionID.bind(this)};if(n[e])return this.registerInput(e,{set:n[e]});e.startsWith("prop-")&&this.registerInput(e,{set:userInputSetter$3$1.bind(this,e.substring(5))})}}};function userOutputGetter$1$1(e){return this._internal.model?this._internal.model.get(e,{resolve:!0}):void 0}function userInputSetter$3$1(e,t){this._internal.inputValues[e]=t}function updatePorts$5$1(e,t,n,o){var r=[];const s=o.getMetaData("dbCollections"),a=o.getMetaData("systemCollections"),l=[{label:"User",value:"_User"},{label:"Role",value:"_Role"}];if(r.push({name:"collectionName",displayName:"Class",group:"General",type:{name:"enum",enums:l.concat(s!==void 0?s.map(g=>({value:g.name,label:g.name})):[]),allowEditOnly:!0},plug:"input"}),t.collectionName&&s){var u=s.find(g=>g.name===t.collectionName);if(u===void 0&&a&&(u=a.find(g=>g.name===t.collectionName)),u&&u.schema&&u.schema.properties){var d=u.schema.properties;for(var h in d){var f=d[h];if(!r.find(g=>g.name===h)&&f.type!=="Relation"){const g={String:"string",Boolean:"boolean",Number:"number",Date:"date"};r.push({type:{name:g[f.type]?g[f.type]:"*"},plug:"output",group:"Properties",name:"prop-"+h,displayName:h}),r.push({type:"signal",plug:"output",group:"Changed Events",displayName:h+" Changed",name:"changed-"+h})}}}}n.sendDynamicPorts(e,r)}const DbModelNode2={node:ModelNodeDefinition$1$1,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$5$1(o.id,o.parameters,e.editorConnection,t),o.on("parameterUpdated",function(){updatePorts$5$1(o.id,o.parameters,e.editorConnection,t)}),t.on("metadataChanged.dbCollections",function(){CloudStore.invalidateCollections(),updatePorts$5$1(o.id,o.parameters,e.editorConnection,t)}),t.on("metadataChanged.systemCollections",function(){CloudStore.invalidateCollections(),updatePorts$5$1(o.id,o.parameters,e.editorConnection,t)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.DbModel2",function(o){n(o)});for(const o of t.getNodesWithType("DbModel2"))n(o)})}};function addBaseInfo$1(e,t){const n=t===void 0||t.includeInputProperties,o=t!==void 0&&t.includeRelations;Object.assign(e.node,{category:"Data",color:"data",inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),Object.assign(e.node.outputs,{failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}}),Object.assign(e.node.methods,{scheduleOnce(r,s){const a=this,l="hasScheduled"+r;this._internal[l]||(this._internal[l]=!0,this.scheduleAfterInputsHaveUpdated(function(){a._internal[l]=!1,s()}))},checkWarningsBeforeCloudOp(){return this.clearWarnings(),this._internal.collectionId?!0:(this.setError("No class name specified"),!1)},setError(r){this._internal.error=r,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning",{message:r,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning")}}),Object.assign(e,{setup(r,s){if(!r.editorConnection||!r.editorConnection.isRunningLocally())return;function a(l){function u(){var d=[];const h=s.getMetaData("dbCollections"),f=s.getMetaData("systemCollections"),g=[{label:"User",value:"_User"},{label:"Role",value:"_Role"}],b=l.parameters;if(d.push({name:"collectionName",displayName:"Class",group:"General",type:{name:"enum",enums:g.concat(h!==void 0?h.map(I=>({value:I.name,label:I.name})):[]),allowEditOnly:!0},plug:"input"}),o&&b.collectionName&&h){var _=h.find(I=>I.name===b.collectionName);if(_===void 0&&f&&(_=f.find(I=>I.name===b.collectionName)),_&&_.schema&&_.schema.properties){const I=_.schema.properties,k=Object.keys(I).filter(N=>I[N].type==="Relation").map(N=>({label:N,value:N}));d.push({name:"relationProperty",displayName:"Relation",group:"General",type:{name:"enum",enums:k,allowEditOnly:!0},plug:"input"})}}if(n&&b.collectionName&&h){const I={String:"string",Boolean:"boolean",Number:"number",Date:"date"};var _=h.find(N=>N.name===b.collectionName);if(_===void 0&&f&&(_=f.find(N=>N.name===b.collectionName)),_&&_.schema&&_.schema.properties){var T=_.schema.properties;for(var A in T){var v=T[A];d.find(N=>N.name===A)||d.push({type:{name:I[v.type]?I[v.type]:"*"},plug:"input",group:"Properties",name:"prop-"+A,displayName:A})}}}e._additionalDynamicPorts&&e._additionalDynamicPorts(l,d,s),r.editorConnection.sendDynamicPorts(l.id,d)}u(),l.on("parameterUpdated",function(d){u()}),s.on("metadataChanged.dbCollections",function(d){CloudStore.invalidateCollections(),u()}),s.on("metadataChanged.systemCollections",function(d){CloudStore.invalidateCollections(),u()})}s.on("editorImportComplete",()=>{s.on("nodeAdded."+e.node.name,function(l){a(l)});for(const l of s.getNodesWithType(e.node.name))a(l)})}})}function addModelId$1(e,t){Object.assign({},e.node),e.setup;var n=Object.assign({},e.node.methods);const o=t===void 0||t.includeInputs,r=t===void 0||t.includeOutputs;Object.assign(e.node,{inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),o&&(Object.assign(e.node,{usePortAsLabel:"collectionName"}),e.node.dynamicports=(e.node.dynamicports||[]).concat([{name:"conditionalports/extended",condition:"idSource = explicit OR idSource NOT SET",inputs:["modelId"]}]),Object.assign(e.node.inputs,{idSource:{type:{name:"enum",enums:[{label:"Specify explicitly",value:"explicit"},{label:"From repeater",value:"foreach"}],allowEditOnly:!0},default:"explicit",displayName:"Id Source",group:"General",tooltip:`Choose if you want to specify the Id explicitly,
24
+ or if you want it to be that of the current record in a repeater.`,set(s){s==="foreach"&&this.scheduleAfterInputsHaveUpdated(()=>{for(var a=this.nodeScope.componentOwner;a!==void 0&&a._forEachModel===void 0&&a.parentNodeScope;)a=a.parentNodeScope.componentOwner;this.setModel(a!==void 0?a._forEachModel:void 0)})}},modelId:{type:{name:"string",identifierOf:"ModelName",identifierDisplayName:"Object Ids"},displayName:"Id",group:"General",set(s){s instanceof Model&&(s=s.getId()),this._internal.modelId=s,this.setModelID(s)}}})),r&&Object.assign(e.node.outputs,{id:{type:"string",displayName:"Id",group:"General",getter(){return this._internal.model?this._internal.model.getId():this._internal.modelId}}}),Object.assign(e.node.methods,{setCollectionID(s){this._internal.collectionId=s,this.clearWarnings()},setModelID(s){var a=(this.nodeScope.modelScope||Model).get(s);this.setModel(a)},setModel(s){this._internal.model=s,this.flagOutputDirty("id")},registerInputIfNeeded(s){this.hasInput(s)||(s==="collectionName"&&this.registerInput(s,{set:this.setCollectionID.bind(this)}),n&&n.registerInputIfNeeded&&n.registerInputIfNeeded.call(this,s))}})}function addInputProperties$1(e){var t={node:Object.assign({},e.node),setup:e.setup},n=Object.assign({},e.node.methods);Object.assign(e.node,{inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),Object.assign(e.node,{initialize(){var o=this._internal;o.inputValues={},t.node.initialize&&t.node.initialize.call(this)}}),Object.assign(e.node.outputs,{}),Object.assign(e.node.inputs,{}),Object.assign(e.node.methods,{registerInputIfNeeded(o){this.hasInput(o)||(o.startsWith("prop-")&&this.registerInput(o,{set:this._setInputValue.bind(this,o.substring(5))}),n&&n.registerInputIfNeeded&&n.registerInputIfNeeded.call(this,o))},_setInputValue(o,r){this._internal.inputValues[o]=r}})}function addRelationProperty(e){Object.assign({},e.node),e.setup;var t=Object.assign({},e.node.methods);Object.assign(e.node,{inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),Object.assign(e.node.inputs,{targetId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Target Record Id",group:"General",set(n){this._internal.targetModelId=n}}}),Object.assign(e.node.methods,{registerInputIfNeeded(n){this.hasInput(n)||(n==="relationProperty"&&this.registerInput(n,{set:this.setRelationProperty.bind(this)}),t&&t.registerInputIfNeeded&&t.registerInputIfNeeded.call(this,n))},setRelationProperty(n){this._internal.relationProperty=n}})}function _getCurrentUser(e){if(typeof _noodl_cloud_runtime_version>"u"){var t=localStorage["Parse/"+CloudStore.instance.appId+"/currentUser"];if(t!==void 0){let n;try{n=JSON.parse(t)}catch{}return n!==void 0?n.objectId:void 0}}else return e.get("Request").UserId}function addAccessControl(e){var t={node:Object.assign({},e.node),setup:e.setup},n=Object.assign({},e.node.methods);Object.assign(e.node,{inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),Object.assign(e.node,{initialize(){var r=this._internal;r.accessControl={},t.node.initialize&&t.node.initialize.call(this)}}),Object.assign(e.node.inputs,{accessControl:{type:{name:"proplist",autoName:"Rule",allowEditOnly:!0},index:1e3,displayName:"Access Control Rules",group:"Access Control Rules",set(r){this._internal.accessControlRules=r}}});const o=e._additionalDynamicPorts;e._additionalDynamicPorts=function(r,s,a){r.parameters.accessControl!==void 0&&r.parameters.accessControl.length>0&&r.parameters.accessControl.forEach(l=>{const u="acl-"+l.id;s.push({name:u+"-target",displayName:"Target",editorName:l.label+" | Target",plug:"input",type:{name:"enum",enums:[{value:"user",label:"User"},{value:"everyone",label:"Everyone"},{value:"role",label:"Role"}],allowEditOnly:!0},group:l.label+" Access Rule",default:"user",parent:"accessControl",parentItemId:l.id}),r.parameters[u+"-target"]==="role"?s.push({name:u+"-role",displayName:"Role",editorName:l.label+" | Role",group:l.label+" Access Rule",plug:"input",type:"string",parent:"accessControl",parentItemId:l.id}):(r.parameters[u+"-target"]===void 0||r.parameters[u+"-target"]==="user")&&s.push({name:u+"-userid",displayName:"User Id",group:l.label+" Access Rule",editorName:l.label+" | User Id",plug:"input",type:{name:"string",allowConnectionsOnly:!0},parent:"accessControl",parentItemId:l.id}),s.push({name:u+"-read",displayName:"Read",editorName:l.label+" | Read",group:l.label+" Access Rule",plug:"input",type:{name:"boolean"},default:!0,parent:"accessControl",parentItemId:l.id}),s.push({name:u+"-write",displayName:"Write",editorName:l.label+" | Write",group:l.label+" Access Rule",plug:"input",type:{name:"boolean"},default:!0,parent:"accessControl",parentItemId:l.id})}),o&&o(r,s,a)},Object.assign(e.node.methods,{registerInputIfNeeded(r){this.hasInput(r)||(r.startsWith("acl-")&&this.registerInput(r,{set:this.setAccessControl.bind(this,r)}),n&&n.registerInputIfNeeded&&n.registerInputIfNeeded.call(this,r))},_getACL(){let r={};function s(l){return{read:l.read===void 0?!0:l.read,write:l.write===void 0?!0:l.write}}const a=_getCurrentUser(this.nodeScope.modelScope);return this._internal.accessControlRules!==void 0&&this._internal.accessControlRules.forEach(l=>{const u=this._internal.accessControl[l.id];if(u===void 0){const d=a;d!==void 0&&(r[d]={write:!0,read:!0})}else if(u.target==="everyone")r["*"]=s(u);else if(u.target==="user"){const d=u.userid||a;r[d]=s(u)}else u.target==="role"&&(r["role:"+u.role]=s(u))}),Object.keys(r).length>0?r:void 0},setAccessControl(r,s){const a=r.split("-");this._internal.accessControl[a[1]]===void 0&&(this._internal.accessControl[a[1]]={}),this._internal.accessControl[a[1]][a[2]]=s}})}const SetDbModelPropertiedNodeDefinition={node:{name:"SetDbModelProperties",docs:"https://docs.noodl.net/nodes/data/cloud-data/set-record-properties",displayNodeName:"Set Record Properties",usePortAsLabel:"collectionName",dynamicports:[{name:"conditionalports/extended",condition:"storeType = cloud OR storeType NOT SET",inputs:["storeProperties"]}],inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this._internal.storeType===void 0||this._internal.storeType==="cloud"?this.scheduleSave():this.scheduleStore()}},storeProperties:{displayName:"Properties to store",group:"General",type:{name:"enum",enums:[{label:"Only specified",value:"specified"},{label:"All",value:"all"}]},default:"specified",set(e){this._internal.storeProperties=e}},storeType:{displayName:"Store to",group:"General",type:{name:"enum",enums:[{label:"Cloud and local",value:"cloud"},{label:"Local only",value:"local"}]},default:"cloud",set(e){this._internal.storeType=e}}},outputs:{stored:{type:"signal",displayName:"Success",group:"Events"}},methods:{scheduleSave(){const e=this,t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageSave",function(){if(!t.model){e.setError("Missing Record Id");return}const n=t.model;for(const o in t.inputValues)n.set(o,t.inputValues[o],{resolve:!0});CloudStore.forScope(e.nodeScope.modelScope).save({collection:t.collectionId,objectId:n.getId(),data:t.storeProperties==="all"?n.data:t.inputValues,acl:e._getACL(),success(o){for(var r in o)n.set(r,o[r]);e.sendSignalOnOutput("stored")},error(o){e.setError(o||"Failed to save.")}})})},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});this.sendSignalOnOutput("stored")}})}}}}};addBaseInfo$1(SetDbModelPropertiedNodeDefinition),addModelId$1(SetDbModelPropertiedNodeDefinition),addInputProperties$1(SetDbModelPropertiedNodeDefinition),addAccessControl(SetDbModelPropertiedNodeDefinition);var DeleteDbModelPropertiedNodeDefinition={node:{name:"DeleteDbModelProperties",docs:"https://docs.noodl.net/nodes/data/cloud-data/delete-record",displayNodeName:"Delete Record",shortDesc:"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.",inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.storageDelete()}}},outputs:{deleted:{type:"signal",displayName:"Success",group:"Events"}},methods:{storageDelete(){const e=this,t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageDelete",function(){if(!t.model){e.setError("Missing Record Id");return}CloudStore.forScope(e.nodeScope.ModelScope).delete({collection:t.collectionId,objectId:t.model.getId(),success(){t.model.notify("delete"),e.sendSignalOnOutput("deleted")},error(n){e.setError(n||"Failed to delete.")}})})}}}};addBaseInfo$1(DeleteDbModelPropertiedNodeDefinition,{includeInputProperties:!1}),addModelId$1(DeleteDbModelPropertiedNodeDefinition);var NewDbModelPropertiedNodeDefinition={node:{name:"NewDbModelProperties",docs:"https://docs.noodl.net/nodes/data/cloud-data/create-new-record",displayName:"Create New Record",usePortAsLabel:"collectionName",inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.storageInsert()}},sourceObjectId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Source Object Id",group:"General",set(e){e instanceof Model&&(e=e.getId()),this._internal.sourceObjectId=e}}},outputs:{created:{type:"signal",displayName:"Success",group:"Events"}},methods:{storageInsert(){const e=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageInsert",()=>{const t=Object.assign({},e.sourceObjectId?(this.nodeScope.modelScope||Model).get(e.sourceObjectId).data:{},e.inputValues),n=CloudStore.forScope(this.nodeScope.modelScope);n.create({collection:e.collectionId,data:t,acl:this._getACL(),success:o=>{const r=n._fromJSON(o,e.collectionId);this.setModel(r),this.sendSignalOnOutput("created")},error:o=>{this.setError(o||"Failed to insert.")}})})}}}};addBaseInfo$1(NewDbModelPropertiedNodeDefinition),addModelId$1(NewDbModelPropertiedNodeDefinition,{includeOutputs:!0}),addInputProperties$1(NewDbModelPropertiedNodeDefinition),addAccessControl(NewDbModelPropertiedNodeDefinition);var AddDbModelRelationNodeDefinition$1={node:{name:"AddDbModelRelation",docs:"https://docs.noodl.net/nodes/data/cloud-data/add-record-relation",displayNodeName:"Add Record Relation",usePortAsLabel:"collectionName",inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleAddRelation()}}},outputs:{relationAdded:{type:"signal",displayName:"Success",group:"Events"}},methods:{validateInputs(){if(!this.context.editorConnection)return;const e=t=>{this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"add-relation",{message:t})};this._internal.collectionId===void 0?e("No class specified"):this._internal.relationProperty===void 0?e("No relation property specified"):this._internal.targetModelId===void 0?e("No target record Id (the record to add a relation to) specified"):this._internal.model===void 0?e("No record Id specified (the record that should get the relation)"):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"add-relation")},scheduleAddRelation(e){const t=this,n=this._internal;this.scheduleOnce("StorageAddRelation",function(){if(t.validateInputs(),!!n.model){var o=n.model,r=n.targetModelId;r!==void 0&&CloudStore.forScope(t.nodeScope.modelScope).addRelation({collection:n.collectionId,objectId:o.getId(),key:n.relationProperty,targetObjectId:r,targetClass:(t.nodeScope.modelScope||Model).get(r)._class,success(s){for(var a in s)o.set(a,s[a]);t.sendSignalOnOutput("relationAdded")},error(s){t.setError(s||"Failed to add relation.")}})}})}}}};addBaseInfo$1(AddDbModelRelationNodeDefinition$1,{includeRelations:!0}),addModelId$1(AddDbModelRelationNodeDefinition$1),addRelationProperty(AddDbModelRelationNodeDefinition$1);var AddDbModelRelationNodeDefinition={node:{name:"RemoveDbModelRelation",docs:"https://docs.noodl.net/nodes/data/cloud-data/remove-record-relation",displayName:"Remove Record Relation",usePortAsLabel:"collectionName",inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleRemoveRelation()}}},outputs:{relationRemoved:{type:"signal",displayName:"Success",group:"Events"}},methods:{validateInputs(){if(!this.context.editorConnection)return;const e=t=>{this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"add-relation",{message:t})};this._internal.collectionId===void 0?e("No class specified"):this._internal.relationProperty===void 0?e("No relation property specified"):this._internal.targetModelId===void 0?e("No target record Id (the record to add a relation to) specified"):this._internal.model===void 0?e("No record Id specified (the record that should get the relation)"):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"add-relation")},scheduleRemoveRelation(e){const t=this,n=this._internal;this.scheduleOnce("StorageRemoveRelation",function(){if(t.validateInputs(),!!n.model){var o=n.model,r=n.targetModelId;r!==void 0&&CloudStore.forScope(t.nodeScope.modelScope).removeRelation({collection:n.collectionId,objectId:o.getId(),key:n.relationProperty,targetObjectId:r,targetClass:(t.nodeScope.modelScope||Model).get(r)._class,success(s){for(var a in s)o.set(a,s[a]);t.sendSignalOnOutput("relationRemoved")},error(s){t.setError(s||"Failed to remove relation.")}})}})}}}};addBaseInfo$1(AddDbModelRelationNodeDefinition,{includeRelations:!0}),addModelId$1(AddDbModelRelationNodeDefinition),addRelationProperty(AddDbModelRelationNodeDefinition);var FilterDBModelsNode={name:"FilterDBModels",docs:"https://docs.noodl.net/nodes/data/cloud-data/filter-records",displayNodeName:"Filter Records",shortDesc:"Filter, sort and limit array",category:"Data",color:"data",initialize(){var e=this;this._internal.collectionChangedCallback=function(){e.isInputConnected("filter")!==!0&&e.scheduleFilter()},this._internal.cloudStoreEvents=function(t){e.isInputConnected("filter")!==!0&&e._internal.visualFilter!==void 0&&e._internal.collection!==void 0&&t.collection===e._internal.collectionName&&t.objectId!==void 0&&e._internal.collection.contains(Model.get(t.objectId))&&e.scheduleFilter()},CloudStore.instance.on("save",this._internal.cloudStoreEvents),this._internal.enabled=!0,this._internal.filterSettings={},this._internal.filterParameters={}},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(e){this._internal.enabled=e,this.isInputConnected("filter")===!1&&this.scheduleFilter()}},filter:{type:"signal",group:"Actions",displayName:"Filter",valueChangedToTrue(){this.scheduleFilter()}}},outputs:{items:{type:"array",displayName:"Items",group:"General",getter(){return this._internal.filteredCollection}},firstItemId:{type:"string",displayName:"First Record Id",group:"General",getter(){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(){return this._internal.filteredCollection?this._internal.filteredCollection.size():0}},modified:{group:"Events",type:"signal",displayName:"Filtered"}},prototypeExtensions:{unbindCurrentCollection(){var e=this._internal.collection;e&&(e.off("change",this._internal.collectionChangedCallback),this._internal.collection=void 0)},bindCollection(e){this.unbindCurrentCollection(),this._internal.collection=e,e&&e.on("change",this._internal.collectionChangedCallback)},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this.unbindCurrentCollection(),CloudStore.instance.off("save",this._internal.cloudStoreEvents)},getLimit(){const e=this._internal.filterSettings;if(e.filterEnableLimit)return e.filterLimit||10},getSkip(){const e=this._internal.filterSettings;if(e.filterEnableLimit)return e.filterSkip||0},scheduleFilter(){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){const a=this._internal.visualFilter;if(a!==void 0){var t=convertVisualFilter(a,{queryParameters:this._internal.filterParameters,collectionName:this._internal.collectionName});t&&(e=e.filter(l=>matchesQuery(l,t)))}var n=this._internal.visualSorting;if(n!==void 0&&n.length>0)var o=convertVisualSorting(n);o&&e.sort(compareObjects.bind(this,o));var r=this.getSkip();r&&(e=e.slice(r,e.length));var s=this.getLimit();s&&(e=e.slice(0,s))}this._internal.filteredCollection=Collection.create(e),this.sendSignalOnOutput("modified"),this.flagOutputDirty("firstItemId"),this.flagOutputDirty("items"),this.flagOutputDirty("count")}}))},setCollectionName(e){this._internal.collectionName=e},setVisualFilter(e){this._internal.visualFilter=e,this.isInputConnected("filter")===!1&&this.scheduleFilter()},setVisualSorting(e){this._internal.visualSorting=e,this.isInputConnected("filter")===!1&&this.scheduleFilter()},setFilterParameter(e,t){this._internal.filterParameters[e]=t,this.isInputConnected("filter")===!1&&this.scheduleFilter()},registerInputIfNeeded(e){if(!this.hasInput(e)){if(e==="collectionName")return this.registerInput(e,{set:this.setCollectionName.bind(this)});if(e==="visualFilter")return this.registerInput(e,{set:this.setVisualFilter.bind(this)});if(e==="visualSorting")return this.registerInput(e,{set:this.setVisualSorting.bind(this)});if(e.startsWith("fp-"))return this.registerInput(e,{set:this.setFilterParameter.bind(this,e.substring(3))});this.registerInput(e,{set:userInputSetter$2$1.bind(this,e)})}}}};function userInputSetter$2$1(e,t){this._internal.filterSettings[e]=t,this.isInputConnected("filter")===!1&&this.scheduleFilter()}function updatePorts$4$1(e,t,n,o){var r=[];if(r.push({name:"collectionName",type:{name:"enum",enums:o!==void 0?o.map(l=>({value:l.name,label:l.name})):[],allowEditOnly:!0},displayName:"Class",plug:"input",group:"General"}),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"})),t.collectionName!==void 0){var s=o.find(l=>l.name===t.collectionName);if(s&&s.schema&&s.schema.properties){const l=JSON.parse(JSON.stringify(s.schema)),u={Boolean:!0,String:!0,Date:!0,Number:!0,Pointer:!0};for(var a in l.properties)u[l.properties[a].type]||delete l.properties[a];r.push({name:"visualFilter",plug:"input",type:{name:"query-filter",schema:l,allowEditOnly:!0},displayName:"Filter",group:"Filter"}),r.push({name:"visualSorting",plug:"input",type:{name:"query-sorting",schema:l,allowEditOnly:!0},displayName:"Sorting",group:"Sorting"})}if(t.visualFilter!==void 0){let l=function(d){d!==void 0&&(d.rules!==void 0?d.rules.forEach(h=>l(h)):d.input!==void 0&&(u[d.input]=!0))};const u={};l(t.visualFilter),Object.keys(u).forEach(d=>{r.push({name:"fp-"+d,plug:"input",type:"*",displayName:d,group:"Filter Parameters"})})}}n.sendDynamicPorts(e,r)}const FilterDbModelsNode={node:FilterDBModelsNode,setup(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.FilterDBModels",function(n){updatePorts$4$1(n.id,n.parameters,e.editorConnection,t.getMetaData("dbCollections")),n.on("parameterUpdated",function(o){updatePorts$4$1(n.id,n.parameters,e.editorConnection,t.getMetaData("dbCollections"))}),t.on("metadataChanged.dbCollections",function(o){CloudStore.invalidateCollections(),updatePorts$4$1(n.id,n.parameters,e.editorConnection,o)}),t.on("metadataChanged.systemCollections",function(o){CloudStore.invalidateCollections(),updatePorts$4$1(n.id,n.parameters,e.editorConnection,o)})})}};var ModelNodeDefinition$2={name:"Model2",docs:"https://docs.noodl.net/nodes/data/object/object-node",displayNodeName:"Object",shortDesc:"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.",category:"Data",usePortAsLabel:"modelId",color:"data",dynamicports:[{name:"conditionalports/extended",condition:"idSource = explicit OR idSource NOT SET",inputs:["modelId"]}],initialize(){var e=this._internal;e.inputValues={},e.dirtyValues={};var t=this;this._internal.onModelChangedCallback=function(n){t.isInputConnected("fetch")!==!0&&(t.hasOutput("prop-"+n.name)&&t.flagOutputDirty("prop-"+n.name),t.hasOutput("changed-"+n.name)&&t.sendSignalOnOutput("changed-"+n.name),t.sendSignalOnOutput("changed"))}},getInspectInfo(){const e=this._internal.model;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:e.data}]:"[No Object]"},outputs:{id:{type:"string",displayName:"Id",group:"General",getter(){return this._internal.model?this._internal.model.getId():this._internal.modelId}},changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"}},inputs:{idSource:{type:{name:"enum",enums:[{label:"Specify explicitly",value:"explicit"},{label:"From repeater",value:"foreach"}],allowEditOnly:!0},default:"explicit",displayName:"Get Id from",group:"General",set(e){e==="foreach"&&this.scheduleAfterInputsHaveUpdated(()=>{for(var t=this.nodeScope.componentOwner;t!==void 0&&t._forEachModel===void 0&&t.parentNodeScope;)t=t.parentNodeScope.componentOwner;this.setModel(t!==void 0?t._forEachModel:void 0)})}},modelId:{type:{name:"string",identifierOf:"ModelName",identifierDisplayName:"Object Ids"},displayName:"Id",group:"General",set(e){e instanceof Model?e=e.getId():typeof e=="object"&&(e=Model.create(e).getId()),this._internal.modelId=e,this.isInputConnected("fetch")===!1?this.setModelID(e):this.flagOutputDirty("id")}},properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set(e){}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleSetModel()}}},prototypeExtensions:{scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{if(this.hasScheduledStore=!1,!!e.model){for(var t in e.dirtyValues)e.model.set(t,e.inputValues[t],{resolve:!0});e.dirtyValues={}}})}},scheduleSetModel(){this.hasScheduledSetModel||(this.hasScheduledSetModel=!0,this._internal,this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledSetModel=!1,this.setModelID(this._internal.modelId)}))},setModelID(e){var t=(this.nodeScope.modelScope||Model).get(e);this.setModel(t),this.sendSignalOnOutput("fetched")},setModel(e){if(this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback),this._internal.model=e,this.flagOutputDirty("id"),e){e.on("change",this._internal.onModelChangedCallback);for(var t in e.data)this.hasOutput("prop-"+t)&&this.flagOutputDirty("prop-"+t)}},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},registerOutputIfNeeded(e){this.hasOutput(e)||e.startsWith("prop-")&&this.registerOutput(e,{getter:userOutputGetter$4.bind(this,e.substring(5))})},registerInputIfNeeded(e){this.hasInput(e)||e.startsWith("prop-")&&this.registerInput(e,{set:userInputSetter$1$1.bind(this,e.substring(5))})}}};function userOutputGetter$4(e){return this._internal.model?this._internal.model.get(e,{resolve:!0}):void 0}function userInputSetter$1$1(e,t){this._internal.inputValues[e]=t;const n=this._internal.model;(!n||n.get(e)!==t)&&(this._internal.dirtyValues[e]=!0,this.scheduleStore())}function updatePorts$3$1(e,t,n){var o=[],r=t.properties;if(r){r=r?r.split(","):void 0;for(var s in r){var a=r[s];o.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name:"prop-"+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 ModelNode2={node:ModelNodeDefinition$2,setup(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Model2",function(n){updatePorts$3$1(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",function(o){updatePorts$3$1(n.id,n.parameters,e.editorConnection)})})}};function addBaseInfo(e){Object.assign(e.node,{category:"Data",color:"data"})}function addModelId(e,t){const n=t===void 0||t.includeInputs,o=t===void 0||t.includeOutputs;Object.assign(e.node,{inputs:e.node.inputs||{},outputs:e.node.outputs||{},methods:e.node.methods||{}}),n&&(Object.assign(e.node,{usePortAsLabel:"modelId"}),e.node.dynamicports=(e.node.dynamicports||[]).concat([{name:"conditionalports/extended",condition:"idSource = explicit OR idSource NOT SET",inputs:["modelId"]}]),Object.assign(e.node.inputs,{idSource:{type:{name:"enum",enums:[{label:"Specify explicitly",value:"explicit"},{label:"From repeater",value:"foreach"}],allowEditOnly:!0},default:"explicit",displayName:"Id Source",group:"General",set(r){r==="foreach"&&this.scheduleAfterInputsHaveUpdated(()=>{for(var s=this.nodeScope.componentOwner;s!==void 0&&s._forEachModel===void 0&&s.parentNodeScope;)s=s.parentNodeScope.componentOwner;this.setModel(s!==void 0?s._forEachModel:void 0)})}},modelId:{type:{name:"string",identifierOf:"ModelName",identifierDisplayName:"Object Ids"},displayName:"Id",group:"General",set(r){r instanceof Model&&(r=r.getId()),this._internal.modelId=r,this.setModelID(r)}}})),o&&Object.assign(e.node.outputs,{id:{type:"string",displayName:"Id",group:"General",getter(){return this._internal.model?this._internal.model.getId():this._internal.modelId}}}),Object.assign(e.node.methods,{setModelID(r){var s=(this.nodeScope.modelScope||Model).get(r);this.setModel(s)},setModel(r){this._internal.model=r,this.flagOutputDirty("id")}}),e.node.getInspectInfo||(e.node.getInspectInfo=function(){const r=this._internal.model;return r?[{type:"text",value:"Id: "+r.getId()},{type:"value",value:r.data}]:"[No Object]"})}function addInputProperties(def){var _def={node:Object.assign({},def.node),setup:def.setup},_methods=Object.assign({},def.node.methods);Object.assign(def.node,{inputs:def.node.inputs||{},outputs:def.node.outputs||{},methods:def.node.methods||{}}),Object.assign(def,{setup(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||(t.on("nodeAdded."+def.node.name,function(n){function o(){var r=[];const s=[{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 a=n.parameters.properties;if(a){a=a?a.split(","):void 0;for(var l in a){var u=a[l];r.push({type:{name:n.parameters["type-"+u]===void 0?"*":n.parameters["type-"+u]},plug:"input",group:"Property Values",displayName:u,name:"prop-"+u}),r.push({type:{name:"enum",enums:s,allowEditOnly:!0},plug:"input",group:"Property Types",displayName:u,default:"*",name:"type-"+u})}}e.editorConnection.sendDynamicPorts(n.id,r,{detectRenamed:{plug:"input"}})}o(),n.on("parameterUpdated",function(r){o()})}),_def.setup&&_def.setup(e,t))}}),Object.assign(def.node,{initialize(){var e=this._internal;e.inputValues={},e.inputTypes={},_def.node.initialize&&_def.node.initialize.call(this)}}),Object.assign(def.node.outputs,{}),Object.assign(def.node.inputs,{properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties to set",set(e){}}}),Object.assign(def.node.methods,{_pushInputValues(model){var internal=this._internal;const _defaultValueForType={boolean:!1,string:"",number:0,date:new Date},_allKeys={};for(const e in internal.inputTypes)_allKeys[e]=!0;for(const e in internal.inputValues)_allKeys[e]=!0;const properties=this.model.parameters.properties||"",validProperties=properties.split(","),keysToSet=Object.keys(_allKeys).filter(e=>validProperties.indexOf(e)!==-1);for(const i of keysToSet){var value=internal.inputValues[i];if(value!==void 0){if(internal.inputTypes[i]!==void 0&&internal.inputTypes[i]==="array"&&typeof value=="string"){this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"invalid-array-"+i);try{value=eval(value)}catch(e){value.indexOf("[")!==-1||value.indexOf("{")!==-1?(this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"invalid-array-"+i,{showGlobally:!0,message:"Invalid array<br>"+e.toString()}),value=[]):value=Collection.get(value)}}internal.inputTypes[i]!==void 0&&internal.inputTypes[i]==="object"&&typeof value=="string"&&(value=(this.nodeScope.modelScope||Model).get(value)),model.set(i,value,{resolve:!0})}else model.set(i,_defaultValueForType[internal.inputTypes[i]],{resolve:!0})}},scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledStore=!1,e.model&&(this._pushInputValues(e.model),this.sendSignalOnOutput("stored"))})}},registerInputIfNeeded(e){this.hasInput(e)||(e.startsWith("prop-")&&this.registerInput(e,{set:this._setInputValue.bind(this,e.substring(5))}),e.startsWith("type-")&&this.registerInput(e,{set:this._setInputType.bind(this,e.substring(5))}),_methods&&_methods.registerInputIfNeeded&&_def.node.methods.registerInputIfNeeded.call(this,e))},_setInputValue(e,t){this._internal.inputValues[e]=t},_setInputType(e,t){this._internal.inputTypes[e]=t}})}var SetModelPropertiedNodeDefinition={node:{name:"SetModelProperties",docs:"https://docs.noodl.net/nodes/data/object/set-object-properties",displayNodeName:"Set Object Properties",inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleStore()}}},outputs:{stored:{type:"signal",displayName:"Done",group:"Events"}}}};addBaseInfo(SetModelPropertiedNodeDefinition),addModelId(SetModelPropertiedNodeDefinition),addInputProperties(SetModelPropertiedNodeDefinition);var NewModelNodeDefinition={node:{name:"NewModel",docs:"https://docs.noodl.net/nodes/data/object/create-new-object",displayNodeName:"Create New Object",inputs:{new:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleNew()}}},outputs:{created:{type:"signal",displayName:"Done",group:"Events"}},methods:{scheduleNew(){this.hasScheduledNew||(this.hasScheduledNew=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledNew=!1;const e=(this.nodeScope.modelScope||Model).get();this._pushInputValues(e),this.setModel(e),this.sendSignalOnOutput("created")}))}}}};addBaseInfo(NewModelNodeDefinition),addModelId(NewModelNodeDefinition,{includeOutputs:!0}),addInputProperties(NewModelNodeDefinition);const CloudFileNode={name:"Cloud File",docs:"https://docs.noodl.net/nodes/data/cloud-data/cloud-file",category:"Cloud Services",color:"data",getInspectInfo(){return this._internal.cloudFile&&this._internal.cloudFile.getUrl()},outputs:{url:{type:"string",displayName:"URL",group:"General",get(){return this._internal.cloudFile&&this._internal.cloudFile.getUrl()}},name:{type:"string",displayName:"Name",group:"General",get(){if(!this._internal.cloudFile)return;const e=this._internal.cloudFile.getName().split("_");return e.length===1?e[0]:e.slice(1).join("_")}}},inputs:{file:{type:"cloudfile",displayName:"Cloud File",group:"General",set(e){e instanceof CloudFile&&(this._internal.cloudFile=e,this.flagOutputDirty("name"),this.flagOutputDirty("url"))}}}},CloudFileNode$1={node:CloudFileNode},$=class{constructor(){this.cacheDuration=15*60*1e3}_makeRequest(t,n){if(typeof _noodl_cloud_runtime_version>"u"){var o=new XMLHttpRequest;o.onreadystatechange=function(){if(o.readyState===4){var l;try{l=JSON.parse(o.response)}catch{}o.status===200||o.status===201?n.success(l):n.error(l||{error:o.responseText,status:o.status})}};const r=Runtime.instance.getMetaData("cloudservices"),s=r.appId,a=r.endpoint;o.open("GET",a+t,!0),o.setRequestHeader("X-Parse-Application-Id",s),o.send()}else{const r=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.endpoint:this.endpoint,s=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.appId:this.appId,a=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.masterKey:void 0;fetch(r+t,{method:"GET",headers:{"X-Parse-Application-Id":s,"X-Parse-Master-Key":a}}).then(l=>{l.status===200||l.status===201?l.json().then(u=>n.success(u)).catch(u=>n.error({error:"Config: Failed to get json result."})):l.json().then(u=>n.error(u)).catch(u=>n.error({error:"Failed to fetch."}))}).catch(l=>{n.error({error:l.message})})}}_getConfig(){return new Promise((t,n)=>{this._makeRequest("/config",{success:o=>{t(o.params||{})},error:o=>{n(o)}})})}async getConfig(){return this.configCachePending?this.configCachePending:this.configCache?(Date.now()>this.ttl&&this._getConfig().then(t=>{this.configCache=t,this.ttl=Date.now()+this.cacheDuration}),this.configCache):(this.configCachePending=this._getConfig(),this.configCache=await this.configCachePending,delete this.configCachePending,this.ttl=Date.now()+this.cacheDuration,this.configCache)}clearCache(){delete this.configCache}};$.instance=new $;let ConfigService=$;var ConfigNodeDefinition={name:"DbConfig",docs:"https://docs.noodl.net/nodes/data/cloud-data/config",displayNodeName:"Config",category:"Cloud Services",usePortAsLabel:"configKey",color:"data",initialize(){var e=this._internal;ConfigService.instance.getConfig().then(t=>{e.config=t,this.hasOutput("value")&&this.flagOutputDirty("value")})},getInspectInfo(){const e=this.getValue();return e===void 0?"[No Value]":[{type:"value",value:e}]},inputs:{},outputs:{},methods:{getValue(){const e=this._internal;if(e.useDevValue&&this.context.editorConnection&&this.context.editorConnection.isRunningLocally())return e.devValue;if(e.config!==void 0&&e.configKey!==void 0)return e.config[e.configKey]},setInternal(e,t){this._internal[e]=t,this.hasOutput("value")&&this.flagOutputDirty("value")},registerOutputIfNeeded(e){if(!this.hasOutput(e)&&e==="value")return this.registerOutput(e,{getter:this.getValue.bind(this)})},registerInputIfNeeded(e){if(!this.hasInput(e)&&(e==="configKey"||e==="useDevValue"||e==="devValue"))return this.registerInput(e,{set:this.setInternal.bind(this,e)})}}};const DbConfig={node:ConfigNodeDefinition,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(r){var s=[];e.editorConnection.clearWarning(r.component.name,r.id,"dbconfig-warning");const a=t.getMetaData("dbConfigSchema");let l;if(a){const u=typeof _noodl_cloud_runtime_version<"u";s.push({name:"configKey",displayName:"Parameter",group:"General",type:{name:"enum",enums:Object.keys(a).filter(d=>u||!a[d].masterKeyOnly).map(d=>({value:d,label:d})),allowEditOnly:!0},plug:"input"}),r.parameters.configKey!==void 0&&a&&a[r.parameters.configKey]?(l=a[r.parameters.configKey].type,(l==="string"||l==="boolean"||l==="number"||l==="object"||l==="array")&&(s.push({name:"useDevValue",displayName:"Enable",group:"Local Override",type:"boolean",default:!1,plug:"input"}),r.parameters.useDevValue===!0&&s.push({name:"devValue",displayName:"Value",group:"Local Override",type:l,plug:"input"}))):r.parameters.configKey!==void 0&&e.editorConnection.sendWarning(r.component.name,r.id,"dbconfig-warning",{showGlobally:!0,message:r.parameters.configKey+" config parameter is missing, add it to your cloud service."})}else e.editorConnection.sendWarning(r.component.name,r.id,"dbconfig-warning",{showGlobally:!0,message:"You need an active cloud service."});s.push({name:"value",displayName:"Value",group:"General",type:l||"*",plug:"output"}),e.editorConnection.sendDynamicPorts(r.id,s)}function o(r){n(r),r.on("parameterUpdated",function(s){n(r)}),t.on("metadataChanged.dbConfigSchema",function(s){ConfigService.instance.clearCache(),n(r)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.DbConfig",function(r){o(r)});for(const r of t.getNodesWithType("DbConfig"))o(r)})}};function createDefinition(e){return{name:e.name,docs:e.docs,shortDesc:e.shortDesc,nodeDoubleClickAction:e.nodeDoubleClickAction,category:"Variables",initialize(){this._internal.currentValue=e.startValue,this._internal.latestValue=0},getInspectInfo(){return[{type:e.type.name==="color"?"color":"text",value:this._internal.currentValue}]},inputs:{value:{type:e.type,displayName:"Value",default:e.startValue,set(t){this.isInputConnected("saveValue")===!1?this.setValueTo(t):this._internal.latestValue=t}},saveValue:{displayName:"Set",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(function(){this.setValueTo(this._internal.latestValue),this.sendSignalOnOutput("stored")})}}},outputs:{savedValue:{type:e.type.name,displayName:"Value",getter(){return this._internal.currentValue}},changed:{type:"signal",displayName:"Changed"},stored:{type:"signal",displayName:"Stored"}},prototypeExtensions:{setValueTo(t){t=e.cast(t);const n=this._internal.currentValue!==t;this._internal.currentValue=t,n&&(this.flagOutputDirty("savedValue"),this.sendSignalOnOutput("changed"),e.onChanged&&e.onChanged.call(this))}}}}const NumberNode=createDefinition({name:"Number",docs:"https://docs.noodl.net/nodes/data/number",startValue:0,nodeDoubleClickAction:{focusPort:"value"},type:{name:"number"},cast(e){return Number(e)}}),NumberVar={node:NumberNode},StringNode=createDefinition({name:"String",docs:"https://docs.noodl.net/nodes/data/string",shortDesc:"Contains a string (text).",startValue:"",nodeDoubleClickAction:{focusPort:"value"},type:{name:"string"},cast(e){return String(e)},onChanged(){this.flagOutputDirty("length")}});extend$4(StringNode,{usePortAsLabel:"value",portLabelTruncationMode:"length",outputs:{length:{type:"number",displayName:"Length",getter(){return this._internal.currentValue.length}}}});const StringVar={node:StringNode},BooleanNode=createDefinition({name:"Boolean",docs:"https://docs.noodl.net/nodes/data/boolean",startValue:!1,type:{name:"boolean"},cast(e){return!!e}}),BooleanVar={node:BooleanNode},ConditionNode={name:"Condition",docs:"https://docs.noodl.net/nodes/utilities/logic/condition",category:"Logic",initialize(){},getInspectInfo(){const e=this.getInputValue("condition");let t;return e===void 0&&(t="[No input]"),t=e,[{type:"value",value:t}]},inputs:{condition:{type:"boolean",displayName:"Condition",group:"General",set(e){this.isInputConnected("eval")||this.scheduleEvaluate()}},eval:{type:"signal",displayName:"Evaluate",group:"Actions",valueChangedToTrue(){this.scheduleEvaluate()}}},outputs:{ontrue:{type:"signal",displayName:"On True",group:"Events"},onfalse:{type:"signal",displayName:"On False",group:"Events"},result:{type:"boolean",displayName:"Is True",group:"Booleans",get(){return!!this.getInputValue("condition")}},isfalse:{type:"boolean",displayName:"Is False",group:"Booleans",get(){return!this.getInputValue("condition")}}},methods:{scheduleEvaluate(){this.scheduleAfterInputsHaveUpdated(()=>{this.flagOutputDirty("result"),this.flagOutputDirty("isfalse");const e=this.getInputValue("condition");this.sendSignalOnOutput(e?"ontrue":"onfalse")})}}},Condition={node:ConditionNode},AndNode={name:"And",docs:"https://docs.noodl.net/nodes/logic/and",category:"Logic",initialize(){this._internal.inputs=[]},getInspectInfo(){return and(this._internal.inputs)},numberedInputs:{input:{displayPrefix:"Input",type:"boolean",createSetter(e){return function(t){if(t=!!t,this._internal.inputs[e]===t)return;this._internal.inputs[e]=t;const n=and(this._internal.inputs);this._internal.result!==n&&(this._internal.result=n,this.flagOutputDirty("result"))}}}},outputs:{result:{type:"boolean",displayName:"Result",get(){return this._internal.result}}}},And={node:AndNode};function and(e){return e.length>0&&e.some(t=>!t)===!1}const OrNode={name:"Or",docs:"https://docs.noodl.net/nodes/logic/or",category:"Logic",initialize(){this._internal.inputs=[]},getInspectInfo(){return this._internal.inputs.some(isTrue)},numberedInputs:{input:{type:"boolean",displayPrefix:"Input",createSetter(e){return function(t){this._internal.inputs[e]!==t&&(this._internal.inputs[e]=t,this.flagOutputDirty("result"))}}}},outputs:{result:{type:"boolean",displayName:"Result",getter(){return this._internal.inputs.some(isTrue)}}}},Or={node:OrNode};function isTrue(e){return!!e}const BooleanToStringNode={name:"Boolean To String",docs:"https://docs.noodl.net/nodes/utilities/boolean-to-string",category:"Utilities",initialize(){this._internal.inputs=[],this._internal.currentSelectedIndex=0,this._internal.indexChanged=!1,this._internal.trueString="",this._internal.falseString=""},inputs:{trueString:{displayName:"String for true",type:"string",set(e){this._internal.trueString!==e&&(this._internal.trueString=e,this._internal.currentInput&&this.flagOutputDirty("currentValue"))}},falseString:{displayName:"String for false",type:"string",set(e){this._internal.falseString!==e&&(this._internal.falseString=e,this._internal.currentInput||this.flagOutputDirty("currentValue"))}},input:{type:{name:"boolean"},displayName:"Selector",set(e){this._internal.currentInput!==e&&(this._internal.currentInput=e,this.flagOutputDirty("currentValue"),this.sendSignalOnOutput("inputChanged"))}}},outputs:{currentValue:{type:"string",displayName:"Current Value",group:"Value",getter(){return this._internal.currentInput?this._internal.trueString:this._internal.falseString}},inputChanged:{type:"signal",displayName:"Selector Changed",group:"Signals"}}},BooleanToString={node:BooleanToStringNode},DateToStringNode={name:"Date To String",docs:"https://docs.noodl.net/nodes/utilities/date-to-string",category:"Utilities",initialize(){this._internal.formatString="{year}-{month}-{date}"},inputs:{formatString:{displayName:"Format",type:"string",default:"{year}-{month}-{date}",set(e){this._internal.formatString!==e&&(this._internal.formatString=e,this._internal.currentInput!==void 0&&(this._format(),this.flagOutputDirty("currentValue")))}},input:{type:{name:"date"},displayName:"Date",set(e){const t=typeof e=="string"?new Date(e):e;this._internal.currentInput!==t&&(this._internal.currentInput=t,this._format())}}},outputs:{currentValue:{type:"string",displayName:"Date String",group:"Value",getter(){return this._internal.dateString}},inputChanged:{type:"signal",displayName:"Date Changed",group:"Signals"},onError:{type:"signal",displayName:"Invalid Date",group:"Signals"}},methods:{_format(){try{const e=this._internal.currentInput,t=this._internal.formatString,n=("0"+e.getDate()).slice(-2),o=("0"+(e.getMonth()+1)).slice(-2),r=new Intl.DateTimeFormat("en-US",{month:"short"}).format(e),s=e.getFullYear(),a=s.toString().substring(2),l=("0"+e.getHours()).slice(-2),u=("0"+e.getMinutes()).slice(-2),d=("0"+e.getSeconds()).slice(-2);this._internal.dateString=t.replace(/\{date\}/g,n).replace(/\{month\}/g,o).replace(/\{monthShort\}/g,r).replace(/\{year\}/g,s).replace(/\{yearShort\}/g,a).replace(/\{hours\}/g,l).replace(/\{minutes\}/g,u).replace(/\{seconds\}/g,d)}catch{this._internal.dateString="",this.flagOutputDirty("onError")}this.flagOutputDirty("currentValue"),this.sendSignalOnOutput("inputChanged")}}},DateToString={node:DateToStringNode},StringMapperNode={name:"String Mapper",docs:"https://docs.noodl.net/nodes/string-manipulation/string-mapper",category:"Utilities",initialize(){this._internal.inputs=[],this._internal.mappings=[]},getInspectInfo(){return this._internal.mappedString},numberedInputs:{input:{type:"string",displayPrefix:"Input",group:"Inputs",index:10,createSetter(e){return function(t){t=t===void 0?"":t.toString(),this._internal.inputs[e]=t,this.scheduleMapping()}}},output:{type:"string",displayPrefix:"Mapping",index:1001,group:"Mappings",createSetter(e){return function(t){t=t===void 0?"":t.toString(),this._internal.mappings[e]=t,this.scheduleMapping()}}}},inputs:{inputString:{type:{name:"string"},index:1,displayName:"Input String",set(e){this._internal.currentInputString=e!==void 0?e.toString():void 0,this.scheduleMapping()}},defaultMapping:{type:"string",displayName:"Default",index:1e3,group:"Mappings",set(e){this._internal.defaultMapping=e,this.scheduleMapping()}}},outputs:{mappedString:{type:"string",displayName:"Mapped String",group:"Value",getter(){return this._internal.mappedString}}},prototypeExtensions:{doMapping(){this._internal.hasScheduledFetch=!1;var e=this._internal.inputs.indexOf(this._internal.currentInputString);e!==-1?this._internal.mappedString=this._internal.mappings[e]:this._internal.mappedString=this._internal.defaultMapping,this.flagOutputDirty("mappedString")},scheduleMapping(){var e=this._internal;e.hasScheduledFetch||(e.hasScheduledFetch=!0,this.scheduleAfterInputsHaveUpdated(this.doMapping.bind(this)))}}},StringMapper={node:StringMapperNode};function invert(e){if(e!==void 0)return!e}const InverterNode={name:"Inverter",docs:"https://docs.noodl.net/nodes/logic/inverter",category:"Logic",initialize(){this._internal.currentValue=void 0},getInspectInfo(){return String(invert(this._internal.currentValue))},inputs:{value:{type:{name:"boolean"},displayName:"Value",set(e){this._internal.currentValue=e,this.flagOutputDirty("result")}}},outputs:{result:{type:"boolean",displayName:"Result",getter(){return invert(this._internal.currentValue)}}}},Inverter={node:InverterNode},SubStringNode={name:"Substring",docs:"https://docs.noodl.net/nodes/string-manipulation/substring",category:"String Manipulation",initialize(){var e=this._internal;e.startIndex=0,e.endIndex=-1,e.cachedResult="",e.inputString="",e.resultDirty=!1},inputs:{start:{type:"number",displayName:"Start",default:0,set(e){this._internal.startIndex=e,this._internal.resultDirty=!0,this.flagOutputDirty("result")}},end:{type:"number",displayName:"End",default:0,set(e){this._internal.endIndex=e,this._internal.resultDirty=!0,this.flagOutputDirty("result")}},string:{type:{name:"string"},displayName:"String",default:"",set(e){e=e.toString(),this._internal.inputString=e,this._internal.resultDirty=!0,this.flagOutputDirty("result")}}},outputs:{result:{type:"string",displayName:"Result",getter(){var e=this._internal;return e.resultDirty&&(e.endIndex===-1?e.cachedResult=e.inputString.substr(e.startIndex):e.cachedResult=e.inputString.substr(e.startIndex,e.endIndex-e.startIndex),e.resultDirty=!1),e.cachedResult}}}},Substring={node:SubStringNode},StringFormatDefinition={name:"String Format",docs:"https://docs.noodl.net/nodes/string-manipulation/string-format",category:"String Manipulation",usePortAsLabel:"format",portLabelTruncationMode:"length",initialize(){const e=this._internal;e.format="",e.cachedResult="",e.resultDirty=!1,e.inputValues={}},getInspectInfo(){return this.formatValue()},inputs:{format:{type:{name:"string",multiline:!0},displayName:"Format",set(e){this._internal.format!==e&&(this._internal.format=e,this._internal.resultDirty=!0,this.scheduleFormat())}}},outputs:{formatted:{type:"string",displayName:"Formatted",get(){return this.formatValue()}}},methods:{formatValue(){var e=this._internal;if(e.resultDirty){var t=e.format,n=e.format.match(/\{[A-Za-z0-9_]*\}/g),o=[];n&&(o=n.map(function(r){return r.replace("{","").replace("}","")})),o.forEach(function(r){var s=e.inputValues[r];t=t.replace("{"+r+"}",s!==void 0?s:"")}),e.cachedResult=t,e.resultDirty=!1}return e.cachedResult},registerInputIfNeeded(e){this.hasInput(e)||this.registerInput(e,{set:userInputSetter$5.bind(this,e)})},scheduleFormat(){this.formatScheduled||(this.formatScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.formatValue(),this.flagOutputDirty("formatted"),this.formatScheduled=!1}))}}};function userInputSetter$5(e,t){this._internal.inputValues[e]!==t&&(this._internal.inputValues[e]=t,this._internal.resultDirty=!0,this.scheduleFormat())}function updatePorts$2$1(e,t,n){var o=t.match(/\{[A-Za-z0-9_]*\}/g)||[],r=o.map(function(a){return a.replace("{","").replace("}","")}),s=r.filter(function(a,l,u){return u.indexOf(a)===l}).map(function(a){return{name:a,type:"string",plug:"input"}});n.sendDynamicPorts(e,s)}const StringFormat={node:StringFormatDefinition,setup(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.String Format",function(n){n.parameters.format&&updatePorts$2$1(n.id,n.parameters.format,e.editorConnection),n.on("parameterUpdated",function(o){o.name==="format"&&updatePorts$2$1(n.id,n.parameters.format,e.editorConnection)})})}},CounterNode={name:"Counter",docs:"https://docs.noodl.net/nodes/math/counter",category:"Math",initialize(){this._internal.currentValue=0,this._internal.startValue=0,this._internal.startValueSet=!1,this._internal.limitsEnabled=!1,this._internal.limitsMin=0,this._internal.limitsMax=0},getInspectInfo(){return"Count: "+this._internal.currentValue},inputs:{increase:{group:"Actions",displayName:"Increase Count",valueChangedToTrue(){this._internal.limitsEnabled&&this._internal.currentValue>=this._internal.limitsMax||(this._internal.currentValue++,this.flagOutputDirty("currentCount"),this.sendSignalOnOutput("countChanged"))}},decrease:{group:"Actions",displayName:"Decrease Count",valueChangedToTrue(){this._internal.limitsEnabled&&this._internal.currentValue<=this._internal.limitsMin||(this._internal.currentValue--,this.flagOutputDirty("currentCount"),this.sendSignalOnOutput("countChanged"))}},reset:{group:"Actions",displayName:"Reset To Start",valueChangedToTrue(){this.currentValue!==0&&(this._internal.currentValue=this._internal.startValue,this.flagOutputDirty("currentCount"),this.sendSignalOnOutput("countChanged"))}},startValue:{type:"number",displayName:"Start Value",default:0,set(e){this._internal.startValue=Number(e),this._internal.startValueSet===!1&&(this._internal.startValueSet=!0,this._internal.currentValue=this._internal.startValue,this.flagOutputDirty("currentCount"),this.sendSignalOnOutput("countChanged"))}},limitsMin:{type:{name:"number"},displayName:"Min Value",group:"Limits",default:0,set(e){this._internal.limitsMin=Number(e)}},limitsMax:{type:{name:"number"},displayName:"Max Value",group:"Limits",default:0,set(e){this._internal.limitsMax=Number(e)}},limitsEnabled:{type:{name:"boolean"},displayName:"Limits Enabled",group:"Limits",default:!1,set(e){this._internal.limitsEnabled=!!e}}},outputs:{currentCount:{displayName:"Current Count",type:"number",getter(){return this._internal.currentValue}},countChanged:{displayName:"Count Changed",type:"signal"}}},Counter={node:CounterNode},UniqueIdNode={name:"Unique Id",docs:"https://docs.noodl.net/nodes/utilities/unique-id",category:"String Manipulation",initialize(){var e=this._internal;e.guid=Model.guid()},getInspectInfo(){return this._internal.guid},inputs:{new:{displayName:"New",valueChangedToTrue(){var e=this._internal;e.guid=Model.guid(),this.flagOutputDirty("guid")}}},outputs:{guid:{type:"string",displayName:"Id",getter(){var e=this._internal;return e.guid}}},prototypeExtensions:{}},UniqueId={node:UniqueIdNode},SetUserPropertiesNodeDefinition={name:"net.noodl.user.SetUserProperties",docs:"https://docs.noodl.net/nodes/data/user/set-user-properties",displayNodeName:"Set User Properties",category:"Cloud Services",color:"data",initialize(){var e=this._internal;e.userProperties={}},getInspectInfo(){},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},inputs:{store:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleStore()}},email:{displayName:"Email",type:"string",group:"General",set(e){this._internal.email=e}},username:{displayName:"Username",type:"string",group:"General",set(e){this._internal.username=e}}},methods:{setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-set-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-set-warning")},scheduleStore(){const e=this._internal;this.storeScheduled!==!0&&(this.storeScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.storeScheduled=!1,Runtime.Services.UserService.forScope(this.nodeScope.modelScope).setUserProperties({email:this._internal.email,username:this._internal.username,properties:e.userProperties,success:()=>{this.sendSignalOnOutput("success")},error:t=>{this.setError(t)}})}))},setUserProperty(e,t){this._internal.userProperties[e]=t},registerInputIfNeeded(e){if(!this.hasInput(e)&&e.startsWith("prop-"))return this.registerInput(e,{set:this.setUserProperty.bind(this,e.substring(5))})}}};function updatePorts$1$1(e,t,n,o){var r=[];if(o){var s=o.find(d=>d.name==="_User");if(s&&s.schema&&s.schema.properties){var a=s.schema.properties;const d=typeof _noodl_cloud_runtime_version>"u"?["authData","createdAt","updatedAt","email","username","emailVerified","password"]:["authData","createdAt","updatedAt","email","username"];for(var l in a)if(d.indexOf(l)===-1){var u=a[l];if(!r.find(h=>h.name===l)&&u.type!=="Relation"){const h={String:"string",Boolean:"boolean",Number:"number",Date:"date"};r.push({type:{name:h[u.type]?h[u.type]:"*"},plug:"input",group:"Properties",name:"prop-"+l,displayName:l})}}}}n.sendDynamicPorts(e,r)}const SetUserProperties={node:SetUserPropertiesNodeDefinition,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$1$1(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections")),o.on("parameterUpdated",function(r){updatePorts$1$1(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections"))}),t.on("metadataChanged.systemCollections",function(r){updatePorts$1$1(o.id,o.parameters,e.editorConnection,r)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.net.noodl.user.SetUserProperties",function(o){n(o)});for(const o of t.getNodesWithType("net.noodl.user.SetUserProperties"))n(o)})}};var UserNodeDefinition={name:"net.noodl.user.User",docs:"https://docs.noodl.net/nodes/data/user/user-node",displayNodeName:"User",category:"Cloud Services",color:"data",initialize(){var e=this;this._internal.onModelChangedCallback=function(n){e.isInputConnected("fetch")||(e.hasOutput("prop-"+n.name)&&e.flagOutputDirty("prop-"+n.name),e.hasOutput("changed-"+n.name)&&e.sendSignalOnOutput("changed-"+n.name),e.sendSignalOnOutput("changed"))};const t=Runtime.Services.UserService.forScope(this.nodeScope.modelScope);this.setUserModel(t.current),t.on("loggedIn",()=>{this.setUserModel(t.current),this.hasOutput("loggedIn")&&this.sendSignalOnOutput("loggedIn")}),t.on("sessionGained",()=>{this.setUserModel(t.current)}),t.on("loggedOut",()=>{this.setUserModel(void 0),this.hasOutput("loggedOut")&&this.sendSignalOnOutput("loggedOut")}),t.on("sessionLost",()=>{this.setUserModel(void 0),this.hasOutput("sessionLost")&&this.sendSignalOnOutput("sessionLost")})},getInspectInfo(){const e=this._internal.model;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:this._internal.model.data}]:"[No Model]"},outputs:{id:{type:"string",displayName:"Id",group:"General",getter(){return this._internal.model!==void 0?this._internal.model.getId():void 0}},fetched:{type:"signal",displayName:"Fetched",group:"Events"},changed:{type:"signal",displayName:"Changed",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}},username:{type:"string",displayName:"Username",group:"General",getter(){return this._internal.model!==void 0?this._internal.model.get("username"):void 0}},email:{type:"string",displayName:"Email",group:"General",getter(){return this._internal.model!==void 0?this._internal.model.get("email"):void 0}},authenticated:{type:"boolean",displayName:"Authenticated",group:"General",getter(){return this._internal.model!==void 0}}},inputs:{fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleFetch()}}},methods:{_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},scheduleOnce(e,t){const n=this,o="hasScheduled"+e;this._internal[o]||(this._internal[o]=!0,this.scheduleAfterInputsHaveUpdated(function(){n._internal[o]=!1,t()}))},setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-warning")},setUserModel(e){const t=this._internal;if(t.model!==e&&(t.model&&t.model.off("change",t.onModelChangedCallback),t.model=e,e&&e.on("change",t.onModelChangedCallback)),this.flagOutputDirty("id"),this.flagOutputDirty("authenticated"),this.flagOutputDirty("email"),this.flagOutputDirty("username"),e)for(var n in e.data)this.hasOutput("prop-"+n)&&this.flagOutputDirty("prop-"+n)},scheduleFetch(){this._internal,this.scheduleOnce("Fetch",()=>{const e=Runtime.Services.UserService.forScope(this.nodeScope.modelScope);e.fetchCurrentUser({success:t=>{this.setUserModel(e.current),this.sendSignalOnOutput("fetched")},error:t=>{this.setError(t||"Failed to fetch.")}})})},registerOutputIfNeeded(e){if(!this.hasOutput(e)){if(e==="loggedOut"||e==="loggedIn"||e==="sessionLost"){this.registerOutput(e,{getter:()=>{}});return}e.startsWith("prop-")&&this.registerOutput(e,{getter:this.getUserProperty.bind(this,e.substring(5))})}},getUserProperty(e){return this._internal.model!==void 0?this._internal.model.get(e):void 0}}};function updatePorts$b(e,t,n,o){var r=[];if(o){var s=o.find(d=>d.name==="_User");if(s&&s.schema&&s.schema.properties){var a=s.schema.properties;const d=["authData","password","username","email"];for(var l in a)if(d.indexOf(l)===-1){var u=a[l];if(!r.find(h=>h.name===l)&&u.type!=="Relation"){const h={String:"string",Boolean:"boolean",Number:"number",Date:"date"};r.push({type:{name:h[u.type]?h[u.type]:"*"},plug:"output",group:"Properties",name:"prop-"+l,displayName:l}),r.push({type:"signal",plug:"output",group:"Changed Events",displayName:l+" Changed",name:"changed-"+l})}}}}typeof _noodl_cloud_runtime_version>"u"&&(r.push({plug:"output",name:"loggedIn",type:"signal",displayName:"Logged In",group:"Events"}),r.push({plug:"output",name:"loggedOut",type:"signal",displayName:"Logged Out",group:"Events"}),r.push({plug:"output",name:"sessionLost",type:"signal",displayName:"Session Lost",group:"Events"})),n.sendDynamicPorts(e,r)}const User={node:UserNodeDefinition,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$b(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections")),o.on("parameterUpdated",function(r){updatePorts$b(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections"))}),t.on("metadataChanged.systemCollections",function(r){updatePorts$b(o.id,o.parameters,e.editorConnection,r)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.net.noodl.user.User",function(o){n(o)});for(const o of t.getNodesWithType("net.noodl.user.User"))n(o)})}};function registerNodes$1(e){[ComponentInputs,ComponentOutputs,RunTasks,RestNode$1,Expression,SimpleJavaScript,DbCollectionNode2,DbModelNode2,SetDbModelPropertiedNodeDefinition,DeleteDbModelPropertiedNodeDefinition,NewDbModelPropertiedNodeDefinition,AddDbModelRelationNodeDefinition$1,AddDbModelRelationNodeDefinition,FilterDbModelsNode,ModelNode2,SetModelPropertiedNodeDefinition,NewModelNodeDefinition,CloudFileNode$1,DbConfig,NumberVar,StringVar,BooleanVar,Condition,And,Or,BooleanToString,DateToString,StringMapper,Inverter,Substring,StringFormat,Counter,UniqueId,SetUserProperties,User].forEach(t=>e.registerNode(t))}function Runtime(e){if(e=e||{},e.platform=e.platform||{},Runtime.instance=this,this.type=e.type||"browser",this.noodlModules=[],this.eventEmitter=new EventEmitter$2,this.updateScheduled=!1,this.rootComponent=null,this._currentLoadedData=null,this.isWaitingForExport=!0,this.graphModel=new GraphModel,this.errorHandlers=[],this.frameNumber=0,this.dontCreateRootComponent=!!e.dontCreateRootComponent,this.componentFilter=e.componentFilter,this.runningInEditor=!e.runDeployed,this.platform={requestUpdate:e.platform.requestUpdate,getCurrentTime:e.platform.getCurrentTime,webSocketOptions:e.platform.webSocketOptions,objectToString:e.platform.objectToString},!e.platform.requestUpdate)throw new Error("platform.requestUpdate must be set");if(!e.platform.getCurrentTime)throw new Error("platform.getCurrentTime must be set");this.editorConnection=new EditorConnection({platform:e.platform,runtimeType:this.type}),this.context=new NodeContext({runningInEditor:!e.runDeployed,editorConnection:this.editorConnection,platform:this.platform,graphModel:this.graphModel}),this.context.eventEmitter.on("scheduleUpdate",this.scheduleUpdate.bind(this)),e.runDeployed||this._setupEditorCommunication(e),this.registerGraphModelListeners(),registerNodes$1(this)}Runtime.prototype.prefetchBundles=async function(e,t){await asyncPool(t,e,async n=>{await this.context.fetchComponentBundle(n)})},Runtime.prototype._setupEditorCommunication=function(e){function t(n,o){if(n==null||o===null||o===void 0)return n===o;if(n===o)return!0;if(Array.isArray(n)&&n.length!==o.length||!(n instanceof Object)||!(o instanceof Object))return!1;var r=Object.keys(n);return Object.keys(o).every(function(s){return r.indexOf(s)!==-1})&&r.every(function(s){return t(n[s],o[s])})}this.editorConnection.on("exportDataFull",async n=>{if(this.graphModel.isEmpty()===!1){this.reload();return}if(this.isWaitingForExport=!1,t(this._currentLoadedData,n)===!1){if(this.componentFilter&&(n.components=n.components.filter(o=>this.componentFilter(o))),await this.setData(n),n.componentIndex){const o=Object.keys(n.componentIndex);await this.prefetchBundles(o,2)}this.graphModel.emit("editorImportComplete")}}),this.editorConnection.on("reload",this.reload.bind(this)),this.editorConnection.on("modelUpdate",this.onModelUpdateReceived.bind(this)),this.editorConnection.on("metadataUpdate",this.onMetaDataUpdateReceived.bind(this)),this.editorConnection.on("connected",()=>{this.sendNodeLibrary()})},Runtime.prototype.setDebugInspectorsEnabled=function(e){this.context.setDebugInspectorsEnabled(e)},Runtime.prototype.registerModule=function(e){if(e.nodes)for(let t of e.nodes)t.node||(t={node:t}),t.node.module=e.name||"Unknown Module",this.registerNode(t);this.noodlModules.push(e)},Runtime.prototype.registerGraphModelListeners=function(){var e=this;this.graphModel.on("componentAdded",function(t){e.context.registerComponentModel(t)},this),this.graphModel.on("componentRemoved",function(t){e.context.deregisterComponentModel(t)},this)},Runtime.prototype.reload=function(){location.reload()},Runtime.prototype.registerNode=function(e){if(e.node){const t=defineNode(e.node);this.context.nodeRegister.register(t),t.setupNumberedInputDynamicPorts&&t.setupNumberedInputDynamicPorts(this.context,this.graphModel)}else this.context.nodeRegister.register(e);e.setup&&e.setup(this.context,this.graphModel)},Runtime.prototype._setRootComponent=async function(e){this.rootComponent&&this.rootComponent.name===e||(this.rootComponent&&(this.rootComponent.model&&this.rootComponent.model.removeListenersWithRef(this),this.rootComponent=void 0),e&&(this.rootComponent=await this.context.createComponentInstanceNode(e,"rootComponent"),this.rootComponent.componentModel.on("rootAdded",()=>this.eventEmitter.emit("rootComponentUpdated"),this),this.rootComponent.componentModel.on("rootRemoved",()=>this.eventEmitter.emit("rootComponentUpdated"),this),this.context.setRootComponent(this.rootComponent)),this.eventEmitter.emit("rootComponentUpdated"))},Runtime.prototype.setData=async function(e){if(!this._disableLoad){this._currentLoadedData=e,await this.graphModel.importEditorData(e);for(const t of this.noodlModules)typeof t.setup=="function"&&t.setup.apply(t);this.dontCreateRootComponent!==!0&&(await this._setRootComponent(this.graphModel.rootComponent),this.graphModel.on("rootComponentNameUpdated",t=>{this._setRootComponent(t)}),this.graphModel.on("componentRemoved",t=>{this.rootComponent&&this.rootComponent.name===t.name&&this._setRootComponent(null)}),this.graphModel.on("componentAdded",t=>{setTimeout(()=>{!this.rootComponent&&this.graphModel.rootComponent===t.name&&this._setRootComponent(t.name)},1)})),this.scheduleUpdate()}},Runtime.prototype.scheduleUpdate=function(){this.updateScheduled||(this.updateScheduled=!0,this.platform.requestUpdate(Runtime.prototype._doUpdate.bind(this)))},Runtime.prototype._doUpdate=function(){this.updateScheduled=!1,this.context.currentFrameTime=this.platform.getCurrentTime(),this.context.eventEmitter.emit("frameStart"),this.context.update(),this.context.eventEmitter.emit("frameEnd"),this.frameNumber++},Runtime.prototype.setProjectSettings=function(e){this.projectSettings=e},Runtime.prototype.getNodeLibrary=function(){var e=generateProjectSettings(this.graphModel.getSettings(),this.noodlModules);this.projectSettings&&(this.projectSettings.ports&&(e.ports=e.ports.concat(this.projectSettings.ports)),this.projectSettings.dynamicports&&(e.dynamicports=e.ports.concat(this.projectSettings.dynamicports)));var t=generateNodeLibrary(this.context.nodeRegister);return t.projectsettings=e,JSON.stringify(t,null,3)},Runtime.prototype.sendNodeLibrary=function(){const e=this.getNodeLibrary();this.lastSentNodeLibrary!==e&&(this.lastSentNodeLibrary=e,this.editorConnection.sendNodeLibrary(e))},Runtime.prototype.connectToEditor=function(e){this.editorConnection.connect(e)},Runtime.prototype.onMetaDataUpdateReceived=function(e){this.graphModel.isEmpty()||EditorMetaDataEventsHandler.handleEvent(this.context,this.graphModel,e)},Runtime.prototype.onModelUpdateReceived=async function(e){this.isWaitingForExport||(e.type==="projectInstanceChanged"?this.reload():this.graphModel.isEmpty()===!1&&await handleEvent(this.context,this.graphModel,e))},Runtime.prototype.addErrorHandler=function(e){this.errorHandlers.push(e)},Runtime.prototype.reportError=function(e){this.errorHandlers.forEach(function(t){t(e)})},Runtime.prototype.getProjectSettings=function(){return this.graphModel.getSettings()},Runtime.prototype.getMetaData=function(e){return this.graphModel.getMetaData(e)},Runtime.Services=Services,Runtime.Node=Node,Runtime.NodeDefinition={defineNode},Runtime.EdgeTriggeredInput=EdgeTriggeredInput;const _protectedFields={_common:["_createdAt","_updatedAt","objectId"],_User:["_email_verify_token"]};function _removeProtectedFields(e,t){const n=Object.assign({},e);return _protectedFields._common.forEach(o=>delete n[o]),t&&_protectedFields[t]&&_protectedFields[t].forEach(o=>delete n[o]),n}class CloudStore{constructor(t){this._initCloudServices(),this.events=new EventEmitter$2,this.events.setMaxListeners(1e4),this.modelScope=t,this._fromJSON=(n,o)=>CloudStore._fromJSON(n,o,t),this._deserializeJSON=(n,o)=>CloudStore._deserializeJSON(n,o,t),this._serializeObject=(n,o)=>CloudStore._serializeObject(n,o,t)}_initCloudServices(){_collections=void 0;const t=Runtime.instance.getMetaData("cloudservices");t&&(this.appId=t.appId,this.endpoint=t.endpoint);const n=Runtime.instance.getMetaData("dbVersionMajor");this.dbVersionMajor=n}on(){this.events.on.apply(this.events,arguments)}off(){this.events.off.apply(this.events,arguments)}_makeRequest(t,n){if(typeof _noodl_cloud_runtime_version>"u"){var o=new XMLHttpRequest;o.onreadystatechange=function(){if(o.readyState===4){var s;try{s=JSON.parse(o.response||o.responseText)}catch{}o.status===200||o.status===201?n.success(s):n.error(s||{error:o.responseText,status:o.status})}},o.open(n.method||"GET",this.endpoint+t,!0),o.setRequestHeader("X-Parse-Application-Id",this.appId),typeof _noodl_cloudservices<"u"&&o.setRequestHeader("X-Parse-Master-Key",_noodl_cloudservices.masterKey);var r=localStorage["Parse/"+this.appId+"/currentUser"];if(r!==void 0)try{const s=JSON.parse(r);o.setRequestHeader("X-Parse-Session-Token",s.sessionToken)}catch{}n.onUploadProgress&&(o.upload.onprogress=s=>n.onUploadProgress(s)),n.content instanceof File?o.send(n.content):(o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify(n.content)))}else{const s=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.endpoint:this.endpoint,a=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.appId:this.appId,l=typeof _noodl_cloudservices<"u"?_noodl_cloudservices.masterKey:void 0;fetch(s+t,{method:n.method||"GET",headers:{"X-Parse-Application-Id":a,"X-Parse-Master-Key":l,"Content-Type":"application/json"},body:JSON.stringify(n.content)}).then(u=>{u.status===200||u.status===201?n.method==="DELETE"?n.success(void 0):u.json().then(d=>n.success(d)).catch(d=>n.error({error:"CloudStore: Failed to get json result."})):n.method==="DELETE"?n.error({error:"Failed to delete."}):u.json().then(d=>n.error(d)).catch(d=>n.error({error:"Failed to fetch."}))}).catch(u=>{n.error({error:u.message})})}}query(t){this._makeRequest("/classes/"+t.collection,{method:"POST",content:{_method:"GET",where:t.where,limit:t.limit,skip:t.skip,include:Array.isArray(t.include)?t.include.join(","):t.include,keys:Array.isArray(t.select)?t.select.join(","):t.select,order:Array.isArray(t.sort)?t.sort.join(","):t.sort,count:t.count},success(n){t.success(n.results,n.count)},error(){t.error()}})}aggregate(t){const n=[];if(!t.group){t.error("You need to provide group option.");return}t.limit&&n.push("limit="+t.limit),t.skip&&n.push("skip="+t.skip);const o={};Object.keys(t.group).forEach(r=>{const s={},a=t.group[r];a.avg!==void 0?s.$avg="$"+a.avg:a.sum!==void 0?s.$sum="$"+a.sum:a.max!==void 0?s.$max="$"+a.max:a.min!==void 0?s.$min="$"+a.min:a.distinct!==void 0&&(s.$addToSet="$"+a.distinct),o[r]=s}),this.dbVersionMajor&&this.dbVersionMajor>4?(o._id=null,t.where&&n.push("$match="+encodeURIComponent(JSON.stringify(t.where))),n.push("$group="+JSON.stringify(o))):(o.objectId=null,t.where&&n.push("match="+encodeURIComponent(JSON.stringify(t.where))),n.push("group="+JSON.stringify(o))),this._makeRequest("/aggregate/"+t.collection+(n.length>0?"?"+n.join("&"):""),{success(r){const s={};if(!r.results||r.results.length!==1){t.success({});return}Object.keys(t.group).forEach(a=>{s[a]=r.results[0][a]}),t.success(s)},error(){t.error()}})}count(t){const n=[];t.where&&n.push("where="+encodeURIComponent(JSON.stringify(t.where))),n.push("limit=0"),n.push("count=1"),this._makeRequest("/classes/"+t.collection+(n.length>0?"?"+n.join("&"):""),{success(o){t.success(o.count)},error(){t.error()}})}distinct(t){const n=[];t.where&&n.push("where="+encodeURIComponent(JSON.stringify(t.where))),n.push("distinct="+t.property),this._makeRequest("/aggregate/"+t.collection+(n.length>0?"?"+n.join("&"):""),{success(o){t.success(o.results)},error(){t.error()}})}fetch(t){const n=[];t.include&&n.push("include="+(Array.isArray(t.include)?t.include.join(","):t.include)),t.keys&&n.push("keys="+(Array.isArray(t.keys)?t.keys.join(","):t.keys)),t.excludeKeys&&n.push("excludeKeys="+(Array.isArray(t.excludeKeys)?t.excludeKeys.join(","):t.excludeKeys)),this._makeRequest("/classes/"+t.collection+"/"+t.objectId+(n.length>0?"?"+n.join("&"):""),{method:"GET",success:o=>{t.success(o),this.events.emit("fetch",{type:"fetch",objectId:t.objectId,object:o,collection:t.collection})},error(o){t.error(o.error)}})}create(t){this._makeRequest("/classes/"+t.collection,{method:"POST",content:Object.assign(_removeProtectedFields(_serializeObject(t.data,t.collection),t.collection),{ACL:t.acl}),success:n=>{const o=Object.assign({},t.data,n);t.success(o),this.events.emit("create",{type:"create",objectId:t.objectId,object:o,collection:t.collection})},error(n){t.error(n.error)}})}increment(t){const n={};for(let o in t.properties)n[o]={__op:"Increment",amount:t.properties[o]};this._makeRequest("/classes/"+t.collection+"/"+t.objectId,{method:"PUT",content:n,success:o=>{t.success(o)},error(o){t.error(o.error)}})}save(t){const n=Object.assign({},t.data);delete n.createdAt,delete n.updatedAt,this._makeRequest("/classes/"+t.collection+"/"+t.objectId,{method:"PUT",content:Object.assign(_removeProtectedFields(_serializeObject(n,t.collection),t.collection),{ACL:t.acl}),success:o=>{t.success(o),this.events.emit("save",{type:"save",objectId:t.objectId,object:Object.assign({},t.data,o),collection:t.collection})},error(o){t.error(o.error)}})}delete(t){this._makeRequest("/classes/"+t.collection+"/"+t.objectId,{method:"DELETE",success:()=>{t.success(),this.events.emit("delete",{type:"delete",objectId:t.objectId,collection:t.collection})},error(n){t.error(n.error)}})}addRelation(t){const n={};n[t.key]={__op:"AddRelation",objects:[{__type:"Pointer",objectId:t.targetObjectId,className:t.targetClass}]},this._makeRequest("/classes/"+t.collection+"/"+t.objectId,{method:"PUT",content:n,success(o){t.success(o)},error(o){t.error(o.error)}})}removeRelation(t){const n={};n[t.key]={__op:"RemoveRelation",objects:[{__type:"Pointer",objectId:t.targetObjectId,className:t.targetClass}]},this._makeRequest("/classes/"+t.collection+"/"+t.objectId,{method:"PUT",content:n,success(o){t.success(o)},error(o){t.error(o.error)}})}uploadFile(t){this._makeRequest("/files/"+t.file.name,{method:"POST",content:t.file,contentType:t.file.type,success:n=>t.success(Object.assign({},t.data,n)),error:n=>t.error(n),onUploadProgress:t.onUploadProgress})}deleteFile(t){this._makeRequest("/files/"+t.file.name,{method:"DELETE",success:n=>t.success(Object.assign({},t.data,n)),error:n=>t.error(n)})}}function _isArrayOfObjects(e){if(!Array.isArray(e))return!1;for(let t=0;t<e.length;t++)if(typeof e[t]!="object"||e[t]===null)return!1;return!0}function _toJSON(e){if(e instanceof Model){var t={};for(var n in e.data)t[n]=_toJSON(e.data[n]);return t}else if(e instanceof Collection){var t=[];return e.items.forEach(r=>{t.push(_toJSON(r))}),t}return e}function _serializeObject(e,t,n){if(CloudStore._collections[t])var o=CloudStore._collections[t].schema;for(var r in e){var s=o&&o.properties&&o.properties[r]?o.properties[r].type:void 0;if(!(e[r]===void 0||e[r]===null))if(s==="Pointer"&&typeof e[r]=="string")e[r]={__type:"Pointer",className:o.properties[r].targetClass,objectId:e[r]};else if(s==="Pointer"&&typeof e[r]=="object"&&(n||Model).instanceOf(e[r]))e[r]={__type:"Pointer",className:o.properties[r].targetClass,objectId:e[r].getId()};else if(s==="Date"&&(typeof e[r]=="string"||e[r]instanceof Date))e[r]={__type:"Date",iso:e[r]instanceof Date?e[r].toISOString():e[r]};else if(s==="File"&&e[r]instanceof CloudFile){const a=e[r];e[r]={__type:"File",url:a.getUrl(),name:a.getName()}}else s==="Array"&&typeof e[r]=="string"&&Collection.exists(e[r])?e[r]=_toJSON(Collection.get(e[r])):s==="Object"&&typeof e[r]=="string"&&(n||Model).exists(e[r])?e[r]=_toJSON((n||Model).get(e[r])):s==="GeoPoint"&&typeof e[r]=="object"?e[r]={__type:"GeoPoint",latitude:Number(e[r].latitude),longitude:Number(e[r].longitude)}:e[r]=_toJSON(e[r])}return e}function _deserializeJSON(e,t,n){if(e!==void 0){if(e===null)return null;if(!(t==="Relation"&&e.__type==="Relation")){if(t==="Pointer"&&e.__type==="Pointer")return e.objectId;if(t==="Date"&&e.__type==="Date")return new Date(e.iso);if(t==="Date"&&typeof e=="string")return new Date(e);if(t==="File"&&e.__type==="File")return new CloudFile(e);if(t==="GeoPoint"&&e.__type==="GeoPoint")return{latitude:e.latitude,longitude:e.longitude};if(_isArrayOfObjects(e)){const o=[];for(let s=0;s<e.length;s++)o.push(_deserializeJSON(e[s],void 0,n));const r=Collection.get();return r.set(o),r}if(Array.isArray(e))return e;if(e&&e.__type==="Object"&&e.className!==void 0&&e.objectId!==void 0){const o=Object.assign({},e);return delete o.className,delete o.__type,_fromJSON(o,e.className,n)}if(typeof e=="object"&&e!==null){const o=(n||Model).get(e.id);for(const r in e){const s=_deserializeJSON(e[r],void 0,n);o.set(r,s)}return o}return e}}}function _fromJSON(e,t,n){const o=(n||Model).get(e.objectId||e.id);o._class=t;let r;t!==void 0&&CloudStore._collections[t]!==void 0&&(r=CloudStore._collections[t].schema);for(const s in e){if(s==="objectId"||s==="ACL")continue;const a=r&&r.properties&&r.properties[s]?r.properties[s].type:void 0,l=_deserializeJSON(e[s],a,n);o.set(s,l)}return o}CloudStore._fromJSON=_fromJSON,CloudStore._deserializeJSON=_deserializeJSON,CloudStore._serializeObject=_serializeObject,CloudStore.forScope=e=>e===void 0?CloudStore.instance:(e._cloudStore||(e._cloudStore=new CloudStore(e)),e._cloudStore);var _instance$1;Object.defineProperty(CloudStore,"instance",{get(){return _instance$1===void 0&&(_instance$1=new CloudStore),_instance$1}});var _collections;Object.defineProperty(CloudStore,"_collections",{get(){return _collections===void 0&&(_collections={},(Runtime.instance.getMetaData("dbCollections")||[]).forEach(e=>{_collections[e.name]=e}),(Runtime.instance.getMetaData("systemCollections")||[]).forEach(e=>{_collections[e.name]=e})),_collections}}),CloudStore.invalidateCollections=()=>{_collections=void 0};function createRecordsAPI(e){let t;const n=()=>(t||(t=new CloudStore(e)),t);return{async query(o,r,s){if(typeof o>"u")throw new Error("'className' is undefined");return new Promise((a,l)=>{n().query({collection:o,where:convertFilterOp(r||{},{collectionName:o,error:u=>l(u),modelScope:e}),limit:s?s.limit:void 0,sort:s?s.sort:void 0,skip:s?s.skip:void 0,include:s?s.include:void 0,select:s?s.select:void 0,count:s?s.count:void 0,success:(u,d)=>{const h=u.map(f=>n()._fromJSON(f,o));a(d!==void 0?{results:h,count:d}:h)},error:u=>{l(Error(u||"Failed to query."))}})})},async count(o,r){if(typeof o>"u")throw new Error("'className' is undefined");return new Promise((s,a)=>{n().count({collection:o,where:r?convertFilterOp(r||{},{collectionName:o,error:l=>a(l),modelScope:e}):void 0,success:l=>{s(l)},error:l=>{a(Error(l||"Failed to query."))}})})},async distinct(o,r,s){if(typeof o>"u")throw new Error("'className' is undefined");return new Promise((a,l)=>{n().distinct({collection:o,property:r,where:s?convertFilterOp(s||{},{collectionName:o,error:u=>l(u),modelScope:e}):void 0,success:u=>{a(u)},error:u=>{l(Error(u||"Failed to query."))}})})},async aggregate(o,r,s){if(typeof o>"u")throw new Error("'className' is undefined");return new Promise((a,l)=>{n().aggregate({collection:o,group:r,where:s?convertFilterOp(s||{},{collectionName:o,error:u=>l(u),modelScope:e}):void 0,success:u=>{a(u)},error:u=>{l(Error(u||"Failed to aggregate."))}})})},async fetch(o,r){if(typeof o>"u")return Promise.reject(new Error("'objectOrId' is undefined."));typeof o!="string"&&(o=o.getId());const s=(r?r.className:void 0)||Model.get(o)._class;return new Promise((a,l)=>{if(!s)return l("No class name specified");n().fetch({collection:s,objectId:o,keys:r?.keys,include:r?.include,excludeKeys:r?.excludeKeys,success(u){const d=n()._fromJSON(u,s);a(d)},error(u){l(Error(u||"Failed to fetch."))}})})},async increment(o,r,s){if(typeof o>"u")return Promise.reject(new Error("'objectOrId' is undefined."));typeof o!="string"&&(o=o.getId());const a=(s?s.className:void 0)||Model.get(o)._class;return new Promise((l,u)=>{if(!a)return u("No class name specified");n().increment({collection:a,objectId:o,properties:r,success:d=>{n()._fromJSON(Object.assign({objectId:o},d),a),l()},error:d=>{u(Error(d||"Failed to increment."))}})})},async save(o,r,s){if(typeof o>"u")return Promise.reject(new Error("'objectOrId' is undefined."));typeof o!="string"&&(o=o.getId());const a=(s?s.className:void 0)||Model.get(o)._class,l=Model.get(o);return r&&Object.keys(r).forEach(u=>{l.set(u,r[u])}),new Promise((u,d)=>{if(!a)return d("No class name specified");n().save({collection:a,objectId:o,data:r||l.data,acl:s?s.acl:void 0,success:h=>{n()._fromJSON(Object.assign({objectId:o},h),a),u()},error:h=>{d(Error(h||"Failed to save."))}})})},async create(o,r,s){if(typeof o>"u")throw new Error("'className' is undefined");return new Promise((a,l)=>{n().create({collection:o,data:r,acl:s?s.acl:void 0,success:u=>{const d=n()._fromJSON(u,o);a(d)},error:u=>{l(Error(u||"Failed to insert."))}})})},async delete(o,r){if(typeof o>"u")return Promise.reject(new Error("'objectOrId' is undefined."));typeof o!="string"&&(o=o.getId());const s=(r?r.className:void 0)||Model.get(o)._class;return new Promise((a,l)=>{if(!s)return l("No class name specified");n().delete({collection:s,objectId:o,success:()=>{Model.get(o).notify("delete"),a()},error:u=>{l(Error(u||"Failed to delete."))}})})},async addRelation(o){const r=o.recordId||o.record.getId(),s=o.className||Model.get(r)._class,a=o.targetRecordId||o.targetRecord.getId(),l=o.targetClassName||Model.get(a)._class;return new Promise((u,d)=>{if(!s)return d("No class name specified");if(!l)return d("No target class name specified");n().addRelation({collection:s,objectId:r,key:o.key,targetObjectId:a,targetClass:l,success:h=>{u()},error:h=>{d(Error(h||"Failed to add relation."))}})})},async removeRelation(o){const r=o.recordId||o.record.getId(),s=o.className||Model.get(r)._class,a=o.targetRecordId||o.targetRecord.getId(),l=o.targetClassName||Model.get(a)._class;return new Promise((u,d)=>{if(!s)return d("No class name specified");if(!l)return d("No target class name specified");n().removeRelation({collection:s,objectId:r,key:o.key,targetObjectId:a,targetClass:l,success:h=>{u()},error:h=>{d(Error(h||"Failed to add relation."))}})})}}}function registerPolyfills(){String.prototype.matchAll||(String.prototype.matchAll=function(t){var n=new RegExp(t,"g"),o=[],r=this.match(n);for(let a in r){var s=r[a];o[a]=s.match(new RegExp(t))}return o})}function NoHomeError(){return React.createElement("div",{style:{overflowY:"auto",padding:"24px",fontFamily:"Open Sans",fontSize:"16px",width:"100vw",height:"100vh",backgroundColor:"#F57569"}},React.createElement("div",{style:{marginBottom:"50px",fontWeight:"bold",display:"flex",alignItems:"center"}},React.createElement("span",null,"ERROR"),React.createElement("img",{src:"ndl_assets/noodl-logo-black.svg",style:{marginLeft:"auto"}})),React.createElement("div",{style:{margin:"0 auto",alignItems:"center",display:"flex",flexDirection:"column"}},React.createElement("div",{style:{fontSize:"24px",textAlign:"center",marginBottom:"50px"}},"No"," ",React.createElement("img",{src:"ndl_assets/home-icon.svg",style:{marginRight:"-6px"}})," ",React.createElement("span",{style:{fontWeight:"bold"}},"HOME")," component selected"),React.createElement("div",{style:{textAlign:"center"}},"Click ",React.createElement("span",{style:{fontWeight:"bold"}},"Make home")," as shown below."),React.createElement("img",{style:{marginTop:"24px"},srcSet:"ndl_assets/make-home-instructions@2x.png 2x"})))}class GraphWarnings{constructor(t,n){this.graphModel=t,this.editorConnection=n,this.graphModel.getAllComponents().forEach(o=>this._bindComponentModel(o)),this.graphModel.on("componentAdded",o=>this._bindComponentModel(o),this),this.graphModel.on("componentRemoved",o=>o.removeListenersWithRef(this),this)}_bindComponentModel(t){t.on("rootAdded",()=>this._evaluateWarnings(t),this),t.on("rootRemoved",n=>{this.editorConnection.clearWarning(t.name,n,"multiple-visual-roots-warning"),this._evaluateWarnings(t)},this),this._evaluateWarnings(t)}_evaluateWarnings(t){const n=t.getRoots();if(n.lenth!==0){this.editorConnection.clearWarning(t.name,n[0],"multiple-visual-roots-warning");for(let o=1;o<n.length;o++)this.editorConnection.sendWarning(t.name,n[o],"multiple-visual-roots-warning",{message:"This node is detached from the main node tree<br>and won't be rendered",level:"info"})}}dispose(){this.graphModel.getAllComponents().forEach(t=>{t.removeListenersWithRef(this)}),this.graphModel.removeListenersWithRef(this)}}class Highlighter{constructor(t){this.highlightedNodes=new Map,this.selectedNodes=new Map,this.noodlRuntime=t,this.isUpdatingHighlights=!1;const n=document.createElement("div");n.style.width="100%",n.style.height="100%",n.style.top="0",n.style.left="0",n.style.overflow="hidden",n.style.position="fixed",n.style.zIndex="1000000000",n.style.pointerEvents="none",document.body.appendChild(n),this.highlightRootDiv=n,this.windowBorderDiv=this.createHighlightDiv(),this.windowBorderDiv.style.position="absolute",this.windowBorderDiv.style.top="0",this.windowBorderDiv.style.left="0",this.windowBorderDiv.style.boxShadow="inset 0 0 0 3px #2CA7BA",this.windowBorderDiv.style.opacity="1.0",this.windowBorderDiv.style.width="100vw",this.windowBorderDiv.style.height="100vh"}createHighlightDiv(){const t=document.createElement("div");return t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.outline="2px solid #2CA7BA",t.style.opacity="1.0",t}setWindowSelected(t){}updateHighlights(){const t=Array.from(this.highlightedNodes.entries()).concat(Array.from(this.selectedNodes.entries()));for(const n of t){const o=n[0].getRef()&&ReactDOM.findDOMNode(n[0].getRef());if(!o){this.highlightedNodes.delete(n[0]),n[1].remove();continue}const r=o.getBoundingClientRect(),s=n[1];s.style.transform=`translateX(${r.x}px) translateY(${r.y}px)`,s.style.width=r.width+"px",s.style.height=r.height+"px"}this.isUpdatingHighlights=this.highlightedNodes.size>0||this.selectedNodes.size>0,this.isUpdatingHighlights&&requestAnimationFrame(this.updateHighlights.bind(this))}highlightNodesWithId(t){const n=getNodes(this.noodlRuntime,t).filter(o=>o.getRef).filter(o=>!this.highlightedNodes.has(o));for(const o of n){const r=this.createHighlightDiv();this.highlightRootDiv.appendChild(r),this.highlightedNodes.set(o,r)}(this.selectedNodes.size>0||this.highlightedNodes.size>0)&&!this.isUpdatingHighlights&&this.updateHighlights()}disableHighlight(){const t=Array.from(this.highlightedNodes.entries());for(const[n,o]of t)o&&o.remove();this.highlightedNodes.clear()}selectNodesWithId(t){this.noodlRuntime.rootComponent||this.noodlRuntime.eventEmitter.once("rootComponentUpdated",()=>{setTimeout(()=>{this.selectNodesWithId(t)},300)});const n=getNodes(this.noodlRuntime,t).filter(o=>o.getRef).filter(o=>!this.selectedNodes.has(o));for(const o of n){const r=this.createHighlightDiv();this.highlightRootDiv.appendChild(r),this.selectedNodes.set(o,r)}return this.selectedNodes.size>0&&this.setWindowSelected(!1),(this.selectedNodes.size>0||this.highlightedNodes.size>0)&&!this.isUpdatingHighlights&&this.updateHighlights(),n}deselectNodes(){const t=Array.from(this.selectedNodes.entries());for(const[n,o]of t)o&&o.remove();this.selectedNodes.clear()}}function getNodes(e,t){return e.rootComponent?e.rootComponent.nodeScope.getNodesWithIdRecursive(t):[]}class Inspector{constructor({onInspect:t,onHighlight:n,onDisableHighlight:o}){this.onMouseMove=r=>{o();const s=this.findNoodlNode(r.target);s?(document.body.style.cursor="pointer",n(s.id)):document.body.style.cursor="initial",r.stopPropagation()},this.onClick=r=>{o();const s=this.findNoodlNode(r.target);s&&t([s.id]),r.stopPropagation(),r.preventDefault(),document.activeElement&&document.activeElement.blur()},this.onContextMenu=r=>{const s=document.elementsFromPoint(r.clientX,r.clientY).map(a=>this.findNoodlNode(a)).filter(a=>!!a).map(a=>a.id);s.length&&t(s),r.stopPropagation(),r.preventDefault(),document.activeElement&&document.activeElement.blur()},this.onMouseOut=r=>{o()},this.blockEvent=r=>{r.stopPropagation()},this.onDisableHighlight=o}setComponent(t){this.component=t}enable(){document.activeElement&&document.activeElement.blur(),document.addEventListener("mouseenter",this.blockEvent,!0),document.addEventListener("mouseover",this.blockEvent,!0),document.addEventListener("mousedown",this.blockEvent,!0),document.addEventListener("mouseup",this.blockEvent,!0),document.addEventListener("mousemove",this.onMouseMove,!0),document.addEventListener("mouseout",this.onMouseOut,!0),document.addEventListener("click",this.onClick,!0),document.addEventListener("contextmenu",this.onContextMenu,!0)}disable(){document.body.style.cursor="initial",document.removeEventListener("mouseenter",this.blockEvent,!0),document.removeEventListener("mouseover",this.blockEvent,!0),document.removeEventListener("mousedown",this.blockEvent,!0),document.removeEventListener("mouseup",this.blockEvent,!0),document.removeEventListener("mousemove",this.onMouseMove,!0),document.removeEventListener("mouseout",this.onMouseOut,!0),document.removeEventListener("click",this.onClick,!0),document.removeEventListener("contextmenu",this.onContextMenu,!0),this.onDisableHighlight()}findNoodlNode(t){let n;for(;!n&&t;){const a=Object.keys(t).find(l=>l.startsWith("__reactInternalInstance$"));n=t[a],n||(t=t.parentElement)}if(!n)return;const o=a=>{let l=a.return;for(;l&&typeof l.type=="string";)l=l.return;return l};let r=o(n);for(;r&&(!r.stateNode||!r.stateNode.props||!r.stateNode.props.noodlNode);)r=o(r);const s=r?r.stateNode.props.noodlNode:void 0;if(s){if(this.component){let a=s;for(;a;)if(a.parentNodeScope){if(a.parentNodeScope.componentOwner.name===this.component.name)return a;a=a.parentNodeScope.componentOwner}else{if(a.nodeScope.componentOwner.name===this.component.name)return a;a=a.nodeScope.componentOwner}return a}return s}}}const IS_BROWSER=typeof document<"u";class SeoApi{constructor(){this._title="",this._meta={}}get title(){return IS_BROWSER?document.title:this._title}setTitle(t){this._title=t,IS_BROWSER&&(document.title=t)}get meta(){return this._meta}clearMeta(){IS_BROWSER&&Object.keys(this._meta).forEach(t=>{const n=document.querySelector(`meta[name="${t}"]`);n&&n.remove()}),this._meta={}}getMeta(t){return this._meta[t]}setMeta(t,n){if(this._meta[t]=n,IS_BROWSER){const o=document.querySelector(`meta[name="${t}"]`);if(o)n?o.setAttribute("content",n):o.remove();else if(n){const r=document.createElement("meta");r.setAttribute("name",t),r.setAttribute("property",t),r.setAttribute("content",n),document.head.appendChild(r)}}}}var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var events={exports:{}},hasRequiredEvents;function requireEvents(){if(hasRequiredEvents)return events.exports;hasRequiredEvents=1;var e=typeof Reflect=="object"?Reflect:null,t=e&&typeof e.apply=="function"?e.apply:function(w,E,F){return Function.prototype.apply.call(w,E,F)},n;e&&typeof e.ownKeys=="function"?n=e.ownKeys:Object.getOwnPropertySymbols?n=function(w){return Object.getOwnPropertyNames(w).concat(Object.getOwnPropertySymbols(w))}:n=function(w){return Object.getOwnPropertyNames(w)};function o(N){console&&console.warn&&console.warn(N)}var r=Number.isNaN||function(w){return w!==w};function s(){s.init.call(this)}events.exports=s,events.exports.once=v,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var a=10;function l(N){if(typeof N!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof N)}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(N){if(typeof N!="number"||N<0||r(N))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+N+".");a=N}}),s.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(w){if(typeof w!="number"||w<0||r(w))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+w+".");return this._maxListeners=w,this};function u(N){return N._maxListeners===void 0?s.defaultMaxListeners:N._maxListeners}s.prototype.getMaxListeners=function(){return u(this)},s.prototype.emit=function(w){for(var E=[],F=1;F<arguments.length;F++)E.push(arguments[F]);var L=w==="error",B=this._events;if(B!==void 0)L=L&&B.error===void 0;else if(!L)return!1;if(L){var H;if(E.length>0&&(H=E[0]),H instanceof Error)throw H;var J=new Error("Unhandled error."+(H?" ("+H.message+")":""));throw J.context=H,J}var ie=B[w];if(ie===void 0)return!1;if(typeof ie=="function")t(ie,this,E);else for(var pe=ie.length,xe=_(ie,pe),F=0;F<pe;++F)t(xe[F],this,E);return!0};function d(N,w,E,F){var L,B,H;if(l(E),B=N._events,B===void 0?(B=N._events=Object.create(null),N._eventsCount=0):(B.newListener!==void 0&&(N.emit("newListener",w,E.listener?E.listener:E),B=N._events),H=B[w]),H===void 0)H=B[w]=E,++N._eventsCount;else if(typeof H=="function"?H=B[w]=F?[E,H]:[H,E]:F?H.unshift(E):H.push(E),L=u(N),L>0&&H.length>L&&!H.warned){H.warned=!0;var J=new Error("Possible EventEmitter memory leak detected. "+H.length+" "+String(w)+" listeners added. Use emitter.setMaxListeners() to increase limit");J.name="MaxListenersExceededWarning",J.emitter=N,J.type=w,J.count=H.length,o(J)}return N}s.prototype.addListener=function(w,E){return d(this,w,E,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(w,E){return d(this,w,E,!0)};function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(N,w,E){var F={fired:!1,wrapFn:void 0,target:N,type:w,listener:E},L=h.bind(F);return L.listener=E,F.wrapFn=L,L}s.prototype.once=function(w,E){return l(E),this.on(w,f(this,w,E)),this},s.prototype.prependOnceListener=function(w,E){return l(E),this.prependListener(w,f(this,w,E)),this},s.prototype.removeListener=function(w,E){var F,L,B,H,J;if(l(E),L=this._events,L===void 0)return this;if(F=L[w],F===void 0)return this;if(F===E||F.listener===E)--this._eventsCount===0?this._events=Object.create(null):(delete L[w],L.removeListener&&this.emit("removeListener",w,F.listener||E));else if(typeof F!="function"){for(B=-1,H=F.length-1;H>=0;H--)if(F[H]===E||F[H].listener===E){J=F[H].listener,B=H;break}if(B<0)return this;B===0?F.shift():T(F,B),F.length===1&&(L[w]=F[0]),L.removeListener!==void 0&&this.emit("removeListener",w,J||E)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(w){var E,F,L;if(F=this._events,F===void 0)return this;if(F.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):F[w]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete F[w]),this;if(arguments.length===0){var B=Object.keys(F),H;for(L=0;L<B.length;++L)H=B[L],H!=="removeListener"&&this.removeAllListeners(H);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(E=F[w],typeof E=="function")this.removeListener(w,E);else if(E!==void 0)for(L=E.length-1;L>=0;L--)this.removeListener(w,E[L]);return this};function g(N,w,E){var F=N._events;if(F===void 0)return[];var L=F[w];return L===void 0?[]:typeof L=="function"?E?[L.listener||L]:[L]:E?A(L):_(L,L.length)}s.prototype.listeners=function(w){return g(this,w,!0)},s.prototype.rawListeners=function(w){return g(this,w,!1)},s.listenerCount=function(N,w){return typeof N.listenerCount=="function"?N.listenerCount(w):b.call(N,w)},s.prototype.listenerCount=b;function b(N){var w=this._events;if(w!==void 0){var E=w[N];if(typeof E=="function")return 1;if(E!==void 0)return E.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]};function _(N,w){for(var E=new Array(w),F=0;F<w;++F)E[F]=N[F];return E}function T(N,w){for(;w+1<N.length;w++)N[w]=N[w+1];N.pop()}function A(N){for(var w=new Array(N.length),E=0;E<w.length;++E)w[E]=N[E].listener||N[E];return w}function v(N,w){return new Promise(function(E,F){function L(H){N.removeListener(w,B),F(H)}function B(){typeof N.removeListener=="function"&&N.removeListener("error",L),E([].slice.call(arguments))}k(N,w,B,{once:!0}),w!=="error"&&I(N,L,{once:!0})})}function I(N,w,E){typeof N.on=="function"&&k(N,"error",w,E)}function k(N,w,E,F){if(typeof N.on=="function")F.once?N.once(w,E):N.on(w,E);else if(typeof N.addEventListener=="function")N.addEventListener(w,function L(B){F.once&&N.removeEventListener(w,L),E(B)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof N)}return events.exports}var eventsExports=requireEvents();function guid(){function e(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)}return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}class UserService{constructor(){this._initCloudServices(),this.events=new eventsExports.EventEmitter,this.events.setMaxListeners(1e5),this.getUserFromLocalStorage()&&(this.current=this.getUserModel(),this.fetchCurrentUser({success:()=>{},error:()=>{delete localStorage["Parse/"+this.appId+"/currentUser"],delete this.current,this.events.emit("sessionLost")}}))}getUserFromLocalStorage(){const t=localStorage["Parse/"+this.appId+"/currentUser"];if(t)try{return JSON.parse(t)}catch{}}_initCloudServices(){const t=Runtime.instance.getMetaData("cloudservices");t&&(this.appId=t.appId,this.endpoint=t.endpoint)}on(){this.events.on.apply(this.events,arguments)}off(){this.events.off.apply(this.events,arguments)}_makeRequest(t,n){if(!this.endpoint){n.error&&n.error({error:"No active cloud service",status:0});return}var o=new XMLHttpRequest;o.onreadystatechange=function(){if(o.readyState===4){var a;try{a=JSON.parse(o.response)}catch{}o.status===200||o.status===201?n.success(a||o.response):n.error(a||{error:o.responseText,status:o.status})}},o.open(n.method||"GET",this.endpoint+t,!0),o.setRequestHeader("X-Parse-Application-Id",this.appId);var r=localStorage["Parse/"+this.appId+"/installationId"];if(r===void 0&&(r=localStorage["Parse/"+this.appId+"/installationId"]=guid()),o.setRequestHeader("X-Parse-Installation-Id",r),n.sessionToken)o.setRequestHeader("X-Parse-Session-Token",n.sessionToken);else{var s=this.getUserFromLocalStorage();s!==void 0&&o.setRequestHeader("X-Parse-Session-Token",s.sessionToken)}o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify(n.content))}logIn(t){this._makeRequest("/login",{method:"POST",content:{username:t.username,password:t.password,_method:"GET"},success:n=>{localStorage["Parse/"+this.appId+"/currentUser"]=JSON.stringify(n),this.current=this.getUserModel(),t.success(n),this.events.emit("loggedIn")},error:n=>{t.error(n.error)}})}logOut(t){this._makeRequest("/logout",{method:"POST",content:{},success:n=>{delete localStorage["Parse/"+this.appId+"/currentUser"],delete this.current,t.success(),this.events.emit("loggedOut")},error:n=>{t.error(n.error)}})}signUp(t){const n=t.properties?CloudStore._serializeObject({...t.properties},"_User"):{};this._makeRequest("/users",{method:"POST",content:Object.assign({},n,{username:t.username,password:t.password,email:t.email}),success:o=>{const r=Object.assign(o,{username:t.username},t.properties);localStorage["Parse/"+this.appId+"/currentUser"]=JSON.stringify(r),this.current=this.getUserModel(),t.success(o),this.events.emit("loggedIn")},error:o=>{t.error(o.error)}})}setUserProperties(t){const n=this.getCurrentUser();if(n!==void 0){const o=CloudStore._serializeObject({...t.properties},"_User"),r=Object.assign({},{email:t.email,username:t.username},o);delete r.emailVerified,delete r.createdAt,delete r.updatedAt,this._makeRequest("/users/"+n.objectId,{method:"PUT",content:r,success:s=>{Object.assign(n,r),localStorage["Parse/"+this.appId+"/currentUser"]=JSON.stringify(n),this.current=this.getUserModel(),t.success(s)},error:s=>{t.error(s.error)}})}}fetchCurrentUser(t){this._makeRequest("/users/me",{method:"GET",sessionToken:t.sessionToken,success:n=>{localStorage["Parse/"+this.appId+"/currentUser"]=JSON.stringify(n),this.current=this.getUserModel(),this.events.emit("sessionGained"),t.success(n)},error:n=>{n.code===209&&(delete localStorage["Parse/"+this.appId+"/currentUser"],this.events.emit("sessionLost")),t.error(n.error)}})}verifyEmail(t){this._makeRequest("/apps/"+this.appId+"/verify_email?username="+t.username+"&token="+t.token,{method:"GET",success:n=>{n.indexOf("Successfully verified your email")!==-1?t.success():n.indexOf("Invalid Verification Link")?t.error("Invalid verification token"):t.error("Failed to verify email")},error:n=>{t.error(n.error)}})}sendEmailVerification(t){this._makeRequest("/verificationEmailRequest",{method:"POST",content:{email:t.email},success:n=>{t.success()},error:n=>{t.error(n.error)}})}resetPassword(t){this._makeRequest("/apps/"+this.appId+"/request_password_reset",{method:"POST",content:{username:t.username,token:t.token,new_password:t.newPassword},success:n=>{n.indexOf("Password successfully reset")!==-1||n.indexOf("Successfully updated your password")!==-1?t.success():n.indexOf("Invalid Link")?t.error("Invalid verification token"):t.error("Failed to verify email")},error:n=>{t.error(n.error)}})}requestPasswordReset(t){this._makeRequest("/requestPasswordReset",{method:"POST",content:{email:t.email},success:n=>{t.success()},error:n=>{t.error(n.error)}})}getCurrentUser(){var t=localStorage["Parse/"+this.appId+"/currentUser"];if(t!==void 0)return JSON.parse(t)}getUserModel(){const t=this.getCurrentUser();if(t!==void 0)return delete t.sessionToken,delete t.ACL,delete t.className,delete t.__type,CloudStore._fromJSON(t,"_User")}}UserService.forScope=e=>UserService.instance;var _instance;Object.defineProperty(UserService,"instance",{get:function(){return _instance===void 0&&(_instance=new UserService),_instance}}),Runtime.Services.UserService=UserService;const users={async logIn(e){return new Promise((t,n)=>{UserService.instance.logIn({username:e.username,password:e.password,success:()=>{t()},error:o=>{n(o)}})})},async signUp(e){return new Promise((t,n)=>{UserService.instance.signUp({username:e.username,password:e.password,email:e.email,properties:e.properties,success:()=>{t()},error:o=>{n(o)}})})},async become(e){return new Promise((t,n)=>{UserService.instance.fetchCurrentUser({sessionToken:e,success:()=>{t()},error:o=>{n(o)}})})},on(e,t){UserService.instance.on(e,t)},off(e,t){UserService.instance.off(e,t)}},_currentUser={async logOut(){return new Promise((e,t)=>{UserService.instance.logOut({success:()=>{e()},error:n=>{t(n)}})})},async save(){return new Promise((e,t)=>{const n=Object.assign({},_currentUser.Properties.data);UserService.instance.setUserProperties({properties:n,success:()=>{e()},error:o=>{t(o)}})})},async fetch(){return new Promise((e,t)=>{UserService.instance.fetchCurrentUser({success:()=>{e()},error:n=>{t(n)}})})}};Object.defineProperty(users,"Current",{get:function(){const e=UserService.instance.current;if(e!==void 0)return _currentUser.email=e.email,_currentUser.username=e.username,_currentUser.id=e.id,_currentUser.emailVerified=e.emailVerified,_currentUser.Properties=e,_currentUser}});function _makeRequest$2(e,t){var n=new XMLHttpRequest;n.onreadystatechange=function(){if(n.readyState===4){var s;try{s=JSON.parse(n.response)}catch{}n.status===200||n.status===201?t.success(s):t.error(s)}},n.open(t.method||"GET",t.endpoint+e,!0),n.setRequestHeader("X-Parse-Application-Id",t.appId),n.setRequestHeader("Content-Type","application/json");const o=Runtime.instance.getMetaData("cloudservices");o&&o.deployVersion&&n.setRequestHeader("x-noodl-cloud-version",o.deployVersion);var r=localStorage["Parse/"+t.appId+"/currentUser"];if(r!==void 0)try{const s=JSON.parse(r);n.setRequestHeader("X-Parse-Session-Token",s.sessionToken)}catch{}n.send(JSON.stringify(t.content))}const cloudfunctions={async run(e,t){return new Promise((n,o)=>{const r=Runtime.instance.getMetaData("cloudservices");if(r===void 0){o("No cloud services defined in this project.");return}const s=r.appId,a=Runtime.instance.editorConnection.isRunningLocally()?`http://${window.location.hostname}:8577`:r.endpoint;_makeRequest$2("/functions/"+encodeURIComponent(e),{appId:s,endpoint:a,content:t,method:"POST",success:l=>{n(l?l.result:void 0)},error:l=>{o(l)}})})}},pt=class pt{constructor(){this._routers={},this._navigationQueue=[]}navigate(t,n){setTimeout(()=>{const o=Object.keys(this._routers);if(o.length===1&&(t=o[0]),this._routers[t])for(const r of this._routers[t])r.navigate(n);else this._navigationQueue.push({name:t,args:n})},1)}registerRouter(t,n){t=t||"Main",this._routers[t]||(this._routers[t]=[]),this._routers[t].push(n);let o=!1,r=0;for(;r<this._navigationQueue.length;){const s=this._navigationQueue[r];s.name===t?(n.navigate(s.args),o=!0,this._navigationQueue.splice(r,1)):r++}o||n.reset()}deregisterRouter(t,n){if(t=t||"Main",!this._routers[t])return;const o=this._routers[t].indexOf(n);o!==-1&&(this._routers[t].splice(o,1),this._routers[t].length===0&&delete this._routers[t])}getPagesForRouter(t){const o=Runtime.instance.graphModel.routerIndex.routers;if(o===void 0||o.length===0)return[];const r=t===void 0?[o[0]]:o.filter(a=>a.name===t),s=new Set;return r.forEach(a=>{const l=a.pages;l!==void 0&&l.routes!==void 0&&l.routes.forEach(u=>{s.add(u)})}),Array.from(s).map(a=>this.getPageInfoForComponent(String(a))).filter(a=>!!a)}getPageInfoForComponent(t){return Runtime.instance.graphModel.routerIndex.pages.find(r=>r.component===t)}onNavigated(t,n){window.Noodl.Events.emit("NoodlApp_Navigated",{routerName:t,...n})}};pt.instance=new pt;let RouterHandler=pt;const navigation={_noodlRuntime:void 0,async showPopup(e,t){return new Promise(n=>{navigation._noodlRuntime.context.showPopup(e,t,{onClosePopup:(o,r)=>{n({action:o?.replace("closeAction-",""),parameters:r})}})})},navigate(e,t,n){RouterHandler.instance.navigate(e,{target:t,params:n})},navigateToPath(e,t){let n,o;var r=Runtime.instance.getProjectSettings().navigationPathType;r===void 0||r==="hash"?n=e:o=e;var s=[];if(t&&t.query!==void 0)for(let l in t.query)s.push(l+"="+t.query[l]);var a=(o!==void 0?o:"")+(s.length>=1?"?"+s.join("&"):"")+(n!==void 0?"#"+n:"");window.history.pushState({},"",a),dispatchEvent(new PopStateEvent("popstate",{}))}},files={async upload(e,t){return new Promise((n,o)=>{CloudStore.instance.uploadFile({file:e,onUploadProgress:r=>{t&&t.onProgress&&t.onProgress(r)},success:r=>{n(new CloudFile(r))},error:r=>{o(r)}})})}};function createNoodlAPI(e){const t=typeof window<"u"?window:globalThis;t.Noodl.getProjectSettings=e.getProjectSettings.bind(e),t.Noodl.getMetaData=e.getMetaData.bind(e),t.Noodl.Collection=t.Noodl.Array=Collection,t.Noodl.Model=t.Noodl.Object=Model,t.Noodl.Variables=t.Noodl.Object.get("--ndl--global-variables"),t.Noodl.Events=t.Noodl.eventEmitter=e.context.eventSenderEmitter,t.Noodl.Records=createRecordsAPI(),t.Noodl.Users=users,t.Noodl.CloudFunctions=cloudfunctions,t.Noodl.Navigation=navigation,t.Noodl.Navigation._noodlRuntime=e,t.Noodl.Files=files,t.Noodl.SEO=new SeoApi,t.Noodl.Env||(t.Noodl.Env={}),t.Noodl.Arrays=new Proxy(t.Noodl.Array,{get(n,o,r){return Noodl.Array.get(o)},set(n,o,r){if(!Array.isArray(r))throw new Error("Cannot assign non array value to array with id "+o);Noodl.Array.get(o).set(r)}}),t.Noodl.Objects=new Proxy(t.Noodl.Object,{get(n,o,r){return Noodl.Object.get(o)},set(n,o,r){Noodl.Object.get(o).setAll(r)}})}const projectSettings={ports:[{name:"htmlTitle",displayName:"Title",group:"General",plug:"input",type:"string",default:"Fluxscape Viewer",tooltip:"The title that web browsers show",ignoreInExport:!0},{name:"headCode",displayName:"Head Code",group:"Custom Code",plug:"input",type:{name:"string",codeeditor:"html"},tooltip:"Add custom code to the &lt;head&gt; tag",ignoreInExport:!0},{name:"navigationPathType",displayName:"URL Path Type",group:"Navigation",plug:"input",type:{name:"enum",enums:[{label:"Hash",value:"hash"},{label:"Path",value:"path"}]},default:"hash"},{name:"bodyScroll",displayName:"Body Scroll",group:"Experimental features",plug:"input",type:{name:"boolean"},tooltip:"Changes so the &lt;body&gt; tag will scroll by default"},{name:"repeaterDisabledWhenUnmounted",displayName:"Disable when unmounted",group:"Experimental features - Repeater",plug:"input",type:{name:"boolean"},tooltip:"Repeater will only create components when it's mounted"},{name:"repeaterCreateComponentsAsync",displayName:"Create asynchronously",group:"Experimental features - Repeater",plug:"input",type:{name:"boolean"},tooltip:"Repeater items will be created in chunks to keep UI responsive"}]};class DOMBoundingBoxObserver{constructor(t,n){this.isRunning=!1,this.numBoundingBoxObservers=0,this.callback=t,this.pollDelay=n}addObserver(){this.numBoundingBoxObservers++,this.isRunning||this._startObserver()}removeObserver(){this.numBoundingBoxObservers--,this.numBoundingBoxObservers===0&&this._stopObserver()}setTarget(t){this.target=t,this.numBoundingBoxObservers>0&&!this.isRunning&&this._startObserver()}_startObserver(){if(this.isRunning||!this.target)return;this.isRunning=!0;let t={};const n=()=>{if(!this.target){this.isRunning=!1;return}const o=this.target.getBoundingClientRect();t.x!==o.x&&this.callback("x",o),t.y!==o.y&&this.callback("y",o),t.width!==o.width&&this.callback("width",o),t.height!==o.height&&this.callback("height",o),t=o,this.isRunning&&(this.pollDelay?setTimeout(n,this.pollDelay):window.requestAnimationFrame(n))};window.requestAnimationFrame(n)}_stopObserver(){this.isRunning=!1}}function isObject$1(e){return e&&typeof e=="object"&&!Array.isArray(e)}function mergeDeep(e,...t){if(!t.length)return e;const n=t.shift();if(isObject$1(e)&&isObject$1(n))for(const o in n)isObject$1(n[o])?(e[o]||Object.assign(e,{[o]:{}}),mergeDeep(e[o],n[o])):Object.assign(e,{[o]:n[o]});return mergeDeep(e,...t)}var webfontloader={exports:{}},hasRequiredWebfontloader;function requireWebfontloader(){return hasRequiredWebfontloader||(hasRequiredWebfontloader=1,function(e){(function(){function t(c,p,y){return c.call.apply(c.bind,arguments)}function n(c,p,y){if(!c)throw Error();if(2<arguments.length){var S=Array.prototype.slice.call(arguments,2);return function(){var O=Array.prototype.slice.call(arguments);return Array.prototype.unshift.apply(O,S),c.apply(p,O)}}return function(){return c.apply(p,arguments)}}function o(c,p,y){return o=Function.prototype.bind&&Function.prototype.bind.toString().indexOf("native code")!=-1?t:n,o.apply(null,arguments)}var r=Date.now||function(){return+new Date};function s(c,p){this.a=c,this.o=p||c,this.c=this.o.document}var a=!!window.FontFace;function l(c,p,y,S){if(p=c.c.createElement(p),y)for(var O in y)y.hasOwnProperty(O)&&(O=="style"?p.style.cssText=y[O]:p.setAttribute(O,y[O]));return S&&p.appendChild(c.c.createTextNode(S)),p}function u(c,p,y){c=c.c.getElementsByTagName(p)[0],c||(c=document.documentElement),c.insertBefore(y,c.lastChild)}function d(c){c.parentNode&&c.parentNode.removeChild(c)}function h(c,p,y){p=p||[],y=y||[];for(var S=c.className.split(/\s+/),O=0;O<p.length;O+=1){for(var M=!1,U=0;U<S.length;U+=1)if(p[O]===S[U]){M=!0;break}M||S.push(p[O])}for(p=[],O=0;O<S.length;O+=1){for(M=!1,U=0;U<y.length;U+=1)if(S[O]===y[U]){M=!0;break}M||p.push(S[O])}c.className=p.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function f(c,p){for(var y=c.className.split(/\s+/),S=0,O=y.length;S<O;S++)if(y[S]==p)return!0;return!1}function g(c){return c.o.location.hostname||c.a.location.hostname}function b(c,p,y){function S(){j&&O&&M&&(j(U),j=null)}p=l(c,"link",{rel:"stylesheet",href:p,media:"all"});var O=!1,M=!0,U=null,j=y||null;a?(p.onload=function(){O=!0,S()},p.onerror=function(){O=!0,U=Error("Stylesheet failed to load"),S()}):setTimeout(function(){O=!0,S()},0),u(c,"head",p)}function _(c,p,y,S){var O=c.c.getElementsByTagName("head")[0];if(O){var M=l(c,"script",{src:p}),U=!1;return M.onload=M.onreadystatechange=function(){U||this.readyState&&this.readyState!="loaded"&&this.readyState!="complete"||(U=!0,y&&y(null),M.onload=M.onreadystatechange=null,M.parentNode.tagName=="HEAD"&&O.removeChild(M))},O.appendChild(M),setTimeout(function(){U||(U=!0,y&&y(Error("Script load timeout")))},S||5e3),M}return null}function T(){this.a=0,this.c=null}function A(c){return c.a++,function(){c.a--,I(c)}}function v(c,p){c.c=p,I(c)}function I(c){c.a==0&&c.c&&(c.c(),c.c=null)}function k(c){this.a=c||"-"}k.prototype.c=function(c){for(var p=[],y=0;y<arguments.length;y++)p.push(arguments[y].replace(/[\W_]+/g,"").toLowerCase());return p.join(this.a)};function N(c,p){this.c=c,this.f=4,this.a="n";var y=(p||"n4").match(/^([nio])([1-9])$/i);y&&(this.a=y[1],this.f=parseInt(y[2],10))}function w(c){return L(c)+" "+(c.f+"00")+" 300px "+E(c.c)}function E(c){var p=[];c=c.split(/,\s*/);for(var y=0;y<c.length;y++){var S=c[y].replace(/['"]/g,"");S.indexOf(" ")!=-1||/^\d/.test(S)?p.push("'"+S+"'"):p.push(S)}return p.join(",")}function F(c){return c.a+c.f}function L(c){var p="normal";return c.a==="o"?p="oblique":c.a==="i"&&(p="italic"),p}function B(c){var p=4,y="n",S=null;return c&&((S=c.match(/(normal|oblique|italic)/i))&&S[1]&&(y=S[1].substr(0,1).toLowerCase()),(S=c.match(/([1-9]00|normal|bold)/i))&&S[1]&&(/bold/i.test(S[1])?p=7:/[1-9]00/.test(S[1])&&(p=parseInt(S[1].substr(0,1),10)))),y+p}function H(c,p){this.c=c,this.f=c.o.document.documentElement,this.h=p,this.a=new k("-"),this.j=p.events!==!1,this.g=p.classes!==!1}function J(c){c.g&&h(c.f,[c.a.c("wf","loading")]),pe(c,"loading")}function ie(c){if(c.g){var p=f(c.f,c.a.c("wf","active")),y=[],S=[c.a.c("wf","loading")];p||y.push(c.a.c("wf","inactive")),h(c.f,y,S)}pe(c,"inactive")}function pe(c,p,y){c.j&&c.h[p]&&(y?c.h[p](y.c,F(y)):c.h[p]())}function xe(){this.c={}}function Me(c,p,y){var S=[],O;for(O in p)if(p.hasOwnProperty(O)){var M=c.c[O];M&&S.push(M(p[O],y))}return S}function ae(c,p){this.c=c,this.f=p,this.a=l(this.c,"span",{"aria-hidden":"true"},this.f)}function Ie(c){u(c.c,"body",c.a)}function Te(c){return"display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:"+E(c.c)+";"+("font-style:"+L(c)+";font-weight:"+(c.f+"00")+";")}function Ne(c,p,y,S,O,M){this.g=c,this.j=p,this.a=S,this.c=y,this.f=O||3e3,this.h=M||void 0}Ne.prototype.start=function(){var c=this.c.o.document,p=this,y=r(),S=new Promise(function(U,j){function z(){r()-y>=p.f?j():c.fonts.load(w(p.a),p.h).then(function(q){1<=q.length?U():setTimeout(z,25)},function(){j()})}z()}),O=null,M=new Promise(function(U,j){O=setTimeout(j,p.f)});Promise.race([M,S]).then(function(){O&&(clearTimeout(O),O=null),p.g(p.a)},function(){p.j(p.a)})};function me(c,p,y,S,O,M,U){this.v=c,this.B=p,this.c=y,this.a=S,this.s=U||"BESbswy",this.f={},this.w=O||3e3,this.u=M||null,this.m=this.j=this.h=this.g=null,this.g=new ae(this.c,this.s),this.h=new ae(this.c,this.s),this.j=new ae(this.c,this.s),this.m=new ae(this.c,this.s),c=new N(this.a.c+",serif",F(this.a)),c=Te(c),this.g.a.style.cssText=c,c=new N(this.a.c+",sans-serif",F(this.a)),c=Te(c),this.h.a.style.cssText=c,c=new N("serif",F(this.a)),c=Te(c),this.j.a.style.cssText=c,c=new N("sans-serif",F(this.a)),c=Te(c),this.m.a.style.cssText=c,Ie(this.g),Ie(this.h),Ie(this.j),Ie(this.m)}var Ee={D:"serif",C:"sans-serif"},Ae=null;function qe(){if(Ae===null){var c=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);Ae=!!c&&(536>parseInt(c[1],10)||parseInt(c[1],10)===536&&11>=parseInt(c[2],10))}return Ae}me.prototype.start=function(){this.f.serif=this.j.a.offsetWidth,this.f["sans-serif"]=this.m.a.offsetWidth,this.A=r(),Y(this)};function Fe(c,p,y){for(var S in Ee)if(Ee.hasOwnProperty(S)&&p===c.f[Ee[S]]&&y===c.f[Ee[S]])return!0;return!1}function Y(c){var p=c.g.a.offsetWidth,y=c.h.a.offsetWidth,S;(S=p===c.f.serif&&y===c.f["sans-serif"])||(S=qe()&&Fe(c,p,y)),S?r()-c.A>=c.w?qe()&&Fe(c,p,y)&&(c.u===null||c.u.hasOwnProperty(c.a.c))?Ve(c,c.v):Ve(c,c.B):ve(c):Ve(c,c.v)}function ve(c){setTimeout(o(function(){Y(this)},c),50)}function Ve(c,p){setTimeout(o(function(){d(this.g.a),d(this.h.a),d(this.j.a),d(this.m.a),p(this.a)},c),0)}function re(c,p,y){this.c=c,this.a=p,this.f=0,this.m=this.j=!1,this.s=y}var Oe=null;re.prototype.g=function(c){var p=this.a;p.g&&h(p.f,[p.a.c("wf",c.c,F(c).toString(),"active")],[p.a.c("wf",c.c,F(c).toString(),"loading"),p.a.c("wf",c.c,F(c).toString(),"inactive")]),pe(p,"fontactive",c),this.m=!0,$e(this)},re.prototype.h=function(c){var p=this.a;if(p.g){var y=f(p.f,p.a.c("wf",c.c,F(c).toString(),"active")),S=[],O=[p.a.c("wf",c.c,F(c).toString(),"loading")];y||S.push(p.a.c("wf",c.c,F(c).toString(),"inactive")),h(p.f,S,O)}pe(p,"fontinactive",c),$e(this)};function $e(c){--c.f==0&&c.j&&(c.m?(c=c.a,c.g&&h(c.f,[c.a.c("wf","active")],[c.a.c("wf","loading"),c.a.c("wf","inactive")]),pe(c,"active")):ie(c.a))}function Le(c){this.j=c,this.a=new xe,this.h=0,this.f=this.g=!0}Le.prototype.load=function(c){this.c=new s(this.j,c.context||this.j),this.g=c.events!==!1,this.f=c.classes!==!1,Xe(this,new H(this.c,c),c)};function fe(c,p,y,S,O){var M=--c.h==0;(c.f||c.g)&&setTimeout(function(){var U=O||null,j=S||null||{};if(y.length===0&&M)ie(p.a);else{p.f+=y.length,M&&(p.j=M);var z,q=[];for(z=0;z<y.length;z++){var C=y[z],x=j[C.c],V=p.a,G=C;if(V.g&&h(V.f,[V.a.c("wf",G.c,F(G).toString(),"loading")]),pe(V,"fontloading",G),V=null,Oe===null)if(window.FontFace){var G=/Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent),ee=/OS X.*Version\/10\..*Safari/.exec(window.navigator.userAgent)&&/Apple/.exec(window.navigator.vendor);Oe=G?42<parseInt(G[1],10):!ee}else Oe=!1;Oe?V=new Ne(o(p.g,p),o(p.h,p),p.c,C,p.s,x):V=new me(o(p.g,p),o(p.h,p),p.c,C,p.s,U,x),q.push(V)}for(z=0;z<q.length;z++)q[z].start()}},0)}function Xe(c,p,y){var O=[],S=y.timeout;J(p);var O=Me(c.a,y,c.c),M=new re(c.c,p,S);for(c.h=O.length,p=0,y=O.length;p<y;p++)O[p].load(function(U,j,z){fe(c,M,U,j,z)})}function Be(c,p){this.c=c,this.a=p}Be.prototype.load=function(c){function p(){if(M["__mti_fntLst"+S]){var U=M["__mti_fntLst"+S](),j=[],z;if(U)for(var q=0;q<U.length;q++){var C=U[q].fontfamily;U[q].fontStyle!=null&&U[q].fontWeight!=null?(z=U[q].fontStyle+U[q].fontWeight,j.push(new N(C,z))):j.push(new N(C))}c(j)}else setTimeout(function(){p()},50)}var y=this,S=y.a.projectId,O=y.a.version;if(S){var M=y.c.o;_(this.c,(y.a.api||"https://fast.fonts.net/jsapi")+"/"+S+".js"+(O?"?v="+O:""),function(U){U?c([]):(M["__MonotypeConfiguration__"+S]=function(){return y.a},p())}).id="__MonotypeAPIScript__"+S}else c([])};function De(c,p){this.c=c,this.a=p}De.prototype.load=function(c){var p,y,S=this.a.urls||[],O=this.a.families||[],M=this.a.testStrings||{},U=new T;for(p=0,y=S.length;p<y;p++)b(this.c,S[p],A(U));var j=[];for(p=0,y=O.length;p<y;p++)if(S=O[p].split(":"),S[1])for(var z=S[1].split(","),q=0;q<z.length;q+=1)j.push(new N(S[0],z[q]));else j.push(new N(S[0]));v(U,function(){c(j,M)})};function Ue(c,p){c?this.c=c:this.c=je,this.a=[],this.f=[],this.g=p||""}var je="https://fonts.googleapis.com/css";function Re(c,p){for(var y=p.length,S=0;S<y;S++){var O=p[S].split(":");O.length==3&&c.f.push(O.pop());var M="";O.length==2&&O[1]!=""&&(M=":"),c.a.push(O.join(M))}}function We(c){if(c.a.length==0)throw Error("No fonts to load!");if(c.c.indexOf("kit=")!=-1)return c.c;for(var p=c.a.length,y=[],S=0;S<p;S++)y.push(c.a[S].replace(/ /g,"+"));return p=c.c+"?family="+y.join("%7C"),0<c.f.length&&(p+="&subset="+c.f.join(",")),0<c.g.length&&(p+="&text="+encodeURIComponent(c.g)),p}function st(c){this.f=c,this.a=[],this.c={}}var K={latin:"BESbswy","latin-ext":"çöüğş",cyrillic:"йяЖ",greek:"αβΣ",khmer:"កខគ",Hanuman:"កខគ"},et={thin:"1",extralight:"2","extra-light":"2",ultralight:"2","ultra-light":"2",light:"3",regular:"4",book:"4",medium:"5","semi-bold":"6",semibold:"6","demi-bold":"6",demibold:"6",bold:"7","extra-bold":"8",extrabold:"8","ultra-bold":"8",ultrabold:"8",black:"9",heavy:"9",l:"3",r:"4",b:"7"},tt={i:"i",italic:"i",n:"n",normal:"n"},le=/^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/;function ye(c){for(var p=c.f.length,y=0;y<p;y++){var S=c.f[y].split(":"),O=S[0].replace(/\+/g," "),M=["n4"];if(2<=S.length){var U,j=S[1];if(U=[],j)for(var j=j.split(","),z=j.length,q=0;q<z;q++){var C;if(C=j[q],C.match(/^[\w-]+$/)){var x=le.exec(C.toLowerCase());if(x==null)C="";else{if(C=x[2],C=C==null||C==""?"n":tt[C],x=x[1],x==null||x=="")x="4";else var V=et[x],x=V||(isNaN(x)?"4":x.substr(0,1));C=[C,x].join("")}}else C="";C&&U.push(C)}0<U.length&&(M=U),S.length==3&&(S=S[2],U=[],S=S?S.split(","):U,0<S.length&&(S=K[S[0]])&&(c.c[O]=S))}for(c.c[O]||(S=K[O])&&(c.c[O]=S),S=0;S<M.length;S+=1)c.a.push(new N(O,M[S]))}}function ue(c,p){this.c=c,this.a=p}var Se={Arimo:!0,Cousine:!0,Tinos:!0};ue.prototype.load=function(c){var p=new T,y=this.c,S=new Ue(this.a.api,this.a.text),O=this.a.families;Re(S,O);var M=new st(O);ye(M),b(y,We(S),A(p)),v(p,function(){c(M.a,M.c,Se)})};function ge(c,p){this.c=c,this.a=p}ge.prototype.load=function(c){var p=this.a.id,y=this.c.o;p?_(this.c,(this.a.api||"https://use.typekit.net")+"/"+p+".js",function(S){if(S)c([]);else if(y.Typekit&&y.Typekit.config&&y.Typekit.config.fn){S=y.Typekit.config.fn;for(var O=[],M=0;M<S.length;M+=2)for(var U=S[M],j=S[M+1],z=0;z<j.length;z++)O.push(new N(U,j[z]));try{y.Typekit.load({events:!1,classes:!1,async:!0})}catch{}c(O)}},2e3):c([])};function ze(c,p){this.c=c,this.f=p,this.a=[]}ze.prototype.load=function(c){var p=this.f.id,y=this.c.o,S=this;p?(y.__webfontfontdeckmodule__||(y.__webfontfontdeckmodule__={}),y.__webfontfontdeckmodule__[p]=function(O,M){for(var U=0,j=M.fonts.length;U<j;++U){var z=M.fonts[U];S.a.push(new N(z.name,B("font-weight:"+z.weight+";font-style:"+z.style)))}c(S.a)},_(this.c,(this.f.api||"https://f.fontdeck.com/s/css/js/")+g(this.c)+"/"+p+".js",function(O){O&&c([])})):c([])};var Z=new Le(window);Z.a.c.custom=function(c,p){return new De(p,c)},Z.a.c.fontdeck=function(c,p){return new ze(p,c)},Z.a.c.monotype=function(c,p){return new Be(p,c)},Z.a.c.typekit=function(c,p){return new ge(p,c)},Z.a.c.google=function(c,p){return new ue(p,c)};var Ce={load:o(Z.load,Z)};e.exports?e.exports=Ce:(window.WebFont=Ce,window.WebFontConfig&&Z.load(window.WebFontConfig))})()}(webfontloader)),webfontloader.exports}var webfontloaderExports=requireWebfontloader();const WebFontLoader=getDefaultExportFromCjs(webfontloaderExports);function FontLoader(){this.loadedFontFamilies={},this.fontCssFamiliesAdded={},this.fontCallbacks={};var e=this;["Arial","Arial Black","Courier New","Helvetica","Impact","Lucida Console","Tahoma","Times New Roman"].forEach(function(t){e.loadedFontFamilies[t]=!0})}function removeFileEnding(e){return e.replace(/\.[^/.]+$/,"")}FontLoader.prototype.loadFont=function(e){if(typeof document>"u")return;e=getAbsoluteUrl(e);var t=removeFileEnding(e).split("/").pop();if(this.loadedFontFamilies[t]){this.fontCallbacks[t]&&this.fontCallbacks[t].forEach(function(s){s()});return}if(this.fontCssFamiliesAdded[t])return;this.fontCssFamiliesAdded[t]=!0;var n=document.createElement("style");n.type="text/css";let o=Noodl.Env.BaseUrl||"/";if(e.startsWith("/")&&(e=e.substring(1)),n.appendChild(document.createTextNode("@font-face { font-family: '"+t+"'; src: url('"+o+e+`'); }
25
+ `)),document.head.appendChild(n),typeof window<"u"){var r=this;WebFontLoader.load({timeout:1e3*600,custom:{families:[t]},fontactive:function(s){r.loadedFontFamilies[s]=!0,r.fontCallbacks[s]&&r.fontCallbacks[s].forEach(function(a){a()})}})}},FontLoader.prototype.callWhenFontIsActive=function(e,t){if(this.loadedFontFamilies[e]){t();return}this.fontCallbacks[e]||(this.fontCallbacks[e]=[]),this.fontCallbacks[e].push(t)},FontLoader.instance=new FontLoader;function createTooltip({title:e,body:t,images:n}){let o=`<h3>${e}</h3>`;if(t&&(t=Array.isArray(t)?t:[t],o+=t.map(r=>`<p>${r}</p>`).join("")),n){let r="";n.forEach(s=>{r+='<div class="popup-layer-image-item">',r+=`<img src="../assets/images/tooltips/${s.src}">`,s.label&&(r+=`<h3>${s.label}</h3>`),s.body&&(r+=`<p>${s.body}</p>`),r+="</div>"}),o+=`<div class="popup-layer-image-row">${r}</div>`}return o}function addInputCss(e,t){e.inputCss||(e.inputCss={}),e.defaultCss||(e.defaultCss={});for(const n in t)e.inputCss[n]=t[n]}function mergeAttribute$2(e,t,n){e[t]||(e[t]={});for(const o in n)e[t][o]=n[o]}function addInputs$1(e,t){mergeAttribute$2(e,"inputs",t)}function addInputProps$2(e,t){mergeAttribute$2(e,"inputProps",t)}function addDynamicInputPorts(e,t,n){e.dynamicports||(e.dynamicports=[]),e.dynamicports.push({condition:t,inputs:n})}function addOutputProps$2(e,t){mergeAttribute$2(e,"outputProps",t)}const NodeSharedPortDefinitions={addInputProps:addInputProps$2,addInputs:addInputs$1,addDynamicInputPorts,addInputCss,addSharedVisualInputs(e){addInputCss(e,{opacity:{index:200,group:"Style",displayName:"Opacity",type:"number",default:1,allowVisualStates:!0},mixBlendMode:{index:201,group:"Style",displayName:"Blend Mode",type:{name:"enum",enums:[{label:"Normal",value:"normal"},{label:"Multiply",value:"multiply"},{label:"Screen",value:"screen"},{label:"Overlay",value:"overlay"},{label:"Darken",value:"darken"},{label:"Lighten",value:"lighten"},{label:"Color Dodge",value:"color-dodge"},{label:"Color Burn",value:"color-burn"},{label:"Hard Light",value:"hard-light"},{label:"Soft Light",value:"soft-light"},{label:"Difference",value:"difference"},{label:"Exclusion",value:"exclusion"},{label:"Hue",value:"hue"},{label:"Saturation",value:"saturation"},{label:"Color",value:"color"},{label:"Luminosity",value:"luminosity"}]},default:"normal",applyDefault:!1,allowVisualStates:!0}}),addInputs$1(e,{visible:{index:210,displayName:"Visible",group:"Style",default:!0,type:"boolean",set(t){t?this.removeStyle(["visibility"]):this.setStyle({visibility:"hidden"})}},zIndex:{index:211,displayName:"zIndex",group:"Style",type:"number",allowVisualStates:!0,set(t){t===void 0?this.removeStyle(["zIndex"]):this.setStyle({zIndex:Number(t)})}}})},addMarginInputs(e){addInputCss(e,{marginLeft:{index:1,group:"Margin and padding",displayName:"Margin Left",type:{name:"number",units:["px","%"],defaultUnit:"px",marginPaddingComp:"margin-left"},allowVisualStates:!0},marginRight:{index:2,group:"Margin and padding",displayName:"Margin Right",type:{name:"number",units:["px","%"],defaultUnit:"px",marginPaddingComp:"margin-right"},allowVisualStates:!0},marginTop:{index:3,group:"Margin and padding",displayName:"Margin Top",type:{name:"number",units:["px","%"],defaultUnit:"px",marginPaddingComp:"margin-top"},allowVisualStates:!0},marginBottom:{index:4,group:"Margin and padding",displayName:"Margin Bottom",type:{name:"number",units:["px","%"],defaultUnit:"px",marginPaddingComp:"margin-bottom"},allowVisualStates:!0}})},addPaddingInputs(e,t){t=t||{};const n=t.defaults?t.defaults:{},o=t.styleTag;addInputCss(e,{paddingLeft:{index:64,group:"Margin and padding",default:n.paddingLeft||0,applyDefault:!1,displayName:"Pad Left",type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-left"},allowVisualStates:!0,styleTag:o},paddingRight:{index:65,group:"Margin and padding",default:n.paddingRight||0,applyDefault:!1,displayName:"Pad Right",type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-right"},allowVisualStates:!0,styleTag:o},paddingTop:{index:66,group:"Margin and padding",displayName:"Pad Top",default:n.paddingTop||0,applyDefault:!1,type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-top"},allowVisualStates:!0,styleTag:o},paddingBottom:{index:67,group:"Margin and padding",displayName:"Pad Bottom",default:n.paddingBottom||0,applyDefault:!1,type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-bottom"},allowVisualStates:!0,styleTag:o}})},addTransformInputs(e){addInputs$1(e,{transformX:{group:"Placement",displayName:"Pos X",default:0,index:300,allowVisualStates:!0,type:{name:"number",units:["px","%"],defaultUnit:"px"},set(t){this.transforms||(this.transforms={}),this.transforms.x=t.value+t.unit,this.updateTransform()}},transformY:{group:"Placement",displayName:"Pos Y",default:0,index:301,allowVisualStates:!0,type:{name:"number",units:["px","%"],defaultUnit:"px"},set(t){this.transforms||(this.transforms={}),this.transforms.y=t.value+t.unit,this.updateTransform()}},transformRotation:{index:302,group:"Placement",displayName:"Rotation",default:0,allowVisualStates:!0,type:{name:"number",units:["deg"],defaultUnit:"deg"},set(t){this.transforms||(this.transforms={}),this.transforms.rotation=t.value+t.unit,this.updateTransform()}},transformScale:{index:303,group:"Placement",displayName:"Scale",default:1,allowVisualStates:!0,type:{name:"number"},set(t){this.transforms||(this.transforms={}),this.transforms.scale=t,this.updateTransform()}},transformOriginX:{index:304,group:"Placement",displayName:"Transform Origin X",allowVisualStates:!0,type:{name:"number",units:["px","%"],defaultUnit:"%"},default:"50",set(t){this.transformOriginX=t.value+t.unit,this.updateTransformOrigin()}},transformOriginY:{index:305,group:"Placement",displayName:"Transform Origin Y",allowVisualStates:!0,type:{name:"number",units:["px","%"],defaultUnit:"%"},default:"50",set(t){this.transformOriginY=t.value+t.unit,this.updateTransformOrigin()}}}),e.methods||(e.methods={}),e.methods.updateTransform=function(){let t="";const{x:n,y:o,rotation:r,scale:s}=this.transforms;n&&(t+=`translateX(${n}) `),o&&(t+=`translateY(${o}) `),r&&(t+=`rotate(${r}) `),s!==void 0&&(t+=`scale(${s},${s})`),this.setStyle({transform:t})},e.methods.updateTransformOrigin=function(){const t=this.transformOriginX!==void 0?this.transformOriginX:"50%",n=this.transformOriginY!==void 0?this.transformOriginY:"50%";this.setStyle({transformOrigin:`${t} ${n}`})}},addAlignInputs(e){addInputCss(e,{position:{index:11,displayName:"Position",group:"Layout",type:{name:"enum",enums:[{label:"In Layout",value:"relative"},{label:"Absolute",value:"absolute"},{label:"Sticky",value:"sticky"},{label:"Fixed",value:"fixed"}]},default:"relative"}}),addInputProps$2(e,{alignX:{index:5,group:"Alignment",displayName:"Align X",type:{name:"enum",enums:[{label:"Left",value:"left"},{label:"Center",value:"center"},{label:"Right",value:"right"}],alignComp:"horizontal"}},alignY:{index:6,group:"Alignment",displayName:"Align Y",type:{name:"enum",enums:[{label:"Top",value:"top"},{label:"Center",value:"center"},{label:"Bottom",value:"bottom"}],alignComp:"vertical"}}}),addPositionAndAlignTooltips(e)},addPointerEventOutputs(e){addInputs$1(e,{pointerEventsMode:{index:403,displayName:"Pointer Events Mode",type:{name:"enum",enums:[{label:"Inherit",value:"inherit"},{label:"Explicit",value:"explicit"}]},default:"inherit",group:"Pointer Events",set(t){if(t==="inherit")this.removeStyle(["pointerEvents"]);else{let n="auto";this._internal.pointerEventsEnabled!==void 0&&(n=this._internal.pointerEventsEnabled?"auto":"none"),this.setStyle({pointerEvents:n})}}},pointerEventsEnabled:{index:404,displayName:"Pointer Events Enabled",type:"boolean",group:"Pointer Events",default:!0,set(t){this._internal.pointerEventsEnabled=!!t,this.setStyle({pointerEvents:this._internal.pointerEventsEnabled?"auto":"none"})}}}),addInputProps$2(e,{blockTouch:{index:450,displayName:"Block Pointer Events",group:"Pointer Events",type:"boolean"}}),addDynamicInputPorts(e,"pointerEventsMode = explicit",["pointerEventsEnabled"]),addOutputProps$2(e,{onClick:{displayName:"Click",group:"Events",type:"signal",propPath:"pointer"},pointerDown:{displayName:"Pointer Down",group:"Pointer Events",type:"signal",propPath:"pointer",props:{onMouseDown(){this.sendSignalOnOutput("pointerDown")},onTouchStart(){this.sendSignalOnOutput("pointerDown")}}},pointerUp:{displayName:"Pointer Up",group:"Pointer Events",type:"signal",propPath:"pointer",props:{onMouseUp(){this.sendSignalOnOutput("pointerUp")},onTouchEnd(){this.sendSignalOnOutput("pointerUp")},onTouchCancel(){this.sendSignalOnOutput("pointerUp")}}},pointerEnter:{displayName:"Pointer Enter",group:"Pointer Events",type:"signal",propPath:"pointer",props:{onMouseEnter(){this.sendSignalOnOutput("pointerEnter")}}},hoverStart:{displayName:"Hover Start",group:"Hover Events",type:"signal",propPath:"pointer",props:{onMouseOver(){this.sendSignalOnOutput("hoverStart"),this.setVisualStates(["hover"])}}},hoverEnd:{displayName:"Hover End",group:"Hover Events",type:"signal",propPath:"pointer",props:{onMouseLeave(){this.sendSignalOnOutput("hoverEnd"),this.setVisualStates([""])}}}}),addPointerEventsTooltips(e)},addDimensions(e,{defaultSizeMode:t="explicit",contentLabel:n="Content",useDimensionConstraints:o=!0}={}){let r="sizeMode = explicit OR sizeMode = contentHeight",s="sizeMode = explicit OR sizeMode = contentWidth";(t==="explicit"||t==="contentHeight")&&(r+=" OR sizeMode NOT SET"),(t==="explicit"||t==="contentWidth")&&(s+=" OR sizeMode NOT SET"),addDynamicInputPorts(e,r,["width"]),addDynamicInputPorts(e,s,["height"]),addInputProps$2(e,{sizeMode:{index:10,type:{name:"enum",enums:[{value:"explicit",label:"Explicit"},{value:"contentWidth",label:"Content Width"},{value:"contentHeight",label:"Content Height"},{value:"contentSize",label:"Content Size"}],allowEditOnly:!0,sizeComp:"mode"},group:"Dimensions",displayName:"Size Mode",default:t,allowVisualStates:!0},width:{index:11,group:"Dimensions",displayName:"Width",type:{name:"dimension",units:["%","px","vw","vh"],defaultUnit:"%"},default:100,allowVisualStates:!0,onChange(a){this.props.fixedWidth=a.isFixed}},height:{index:13,group:"Dimensions",displayName:"Height",type:{name:"dimension",units:["%","px","vw","vh"],defaultUnit:"%"},default:100,allowVisualStates:!0,onChange(a){this.props.fixedHeight=a.isFixed}}}),Noodl.deployed||addDimensionTooltips(e,n),o&&(addInputCss(e,{minWidth:{index:400,group:"Dimension Constraints",displayName:"Min Width",allowVisualStates:!0,type:{name:"number",units:["%","px","vw","vh"],defaultUnit:"%"}},maxWidth:{index:401,group:"Dimension Constraints",displayName:"Max Width",allowVisualStates:!0,type:{name:"number",units:["%","px","vw","vh"],defaultUnit:"%"}},minHeight:{index:402,group:"Dimension Constraints",displayName:"Min Height",allowVisualStates:!0,type:{name:"number",units:["%","px","vw","vh"],defaultUnit:"%"}},maxHeight:{index:403,group:"Dimension Constraints",displayName:"Max Height",allowVisualStates:!0,type:{name:"number",units:["%","px","vw","vh"],defaultUnit:"%"}}}),Noodl.deployed||addDimensionConstraintsTooltips(e))},_addCornerRadius(e,t){t=t||{};const n=t.defaults||{},o=t.styleTag;n.borderRadius||(n.borderRadius=0);function r(a,l,u,d){const h=b=>`${b} ${l?"("+l+")":""}`,f={group:"corners",tab:u,label:l},g=`border${l}Radius`;addInputs$1(a,{[g]:{index:240+d,displayName:"Corner Radius",editorName:h("Corner Radius"),group:"Corner Radius",type:{name:"number",units:["px","%"],defaultUnit:"px"},allowVisualStates:!0,default:n[g],tab:f,set(b){this._internal.borderRadius[g]=b.value===void 0?Number(b)+"px":b.value+b.unit,this._updateCornerRadii()}}})}r(e,"","corners-all",0),r(e,"TopLeft","corners-top-left",1),r(e,"TopRight","corners-top-right",2),r(e,"BottomRight","corners-bottom-right",3),r(e,"BottomLeft","corners-bottom-left",4),e.methods._updateCornerRadii=function(){const a=this._internal.borderRadius;function l(d,h){const f=`border${h}Radius`;d[f]=a[f]||a.borderRadius}const u={};l(u,"TopLeft"),l(u,"TopRight"),l(u,"BottomRight"),l(u,"BottomLeft"),this.setStyle(u,o)};const s=e.initialize;e.initialize=function(){s&&s.call(this),this._internal.borderRadius={...n},n.borderRadius&&this._updateCornerRadii()}},addBorderInputs(e,t){t=t||{};const n=t.defaults||{},o=t.styleTag;n.borderStyle===void 0&&(n.borderStyle="none"),n.borderWidth===void 0&&(n.borderWidth=2),n.borderColor===void 0&&(n.borderColor="#000000");function r(a,l,u,d){const h=`border${l}Style`,f=`border${l}Width`,g=`border${l}Color`;let b=n.borderStyle!=="none"?"OR borderStyle NOT SET":"";l?(n[h]&&n[h]!=="none"&&(b+=`OR ${h} NOT SET`),addDynamicInputPorts(a,`${h} = solid OR ${h} = dashed OR ${h} = dotted OR borderStyle = solid OR borderStyle = dashed OR borderStyle = dotted ${b}`,[`${f}`,`${g}`])):addDynamicInputPorts(a,`${h} = solid OR ${h} = dashed OR ${h} = dotted ${b}`,[`${f}`,`${g}`]);const _={group:"border-styles",tab:u,label:l},T=v=>`${v} ${l?"("+l+")":""}`,A=202+d*4;addInputs$1(a,{[h]:{index:A+1,displayName:"Border Style",editorName:T("Border Style"),group:"Border Style",allowVisualStates:!0,type:{name:"enum",enums:[{label:"None",value:"none"},{label:"Solid",value:"solid"},{label:"Dotted",value:"dotted"},{label:"Dashed",value:"dashed"}]},default:n[h],tab:_,set(v){this._internal.borders[h]=v,this._updateBorders()}},[f]:{index:A+2,displayName:"Border Width",editorName:T("Border Width"),group:"Border Style",allowVisualStates:!0,type:{name:"number",units:["px"],defaultUnit:"px"},default:n[f],tab:_,set(v){this._internal.borders[f]=v.value===void 0?Number(v)+"px":v.value+v.unit,this._updateBorders()}},[g]:{index:A+3,displayName:"Border Color",editorName:T("Border Color"),group:"Border Style",type:"color",default:n[g],allowVisualStates:!0,tab:_,set(v){this._internal.borders[g]=v,this._updateBorders()}}})}r(e,"","borders-all",0),r(e,"Left","borders-left",1),r(e,"Top","borders-top",2),r(e,"Right","borders-right",3),r(e,"Bottom","borders-bottom",4),e.methods._updateBorders=function(){const a=this._internal.borders;function l(d,h){const f=`border${h}Width`,g=`border${h}Color`,b=`border${h}Style`;d[f]=a[f]||a.borderWidth,d[g]=a[g]||a.borderColor,d[b]=a[b]||a.borderStyle}const u={};l(u,"Top"),l(u,"Right"),l(u,"Bottom"),l(u,"Left"),this.setStyle(u,o)};const s=e.initialize;e.initialize=function(){s&&s.call(this),this._internal.borders={...n},(n.borderStyle!=="none"||n.borderTopStyle&&n.borderTopStyle!=="none"||n.borderRightStyle&&n.borderRightStyle!=="none"||n.borderBottomStyle&&n.borderBottomStyle!=="none"||n.borderRightStyle&&n.borderRightStyle!=="none")&&this._updateBorders()},this._addCornerRadius(e,{defaults:n,styleTag:o})},addShadowInputs(e,t){t=t||{};const n=t.styleTag;addDynamicInputPorts(e,"boxShadowEnabled = true",["boxShadowOffsetX","boxShadowOffsetY","boxShadowInset","boxShadowBlurRadius","boxShadowSpreadRadius","boxShadowColor"]),addInputs$1(e,{boxShadowEnabled:{index:250,group:"Box Shadow",displayName:"Shadow Enabled",type:"boolean",default:!1,allowVisualStates:!0,set(r){this._internal.boxShadowEnabled=r,this._updateBoxShadow()}},boxShadowOffsetX:{index:251,group:"Box Shadow",displayName:"Offset X",default:0,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,set(r){this._internal.boxShadowOffsetX=r.value+r.unit,this._updateBoxShadow()}},boxShadowOffsetY:{index:252,group:"Box Shadow",displayName:"Offset Y",default:0,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,set(r){this._internal.boxShadowOffsetY=r.value+r.unit,this._updateBoxShadow()}},boxShadowBlurRadius:{index:253,group:"Box Shadow",displayName:"Blur Radius",default:5,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,set(r){this._internal.boxShadowBlurRadius=r.value+r.unit,this._updateBoxShadow()}},boxShadowSpreadRadius:{index:254,group:"Box Shadow",displayName:"Spread Radius",default:2,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,set(r){this._internal.boxShadowSpreadRadius=r.value+r.unit,this._updateBoxShadow()}},boxShadowInset:{index:255,group:"Box Shadow",displayName:"Inset",type:"boolean",default:!1,allowVisualStates:!0,set(r){this._internal.boxShadowInset=r,this._updateBoxShadow()}},boxShadowColor:{index:256,group:"Box Shadow",displayName:"Shadow Color",type:"color",default:"#00000033",allowVisualStates:!0,set(r){this._internal.boxShadowColor=r,this._updateBoxShadow()}}}),e.methods._updateBoxShadow=function(){const r=this._internal;r.boxShadowEnabled?this.setStyle({boxShadow:`${r.boxShadowInset?"inset ":""}${r.boxShadowOffsetX} ${r.boxShadowOffsetY} ${r.boxShadowBlurRadius} ${r.boxShadowSpreadRadius} ${r.boxShadowColor}`},n):this.removeStyle(["boxShadow"],n)};const o=e.initialize;e.initialize=function(){o&&o.call(this),this._internal.boxShadowOffsetX=0,this._internal.boxShadowOffsetY=0,this._internal.boxShadowBlurRadius="5px",this._internal.boxShadowSpreadRadius="2px",this._internal.boxShadowColor="#00000033"}},addIconInputs(e,t){t=t||{};const n=20,o={useIcon:!0,iconColor:"#FFFFFF"};t.defaults&&Object.assign(o,t.defaults);let r="useIcon = true";o.useIcon&&(r+=" OR useIcon NOT SET");const s=["iconSourceType","iconSize"];t.enableIconPlacement&&(s.push("iconPlacement"),s.push("iconSpacing")),addDynamicInputPorts(e,r,s),o.useIcon?(addDynamicInputPorts(e,"#js (params.useIcon===true || params.useIcon===undefined) && params.iconSourceType === 'image'",["iconImageSource"]),addDynamicInputPorts(e,"#js (params.useIcon===true || params.useIcon===undefined) && params.iconSourceType === 'icon'",["iconIconSource","iconColor"])):(addDynamicInputPorts(e,"useIcon = true AND iconSourceType = image",["iconImageSource"]),addDynamicInputPorts(e,"useIcon = true AND iconSourceType = icon",["iconIconSource","iconColor"])),t.hideEnableIconInput||addInputProps$2(e,{useIcon:{type:"boolean",group:"Icon",displayName:"Enable Icon",default:o.useIcon,allowVisualStates:!0,index:n}}),addInputProps$2(e,{iconSourceType:{type:{name:"enum",enums:[{label:"Image",value:"image"},{label:"Icon",value:"icon"}]},group:"Icon",displayName:"Type",default:"icon",allowVisualStates:!0,index:n+1},iconIconSource:{type:"icon",displayName:"Icon Source",group:"Icon",allowVisualStates:!0,index:n+3}}),addInputs$1(e,{iconImageSource:{type:"image",displayName:"Image Source",group:"Icon",allowVisualStates:!0,index:n+2,set(a){this.props.iconImageSource=getAbsoluteUrl(a)}}}),t.enableIconPlacement&&addInputProps$2(e,{iconSpacing:{group:"Icon",displayName:"Spacing",default:10,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,index:n+4},iconPlacement:{type:{name:"enum",enums:[{label:"Left",value:"left"},{label:"Right",value:"right"}]},group:"Icon",displayName:"Placement",default:"left",allowVisualStates:!0,index:n+5}}),addInputProps$2(e,{iconSize:{group:"Icon",displayName:"Size",default:16,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,index:n+6},iconColor:{group:"Icon",displayName:"Color",editorName:"Icon Color",default:o.iconColor,type:"color",allowVisualStates:!0,index:n+7}})},addLabelInputs(e,t){t=t||{};const n={useLabel:!1};t.defaults&&Object.assign(n,t.defaults);const o=n.useLabel?"useLabel = true OR useLabel NOT SET":"useLabel = true",r=t.styleTag||"",s=["label"].concat(["textStyle","fontFamily","fontSize","color","letterSpacing","lineHeight","textTransform"].map(a=>r+a));t.enableSpacing&&s.push("labelSpacing"),addDynamicInputPorts(e,o,s),addInputProps$2(e,{useLabel:{index:18,type:"boolean",displayName:"Enable Label",group:"Label",default:n.useLabel},label:{type:"string",displayName:"Label",group:"Label",default:"Label"}}),t.enableSpacing&&addInputProps$2(e,{labelSpacing:{displayName:"Spacing",group:"Label",type:{name:"number",units:["px"],defaultUnit:"px"},default:10}}),this.addTextStyleInputs(e,{...t,group:"Label Text Style",popout:{group:"label-text-style",label:"Text Style",parentGroup:"Label"}})},addTextStyleInputs(e,t){t=t||{};const n=t.group||"Text Style",o=t.styleTag,r=t.hasOwnProperty("portPrefix")?t.portPrefix:t.styleTag||"",s=r+"textStyle",a=t.portIndex!==void 0?t.portIndex:19;function l(d){return t.displayName?t.displayName+" "+d:d}addInputs$1(e,{[s]:{index:a,type:{name:"textStyle",childPorts:["fontFamily","fontSize","color","letterSpacing","lineHeight","textTransform"],childPortPrefix:r},group:n,displayName:"Text Style",editorName:l("Text Style"),default:"None",set(d){this.props[s]=this.context.styles.getTextStyle(d),this.forceUpdate()},allowVisualStates:!0,popout:t.popout},[r+"fontFamily"]:{index:a+1,type:{name:"font",parentPort:s},group:n,displayName:"Font Family",editorName:l("Font Family"),set(d){if(d){let h=d;h.split(".").length>1&&(FontLoader.instance.loadFont(h),h=h.replace(/\.[^/.]+$/,""),h=h.split("/").pop()),this.setStyle({fontFamily:h},o)}else this.removeStyle(["fontFamily"],o);this.props[s]&&this.forceUpdate()},allowVisualStates:!0,popout:t.popout}}),addInputCss(e,{[r+"fontSize"]:{index:a+2,group:n,displayName:"Font Size",editorName:l("Font Size"),targetStyleProperty:"fontSize",type:{name:"number",units:["px"],defaultUnit:"px",parentPort:s},onChange(){this.props[s]&&this.forceUpdate()},allowVisualStates:!0,popout:t.popout,styleTag:o},[r+"color"]:{index:a+3,type:{name:"color",parentPort:s},displayName:"Color",editorName:l("Color"),group:n,targetStyleProperty:"color",allowVisualStates:!0,popout:t.popout,styleTag:o,onChange(){this.props[s]&&this.forceUpdate()}},[r+"letterSpacing"]:{index:a+4,group:n,displayName:"Letter Spacing",editorName:l("Letter Spacing"),targetStyleProperty:"letterSpacing",type:{name:"number",units:["px","em"],defaultUnit:"px"},allowVisualStates:!0,popout:t.popout,styleTag:o,default:"Auto",applyDefault:!1,onChange(){this.props[s]&&this.forceUpdate()}},[r+"lineHeight"]:{index:a+5,group:n,displayName:"Line Height",editorName:l("Line Height"),targetStyleProperty:"lineHeight",type:{name:"number",units:["","px","%"],defaultUnit:"",parentPort:s},allowVisualStates:!0,onChange(){this.props[s]&&this.forceUpdate()},popout:t.popout,styleTag:o,default:"Auto",applyDefault:!1},[r+"textTransform"]:{index:a+6,group:n,displayName:"Case",editorName:l("Case"),applyDefault:!1,targetStyleProperty:"textTransform",type:{name:"enum",enums:[{label:"None",value:"none"},{label:"Uppercase",value:"uppercase"},{label:"Lowercase",value:"lowercase"},{label:"Capitalize",value:"capitalize"}],parentPort:s},default:"none",popout:t.popout,styleTag:o,allowVisualStates:!0,onChange(){this.props[s]&&this.forceUpdate()}}});const u=r+"fontFamily";e.setup=function(d,h){h.on("nodeAdded."+e.name,function(f){f.parameters[u]&&f.parameters[u].split(".").length>1&&FontLoader.instance.loadFont(f.parameters[u]),f.on("parameterUpdated",function(g){g.name===u&&g.value&&g.value.split(".").length>1&&FontLoader.instance.loadFont(g.value)})})}}};function addDimensionTooltips(e,t){e.inputProps.sizeMode.tooltip={explicit:{standard:"Explicit width & height",extended:createTooltip({title:"Explicit width & height",body:"Set width & height explicitly in pixels(px), percentage(%) or viewport size(vh/vw).",images:[{src:"size-mode-explicit.svg"}]})},contentWidth:{standard:`${t} width & explicit height`,extended:createTooltip({title:`${t} width & explicit height`,body:`The width will match the width of the ${t.toLowerCase()}. Height is set explicitly.`,images:[{src:"size-mode-content-width.svg"}]})},contentHeight:{standard:`Explicit width & ${t.toLowerCase()} height`,extended:createTooltip({title:`Explicit width & ${t.toLowerCase()} height`,body:`The width is set explicitly. The height will match the height of the ${t.toLowerCase()}`,images:[{src:"size-mode-content-height.svg"}]})},contentSize:{standard:`${t} width & height`,extended:createTooltip({title:`${t} width & height`,body:`The width and height will match the size of the ${t.toLowerCase()}`,images:[{src:"size-mode-content-size.svg"}]})}};const n=["- %: Relative to parents size. If 'fixed' is false this element will resize to share space with siblings. If 'Clip Content' is disabled, it'll also expand to fit the boundaries of all its content","- px: Pixels","- vw: Relative to viewport width. 100 makes the element the same width as the screen","- vh: Relative to viewport height. 100 makes the element the same height as the screen"],o=createTooltip({title:"Fixed",body:["- Enabled: Elements will be the exact size set","- Disabled: Element will resize to fill up empty space, or shrink to make space for siblings. Use the dimension constraints, min and max size, to control the boundaries"]});e.inputProps.width.tooltip={dimension:createTooltip({title:"Width",body:n}),fixed:o},e.inputProps.height.tooltip={dimension:createTooltip({title:"Height",body:n}),fixed:o}}function addDimensionConstraintsTooltips(e){e.inputCss.minWidth.tooltip=createTooltip({title:"Minimum width",body:"This is prioritized over other properties, so the element won't shrink below this size"}),e.inputCss.minHeight.tooltip=createTooltip({title:"Minimum height",body:"This is prioritized over other properties, so the element won't shrink below this size"}),e.inputCss.maxWidth.tooltip=createTooltip({title:"Maximum width",body:"This is prioritized over other properties, so the element won't grow beyond this size"}),e.inputCss.maxHeight.tooltip=createTooltip({title:"Maximum height",body:"This is prioritized over other properties, so the element won't grow beyond this size"})}function addPointerEventsTooltips(e){e.inputs.pointerEventsMode.tooltip=createTooltip({title:"Pointer events mode",body:["Control if mouse and touch events are enabled on this node","- Inherit: Same settings as parent","- Explicit: Enable control on this element"]}),e.inputs.pointerEventsEnabled.tooltip=createTooltip({title:"Pointer events enabled",body:["- Enabled: This element will receive mouse and touch events","- Disabled: No mouse or touch events will be captured by this element and the element below will receive it instead"]})}function addPositionAndAlignTooltips(e){e.inputCss.position.tooltip=createTooltip({title:"Position",images:[{label:"Relative",body:"Relative to its siblings",src:"position-relative.svg"},{label:"Absolute",body:"Not affected by siblings or parent's layout",src:"position-absolute.svg"},{label:"Sticky",body:"Stick to parent's edge on overflow",src:"position-sticky.svg"},{label:"Fixed",body:"Always stay in the same place and take no space in the layout",src:"position-sticky.svg"}]})}var bezierEasing,hasRequiredBezierEasing;function requireBezierEasing(){if(hasRequiredBezierEasing)return bezierEasing;hasRequiredBezierEasing=1;var e=4,t=.001,n=1e-7,o=10,r=11,s=1/(r-1),a=typeof Float32Array=="function";function l(T,A){return 1-3*A+3*T}function u(T,A){return 3*A-6*T}function d(T){return 3*T}function h(T,A,v){return((l(A,v)*T+u(A,v))*T+d(A))*T}function f(T,A,v){return 3*l(A,v)*T*T+2*u(A,v)*T+d(A)}function g(T,A,v,I,k){var N,w,E=0;do w=A+(v-A)/2,N=h(w,I,k)-T,N>0?v=w:A=w;while(Math.abs(N)>n&&++E<o);return w}function b(T,A,v,I){for(var k=0;k<e;++k){var N=f(A,v,I);if(N===0)return A;var w=h(A,v,I)-T;A-=w/N}return A}function _(T,A,v,I){if(arguments.length===4)return new _([T,A,v,I]);if(!(this instanceof _))return new _(T);if(!T||T.length!==4)throw new Error("BezierEasing: points must contains 4 values");for(var k=0;k<4;++k)if(typeof T[k]!="number"||isNaN(T[k])||!isFinite(T[k]))throw new Error("BezierEasing: points should be integers.");if(T[0]<0||T[0]>1||T[2]<0||T[2]>1)throw new Error("BezierEasing x values must be in [0, 1] range.");this._str="BezierEasing("+T+")",this._css="cubic-bezier("+T+")",this._p=T,this._mSampleValues=a?new Float32Array(r):new Array(r),this._precomputed=!1,this.get=this.get.bind(this)}return _.prototype={get:function(T){var A=this._p[0],v=this._p[1],I=this._p[2],k=this._p[3];return this._precomputed||this._precompute(),A===v&&I===k?T:T===0?0:T===1?1:h(this._getTForX(T),v,k)},getPoints:function(){return this._p},toString:function(){return this._str},toCSS:function(){return this._css},_precompute:function(){var T=this._p[0],A=this._p[1],v=this._p[2],I=this._p[3];this._precomputed=!0,(T!==A||v!==I)&&this._calcSampleValues()},_calcSampleValues:function(){for(var T=this._p[0],A=this._p[2],v=0;v<r;++v)this._mSampleValues[v]=h(v*s,T,A)},_getTForX:function(T){for(var A=this._p[0],v=this._p[2],I=this._mSampleValues,k=0,N=1,w=r-1;N!==w&&I[N]<=T;++N)k+=s;--N;var E=(T-I[N])/(I[N+1]-I[N]),F=k+E*s,L=f(F,A,v);return L>=t?b(T,F,A,v):L===0?F:g(T,k,k+s,A,v)}},_.css={ease:_.ease=_(.25,.1,.25,1),linear:_.linear=_(0,0,1,1),"ease-in":_.easeIn=_(.42,0,1,1),"ease-out":_.easeOut=_(0,0,.58,1),"ease-in-out":_.easeInOut=_(.42,0,.58,1)},bezierEasing=_,bezierEasing}var bezierEasingExports=requireBezierEasing();const BezierEasing=getDefaultExportFromCjs(bezierEasingExports);var EaseCurves={easeOutQuartic:function(e,t,n){return n--,-(t-e)*(n*n*n*n-1)+e},easeInQuartic:function(e,t,n){return(t-e)*(n*n*n*n)+e},easeInOutQuartic:function(e,t,n){return n*=2,n<1?(t-e)/2*n*n*n*n+e:(n-=2,-(t-e)/2*(n*n*n*n-2)+e)},easeOutCubic:function(e,t,n){return n--,(t-e)*(n*n*n+1)+e},easeInCubic:function(e,t,n){return(t-e)*(n*n*n)+e},easeInOutCubic:function(e,t,n){return n*=2,n<1?(t-e)/2*n*n*n+e:(n-=2,(t-e)/2*(n*n*n+2)+e)},easeOutQuadratic:function(e,t,n){return-(t-e)*n*(n-2)+e},easeInQuadratic:function(e,t,n){return(t-e)*(n*n)+e},easeInOutQuadratic:function(e,t,n){return n*=2,n<1?(t-e)/2*n*n+e:(n-=1,-(t-e)/2*(n*(n-2)-1)+e)},linear:function(e,t,n){return e+(t-e)*n}};EaseCurves.easeIn=EaseCurves.easeInCubic,EaseCurves.easeOut=EaseCurves.easeOutCubic,EaseCurves.easeInOut=EaseCurves.easeInOutCubic;function transitionParameter(e,t,n,o){e._transitions&&e._transitions[t]&&(e._transitions[t].stop(),delete e._transitions[t]);const r=e.getInputValue(t),s=e.getInput(t);let a;if(s&&s.type==="color"?a=colorAnimation(e.context.styles.resolveColor(r),e.context.styles.resolveColor(n)):typeof r=="number"&&typeof n=="number"?a=numberAnimation(r,n):typeof r=="object"&&r.hasOwnProperty("value")&&typeof n=="object"&&n.hasOwnProperty("value")&&(a=numberAnimation(r.value,n.value)),a){e._transitions||(e._transitions={});const l=BezierEasing(o.curve);e._transitions[t]=e.context.timerScheduler.createTimer({duration:o.dur,onRunning:u=>{const d=a(l.get(u));e.queueInput(t,d)},onFinish:()=>{delete e._transitions[t]}}),e._transitions[t].start()}else e.queueInput(t,n)}function numberAnimation(e,t){return n=>EaseCurves.linear(e,t,n)}function setRGBA$1(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$2(e){var t=e.toString(16);return t.length==1?"0"+t:t}function rgbaToHex$1(e){return"#"+componentToHex$2(e[0])+componentToHex$2(e[1])+componentToHex$2(e[2])+componentToHex$2(e[3])}function colorAnimation(e,t){const n=[0,0,0,255];setRGBA$1(n,e);const o=[0,0,0,255];setRGBA$1(o,t),(!e||e==="transparent")&&(n[0]=o[0],n[1]=o[1],n[2]=o[2]),(!t||t==="transparent")&&(o[0]=n[0],o[1]=n[1],o[2]=n[2]);const r=[0,0,0,0];return s=>(r[0]=Math.floor(EaseCurves.linear(n[0],o[0],s)),r[1]=Math.floor(EaseCurves.linear(n[1],o[1],s)),r[2]=Math.floor(EaseCurves.linear(n[2],o[2],s)),r[3]=Math.floor(EaseCurves.linear(n[3],o[3],s)),rgbaToHex$1(r))}function isPercentage$1(e){return e&&e[e.length-1]==="%"}function getPercentage(e){return Number(e.slice(0,-1))}function getSizeWithMargins(e,t,n){if(!t&&!n)return e;let o=`calc(${e}`;return t&&(o+=` - ${t}`),n&&(o+=` - ${n}`),o+=")",o}const Layout={size(e,t){t.parentLayout==="none"&&(e.position="absolute"),t.sizeMode==="explicit"?(e.width=t.width,e.height=t.height):t.sizeMode==="contentHeight"?e.width=t.width:t.sizeMode==="contentWidth"&&(e.height=t.height),e.flexShrink=0,t.parentLayout==="row"&&e.position==="relative"?(isPercentage$1(e.width)&&!t.fixedWidth&&(e.flexGrow=getPercentage(e.width),e.flexShrink=1),isPercentage$1(e.height)&&!t.fixedHeight&&(e.height=getSizeWithMargins(e.height,e.marginTop,e.marginBottom))):t.parentLayout==="column"&&e.position==="relative"?(isPercentage$1(e.width)&&!t.fixedWidth&&(e.width=getSizeWithMargins(e.width,e.marginLeft,e.marginRight)),isPercentage$1(e.height)&&!t.fixedHeight&&(e.flexGrow=getPercentage(e.height),e.flexShrink=1)):e.position!=="relative"&&(isPercentage$1(e.width)&&(e.width=getSizeWithMargins(e.width,e.marginLeft,e.marginRight)),isPercentage$1(e.height)&&(e.height=getSizeWithMargins(e.height,e.marginTop,e.marginBottom)))},align(e,t){const{position:n}=e;let{alignX:o,alignY:r}=t;n!=="relative"&&(o=o||"left",r=r||"top");let s="";const a=t.parentLayout||"column";if(o){if(n!=="relative")o==="left"?e.left=0:o==="center"?(e.left="50%",s+="translateX(-50%) "):e.right=0;else if(n==="relative"&&a==="row")switch(o){case"left":e.marginRight=e.marginRight?e.marginRight:"auto";break;case"center":e.marginRight=e.marginRight?e.marginRight:"auto",e.marginLeft=e.marginLeft?e.marginLeft:"auto";break;case"right":e.marginLeft=e.marginLeft?e.marginLeft:"auto";break}else if(n==="relative"&&a==="column")switch(o){case"left":e.alignSelf="flex-start";break;case"center":e.alignSelf="center";break;case"right":e.alignSelf="flex-end";break}}if(r){if(n!=="relative")r==="top"?e.top=0:r==="center"?(e.top="50%",s+="translateY(-50%)"):e.bottom=0;else if(n==="relative"&&a==="column")switch(r){case"top":e.marginBottom=e.marginBottom?e.marginBottom:"auto";break;case"center":e.marginTop=e.marginTop?e.marginTop:"auto",e.marginBottom=e.marginBottom?e.marginBottom:"auto";break;case"bottom":e.marginTop=e.marginTop?e.marginTop:"auto";break}else if(n==="relative"&&a==="row")switch(r){case"top":e.alignSelf="flex-start";break;case"center":e.alignSelf="center";break;case"bottom":e.alignSelf="flex-end";break}}s&&(e.transform=s+(e.transform||""))}};class NoodlReactComponent extends React.Component{componentDidMount(){this.props.noodlNode.sendSignalOnOutput("didMount")}componentWillUnmount(){this.props.noodlNode.sendSignalOnOutput("willUnmount");const t=this.props.noodlNode;if(t.currentVisualStates){const n=["hover","pressed","focused"],o=t.currentVisualStates.filter(r=>!n.includes(r));t.setVisualStates(o)}}render(){const{noodlNode:t,style:n,...o}=this.props;let r=t.style;n&&(r={...t.style,...n});const s={ref:a=>{t.innerReactComponentRef=a},style:r,...t.props,...o};if(t.noodlNodeAsProp){s.noodlNode=t;const a=t.getVisualParentNode();a&&a.props.layout&&(s.parentLayout=a.props.layout)}return t.renderedAtFrame=t.context.frameNumber,t.useFrame&&(s.textStyle!==void 0&&(s.style=r=Object.assign({},s.textStyle,r)),Layout.size(r,s),Layout.align(r,s)),React.createElement(t.reactComponent,s,t.renderChildren())}}function addOutputPropHandler(e,t,n){const o=n?e.props[n]:e.props;for(const r in t)if(o[r]){const s=o[r];o[r]=()=>{s(),t[r].call(e)}}else o[r]=t[r].bind(e);e.forceUpdate()}function addPrimitiveOutputPropHandler(e,t,n){let o;n.type==="signal"?o=()=>{e.sendSignalOnOutput(t)}:o=(...r)=>{e.outputPropValues[t]=n.getValue?n.getValue.call(e,...r):r[0],e.flagOutputDirty(t),n.onChange&&n.onChange.call(e,e.outputPropValues[t])},addOutputPropHandler(e,{[t]:o},n.propPath)}function defineRegularInputProp(e,t){if(!e.type)throw new Error(`input ${t} is missing a type`);e.type.units?e.set=function(n){const o=e.propPath?this.props[e.propPath]:this.props;n&&n.value!==void 0?o[t]=n.value+n.unit:delete o[t],e.onChange&&e.onChange.call(this,n),this.forceUpdate()}:e.set=function(n){const o=e.propPath?this.props[e.propPath]:this.props;n!==void 0?o[t]=n:delete o[t],e.onChange&&e.onChange.call(this,n),this.forceUpdate()}}function flattenArray(e,t){for(const n of t)Array.isArray(n)?flattenArray(e,n):n!==void 0&&e.push(n)}function setStylesOnDOMNode(e,t,n){let o=e;if(n&&o.getAttribute("noodl-style-tag")!==n&&(o=e.querySelector(`[noodl-style-tag=${n}]`)),!!o)for(const r in t)o.style[r]=t[r]}let reactKeyCounter=0;function createNodeFromReactComponent(e){const{frame:t}=e;t!==void 0&&(t.dimensions&&NodeSharedPortDefinitions.addDimensions(e,typeof t.dimensions=="object"?t.dimensions:void 0),t.position&&NodeSharedPortDefinitions.addTransformInputs(e),t.margins&&NodeSharedPortDefinitions.addMarginInputs(e),t.padding&&NodeSharedPortDefinitions.addPaddingInputs(e),t.align&&NodeSharedPortDefinitions.addAlignInputs(e));const{initialize:n,inputs:o,inputProps:r,inputCss:s,outputs:a,outputProps:l,dynamicports:u,defaultCss:d={},methods:h}=e,f=Object.assign({},d),g={};for(const v in s){const I=s[v],k=I.hasOwnProperty("default")&&I.applyDefault!==!1;if(I.styleTag&&!g.hasOwnProperty(I.styleTag)&&(g[I.styleTag]={}),k){const N=I.type.units?I.default+I.type.defaultUnit:I.default;I.styleTag?g[I.styleTag][v]=N:f[v]=N}}function b(v,I){this.clientBoundingRect=I,v==="x"?this.flagOutputDirty("screenPositionX"):v==="y"?this.flagOutputDirty("screenPositionY"):v==="width"?this.flagOutputDirty("boundingWidth"):v==="height"&&this.flagOutputDirty("boundingHeight")}const _=e.useVariants!==void 0?e.useVariants:!0,T={name:e.name,docs:e.docs,displayNodeName:e.displayNodeName||e.displayName,shortDesc:"",category:"Visual",allowChildren:e.allowChildren===void 0?!0:e.allowChildren,visualStates:e.visualStates,allowAsExportRoot:e.allowAsExportRoot,singleton:e.singleton,useVariants:_,usePortAsLabel:e.usePortAsLabel,portLabelTruncationMode:e.portLabelTruncationMode,connectionPanel:e.connectionPanel,nodeDoubleClickAction:e.nodeDoubleClickAction,initialize(){this.reactKey="key"+reactKeyCounter,reactKeyCounter++,this.children=[],A&&(this.childrenCount=0),this.props={styles:{}},this.outputPropValues={},this.style=Object.assign({},f);for(const I in g)this.props.styles[I]=Object.assign({},g[I]);this.childIndex=0,this.clientBoundingRect={},this.noodlNodeAsProp=!!e.noodlNodeAsProp;const v=this.context&&this.context.runningInCanvas?300:0;this.boundingBoxObserver=new DOMBoundingBoxObserver(b.bind(this),v),this.wantsToBeMounted=!0,this.useFrame=!!t;for(const I in r){const k=r[I];k.propPath&&!this.props.hasOwnProperty(k.propPath)&&(this.props[k.propPath]={});const N=k.propPath?this.props[k.propPath]:this.props;k.hasOwnProperty("default")&&(k.type.defaultUnit&&k.default!==void 0?N[I]=k.default+k.type.defaultUnit:N[I]=k.default)}for(const I in l){const k=l[I];k.propPath&&!this.props.hasOwnProperty(k.propPath)&&(this.props[k.propPath]={}),k.props?addOutputPropHandler(this,k.props,k.propPath):addPrimitiveOutputPropHandler(this,I,k)}this.reactComponentRef=null,this.reactComponent=e.getReactComponent.call(this),n&&n.call(this)},getInspectInfo:e.getInspectInfo,nodeScopeDidInitialize:e.nodeScopeDidInitialize,dynamicports:u,inputs:{cssClassName:{index:100010,displayName:"CSS Class",group:"Advanced HTML",type:"string",default:"",set(v){this.props.className=v,this.forceUpdate()}},styleCss:{index:100011,displayName:"CSS Style",group:"Advanced HTML",type:{name:"string",codeeditor:"text",allowEditOnly:!0},default:"/* background-color: red; */",set(v){this.updateAdvancedStyle({content:v})}}},outputs:{childIndex:{displayName:"Child Index",type:"number",get(){return this.childIndex}},this:{displayName:"This",type:"reference",get(){return this}},screenPositionX:{group:"Bounding Box",displayName:"Screen Position X",type:"number",get(){return this.clientBoundingRect.x},onFirstConnectionAdded(){this.boundingBoxObserver.addObserver()},onLastConnectionRemoved(){this.boundingBoxObserver.removeObserver()}},screenPositionY:{group:"Bounding Box",displayName:"Screen Position Y",type:"number",get(){return this.clientBoundingRect.y},onFirstConnectionAdded(){this.boundingBoxObserver.addObserver()},onLastConnectionRemoved(){this.boundingBoxObserver.removeObserver()}},boundingWidth:{group:"Bounding Box",displayName:"Width",type:"number",get(){return this.clientBoundingRect.width},onFirstConnectionAdded(){this.boundingBoxObserver.addObserver()},onLastConnectionRemoved(){this.boundingBoxObserver.removeObserver()}},boundingHeight:{group:"Bounding Box",displayName:"Height",type:"number",get(){return this.clientBoundingRect.height},onFirstConnectionAdded(){this.boundingBoxObserver.addObserver()},onLastConnectionRemoved(){this.boundingBoxObserver.removeObserver()}},didMount:{group:"Mounted",displayName:"Did Mount",type:"signal"},willUnmount:{group:"Mounted",displayName:"Will Unmount",type:"signal"}},methods:{updateAdvancedStyle(v){this.customCssStyles&&(this.removeStyle(Object.keys(this.customCssStyles)),this.customCssStyles=void 0);let I,k="",N=(v.content||"").replace(`
26
26
  `,""),w="";for(;N.length;){let L=N.indexOf("/*");if(L===-1&&(L=N.length),w+=N.substring(0,L),N=N.substring(L),N.length){let B=N.indexOf("*/");B===-1&&(B=N.length),N=N.substring(B+2)}}function E(L){return L.replace(/^\s+|\s+$/gm,"")}const F=w.split(";").map(E).filter(L=>L.length);I={};for(const L of F){const B=L.split(":").map(E);if(L.indexOf(`
27
27
  `)!==-1)k+="Missing semicolon: "+L.split(`
28
- `)[0];else if(B.length!==2)k+="Syntax error: "+L;else{const H=B[0].split("-");for(let J=1;J<H.length;J++)H[J]=H[J][0].toUpperCase()+H[J].substring(1);I[H.join("")]=B[1]}}k?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"css-parse-waring",{message:"Error in CSS Style<br>"+k}):(this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"css-parse-waring"),I&&this.setStyle(I),this.customCssStyles=I)},setChildIndex(v){this.childIndex=v,this.flagOutputDirty("childIndex")},updateChildIndices(){let v=0;for(let I=0;I<this.children.length;I++){const k=this.children[I];(k.name==="For Each"||k.name==="Component Children")&&v--,k.setChildIndex&&k.setChildIndex(I+v)}},updateChildrenCount(){let v=0;this.children.forEach(I=>{I?.model?.type==="For Each"?v+=I.model.children.length:v++}),this.childrenCount=v,this.flagOutputDirty("childrenCount")},addChild(v,I){I===void 0&&(I=this.children.length),v.parent=this,this.children.splice(I,0,v),this.cachedChildren=void 0,this.scheduleUpdateChildCountAndIndicies(),this.forceUpdate()},removeChild(v){const I=this.children.indexOf(v);I!==-1&&(this.children.splice(I,1),v.parent=void 0,this.cachedChildren=void 0,this.scheduleUpdateChildCountAndIndicies(),this.forceUpdate())},contains(v){return this.children.indexOf(v)!==-1?!0:this.children.some(k=>k.contains&&k.contains(v))},scheduleUpdateChildCountAndIndicies(){this.updateChildIndiciesScheduled||(this.updateChildIndiciesScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.updateChildIndices(),A&&this.updateChildrenCount(),this.updateChildIndiciesScheduled=!1}))},getChildren(){return this.children},isChild(v){return this.children.indexOf(v)!==-1},getChildRoot(){return this},forceUpdate(){this.forceUpdateScheduled!==!0&&(this.forceUpdateScheduled=!0,this.context.eventEmitter.once("frameEnd",()=>{this.forceUpdateScheduled=!1,this.renderedAtFrame!==this.context.frameNumber&&this.reactComponentRef&&this.reactComponentRef.setState({})}),this.context.scheduleUpdate())},_resetReactVirtualDOM(){this.reactKey="key"+reactKeyCounter,reactKeyCounter++;const v=this.getVisualParentNode();v&&(v.cachedChildren=void 0,v.forceUpdate())},triggerDidMount(){this.wantsToBeMounted&&!this.didCallTriggerDidMount&&(this.didCallTriggerDidMount=!0,this.hasOutput("didMount")&&this.sendSignalOnOutput("didMount"),this.props.didMount&&this.props.didMount(),this.didMount&&this.didMount()),this.children.forEach(v=>{v.triggerDidMount&&v.triggerDidMount()})},render(){if(this.wantsToBeMounted)return React.createElement(NoodlReactComponent,{key:this.reactKey,noodlNode:this,ref:v=>{this.reactComponentRef=v,this.boundingBoxObserver.setTarget(ReactDOM.findDOMNode(v))}})},renderChildren(){if(!this.cachedChildren){let v=this.children.map(k=>k.render()),I=[];flattenArray(I,v),I.length===0?I=null:I.length===1&&(I=I[0]),this.cachedChildren=I}return this.cachedChildren},setStyle(v,I){const k=I?this.props.styles[I]:this.style;for(const E in v)k[E]=v[E];const N=this.getDOMElement();if(!N)return;let w=!1;if(!I){if(v.hasOwnProperty("opacity")&&(w=v.hasOwnProperty("opacity")&&(N.style.opacity==="0"&&v.opacity>0||N.style.opacity!=="0"&&v.opacity===0)),v.transform){let L=v.transform;const B=this.getVisualParentNode();(this.style.position==="absolute"||!B||!B.style.flexDirection)&&(this.props.alignX==="center"&&!(N.style.marginLeft&&N.style.marginRight)&&(L="translateX(-50%) "+L),this.props.alignY==="center"&&!(N.style.marginTop&&N.style.marginBottom)&&(L="translateY(-50%) "+L)),v.transform=L}const E=v.hasOwnProperty("marginLeft")||v.hasOwnProperty("marginRight")||v.hasOwnProperty("marginTop")||v.hasOwnProperty("marginBottom");(this.props.width&&this.props.width[this.props.width.length-1]==="%"||this.props.height&&this.props.height[this.props.height.length-1]==="%")&&E&&(w=!0),(v.position||v.flexDirection||v.clip)&&(w=!0)}w?this.forceUpdate():setStylesOnDOMNode(N,v,I)},removeStyle(v,I){const k=I?this.props.styles[I]:this.style;for(const E of v)delete k[E];const N=this.getDOMElement();let w=!1;if(!I&&N){const E={marginTop:!0,marginBottom:!0,marginLeft:!0,marginRight:!0};for(const F of v)E[F]&&(w=!0)}if(N){const E={};for(const F of v)E[F]="";setStylesOnDOMNode(N,E,I)}w&&this.forceUpdate()},getStyle(v){return this.style[v]},getRef(){return this.reactComponentRef},getDOMElement(){const v=this.getRef();if(v)return ReactDOM.findDOMNode(v)},getVisualParentNode(){if(this.parent)return this.parent;let v=this.nodeScope.componentOwner;for(;!v.parent&&v.parentNodeScope;)v=v.parentNodeScope.componentOwner;return v?v.parent:void 0},setVariant(v){this._stopStateTransitions(),this.variant=v;const I={};if(v&&mergeDeep(I,v.parameters),mergeDeep(I,this.model.parameters),this.currentVisualStates){const N=this.getParametersForStates(this.currentVisualStates);mergeDeep(I,N)}const k=Object.keys(I).filter(N=>!this._hasInputBeenSetFromAConnection(N));for(const N of k)this.registerInputIfNeeded(N),this.hasInput(N)&&this.queueInput(N,I[N])},getParameter(v){return this.model.parameters.hasOwnProperty(v)?this.model.parameters[v]:this.variant&&this.variant.parameters.hasOwnProperty(v)?this.variant.parameters[v]:this.context.getDefaultValueForInput(this.model.type,v)},getParametersForStates(v){const I={};if(this.variant)for(const k of v)this.variant.stateParameters&&this.variant.stateParameters.hasOwnProperty(k)&&mergeDeep(I,this.variant.stateParameters[k]);for(const k in I)this.model.parameters.hasOwnProperty(k)&&(isObject(I[k])?mergeDeep(I[k],this.model.parameters[k]):I[k]=this.model.parameters[k]);if(this.model.stateParameters)for(const k of v)this.model.stateParameters.hasOwnProperty(k)&&mergeDeep(I,this.model.stateParameters[k]);return I},_getNewState(v,I){const k=I.filter(w=>!(v||[]).includes(w)),N=k.length?k[0]:"neutral";return N===""?"neutral":N},_getDefaultTransition(v){if(this.model.defaultStateTransitions&&this.model.defaultStateTransitions[v]&&this.model.defaultStateTransitions[v].curve)return this.model.defaultStateTransitions[v];if(this.variant&&this.variant.defaultStateTransitions&&this.variant.defaultStateTransitions[v]&&this.variant.defaultStateTransitions[v].curve)return this.variant.defaultStateTransitions[v]},_getStateTransition(v){let I={};return this.model.stateTransitions&&this.model.stateTransitions[v]&&Object.assign(I,this.model.stateTransitions[v]),this.variant&&this.variant.stateTransitions&&this.variant.stateTransitions[v]&&Object.assign(I,this.variant.stateTransitions[v]),I},setVisualStates(v){if(!this.model||this.currentVisualStates&&v.length===this.currentVisualStates.length&&v.every((B,H)=>B===this.currentVisualStates[H]))return;const k=this.currentVisualStates?this.getParametersForStates(this.currentVisualStates):{},N=this.getParametersForStates(v),w=this._getNewState(this.currentVisualStates,v);this.currentVisualStates=v;const E={};for(const B in k)!N.hasOwnProperty(B)&&!this._hasInputBeenSetFromAConnection(B)&&this.getParameter(B)!==void 0&&(E[B]=this.getParameter(B));for(const B in N)!this._hasInputBeenSetFromAConnection(B)&&N[B]!==void 0&&(E[B]=N[B]);const F=this._getDefaultTransition(w),L=this._getStateTransition(w);for(const B in E)L[B]&&L[B].curve?transitionParameter(this,B,E[B],L[B]):!L[B]&&F?transitionParameter(this,B,E[B],F):(this._transitions&&this._transitions[B]&&(this._transitions[B].stop(),delete this._transitions[B]),this.queueInput(B,E[B]))},_getVisualStates(){return this.currentVisualStates||[]},_stopStateTransitions(){if(this._transitions)for(const v in this._transitions)this._transitions[v].stop(),delete this._transitions[v]}}};_&&(T.inputs.variant={displayName:"Variant",group:"General",type:{name:"string",allowConnectionsOnly:!0},set(v){if(this.variant&&this.variant.name===v)return;const I=this.context.variants.getVariant(this.model.type,v);I&&this.setVariant(I)}}),e.mountedInput!==!1&&(T.inputs.mounted={displayName:"Mounted",index:9999,type:"boolean",group:"General",default:!0,set(v){if(v=!!v,this.wantsToBeMounted!==v){this.wantsToBeMounted=v;const I=this.getVisualParentNode();I&&(I.cachedChildren=void 0,I.forceUpdate())}}});const A=T.allowChildren||T.displayName;A&&(T.outputs.childrenCount={displayName:"Children Count",type:"number",get(){return this.childrenCount}});for(const v in o)T.inputs[v]=o[v];for(const v in r){const I=r[v];I.type==="node"?(I.type="reference",I.set=function(k){const N=I.propPath?this.props[I.propPath]:this.props;k!==void 0?N[v]=k.render():delete N[v],this.forceUpdate()}):I.type==="signal"?console.error(`Error: Signals not supported as a react prop. node: '${e.name}' input: '${v}'`):defineRegularInputProp(I,v),T.inputs[v]=I}for(const v in s){const I=s[v],k=I.targetStyleProperty||v;I.type.units?I.set=function(N){typeof N!="object"&&I.type.defaultUnit&&(N={value:N,unit:I.type.defaultUnit}),typeof N=="object"&&N.value!==void 0?this.setStyle({[k]:N.value+N.unit},I.styleTag):N!==void 0?this.setStyle({[k]:N},I.styleTag):this.removeStyle([k],I.styleTag),I.onChange&&I.onChange.call(this,N)}:I.set=function(N){N!==void 0?this.setStyle({[k]:N},I.styleTag):this.removeStyle([k],I.styleTag),I.onChange&&I.onChange.call(this,N)},T.inputs[v]=I}for(const v in a)T.outputs[v]=a[v];for(const v in l){const I=l[v];I.type!=="signal"&&(I.get=function(){return this.outputPropValues[v]}),T.outputs[v]=I}for(const v in p)T.methods[v]=p[v];return{node:T,setup:e.setup}}function isObject(e){return e&&typeof e=="object"&&!Array.isArray(e)}const pointerEvents=["onClick","onMouseDown","onMouseMove","onMouseUp","onMouseEnter","onMouseLeave","onMouseOver","onMouseOut","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","onPointerDown","onPointerMove","onPointerUp","onPointerCancel"],pointerEventsNotToBlock=new Set(["onMouseLeave","onMouseOut"]);function pointerProps(e){const t={};for(const n of pointerEvents)e.blockTouch&&!pointerEventsNotToBlock.has(n)?e.pointer&&e.pointer[n]?t[n]=o=>{e.pointer[n](o),o.stopPropagation()}:e[n]?t[n]=o=>{e[n](o),o.stopPropagation()}:t[n]=o=>{o.stopPropagation()}:e[n]?t[n]=e[n]:e.pointer&&(t[n]=e.pointer[n]);if(e.noodlNode)for(const n in t){const o=t[n];o&&(t[n]=r=>{o.call(this,r),e.noodlNode.context.updateDirtyNodes()})}return t}function _shallowCompare$1(e,t){let n;for(n in e)if(e.hasOwnProperty(n)&&e[n]!==t[n])return!1;for(n in t)if(t.hasOwnProperty(n)&&e[n]!==t[n])return!1;return!0}const _styleSheets$1={};function updateStylesForClass$1(e,t,n){if(_styleSheets$1[e])_shallowCompare$1(t,_styleSheets$1[e].props)||(_styleSheets$1[e].style.innerHTML=n(e,t),_styleSheets$1[e].props=Object.assign({},t));else{const o=document.createElement("style");o.innerHTML=n(e,t),document.head.appendChild(o),_styleSheets$1[e]={style:o,props:Object.assign({},t)}}}function mergeAttribute$1(e,t,n){e[t]||(e[t]={});for(const o in n)e[t][o]=n[o]}function addInputs(e,t){mergeAttribute$1(e,"inputs",t)}function addInputProps$1(e,t){mergeAttribute$1(e,"inputProps",t)}function addOutputProps$1(e,t){mergeAttribute$1(e,"outputProps",t)}function addOutputs(e,t){mergeAttribute$1(e,"outputs",t)}function addControlEventsAndStates$1(e,t){t=t||{},e.visualStates=[{name:"neutral",label:"Neutral"},{name:"hover",label:"Hover"},{name:"pressed",label:"Pressed"},{name:"focused",label:"Focused"},{name:"disabled",label:"Disabled"}],t.checked&&e.visualStates.splice(3,0,{name:"checked",label:"Checked"}),addInputs(e,{enabled:{type:"boolean",displayName:"Enabled",group:"General",default:!0,set:function(o){o=!!o;const r=o!==this._internal.enabled;this.props.enabled=this._internal.enabled=o,r&&(this._updateVisualState(),this.forceUpdate(),this.flagOutputDirty("enabled"))}}}),addInputProps$1(e,{blockTouch:{index:450,displayName:"Block Pointer Events",type:"boolean",group:"Pointer Events"}}),e.methods._updateVisualState=function(){const o=[];this._internal.enabled&&(this.outputPropValues.hoverState&&o.push("hover"),this.outputPropValues.pressedState&&o.push("pressed"),this.outputPropValues.focusState&&o.push("focused")),t.checked&&this._internal.checked&&o.push("checked"),this._internal.enabled||o.push("disabled"),this.setVisualStates(o)},addOutputProps$1(e,{focusState:{displayName:"Focused",group:"States",type:"boolean",props:{onFocus(){this.outputPropValues.focusState=!0,this.flagOutputDirty("focusState"),this._updateVisualState()},onBlur(){this.outputPropValues.focusState=!1,this.flagOutputDirty("focusState"),this._updateVisualState()}}},onFocus:{displayName:"Focused",group:"Focus Events",type:"signal",props:{onFocus(){this.sendSignalOnOutput("onFocus")}}},onBlur:{displayName:"Blurred",group:"Focus Events",type:"signal",props:{onBlur(){this.sendSignalOnOutput("onBlur")}}},hoverState:{displayName:"Hover",group:"States",type:"boolean",props:{onMouseOver(){this.outputPropValues.hoverState=!0,this.flagOutputDirty("hoverState"),this._updateVisualState()},onMouseLeave(){this.outputPropValues.hoverState=!1,this.flagOutputDirty("hoverState"),this._updateVisualState()}}},hoverStart:{displayName:"Hover Start",group:"Pointer Events",type:"signal",props:{onMouseOver(){this.sendSignalOnOutput("hoverStart")}}},hoverEnd:{displayName:"Hover End",group:"Pointer Events",type:"signal",props:{onMouseLeave(){this.sendSignalOnOutput("hoverEnd")}}},pressedState:{displayName:"Pressed",group:"States",type:"boolean",props:{onMouseDown(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this._updateVisualState()},onTouchStart(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this._updateVisualState()},onMouseUp(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this._updateVisualState()},onTouchEnd(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this._updateVisualState()},onTouchCancel(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this._updateVisualState()},onMouseLeave(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this._updateVisualState()}}},pointerDown:{displayName:"Pointer Down",group:"Pointer Events",type:"signal",props:{onMouseDown(){this.sendSignalOnOutput("pointerDown")},onTouchStart(){this.sendSignalOnOutput("pointerDown")}}},pointerUp:{displayName:"Pointer Up",group:"Pointer Events",type:"signal",props:{onMouseUp(){this.sendSignalOnOutput("pointerUp")},onTouchEnd(){this.sendSignalOnOutput("pointerUp")},onTouchCancel(){this.sendSignalOnOutput("pointerUp")}}}}),addOutputs(e,{enabled:{type:"boolean",displayName:"Enabled",group:"States",getter:function(){return this._internal.enabled}}});const n=e.initialize;e.initialize=function(){n&&n.call(this),this.props.enabled=this._internal.enabled=!0,this.outputPropValues.hoverState=this.outputPropValues.focusState=this.outputPropValues.pressedState=!1}}function controlEvents$1(e){return Object.assign({},{onFocus:e.onFocus,onBlur:e.onBlur},pointerProps(e))}const Utils$1={updateStylesForClass:updateStylesForClass$1,addControlEventsAndStates:addControlEventsAndStates$1,controlEvents:controlEvents$1};function Button$2(e){const t={...e.style};Layout.size(t,e),Layout.align(t,e);const n=e.textStyle!==void 0?{...t,...e.textStyle,color:e.noodlNode.context.styles.resolveColor(e.textStyle.color)}:t,o=React__namespace.useMemo(()=>{if(!e.useIcon)return null;const l={};if(e.useLabel&&(l[e.iconPlacement==="right"?"marginLeft":"marginRight"]=e.iconSpacing),e.iconSourceType==="image"&&e.iconImageSource){const u={width:e.iconSize,height:e.iconSize};let d=e.iconImageSource;if(typeof d=="string"&&d.startsWith("/")){const p=Noodl.Env.BaseUrl;p&&(d=p+d.substring(1))}return React__namespace.createElement("img",{alt:"",src:d,style:{...l,...u}})}if(e.iconSourceType==="icon"&&e.iconIconSource){const u={fontSize:e.iconSize,color:e.iconColor};return e.iconIconSource.codeAsClass?React__namespace.createElement("span",{className:`${e.iconIconSource.class} ${e.iconIconSource.code}`,style:{...l,...u}}):React__namespace.createElement("span",{className:e.iconIconSource.class,style:{...l,...u}},e.iconIconSource.code)}return null},[e.useIcon,e.useLabel,e.iconPlacement,e.iconSpacing,e.iconSourceType,e.iconImageSource,e.iconIconSource,e.iconSize,e.iconColor]),r=React__namespace.createElement(React__namespace.Fragment,null,e.useLabel&&e.iconPlacement==="left"&&o,e.useLabel&&e.label,e.useLabel&&e.iconPlacement==="right"&&o,!e.useLabel&&e.useIcon&&o),s=["ndl-controls-button",e.className].filter(Boolean).join(" "),a=React__namespace.useCallback(()=>{e.onClick?.()},[e.onClick]);return React__namespace.createElement("button",{...e.attrs,className:s,disabled:!e.enabled,...Utils$1.controlEvents(e),type:e.buttonType,style:n,onClick:a},r,e.children)}const ButtonNode$1={name:"net.noodl.controls.button",displayName:"Button",docs:"https://docs.noodl.net/nodes/ui-controls/button",allowChildren:!0,noodlNodeAsProp:!0,usePortAsLabel:"label",portLabelTruncationMode:"length",nodeDoubleClickAction:{focusPort:"label"},connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},initialize(){this.props.attrs={},this.props.layout="row"},getReactComponent(){return Button$2},inputs:{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:"#000000",allowVisualStates:!0}},outputProps:{onClick:{displayName:"Click",group:"Events",type:"signal"}}};NodeSharedPortDefinitions.addDimensions(ButtonNode$1,{defaultSizeMode:"contentSize",contentLabel:"Content"}),NodeSharedPortDefinitions.addTextStyleInputs(ButtonNode$1),NodeSharedPortDefinitions.addAlignInputs(ButtonNode$1),NodeSharedPortDefinitions.addTransformInputs(ButtonNode$1),NodeSharedPortDefinitions.addPaddingInputs(ButtonNode$1,{defaults:{paddingTop:5,paddingRight:20,paddingBottom:5,paddingLeft:20}}),NodeSharedPortDefinitions.addMarginInputs(ButtonNode$1),NodeSharedPortDefinitions.addLabelInputs(ButtonNode$1,{defaults:{useLabel:!0}}),NodeSharedPortDefinitions.addIconInputs(ButtonNode$1,{enableIconPlacement:!0,defaults:{useIcon:!1}}),NodeSharedPortDefinitions.addSharedVisualInputs(ButtonNode$1),NodeSharedPortDefinitions.addBorderInputs(ButtonNode$1),NodeSharedPortDefinitions.addShadowInputs(ButtonNode$1),Utils$1.addControlEventsAndStates(ButtonNode$1);const Button$1=createNodeFromReactComponent(ButtonNode$1);function Checkbox(e){const[t,n]=React.useState(e.checked);React.useEffect(()=>{n(!!e.checked)},[]),React.useEffect(()=>{n(!!e.checked)},[e.checked]);const o={...e.style};e.parentLayout==="none"&&(o.position="absolute"),Layout.align(o,e);const r={...e.attrs,id:e.id,className:[e.className,"ndl-controls-checkbox-2"].join(" "),disabled:!e.enabled,style:{width:e.styles.checkbox.width,height:e.styles.checkbox.height}},s={display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,position:"relative",...e.styles.checkbox};e.useLabel||(Object.assign(r,Utils$1.controlEvents(e)),Object.assign(s,o));function a(){if(e.iconSourceType==="image"&&e.iconImageSource!==void 0){let u=e.iconImageSource;if(typeof u=="string"&&u.startsWith("/")){const d=Noodl.Env.BaseUrl;d&&(u=d+u.substring(1))}return React.createElement("img",{alt:"",src:u,style:{width:e.iconSize,height:e.iconSize,position:"absolute"}})}else if(e.iconSourceType==="icon"&&e.iconIconSource!==void 0){const u={fontSize:e.iconSize,color:e.iconColor,position:"absolute"};return e.iconIconSource.codeAsClass===!0?React.createElement("span",{className:[e.iconIconSource.class,e.iconIconSource.code].join(" "),style:u}):React.createElement("span",{className:e.iconIconSource.class,style:u},e.iconIconSource.code)}return null}const l=React.createElement("div",{className:"ndl-controls-pointer",style:s,"noodl-style-tag":"checkbox"},e.useIcon?a():null,React.createElement("input",{type:"checkbox",...r,checked:t,onChange:u=>{n(u.target.checked),e.checkedChanged&&e.checkedChanged(u.target.checked)}}));if(e.useLabel){const u={marginLeft:e.labelSpacing,...e.labeltextStyle,...e.styles.label};return e.enabled||(u.cursor="default"),u.color=e.noodlNode.context.styles.resolveColor(u.color),React.createElement("div",{style:{display:"flex",alignItems:"center",...o},...Utils$1.controlEvents(e)},l,React.createElement("label",{className:"ndl-controls-pointer",style:u,htmlFor:e.id,"noodl-style-tag":"label"},e.label))}else return l}const CheckBoxNode$1={name:"net.noodl.controls.checkbox",displayName:"Checkbox",docs:"https://docs.noodl.net/nodes/ui-controls/checkbox",allowChildren:!1,noodlNodeAsProp:!0,nodeDoubleClickAction:{focusPort:"label"},usePortAsLabel:"label",portLabelTruncationMode:"length",connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},initialize(){this.props.attrs={},this.props.sizeMode="explicit",this.props.id="input-"+guid(),this.props.checked=this._internal.checked=!1,this.props.checkedChanged=e=>{const t=this._internal.checked!==e;this._internal.checked=e,t&&(this.flagOutputDirty("checked"),this.sendSignalOnOutput("onChange"),this._updateVisualState())}},getReactComponent(){return Checkbox},inputs:{checked:{type:"boolean",displayName:"Checked",group:"General",default:!1,index:100,set:function(e){e=!!e;const t=e!==this._internal.checked;this.props.checked=this._internal.checked=e,t&&(this.forceUpdate(),this.flagOutputDirty("checked"),this._updateVisualState())}},check:{type:"signal",displayName:"Check",group:"Actions",valueChangedToTrue(){this._internal.checked!==!0&&(this.props.checked=this._internal.checked=!0,this.forceUpdate(),this.flagOutputDirty("checked"),this._updateVisualState())}},uncheck:{type:"signal",displayName:"Uncheck",group:"Actions",valueChangedToTrue(){this._internal.checked!==!1&&(this.props.checked=this._internal.checked=!1,this.forceUpdate(),this.flagOutputDirty("checked"),this._updateVisualState())}},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:201,displayName:"Background Color",group:"Style",type:"color",default:"transparent",applyDefault:!1,allowVisualStates:!0,styleTag:"checkbox"},width:{index:11,group:"Dimensions",displayName:"Width",type:{name:"number",units:["px","vw","vh"],defaultUnit:"px"},default:32,allowVisualStates:!0,styleTag:"checkbox"},height:{index:12,group:"Dimensions",displayName:"Height",type:{name:"number",units:["px","vw","vh"],defaultUnit:"px"},default:32,allowVisualStates:!0,styleTag:"checkbox"}},outputs:{checked:{type:"boolean",displayName:"Checked",group:"States",getter:function(){return this._internal.checked}},onChange:{displayName:"Changed",group:"Events",type:"signal"}}};NodeSharedPortDefinitions.addAlignInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addTransformInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addMarginInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addPaddingInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addIconInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addLabelInputs(CheckBoxNode$1,{enableSpacing:!0,styleTag:"label"}),NodeSharedPortDefinitions.addSharedVisualInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addBorderInputs(CheckBoxNode$1,{defaults:{borderStyle:"solid",borderWidth:2,borderColor:"#000000",borderRadius:3},styleTag:"checkbox"}),NodeSharedPortDefinitions.addShadowInputs(CheckBoxNode$1,{styleTag:"checkbox"}),Utils$1.addControlEventsAndStates(CheckBoxNode$1,{checked:!0});const CheckBox$1=createNodeFromReactComponent(CheckBoxNode$1);function Select(e){const[t,n]=React.useState(e.value);React.useEffect(()=>{n(e.value),e.valueChanged(e.value)},[e.value,e.items]);let o={...e.style};Layout.size(o,e),Layout.align(o,e),e.textStyle!==void 0&&(o=Object.assign({},e.textStyle,o),o.color=e.noodlNode.context.styles.resolveColor(o.color));const r=!e.items||t===void 0?-1:e.items.findIndex(_=>_.Value===t),{height:s,...a}=o;function l(){if(e.iconSourceType==="image"&&e.iconImageSource!==void 0){let _=e.iconImageSource;if(typeof _=="string"&&_.startsWith("/")){const T=Noodl.Env.BaseUrl;T&&(_=T+_.substring(1))}return React.createElement("img",{alt:"",src:_,style:{width:e.iconSize,height:e.iconSize}})}else if(e.iconSourceType==="icon"&&e.iconIconSource!==void 0){const _={fontSize:e.iconSize,color:e.iconColor};return e.iconPlacement==="left"||e.iconPlacement===void 0?_.marginRight=e.iconSpacing:_.marginLeft=e.iconSpacing,e.iconIconSource.codeAsClass===!0?React.createElement("span",{className:[e.iconIconSource.class,e.iconIconSource.code].join(" "),style:_}):React.createElement("span",{className:e.iconIconSource.class,style:_},e.iconIconSource.code)}return null}const u={...e.attrs,id:e.id,className:e.className,style:{inset:0,opacity:0,position:"absolute",textTransform:"inherit",cursor:e.enabled?"":"default","-webkit-appearance":"none"},onClick:e.onClick},d={display:"flex",alignItems:"center",...e.styles.inputWrapper,cursor:e.enabled?"":"default"},p=s&&s[String(s).length-1]==="%";e.useLabel?p?d.flexGrow=1:d.height=s:(Object.assign(d,a),d.height=s);let f=[];e.items&&(f=e.items.map(_=>React.createElement("option",{key:_.Value,value:_.Value,disabled:_.Disabled==="true"||_.Disabled===!0?!0:void 0},_.Label)));let g=null;r>=0&&r<e.items.items.length?g=React.createElement("span",null,e.items.items[r].Label):e.placeholder&&(g=React.createElement("span",{style:{opacity:e.placeholderOpacity}},e.placeholder));const b=React.createElement("div",{className:"ndl-controls-pointer",style:d,"noodl-style-tag":"inputWrapper"},e.useIcon&&e.iconPlacement==="left"?l():null,React.createElement("div",{style:{width:"100%",height:"100%",alignItems:"center",display:"flex"}},g),e.useIcon&&e.iconPlacement==="right"?l():null,React.createElement("select",{...u,disabled:!e.enabled,value:f.find(_=>_.props.value===t)?t:void 0,...Utils$1.controlEvents(e),onChange:_=>{n(_.target.value),e.valueChanged&&e.valueChanged(_.target.value)}},React.createElement("option",{value:"",disabled:!0,selected:!0,hidden:!0}),f));if(e.useLabel){const _={...a,display:"flex",flexDirection:"column"};return p&&(_.height=s),React.createElement("div",{style:_},React.createElement("label",{htmlFor:e.id,style:{...e.labeltextStyle,...e.styles.label,marginBottom:e.labelSpacing},"noodl-style-tag":"label"},e.label),b)}else return b}const OptionsNode$1={name:"net.noodl.controls.options",displayName:"Dropdown",docs:"https://docs.noodl.net/nodes/ui-controls/dropdown",allowChildren:!1,noodlNodeAsProp:!0,usePortAsLabel:"label",nodeDoubleClickAction:{focusPort:"label"},connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Text Style","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},initialize:function(){this.props.attrs={},this._itemsChanged=()=>{this.forceUpdate()},this.props.id="input-"+guid(),this.props.valueChanged=e=>{const t=this._internal.value!==e;this._internal.value=e,t&&(this.flagOutputDirty("value"),this.sendSignalOnOutput("onChange"))}},getReactComponent(){return Select},inputs:{items:{type:"array",displayName:"Items",group:"General",set:function(e){this._internal.items!==e&&this._internal.items!==void 0&&this._internal.items.off("change",this._itemsChanged),this._internal.items=e,this._internal.items.on("change",this._itemsChanged),this.props.items=this._internal.items,this.forceUpdate()}},value:{type:"string",displayName:"Value",group:"General",set:function(e){if(e!==void 0&&typeof e!="string")if(e?.toString!==void 0)e=e.toString();else return;const t=e!==this._internal.value;this.props.value=this._internal.value=e,t&&(this.forceUpdate(),this.flagOutputDirty("value"))}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputProps:{placeholder:{displayName:"Placeholder",type:"string",group:"Placeholder"},placeholderOpacity:{group:"Placeholder",displayName:"Placeholder opacity",type:"number",default:.5}},outputs:{value:{type:"string",displayName:"Value",group:"States",getter:function(){return this._internal.value}},onChange:{type:"signal",displayName:"Changed",group:"Events"}},inputCss:{backgroundColor:{index:100,displayName:"Background Color",group:"Style",type:"color",default:"transparent",styleTag:"inputWrapper",allowVisualStates:!0}}};NodeSharedPortDefinitions.addDimensions(OptionsNode$1,{defaultSizeMode:"contentSize",contentLabel:"Content"}),NodeSharedPortDefinitions.addAlignInputs(OptionsNode$1),NodeSharedPortDefinitions.addTextStyleInputs(OptionsNode$1),NodeSharedPortDefinitions.addTransformInputs(OptionsNode$1),NodeSharedPortDefinitions.addPaddingInputs(OptionsNode$1,{styleTag:"inputWrapper"}),NodeSharedPortDefinitions.addMarginInputs(OptionsNode$1),NodeSharedPortDefinitions.addIconInputs(OptionsNode$1,{enableIconPlacement:!0,defaults:{useIcon:!1,iconColor:"#000000"}}),NodeSharedPortDefinitions.addLabelInputs(OptionsNode$1,{enableSpacing:!0,styleTag:"label"}),NodeSharedPortDefinitions.addSharedVisualInputs(OptionsNode$1),NodeSharedPortDefinitions.addBorderInputs(OptionsNode$1,{defaults:{borderStyle:"solid",borderWidth:2,borderColor:"#000000",borderRadius:5},styleTag:"inputWrapper"}),NodeSharedPortDefinitions.addShadowInputs(OptionsNode$1,{styleTag:"inputWrapper"}),Utils$1.addControlEventsAndStates(OptionsNode$1);const Options$1=createNodeFromReactComponent(OptionsNode$1),RadioButtonContext=React__namespace.createContext({name:void 0,selected:void 0,checkedChanged:void 0});function isPercentage(e){return e&&e[e.length-1]==="%"}function RadioButton$2(e){const t=React.useContext(RadioButtonContext),n={...e.style};e.parentLayout==="none"&&(n.position="absolute"),Layout.align(n,e),e.checkedChanged&&e.checkedChanged(t?t.selected===e.value:!1);const o={...e.attrs,id:e.id,disabled:!e.enabled,className:[e.className,"ndl-controls-radio-2"].join(" "),style:{width:e.styles.radio.width,height:e.styles.radio.height}},r={display:"flex",alignItems:"center",justifyContent:"center",position:"relative",flexShrink:0,...e.styles.radio};e.useLabel?isPercentage(e.styles.radio.width)&&(delete r.width,r.flexGrow=1):(Object.assign(o,Utils$1.controlEvents(e)),Object.assign(r,n));function s(){if(e.iconSourceType==="image"&&e.iconImageSource!==void 0){let u=e.iconImageSource;if(typeof u=="string"&&u.startsWith("/")){const d=Noodl.Env.BaseUrl;d&&(u=d+u.substring(1))}return React.createElement("img",{alt:"",src:u,style:{width:e.iconSize,height:e.iconSize}})}else if(e.iconSourceType==="icon"&&e.iconIconSource!==void 0){const u={fontSize:e.iconSize,color:e.iconColor};return e.iconIconSource.codeAsClass===!0?React.createElement("span",{className:["ndl-controls-abs-center",e.iconIconSource.class,e.iconIconSource.code].join(" "),style:u}):React.createElement("span",{className:["ndl-controls-abs-center",e.iconIconSource.class].join(" "),style:u},e.iconIconSource.code)}return null}const a={left:e.fillSpacing,right:e.fillSpacing,top:e.fillSpacing,bottom:e.fillSpacing,backgroundColor:e.styles.fill.backgroundColor,borderRadius:"inherit",position:"absolute"},l=React.createElement("div",{className:"ndl-controls-pointer",style:r,"noodl-style-tag":"radio"},React.createElement("div",{style:a,"noodl-style-tag":"fill"}),e.useIcon?s():null,React.createElement("input",{type:"radio",name:t?t.name:void 0,...o,checked:t?t.selected===e.value:!1,onChange:u=>{t&&t.checkedChanged&&t.checkedChanged(e.value)}}));if(e.useLabel){const u={marginLeft:e.labelSpacing,...e.labeltextStyle,...e.styles.label,cursor:e.enabled?void 0:"default"};u.color=e.noodlNode.context.styles.resolveColor(u.color);const d={display:"flex",alignItems:"center",...n};return isPercentage(e.styles.radio.width)&&(d.width=e.styles.radio.width),isPercentage(e.styles.radio.height)&&(d.height=e.styles.radio.height),React.createElement("div",{style:d,...Utils$1.controlEvents(e)},l,React.createElement("label",{className:"ndl-controls-pointer",style:u,htmlFor:e.id,"noodl-style-tag":"label"},e.label))}else return l}const RadioButtonNode$1={name:"net.noodl.controls.radiobutton",displayName:"Radio Button",docs:"https://docs.noodl.net/nodes/ui-controls/radio-button",allowChildren:!1,noodlNodeAsProp:!0,usePortAsLabel:"label",nodeDoubleClickAction:{focusPort:"label"},connectionPanel:{groupPriority:["General","Style","Fill Style","Actions","Events","States","Mounted","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},initialize(){this.props.attrs={},this.props.sizeMode="explicit",this.props.id="input-"+guid(),this._internal.checked=!1,this.props.checkedChanged=e=>{const t=this._internal.checked!==e;this._internal.checked=e,t&&(this.flagOutputDirty("checked"),this._updateVisualState())},this.props.styles.fill={}},getReactComponent(){return RadioButton$2},inputs:{fillColor:{index:19,displayName:"Fill Color",group:"Fill Style",type:"color",allowVisualStates:!0,styleTag:"fill",set(e){this.setStyle({backgroundColor:e},"fill")}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputProps:{value:{type:"string",displayName:"Value",group:"General",index:100},fillSpacing:{displayName:"Fill Spacing",group:"Fill Style",type:{name:"number",units:["px","vw","vh"],defaultUnit:"px"},allowVisualStates:!0,default:2}},inputCss:{width:{index:11,group:"Dimensions",displayName:"Width",type:{name:"number",units:["px","%","vw","vh"],defaultUnit:"px"},default:32,allowVisualStates:!0,styleTag:"radio",onChange(){this.forceUpdate()}},height:{index:12,group:"Dimensions",displayName:"Height",type:{name:"number",units:["px","%"],defaultUnit:"px"},default:32,allowVisualStates:!0,styleTag:"radio",onChange(){this.forceUpdate()}},backgroundColor:{index:201,displayName:"Background Color",group:"Style",type:"color",allowVisualStates:!0,styleTag:"radio",default:"transparent",applyDefault:!1}},outputs:{checked:{type:"boolean",displayName:"Checked",group:"States",get(){return this._internal.checked}}}};NodeSharedPortDefinitions.addAlignInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addTransformInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addMarginInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addPaddingInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addIconInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addLabelInputs(RadioButtonNode$1,{enableSpacing:!0,styleTag:"label"}),NodeSharedPortDefinitions.addSharedVisualInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addBorderInputs(RadioButtonNode$1,{defaults:{borderStyle:"solid",borderWidth:2,borderRadius:16},styleTag:"radio"}),NodeSharedPortDefinitions.addShadowInputs(RadioButtonNode$1,{styleTag:"radio"}),Utils$1.addControlEventsAndStates(RadioButtonNode$1,{checked:!0});const RadioButton$1=createNodeFromReactComponent(RadioButtonNode$1);function RadioButtonGroup$1(e){const[t,n]=React__namespace.useState(e.value),o={selected:t,name:e.name,checkedChanged:a=>{n(a),e.valueChanged&&e.valueChanged(a)}};React__namespace.useEffect(()=>{n(e.value)},[e.value]);const r={...e.style};Layout.size(r,e),Layout.align(r,e);let s="ndl-controls-radiobuttongroup";return e.className&&(s=s+" "+e.className),React__namespace.createElement(RadioButtonContext.Provider,{value:o},React__namespace.createElement("div",{className:s,style:r},e.children))}const flexDirectionValues=["row","row-reverse","column","column-reverse","inherit","initial","revert","unset"];let RadioButtonGroupNode={name:"Radio Button Group",displayName:"Radio Button Group",docs:"https://docs.noodl.net/nodes/ui-controls/radio-button-group",allowChildren:!0,noodlNodeAsProp:!0,useVariants:!1,connectionPanel:{groupPriority:["General","Style","Actions","Events","Mounted","States"]},initialize(){this.props.name="radio-"+guid(),this.props.valueChanged=e=>{const t=this._internal.value!==e;this._internal.value=e,this.props.value=e,t&&(this.forceUpdate(),this.flagOutputDirty("value"),this.sendSignalOnOutput("onChange"))}},getReactComponent(){return RadioButtonGroup$1},defaultCss:{display:"flex",position:"relative",flexDirection:"column"},inputs:{flexDirection:{index:11,displayName:"Layout",group:"Layout",type:{name:"enum",enums:[{label:"Vertical",value:"column"},{label:"Horizontal",value:"row"}]},default:"column",set(e){this.props.layout=e,e!=="none"?this.setStyle({flexDirection:e}):this.removeStyle(["flexDirection"]),this.context.editorConnection&&(e!=="none"&&!flexDirectionValues.includes(e)?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"layout-warning",{message:"Invalid Layout value has to be a valid flex-direction value."}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"layout-warning")),this.forceUpdate()}},value:{index:20,type:"string",displayName:"Value",group:"General",set:function(e){if(typeof e!="string"&&e.toString!==void 0&&(e=e.toString()),typeof e!="string")return;const t=e!==this._internal.value;this.props.value=this._internal.value=e,t&&(this.forceUpdate(),this.flagOutputDirty("value"))}}},outputs:{value:{type:"string",displayName:"Value",group:"States",getter:function(){return this._internal.value}},onChange:{type:"signal",displayName:"Changed",group:"Events"}},inputProps:{},outputProps:{}};NodeSharedPortDefinitions.addDimensions(RadioButtonGroupNode,{defaultSizeMode:"contentSize",contentLabel:"Content"}),NodeSharedPortDefinitions.addAlignInputs(RadioButtonGroupNode),NodeSharedPortDefinitions.addTransformInputs(RadioButtonGroupNode),NodeSharedPortDefinitions.addMarginInputs(RadioButtonGroupNode),NodeSharedPortDefinitions.addPaddingInputs(RadioButtonGroupNode),NodeSharedPortDefinitions.addSharedVisualInputs(RadioButtonGroupNode),RadioButtonGroupNode=createNodeFromReactComponent(RadioButtonGroupNode);const RadioButtonGroup=RadioButtonGroupNode;function _styleTemplate$4(e,t){return`.${e}::-webkit-slider-thumb {
28
+ `)[0];else if(B.length!==2)k+="Syntax error: "+L;else{const H=B[0].split("-");for(let J=1;J<H.length;J++)H[J]=H[J][0].toUpperCase()+H[J].substring(1);I[H.join("")]=B[1]}}k?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"css-parse-waring",{message:"Error in CSS Style<br>"+k}):(this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"css-parse-waring"),I&&this.setStyle(I),this.customCssStyles=I)},setChildIndex(v){this.childIndex=v,this.flagOutputDirty("childIndex")},updateChildIndices(){let v=0;for(let I=0;I<this.children.length;I++){const k=this.children[I];(k.name==="For Each"||k.name==="Component Children")&&v--,k.setChildIndex&&k.setChildIndex(I+v)}},updateChildrenCount(){let v=0;this.children.forEach(I=>{I?.model?.type==="For Each"?v+=I.model.children.length:v++}),this.childrenCount=v,this.flagOutputDirty("childrenCount")},addChild(v,I){I===void 0&&(I=this.children.length),v.parent=this,this.children.splice(I,0,v),this.cachedChildren=void 0,this.scheduleUpdateChildCountAndIndicies(),this.forceUpdate()},removeChild(v){const I=this.children.indexOf(v);I!==-1&&(this.children.splice(I,1),v.parent=void 0,this.cachedChildren=void 0,this.scheduleUpdateChildCountAndIndicies(),this.forceUpdate())},contains(v){return this.children.indexOf(v)!==-1?!0:this.children.some(k=>k.contains&&k.contains(v))},scheduleUpdateChildCountAndIndicies(){this.updateChildIndiciesScheduled||(this.updateChildIndiciesScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.updateChildIndices(),A&&this.updateChildrenCount(),this.updateChildIndiciesScheduled=!1}))},getChildren(){return this.children},isChild(v){return this.children.indexOf(v)!==-1},getChildRoot(){return this},forceUpdate(){this.forceUpdateScheduled!==!0&&(this.forceUpdateScheduled=!0,this.context.eventEmitter.once("frameEnd",()=>{this.forceUpdateScheduled=!1,this.renderedAtFrame!==this.context.frameNumber&&this.reactComponentRef&&this.reactComponentRef.setState({})}),this.context.scheduleUpdate())},_resetReactVirtualDOM(){this.reactKey="key"+reactKeyCounter,reactKeyCounter++;const v=this.getVisualParentNode();v&&(v.cachedChildren=void 0,v.forceUpdate())},triggerDidMount(){this.wantsToBeMounted&&!this.didCallTriggerDidMount&&(this.didCallTriggerDidMount=!0,this.hasOutput("didMount")&&this.sendSignalOnOutput("didMount"),this.props.didMount&&this.props.didMount(),this.didMount&&this.didMount()),this.children.forEach(v=>{v.triggerDidMount&&v.triggerDidMount()})},render(){if(this.wantsToBeMounted)return React.createElement(NoodlReactComponent,{key:this.reactKey,noodlNode:this,ref:v=>{this.reactComponentRef=v,this.boundingBoxObserver.setTarget(ReactDOM.findDOMNode(v))}})},renderChildren(){if(!this.cachedChildren){let v=this.children.map(k=>k.render()),I=[];flattenArray(I,v),I.length===0?I=null:I.length===1&&(I=I[0]),this.cachedChildren=I}return this.cachedChildren},setStyle(v,I){const k=I?this.props.styles[I]:this.style;for(const E in v)k[E]=v[E];const N=this.getDOMElement();if(!N)return;let w=!1;if(!I){if(v.hasOwnProperty("opacity")&&(w=v.hasOwnProperty("opacity")&&(N.style.opacity==="0"&&v.opacity>0||N.style.opacity!=="0"&&v.opacity===0)),v.transform){let L=v.transform;const B=this.getVisualParentNode();(this.style.position==="absolute"||!B||!B.style.flexDirection)&&(this.props.alignX==="center"&&!(N.style.marginLeft&&N.style.marginRight)&&(L="translateX(-50%) "+L),this.props.alignY==="center"&&!(N.style.marginTop&&N.style.marginBottom)&&(L="translateY(-50%) "+L)),v.transform=L}const E=v.hasOwnProperty("marginLeft")||v.hasOwnProperty("marginRight")||v.hasOwnProperty("marginTop")||v.hasOwnProperty("marginBottom");(this.props.width&&this.props.width[this.props.width.length-1]==="%"||this.props.height&&this.props.height[this.props.height.length-1]==="%")&&E&&(w=!0),(v.position||v.flexDirection||v.clip)&&(w=!0)}w?this.forceUpdate():setStylesOnDOMNode(N,v,I)},removeStyle(v,I){const k=I?this.props.styles[I]:this.style;for(const E of v)delete k[E];const N=this.getDOMElement();let w=!1;if(!I&&N){const E={marginTop:!0,marginBottom:!0,marginLeft:!0,marginRight:!0};for(const F of v)E[F]&&(w=!0)}if(N){const E={};for(const F of v)E[F]="";setStylesOnDOMNode(N,E,I)}w&&this.forceUpdate()},getStyle(v){return this.style[v]},getRef(){return this.reactComponentRef},getDOMElement(){const v=this.getRef();if(v)return ReactDOM.findDOMNode(v)},getVisualParentNode(){if(this.parent)return this.parent;let v=this.nodeScope.componentOwner;for(;!v.parent&&v.parentNodeScope;)v=v.parentNodeScope.componentOwner;return v?v.parent:void 0},setVariant(v){this._stopStateTransitions(),this.variant=v;const I={};if(v&&mergeDeep(I,v.parameters),mergeDeep(I,this.model.parameters),this.currentVisualStates){const N=this.getParametersForStates(this.currentVisualStates);mergeDeep(I,N)}const k=Object.keys(I).filter(N=>!this._hasInputBeenSetFromAConnection(N));for(const N of k)this.registerInputIfNeeded(N),this.hasInput(N)&&this.queueInput(N,I[N])},getParameter(v){return this.model.parameters.hasOwnProperty(v)?this.model.parameters[v]:this.variant&&this.variant.parameters.hasOwnProperty(v)?this.variant.parameters[v]:this.context.getDefaultValueForInput(this.model.type,v)},getParametersForStates(v){const I={};if(this.variant)for(const k of v)this.variant.stateParameters&&this.variant.stateParameters.hasOwnProperty(k)&&mergeDeep(I,this.variant.stateParameters[k]);for(const k in I)this.model.parameters.hasOwnProperty(k)&&(isObject(I[k])?mergeDeep(I[k],this.model.parameters[k]):I[k]=this.model.parameters[k]);if(this.model.stateParameters)for(const k of v)this.model.stateParameters.hasOwnProperty(k)&&mergeDeep(I,this.model.stateParameters[k]);return I},_getNewState(v,I){const k=I.filter(w=>!(v||[]).includes(w)),N=k.length?k[0]:"neutral";return N===""?"neutral":N},_getDefaultTransition(v){if(this.model.defaultStateTransitions&&this.model.defaultStateTransitions[v]&&this.model.defaultStateTransitions[v].curve)return this.model.defaultStateTransitions[v];if(this.variant&&this.variant.defaultStateTransitions&&this.variant.defaultStateTransitions[v]&&this.variant.defaultStateTransitions[v].curve)return this.variant.defaultStateTransitions[v]},_getStateTransition(v){let I={};return this.model.stateTransitions&&this.model.stateTransitions[v]&&Object.assign(I,this.model.stateTransitions[v]),this.variant&&this.variant.stateTransitions&&this.variant.stateTransitions[v]&&Object.assign(I,this.variant.stateTransitions[v]),I},setVisualStates(v){if(!this.model||this.currentVisualStates&&v.length===this.currentVisualStates.length&&v.every((B,H)=>B===this.currentVisualStates[H]))return;const k=this.currentVisualStates?this.getParametersForStates(this.currentVisualStates):{},N=this.getParametersForStates(v),w=this._getNewState(this.currentVisualStates,v);this.currentVisualStates=v;const E={};for(const B in k)!N.hasOwnProperty(B)&&!this._hasInputBeenSetFromAConnection(B)&&this.getParameter(B)!==void 0&&(E[B]=this.getParameter(B));for(const B in N)!this._hasInputBeenSetFromAConnection(B)&&N[B]!==void 0&&(E[B]=N[B]);const F=this._getDefaultTransition(w),L=this._getStateTransition(w);for(const B in E)L[B]&&L[B].curve?transitionParameter(this,B,E[B],L[B]):!L[B]&&F?transitionParameter(this,B,E[B],F):(this._transitions&&this._transitions[B]&&(this._transitions[B].stop(),delete this._transitions[B]),this.queueInput(B,E[B]))},_getVisualStates(){return this.currentVisualStates||[]},_stopStateTransitions(){if(this._transitions)for(const v in this._transitions)this._transitions[v].stop(),delete this._transitions[v]}}};_&&(T.inputs.variant={displayName:"Variant",group:"General",type:{name:"string",allowConnectionsOnly:!0},set(v){if(this.variant&&this.variant.name===v)return;const I=this.context.variants.getVariant(this.model.type,v);I&&this.setVariant(I)}}),e.mountedInput!==!1&&(T.inputs.mounted={displayName:"Mounted",index:9999,type:"boolean",group:"General",default:!0,set(v){if(v=!!v,this.wantsToBeMounted!==v){this.wantsToBeMounted=v;const I=this.getVisualParentNode();I&&(I.cachedChildren=void 0,I.forceUpdate())}}});const A=T.allowChildren||T.displayName;A&&(T.outputs.childrenCount={displayName:"Children Count",type:"number",get(){return this.childrenCount}});for(const v in o)T.inputs[v]=o[v];for(const v in r){const I=r[v];I.type==="node"?(I.type="reference",I.set=function(k){const N=I.propPath?this.props[I.propPath]:this.props;k!==void 0?N[v]=k.render():delete N[v],this.forceUpdate()}):I.type==="signal"?console.error(`Error: Signals not supported as a react prop. node: '${e.name}' input: '${v}'`):defineRegularInputProp(I,v),T.inputs[v]=I}for(const v in s){const I=s[v],k=I.targetStyleProperty||v;I.type.units?I.set=function(N){typeof N!="object"&&I.type.defaultUnit&&(N={value:N,unit:I.type.defaultUnit}),typeof N=="object"&&N.value!==void 0?this.setStyle({[k]:N.value+N.unit},I.styleTag):N!==void 0?this.setStyle({[k]:N},I.styleTag):this.removeStyle([k],I.styleTag),I.onChange&&I.onChange.call(this,N)}:I.set=function(N){N!==void 0?this.setStyle({[k]:N},I.styleTag):this.removeStyle([k],I.styleTag),I.onChange&&I.onChange.call(this,N)},T.inputs[v]=I}for(const v in a)T.outputs[v]=a[v];for(const v in l){const I=l[v];I.type!=="signal"&&(I.get=function(){return this.outputPropValues[v]}),T.outputs[v]=I}for(const v in h)T.methods[v]=h[v];return{node:T,setup:e.setup}}function isObject(e){return e&&typeof e=="object"&&!Array.isArray(e)}const pointerEvents=["onClick","onMouseDown","onMouseMove","onMouseUp","onMouseEnter","onMouseLeave","onMouseOver","onMouseOut","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","onPointerDown","onPointerMove","onPointerUp","onPointerCancel"],pointerEventsNotToBlock=new Set(["onMouseLeave","onMouseOut"]);function pointerProps(e){const t={};for(const n of pointerEvents)e.blockTouch&&!pointerEventsNotToBlock.has(n)?e.pointer&&e.pointer[n]?t[n]=o=>{e.pointer[n](o),o.stopPropagation()}:e[n]?t[n]=o=>{e[n](o),o.stopPropagation()}:t[n]=o=>{o.stopPropagation()}:e[n]?t[n]=e[n]:e.pointer&&(t[n]=e.pointer[n]);if(e.noodlNode)for(const n in t){const o=t[n];o&&(t[n]=r=>{o.call(this,r),e.noodlNode.context.updateDirtyNodes()})}return t}function _shallowCompare$1(e,t){let n;for(n in e)if(e.hasOwnProperty(n)&&e[n]!==t[n])return!1;for(n in t)if(t.hasOwnProperty(n)&&e[n]!==t[n])return!1;return!0}const _styleSheets$1={};function updateStylesForClass$1(e,t,n){if(_styleSheets$1[e])_shallowCompare$1(t,_styleSheets$1[e].props)||(_styleSheets$1[e].style.innerHTML=n(e,t),_styleSheets$1[e].props=Object.assign({},t));else{const o=document.createElement("style");o.innerHTML=n(e,t),document.head.appendChild(o),_styleSheets$1[e]={style:o,props:Object.assign({},t)}}}function mergeAttribute$1(e,t,n){e[t]||(e[t]={});for(const o in n)e[t][o]=n[o]}function addInputs(e,t){mergeAttribute$1(e,"inputs",t)}function addInputProps$1(e,t){mergeAttribute$1(e,"inputProps",t)}function addOutputProps$1(e,t){mergeAttribute$1(e,"outputProps",t)}function addOutputs(e,t){mergeAttribute$1(e,"outputs",t)}function addControlEventsAndStates$1(e,t){t=t||{},e.visualStates=[{name:"neutral",label:"Neutral"},{name:"hover",label:"Hover"},{name:"pressed",label:"Pressed"},{name:"focused",label:"Focused"},{name:"disabled",label:"Disabled"}],t.checked&&e.visualStates.splice(3,0,{name:"checked",label:"Checked"}),addInputs(e,{enabled:{type:"boolean",displayName:"Enabled",group:"General",default:!0,set:function(o){o=!!o;const r=o!==this._internal.enabled;this.props.enabled=this._internal.enabled=o,r&&(this._updateVisualState(),this.forceUpdate(),this.flagOutputDirty("enabled"))}}}),addInputProps$1(e,{blockTouch:{index:450,displayName:"Block Pointer Events",type:"boolean",group:"Pointer Events"}}),e.methods._updateVisualState=function(){const o=[];this._internal.enabled&&(this.outputPropValues.hoverState&&o.push("hover"),this.outputPropValues.pressedState&&o.push("pressed"),this.outputPropValues.focusState&&o.push("focused")),t.checked&&this._internal.checked&&o.push("checked"),this._internal.enabled||o.push("disabled"),this.setVisualStates(o)},addOutputProps$1(e,{focusState:{displayName:"Focused",group:"States",type:"boolean",props:{onFocus(){this.outputPropValues.focusState=!0,this.flagOutputDirty("focusState"),this._updateVisualState()},onBlur(){this.outputPropValues.focusState=!1,this.flagOutputDirty("focusState"),this._updateVisualState()}}},onFocus:{displayName:"Focused",group:"Focus Events",type:"signal",props:{onFocus(){this.sendSignalOnOutput("onFocus")}}},onBlur:{displayName:"Blurred",group:"Focus Events",type:"signal",props:{onBlur(){this.sendSignalOnOutput("onBlur")}}},hoverState:{displayName:"Hover",group:"States",type:"boolean",props:{onMouseOver(){this.outputPropValues.hoverState=!0,this.flagOutputDirty("hoverState"),this._updateVisualState()},onMouseLeave(){this.outputPropValues.hoverState=!1,this.flagOutputDirty("hoverState"),this._updateVisualState()}}},hoverStart:{displayName:"Hover Start",group:"Pointer Events",type:"signal",props:{onMouseOver(){this.sendSignalOnOutput("hoverStart")}}},hoverEnd:{displayName:"Hover End",group:"Pointer Events",type:"signal",props:{onMouseLeave(){this.sendSignalOnOutput("hoverEnd")}}},pressedState:{displayName:"Pressed",group:"States",type:"boolean",props:{onMouseDown(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this._updateVisualState()},onTouchStart(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this._updateVisualState()},onMouseUp(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this._updateVisualState()},onTouchEnd(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this._updateVisualState()},onTouchCancel(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this._updateVisualState()},onMouseLeave(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this._updateVisualState()}}},pointerDown:{displayName:"Pointer Down",group:"Pointer Events",type:"signal",props:{onMouseDown(){this.sendSignalOnOutput("pointerDown")},onTouchStart(){this.sendSignalOnOutput("pointerDown")}}},pointerUp:{displayName:"Pointer Up",group:"Pointer Events",type:"signal",props:{onMouseUp(){this.sendSignalOnOutput("pointerUp")},onTouchEnd(){this.sendSignalOnOutput("pointerUp")},onTouchCancel(){this.sendSignalOnOutput("pointerUp")}}}}),addOutputs(e,{enabled:{type:"boolean",displayName:"Enabled",group:"States",getter:function(){return this._internal.enabled}}});const n=e.initialize;e.initialize=function(){n&&n.call(this),this.props.enabled=this._internal.enabled=!0,this.outputPropValues.hoverState=this.outputPropValues.focusState=this.outputPropValues.pressedState=!1}}function controlEvents$1(e){return Object.assign({},{onFocus:e.onFocus,onBlur:e.onBlur},pointerProps(e))}const Utils$1={updateStylesForClass:updateStylesForClass$1,addControlEventsAndStates:addControlEventsAndStates$1,controlEvents:controlEvents$1};function Button$2(e){let t={...e.style};Layout.size(t,e),Layout.align(t,e),e.textStyle!==void 0&&(t=Object.assign({},e.textStyle,t),t.color=e.noodlNode.context.styles.resolveColor(t.color));function n(){const s={};if(e.useLabel&&(e.iconPlacement==="left"||e.iconPlacement===void 0?s.marginRight=e.iconSpacing:s.marginLeft=e.iconSpacing),e.iconSourceType==="image"&&e.iconImageSource!==void 0){s.width=e.iconSize,s.height=e.iconSize;let a=e.iconImageSource;if(typeof a=="string"&&a.startsWith("/")){const l=Noodl.Env.BaseUrl;l&&(a=l+a.substring(1))}return React__namespace.createElement("img",{alt:"",src:a,style:s})}else if(e.iconSourceType==="icon"&&e.iconIconSource!==void 0)return s.fontSize=e.iconSize,s.color=e.iconColor,e.iconIconSource.codeAsClass===!0?React__namespace.createElement("span",{className:[e.iconIconSource.class,e.iconIconSource.code].join(" "),style:s}):React__namespace.createElement("span",{className:e.iconIconSource.class,style:s},e.iconIconSource.code);return null}let o="ndl-controls-button";e.className&&(o=o+" "+e.className);let r=null;return e.useLabel&&e.useIcon?r=React__namespace.createElement(React__namespace.Fragment,null,e.iconPlacement==="left"?n():null,String(e.label),e.iconPlacement==="right"?n():null):e.useLabel?r=String(e.label):e.useIcon&&(r=n()),React__namespace.createElement("button",{...e.attrs,className:o,disabled:!e.enabled,...Utils$1.controlEvents(e),type:e.buttonType,style:t,onClick:e.onClick},r,e.children)}const ButtonNode$1={name:"net.noodl.controls.button",displayName:"Button",docs:"https://docs.noodl.net/nodes/ui-controls/button",allowChildren:!0,noodlNodeAsProp:!0,usePortAsLabel:"label",portLabelTruncationMode:"length",nodeDoubleClickAction:{focusPort:"label"},connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},initialize(){this.props.attrs={},this.props.layout="row"},getReactComponent(){return Button$2},inputs:{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:"#000000",allowVisualStates:!0}},outputProps:{onClick:{displayName:"Click",group:"Events",type:"signal"}}};NodeSharedPortDefinitions.addDimensions(ButtonNode$1,{defaultSizeMode:"contentSize",contentLabel:"Content"}),NodeSharedPortDefinitions.addTextStyleInputs(ButtonNode$1),NodeSharedPortDefinitions.addAlignInputs(ButtonNode$1),NodeSharedPortDefinitions.addTransformInputs(ButtonNode$1),NodeSharedPortDefinitions.addPaddingInputs(ButtonNode$1,{defaults:{paddingTop:5,paddingRight:20,paddingBottom:5,paddingLeft:20}}),NodeSharedPortDefinitions.addMarginInputs(ButtonNode$1),NodeSharedPortDefinitions.addLabelInputs(ButtonNode$1,{defaults:{useLabel:!0}}),NodeSharedPortDefinitions.addIconInputs(ButtonNode$1,{enableIconPlacement:!0,defaults:{useIcon:!1}}),NodeSharedPortDefinitions.addSharedVisualInputs(ButtonNode$1),NodeSharedPortDefinitions.addBorderInputs(ButtonNode$1),NodeSharedPortDefinitions.addShadowInputs(ButtonNode$1),Utils$1.addControlEventsAndStates(ButtonNode$1);const Button$1=createNodeFromReactComponent(ButtonNode$1);function Checkbox(e){const[t,n]=React.useState(e.checked);React.useEffect(()=>{n(!!e.checked)},[]),React.useEffect(()=>{n(!!e.checked)},[e.checked]);const o={...e.style};e.parentLayout==="none"&&(o.position="absolute"),Layout.align(o,e);const r={...e.attrs,id:e.id,className:[e.className,"ndl-controls-checkbox-2"].join(" "),disabled:!e.enabled,style:{width:e.styles.checkbox.width,height:e.styles.checkbox.height}},s={display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,position:"relative",...e.styles.checkbox};e.useLabel||(Object.assign(r,Utils$1.controlEvents(e)),Object.assign(s,o));function a(){if(e.iconSourceType==="image"&&e.iconImageSource!==void 0){let u=e.iconImageSource;if(typeof u=="string"&&u.startsWith("/")){const d=Noodl.Env.BaseUrl;d&&(u=d+u.substring(1))}return React.createElement("img",{alt:"",src:u,style:{width:e.iconSize,height:e.iconSize,position:"absolute"}})}else if(e.iconSourceType==="icon"&&e.iconIconSource!==void 0){const u={fontSize:e.iconSize,color:e.iconColor,position:"absolute"};return e.iconIconSource.codeAsClass===!0?React.createElement("span",{className:[e.iconIconSource.class,e.iconIconSource.code].join(" "),style:u}):React.createElement("span",{className:e.iconIconSource.class,style:u},e.iconIconSource.code)}return null}const l=React.createElement("div",{className:"ndl-controls-pointer",style:s,"noodl-style-tag":"checkbox"},e.useIcon?a():null,React.createElement("input",{type:"checkbox",...r,checked:t,onChange:u=>{n(u.target.checked),e.checkedChanged&&e.checkedChanged(u.target.checked)}}));if(e.useLabel){const u={marginLeft:e.labelSpacing,...e.labeltextStyle,...e.styles.label};return e.enabled||(u.cursor="default"),u.color=e.noodlNode.context.styles.resolveColor(u.color),React.createElement("div",{style:{display:"flex",alignItems:"center",...o},...Utils$1.controlEvents(e)},l,React.createElement("label",{className:"ndl-controls-pointer",style:u,htmlFor:e.id,"noodl-style-tag":"label"},e.label))}else return l}const CheckBoxNode$1={name:"net.noodl.controls.checkbox",displayName:"Checkbox",docs:"https://docs.noodl.net/nodes/ui-controls/checkbox",allowChildren:!1,noodlNodeAsProp:!0,nodeDoubleClickAction:{focusPort:"label"},usePortAsLabel:"label",portLabelTruncationMode:"length",connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},initialize(){this.props.attrs={},this.props.sizeMode="explicit",this.props.id="input-"+guid(),this.props.checked=this._internal.checked=!1,this.props.checkedChanged=e=>{const t=this._internal.checked!==e;this._internal.checked=e,t&&(this.flagOutputDirty("checked"),this.sendSignalOnOutput("onChange"),this._updateVisualState())}},getReactComponent(){return Checkbox},inputs:{checked:{type:"boolean",displayName:"Checked",group:"General",default:!1,index:100,set:function(e){e=!!e;const t=e!==this._internal.checked;this.props.checked=this._internal.checked=e,t&&(this.forceUpdate(),this.flagOutputDirty("checked"),this._updateVisualState())}},check:{type:"signal",displayName:"Check",group:"Actions",valueChangedToTrue(){this._internal.checked!==!0&&(this.props.checked=this._internal.checked=!0,this.forceUpdate(),this.flagOutputDirty("checked"),this._updateVisualState())}},uncheck:{type:"signal",displayName:"Uncheck",group:"Actions",valueChangedToTrue(){this._internal.checked!==!1&&(this.props.checked=this._internal.checked=!1,this.forceUpdate(),this.flagOutputDirty("checked"),this._updateVisualState())}},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:201,displayName:"Background Color",group:"Style",type:"color",default:"transparent",applyDefault:!1,allowVisualStates:!0,styleTag:"checkbox"},width:{index:11,group:"Dimensions",displayName:"Width",type:{name:"number",units:["px","vw","vh"],defaultUnit:"px"},default:32,allowVisualStates:!0,styleTag:"checkbox"},height:{index:12,group:"Dimensions",displayName:"Height",type:{name:"number",units:["px","vw","vh"],defaultUnit:"px"},default:32,allowVisualStates:!0,styleTag:"checkbox"}},outputs:{checked:{type:"boolean",displayName:"Checked",group:"States",getter:function(){return this._internal.checked}},onChange:{displayName:"Changed",group:"Events",type:"signal"}}};NodeSharedPortDefinitions.addAlignInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addTransformInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addMarginInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addPaddingInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addIconInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addLabelInputs(CheckBoxNode$1,{enableSpacing:!0,styleTag:"label"}),NodeSharedPortDefinitions.addSharedVisualInputs(CheckBoxNode$1),NodeSharedPortDefinitions.addBorderInputs(CheckBoxNode$1,{defaults:{borderStyle:"solid",borderWidth:2,borderColor:"#000000",borderRadius:3},styleTag:"checkbox"}),NodeSharedPortDefinitions.addShadowInputs(CheckBoxNode$1,{styleTag:"checkbox"}),Utils$1.addControlEventsAndStates(CheckBoxNode$1,{checked:!0});const CheckBox$1=createNodeFromReactComponent(CheckBoxNode$1);function Select(e){const[t,n]=React.useState(e.value);React.useEffect(()=>{n(e.value),e.valueChanged(e.value)},[e.value,e.items]);let o={...e.style};Layout.size(o,e),Layout.align(o,e),e.textStyle!==void 0&&(o=Object.assign({},e.textStyle,o),o.color=e.noodlNode.context.styles.resolveColor(o.color));const r=!e.items||t===void 0?-1:e.items.findIndex(_=>_.Value===t),{height:s,...a}=o;function l(){if(e.iconSourceType==="image"&&e.iconImageSource!==void 0){let _=e.iconImageSource;if(typeof _=="string"&&_.startsWith("/")){const T=Noodl.Env.BaseUrl;T&&(_=T+_.substring(1))}return React.createElement("img",{alt:"",src:_,style:{width:e.iconSize,height:e.iconSize}})}else if(e.iconSourceType==="icon"&&e.iconIconSource!==void 0){const _={fontSize:e.iconSize,color:e.iconColor};return e.iconPlacement==="left"||e.iconPlacement===void 0?_.marginRight=e.iconSpacing:_.marginLeft=e.iconSpacing,e.iconIconSource.codeAsClass===!0?React.createElement("span",{className:[e.iconIconSource.class,e.iconIconSource.code].join(" "),style:_}):React.createElement("span",{className:e.iconIconSource.class,style:_},e.iconIconSource.code)}return null}const u={...e.attrs,id:e.id,className:e.className,style:{inset:0,opacity:0,position:"absolute",textTransform:"inherit",cursor:e.enabled?"":"default","-webkit-appearance":"none"},onClick:e.onClick},d={display:"flex",alignItems:"center",...e.styles.inputWrapper,cursor:e.enabled?"":"default"},h=s&&s[String(s).length-1]==="%";e.useLabel?h?d.flexGrow=1:d.height=s:(Object.assign(d,a),d.height=s);let f=[];e.items&&(f=e.items.map(_=>React.createElement("option",{key:_.Value,value:_.Value,disabled:_.Disabled==="true"||_.Disabled===!0?!0:void 0},_.Label)));let g=null;r>=0&&r<e.items.items.length?g=React.createElement("span",null,e.items.items[r].Label):e.placeholder&&(g=React.createElement("span",{style:{opacity:e.placeholderOpacity}},e.placeholder));const b=React.createElement("div",{className:"ndl-controls-pointer",style:d,"noodl-style-tag":"inputWrapper"},e.useIcon&&e.iconPlacement==="left"?l():null,React.createElement("div",{style:{width:"100%",height:"100%",alignItems:"center",display:"flex"}},g),e.useIcon&&e.iconPlacement==="right"?l():null,React.createElement("select",{...u,disabled:!e.enabled,value:f.find(_=>_.props.value===t)?t:void 0,...Utils$1.controlEvents(e),onChange:_=>{n(_.target.value),e.valueChanged&&e.valueChanged(_.target.value)}},React.createElement("option",{value:"",disabled:!0,selected:!0,hidden:!0}),f));if(e.useLabel){const _={...a,display:"flex",flexDirection:"column"};return h&&(_.height=s),React.createElement("div",{style:_},React.createElement("label",{htmlFor:e.id,style:{...e.labeltextStyle,...e.styles.label,marginBottom:e.labelSpacing},"noodl-style-tag":"label"},e.label),b)}else return b}const OptionsNode$1={name:"net.noodl.controls.options",displayName:"Dropdown",docs:"https://docs.noodl.net/nodes/ui-controls/dropdown",allowChildren:!1,noodlNodeAsProp:!0,usePortAsLabel:"label",nodeDoubleClickAction:{focusPort:"label"},connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Text Style","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},initialize:function(){this.props.attrs={},this._itemsChanged=()=>{this.forceUpdate()},this.props.id="input-"+guid(),this.props.valueChanged=e=>{const t=this._internal.value!==e;this._internal.value=e,t&&(this.flagOutputDirty("value"),this.sendSignalOnOutput("onChange"))}},getReactComponent(){return Select},inputs:{items:{type:"array",displayName:"Items",group:"General",set:function(e){this._internal.items!==e&&this._internal.items!==void 0&&this._internal.items.off("change",this._itemsChanged),this._internal.items=e,this._internal.items.on("change",this._itemsChanged),this.props.items=this._internal.items,this.forceUpdate()}},value:{type:"string",displayName:"Value",group:"General",set:function(e){if(e!==void 0&&typeof e!="string")if(e?.toString!==void 0)e=e.toString();else return;const t=e!==this._internal.value;this.props.value=this._internal.value=e,t&&(this.forceUpdate(),this.flagOutputDirty("value"))}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputProps:{placeholder:{displayName:"Placeholder",type:"string",group:"Placeholder"},placeholderOpacity:{group:"Placeholder",displayName:"Placeholder opacity",type:"number",default:.5}},outputs:{value:{type:"string",displayName:"Value",group:"States",getter:function(){return this._internal.value}},onChange:{type:"signal",displayName:"Changed",group:"Events"}},inputCss:{backgroundColor:{index:100,displayName:"Background Color",group:"Style",type:"color",default:"transparent",styleTag:"inputWrapper",allowVisualStates:!0}}};NodeSharedPortDefinitions.addDimensions(OptionsNode$1,{defaultSizeMode:"contentSize",contentLabel:"Content"}),NodeSharedPortDefinitions.addAlignInputs(OptionsNode$1),NodeSharedPortDefinitions.addTextStyleInputs(OptionsNode$1),NodeSharedPortDefinitions.addTransformInputs(OptionsNode$1),NodeSharedPortDefinitions.addPaddingInputs(OptionsNode$1,{styleTag:"inputWrapper"}),NodeSharedPortDefinitions.addMarginInputs(OptionsNode$1),NodeSharedPortDefinitions.addIconInputs(OptionsNode$1,{enableIconPlacement:!0,defaults:{useIcon:!1,iconColor:"#000000"}}),NodeSharedPortDefinitions.addLabelInputs(OptionsNode$1,{enableSpacing:!0,styleTag:"label"}),NodeSharedPortDefinitions.addSharedVisualInputs(OptionsNode$1),NodeSharedPortDefinitions.addBorderInputs(OptionsNode$1,{defaults:{borderStyle:"solid",borderWidth:2,borderColor:"#000000",borderRadius:5},styleTag:"inputWrapper"}),NodeSharedPortDefinitions.addShadowInputs(OptionsNode$1,{styleTag:"inputWrapper"}),Utils$1.addControlEventsAndStates(OptionsNode$1);const Options$1=createNodeFromReactComponent(OptionsNode$1),RadioButtonContext=React__namespace.createContext({name:void 0,selected:void 0,checkedChanged:void 0});function isPercentage(e){return e&&e[e.length-1]==="%"}function RadioButton$2(e){const t=React.useContext(RadioButtonContext),n={...e.style};e.parentLayout==="none"&&(n.position="absolute"),Layout.align(n,e),e.checkedChanged&&e.checkedChanged(t?t.selected===e.value:!1);const o={...e.attrs,id:e.id,disabled:!e.enabled,className:[e.className,"ndl-controls-radio-2"].join(" "),style:{width:e.styles.radio.width,height:e.styles.radio.height}},r={display:"flex",alignItems:"center",justifyContent:"center",position:"relative",flexShrink:0,...e.styles.radio};e.useLabel?isPercentage(e.styles.radio.width)&&(delete r.width,r.flexGrow=1):(Object.assign(o,Utils$1.controlEvents(e)),Object.assign(r,n));function s(){if(e.iconSourceType==="image"&&e.iconImageSource!==void 0){let u=e.iconImageSource;if(typeof u=="string"&&u.startsWith("/")){const d=Noodl.Env.BaseUrl;d&&(u=d+u.substring(1))}return React.createElement("img",{alt:"",src:u,style:{width:e.iconSize,height:e.iconSize}})}else if(e.iconSourceType==="icon"&&e.iconIconSource!==void 0){const u={fontSize:e.iconSize,color:e.iconColor};return e.iconIconSource.codeAsClass===!0?React.createElement("span",{className:["ndl-controls-abs-center",e.iconIconSource.class,e.iconIconSource.code].join(" "),style:u}):React.createElement("span",{className:["ndl-controls-abs-center",e.iconIconSource.class].join(" "),style:u},e.iconIconSource.code)}return null}const a={left:e.fillSpacing,right:e.fillSpacing,top:e.fillSpacing,bottom:e.fillSpacing,backgroundColor:e.styles.fill.backgroundColor,borderRadius:"inherit",position:"absolute"},l=React.createElement("div",{className:"ndl-controls-pointer",style:r,"noodl-style-tag":"radio"},React.createElement("div",{style:a,"noodl-style-tag":"fill"}),e.useIcon?s():null,React.createElement("input",{type:"radio",name:t?t.name:void 0,...o,checked:t?t.selected===e.value:!1,onChange:u=>{t&&t.checkedChanged&&t.checkedChanged(e.value)}}));if(e.useLabel){const u={marginLeft:e.labelSpacing,...e.labeltextStyle,...e.styles.label,cursor:e.enabled?void 0:"default"};u.color=e.noodlNode.context.styles.resolveColor(u.color);const d={display:"flex",alignItems:"center",...n};return isPercentage(e.styles.radio.width)&&(d.width=e.styles.radio.width),isPercentage(e.styles.radio.height)&&(d.height=e.styles.radio.height),React.createElement("div",{style:d,...Utils$1.controlEvents(e)},l,React.createElement("label",{className:"ndl-controls-pointer",style:u,htmlFor:e.id,"noodl-style-tag":"label"},e.label))}else return l}const RadioButtonNode$1={name:"net.noodl.controls.radiobutton",displayName:"Radio Button",docs:"https://docs.noodl.net/nodes/ui-controls/radio-button",allowChildren:!1,noodlNodeAsProp:!0,usePortAsLabel:"label",nodeDoubleClickAction:{focusPort:"label"},connectionPanel:{groupPriority:["General","Style","Fill Style","Actions","Events","States","Mounted","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},initialize(){this.props.attrs={},this.props.sizeMode="explicit",this.props.id="input-"+guid(),this._internal.checked=!1,this.props.checkedChanged=e=>{const t=this._internal.checked!==e;this._internal.checked=e,t&&(this.flagOutputDirty("checked"),this._updateVisualState())},this.props.styles.fill={}},getReactComponent(){return RadioButton$2},inputs:{fillColor:{index:19,displayName:"Fill Color",group:"Fill Style",type:"color",allowVisualStates:!0,styleTag:"fill",set(e){this.setStyle({backgroundColor:e},"fill")}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputProps:{value:{type:"string",displayName:"Value",group:"General",index:100},fillSpacing:{displayName:"Fill Spacing",group:"Fill Style",type:{name:"number",units:["px","vw","vh"],defaultUnit:"px"},allowVisualStates:!0,default:2}},inputCss:{width:{index:11,group:"Dimensions",displayName:"Width",type:{name:"number",units:["px","%","vw","vh"],defaultUnit:"px"},default:32,allowVisualStates:!0,styleTag:"radio",onChange(){this.forceUpdate()}},height:{index:12,group:"Dimensions",displayName:"Height",type:{name:"number",units:["px","%"],defaultUnit:"px"},default:32,allowVisualStates:!0,styleTag:"radio",onChange(){this.forceUpdate()}},backgroundColor:{index:201,displayName:"Background Color",group:"Style",type:"color",allowVisualStates:!0,styleTag:"radio",default:"transparent",applyDefault:!1}},outputs:{checked:{type:"boolean",displayName:"Checked",group:"States",get(){return this._internal.checked}}}};NodeSharedPortDefinitions.addAlignInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addTransformInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addMarginInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addPaddingInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addIconInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addLabelInputs(RadioButtonNode$1,{enableSpacing:!0,styleTag:"label"}),NodeSharedPortDefinitions.addSharedVisualInputs(RadioButtonNode$1),NodeSharedPortDefinitions.addBorderInputs(RadioButtonNode$1,{defaults:{borderStyle:"solid",borderWidth:2,borderRadius:16},styleTag:"radio"}),NodeSharedPortDefinitions.addShadowInputs(RadioButtonNode$1,{styleTag:"radio"}),Utils$1.addControlEventsAndStates(RadioButtonNode$1,{checked:!0});const RadioButton$1=createNodeFromReactComponent(RadioButtonNode$1);function RadioButtonGroup$1(e){const[t,n]=React__namespace.useState(e.value),o={selected:t,name:e.name,checkedChanged:a=>{n(a),e.valueChanged&&e.valueChanged(a)}};React__namespace.useEffect(()=>{n(e.value)},[e.value]);const r={...e.style};Layout.size(r,e),Layout.align(r,e);let s="ndl-controls-radiobuttongroup";return e.className&&(s=s+" "+e.className),React__namespace.createElement(RadioButtonContext.Provider,{value:o},React__namespace.createElement("div",{className:s,style:r},e.children))}const flexDirectionValues=["row","row-reverse","column","column-reverse","inherit","initial","revert","unset"];let RadioButtonGroupNode={name:"Radio Button Group",displayName:"Radio Button Group",docs:"https://docs.noodl.net/nodes/ui-controls/radio-button-group",allowChildren:!0,noodlNodeAsProp:!0,useVariants:!1,connectionPanel:{groupPriority:["General","Style","Actions","Events","Mounted","States"]},initialize(){this.props.name="radio-"+guid(),this.props.valueChanged=e=>{const t=this._internal.value!==e;this._internal.value=e,this.props.value=e,t&&(this.forceUpdate(),this.flagOutputDirty("value"),this.sendSignalOnOutput("onChange"))}},getReactComponent(){return RadioButtonGroup$1},defaultCss:{display:"flex",position:"relative",flexDirection:"column"},inputs:{flexDirection:{index:11,displayName:"Layout",group:"Layout",type:{name:"enum",enums:[{label:"Vertical",value:"column"},{label:"Horizontal",value:"row"}]},default:"column",set(e){this.props.layout=e,e!=="none"?this.setStyle({flexDirection:e}):this.removeStyle(["flexDirection"]),this.context.editorConnection&&(e!=="none"&&!flexDirectionValues.includes(e)?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"layout-warning",{message:"Invalid Layout value has to be a valid flex-direction value."}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"layout-warning")),this.forceUpdate()}},value:{index:20,type:"string",displayName:"Value",group:"General",set:function(e){if(typeof e!="string"&&e.toString!==void 0&&(e=e.toString()),typeof e!="string")return;const t=e!==this._internal.value;this.props.value=this._internal.value=e,t&&(this.forceUpdate(),this.flagOutputDirty("value"))}}},outputs:{value:{type:"string",displayName:"Value",group:"States",getter:function(){return this._internal.value}},onChange:{type:"signal",displayName:"Changed",group:"Events"}},inputProps:{},outputProps:{}};NodeSharedPortDefinitions.addDimensions(RadioButtonGroupNode,{defaultSizeMode:"contentSize",contentLabel:"Content"}),NodeSharedPortDefinitions.addAlignInputs(RadioButtonGroupNode),NodeSharedPortDefinitions.addTransformInputs(RadioButtonGroupNode),NodeSharedPortDefinitions.addMarginInputs(RadioButtonGroupNode),NodeSharedPortDefinitions.addPaddingInputs(RadioButtonGroupNode),NodeSharedPortDefinitions.addSharedVisualInputs(RadioButtonGroupNode),RadioButtonGroupNode=createNodeFromReactComponent(RadioButtonGroupNode);const RadioButtonGroup=RadioButtonGroupNode;function _styleTemplate$4(e,t){return`.${e}::-webkit-slider-thumb {
29
29
  width: ${t.thumbWidth};
30
- }`}function setBorderStyle(e,t,n){function o(r,s){const a=`${t}Border${s}Width`,l=`${t}Border${s}Color`,u=`${t}Border${s}Style`,d=n[a]||n[`${t}BorderWidth`];d!==void 0&&(r[`border${s}Width`]=d);const p=r[l]=n[l]||n[`${t}BorderColor`];p!==void 0&&(r[`border${s}Color`]=p);const f=n[u]||n[`${t}BorderStyle`];f!==void 0&&(r[`border${s}Style`]=f)}o(e,"Top"),o(e,"Right"),o(e,"Bottom"),o(e,"Left")}function setBorderRadius(e,t,n){const o=n[`${t}BorderRadius`],r=n[`${t}BorderTopLeftRadius`]||o,s=n[`${t}BorderTopRightRadius`]||o,a=n[`${t}BorderBottomRightRadius`]||o,l=n[`${t}BorderBottomLeftRadius`]||o;e.borderRadius=`${r} ${s} ${a} ${l}`}function setShadow(e,t,n){if(!n[`${t}BoxShadowEnabled`])return;const o=n[`${t}BoxShadowInset`],r=n[`${t}BoxShadowOffsetX`],s=n[`${t}BoxShadowOffsetY`],a=n[`${t}BoxShadowBlurRadius`],l=n[`${t}BoxShadowSpreadRadius`],u=n[`${t}BoxShadowColor`];e.boxShadow=`${o?"inset ":""}${r} ${s} ${a} ${l} ${u}`}function hasUnitPx(e){return e&&e[e.length-1]==="x"}function Slider(e){const[t,n]=React.useState(e.value);React.useEffect(()=>{o(e.value)},[e.value]);function o(g){n(g),e.updateOutputValue(g)}const r={...e.style};Layout.size(r,e),Layout.align(r,e);const s="ndl-controls-range-"+e._nodeId;Utils$1.updateStylesForClass(s,e,_styleTemplate$4);const a=`ndl-controls-range2 ${s} ${e.className?e.className:""} `,l={...e.attrs,id:e.id,style:{width:"100%",opacity:0},onClick:e.onClick,min:e.min,max:e.max};if(e.step&&(l.step=e.step),hasUnitPx(e.thumbHeight))if(hasUnitPx(e.trackHeight)){const g=Number(e.thumbHeight.slice(0,-2)),b=Number(e.trackHeight.slice(0,-2));l.style.height=Math.max(g,b)+"px"}else l.style.height=e.thumbHeight;else l.style.height=e.trackHeight;const u={display:"flex",alignItems:"center",...r},d=(t-e.min)/(e.max-e.min),p={position:"absolute",width:"100%",height:e.trackHeight,background:`linear-gradient(to right, ${e.trackActiveColor} 0%, ${e.trackActiveColor} ${d*100}%, ${e.trackColor} ${d*100}%, ${e.trackColor} 100%)`};setBorderStyle(p,"track",e),setBorderRadius(p,"track",e),setShadow(p,"track",e);const f={position:"absolute",left:"calc((100% - "+e.thumbWidth+") * "+d+")",width:e.thumbWidth,height:e.thumbHeight,backgroundColor:e.thumbColor};return setBorderStyle(f,"thumb",e),setBorderRadius(f,"thumb",e),setShadow(f,"thumb",e),React.createElement("div",{style:u},React.createElement("div",{style:p}),React.createElement("div",{style:f}),React.createElement("input",{className:a,...Utils$1.controlEvents(e),type:"range",...l,value:t,disabled:!e.enabled,onChange:g=>o(Number(g.target.value))}))}const thumbPopout={group:"thumb-styles",label:"Thumb Styles"},trackPopout={group:"track-styles",label:"Track Styles"},RangeNode$1={name:"net.noodl.controls.range",displayNodeName:"Slider",docs:"https://docs.noodl.net/nodes/ui-controls/slider",allowChildren:!1,noodlNodeAsProp:!0,connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Hover Events","Pointer Events","Focus Events"]},initialize(){this.props.attrs={},this.props.sizeMode="contentHeight",this.props.id="input-"+guid(),this.props.value=this.props.min,this._internal.outputValue=0,this.props._nodeId=this.id,this.props.updateOutputValue=e=>{e=typeof e=="string"?parseFloat(e):e,this._internal.outputValue!==e&&(this._internal.outputValue=e,this.flagOutputDirty("value"),this._updateOutputValuePercent(e),this.sendSignalOnOutput("onChange")),this._internal.valuePercent||this._updateOutputValuePercent(e)},this.props.updateOutputValue(this.props.value)},getReactComponent(){return Slider},inputs:{value:{type:"string",displayName:"Value",group:"General",index:100,set(e){this._setInputValue(e)}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},outputs:{value:{type:"number",displayName:"Value",group:"States",get(){return this._internal.outputValue}},valuePercent:{type:"number",displayName:"Value Percent",group:"States",get(){return this._internal.valuePercent}},onChange:{type:"signal",displayName:"Changed",group:"Events"}},inputProps:{min:{type:"number",displayName:"Min",group:"General",default:0,index:100,onChange(){this._setInputValue(this.props.value)}},max:{type:"number",displayName:"Max",group:"General",default:100,index:100,onChange(){this._setInputValue(this.props.value)}},step:{type:"number",displayName:"Step",group:"General",default:1,index:100},width:{index:11,group:"Dimensions",displayName:"Width",type:{name:"number",units:["%","px","vw"],defaultUnit:"%"},default:100,allowVisualStates:!0},thumbWidth:{group:"Thumb Style",displayName:"Width",type:{name:"number",units:["px","vw","%"],defaultUnit:"px",allowEditOnly:!0},default:16,popout:thumbPopout,allowVisualStates:!0},thumbHeight:{group:"Thumb Style",displayName:"Height",type:{name:"number",units:["px","vh","%"],defaultUnit:"px",allowEditOnly:!0},default:16,popout:thumbPopout,allowVisualStates:!0},thumbColor:{group:"Thumb Style",displayName:"Color",type:{name:"color",allowEditOnly:!0},default:"#000000",popout:thumbPopout,allowVisualStates:!0},trackHeight:{group:"Track Style",displayName:"Height",type:{name:"number",units:["px","vh","%"],defaultUnit:"px",allowEditOnly:!0},default:6,popout:trackPopout,allowVisualStates:!0},trackColor:{group:"Track Style",displayName:"Inactive Color",type:{name:"color",allowEditOnly:!0},default:"#f0f0f0",popout:trackPopout,allowVisualStates:!0},trackActiveColor:{group:"Track Style",displayName:"Active Color",type:{name:"color",allowEditOnly:!0},default:"#f0f0f0",popout:trackPopout,allowVisualStates:!0}},methods:{_updateOutputValuePercent(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")},_setInputValue(e){const t=Math.max(this.props.min,Math.min(this.props.max,e||0));t!==this.props.value&&(this.props.value=t,this.forceUpdate())}}};function addBorderInputs(e,t){t=t||{};const n=t.defaults||{},o=t.popout;n.borderStyle="none",n.borderWidth=0,n.borderColor="#000000";const r=t.propPrefix[0].toUpperCase()+t.propPrefix.slice(1);function s(a,l,u,d){const p=t.propPrefix+`Border${l}Style`,f=t.propPrefix+`Border${l}Width`,g=t.propPrefix+`Border${l}Color`;let b=n.borderStyle!=="none"?"OR borderStyle NOT SET":"";l?(n[p]&&n[p]!=="none"&&(b+=`OR ${p} NOT SET`),NodeSharedPortDefinitions.addDynamicInputPorts(a,`${p} = solid OR ${p} = dashed OR ${p} = dotted OR borderStyle = solid OR borderStyle = dashed OR borderStyle = dotted ${b}`,[`${f}`,`${g}`])):NodeSharedPortDefinitions.addDynamicInputPorts(a,`${p} = solid OR ${p} = dashed OR ${p} = dotted ${b}`,[`${f}`,`${g}`]);const _={group:t.propPrefix+"-border-styles",tab:u,label:l},T=I=>`${r} ${I} ${l?"("+l+")":""}`,A=202+d*4,v=r+" Border Style";NodeSharedPortDefinitions.addInputProps(a,{[p]:{index:A+1,displayName:"Border Style",editorName:T("Border Style"),group:v,type:{name:"enum",enums:[{label:"None",value:"none"},{label:"Solid",value:"solid"},{label:"Dotted",value:"dotted"},{label:"Dashed",value:"dashed"}]},default:n[`border${l}Style`],tab:_,popout:o,allowVisualStates:!0},[f]:{index:A+2,displayName:"Border Width",editorName:T("Border Width"),group:v,type:{name:"number",units:["px"],defaultUnit:"px"},default:n[`border${l}Width`],tab:_,popout:o,allowVisualStates:!0},[g]:{index:A+3,displayName:"Border Color",editorName:T("Border Color"),group:v,type:"color",default:n[`border${l}Color`],tab:_,popout:o,allowVisualStates:!0}})}s(e,"","borders-all",0),s(e,"Left","borders-left",1),s(e,"Top","borders-top",2),s(e,"Right","borders-right",3),s(e,"Bottom","borders-bottom",4)}function addBorderRadius(e,t){t=t||{};const n=t.defaults||{},o=t.popout;n.borderRadius||(n.borderRadius=0);const r=t.propPrefix[0].toUpperCase()+t.propPrefix.slice(1);function s(a,l,u,d){const p=b=>`${r} ${b} ${l?"("+l+")":""}`,f={group:t.propPrefix+"-corners",tab:u,label:l},g=`Border${l}Radius`;NodeSharedPortDefinitions.addInputProps(a,{[t.propPrefix+g]:{index:240+d,displayName:"Corner Radius",editorName:p("Corner Radius"),group:r+" Corner Radius",type:{name:"number",units:["px","%"],defaultUnit:"px"},default:n[`border${l}Radius`],tab:f,popout:o}})}s(e,"","corners-all",0),s(e,"TopLeft","corners-top-left",1),s(e,"TopRight","corners-top-right",2),s(e,"BottomRight","corners-bottom-right",3),s(e,"BottomLeft","corners-bottom-left",4)}function addShadowInputs(e,t){t=t||{};const n=t.popout,o=t.propPrefix;NodeSharedPortDefinitions.addDynamicInputPorts(e,`${o}BoxShadowEnabled = true`,[`${o}BoxShadowOffsetX`,`${o}BoxShadowOffsetY`,`${o}BoxShadowInset`,`${o}BoxShadowBlurRadius`,`${o}BoxShadowSpreadRadius`,`${o}BoxShadowColor`]);const r=t.propPrefix[0].toUpperCase()+t.propPrefix.slice(1),s=a=>`${r} ${a}`;NodeSharedPortDefinitions.addInputProps(e,{[`${o}BoxShadowEnabled`]:{index:250,group:t.group||"Box Shadow",displayName:"Shadow Enabled",editorName:s("Shadow Enabled"),type:"boolean",allowVisualStates:!0,popout:n},[`${o}BoxShadowOffsetX`]:{index:251,group:t.group||"Box Shadow",displayName:"Offset X",editorName:s("Offset X"),default:0,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,popout:n},[`${o}BoxShadowOffsetY`]:{index:252,group:t.group||"Box Shadow",displayName:"Offset Y",editorName:s("Offset Y"),default:0,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,popout:n},[`${o}BoxShadowBlurRadius`]:{index:253,group:t.group||"Box Shadow",displayName:"Blur Radius",editorName:s("Blur Radius"),default:5,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,popout:n},[`${o}BoxShadowSpreadRadius`]:{index:254,group:t.group||"Box Shadow",displayName:"Spread Radius",editorName:s("Spread Radius"),default:2,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,popout:n},[`${o}BoxShadowInset`]:{index:255,group:t.group||"Box Shadow",displayName:"Inset",editorName:s("Inset"),type:"boolean",default:!1,allowVisualStates:!0,popout:n},[`${o}BoxShadowColor`]:{index:256,group:t.group||"Box Shadow",displayName:"Shadow Color",editorName:s("Shadow Color"),type:"color",default:"#00000033",allowVisualStates:!0,popout:n}})}NodeSharedPortDefinitions.addAlignInputs(RangeNode$1),NodeSharedPortDefinitions.addTransformInputs(RangeNode$1),NodeSharedPortDefinitions.addMarginInputs(RangeNode$1),NodeSharedPortDefinitions.addPaddingInputs(RangeNode$1),NodeSharedPortDefinitions.addSharedVisualInputs(RangeNode$1),addBorderInputs(RangeNode$1,{propPrefix:"track",popout:trackPopout}),addBorderRadius(RangeNode$1,{propPrefix:"track",popout:trackPopout}),addShadowInputs(RangeNode$1,{propPrefix:"track",popout:trackPopout,group:"Track Box Shadow"}),addBorderInputs(RangeNode$1,{propPrefix:"thumb",popout:thumbPopout}),addBorderRadius(RangeNode$1,{propPrefix:"thumb",popout:thumbPopout}),addShadowInputs(RangeNode$1,{propPrefix:"thumb",popout:thumbPopout,group:"Thumb Box Shadow"}),Utils$1.addControlEventsAndStates(RangeNode$1);const Range$1=createNodeFromReactComponent(RangeNode$1);function preventGlobalFocusChange$1(e){e.stopPropagation(),window.removeEventListener("click",preventGlobalFocusChange$1,!0)}let TextInput$2=class 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.style};Layout.size(t,this.props),Layout.align(t,this.props),t.opacity===0&&(t.pointerEvents="none");const{height:n,...o}=t,r=o,s=this.props,a=()=>{if(s.iconSourceType==="image"&&s.iconImageSource!==void 0){let _=s.iconImageSource;if(typeof _=="string"&&_.startsWith("/")){const T=Noodl.Env.BaseUrl;T&&(_=T+_.substring(1))}return React.createElement("img",{alt:"",src:_,style:{width:s.iconSize,height:s.iconSize},onClick:()=>this.focus()})}else if(s.iconSourceType==="icon"&&s.iconIconSource!==void 0){const _={userSelect:"none",fontSize:s.iconSize,color:s.iconColor};return s.iconPlacement==="left"||s.iconPlacement===void 0?_.marginRight=s.iconSpacing:_.marginLeft=s.iconSpacing,s.iconIconSource.codeAsClass===!0?React.createElement("span",{className:[s.iconIconSource.class,s.iconIconSource.code].join(" "),style:_}):React.createElement("span",{className:s.iconIconSource.class,style:_},s.iconIconSource.code)}return null};let l="ndl-controls-textinput "+s.id;s.className&&(l=l+" "+s.className);let u;const d={...s.textStyle,...s.styles.input,width:"100%",height:"100%"};d.color=s.noodlNode.context.styles.resolveColor(d.color);const p={...s.attrs,id:s.id,value:this.state.value,...Utils$1.controlEvents(s),disabled:!s.enabled,style:d,className:l,placeholder:s.placeholder,maxLength:s.maxLength,onChange:_=>this.onChange(_)};s.type!=="textArea"?u=React.createElement("input",{ref:_=>{this.ref.current=_},type:this.props.type,...p,onKeyDown:_=>this.onKeyDown(_),onMouseDown:()=>window.addEventListener("click",preventGlobalFocusChange$1,!0),"noodl-style-tag":"input"}):(p.style.resize="none",u=React.createElement("textarea",{ref:_=>{this.ref.current=_},...p,onKeyDown:_=>this.onKeyDown(_),"noodl-style-tag":"input"}));const f={display:"flex",alignItems:"center",...s.styles.inputWrapper},g=n&&n[String(n).length-1]==="%";s.useLabel?g?f.flexGrow=1:f.height=n:(Object.assign(f,r),f.height=n),s.type!=="textArea"&&(f.alignItems="center");const b=React.createElement("div",{style:f,"noodl-style-tag":"inputWrapper"},s.useIcon&&s.iconPlacement==="left"?a():null,u,s.useIcon&&s.iconPlacement==="right"?a():null);if(s.useLabel){r.display="flex",r.flexDirection="column",g&&(r.height=n);const _={...s.labeltextStyle,...s.styles.label,marginBottom:s.labelSpacing};return _.color=s.noodlNode.context.styles.resolveColor(_.color),React.createElement("div",{style:r},React.createElement("label",{htmlFor:s.id,style:_,"noodl-style-tag":"label"},s.label),b)}else return b}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()}hasFocus(){return document.activeElement===this.ref.current}};function _styleTemplate$3(e,t){return`
30
+ }`}function setBorderStyle(e,t,n){function o(r,s){const a=`${t}Border${s}Width`,l=`${t}Border${s}Color`,u=`${t}Border${s}Style`,d=n[a]||n[`${t}BorderWidth`];d!==void 0&&(r[`border${s}Width`]=d);const h=r[l]=n[l]||n[`${t}BorderColor`];h!==void 0&&(r[`border${s}Color`]=h);const f=n[u]||n[`${t}BorderStyle`];f!==void 0&&(r[`border${s}Style`]=f)}o(e,"Top"),o(e,"Right"),o(e,"Bottom"),o(e,"Left")}function setBorderRadius(e,t,n){const o=n[`${t}BorderRadius`],r=n[`${t}BorderTopLeftRadius`]||o,s=n[`${t}BorderTopRightRadius`]||o,a=n[`${t}BorderBottomRightRadius`]||o,l=n[`${t}BorderBottomLeftRadius`]||o;e.borderRadius=`${r} ${s} ${a} ${l}`}function setShadow(e,t,n){if(!n[`${t}BoxShadowEnabled`])return;const o=n[`${t}BoxShadowInset`],r=n[`${t}BoxShadowOffsetX`],s=n[`${t}BoxShadowOffsetY`],a=n[`${t}BoxShadowBlurRadius`],l=n[`${t}BoxShadowSpreadRadius`],u=n[`${t}BoxShadowColor`];e.boxShadow=`${o?"inset ":""}${r} ${s} ${a} ${l} ${u}`}function hasUnitPx(e){return e&&e[e.length-1]==="x"}function Slider(e){const[t,n]=React.useState(e.value);React.useEffect(()=>{o(e.value)},[e.value]);function o(g){n(g),e.updateOutputValue(g)}const r={...e.style};Layout.size(r,e),Layout.align(r,e);const s="ndl-controls-range-"+e._nodeId;Utils$1.updateStylesForClass(s,e,_styleTemplate$4);const a=`ndl-controls-range2 ${s} ${e.className?e.className:""} `,l={...e.attrs,id:e.id,style:{width:"100%",opacity:0},onClick:e.onClick,min:e.min,max:e.max};if(e.step&&(l.step=e.step),hasUnitPx(e.thumbHeight))if(hasUnitPx(e.trackHeight)){const g=Number(e.thumbHeight.slice(0,-2)),b=Number(e.trackHeight.slice(0,-2));l.style.height=Math.max(g,b)+"px"}else l.style.height=e.thumbHeight;else l.style.height=e.trackHeight;const u={display:"flex",alignItems:"center",...r},d=(t-e.min)/(e.max-e.min),h={position:"absolute",width:"100%",height:e.trackHeight,background:`linear-gradient(to right, ${e.trackActiveColor} 0%, ${e.trackActiveColor} ${d*100}%, ${e.trackColor} ${d*100}%, ${e.trackColor} 100%)`};setBorderStyle(h,"track",e),setBorderRadius(h,"track",e),setShadow(h,"track",e);const f={position:"absolute",left:"calc((100% - "+e.thumbWidth+") * "+d+")",width:e.thumbWidth,height:e.thumbHeight,backgroundColor:e.thumbColor};return setBorderStyle(f,"thumb",e),setBorderRadius(f,"thumb",e),setShadow(f,"thumb",e),React.createElement("div",{style:u},React.createElement("div",{style:h}),React.createElement("div",{style:f}),React.createElement("input",{className:a,...Utils$1.controlEvents(e),type:"range",...l,value:t,disabled:!e.enabled,onChange:g=>o(Number(g.target.value))}))}const thumbPopout={group:"thumb-styles",label:"Thumb Styles"},trackPopout={group:"track-styles",label:"Track Styles"},RangeNode$1={name:"net.noodl.controls.range",displayNodeName:"Slider",docs:"https://docs.noodl.net/nodes/ui-controls/slider",allowChildren:!1,noodlNodeAsProp:!0,connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Hover Events","Pointer Events","Focus Events"]},initialize(){this.props.attrs={},this.props.sizeMode="contentHeight",this.props.id="input-"+guid(),this.props.value=this.props.min,this._internal.outputValue=0,this.props._nodeId=this.id,this.props.updateOutputValue=e=>{e=typeof e=="string"?parseFloat(e):e,this._internal.outputValue!==e&&(this._internal.outputValue=e,this.flagOutputDirty("value"),this._updateOutputValuePercent(e),this.sendSignalOnOutput("onChange")),this._internal.valuePercent||this._updateOutputValuePercent(e)},this.props.updateOutputValue(this.props.value)},getReactComponent(){return Slider},inputs:{value:{type:"string",displayName:"Value",group:"General",index:100,set(e){this._setInputValue(e)}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},outputs:{value:{type:"number",displayName:"Value",group:"States",get(){return this._internal.outputValue}},valuePercent:{type:"number",displayName:"Value Percent",group:"States",get(){return this._internal.valuePercent}},onChange:{type:"signal",displayName:"Changed",group:"Events"}},inputProps:{min:{type:"number",displayName:"Min",group:"General",default:0,index:100,onChange(){this._setInputValue(this.props.value)}},max:{type:"number",displayName:"Max",group:"General",default:100,index:100,onChange(){this._setInputValue(this.props.value)}},step:{type:"number",displayName:"Step",group:"General",default:1,index:100},width:{index:11,group:"Dimensions",displayName:"Width",type:{name:"number",units:["%","px","vw"],defaultUnit:"%"},default:100,allowVisualStates:!0},thumbWidth:{group:"Thumb Style",displayName:"Width",type:{name:"number",units:["px","vw","%"],defaultUnit:"px",allowEditOnly:!0},default:16,popout:thumbPopout,allowVisualStates:!0},thumbHeight:{group:"Thumb Style",displayName:"Height",type:{name:"number",units:["px","vh","%"],defaultUnit:"px",allowEditOnly:!0},default:16,popout:thumbPopout,allowVisualStates:!0},thumbColor:{group:"Thumb Style",displayName:"Color",type:{name:"color",allowEditOnly:!0},default:"#000000",popout:thumbPopout,allowVisualStates:!0},trackHeight:{group:"Track Style",displayName:"Height",type:{name:"number",units:["px","vh","%"],defaultUnit:"px",allowEditOnly:!0},default:6,popout:trackPopout,allowVisualStates:!0},trackColor:{group:"Track Style",displayName:"Inactive Color",type:{name:"color",allowEditOnly:!0},default:"#f0f0f0",popout:trackPopout,allowVisualStates:!0},trackActiveColor:{group:"Track Style",displayName:"Active Color",type:{name:"color",allowEditOnly:!0},default:"#f0f0f0",popout:trackPopout,allowVisualStates:!0}},methods:{_updateOutputValuePercent(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")},_setInputValue(e){const t=Math.max(this.props.min,Math.min(this.props.max,e||0));t!==this.props.value&&(this.props.value=t,this.forceUpdate())}}};function addBorderInputs(e,t){t=t||{};const n=t.defaults||{},o=t.popout;n.borderStyle="none",n.borderWidth=0,n.borderColor="#000000";const r=t.propPrefix[0].toUpperCase()+t.propPrefix.slice(1);function s(a,l,u,d){const h=t.propPrefix+`Border${l}Style`,f=t.propPrefix+`Border${l}Width`,g=t.propPrefix+`Border${l}Color`;let b=n.borderStyle!=="none"?"OR borderStyle NOT SET":"";l?(n[h]&&n[h]!=="none"&&(b+=`OR ${h} NOT SET`),NodeSharedPortDefinitions.addDynamicInputPorts(a,`${h} = solid OR ${h} = dashed OR ${h} = dotted OR borderStyle = solid OR borderStyle = dashed OR borderStyle = dotted ${b}`,[`${f}`,`${g}`])):NodeSharedPortDefinitions.addDynamicInputPorts(a,`${h} = solid OR ${h} = dashed OR ${h} = dotted ${b}`,[`${f}`,`${g}`]);const _={group:t.propPrefix+"-border-styles",tab:u,label:l},T=I=>`${r} ${I} ${l?"("+l+")":""}`,A=202+d*4,v=r+" Border Style";NodeSharedPortDefinitions.addInputProps(a,{[h]:{index:A+1,displayName:"Border Style",editorName:T("Border Style"),group:v,type:{name:"enum",enums:[{label:"None",value:"none"},{label:"Solid",value:"solid"},{label:"Dotted",value:"dotted"},{label:"Dashed",value:"dashed"}]},default:n[`border${l}Style`],tab:_,popout:o,allowVisualStates:!0},[f]:{index:A+2,displayName:"Border Width",editorName:T("Border Width"),group:v,type:{name:"number",units:["px"],defaultUnit:"px"},default:n[`border${l}Width`],tab:_,popout:o,allowVisualStates:!0},[g]:{index:A+3,displayName:"Border Color",editorName:T("Border Color"),group:v,type:"color",default:n[`border${l}Color`],tab:_,popout:o,allowVisualStates:!0}})}s(e,"","borders-all",0),s(e,"Left","borders-left",1),s(e,"Top","borders-top",2),s(e,"Right","borders-right",3),s(e,"Bottom","borders-bottom",4)}function addBorderRadius(e,t){t=t||{};const n=t.defaults||{},o=t.popout;n.borderRadius||(n.borderRadius=0);const r=t.propPrefix[0].toUpperCase()+t.propPrefix.slice(1);function s(a,l,u,d){const h=b=>`${r} ${b} ${l?"("+l+")":""}`,f={group:t.propPrefix+"-corners",tab:u,label:l},g=`Border${l}Radius`;NodeSharedPortDefinitions.addInputProps(a,{[t.propPrefix+g]:{index:240+d,displayName:"Corner Radius",editorName:h("Corner Radius"),group:r+" Corner Radius",type:{name:"number",units:["px","%"],defaultUnit:"px"},default:n[`border${l}Radius`],tab:f,popout:o}})}s(e,"","corners-all",0),s(e,"TopLeft","corners-top-left",1),s(e,"TopRight","corners-top-right",2),s(e,"BottomRight","corners-bottom-right",3),s(e,"BottomLeft","corners-bottom-left",4)}function addShadowInputs(e,t){t=t||{};const n=t.popout,o=t.propPrefix;NodeSharedPortDefinitions.addDynamicInputPorts(e,`${o}BoxShadowEnabled = true`,[`${o}BoxShadowOffsetX`,`${o}BoxShadowOffsetY`,`${o}BoxShadowInset`,`${o}BoxShadowBlurRadius`,`${o}BoxShadowSpreadRadius`,`${o}BoxShadowColor`]);const r=t.propPrefix[0].toUpperCase()+t.propPrefix.slice(1),s=a=>`${r} ${a}`;NodeSharedPortDefinitions.addInputProps(e,{[`${o}BoxShadowEnabled`]:{index:250,group:t.group||"Box Shadow",displayName:"Shadow Enabled",editorName:s("Shadow Enabled"),type:"boolean",allowVisualStates:!0,popout:n},[`${o}BoxShadowOffsetX`]:{index:251,group:t.group||"Box Shadow",displayName:"Offset X",editorName:s("Offset X"),default:0,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,popout:n},[`${o}BoxShadowOffsetY`]:{index:252,group:t.group||"Box Shadow",displayName:"Offset Y",editorName:s("Offset Y"),default:0,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,popout:n},[`${o}BoxShadowBlurRadius`]:{index:253,group:t.group||"Box Shadow",displayName:"Blur Radius",editorName:s("Blur Radius"),default:5,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,popout:n},[`${o}BoxShadowSpreadRadius`]:{index:254,group:t.group||"Box Shadow",displayName:"Spread Radius",editorName:s("Spread Radius"),default:2,type:{name:"number",units:["px"],defaultUnit:"px"},allowVisualStates:!0,popout:n},[`${o}BoxShadowInset`]:{index:255,group:t.group||"Box Shadow",displayName:"Inset",editorName:s("Inset"),type:"boolean",default:!1,allowVisualStates:!0,popout:n},[`${o}BoxShadowColor`]:{index:256,group:t.group||"Box Shadow",displayName:"Shadow Color",editorName:s("Shadow Color"),type:"color",default:"#00000033",allowVisualStates:!0,popout:n}})}NodeSharedPortDefinitions.addAlignInputs(RangeNode$1),NodeSharedPortDefinitions.addTransformInputs(RangeNode$1),NodeSharedPortDefinitions.addMarginInputs(RangeNode$1),NodeSharedPortDefinitions.addPaddingInputs(RangeNode$1),NodeSharedPortDefinitions.addSharedVisualInputs(RangeNode$1),addBorderInputs(RangeNode$1,{propPrefix:"track",popout:trackPopout}),addBorderRadius(RangeNode$1,{propPrefix:"track",popout:trackPopout}),addShadowInputs(RangeNode$1,{propPrefix:"track",popout:trackPopout,group:"Track Box Shadow"}),addBorderInputs(RangeNode$1,{propPrefix:"thumb",popout:thumbPopout}),addBorderRadius(RangeNode$1,{propPrefix:"thumb",popout:thumbPopout}),addShadowInputs(RangeNode$1,{propPrefix:"thumb",popout:thumbPopout,group:"Thumb Box Shadow"}),Utils$1.addControlEventsAndStates(RangeNode$1);const Range$1=createNodeFromReactComponent(RangeNode$1);function preventGlobalFocusChange$1(e){e.stopPropagation(),window.removeEventListener("click",preventGlobalFocusChange$1,!0)}let TextInput$2=class 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.style};Layout.size(t,this.props),Layout.align(t,this.props),t.opacity===0&&(t.pointerEvents="none");const{height:n,...o}=t,r=o,s=this.props,a=()=>{if(s.iconSourceType==="image"&&s.iconImageSource!==void 0){let _=s.iconImageSource;if(typeof _=="string"&&_.startsWith("/")){const T=Noodl.Env.BaseUrl;T&&(_=T+_.substring(1))}return React.createElement("img",{alt:"",src:_,style:{width:s.iconSize,height:s.iconSize},onClick:()=>this.focus()})}else if(s.iconSourceType==="icon"&&s.iconIconSource!==void 0){const _={userSelect:"none",fontSize:s.iconSize,color:s.iconColor};return s.iconPlacement==="left"||s.iconPlacement===void 0?_.marginRight=s.iconSpacing:_.marginLeft=s.iconSpacing,s.iconIconSource.codeAsClass===!0?React.createElement("span",{className:[s.iconIconSource.class,s.iconIconSource.code].join(" "),style:_}):React.createElement("span",{className:s.iconIconSource.class,style:_},s.iconIconSource.code)}return null};let l="ndl-controls-textinput "+s.id;s.className&&(l=l+" "+s.className);let u;const d={...s.textStyle,...s.styles.input,width:"100%",height:"100%"};d.color=s.noodlNode.context.styles.resolveColor(d.color);const h={...s.attrs,id:s.id,value:this.state.value,...Utils$1.controlEvents(s),disabled:!s.enabled,style:d,className:l,placeholder:s.placeholder,maxLength:s.maxLength,onChange:_=>this.onChange(_)};s.type!=="textArea"?u=React.createElement("input",{ref:_=>{this.ref.current=_},type:this.props.type,...h,onKeyDown:_=>this.onKeyDown(_),onMouseDown:()=>window.addEventListener("click",preventGlobalFocusChange$1,!0),"noodl-style-tag":"input"}):(h.style.resize="none",u=React.createElement("textarea",{ref:_=>{this.ref.current=_},...h,onKeyDown:_=>this.onKeyDown(_),"noodl-style-tag":"input"}));const f={display:"flex",alignItems:"center",...s.styles.inputWrapper},g=n&&n[String(n).length-1]==="%";s.useLabel?g?f.flexGrow=1:f.height=n:(Object.assign(f,r),f.height=n),s.type!=="textArea"&&(f.alignItems="center");const b=React.createElement("div",{style:f,"noodl-style-tag":"inputWrapper"},s.useIcon&&s.iconPlacement==="left"?a():null,u,s.useIcon&&s.iconPlacement==="right"?a():null);if(s.useLabel){r.display="flex",r.flexDirection="column",g&&(r.height=n);const _={...s.labeltextStyle,...s.styles.label,marginBottom:s.labelSpacing};return _.color=s.noodlNode.context.styles.resolveColor(_.color),React.createElement("div",{style:r},React.createElement("label",{htmlFor:s.id,style:_,"noodl-style-tag":"label"},s.label),b)}else return b}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()}hasFocus(){return document.activeElement===this.ref.current}};function _styleTemplate$3(e,t){return`
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,p){for(var f={},g=0;g<p.length;g++){if(d[g]===void 0)return;var b=p[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(p.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 p=0;p<u.length;p++){const f=u[p];if(f[0]==="{"&&f[f.length-1]==="}")l[p]!==void 0&&(d[f.substring(1,f.length-1)]=decodeURIComponent(l[p]));else if(l[p]===void 0||f!==l[p])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("/"),p=o(t,d),f=Math.abs(d.length-t.length);p&&a>f&&(s={match:p,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,p=o-this.props.strokeWidth/2,f=arc(o,o,p,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'
38
- component = '/MyComponent';`,ForEachDefinition={name:"For Each",displayNodeName:"Repeater",docs:"https://docs.noodl.net/nodes/ui-controls/repeater",color:"visual",category:"Visual",dynamicports:[{name:"conditionalports/extended",condition:"templateType = explicit OR templateType NOT SET",inputs:["template"]},{name:"conditionalports/extended",condition:"templateType = dynamic",inputs:["templateScript"]}],initialize(){this._internal.itemNodes=[],this._internal.itemOutputSignals={},this._internal.itemOutputs={},this._internal.collection=Collection.get(),this._internal.queuedOperations=[],this._internal.mountedOperations=[],this._internal.collection.on("add",async e=>{this._internal.target&&this._queueOperation(async()=>{const t=this._internal.target.getChildren().indexOf(this)+1;await this.addItem(e.item,t+e.index)})}),this._internal.collection.on("remove",e=>{this._queueOperation(()=>{this.removeItem(e.item)})}),this._internal.onItemsCollectionChanged=()=>{Runtime.instance.getProjectSettings().repeaterDisabledWhenUnmounted&&!this.isMounted?this._internal.mountedOperations.push(()=>{this._internal.collection.set(this._internal.items)}):this._queueOperation(()=>{this._internal.collection.set(this._internal.items)})},this.addDeleteListener(()=>{this._deleteAllItemNodes()})},inputs:{items:{group:"Data",displayName:"Items",type:"array",set:function(e){e&&e!==this._internal.items&&this.bindCollection(e)}},templateType:{group:"Appearance",displayName:"Template Type",type:{name:"enum",enums:[{label:"Explicit",value:"explicit"},{label:"Dynamic",value:"dynamic"}]},default:"explicit",set:function(e){this._internal.templateType=e,this.scheduleRefresh()}},template:{type:"component",displayName:"Template",group:"Appearance",set:function(e){this._internal.template=e,this.scheduleRefresh()}},templateScript:{type:{name:"string",codeeditor:"javascript",allowEditOnly:!0},displayName:"Script",group:"Appearance",default:defaultDynamicScript,set:function(e){try{this._internal.templateFunction=new Function("item","var component;"+e+";return component;")}catch(t){console.log(t),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"foreach-syntax-warning",{message:"<strong>Syntax</strong>: "+t.message})}this.scheduleRefresh()}},refresh:{group:"Appearance",displayName:"Refresh",type:"signal",valueChangedToTrue:function(){this.scheduleRefresh()}}},outputs:{itemActionItemId:{type:"string",group:"Actions",displayName:"Item Id",getter:function(){return this._internal.itemActionItemId}}},prototypeExtensions:{updateTarget:function(e){this._internal.target=e?this.nodeScope.getNodeWithId(e):void 0,this.scheduleRefresh()},setNodeModel:function(e){Node.prototype.setNodeModel.call(this,e),e.parent&&this.updateTarget(e.parent.id);var t=this;e.on("parentUpdated",function(n){t.updateTarget(n?n.id:void 0)},this)},scheduleRefresh:function(){var e=this._internal;e.hasScheduledRefresh||(e.hasScheduledRefresh=!0,this.scheduleAfterInputsHaveUpdated(()=>{this._queueOperation(()=>{this.refresh()})}))},unbindCurrentCollection:function(){var e=this._internal.items;e&&(Collection.instanceOf(e)&&e.off("change",this._internal.onItemsCollectionChanged),this._internal.items=void 0)},bindCollection:function(e){var t=this._internal;this.unbindCurrentCollection(),Collection.instanceOf(e)&&e.on("change",this._internal.onItemsCollectionChanged),t.items=e,this.scheduleCopyItems()},getTemplateForModel:function(e){var t=this._internal;if(t.templateType===void 0||t.templateType==="explicit")return t.template;if(t.templateFunction){try{var n=t.templateFunction(e)}catch(o){console.log(o),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"foreach-dynamic-warning",{message:"<strong>Dynamic template</strong>: "+o.message})}if(n&&(n.startsWith("./")&&(n=this.model.component.name+n.substring(1)),n.startsWith("../"))){const o=this.model.component.name.split("/");n=o.slice(0,o.length-1).join("/")+n.substring(2)}return n}},_mapInputs:function(e,t){this._internal.inputMapFunc!==void 0&&this._internal.inputMapFunc(function(n){for(var o in n)e.hasInput(o)&&(typeof n[o]=="function"?e.setInputValue(o,n[o](t)):typeof n[o]=="string"&&e.setInputValue(o,t.get(n[o])))},t)},addItem:async function(e,t){var n=this._internal,o=this.getTemplateForModel(e);if(o){var r=await this.nodeScope.createNode(o,guid(),{_forEachModel:e,_forEachNode:this});if(this._internal.inputMapFunc===void 0){r.hasInput("Id")&&r.setInputValue("Id",e.getId()),r.hasInput("id")&&r.setInputValue("id",e.getId());for(var s in r._inputs)e.data[s]!==void 0&&r.setInputValue(s,e.data[s]);r._forEachModelChangeListener=function(u){r._inputs[u.name]&&r.setInputValue(u.name,u.value)},e.on("change",r._forEachModelChangeListener),r.componentModel.on("inputPortAdded",u=>{u.name==="id"&&r.setInputValue("id",e.getId()),u.name==="Id"&&r.setInputValue("Id",e.getId()),e.data[u.name]!==void 0&&r.setInputValue(u.name,e.data[u.name])},this)}else this._mapInputs(r,e),r._forEachModelChangeListener=()=>this._mapInputs(r,e),e.on("change",r._forEachModelChangeListener);r._internal.creatorCallbacks={onOutputChanged:(u,d,p)=>{(p===!1||p===void 0)&&d===!0&&n.itemOutputSignals[u]&&this.itemOutputSignalTriggered(u,e,r)}};for(var a=r.nodeScope.getNodesWithType("For Each Actions"),l=0;l<a.length;l++)a[l].signalAdded();n.itemNodes.push(r),n.target.addChild(r,t)}},removeItem:function(e){var t=this._internal;if(!t.target)return;function n(){var a=t.target.getChildren();for(var l in a){var u=a[l];if(u._forEachModel===e&&!u._forEachRemoveInProgress)return u}}var o=n();if(o){var r=o.nodeScope.getNodesWithType("For Each Actions");r&&r.length>0?(o._forEachRemoveInProgress=!0,r[0].tryRemove(()=>this._deleteItem(o))):this._deleteItem(o);var s=t.itemNodes.indexOf(o);s!==-1&&t.itemNodes.splice(s,1)}},_deleteItem(e){e._forEachModel.off("change",e._forEachModelChangeListener),e.model&&e.model.removeListenersWithRef(this),e.componentModel&&e.componentModel.removeListenersWithRef(this);const t=e.parent;e._deleted||!t||(t.removeChild(e),this.nodeScope.deleteNode(e))},_deleteAllItemNodes:function(){if(this._internal.itemNodes){for(const e of this._internal.itemNodes)this._deleteItem(e);this._internal.itemNodes=[]}},refresh:async function(){var e=this._internal;if(e.hasScheduledRefresh=!1,!(e.template||e.templateFunction)||!e.items||(this._deleteAllItemNodes(),!e.target))return;const t=this._internal.target.getChildren().indexOf(this)+1;for(var n=0;n<e.collection.size();n++){var o=e.collection.get(n);await this.addItem(o,t+n)}},_queueOperation(e){this._internal.queuedOperations.push(e),this._runQueueOperations()},async _runQueueOperations(){if(this.runningOperations)return;if(this.runningOperations=!0,Runtime.instance.getProjectSettings().repeaterCreateComponentsAsync){const t=async()=>{const n=performance.now();for(;this._internal.queuedOperations.length&&performance.now()-n<25;)await this._internal.queuedOperations.shift()();this._internal.queuedOperations.length?setTimeout(t,0):this.runningOperations=!1};t()}else{for(;this._internal.queuedOperations.length;)await this._internal.queuedOperations.shift()();this.runningOperations=!1}},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.queuedOperations.length=0,this.unbindCurrentCollection()},render(){return React.createElement(ForEachComponent,{key:this.id,didMount:()=>this.didMount(),willUnmount:()=>this.willUnmount()})},didMount(){this.isMounted=!0;for(const e of this._internal.mountedOperations)this._queueOperation(e);this._internal.mountedOperations=[]},willUnmount(){this.isMounted=!1},getItemActionParameter:function(e){if(this._internal.itemActionParameters)return this._internal.itemActionParameters[e]},scheduleCopyItems:function(){this._internal.hasScheduledCopyItems||(this._internal.hasScheduledCopyItems=!0,this.scheduleAfterInputsHaveUpdated(()=>{if(this._internal.hasScheduledCopyItems=!1,this._internal.items===void 0)return;Runtime.instance.getProjectSettings().repeaterDisabledWhenUnmounted&&!this.isMounted?this._internal.mountedOperations.push(()=>{this._internal.collection.set(this._internal.items)}):this._internal.collection.set(this._internal.items)}))},itemOutputSignalTriggered:function(e,t,n){this._internal.itemActionItemId=t.getId(),this._internal.itemActionSignal=e,this.flagOutputDirty("itemActionItemId"),this._internal.hasScheduledTriggerItemOutputSignal||(this._internal.hasScheduledTriggerItemOutputSignal=!0,this.context.scheduleAfterUpdate(()=>{this._internal.hasScheduledTriggerItemOutputSignal=!1;for(var o in n._outputs){var r="itemOutput-"+o;this.hasOutput(r)&&(this._internal.itemOutputs[o]=n._outputs[o].value,this.flagOutputDirty(r))}this.sendSignalOnOutput("itemOutputSignal-"+this._internal.itemActionSignal)}))},getItemOutput:function(e){return this._internal.itemOutputs[e]},registerOutputIfNeeded:function(e){this.hasOutput(e)||(e.startsWith("itemOutputSignal-")?(this._internal.itemOutputSignals[e.substring(17)]=!0,this.registerOutput(e,{getter:function(){}})):e.startsWith("itemOutput-")&&this.registerOutput(e,{getter:this.getItemOutput.bind(this,e.substring(11))}))},setInputMappingScript:function(e){if(this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"foreach-inputmapping-warning"),this._internal.inputMappingScript=e,this._internal.inputMappingScript)try{this._internal.inputMapFunc=new Function("map","object",this._internal.inputMappingScript)}catch(t){this._internal.inputMapFunc=void 0,this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"foreach-inputmapping-warning",{message:"<strong>Input mapping</strong>: "+t.message})}else this._internal.inputMapFunc=void 0;this.scheduleRefresh()},registerInputIfNeeded:function(e){if(!this.hasInput(e)&&e==="inputMappingScript")return this.registerInput(e,{set:this.setInputMappingScript.bind(this)})}}};function _typeName(e){return typeof e=="object"?e.name:e}const defaultMapCode$1=`// Here you add mappings between the properties of the item objects and the inputs of the components.
38
+ component = '/MyComponent';`,ForEachDefinition={name:"For Each",displayNodeName:"Repeater",docs:"https://docs.noodl.net/nodes/ui-controls/repeater",color:"visual",category:"Visual",dynamicports:[{name:"conditionalports/extended",condition:"templateType = explicit OR templateType NOT SET",inputs:["template"]},{name:"conditionalports/extended",condition:"templateType = dynamic",inputs:["templateScript"]}],initialize(){this._internal.itemNodes=[],this._internal.itemOutputSignals={},this._internal.itemOutputs={},this._internal.collection=Collection.get(),this._internal.queuedOperations=[],this._internal.mountedOperations=[],this._internal.collection.on("add",async e=>{this._internal.target&&this._queueOperation(async()=>{const t=this._internal.target.getChildren().indexOf(this)+1;await this.addItem(e.item,t+e.index)})}),this._internal.collection.on("remove",e=>{this._queueOperation(()=>{this.removeItem(e.item)})}),this._internal.onItemsCollectionChanged=()=>{Runtime.instance.getProjectSettings().repeaterDisabledWhenUnmounted&&!this.isMounted?this._internal.mountedOperations.push(()=>{this._internal.collection.set(this._internal.items)}):this._queueOperation(()=>{this._internal.collection.set(this._internal.items)})},this.addDeleteListener(()=>{this._deleteAllItemNodes()})},inputs:{items:{group:"Data",displayName:"Items",type:"array",set:function(e){e&&e!==this._internal.items&&this.bindCollection(e)}},templateType:{group:"Appearance",displayName:"Template Type",type:{name:"enum",enums:[{label:"Explicit",value:"explicit"},{label:"Dynamic",value:"dynamic"}]},default:"explicit",set:function(e){this._internal.templateType=e,this.scheduleRefresh()}},template:{type:"component",displayName:"Template",group:"Appearance",set:function(e){this._internal.template=e,this.scheduleRefresh()}},templateScript:{type:{name:"string",codeeditor:"javascript",allowEditOnly:!0},displayName:"Script",group:"Appearance",default:defaultDynamicScript,set:function(e){try{this._internal.templateFunction=new Function("item","var component;"+e+";return component;")}catch(t){console.log(t),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"foreach-syntax-warning",{message:"<strong>Syntax</strong>: "+t.message})}this.scheduleRefresh()}},refresh:{group:"Appearance",displayName:"Refresh",type:"signal",valueChangedToTrue:function(){this.scheduleRefresh()}}},outputs:{itemActionItemId:{type:"string",group:"Actions",displayName:"Item Id",getter:function(){return this._internal.itemActionItemId}}},prototypeExtensions:{updateTarget:function(e){this._internal.target=e?this.nodeScope.getNodeWithId(e):void 0,this.scheduleRefresh()},setNodeModel:function(e){Node.prototype.setNodeModel.call(this,e),e.parent&&this.updateTarget(e.parent.id);var t=this;e.on("parentUpdated",function(n){t.updateTarget(n?n.id:void 0)},this)},scheduleRefresh:function(){var e=this._internal;e.hasScheduledRefresh||(e.hasScheduledRefresh=!0,this.scheduleAfterInputsHaveUpdated(()=>{this._queueOperation(()=>{this.refresh()})}))},unbindCurrentCollection:function(){var e=this._internal.items;e&&(Collection.instanceOf(e)&&e.off("change",this._internal.onItemsCollectionChanged),this._internal.items=void 0)},bindCollection:function(e){var t=this._internal;this.unbindCurrentCollection(),Collection.instanceOf(e)&&e.on("change",this._internal.onItemsCollectionChanged),t.items=e,this.scheduleCopyItems()},getTemplateForModel:function(e){var t=this._internal;if(t.templateType===void 0||t.templateType==="explicit")return t.template;if(t.templateFunction){try{var n=t.templateFunction(e)}catch(o){console.log(o),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"foreach-dynamic-warning",{message:"<strong>Dynamic template</strong>: "+o.message})}if(n&&(n.startsWith("./")&&(n=this.model.component.name+n.substring(1)),n.startsWith("../"))){const o=this.model.component.name.split("/");n=o.slice(0,o.length-1).join("/")+n.substring(2)}return n}},_mapInputs:function(e,t){this._internal.inputMapFunc!==void 0&&this._internal.inputMapFunc(function(n){for(var o in n)e.hasInput(o)&&(typeof n[o]=="function"?e.setInputValue(o,n[o](t)):typeof n[o]=="string"&&e.setInputValue(o,t.get(n[o])))},t)},addItem:async function(e,t){var n=this._internal,o=this.getTemplateForModel(e);if(o){var r=await this.nodeScope.createNode(o,guid(),{_forEachModel:e,_forEachNode:this});if(this._internal.inputMapFunc===void 0){r.hasInput("Id")&&r.setInputValue("Id",e.getId()),r.hasInput("id")&&r.setInputValue("id",e.getId());for(var s in r._inputs)e.data[s]!==void 0&&r.setInputValue(s,e.data[s]);r._forEachModelChangeListener=function(u){r._inputs[u.name]&&r.setInputValue(u.name,u.value)},e.on("change",r._forEachModelChangeListener),r.componentModel.on("inputPortAdded",u=>{u.name==="id"&&r.setInputValue("id",e.getId()),u.name==="Id"&&r.setInputValue("Id",e.getId()),e.data[u.name]!==void 0&&r.setInputValue(u.name,e.data[u.name])},this)}else this._mapInputs(r,e),r._forEachModelChangeListener=()=>this._mapInputs(r,e),e.on("change",r._forEachModelChangeListener);r._internal.creatorCallbacks={onOutputChanged:(u,d,h)=>{(h===!1||h===void 0)&&d===!0&&n.itemOutputSignals[u]&&this.itemOutputSignalTriggered(u,e,r)}};for(var a=r.nodeScope.getNodesWithType("For Each Actions"),l=0;l<a.length;l++)a[l].signalAdded();n.itemNodes.push(r),n.target.addChild(r,t)}},removeItem:function(e){var t=this._internal;if(!t.target)return;function n(){var a=t.target.getChildren();for(var l in a){var u=a[l];if(u._forEachModel===e&&!u._forEachRemoveInProgress)return u}}var o=n();if(o){var r=o.nodeScope.getNodesWithType("For Each Actions");r&&r.length>0?(o._forEachRemoveInProgress=!0,r[0].tryRemove(()=>this._deleteItem(o))):this._deleteItem(o);var s=t.itemNodes.indexOf(o);s!==-1&&t.itemNodes.splice(s,1)}},_deleteItem(e){e._forEachModel.off("change",e._forEachModelChangeListener),e.model&&e.model.removeListenersWithRef(this),e.componentModel&&e.componentModel.removeListenersWithRef(this);const t=e.parent;e._deleted||!t||(t.removeChild(e),this.nodeScope.deleteNode(e))},_deleteAllItemNodes:function(){if(this._internal.itemNodes){for(const e of this._internal.itemNodes)this._deleteItem(e);this._internal.itemNodes=[]}},refresh:async function(){var e=this._internal;if(e.hasScheduledRefresh=!1,!(e.template||e.templateFunction)||!e.items||(this._deleteAllItemNodes(),!e.target))return;const t=this._internal.target.getChildren().indexOf(this)+1;for(var n=0;n<e.collection.size();n++){var o=e.collection.get(n);await this.addItem(o,t+n)}},_queueOperation(e){this._internal.queuedOperations.push(e),this._runQueueOperations()},async _runQueueOperations(){if(this.runningOperations)return;if(this.runningOperations=!0,Runtime.instance.getProjectSettings().repeaterCreateComponentsAsync){const t=async()=>{const n=performance.now();for(;this._internal.queuedOperations.length&&performance.now()-n<25;)await this._internal.queuedOperations.shift()();this._internal.queuedOperations.length?setTimeout(t,0):this.runningOperations=!1};t()}else{for(;this._internal.queuedOperations.length;)await this._internal.queuedOperations.shift()();this.runningOperations=!1}},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.queuedOperations.length=0,this.unbindCurrentCollection()},render(){return React.createElement(ForEachComponent,{key:this.id,didMount:()=>this.didMount(),willUnmount:()=>this.willUnmount()})},didMount(){this.isMounted=!0;for(const e of this._internal.mountedOperations)this._queueOperation(e);this._internal.mountedOperations=[]},willUnmount(){this.isMounted=!1},getItemActionParameter:function(e){if(this._internal.itemActionParameters)return this._internal.itemActionParameters[e]},scheduleCopyItems:function(){this._internal.hasScheduledCopyItems||(this._internal.hasScheduledCopyItems=!0,this.scheduleAfterInputsHaveUpdated(()=>{if(this._internal.hasScheduledCopyItems=!1,this._internal.items===void 0)return;Runtime.instance.getProjectSettings().repeaterDisabledWhenUnmounted&&!this.isMounted?this._internal.mountedOperations.push(()=>{this._internal.collection.set(this._internal.items)}):this._internal.collection.set(this._internal.items)}))},itemOutputSignalTriggered:function(e,t,n){this._internal.itemActionItemId=t.getId(),this._internal.itemActionSignal=e,this.flagOutputDirty("itemActionItemId"),this._internal.hasScheduledTriggerItemOutputSignal||(this._internal.hasScheduledTriggerItemOutputSignal=!0,this.context.scheduleAfterUpdate(()=>{this._internal.hasScheduledTriggerItemOutputSignal=!1;for(var o in n._outputs){var r="itemOutput-"+o;this.hasOutput(r)&&(this._internal.itemOutputs[o]=n._outputs[o].value,this.flagOutputDirty(r))}this.sendSignalOnOutput("itemOutputSignal-"+this._internal.itemActionSignal)}))},getItemOutput:function(e){return this._internal.itemOutputs[e]},registerOutputIfNeeded:function(e){this.hasOutput(e)||(e.startsWith("itemOutputSignal-")?(this._internal.itemOutputSignals[e.substring(17)]=!0,this.registerOutput(e,{getter:function(){}})):e.startsWith("itemOutput-")&&this.registerOutput(e,{getter:this.getItemOutput.bind(this,e.substring(11))}))},setInputMappingScript:function(e){if(this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"foreach-inputmapping-warning"),this._internal.inputMappingScript=e,this._internal.inputMappingScript)try{this._internal.inputMapFunc=new Function("map","object",this._internal.inputMappingScript)}catch(t){this._internal.inputMapFunc=void 0,this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"foreach-inputmapping-warning",{message:"<strong>Input mapping</strong>: "+t.message})}else this._internal.inputMapFunc=void 0;this.scheduleRefresh()},registerInputIfNeeded:function(e){if(!this.hasInput(e)&&e==="inputMappingScript")return this.registerInput(e,{set:this.setInputMappingScript.bind(this)})}}};function _typeName(e){return typeof e=="object"?e.name:e}const defaultMapCode$1=`// Here you add mappings between the properties of the item objects and the inputs of the components.
39
39
  // 'myComponentInput': 'myObjectProperty',
40
40
  // 'anotherComponentInput': function () { return object.get('someProperty') + ' ' + object.get('otherProp') }
41
41
  // These are the default mappings based on the selected template component.
42
42
  map({
43
43
  {{#mappings}}})
44
- `,ForEach={ForEachComponent,node:ForEachDefinition,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var a=o.parameters.template;if(a!==void 0){var l=[],u=t.components[a];if(u!==void 0){for(var d in u.outputPorts){var p=u.outputPorts[d];_typeName(p.type)==="signal"?l.push({name:"itemOutputSignal-"+d,displayName:d,type:"signal",plug:"output",group:"Item Signals"}):l.push({name:"itemOutput-"+d,displayName:d,type:p.type,plug:"output",group:"Item Outputs"})}var f="";for(var g in u.inputPorts){var p=u.inputPorts[g];_typeName(p.type)!=="signal"&&(f+=" '"+g+"': '"+g+`',
45
- `)}l.push({name:"inputMappingScript",type:{name:"string",codeeditor:"javascript"},displayName:"Script",group:"Input Mapping",default:defaultMapCode$1.replace("{{#mappings}}",f),plug:"input"}),e.editorConnection.sendDynamicPorts(o.id,l,{detectRenamed:{plug:"output",prefix:"itemOutput"}})}}}function s(a){if(a!==void 0){var l=t.components[a];l!==void 0&&(l.on("outputPortAdded",r),l.on("outputPortRemoved",r),l.on("outputPortTypesUpdated",r),l.on("inputPortTypesUpdated",r),l.on("inputPortAdded",r),l.on("inputPortRemoved",r))}}r(),s(o.parameters.template),o.on("parameterUpdated",function(a){a.name==="template"&&(r(),s(o.parameters.template))})}t.on("editorImportComplete",()=>{t.on("nodeAdded.For Each",function(o){n(o)});for(const o of t.getNodesWithType("For Each"))n(o)})}};function calcAutofold(e,t,n,o){const r=_calcAutofold(e,t,n,o),s=_calcAutofold(r.layout,t,n,o);return r.totalFractions===s.totalFractions?r:calcAutofold(s.layout,t,n,o)}function _calcAutofold(e,t,n,o){const s=100/e.reduce((f,g)=>f+g,0),a=e.reduce((f,g,b)=>({expected:f.expected+s/100*n*g,min:f.min+parseFloat(t)+o}),{expected:0,min:0,max:null}),l=e;a.expected<a.min&&l.pop();const u=l.reduce((f,g)=>f+g,0),d=100/u,p=l.length;return{layout:l,totalFractions:u,fractionSize:d,columnAmount:p}}function Columns$1(e){if(!e.children)return null;let t=null;const n=React.useRef(null),[o,r]=React.useState(null);switch(React.useEffect(()=>{const f=n?.current;if(!f)return;const g=new ResizeObserver(()=>{const b=n.current;b&&r(b.offsetWidth)});return g.observe(f),()=>{g.disconnect()}},[]),typeof e.layoutString){case"string":t=e.layoutString.trim();break;case"number":t=String(e.layoutString).trim();break;default:t=null}if(!t)return React.createElement(React.Fragment,null,e.children);const s=t.split(" ").map(f=>parseInt(f)),{layout:a,columnAmount:l,fractionSize:u}=calcAutofold(s,e.minWidth,o,e.marginX);let d=[],p=null;return Array.isArray(e.children)?(d=e.children.filter(f=>f.type!==ForEachComponent),p=e.children.find(f=>f.type===ForEachComponent)):e.children.type!==ForEachComponent&&(d=[e.children]),React.createElement("div",{...e.attrs,className:["columns-container",e.className].join(" "),ref:n,style:{visibility:o===null?"hidden":"visible",marginTop:parseFloat(e.marginY)*-1,marginLeft:parseFloat(e.marginX)*-1,display:"flex",flexWrap:"wrap",alignItems:"stretch",justifyContent:e.justifyContent,flexDirection:e.direction,width:`calc(100% + (${parseFloat(e.marginX)}px)`,boxSizing:"border-box",...e.style}},p&&p,d.map((f,g)=>React.createElement("div",{className:"column-item",key:g,style:{boxSizing:"border-box",paddingTop:e.marginY,paddingLeft:e.marginX,width:a[g%l]*u+"%",flexShrink:0,flexGrow:0,minWidth:e.minWidth}},React.cloneElement(f))))}const ColumnsNode={name:"net.noodl.visual.columns",displayName:"Columns",docs:"https://docs.noodl.net/nodes/basic-elements/columns",allowChildren:!0,noodlNodeAsProp:!0,connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},initialize(){this.props.attrs={},this.props.layoutString="1 2 1",this.props.minWidth=0,this.props.marginX=16,this.props.marginY=16,this.props.direction="row",this.props.justifyContent="flex-start"},getReactComponent(){return Columns$1},inputs:{layoutString:{group:"Layout Settings",displayName:"Layout String",type:"string",default:"1 2 1",set(e){this.props.layoutString=e,typeof e!="string"?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"layout-type-warning",{message:"Layout String needs to be a string."}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"layout-type-warning"),this.forceUpdate()}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputProps:{marginX:{group:"Layout Settings",displayName:"Horizontal Gap",type:{name:"number",units:["px"],defaultUnit:"px"},default:16},marginY:{group:"Layout Settings",displayName:"Vertical Gap",type:{name:"number",units:["px"],defaultUnit:"px"},default:16},minWidth:{group:"Constraints",displayName:"Min Column Width",type:{name:"number",units:["px"],defaultUnit:"px"},default:0},direction:{group:"Layout Settings",displayName:"Layout Direction",type:{name:"enum",enums:[{label:"Horizontal",value:"row"},{label:"Vertical",value:"column"}]},default:"row"},justifyContent:{group:"Justify Content",displayName:"Justify Content",type:{name:"enum",enums:[{label:"Start",value:"flex-start"},{label:"End",value:"flex-end"},{label:"Center",value:"center"}],alignComp:"align-items"},default:"flex-start"}}},Columns=createNodeFromReactComponent(ColumnsNode),_refCount=new Map,CSSDefinition={name:"CSS Definition",docs:"https://docs.noodl.net/nodes/utilities/css-definition",category:"CustomCode",color:"javascript",nodeDoubleClickAction:{focusPort:"Style"},initialize:function(){var e=this._internal;e.style="";const t=this.getStyleRefId();this.addDeleteListener(()=>{_refCount.set(t,_refCount.get(t)-1),_refCount.get(t)===0&&(this.removeStyleDeclaration(),_refCount.delete(t))}),_refCount.has(t)||_refCount.set(t,0),_refCount.set(t,_refCount.get(t)+1)},inputs:{style:{index:4005,type:{name:"string",allowEditOnly:!0,codeeditor:"css"},displayName:"Style",group:"Content",default:"",set:function(e){this.updateStyle(e)}}},outputs:{},methods:{getStyleRefId:function(){return"style_"+this.id},removeStyleDeclaration:function(){if(!(typeof document>"u")){var e=this.getStyleRefId(),t=document.getElementById(e);t!==null&&t.parentNode.removeChild(t)}},updateStyle:function(e){if(!(typeof document>"u")){var t=this._internal,n=this.getStyleRefId();if(t.style=e,e!==null){var o=document.getElementById(n);o===null&&(o=document.createElement("style"),o.id=n,o.type="text/css",document.head.appendChild(o)),o.innerHTML=`
44
+ `,ForEach={ForEachComponent,node:ForEachDefinition,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var a=o.parameters.template;if(a!==void 0){var l=[],u=t.components[a];if(u!==void 0){for(var d in u.outputPorts){var h=u.outputPorts[d];_typeName(h.type)==="signal"?l.push({name:"itemOutputSignal-"+d,displayName:d,type:"signal",plug:"output",group:"Item Signals"}):l.push({name:"itemOutput-"+d,displayName:d,type:h.type,plug:"output",group:"Item Outputs"})}var f="";for(var g in u.inputPorts){var h=u.inputPorts[g];_typeName(h.type)!=="signal"&&(f+=" '"+g+"': '"+g+`',
45
+ `)}l.push({name:"inputMappingScript",type:{name:"string",codeeditor:"javascript"},displayName:"Script",group:"Input Mapping",default:defaultMapCode$1.replace("{{#mappings}}",f),plug:"input"}),e.editorConnection.sendDynamicPorts(o.id,l,{detectRenamed:{plug:"output",prefix:"itemOutput"}})}}}function s(a){if(a!==void 0){var l=t.components[a];l!==void 0&&(l.on("outputPortAdded",r),l.on("outputPortRemoved",r),l.on("outputPortTypesUpdated",r),l.on("inputPortTypesUpdated",r),l.on("inputPortAdded",r),l.on("inputPortRemoved",r))}}r(),s(o.parameters.template),o.on("parameterUpdated",function(a){a.name==="template"&&(r(),s(o.parameters.template))})}t.on("editorImportComplete",()=>{t.on("nodeAdded.For Each",function(o){n(o)});for(const o of t.getNodesWithType("For Each"))n(o)})}};function calcAutofold(e,t,n,o){const r=_calcAutofold(e,t,n,o),s=_calcAutofold(r.layout,t,n,o);return r.totalFractions===s.totalFractions?r:calcAutofold(s.layout,t,n,o)}function _calcAutofold(e,t,n,o){const s=100/e.reduce((f,g)=>f+g,0),a=e.reduce((f,g,b)=>({expected:f.expected+s/100*n*g,min:f.min+parseFloat(t)+o}),{expected:0,min:0,max:null}),l=e;a.expected<a.min&&l.pop();const u=l.reduce((f,g)=>f+g,0),d=100/u,h=l.length;return{layout:l,totalFractions:u,fractionSize:d,columnAmount:h}}function Columns$1(e){if(!e.children)return null;let t=null;const n=React.useRef(null),[o,r]=React.useState(null);switch(React.useEffect(()=>{const f=n?.current;if(!f)return;const g=new ResizeObserver(()=>{const b=n.current;b&&r(b.offsetWidth)});return g.observe(f),()=>{g.disconnect()}},[]),typeof e.layoutString){case"string":t=e.layoutString.trim();break;case"number":t=String(e.layoutString).trim();break;default:t=null}if(!t)return React.createElement(React.Fragment,null,e.children);const s=t.split(" ").map(f=>parseInt(f)),{layout:a,columnAmount:l,fractionSize:u}=calcAutofold(s,e.minWidth,o,e.marginX);let d=[],h=null;return Array.isArray(e.children)?(d=e.children.filter(f=>f.type!==ForEachComponent),h=e.children.find(f=>f.type===ForEachComponent)):e.children.type!==ForEachComponent&&(d=[e.children]),React.createElement("div",{...e.attrs,className:["columns-container",e.className].join(" "),ref:n,style:{visibility:o===null?"hidden":"visible",marginTop:parseFloat(e.marginY)*-1,marginLeft:parseFloat(e.marginX)*-1,display:"flex",flexWrap:"wrap",alignItems:"stretch",justifyContent:e.justifyContent,flexDirection:e.direction,width:`calc(100% + (${parseFloat(e.marginX)}px)`,boxSizing:"border-box",...e.style}},h&&h,d.map((f,g)=>React.createElement("div",{className:"column-item",key:g,style:{boxSizing:"border-box",paddingTop:e.marginY,paddingLeft:e.marginX,width:a[g%l]*u+"%",flexShrink:0,flexGrow:0,minWidth:e.minWidth}},React.cloneElement(f))))}const ColumnsNode={name:"net.noodl.visual.columns",displayName:"Columns",docs:"https://docs.noodl.net/nodes/basic-elements/columns",allowChildren:!0,noodlNodeAsProp:!0,connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Label","Label Text Style","Hover Events","Pointer Events","Focus Events"]},initialize(){this.props.attrs={},this.props.layoutString="1 2 1",this.props.minWidth=0,this.props.marginX=16,this.props.marginY=16,this.props.direction="row",this.props.justifyContent="flex-start"},getReactComponent(){return Columns$1},inputs:{layoutString:{group:"Layout Settings",displayName:"Layout String",type:"string",default:"1 2 1",set(e){this.props.layoutString=e,typeof e!="string"?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"layout-type-warning",{message:"Layout String needs to be a string."}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"layout-type-warning"),this.forceUpdate()}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputProps:{marginX:{group:"Layout Settings",displayName:"Horizontal Gap",type:{name:"number",units:["px"],defaultUnit:"px"},default:16},marginY:{group:"Layout Settings",displayName:"Vertical Gap",type:{name:"number",units:["px"],defaultUnit:"px"},default:16},minWidth:{group:"Constraints",displayName:"Min Column Width",type:{name:"number",units:["px"],defaultUnit:"px"},default:0},direction:{group:"Layout Settings",displayName:"Layout Direction",type:{name:"enum",enums:[{label:"Horizontal",value:"row"},{label:"Vertical",value:"column"}]},default:"row"},justifyContent:{group:"Justify Content",displayName:"Justify Content",type:{name:"enum",enums:[{label:"Start",value:"flex-start"},{label:"End",value:"flex-end"},{label:"Center",value:"center"}],alignComp:"align-items"},default:"flex-start"}}},Columns=createNodeFromReactComponent(ColumnsNode),_refCount=new Map,CSSDefinition={name:"CSS Definition",docs:"https://docs.noodl.net/nodes/utilities/css-definition",category:"CustomCode",color:"javascript",nodeDoubleClickAction:{focusPort:"Style"},initialize:function(){var e=this._internal;e.style="";const t=this.getStyleRefId();this.addDeleteListener(()=>{_refCount.set(t,_refCount.get(t)-1),_refCount.get(t)===0&&(this.removeStyleDeclaration(),_refCount.delete(t))}),_refCount.has(t)||_refCount.set(t,0),_refCount.set(t,_refCount.get(t)+1)},inputs:{style:{index:4005,type:{name:"string",allowEditOnly:!0,codeeditor:"css"},displayName:"Style",group:"Content",default:"",set:function(e){this.updateStyle(e)}}},outputs:{},methods:{getStyleRefId:function(){return"style_"+this.id},removeStyleDeclaration:function(){if(!(typeof document>"u")){var e=this.getStyleRefId(),t=document.getElementById(e);t!==null&&t.parentNode.removeChild(t)}},updateStyle:function(e){if(!(typeof document>"u")){var t=this._internal,n=this.getStyleRefId();if(t.style=e,e!==null){var o=document.getElementById(n);o===null&&(o=document.createElement("style"),o.id=n,o.type="text/css",document.head.appendChild(o)),o.innerHTML=`
46
46
  `+e+`
47
- `}else this.removeStyleDeclaration()}}}},CSSDefinition$1={node:CSSDefinition};var reactDraggable_min$1={exports:{}},hasRequiredReactDraggable_min;function requireReactDraggable_min(){return hasRequiredReactDraggable_min||(hasRequiredReactDraggable_min=1,function(e,t){(function(o,r){e.exports=r(React,ReactDOM)})(self,function(n,o){return function(){var r={404:function(u,d,p){p.r(d),p.d(d,{DraggableCore:function(){return ue},default:function(){return Ce}});var f=p(359),g=p(697),b=p.n(g),_=p(318),T=p.n(_);function A(c){var h,y,S="";if(typeof c=="string"||typeof c=="number")S+=c;else if(typeof c=="object")if(Array.isArray(c))for(h=0;h<c.length;h++)c[h]&&(y=A(c[h]))&&(S&&(S+=" "),S+=y);else for(h in c)c[h]&&(S&&(S+=" "),S+=h);return S}function v(){for(var c=0,h,y,S="";c<arguments.length;)(h=arguments[c++])&&(y=A(h))&&(S&&(S+=" "),S+=y);return S}function I(c,h){for(let y=0,S=c.length;y<S;y++)if(h.apply(h,[c[y],y,c]))return c[y]}function k(c){return typeof c=="function"||Object.prototype.toString.call(c)==="[object Function]"}function N(c){return typeof c=="number"&&!isNaN(c)}function w(c){return parseInt(c,10)}function E(c,h,y){if(c[h])return new Error("Invalid prop ".concat(h," passed to ").concat(y," - do not set this, set it on the child."))}const F=["Moz","Webkit","O","ms"];function L(){var c;let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"transform";if(typeof window>"u")return"";const y=(c=window.document)===null||c===void 0||(c=c.documentElement)===null||c===void 0?void 0:c.style;if(!y||h in y)return"";for(let S=0;S<F.length;S++)if(B(h,F[S])in y)return F[S];return""}function B(c,h){return h?"".concat(h).concat(H(c)):c}function H(c){let h="",y=!0;for(let S=0;S<c.length;S++)y?(h+=c[S].toUpperCase(),y=!1):c[S]==="-"?y=!0:h+=c[S];return h}var J=L();let ie="";function pe(c,h){return ie||(ie=I(["matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector"],function(y){return k(c[y])})),k(c[ie])?c[ie](h):!1}function xe(c,h,y){let S=c;do{if(pe(S,h))return!0;if(S===y)return!1;S=S.parentNode}while(S);return!1}function Me(c,h,y,S){if(!c)return;const O={capture:!0,...S};c.addEventListener?c.addEventListener(h,y,O):c.attachEvent?c.attachEvent("on"+h,y):c["on"+h]=y}function ae(c,h,y,S){if(!c)return;const O={capture:!0,...S};c.removeEventListener?c.removeEventListener(h,y,O):c.detachEvent?c.detachEvent("on"+h,y):c["on"+h]=null}function Ie(c){let h=c.clientHeight;const y=c.ownerDocument.defaultView.getComputedStyle(c);return h+=w(y.borderTopWidth),h+=w(y.borderBottomWidth),h}function Te(c){let h=c.clientWidth;const y=c.ownerDocument.defaultView.getComputedStyle(c);return h+=w(y.borderLeftWidth),h+=w(y.borderRightWidth),h}function Ne(c){let h=c.clientHeight;const y=c.ownerDocument.defaultView.getComputedStyle(c);return h-=w(y.paddingTop),h-=w(y.paddingBottom),h}function me(c){let h=c.clientWidth;const y=c.ownerDocument.defaultView.getComputedStyle(c);return h-=w(y.paddingLeft),h-=w(y.paddingRight),h}function Ee(c,h,y){const O=h===h.ownerDocument.body?{left:0,top:0}:h.getBoundingClientRect(),M=(c.clientX+h.scrollLeft-O.left)/y,U=(c.clientY+h.scrollTop-O.top)/y;return{x:M,y:U}}function Ae(c,h){const y=Fe(c,h,"px");return{[B("transform",J)]:y}}function qe(c,h){return Fe(c,h,"")}function Fe(c,h,y){let{x:S,y:O}=c,M="translate(".concat(S).concat(y,",").concat(O).concat(y,")");if(h){const U="".concat(typeof h.x=="string"?h.x:h.x+y),j="".concat(typeof h.y=="string"?h.y:h.y+y);M="translate(".concat(U,", ").concat(j,")")+M}return M}function Y(c,h){return c.targetTouches&&I(c.targetTouches,y=>h===y.identifier)||c.changedTouches&&I(c.changedTouches,y=>h===y.identifier)}function ve(c){if(c.targetTouches&&c.targetTouches[0])return c.targetTouches[0].identifier;if(c.changedTouches&&c.changedTouches[0])return c.changedTouches[0].identifier}function Ve(c){if(!c)return;let h=c.getElementById("react-draggable-style-el");h||(h=c.createElement("style"),h.type="text/css",h.id="react-draggable-style-el",h.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;}
48
- `,h.innerHTML+=`.react-draggable-transparent-selection *::selection {all: inherit;}
49
- `,c.getElementsByTagName("head")[0].appendChild(h)),c.body&&Oe(c.body,"react-draggable-transparent-selection")}function re(c){if(c)try{if(c.body&&$e(c.body,"react-draggable-transparent-selection"),c.selection)c.selection.empty();else{const h=(c.defaultView||window).getSelection();h&&h.type!=="Caret"&&h.removeAllRanges()}}catch{}}function Oe(c,h){c.classList?c.classList.add(h):c.className.match(new RegExp("(?:^|\\s)".concat(h,"(?!\\S)")))||(c.className+=" ".concat(h))}function $e(c,h){c.classList?c.classList.remove(h):c.className=c.className.replace(new RegExp("(?:^|\\s)".concat(h,"(?!\\S)"),"g"),"")}function Le(c,h,y){if(!c.props.bounds)return[h,y];let{bounds:S}=c.props;S=typeof S=="string"?S:Re(S);const O=We(c);if(typeof S=="string"){const{ownerDocument:M}=O,U=M.defaultView;let j;if(S==="parent"?j=O.parentNode:j=M.querySelector(S),!(j instanceof U.HTMLElement))throw new Error('Bounds selector "'+S+'" could not find an element.');const z=j,q=U.getComputedStyle(O),C=U.getComputedStyle(z);S={left:-O.offsetLeft+w(C.paddingLeft)+w(q.marginLeft),top:-O.offsetTop+w(C.paddingTop)+w(q.marginTop),right:me(z)-Te(O)-O.offsetLeft+w(C.paddingRight)-w(q.marginRight),bottom:Ne(z)-Ie(O)-O.offsetTop+w(C.paddingBottom)-w(q.marginBottom)}}return N(S.right)&&(h=Math.min(h,S.right)),N(S.bottom)&&(y=Math.min(y,S.bottom)),N(S.left)&&(h=Math.max(h,S.left)),N(S.top)&&(y=Math.max(y,S.top)),[h,y]}function fe(c,h,y){const S=Math.round(h/c[0])*c[0],O=Math.round(y/c[1])*c[1];return[S,O]}function Xe(c){return c.props.axis==="both"||c.props.axis==="x"}function Be(c){return c.props.axis==="both"||c.props.axis==="y"}function De(c,h,y){const S=typeof h=="number"?Y(c,h):null;if(typeof h=="number"&&!S)return null;const O=We(y),M=y.props.offsetParent||O.offsetParent||O.ownerDocument.body;return Ee(S||c,M,y.props.scale)}function Ue(c,h,y){const S=!N(c.lastX),O=We(c);return S?{node:O,deltaX:0,deltaY:0,lastX:h,lastY:y,x:h,y}:{node:O,deltaX:h-c.lastX,deltaY:y-c.lastY,lastX:c.lastX,lastY:c.lastY,x:h,y}}function je(c,h){const y=c.props.scale;return{node:h.node,x:c.state.x+h.deltaX/y,y:c.state.y+h.deltaY/y,deltaX:h.deltaX/y,deltaY:h.deltaY/y,lastX:c.state.x,lastY:c.state.y}}function Re(c){return{left:c.left,top:c.top,right:c.right,bottom:c.bottom}}function We(c){const h=c.findDOMNode();if(!h)throw new Error("<DraggableCore>: Unmounted during event!");return h}function st(){}function K(c,h,y){return h=et(h),h in c?Object.defineProperty(c,h,{value:y,enumerable:!0,configurable:!0,writable:!0}):c[h]=y,c}function et(c){var h=tt(c,"string");return typeof h=="symbol"?h:String(h)}function tt(c,h){if(typeof c!="object"||c===null)return c;var y=c[Symbol.toPrimitive];if(y!==void 0){var S=y.call(c,h);if(typeof S!="object")return S;throw new TypeError("@@toPrimitive must return a primitive value.")}return(h==="string"?String:Number)(c)}const le={touch:{start:"touchstart",move:"touchmove",stop:"touchend"},mouse:{start:"mousedown",move:"mousemove",stop:"mouseup"}};let ye=le.mouse;class ue extends f.Component{constructor(){super(...arguments),K(this,"dragging",!1),K(this,"lastX",NaN),K(this,"lastY",NaN),K(this,"touchIdentifier",null),K(this,"mounted",!1),K(this,"handleDragStart",h=>{if(this.props.onMouseDown(h),!this.props.allowAnyClick&&typeof h.button=="number"&&h.button!==0)return!1;const y=this.findDOMNode();if(!y||!y.ownerDocument||!y.ownerDocument.body)throw new Error("<DraggableCore> not mounted on DragStart!");const{ownerDocument:S}=y;if(this.props.disabled||!(h.target instanceof S.defaultView.Node)||this.props.handle&&!xe(h.target,this.props.handle,y)||this.props.cancel&&xe(h.target,this.props.cancel,y))return;h.type==="touchstart"&&h.preventDefault();const O=ve(h);this.touchIdentifier=O;const M=De(h,O,this);if(M==null)return;const{x:U,y:j}=M,z=Ue(this,U,j);this.props.onStart,!(this.props.onStart(h,z)===!1||this.mounted===!1)&&(this.props.enableUserSelectHack&&Ve(S),this.dragging=!0,this.lastX=U,this.lastY=j,Me(S,ye.move,this.handleDrag),Me(S,ye.stop,this.handleDragStop))}),K(this,"handleDrag",h=>{const y=De(h,this.touchIdentifier,this);if(y==null)return;let{x:S,y:O}=y;if(Array.isArray(this.props.grid)){let j=S-this.lastX,z=O-this.lastY;if([j,z]=fe(this.props.grid,j,z),!j&&!z)return;S=this.lastX+j,O=this.lastY+z}const M=Ue(this,S,O);if(this.props.onDrag(h,M)===!1||this.mounted===!1){try{this.handleDragStop(new MouseEvent("mouseup"))}catch{const z=document.createEvent("MouseEvents");z.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),this.handleDragStop(z)}return}this.lastX=S,this.lastY=O}),K(this,"handleDragStop",h=>{if(!this.dragging)return;const y=De(h,this.touchIdentifier,this);if(y==null)return;let{x:S,y:O}=y;if(Array.isArray(this.props.grid)){let z=S-this.lastX||0,q=O-this.lastY||0;[z,q]=fe(this.props.grid,z,q),S=this.lastX+z,O=this.lastY+q}const M=Ue(this,S,O);if(this.props.onStop(h,M)===!1||this.mounted===!1)return!1;const j=this.findDOMNode();j&&this.props.enableUserSelectHack&&re(j.ownerDocument),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,j&&(ae(j.ownerDocument,ye.move,this.handleDrag),ae(j.ownerDocument,ye.stop,this.handleDragStop))}),K(this,"onMouseDown",h=>(ye=le.mouse,this.handleDragStart(h))),K(this,"onMouseUp",h=>(ye=le.mouse,this.handleDragStop(h))),K(this,"onTouchStart",h=>(ye=le.touch,this.handleDragStart(h))),K(this,"onTouchEnd",h=>(ye=le.touch,this.handleDragStop(h)))}componentDidMount(){this.mounted=!0;const h=this.findDOMNode();h&&Me(h,le.touch.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;const h=this.findDOMNode();if(h){const{ownerDocument:y}=h;ae(y,le.mouse.move,this.handleDrag),ae(y,le.touch.move,this.handleDrag),ae(y,le.mouse.stop,this.handleDragStop),ae(y,le.touch.stop,this.handleDragStop),ae(h,le.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&re(y)}}findDOMNode(){var h,y;return(h=this.props)!==null&&h!==void 0&&h.nodeRef?(y=this.props)===null||y===void 0||(y=y.nodeRef)===null||y===void 0?void 0:y.current:T().findDOMNode(this)}render(){return f.cloneElement(f.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}}K(ue,"displayName","DraggableCore"),K(ue,"propTypes",{allowAnyClick:b().bool,children:b().node.isRequired,disabled:b().bool,enableUserSelectHack:b().bool,offsetParent:function(c,h){if(c[h]&&c[h].nodeType!==1)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:b().arrayOf(b().number),handle:b().string,cancel:b().string,nodeRef:b().object,onStart:b().func,onDrag:b().func,onStop:b().func,onMouseDown:b().func,scale:b().number,className:E,style:E,transform:E}),K(ue,"defaultProps",{allowAnyClick:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1});function Se(){return Se=Object.assign?Object.assign.bind():function(c){for(var h=1;h<arguments.length;h++){var y=arguments[h];for(var S in y)Object.prototype.hasOwnProperty.call(y,S)&&(c[S]=y[S])}return c},Se.apply(this,arguments)}function ge(c,h,y){return h=ze(h),h in c?Object.defineProperty(c,h,{value:y,enumerable:!0,configurable:!0,writable:!0}):c[h]=y,c}function ze(c){var h=Z(c,"string");return typeof h=="symbol"?h:String(h)}function Z(c,h){if(typeof c!="object"||c===null)return c;var y=c[Symbol.toPrimitive];if(y!==void 0){var S=y.call(c,h);if(typeof S!="object")return S;throw new TypeError("@@toPrimitive must return a primitive value.")}return(h==="string"?String:Number)(c)}class Ce extends f.Component{static getDerivedStateFromProps(h,y){let{position:S}=h,{prevPropsPosition:O}=y;return S&&(!O||S.x!==O.x||S.y!==O.y)?{x:S.x,y:S.y,prevPropsPosition:{...S}}:null}constructor(h){super(h),ge(this,"onDragStart",(y,S)=>{if(this.props.onStart(y,je(this,S))===!1)return!1;this.setState({dragging:!0,dragged:!0})}),ge(this,"onDrag",(y,S)=>{if(!this.state.dragging)return!1;const O=je(this,S),M={x:O.x,y:O.y,slackX:0,slackY:0};if(this.props.bounds){const{x:j,y:z}=M;M.x+=this.state.slackX,M.y+=this.state.slackY;const[q,C]=Le(this,M.x,M.y);M.x=q,M.y=C,M.slackX=this.state.slackX+(j-M.x),M.slackY=this.state.slackY+(z-M.y),O.x=M.x,O.y=M.y,O.deltaX=M.x-this.state.x,O.deltaY=M.y-this.state.y}if(this.props.onDrag(y,O)===!1)return!1;this.setState(M)}),ge(this,"onDragStop",(y,S)=>{if(!this.state.dragging||this.props.onStop(y,je(this,S))===!1)return!1;const M={dragging:!1,slackX:0,slackY:0};if(!!this.props.position){const{x:j,y:z}=this.props.position;M.x=j,M.y=z}this.setState(M)}),this.state={dragging:!1,dragged:!1,x:h.position?h.position.x:h.defaultPosition.x,y:h.position?h.position.y:h.defaultPosition.y,prevPropsPosition:{...h.position},slackX:0,slackY:0,isElementSVG:!1},h.position&&!(h.onDrag||h.onStop)&&console.warn("A `position` was applied to this <Draggable>, without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.")}componentDidMount(){typeof window.SVGElement<"u"&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}componentWillUnmount(){this.setState({dragging:!1})}findDOMNode(){var h,y;return(h=(y=this.props)===null||y===void 0||(y=y.nodeRef)===null||y===void 0?void 0:y.current)!==null&&h!==void 0?h:T().findDOMNode(this)}render(){const{axis:h,bounds:y,children:S,defaultPosition:O,defaultClassName:M,defaultClassNameDragging:U,defaultClassNameDragged:j,position:z,positionOffset:q,scale:C,...x}=this.props;let V={},G=null;const oe=!!!z||this.state.dragging,de=z||O,ke={x:Xe(this)&&oe?this.state.x:de.x,y:Be(this)&&oe?this.state.y:de.y};this.state.isElementSVG?G=qe(ke,q):V=Ae(ke,q);const Ye=v(S.props.className||"",M,{[U]:this.state.dragging,[j]:this.state.dragged});return f.createElement(ue,Se({},x,{onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop}),f.cloneElement(f.Children.only(S),{className:Ye,style:{...S.props.style,...V},transform:G}))}}ge(Ce,"displayName","Draggable"),ge(Ce,"propTypes",{...ue.propTypes,axis:b().oneOf(["both","x","y","none"]),bounds:b().oneOfType([b().shape({left:b().number,right:b().number,top:b().number,bottom:b().number}),b().string,b().oneOf([!1])]),defaultClassName:b().string,defaultClassNameDragging:b().string,defaultClassNameDragged:b().string,defaultPosition:b().shape({x:b().number,y:b().number}),positionOffset:b().shape({x:b().oneOfType([b().number,b().string]),y:b().oneOfType([b().number,b().string])}),position:b().shape({x:b().number,y:b().number}),className:E,style:E,transform:E}),ge(Ce,"defaultProps",{...ue.defaultProps,axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},scale:1})},16:function(u,d,p){const{default:f,DraggableCore:g}=p(404);u.exports=f,u.exports.default=f,u.exports.DraggableCore=g},703:function(u,d,p){var f=p(414);function g(){}function b(){}b.resetWarningCache=g,u.exports=function(){function _(v,I,k,N,w,E){if(E!==f){var F=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw F.name="Invariant Violation",F}}_.isRequired=_;function T(){return _}var A={array:_,bigint:_,bool:_,func:_,number:_,object:_,string:_,symbol:_,any:_,arrayOf:T,element:_,elementType:_,instanceOf:T,node:_,objectOf:T,oneOf:T,oneOfType:T,shape:T,exact:T,checkPropTypes:b,resetWarningCache:g};return A.PropTypes=A,A}},697:function(u,d,p){u.exports=p(703)()},414:function(u){var d="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";u.exports=d},359:function(u){u.exports=n},318:function(u){u.exports=o}},s={};function a(u){var d=s[u];if(d!==void 0)return d.exports;var p=s[u]={exports:{}};return r[u](p,p.exports,a),p.exports}(function(){a.n=function(u){var d=u&&u.__esModule?function(){return u.default}:function(){return u};return a.d(d,{a:d}),d}})(),function(){a.d=function(u,d){for(var p in d)a.o(d,p)&&!a.o(u,p)&&Object.defineProperty(u,p,{enumerable:!0,get:d[p]})}}(),function(){a.o=function(u,d){return Object.prototype.hasOwnProperty.call(u,d)}}(),function(){a.r=function(u){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(u,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(u,"__esModule",{value:!0})}}();var l=a(16);return l}()})}(reactDraggable_min$1)),reactDraggable_min$1.exports}var reactDraggable_minExports=requireReactDraggable_min();const reactDraggable_min=getDefaultExportFromCjs(reactDraggable_minExports),Draggable=_mergeNamespaces({__proto__:null,default:reactDraggable_min},[reactDraggable_minExports]);function setDragValues(e,t){t.positionX&&t.positionX(e.x),t.positionY&&t.positionY(e.y),t.deltaX&&t.deltaX(e.deltaX),t.deltaY&&t.deltaY(e.deltaY)}class Drag extends React__namespace.Component{constructor(t){super(t),this.state={x:0,y:0}}snapToPosition({timerScheduler:t,propCallback:n,duration:o,axis:r,endValue:s}){const a=this;return t.createTimer({duration:o===void 0?300:o,startValue:this.state[r],endValue:s,ease:EaseCurves.easeOut,onRunning:function(l){const u=this.ease(this.startValue,this.endValue,l);a.setState({[r]:u}),n&&n(u)}}).start()}componentDidMount(){const t=this.props.inputPositionX?this.props.inputPositionX:0,n=this.props.inputPositionY?this.props.inputPositionY:0;this.setState({x:t,y:n}),setDragValues({x:t,y:n,deltaX:0,deltaY:0},this.props)}UNSAFE_componentWillReceiveProps(t){const n=this.props;n.inputPositionX!==t.inputPositionX&&(this.setState({x:t.inputPositionX}),n.positionX&&n.positionX(t.inputPositionX),n.deltaX&&n.deltaX(t.inputPositionX-n.inputPositionX)),n.inputPositionY!==t.inputPositionY&&(this.setState({y:t.inputPositionY}),n.positionY&&n.positionY(t.inputPositionY),n.deltaY&&n.deltaY(t.inputPositionY-n.inputPositionY))}snapToPositionX(t,n){this.state.x!==t&&(this.snapToPositionXTimer&&this.snapToPositionXTimer.stop(),this.snapToPositionXTimer=this.snapToPosition({timerScheduler:this.props.noodlNode.context.timerScheduler,propCallback:this.props.positionX,duration:n,axis:"x",endValue:t}))}snapToPositionY(t,n){this.state.y!==t&&(this.snapToPositionYTimer&&this.snapToPositionYTimer.stop(),this.snapToPositionYTimer=this.snapToPosition({timerScheduler:this.props.noodlNode.context.timerScheduler,propCallback:this.props.positionY,duration:n,axis:"y",endValue:t}))}render(){const t=this.props,n=t.useParentBounds?"parent":void 0;let o;if(React__namespace.Children.count(t.children)>0)o=React__namespace.Children.toArray(t.children)[0];else return null;return React__namespace.createElement(Draggable,{axis:t.axis,bounds:n,disabled:t.enabled===!1,scale:t.scale||0,position:{x:this.state.x,y:this.state.y},onStart:(r,s)=>{setDragValues(s,t),t.onStart&&t.onStart(),this.snapToPositionXTimer&&this.snapToPositionXTimer.stop(),this.snapToPositionYTimer&&this.snapToPositionYTimer.stop()},onStop:(r,s)=>{(t.axis==="x"||t.axis==="both")&&this.setState({x:s.x}),(t.axis==="y"||t.axis==="both")&&this.setState({y:s.y}),t.positionX&&t.positionX(s.x),t.positionY&&t.positionY(s.y),t.onStop&&t.onStop()},onDrag:(r,s)=>{setDragValues(s,t),t.onDrag&&t.onDrag()}},React__namespace.cloneElement(o,{parentLayout:t.parentLayout}))}}const DragNode={name:"Drag",docs:"https://docs.noodl.net/nodes/utilities/drag",allowChildren:!0,noodlNodeAsProp:!0,getReactComponent(){return Drag},initialize(){this._internal.snapPositionX=0,this._internal.snapPositionY=0,this._internal.snapDurationX=300,this._internal.snapDurationY=300},inputs:{"snapToPositionX.do":{group:"Snap To Position X",displayName:"Do",editorName:"Do|Snap To Position X",type:"signal",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{const{snapPositionX:e,snapDurationX:t}=this._internal;this.innerReactComponentRef&&this.innerReactComponentRef.snapToPositionX(e,t)})}},"snapToPositionX.value":{default:0,group:"Snap To Position X",displayName:"Value",editorName:"Value|Snap To Position X",type:"number",set(e){this._internal.snapPositionX=e}},"snapToPositionX.duration":{default:300,group:"Snap To Position X",displayName:"Duration",editorName:"Duration|Snap To Position X",type:"number",set(e){this._internal.snapDurationX=e}},"snapToPositionY.do":{group:"Snap To Position Y",displayName:"Do",editorName:"Do|Snap To Position Y",type:"signal",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{const{snapPositionY:e,snapDurationY:t}=this._internal;this.innerReactComponentRef&&this.innerReactComponentRef.snapToPositionY(e,t)})}},"snapToPositionY.value":{default:0,group:"Snap To Position Y",displayName:"Value",editorName:"Value|Snap To Position Y",type:"number",set(e){this._internal.snapPositionY=e}},"snapToPositionY.duration":{default:300,group:"Snap To Position Y",displayName:"Duration",editorName:"Duration|Snap To Position Y",type:"number",set(e){this._internal.snapDurationY=e}}},inputProps:{enabled:{group:"Drag",displayName:"Enabled",type:"boolean",default:!0},axis:{group:"Drag",displayName:"Axis",type:{name:"enum",enums:[{label:"X",value:"x"},{label:"Y",value:"y"},{label:"Both",value:"both"}]},default:"x"},useParentBounds:{group:"Drag",displayName:"Constrain to parent",type:"boolean",default:!0},inputPositionX:{displayName:"Start Drag X",type:{name:"number"}},inputPositionY:{displayName:"Start Drag Y",type:{name:"number"}},scale:{displayName:"Scale",default:1,type:{name:"number"}}},outputProps:{onStart:{group:"Signals",type:"signal",displayName:"Drag Started"},onStop:{group:"Signals",type:"signal",displayName:"Drag Ended"},onDrag:{group:"Signals",type:"signal",displayName:"Drag Moved"},positionX:{group:"Values",displayName:"Drag X",type:"number"},positionY:{group:"Values",displayName:"Drag Y",type:"number"},deltaX:{group:"Values",displayName:"Delta X",type:"number"},deltaY:{group:"Values",displayName:"Delta Y",type:"number"}}},DragNode$1=createNodeFromReactComponent(DragNode);/*!
47
+ `}else this.removeStyleDeclaration()}}}},CSSDefinition$1={node:CSSDefinition};var reactDraggable_min$1={exports:{}},hasRequiredReactDraggable_min;function requireReactDraggable_min(){return hasRequiredReactDraggable_min||(hasRequiredReactDraggable_min=1,function(e,t){(function(o,r){e.exports=r(React,ReactDOM)})(self,function(n,o){return function(){var r={404:function(u,d,h){h.r(d),h.d(d,{DraggableCore:function(){return ue},default:function(){return Ce}});var f=h(359),g=h(697),b=h.n(g),_=h(318),T=h.n(_);function A(c){var p,y,S="";if(typeof c=="string"||typeof c=="number")S+=c;else if(typeof c=="object")if(Array.isArray(c))for(p=0;p<c.length;p++)c[p]&&(y=A(c[p]))&&(S&&(S+=" "),S+=y);else for(p in c)c[p]&&(S&&(S+=" "),S+=p);return S}function v(){for(var c=0,p,y,S="";c<arguments.length;)(p=arguments[c++])&&(y=A(p))&&(S&&(S+=" "),S+=y);return S}function I(c,p){for(let y=0,S=c.length;y<S;y++)if(p.apply(p,[c[y],y,c]))return c[y]}function k(c){return typeof c=="function"||Object.prototype.toString.call(c)==="[object Function]"}function N(c){return typeof c=="number"&&!isNaN(c)}function w(c){return parseInt(c,10)}function E(c,p,y){if(c[p])return new Error("Invalid prop ".concat(p," passed to ").concat(y," - do not set this, set it on the child."))}const F=["Moz","Webkit","O","ms"];function L(){var c;let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"transform";if(typeof window>"u")return"";const y=(c=window.document)===null||c===void 0||(c=c.documentElement)===null||c===void 0?void 0:c.style;if(!y||p in y)return"";for(let S=0;S<F.length;S++)if(B(p,F[S])in y)return F[S];return""}function B(c,p){return p?"".concat(p).concat(H(c)):c}function H(c){let p="",y=!0;for(let S=0;S<c.length;S++)y?(p+=c[S].toUpperCase(),y=!1):c[S]==="-"?y=!0:p+=c[S];return p}var J=L();let ie="";function pe(c,p){return ie||(ie=I(["matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector"],function(y){return k(c[y])})),k(c[ie])?c[ie](p):!1}function xe(c,p,y){let S=c;do{if(pe(S,p))return!0;if(S===y)return!1;S=S.parentNode}while(S);return!1}function Me(c,p,y,S){if(!c)return;const O={capture:!0,...S};c.addEventListener?c.addEventListener(p,y,O):c.attachEvent?c.attachEvent("on"+p,y):c["on"+p]=y}function ae(c,p,y,S){if(!c)return;const O={capture:!0,...S};c.removeEventListener?c.removeEventListener(p,y,O):c.detachEvent?c.detachEvent("on"+p,y):c["on"+p]=null}function Ie(c){let p=c.clientHeight;const y=c.ownerDocument.defaultView.getComputedStyle(c);return p+=w(y.borderTopWidth),p+=w(y.borderBottomWidth),p}function Te(c){let p=c.clientWidth;const y=c.ownerDocument.defaultView.getComputedStyle(c);return p+=w(y.borderLeftWidth),p+=w(y.borderRightWidth),p}function Ne(c){let p=c.clientHeight;const y=c.ownerDocument.defaultView.getComputedStyle(c);return p-=w(y.paddingTop),p-=w(y.paddingBottom),p}function me(c){let p=c.clientWidth;const y=c.ownerDocument.defaultView.getComputedStyle(c);return p-=w(y.paddingLeft),p-=w(y.paddingRight),p}function Ee(c,p,y){const O=p===p.ownerDocument.body?{left:0,top:0}:p.getBoundingClientRect(),M=(c.clientX+p.scrollLeft-O.left)/y,U=(c.clientY+p.scrollTop-O.top)/y;return{x:M,y:U}}function Ae(c,p){const y=Fe(c,p,"px");return{[B("transform",J)]:y}}function qe(c,p){return Fe(c,p,"")}function Fe(c,p,y){let{x:S,y:O}=c,M="translate(".concat(S).concat(y,",").concat(O).concat(y,")");if(p){const U="".concat(typeof p.x=="string"?p.x:p.x+y),j="".concat(typeof p.y=="string"?p.y:p.y+y);M="translate(".concat(U,", ").concat(j,")")+M}return M}function Y(c,p){return c.targetTouches&&I(c.targetTouches,y=>p===y.identifier)||c.changedTouches&&I(c.changedTouches,y=>p===y.identifier)}function ve(c){if(c.targetTouches&&c.targetTouches[0])return c.targetTouches[0].identifier;if(c.changedTouches&&c.changedTouches[0])return c.changedTouches[0].identifier}function Ve(c){if(!c)return;let p=c.getElementById("react-draggable-style-el");p||(p=c.createElement("style"),p.type="text/css",p.id="react-draggable-style-el",p.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;}
48
+ `,p.innerHTML+=`.react-draggable-transparent-selection *::selection {all: inherit;}
49
+ `,c.getElementsByTagName("head")[0].appendChild(p)),c.body&&Oe(c.body,"react-draggable-transparent-selection")}function re(c){if(c)try{if(c.body&&$e(c.body,"react-draggable-transparent-selection"),c.selection)c.selection.empty();else{const p=(c.defaultView||window).getSelection();p&&p.type!=="Caret"&&p.removeAllRanges()}}catch{}}function Oe(c,p){c.classList?c.classList.add(p):c.className.match(new RegExp("(?:^|\\s)".concat(p,"(?!\\S)")))||(c.className+=" ".concat(p))}function $e(c,p){c.classList?c.classList.remove(p):c.className=c.className.replace(new RegExp("(?:^|\\s)".concat(p,"(?!\\S)"),"g"),"")}function Le(c,p,y){if(!c.props.bounds)return[p,y];let{bounds:S}=c.props;S=typeof S=="string"?S:Re(S);const O=We(c);if(typeof S=="string"){const{ownerDocument:M}=O,U=M.defaultView;let j;if(S==="parent"?j=O.parentNode:j=M.querySelector(S),!(j instanceof U.HTMLElement))throw new Error('Bounds selector "'+S+'" could not find an element.');const z=j,q=U.getComputedStyle(O),C=U.getComputedStyle(z);S={left:-O.offsetLeft+w(C.paddingLeft)+w(q.marginLeft),top:-O.offsetTop+w(C.paddingTop)+w(q.marginTop),right:me(z)-Te(O)-O.offsetLeft+w(C.paddingRight)-w(q.marginRight),bottom:Ne(z)-Ie(O)-O.offsetTop+w(C.paddingBottom)-w(q.marginBottom)}}return N(S.right)&&(p=Math.min(p,S.right)),N(S.bottom)&&(y=Math.min(y,S.bottom)),N(S.left)&&(p=Math.max(p,S.left)),N(S.top)&&(y=Math.max(y,S.top)),[p,y]}function fe(c,p,y){const S=Math.round(p/c[0])*c[0],O=Math.round(y/c[1])*c[1];return[S,O]}function Xe(c){return c.props.axis==="both"||c.props.axis==="x"}function Be(c){return c.props.axis==="both"||c.props.axis==="y"}function De(c,p,y){const S=typeof p=="number"?Y(c,p):null;if(typeof p=="number"&&!S)return null;const O=We(y),M=y.props.offsetParent||O.offsetParent||O.ownerDocument.body;return Ee(S||c,M,y.props.scale)}function Ue(c,p,y){const S=!N(c.lastX),O=We(c);return S?{node:O,deltaX:0,deltaY:0,lastX:p,lastY:y,x:p,y}:{node:O,deltaX:p-c.lastX,deltaY:y-c.lastY,lastX:c.lastX,lastY:c.lastY,x:p,y}}function je(c,p){const y=c.props.scale;return{node:p.node,x:c.state.x+p.deltaX/y,y:c.state.y+p.deltaY/y,deltaX:p.deltaX/y,deltaY:p.deltaY/y,lastX:c.state.x,lastY:c.state.y}}function Re(c){return{left:c.left,top:c.top,right:c.right,bottom:c.bottom}}function We(c){const p=c.findDOMNode();if(!p)throw new Error("<DraggableCore>: Unmounted during event!");return p}function st(){}function K(c,p,y){return p=et(p),p in c?Object.defineProperty(c,p,{value:y,enumerable:!0,configurable:!0,writable:!0}):c[p]=y,c}function et(c){var p=tt(c,"string");return typeof p=="symbol"?p:String(p)}function tt(c,p){if(typeof c!="object"||c===null)return c;var y=c[Symbol.toPrimitive];if(y!==void 0){var S=y.call(c,p);if(typeof S!="object")return S;throw new TypeError("@@toPrimitive must return a primitive value.")}return(p==="string"?String:Number)(c)}const le={touch:{start:"touchstart",move:"touchmove",stop:"touchend"},mouse:{start:"mousedown",move:"mousemove",stop:"mouseup"}};let ye=le.mouse;class ue extends f.Component{constructor(){super(...arguments),K(this,"dragging",!1),K(this,"lastX",NaN),K(this,"lastY",NaN),K(this,"touchIdentifier",null),K(this,"mounted",!1),K(this,"handleDragStart",p=>{if(this.props.onMouseDown(p),!this.props.allowAnyClick&&typeof p.button=="number"&&p.button!==0)return!1;const y=this.findDOMNode();if(!y||!y.ownerDocument||!y.ownerDocument.body)throw new Error("<DraggableCore> not mounted on DragStart!");const{ownerDocument:S}=y;if(this.props.disabled||!(p.target instanceof S.defaultView.Node)||this.props.handle&&!xe(p.target,this.props.handle,y)||this.props.cancel&&xe(p.target,this.props.cancel,y))return;p.type==="touchstart"&&p.preventDefault();const O=ve(p);this.touchIdentifier=O;const M=De(p,O,this);if(M==null)return;const{x:U,y:j}=M,z=Ue(this,U,j);this.props.onStart,!(this.props.onStart(p,z)===!1||this.mounted===!1)&&(this.props.enableUserSelectHack&&Ve(S),this.dragging=!0,this.lastX=U,this.lastY=j,Me(S,ye.move,this.handleDrag),Me(S,ye.stop,this.handleDragStop))}),K(this,"handleDrag",p=>{const y=De(p,this.touchIdentifier,this);if(y==null)return;let{x:S,y:O}=y;if(Array.isArray(this.props.grid)){let j=S-this.lastX,z=O-this.lastY;if([j,z]=fe(this.props.grid,j,z),!j&&!z)return;S=this.lastX+j,O=this.lastY+z}const M=Ue(this,S,O);if(this.props.onDrag(p,M)===!1||this.mounted===!1){try{this.handleDragStop(new MouseEvent("mouseup"))}catch{const z=document.createEvent("MouseEvents");z.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),this.handleDragStop(z)}return}this.lastX=S,this.lastY=O}),K(this,"handleDragStop",p=>{if(!this.dragging)return;const y=De(p,this.touchIdentifier,this);if(y==null)return;let{x:S,y:O}=y;if(Array.isArray(this.props.grid)){let z=S-this.lastX||0,q=O-this.lastY||0;[z,q]=fe(this.props.grid,z,q),S=this.lastX+z,O=this.lastY+q}const M=Ue(this,S,O);if(this.props.onStop(p,M)===!1||this.mounted===!1)return!1;const j=this.findDOMNode();j&&this.props.enableUserSelectHack&&re(j.ownerDocument),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,j&&(ae(j.ownerDocument,ye.move,this.handleDrag),ae(j.ownerDocument,ye.stop,this.handleDragStop))}),K(this,"onMouseDown",p=>(ye=le.mouse,this.handleDragStart(p))),K(this,"onMouseUp",p=>(ye=le.mouse,this.handleDragStop(p))),K(this,"onTouchStart",p=>(ye=le.touch,this.handleDragStart(p))),K(this,"onTouchEnd",p=>(ye=le.touch,this.handleDragStop(p)))}componentDidMount(){this.mounted=!0;const p=this.findDOMNode();p&&Me(p,le.touch.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;const p=this.findDOMNode();if(p){const{ownerDocument:y}=p;ae(y,le.mouse.move,this.handleDrag),ae(y,le.touch.move,this.handleDrag),ae(y,le.mouse.stop,this.handleDragStop),ae(y,le.touch.stop,this.handleDragStop),ae(p,le.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&re(y)}}findDOMNode(){var p,y;return(p=this.props)!==null&&p!==void 0&&p.nodeRef?(y=this.props)===null||y===void 0||(y=y.nodeRef)===null||y===void 0?void 0:y.current:T().findDOMNode(this)}render(){return f.cloneElement(f.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}}K(ue,"displayName","DraggableCore"),K(ue,"propTypes",{allowAnyClick:b().bool,children:b().node.isRequired,disabled:b().bool,enableUserSelectHack:b().bool,offsetParent:function(c,p){if(c[p]&&c[p].nodeType!==1)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:b().arrayOf(b().number),handle:b().string,cancel:b().string,nodeRef:b().object,onStart:b().func,onDrag:b().func,onStop:b().func,onMouseDown:b().func,scale:b().number,className:E,style:E,transform:E}),K(ue,"defaultProps",{allowAnyClick:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1});function Se(){return Se=Object.assign?Object.assign.bind():function(c){for(var p=1;p<arguments.length;p++){var y=arguments[p];for(var S in y)Object.prototype.hasOwnProperty.call(y,S)&&(c[S]=y[S])}return c},Se.apply(this,arguments)}function ge(c,p,y){return p=ze(p),p in c?Object.defineProperty(c,p,{value:y,enumerable:!0,configurable:!0,writable:!0}):c[p]=y,c}function ze(c){var p=Z(c,"string");return typeof p=="symbol"?p:String(p)}function Z(c,p){if(typeof c!="object"||c===null)return c;var y=c[Symbol.toPrimitive];if(y!==void 0){var S=y.call(c,p);if(typeof S!="object")return S;throw new TypeError("@@toPrimitive must return a primitive value.")}return(p==="string"?String:Number)(c)}class Ce extends f.Component{static getDerivedStateFromProps(p,y){let{position:S}=p,{prevPropsPosition:O}=y;return S&&(!O||S.x!==O.x||S.y!==O.y)?{x:S.x,y:S.y,prevPropsPosition:{...S}}:null}constructor(p){super(p),ge(this,"onDragStart",(y,S)=>{if(this.props.onStart(y,je(this,S))===!1)return!1;this.setState({dragging:!0,dragged:!0})}),ge(this,"onDrag",(y,S)=>{if(!this.state.dragging)return!1;const O=je(this,S),M={x:O.x,y:O.y,slackX:0,slackY:0};if(this.props.bounds){const{x:j,y:z}=M;M.x+=this.state.slackX,M.y+=this.state.slackY;const[q,C]=Le(this,M.x,M.y);M.x=q,M.y=C,M.slackX=this.state.slackX+(j-M.x),M.slackY=this.state.slackY+(z-M.y),O.x=M.x,O.y=M.y,O.deltaX=M.x-this.state.x,O.deltaY=M.y-this.state.y}if(this.props.onDrag(y,O)===!1)return!1;this.setState(M)}),ge(this,"onDragStop",(y,S)=>{if(!this.state.dragging||this.props.onStop(y,je(this,S))===!1)return!1;const M={dragging:!1,slackX:0,slackY:0};if(!!this.props.position){const{x:j,y:z}=this.props.position;M.x=j,M.y=z}this.setState(M)}),this.state={dragging:!1,dragged:!1,x:p.position?p.position.x:p.defaultPosition.x,y:p.position?p.position.y:p.defaultPosition.y,prevPropsPosition:{...p.position},slackX:0,slackY:0,isElementSVG:!1},p.position&&!(p.onDrag||p.onStop)&&console.warn("A `position` was applied to this <Draggable>, without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.")}componentDidMount(){typeof window.SVGElement<"u"&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}componentWillUnmount(){this.setState({dragging:!1})}findDOMNode(){var p,y;return(p=(y=this.props)===null||y===void 0||(y=y.nodeRef)===null||y===void 0?void 0:y.current)!==null&&p!==void 0?p:T().findDOMNode(this)}render(){const{axis:p,bounds:y,children:S,defaultPosition:O,defaultClassName:M,defaultClassNameDragging:U,defaultClassNameDragged:j,position:z,positionOffset:q,scale:C,...x}=this.props;let V={},G=null;const oe=!!!z||this.state.dragging,de=z||O,ke={x:Xe(this)&&oe?this.state.x:de.x,y:Be(this)&&oe?this.state.y:de.y};this.state.isElementSVG?G=qe(ke,q):V=Ae(ke,q);const Ye=v(S.props.className||"",M,{[U]:this.state.dragging,[j]:this.state.dragged});return f.createElement(ue,Se({},x,{onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop}),f.cloneElement(f.Children.only(S),{className:Ye,style:{...S.props.style,...V},transform:G}))}}ge(Ce,"displayName","Draggable"),ge(Ce,"propTypes",{...ue.propTypes,axis:b().oneOf(["both","x","y","none"]),bounds:b().oneOfType([b().shape({left:b().number,right:b().number,top:b().number,bottom:b().number}),b().string,b().oneOf([!1])]),defaultClassName:b().string,defaultClassNameDragging:b().string,defaultClassNameDragged:b().string,defaultPosition:b().shape({x:b().number,y:b().number}),positionOffset:b().shape({x:b().oneOfType([b().number,b().string]),y:b().oneOfType([b().number,b().string])}),position:b().shape({x:b().number,y:b().number}),className:E,style:E,transform:E}),ge(Ce,"defaultProps",{...ue.defaultProps,axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},scale:1})},16:function(u,d,h){const{default:f,DraggableCore:g}=h(404);u.exports=f,u.exports.default=f,u.exports.DraggableCore=g},703:function(u,d,h){var f=h(414);function g(){}function b(){}b.resetWarningCache=g,u.exports=function(){function _(v,I,k,N,w,E){if(E!==f){var F=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw F.name="Invariant Violation",F}}_.isRequired=_;function T(){return _}var A={array:_,bigint:_,bool:_,func:_,number:_,object:_,string:_,symbol:_,any:_,arrayOf:T,element:_,elementType:_,instanceOf:T,node:_,objectOf:T,oneOf:T,oneOfType:T,shape:T,exact:T,checkPropTypes:b,resetWarningCache:g};return A.PropTypes=A,A}},697:function(u,d,h){u.exports=h(703)()},414:function(u){var d="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";u.exports=d},359:function(u){u.exports=n},318:function(u){u.exports=o}},s={};function a(u){var d=s[u];if(d!==void 0)return d.exports;var h=s[u]={exports:{}};return r[u](h,h.exports,a),h.exports}(function(){a.n=function(u){var d=u&&u.__esModule?function(){return u.default}:function(){return u};return a.d(d,{a:d}),d}})(),function(){a.d=function(u,d){for(var h in d)a.o(d,h)&&!a.o(u,h)&&Object.defineProperty(u,h,{enumerable:!0,get:d[h]})}}(),function(){a.o=function(u,d){return Object.prototype.hasOwnProperty.call(u,d)}}(),function(){a.r=function(u){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(u,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(u,"__esModule",{value:!0})}}();var l=a(16);return l}()})}(reactDraggable_min$1)),reactDraggable_min$1.exports}var reactDraggable_minExports=requireReactDraggable_min();const reactDraggable_min=getDefaultExportFromCjs(reactDraggable_minExports),Draggable=_mergeNamespaces({__proto__:null,default:reactDraggable_min},[reactDraggable_minExports]);function setDragValues(e,t){t.positionX&&t.positionX(e.x),t.positionY&&t.positionY(e.y),t.deltaX&&t.deltaX(e.deltaX),t.deltaY&&t.deltaY(e.deltaY)}class Drag extends React__namespace.Component{constructor(t){super(t),this.state={x:0,y:0}}snapToPosition({timerScheduler:t,propCallback:n,duration:o,axis:r,endValue:s}){const a=this;return t.createTimer({duration:o===void 0?300:o,startValue:this.state[r],endValue:s,ease:EaseCurves.easeOut,onRunning:function(l){const u=this.ease(this.startValue,this.endValue,l);a.setState({[r]:u}),n&&n(u)}}).start()}componentDidMount(){const t=this.props.inputPositionX?this.props.inputPositionX:0,n=this.props.inputPositionY?this.props.inputPositionY:0;this.setState({x:t,y:n}),setDragValues({x:t,y:n,deltaX:0,deltaY:0},this.props)}UNSAFE_componentWillReceiveProps(t){const n=this.props;n.inputPositionX!==t.inputPositionX&&(this.setState({x:t.inputPositionX}),n.positionX&&n.positionX(t.inputPositionX),n.deltaX&&n.deltaX(t.inputPositionX-n.inputPositionX)),n.inputPositionY!==t.inputPositionY&&(this.setState({y:t.inputPositionY}),n.positionY&&n.positionY(t.inputPositionY),n.deltaY&&n.deltaY(t.inputPositionY-n.inputPositionY))}snapToPositionX(t,n){this.state.x!==t&&(this.snapToPositionXTimer&&this.snapToPositionXTimer.stop(),this.snapToPositionXTimer=this.snapToPosition({timerScheduler:this.props.noodlNode.context.timerScheduler,propCallback:this.props.positionX,duration:n,axis:"x",endValue:t}))}snapToPositionY(t,n){this.state.y!==t&&(this.snapToPositionYTimer&&this.snapToPositionYTimer.stop(),this.snapToPositionYTimer=this.snapToPosition({timerScheduler:this.props.noodlNode.context.timerScheduler,propCallback:this.props.positionY,duration:n,axis:"y",endValue:t}))}render(){const t=this.props,n=t.useParentBounds?"parent":void 0;let o;if(React__namespace.Children.count(t.children)>0)o=React__namespace.Children.toArray(t.children)[0];else return null;return React__namespace.createElement(Draggable,{axis:t.axis,bounds:n,disabled:t.enabled===!1,scale:t.scale||0,position:{x:this.state.x,y:this.state.y},onStart:(r,s)=>{setDragValues(s,t),t.onStart&&t.onStart(),this.snapToPositionXTimer&&this.snapToPositionXTimer.stop(),this.snapToPositionYTimer&&this.snapToPositionYTimer.stop()},onStop:(r,s)=>{(t.axis==="x"||t.axis==="both")&&this.setState({x:s.x}),(t.axis==="y"||t.axis==="both")&&this.setState({y:s.y}),t.positionX&&t.positionX(s.x),t.positionY&&t.positionY(s.y),t.onStop&&t.onStop()},onDrag:(r,s)=>{setDragValues(s,t),t.onDrag&&t.onDrag()}},React__namespace.cloneElement(o,{parentLayout:t.parentLayout}))}}const DragNode={name:"Drag",docs:"https://docs.noodl.net/nodes/utilities/drag",allowChildren:!0,noodlNodeAsProp:!0,getReactComponent(){return Drag},initialize(){this._internal.snapPositionX=0,this._internal.snapPositionY=0,this._internal.snapDurationX=300,this._internal.snapDurationY=300},inputs:{"snapToPositionX.do":{group:"Snap To Position X",displayName:"Do",editorName:"Do|Snap To Position X",type:"signal",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{const{snapPositionX:e,snapDurationX:t}=this._internal;this.innerReactComponentRef&&this.innerReactComponentRef.snapToPositionX(e,t)})}},"snapToPositionX.value":{default:0,group:"Snap To Position X",displayName:"Value",editorName:"Value|Snap To Position X",type:"number",set(e){this._internal.snapPositionX=e}},"snapToPositionX.duration":{default:300,group:"Snap To Position X",displayName:"Duration",editorName:"Duration|Snap To Position X",type:"number",set(e){this._internal.snapDurationX=e}},"snapToPositionY.do":{group:"Snap To Position Y",displayName:"Do",editorName:"Do|Snap To Position Y",type:"signal",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{const{snapPositionY:e,snapDurationY:t}=this._internal;this.innerReactComponentRef&&this.innerReactComponentRef.snapToPositionY(e,t)})}},"snapToPositionY.value":{default:0,group:"Snap To Position Y",displayName:"Value",editorName:"Value|Snap To Position Y",type:"number",set(e){this._internal.snapPositionY=e}},"snapToPositionY.duration":{default:300,group:"Snap To Position Y",displayName:"Duration",editorName:"Duration|Snap To Position Y",type:"number",set(e){this._internal.snapDurationY=e}}},inputProps:{enabled:{group:"Drag",displayName:"Enabled",type:"boolean",default:!0},axis:{group:"Drag",displayName:"Axis",type:{name:"enum",enums:[{label:"X",value:"x"},{label:"Y",value:"y"},{label:"Both",value:"both"}]},default:"x"},useParentBounds:{group:"Drag",displayName:"Constrain to parent",type:"boolean",default:!0},inputPositionX:{displayName:"Start Drag X",type:{name:"number"}},inputPositionY:{displayName:"Start Drag Y",type:{name:"number"}},scale:{displayName:"Scale",default:1,type:{name:"number"}}},outputProps:{onStart:{group:"Signals",type:"signal",displayName:"Drag Started"},onStop:{group:"Signals",type:"signal",displayName:"Drag Ended"},onDrag:{group:"Signals",type:"signal",displayName:"Drag Moved"},positionX:{group:"Values",displayName:"Drag X",type:"number"},positionY:{group:"Values",displayName:"Drag Y",type:"number"},deltaX:{group:"Values",displayName:"Delta X",type:"number"},deltaY:{group:"Values",displayName:"Delta Y",type:"number"}}},DragNode$1=createNodeFromReactComponent(DragNode);/*!
50
50
  * better-scroll / core
51
51
  * (c) 2016-2023 ustbhuangyi
52
52
  * Released under the MIT License.
@@ -63,11 +63,11 @@ map({
63
63
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
64
64
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65
65
  PERFORMANCE OF THIS SOFTWARE.
66
- ***************************************************************************** */var extendStatics=function(e,t){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var r in o)Object.prototype.hasOwnProperty.call(o,r)&&(n[r]=o[r])},extendStatics(e,t)};function __extends(e,t){extendStatics(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var __assign$1=function(){return __assign$1=Object.assign||function(t){for(var n,o=1,r=arguments.length;o<r;o++){n=arguments[o];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},__assign$1.apply(this,arguments)};function __spreadArrays$1(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;for(var o=Array(e),r=0,t=0;t<n;t++)for(var s=arguments[t],a=0,l=s.length;a<l;a++,r++)o[r]=s[a];return o}var propertiesConfig$1=[{sourceKey:"scroller.scrollBehaviorX.currentPos",key:"x"},{sourceKey:"scroller.scrollBehaviorY.currentPos",key:"y"},{sourceKey:"scroller.scrollBehaviorX.hasScroll",key:"hasHorizontalScroll"},{sourceKey:"scroller.scrollBehaviorY.hasScroll",key:"hasVerticalScroll"},{sourceKey:"scroller.scrollBehaviorX.contentSize",key:"scrollerWidth"},{sourceKey:"scroller.scrollBehaviorY.contentSize",key:"scrollerHeight"},{sourceKey:"scroller.scrollBehaviorX.maxScrollPos",key:"maxScrollX"},{sourceKey:"scroller.scrollBehaviorY.maxScrollPos",key:"maxScrollY"},{sourceKey:"scroller.scrollBehaviorX.minScrollPos",key:"minScrollX"},{sourceKey:"scroller.scrollBehaviorY.minScrollPos",key:"minScrollY"},{sourceKey:"scroller.scrollBehaviorX.movingDirection",key:"movingDirectionX"},{sourceKey:"scroller.scrollBehaviorY.movingDirection",key:"movingDirectionY"},{sourceKey:"scroller.scrollBehaviorX.direction",key:"directionX"},{sourceKey:"scroller.scrollBehaviorY.direction",key:"directionY"},{sourceKey:"scroller.actions.enabled",key:"enabled"},{sourceKey:"scroller.animater.pending",key:"pending"},{sourceKey:"scroller.animater.stop",key:"stop"},{sourceKey:"scroller.scrollTo",key:"scrollTo"},{sourceKey:"scroller.scrollBy",key:"scrollBy"},{sourceKey:"scroller.scrollToElement",key:"scrollToElement"},{sourceKey:"scroller.resetPosition",key:"resetPosition"}];function warn$3(e){console.error("[BScroll warn]: "+e)}var inBrowser$3=typeof window<"u",ua$3=inBrowser$3&&navigator.userAgent.toLowerCase(),isWeChatDevTools=!!(ua$3&&/wechatdevtools/.test(ua$3)),isAndroid=ua$3&&ua$3.indexOf("android")>0,isIOSBadVersion=function(){if(typeof ua$3=="string"){var e=/os (\d\d?_\d(_\d)?)/,t=e.exec(ua$3);if(!t)return!1;var n=t[1].split("_").map(function(o){return parseInt(o,10)});return n[0]===13&&n[1]>=4}return!1}(),supportsPassive$2=!1;if(inBrowser$3){var EventName$2="test-passive";try{var opts$2={};Object.defineProperty(opts$2,"passive",{get:function(){supportsPassive$2=!0}}),window.addEventListener(EventName$2,function(){},opts$2)}catch{}}function getNow$1(){return window.performance&&window.performance.now&&window.performance.timing?window.performance.now()+window.performance.timing.navigationStart:+new Date}var extend$3=function(e,t){for(var n in t)e[n]=t[n];return e};function isUndef(e){return e==null}function between$1(e,t,n){return e<t?t:e>n?n:e}var elementStyle$3=inBrowser$3&&document.createElement("div").style,vendor$3=function(){if(!inBrowser$3)return!1;for(var e=[{key:"standard",value:"transform"},{key:"webkit",value:"webkitTransform"},{key:"Moz",value:"MozTransform"},{key:"O",value:"OTransform"},{key:"ms",value:"msTransform"}],t=0,n=e;t<n.length;t++){var o=n[t];if(elementStyle$3[o.value]!==void 0)return o.key}return!1}();function prefixStyle$3(e){return vendor$3===!1?e:vendor$3==="standard"?e==="transitionEnd"?"transitionend":e:vendor$3+e.charAt(0).toUpperCase()+e.substr(1)}function getElement(e){return typeof e=="string"?document.querySelector(e):e}function addEvent$2(e,t,n,o){var r=supportsPassive$2?{passive:!1,capture:!!o}:!!o;e.addEventListener(t,n,r)}function removeEvent$2(e,t,n,o){e.removeEventListener(t,n,{capture:!!o})}function maybePrevent$2(e){e.cancelable&&e.preventDefault()}function offset(e){for(var t=0,n=0;e;)t-=e.offsetLeft,n-=e.offsetTop,e=e.offsetParent;return{left:t,top:n}}vendor$3&&vendor$3!=="standard"&&""+vendor$3.toLowerCase();var transform$1=prefixStyle$3("transform"),transition=prefixStyle$3("transition"),hasPerspective=inBrowser$3&&prefixStyle$3("perspective")in elementStyle$3,hasTouch=inBrowser$3&&("ontouchstart"in window||isWeChatDevTools),hasTransition=inBrowser$3&&transition in elementStyle$3,style$1={transform:transform$1,transitionTimingFunction:prefixStyle$3("transitionTimingFunction"),transitionDuration:prefixStyle$3("transitionDuration"),transitionDelay:prefixStyle$3("transitionDelay"),transformOrigin:prefixStyle$3("transformOrigin"),transitionEnd:prefixStyle$3("transitionEnd"),transitionProperty:prefixStyle$3("transitionProperty")},eventTypeMap={touchstart:1,touchmove:1,touchend:1,touchcancel:1,mousedown:2,mousemove:2,mouseup:2};function getRect$1(e){if(e instanceof window.SVGElement){var t=e.getBoundingClientRect();return{top:t.top,left:t.left,width:t.width,height:t.height}}else return{top:e.offsetTop,left:e.offsetLeft,width:e.offsetWidth,height:e.offsetHeight}}function preventDefaultExceptionFn$1(e,t){for(var n in t)if(t[n].test(e[n]))return!0;return!1}var tagExceptionFn=preventDefaultExceptionFn$1;function tap(e,t){var n=document.createEvent("Event");n.initEvent(t,!0,!0),n.pageX=e.pageX,n.pageY=e.pageY,e.target.dispatchEvent(n)}function click(e,t){t===void 0&&(t="click");var n;e.type==="mouseup"?n=e:(e.type==="touchend"||e.type==="touchcancel")&&(n=e.changedTouches[0]);var o={};n&&(o.screenX=n.screenX||0,o.screenY=n.screenY||0,o.clientX=n.clientX||0,o.clientY=n.clientY||0);var r,s=!0,a=!0,l=e.ctrlKey,u=e.shiftKey,d=e.altKey,p=e.metaKey,f={ctrlKey:l,shiftKey:u,altKey:d,metaKey:p};if(typeof MouseEvent<"u")try{r=new MouseEvent(t,extend$3(__assign$1({bubbles:s,cancelable:a},f),o))}catch{g()}else g();function g(){r=document.createEvent("Event"),r.initEvent(t,s,a),extend$3(r,o)}r.forwardedTouchEvent=!0,r._constructed=!0,e.target.dispatchEvent(r)}function dblclick(e){click(e,"dblclick")}var ease$1={swipeBounce:{style:"cubic-bezier(0.25, 0.46, 0.45, 0.94)",fn:function(e){return e*(2-e)}},bounce:{style:"cubic-bezier(0.165, 0.84, 0.44, 1)",fn:function(e){return 1- --e*e*e*e}}},DEFAULT_INTERVAL=1e3/60,windowCompat=inBrowser$3&&window;function noop$1(){}var requestAnimationFrame$1=function(){return inBrowser$3?windowCompat.requestAnimationFrame||windowCompat.webkitRequestAnimationFrame||windowCompat.mozRequestAnimationFrame||windowCompat.oRequestAnimationFrame||function(e){return window.setTimeout(e,e.interval||DEFAULT_INTERVAL)}:noop$1}(),cancelAnimationFrame=function(){return inBrowser$3?windowCompat.cancelAnimationFrame||windowCompat.webkitCancelAnimationFrame||windowCompat.mozCancelAnimationFrame||windowCompat.oCancelAnimationFrame||function(e){window.clearTimeout(e)}:noop$1}(),noop=function(e){},sharedPropertyDefinition={enumerable:!0,configurable:!0,get:noop,set:noop},getProperty=function(e,t){for(var n=t.split("."),o=0;o<n.length-1;o++)if(e=e[n[o]],typeof e!="object"||!e)return;var r=n.pop();return typeof e[r]=="function"?function(){return e[r].apply(e,arguments)}:e[r]},setProperty=function(e,t,n){for(var o=t.split("."),r,s=0;s<o.length-1;s++)r=o[s],e[r]||(e[r]={}),e=e[r];e[o.pop()]=n};function propertiesProxy(e,t,n){sharedPropertyDefinition.get=function(){return getProperty(this,t)},sharedPropertyDefinition.set=function(r){setProperty(this,t,r)},Object.defineProperty(e,n,sharedPropertyDefinition)}var EventEmitter$1=function(){function e(t){this.events={},this.eventTypes={},this.registerType(t)}return e.prototype.on=function(t,n,o){return o===void 0&&(o=this),this.hasType(t),this.events[t]||(this.events[t]=[]),this.events[t].push([n,o]),this},e.prototype.once=function(t,n,o){var r=this;o===void 0&&(o=this),this.hasType(t);var s=function(){for(var a=[],l=0;l<arguments.length;l++)a[l]=arguments[l];r.off(t,s);var u=n.apply(o,a);if(u===!0)return u};return s.fn=n,this.on(t,s),this},e.prototype.off=function(t,n){if(!t&&!n)return this.events={},this;if(t){if(this.hasType(t),!n)return this.events[t]=[],this;var o=this.events[t];if(!o)return this;for(var r=o.length;r--;)(o[r][0]===n||o[r][0]&&o[r][0].fn===n)&&o.splice(r,1);return this}},e.prototype.trigger=function(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];this.hasType(t);var r=this.events[t];if(r)for(var s=r.length,a=__spreadArrays$1(r),l,u=0;u<s;u++){var d=a[u],p=d[0],f=d[1];if(p&&(l=p.apply(f,n),l===!0))return l}},e.prototype.registerType=function(t){var n=this;t.forEach(function(o){n.eventTypes[o]=o})},e.prototype.destroy=function(){this.events={},this.eventTypes={}},e.prototype.hasType=function(t){var n=this.eventTypes,o=n[t]===t;o||warn$3('EventEmitter has used unknown event type: "'+t+'", should be oneof ['+(""+Object.keys(n).map(function(r){return JSON.stringify(r)}))+"]")},e}(),EventRegister$2=function(){function e(t,n){this.wrapper=t,this.events=n,this.addDOMEvents()}return e.prototype.destroy=function(){this.removeDOMEvents(),this.events=[]},e.prototype.addDOMEvents=function(){this.handleDOMEvents(addEvent$2)},e.prototype.removeDOMEvents=function(){this.handleDOMEvents(removeEvent$2)},e.prototype.handleDOMEvents=function(t){var n=this,o=this.wrapper;this.events.forEach(function(r){t(o,r.name,n,!!r.capture)})},e.prototype.handleEvent=function(t){var n=t.type;this.events.some(function(o){return o.name===n?(o.handler(t),!0):!1})},e}(),CustomOptions=function(){function e(){}return e}(),OptionsConstructor=function(e){__extends(t,e);function t(){var n=e.call(this)||this;return n.startX=0,n.startY=0,n.scrollX=!1,n.scrollY=!0,n.freeScroll=!1,n.directionLockThreshold=0,n.eventPassthrough="",n.click=!1,n.dblclick=!1,n.tap="",n.bounce={top:!0,bottom:!0,left:!0,right:!0},n.bounceTime=800,n.momentum=!0,n.momentumLimitTime=300,n.momentumLimitDistance=15,n.swipeTime=2500,n.swipeBounceTime=500,n.deceleration=.0015,n.flickLimitTime=200,n.flickLimitDistance=100,n.resizePolling=60,n.probeType=0,n.stopPropagation=!1,n.preventDefault=!0,n.preventDefaultException={tagName:/^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/},n.tagException={tagName:/^TEXTAREA$/},n.HWCompositing=!0,n.useTransition=!0,n.bindToWrapper=!1,n.bindToTarget=!1,n.disableMouse=hasTouch,n.disableTouch=!hasTouch,n.autoBlur=!0,n.autoEndDistance=5,n.outOfBoundaryDampingFactor=1/3,n.specifiedIndexAsContent=0,n.quadrant=1,n}return t.prototype.merge=function(n){if(!n)return this;for(var o in n){if(o==="bounce"){this.bounce=this.resolveBounce(n[o]);continue}this[o]=n[o]}return this},t.prototype.process=function(){return this.translateZ=this.HWCompositing&&hasPerspective?" translateZ(1px)":"",this.useTransition=this.useTransition&&hasTransition,this.preventDefault=!this.eventPassthrough&&this.preventDefault,this.scrollX=this.eventPassthrough==="horizontal"?!1:this.scrollX,this.scrollY=this.eventPassthrough==="vertical"?!1:this.scrollY,this.freeScroll=this.freeScroll&&!this.eventPassthrough,this.scrollX=this.freeScroll?!0:this.scrollX,this.scrollY=this.freeScroll?!0:this.scrollY,this.directionLockThreshold=this.eventPassthrough?0:this.directionLockThreshold,this},t.prototype.resolveBounce=function(n){var o={top:!0,right:!0,bottom:!0,left:!0},r={top:!1,right:!1,bottom:!1,left:!1},s;return typeof n=="object"?s=extend$3(o,n):s=n?o:r,s},t}(CustomOptions),ActionsHandler=function(){function e(t,n){this.wrapper=t,this.options=n,this.hooks=new EventEmitter$1(["beforeStart","start","move","end","click"]),this.handleDOMEvents()}return e.prototype.handleDOMEvents=function(){var t=this.options,n=t.bindToWrapper,o=t.disableMouse,r=t.disableTouch,s=t.click,a=this.wrapper,l=n?a:window,u=[],d=[],p=!r,f=!o;s&&u.push({name:"click",handler:this.click.bind(this),capture:!0}),p&&(u.push({name:"touchstart",handler:this.start.bind(this)}),d.push({name:"touchmove",handler:this.move.bind(this)},{name:"touchend",handler:this.end.bind(this)},{name:"touchcancel",handler:this.end.bind(this)})),f&&(u.push({name:"mousedown",handler:this.start.bind(this)}),d.push({name:"mousemove",handler:this.move.bind(this)},{name:"mouseup",handler:this.end.bind(this)})),this.wrapperEventRegister=new EventRegister$2(a,u),this.targetEventRegister=new EventRegister$2(l,d)},e.prototype.beforeHandler=function(t,n){var o=this.options,r=o.preventDefault,s=o.stopPropagation,a=o.preventDefaultException,l={start:function(){return r&&!preventDefaultExceptionFn$1(t.target,a)},end:function(){return r&&!preventDefaultExceptionFn$1(t.target,a)},move:function(){return r}};l[n]()&&t.preventDefault(),s&&t.stopPropagation()},e.prototype.setInitiated=function(t){t===void 0&&(t=0),this.initiated=t},e.prototype.start=function(t){var n=eventTypeMap[t.type];if(!(this.initiated&&this.initiated!==n)){if(this.setInitiated(n),tagExceptionFn(t.target,this.options.tagException)){this.setInitiated();return}if(!(n===2&&t.button!==0)&&!this.hooks.trigger(this.hooks.eventTypes.beforeStart,t)){this.beforeHandler(t,"start");var o=t.touches?t.touches[0]:t;this.pointX=o.pageX,this.pointY=o.pageY,this.hooks.trigger(this.hooks.eventTypes.start,t)}}},e.prototype.move=function(t){if(eventTypeMap[t.type]===this.initiated){this.beforeHandler(t,"move");var n=t.touches?t.touches[0]:t,o=n.pageX-this.pointX,r=n.pageY-this.pointY;if(this.pointX=n.pageX,this.pointY=n.pageY,!this.hooks.trigger(this.hooks.eventTypes.move,{deltaX:o,deltaY:r,e:t})){var s=document.documentElement.scrollLeft||window.pageXOffset||document.body.scrollLeft,a=document.documentElement.scrollTop||window.pageYOffset||document.body.scrollTop,l=this.pointX-s,u=this.pointY-a,d=this.options.autoEndDistance;(l>document.documentElement.clientWidth-d||u>document.documentElement.clientHeight-d||l<d||u<d)&&this.end(t)}}},e.prototype.end=function(t){eventTypeMap[t.type]===this.initiated&&(this.setInitiated(),this.beforeHandler(t,"end"),this.hooks.trigger(this.hooks.eventTypes.end,t))},e.prototype.click=function(t){this.hooks.trigger(this.hooks.eventTypes.click,t)},e.prototype.setContent=function(t){t!==this.wrapper&&(this.wrapper=t,this.rebindDOMEvents())},e.prototype.rebindDOMEvents=function(){this.wrapperEventRegister.destroy(),this.targetEventRegister.destroy(),this.handleDOMEvents()},e.prototype.destroy=function(){this.wrapperEventRegister.destroy(),this.targetEventRegister.destroy(),this.hooks.destroy()},e}(),translaterMetaData={x:["translateX","px"],y:["translateY","px"]},Translater=function(){function e(t){this.setContent(t),this.hooks=new EventEmitter$1(["beforeTranslate","translate"])}return e.prototype.getComputedPosition=function(){var t=window.getComputedStyle(this.content,null),n=t[style$1.transform].split(")")[0].split(", "),o=+(n[12]||n[4])||0,r=+(n[13]||n[5])||0;return{x:o,y:r}},e.prototype.translate=function(t){var n=[];Object.keys(t).forEach(function(o){if(translaterMetaData[o]){var r=translaterMetaData[o][0];if(r){var s=translaterMetaData[o][1],a=t[o];n.push(r+"("+a+s+")")}}}),this.hooks.trigger(this.hooks.eventTypes.beforeTranslate,n,t),this.style[style$1.transform]=n.join(" "),this.hooks.trigger(this.hooks.eventTypes.translate,t)},e.prototype.setContent=function(t){this.content!==t&&(this.content=t,this.style=t.style)},e.prototype.destroy=function(){this.hooks.destroy()},e}(),Base$1=function(){function e(t,n,o){this.translater=n,this.options=o,this.timer=0,this.hooks=new EventEmitter$1(["move","end","beforeForceStop","forceStop","callStop","time","timeFunction"]),this.setContent(t)}return e.prototype.translate=function(t){this.translater.translate(t)},e.prototype.setPending=function(t){this.pending=t},e.prototype.setForceStopped=function(t){this.forceStopped=t},e.prototype.setCallStop=function(t){this.callStopWhenPending=t},e.prototype.setContent=function(t){this.content!==t&&(this.content=t,this.style=t.style,this.stop())},e.prototype.clearTimer=function(){this.timer&&(cancelAnimationFrame(this.timer),this.timer=0)},e.prototype.destroy=function(){this.hooks.destroy(),cancelAnimationFrame(this.timer)},e}(),isValidPostion=function(e,t,n,o){var r=function(d,p){var f=d-p,g=f>0?-1:f<0?1:0;return g},s=r(t.x,e.x),a=r(t.y,e.y),l=n.x-o.x,u=n.y-o.y;return s*l<=0&&a*u<=0},Transition$1=function(e){__extends(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.startProbe=function(n,o){var r=this,s=n,a=function(){var l=r.translater.getComputedPosition();isValidPostion(n,o,l,s)&&r.hooks.trigger(r.hooks.eventTypes.move,l),r.pending||(r.callStopWhenPending?r.callStopWhenPending=!1:r.hooks.trigger(r.hooks.eventTypes.end,l)),s=l,r.pending&&(r.timer=requestAnimationFrame$1(a))};this.callStopWhenPending&&this.setCallStop(!1),cancelAnimationFrame(this.timer),a()},t.prototype.transitionTime=function(n){n===void 0&&(n=0),this.style[style$1.transitionDuration]=n+"ms",this.hooks.trigger(this.hooks.eventTypes.time,n)},t.prototype.transitionTimingFunction=function(n){this.style[style$1.transitionTimingFunction]=n,this.hooks.trigger(this.hooks.eventTypes.timeFunction,n)},t.prototype.transitionProperty=function(){this.style[style$1.transitionProperty]=style$1.transform},t.prototype.move=function(n,o,r,s){this.setPending(r>0),this.transitionTimingFunction(s),this.transitionProperty(),this.transitionTime(r),this.translate(o);var a=this.options.probeType===3;r&&a&&this.startProbe(n,o),r||(this._reflow=this.content.offsetHeight,a&&this.hooks.trigger(this.hooks.eventTypes.move,o),this.hooks.trigger(this.hooks.eventTypes.end,o))},t.prototype.doStop=function(){var n=this.pending;if(this.setForceStopped(!1),this.setCallStop(!1),n){this.setPending(!1),cancelAnimationFrame(this.timer);var o=this.translater.getComputedPosition(),r=o.x,s=o.y;this.transitionTime(),this.translate({x:r,y:s}),this.setForceStopped(!0),this.setCallStop(!0),this.hooks.trigger(this.hooks.eventTypes.forceStop,{x:r,y:s})}return n},t.prototype.stop=function(){var n=this.doStop();n&&this.hooks.trigger(this.hooks.eventTypes.callStop)},t}(Base$1),Animation$1=function(e){__extends(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.move=function(n,o,r,s){if(!r){this.translate(o),this.options.probeType===3&&this.hooks.trigger(this.hooks.eventTypes.move,o),this.hooks.trigger(this.hooks.eventTypes.end,o);return}this.animate(n,o,r,s)},t.prototype.animate=function(n,o,r,s){var a=this,l=getNow$1(),u=l+r,d=this.options.probeType===3,p=function(){var f=getNow$1();if(f>=u){a.translate(o),d&&a.hooks.trigger(a.hooks.eventTypes.move,o),a.hooks.trigger(a.hooks.eventTypes.end,o);return}f=(f-l)/r;var g=s(f),b={};Object.keys(o).forEach(function(_){var T=n[_],A=o[_];b[_]=(A-T)*g+T}),a.translate(b),d&&a.hooks.trigger(a.hooks.eventTypes.move,b),a.pending&&(a.timer=requestAnimationFrame$1(p)),a.pending||(a.callStopWhenPending?a.callStopWhenPending=!1:a.hooks.trigger(a.hooks.eventTypes.end,o))};this.setPending(!0),this.callStopWhenPending&&this.setCallStop(!1),cancelAnimationFrame(this.timer),p()},t.prototype.doStop=function(){var n=this.pending;if(this.setForceStopped(!1),this.setCallStop(!1),n){this.setPending(!1),cancelAnimationFrame(this.timer);var o=this.translater.getComputedPosition();this.setForceStopped(!0),this.setCallStop(!0),this.hooks.trigger(this.hooks.eventTypes.forceStop,o)}return n},t.prototype.stop=function(){var n=this.doStop();n&&this.hooks.trigger(this.hooks.eventTypes.callStop)},t}(Base$1);function createAnimater(e,t,n){var o=n.useTransition,r={};return Object.defineProperty(r,"probeType",{enumerable:!0,configurable:!1,get:function(){return n.probeType}}),o?new Transition$1(e,t,r):new Animation$1(e,t,r)}var Behavior=function(){function e(t,n,o){this.wrapper=t,this.options=o,this.hooks=new EventEmitter$1(["beforeComputeBoundary","computeBoundary","momentum","end","ignoreHasScroll"]),this.refresh(n)}return e.prototype.start=function(){this.dist=0,this.setMovingDirection(0),this.setDirection(0)},e.prototype.move=function(t){return t=this.hasScroll?t:0,this.setMovingDirection(t),this.performDampingAlgorithm(t,this.options.outOfBoundaryDampingFactor)},e.prototype.setMovingDirection=function(t){this.movingDirection=t>0?-1:t<0?1:0},e.prototype.setDirection=function(t){this.direction=t>0?-1:t<0?1:0},e.prototype.performDampingAlgorithm=function(t,n){var o=this.currentPos+t;return(o>this.minScrollPos||o<this.maxScrollPos)&&(o>this.minScrollPos&&this.options.bounces[0]||o<this.maxScrollPos&&this.options.bounces[1]?o=this.currentPos+t*n:o=o>this.minScrollPos?this.minScrollPos:this.maxScrollPos),o},e.prototype.end=function(t){var n={duration:0},o=Math.abs(this.currentPos-this.startPos);if(this.options.momentum&&t<this.options.momentumLimitTime&&o>this.options.momentumLimitDistance){var r=this.direction===-1&&this.options.bounces[0]||this.direction===1&&this.options.bounces[1]?this.wrapperSize:0;n=this.hasScroll?this.momentum(this.currentPos,this.startPos,t,this.maxScrollPos,this.minScrollPos,r,this.options):{destination:this.currentPos,duration:0}}else this.hooks.trigger(this.hooks.eventTypes.end,n);return n},e.prototype.momentum=function(t,n,o,r,s,a,l){l===void 0&&(l=this.options);var u=t-n,d=Math.abs(u)/o,p=l.deceleration,f=l.swipeBounceTime,g=l.swipeTime,b=Math.min(g,d*2/p),_={destination:t+d*d/p*(u<0?-1:1),duration:b,rate:15};return this.hooks.trigger(this.hooks.eventTypes.momentum,_,u),_.destination<r?(_.destination=a?Math.max(r-a/4,r-a/_.rate*d):r,_.duration=f):_.destination>s&&(_.destination=a?Math.min(s+a/4,s+a/_.rate*d):s,_.duration=f),_.destination=Math.round(_.destination),_},e.prototype.updateDirection=function(){var t=this.currentPos-this.absStartPos;this.setDirection(t)},e.prototype.refresh=function(t){var n=this.options.rect,o=n.size,r=n.position,s=window.getComputedStyle(this.wrapper,null).position==="static",a=getRect$1(this.wrapper);this.wrapperSize=this.wrapper[o==="width"?"clientWidth":"clientHeight"],this.setContent(t);var l=getRect$1(this.content);this.contentSize=l[o],this.relativeOffset=l[r],s&&(this.relativeOffset-=a[r]),this.computeBoundary(),this.setDirection(0)},e.prototype.setContent=function(t){t!==this.content&&(this.content=t,this.resetState())},e.prototype.resetState=function(){this.currentPos=0,this.startPos=0,this.dist=0,this.setDirection(0),this.setMovingDirection(0),this.resetStartPos()},e.prototype.computeBoundary=function(){this.hooks.trigger(this.hooks.eventTypes.beforeComputeBoundary);var t={minScrollPos:0,maxScrollPos:this.wrapperSize-this.contentSize};t.maxScrollPos<0&&(t.maxScrollPos-=this.relativeOffset,this.options.specifiedIndexAsContent===0&&(t.minScrollPos=-this.relativeOffset)),this.hooks.trigger(this.hooks.eventTypes.computeBoundary,t),this.minScrollPos=t.minScrollPos,this.maxScrollPos=t.maxScrollPos,this.hasScroll=this.options.scrollable&&this.maxScrollPos<this.minScrollPos,!this.hasScroll&&this.minScrollPos<this.maxScrollPos&&(this.maxScrollPos=this.minScrollPos,this.contentSize=this.wrapperSize)},e.prototype.updatePosition=function(t){this.currentPos=t},e.prototype.getCurrentPos=function(){return this.currentPos},e.prototype.checkInBoundary=function(){var t=this.adjustPosition(this.currentPos),n=t===this.getCurrentPos();return{position:t,inBoundary:n}},e.prototype.adjustPosition=function(t){return!this.hasScroll&&!this.hooks.trigger(this.hooks.eventTypes.ignoreHasScroll)?t=this.minScrollPos:t>this.minScrollPos?t=this.minScrollPos:t<this.maxScrollPos&&(t=this.maxScrollPos),t},e.prototype.updateStartPos=function(){this.startPos=this.currentPos},e.prototype.updateAbsStartPos=function(){this.absStartPos=this.currentPos},e.prototype.resetStartPos=function(){this.updateStartPos(),this.updateAbsStartPos()},e.prototype.getAbsDist=function(t){return this.dist+=t,Math.abs(this.dist)},e.prototype.destroy=function(){this.hooks.destroy()},e}(),_a,_b,_c,_d,PassthroughHandlers=(_a={},_a.yes=function(e){return!0},_a.no=function(e){return maybePrevent$2(e),!1},_a),DirectionMap=(_b={},_b.horizontal=(_c={},_c.yes="horizontal",_c.no="vertical",_c),_b.vertical=(_d={},_d.yes="vertical",_d.no="horizontal",_d),_b),DirectionLockAction=function(){function e(t,n,o){this.directionLockThreshold=t,this.freeScroll=n,this.eventPassthrough=o,this.reset()}return e.prototype.reset=function(){this.directionLocked=""},e.prototype.checkMovingDirection=function(t,n,o){return this.computeDirectionLock(t,n),this.handleEventPassthrough(o)},e.prototype.adjustDelta=function(t,n){return this.directionLocked==="horizontal"?n=0:this.directionLocked==="vertical"&&(t=0),{deltaX:t,deltaY:n}},e.prototype.computeDirectionLock=function(t,n){this.directionLocked===""&&!this.freeScroll&&(t>n+this.directionLockThreshold?this.directionLocked="horizontal":n>=t+this.directionLockThreshold?this.directionLocked="vertical":this.directionLocked="none")},e.prototype.handleEventPassthrough=function(t){var n=DirectionMap[this.directionLocked];if(n){if(this.eventPassthrough===n.yes)return PassthroughHandlers.yes(t);if(this.eventPassthrough===n.no)return PassthroughHandlers.no(t)}return!1},e}(),applyQuadrantTransformation=function(e,t,n){return n===2?[t,-e]:n===3?[-e,-t]:n===4?[-t,e]:[e,t]},ScrollerActions=function(){function e(t,n,o,r,s){this.hooks=new EventEmitter$1(["start","beforeMove","scrollStart","scroll","beforeEnd","end","scrollEnd","contentNotMoved","detectMovingDirection","coordinateTransformation"]),this.scrollBehaviorX=t,this.scrollBehaviorY=n,this.actionsHandler=o,this.animater=r,this.options=s,this.directionLockAction=new DirectionLockAction(s.directionLockThreshold,s.freeScroll,s.eventPassthrough),this.enabled=!0,this.bindActionsHandler()}return e.prototype.bindActionsHandler=function(){var t=this;this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.start,function(n){return t.enabled?t.handleStart(n):!0}),this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.move,function(n){var o=n.deltaX,r=n.deltaY,s=n.e;if(!t.enabled)return!0;var a=applyQuadrantTransformation(o,r,t.options.quadrant),l=a[0],u=a[1],d={deltaX:l,deltaY:u};return t.hooks.trigger(t.hooks.eventTypes.coordinateTransformation,d),t.handleMove(d.deltaX,d.deltaY,s)}),this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.end,function(n){return t.enabled?t.handleEnd(n):!0}),this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.click,function(n){t.enabled&&!n._constructed&&t.handleClick(n)})},e.prototype.handleStart=function(t){var n=getNow$1();this.fingerMoved=!1,this.contentMoved=!1,this.startTime=n,this.directionLockAction.reset(),this.scrollBehaviorX.start(),this.scrollBehaviorY.start(),this.animater.doStop(),this.scrollBehaviorX.resetStartPos(),this.scrollBehaviorY.resetStartPos(),this.hooks.trigger(this.hooks.eventTypes.start,t)},e.prototype.handleMove=function(t,n,o){if(!this.hooks.trigger(this.hooks.eventTypes.beforeMove,o)){var r=this.scrollBehaviorX.getAbsDist(t),s=this.scrollBehaviorY.getAbsDist(n),a=getNow$1();if(this.checkMomentum(r,s,a))return!0;if(this.directionLockAction.checkMovingDirection(r,s,o))return this.actionsHandler.setInitiated(),!0;var l=this.directionLockAction.adjustDelta(t,n),u=this.scrollBehaviorX.getCurrentPos(),d=this.scrollBehaviorX.move(l.deltaX),p=this.scrollBehaviorY.getCurrentPos(),f=this.scrollBehaviorY.move(l.deltaY);if(!this.hooks.trigger(this.hooks.eventTypes.detectMovingDirection)){this.fingerMoved||(this.fingerMoved=!0);var g=d!==u||f!==p;!this.contentMoved&&!g&&this.hooks.trigger(this.hooks.eventTypes.contentNotMoved),!this.contentMoved&&g&&(this.contentMoved=!0,this.hooks.trigger(this.hooks.eventTypes.scrollStart)),this.contentMoved&&g&&(this.animater.translate({x:d,y:f}),this.dispatchScroll(a))}}},e.prototype.dispatchScroll=function(t){t-this.startTime>this.options.momentumLimitTime&&(this.startTime=t,this.scrollBehaviorX.updateStartPos(),this.scrollBehaviorY.updateStartPos(),this.options.probeType===1&&this.hooks.trigger(this.hooks.eventTypes.scroll,this.getCurrentPos())),this.options.probeType>1&&this.hooks.trigger(this.hooks.eventTypes.scroll,this.getCurrentPos())},e.prototype.checkMomentum=function(t,n,o){return o-this.endTime>this.options.momentumLimitTime&&n<this.options.momentumLimitDistance&&t<this.options.momentumLimitDistance},e.prototype.handleEnd=function(t){if(!this.hooks.trigger(this.hooks.eventTypes.beforeEnd,t)){var n=this.getCurrentPos();if(this.scrollBehaviorX.updateDirection(),this.scrollBehaviorY.updateDirection(),this.hooks.trigger(this.hooks.eventTypes.end,t,n))return!0;n=this.ensureIntegerPos(n),this.animater.translate(n),this.endTime=getNow$1();var o=this.endTime-this.startTime;this.hooks.trigger(this.hooks.eventTypes.scrollEnd,n,o)}},e.prototype.ensureIntegerPos=function(t){this.ensuringInteger=!0;var n=t.x,o=t.y,r=this.scrollBehaviorX,s=r.minScrollPos,a=r.maxScrollPos,l=this.scrollBehaviorY,u=l.minScrollPos,d=l.maxScrollPos;return n=n>0?Math.ceil(n):Math.floor(n),o=o>0?Math.ceil(o):Math.floor(o),n=between$1(n,a,s),o=between$1(o,d,u),{x:n,y:o}},e.prototype.handleClick=function(t){preventDefaultExceptionFn$1(t.target,this.options.preventDefaultException)||(maybePrevent$2(t),t.stopPropagation())},e.prototype.getCurrentPos=function(){return{x:this.scrollBehaviorX.getCurrentPos(),y:this.scrollBehaviorY.getCurrentPos()}},e.prototype.refresh=function(){this.endTime=0},e.prototype.destroy=function(){this.hooks.destroy()},e}();function createActionsHandlerOptions(e){var t=["click","bindToWrapper","disableMouse","disableTouch","preventDefault","stopPropagation","tagException","preventDefaultException","autoEndDistance"].reduce(function(n,o){return n[o]=e[o],n},{});return t}function createBehaviorOptions(e,t,n,o){var r=["momentum","momentumLimitTime","momentumLimitDistance","deceleration","swipeBounceTime","swipeTime","outOfBoundaryDampingFactor","specifiedIndexAsContent"].reduce(function(s,a){return s[a]=e[a],s},{});return r.scrollable=!!e[t],r.bounces=n,r.rect=o,r}function bubbling(e,t,n){n.forEach(function(o){var r,s;typeof o=="string"?r=s=o:(r=o.source,s=o.target),e.on(r,function(){for(var a=[],l=0;l<arguments.length;l++)a[l]=arguments[l];return t.trigger.apply(t,__spreadArrays$1([s],a))})})}function isSamePoint(e,t){for(var n=Object.keys(e),o=0,r=n;o<r.length;o++){var s=r[o];if(e[s]!==t[s])return!1}return!0}var MIN_SCROLL_DISTANCE=1,Scroller=function(){function e(t,n,o){this.wrapper=t,this.content=n,this.resizeTimeout=0,this.hooks=new EventEmitter$1(["beforeStart","beforeMove","beforeScrollStart","scrollStart","scroll","beforeEnd","scrollEnd","resize","touchEnd","end","flick","scrollCancel","momentum","scrollTo","minDistanceScroll","scrollToElement","beforeRefresh"]),this.options=o;var r=this.options.bounce,s=r.left,a=r.right,l=r.top,u=r.bottom;this.scrollBehaviorX=new Behavior(t,n,createBehaviorOptions(o,"scrollX",[s,a],{size:"width",position:"left"})),this.scrollBehaviorY=new Behavior(t,n,createBehaviorOptions(o,"scrollY",[l,u],{size:"height",position:"top"})),this.translater=new Translater(this.content),this.animater=createAnimater(this.content,this.translater,this.options),this.actionsHandler=new ActionsHandler(this.options.bindToTarget?this.content:t,createActionsHandlerOptions(this.options)),this.actions=new ScrollerActions(this.scrollBehaviorX,this.scrollBehaviorY,this.actionsHandler,this.animater,this.options);var d=this.resize.bind(this);this.resizeRegister=new EventRegister$2(window,[{name:"orientationchange",handler:d},{name:"resize",handler:d}]),this.registerTransitionEnd(),this.init()}return e.prototype.init=function(){var t=this;this.bindTranslater(),this.bindAnimater(),this.bindActions(),this.hooks.on(this.hooks.eventTypes.scrollEnd,function(){t.togglePointerEvents(!0)})},e.prototype.registerTransitionEnd=function(){this.transitionEndRegister=new EventRegister$2(this.content,[{name:style$1.transitionEnd,handler:this.transitionEnd.bind(this)}])},e.prototype.bindTranslater=function(){var t=this,n=this.translater.hooks;n.on(n.eventTypes.beforeTranslate,function(o){t.options.translateZ&&o.push(t.options.translateZ)}),n.on(n.eventTypes.translate,function(o){var r=t.getCurrentPos();if(t.updatePositions(o),t.actions.ensuringInteger===!0){t.actions.ensuringInteger=!1;return}(o.x!==r.x||o.y!==r.y)&&t.togglePointerEvents(!1)})},e.prototype.bindAnimater=function(){var t=this;this.animater.hooks.on(this.animater.hooks.eventTypes.end,function(n){t.resetPosition(t.options.bounceTime)||(t.animater.setPending(!1),t.hooks.trigger(t.hooks.eventTypes.scrollEnd,n))}),bubbling(this.animater.hooks,this.hooks,[{source:this.animater.hooks.eventTypes.move,target:this.hooks.eventTypes.scroll},{source:this.animater.hooks.eventTypes.forceStop,target:this.hooks.eventTypes.scrollEnd}])},e.prototype.bindActions=function(){var t=this,n=this.actions;bubbling(n.hooks,this.hooks,[{source:n.hooks.eventTypes.start,target:this.hooks.eventTypes.beforeStart},{source:n.hooks.eventTypes.start,target:this.hooks.eventTypes.beforeScrollStart},{source:n.hooks.eventTypes.beforeMove,target:this.hooks.eventTypes.beforeMove},{source:n.hooks.eventTypes.scrollStart,target:this.hooks.eventTypes.scrollStart},{source:n.hooks.eventTypes.scroll,target:this.hooks.eventTypes.scroll},{source:n.hooks.eventTypes.beforeEnd,target:this.hooks.eventTypes.beforeEnd}]),n.hooks.on(n.hooks.eventTypes.end,function(o,r){if(t.hooks.trigger(t.hooks.eventTypes.touchEnd,r),t.hooks.trigger(t.hooks.eventTypes.end,r)||!n.fingerMoved&&(t.hooks.trigger(t.hooks.eventTypes.scrollCancel),t.checkClick(o)))return!0;if(t.resetPosition(t.options.bounceTime,ease$1.bounce))return t.animater.setForceStopped(!1),!0}),n.hooks.on(n.hooks.eventTypes.scrollEnd,function(o,r){var s=Math.abs(o.x-t.scrollBehaviorX.startPos),a=Math.abs(o.y-t.scrollBehaviorY.startPos);if(t.checkFlick(r,s,a)){t.animater.setForceStopped(!1),t.hooks.trigger(t.hooks.eventTypes.flick);return}if(t.momentum(o,r)){t.animater.setForceStopped(!1);return}n.contentMoved&&t.hooks.trigger(t.hooks.eventTypes.scrollEnd,o),t.animater.forceStopped&&t.animater.setForceStopped(!1)})},e.prototype.checkFlick=function(t,n,o){var r=1;if(this.hooks.events.flick.length>1&&t<this.options.flickLimitTime&&n<this.options.flickLimitDistance&&o<this.options.flickLimitDistance&&(o>r||n>r))return!0},e.prototype.momentum=function(t,n){var o={time:0,easing:ease$1.swiper,newX:t.x,newY:t.y},r=this.scrollBehaviorX.end(n),s=this.scrollBehaviorY.end(n);if(o.newX=isUndef(r.destination)?o.newX:r.destination,o.newY=isUndef(s.destination)?o.newY:s.destination,o.time=Math.max(r.duration,s.duration),this.hooks.trigger(this.hooks.eventTypes.momentum,o,this),o.newX!==t.x||o.newY!==t.y)return(o.newX>this.scrollBehaviorX.minScrollPos||o.newX<this.scrollBehaviorX.maxScrollPos||o.newY>this.scrollBehaviorY.minScrollPos||o.newY<this.scrollBehaviorY.maxScrollPos)&&(o.easing=ease$1.swipeBounce),this.scrollTo(o.newX,o.newY,o.time,o.easing),!0},e.prototype.checkClick=function(t){var n={preventClick:this.animater.forceStopped};if(this.hooks.trigger(this.hooks.eventTypes.checkClick))return this.animater.setForceStopped(!1),!0;if(!n.preventClick){var o=this.options.dblclick,r=!1;if(o&&this.lastClickTime){var s=o.delay,a=s===void 0?300:s;getNow$1()-this.lastClickTime<a&&(r=!0,dblclick(t))}return this.options.tap&&tap(t,this.options.tap),this.options.click&&!preventDefaultExceptionFn$1(t.target,this.options.preventDefaultException)&&click(t),this.lastClickTime=r?null:getNow$1(),!0}return!1},e.prototype.resize=function(){var t=this;this.actions.enabled&&(isAndroid&&(this.wrapper.scrollTop=0),clearTimeout(this.resizeTimeout),this.resizeTimeout=window.setTimeout(function(){t.hooks.trigger(t.hooks.eventTypes.resize)},this.options.resizePolling))},e.prototype.transitionEnd=function(t){if(!(t.target!==this.content||!this.animater.pending)){var n=this.animater;n.transitionTime(),this.resetPosition(this.options.bounceTime,ease$1.bounce)||(this.animater.setPending(!1),this.options.probeType!==3&&this.hooks.trigger(this.hooks.eventTypes.scrollEnd,this.getCurrentPos()))}},e.prototype.togglePointerEvents=function(t){t===void 0&&(t=!0);for(var n=this.content.children.length?this.content.children:[this.content],o=t?"auto":"none",r=0;r<n.length;r++){var s=n[r];s.isBScrollContainer||(s.style.pointerEvents=o)}},e.prototype.refresh=function(t){var n=this.setContent(t);this.hooks.trigger(this.hooks.eventTypes.beforeRefresh),this.scrollBehaviorX.refresh(t),this.scrollBehaviorY.refresh(t),n&&(this.translater.setContent(t),this.animater.setContent(t),this.transitionEndRegister.destroy(),this.registerTransitionEnd(),this.options.bindToTarget&&this.actionsHandler.setContent(t)),this.actions.refresh(),this.wrapperOffset=offset(this.wrapper)},e.prototype.setContent=function(t){var n=t!==this.content;return n&&(this.content=t),n},e.prototype.scrollBy=function(t,n,o,r){o===void 0&&(o=0);var s=this.getCurrentPos(),a=s.x,l=s.y;r=r||ease$1.bounce,t+=a,n+=l,this.scrollTo(t,n,o,r)},e.prototype.scrollTo=function(t,n,o,r,s){o===void 0&&(o=0),r===void 0&&(r=ease$1.bounce),s===void 0&&(s={start:{},end:{}});var a=this.options.useTransition?r.style:r.fn,l=this.getCurrentPos(),u=__assign$1({x:l.x,y:l.y},s.start),d=__assign$1({x:t,y:n},s.end);if(this.hooks.trigger(this.hooks.eventTypes.scrollTo,d),!isSamePoint(u,d)){var p=Math.abs(d.x-u.x),f=Math.abs(d.y-u.y);p<MIN_SCROLL_DISTANCE&&f<MIN_SCROLL_DISTANCE&&(o=0,this.hooks.trigger(this.hooks.eventTypes.minDistanceScroll)),this.animater.move(u,d,o,a)}},e.prototype.scrollToElement=function(t,n,o,r,s){var a=getElement(t),l=offset(a),u=function(p,f,g){return typeof p=="number"?p:p?Math.round(f/2-g/2):0};o=u(o,a.offsetWidth,this.wrapper.offsetWidth),r=u(r,a.offsetHeight,this.wrapper.offsetHeight);var d=function(p,f,g,b){return p-=f,p=b.adjustPosition(p-g),p};l.left=d(l.left,this.wrapperOffset.left,o,this.scrollBehaviorX),l.top=d(l.top,this.wrapperOffset.top,r,this.scrollBehaviorY),!this.hooks.trigger(this.hooks.eventTypes.scrollToElement,a,l)&&this.scrollTo(l.left,l.top,n,s)},e.prototype.resetPosition=function(t,n){t===void 0&&(t=0),n===void 0&&(n=ease$1.bounce);var o=this.scrollBehaviorX.checkInBoundary(),r=o.position,s=o.inBoundary,a=this.scrollBehaviorY.checkInBoundary(),l=a.position,u=a.inBoundary;return s&&u?!1:(isIOSBadVersion&&this.reflow(),this.scrollTo(r,l,t,n),!0)},e.prototype.reflow=function(){this._reflow=this.content.offsetHeight},e.prototype.updatePositions=function(t){this.scrollBehaviorX.updatePosition(t.x),this.scrollBehaviorY.updatePosition(t.y)},e.prototype.getCurrentPos=function(){return this.actions.getCurrentPos()},e.prototype.enable=function(){this.actions.enabled=!0},e.prototype.disable=function(){cancelAnimationFrame(this.animater.timer),this.actions.enabled=!1},e.prototype.destroy=function(){var t=this,n=["resizeRegister","transitionEndRegister","actionsHandler","actions","hooks","animater","translater","scrollBehaviorX","scrollBehaviorY"];n.forEach(function(o){return t[o].destroy()})},e}(),BScrollConstructor=function(e){__extends(t,e);function t(n,o){var r=e.call(this,["refresh","contentChanged","enable","disable","beforeScrollStart","scrollStart","scroll","scrollEnd","scrollCancel","touchEnd","flick","destroy"])||this,s=getElement(n);return s?(r.plugins={},r.options=new OptionsConstructor().merge(o).process(),r.setContent(s).valid&&(r.hooks=new EventEmitter$1(["refresh","enable","disable","destroy","beforeInitialScrollTo","contentChanged"]),r.init(s)),r):(warn$3("Can not resolve the wrapper DOM."),r)}return t.use=function(n){var o=n.pluginName,r=t.plugins.some(function(s){return n===s.ctor});return r?t:isUndef(o)?(warn$3("Plugin Class must specify plugin's name in static property by 'pluginName' field."),t):(t.pluginsMap[o]=!0,t.plugins.push({name:o,applyOrder:n.applyOrder,ctor:n}),t)},t.prototype.setContent=function(n){var o=!1,r=!0,s=n.children[this.options.specifiedIndexAsContent];return s?(o=this.content!==s,o&&(this.content=s)):(warn$3("The wrapper need at least one child element to be content element to scroll."),r=!1),{valid:r,contentChanged:o}},t.prototype.init=function(n){var o=this;this.wrapper=n,n.isBScrollContainer=!0,this.scroller=new Scroller(n,this.content,this.options),this.scroller.hooks.on(this.scroller.hooks.eventTypes.resize,function(){o.refresh()}),this.eventBubbling(),this.handleAutoBlur(),this.enable(),this.proxy(propertiesConfig$1),this.applyPlugins(),this.refreshWithoutReset(this.content);var r=this.options,s=r.startX,a=r.startY,l={x:s,y:a};this.hooks.trigger(this.hooks.eventTypes.beforeInitialScrollTo,l)||this.scroller.scrollTo(l.x,l.y)},t.prototype.applyPlugins=function(){var n=this,o=this.options;t.plugins.sort(function(r,s){var a,l=(a={},a.pre=-1,a.post=1,a),u=r.applyOrder?l[r.applyOrder]:0,d=s.applyOrder?l[s.applyOrder]:0;return u-d}).forEach(function(r){var s=r.ctor;o[r.name]&&typeof s=="function"&&(n.plugins[r.name]=new s(n))})},t.prototype.handleAutoBlur=function(){this.options.autoBlur&&this.on(this.eventTypes.beforeScrollStart,function(){var n=document.activeElement;n&&(n.tagName==="INPUT"||n.tagName==="TEXTAREA")&&n.blur()})},t.prototype.eventBubbling=function(){bubbling(this.scroller.hooks,this,[this.eventTypes.beforeScrollStart,this.eventTypes.scrollStart,this.eventTypes.scroll,this.eventTypes.scrollEnd,this.eventTypes.scrollCancel,this.eventTypes.touchEnd,this.eventTypes.flick])},t.prototype.refreshWithoutReset=function(n){this.scroller.refresh(n),this.hooks.trigger(this.hooks.eventTypes.refresh,n),this.trigger(this.eventTypes.refresh,n)},t.prototype.proxy=function(n){var o=this;n.forEach(function(r){var s=r.key,a=r.sourceKey;propertiesProxy(o,a,s)})},t.prototype.refresh=function(){var n=this.setContent(this.wrapper),o=n.contentChanged,r=n.valid;if(r){var s=this.content;this.refreshWithoutReset(s),o&&(this.hooks.trigger(this.hooks.eventTypes.contentChanged,s),this.trigger(this.eventTypes.contentChanged,s)),this.scroller.resetPosition()}},t.prototype.enable=function(){this.scroller.enable(),this.hooks.trigger(this.hooks.eventTypes.enable),this.trigger(this.eventTypes.enable)},t.prototype.disable=function(){this.scroller.disable(),this.hooks.trigger(this.hooks.eventTypes.disable),this.trigger(this.eventTypes.disable)},t.prototype.destroy=function(){this.hooks.trigger(this.hooks.eventTypes.destroy),this.trigger(this.eventTypes.destroy),this.scroller.destroy()},t.prototype.eventRegister=function(n){this.registerType(n)},t.plugins=[],t.pluginsMap={},t}(EventEmitter$1);function createBScroll(e,t){var n=new BScrollConstructor(e,t);return n}createBScroll.use=BScrollConstructor.use,createBScroll.plugins=BScrollConstructor.plugins,createBScroll.pluginsMap=BScrollConstructor.pluginsMap;var BScroll=createBScroll;/*!
66
+ ***************************************************************************** */var extendStatics=function(e,t){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var r in o)Object.prototype.hasOwnProperty.call(o,r)&&(n[r]=o[r])},extendStatics(e,t)};function __extends(e,t){extendStatics(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var __assign$1=function(){return __assign$1=Object.assign||function(t){for(var n,o=1,r=arguments.length;o<r;o++){n=arguments[o];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},__assign$1.apply(this,arguments)};function __spreadArrays$1(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;for(var o=Array(e),r=0,t=0;t<n;t++)for(var s=arguments[t],a=0,l=s.length;a<l;a++,r++)o[r]=s[a];return o}var propertiesConfig$1=[{sourceKey:"scroller.scrollBehaviorX.currentPos",key:"x"},{sourceKey:"scroller.scrollBehaviorY.currentPos",key:"y"},{sourceKey:"scroller.scrollBehaviorX.hasScroll",key:"hasHorizontalScroll"},{sourceKey:"scroller.scrollBehaviorY.hasScroll",key:"hasVerticalScroll"},{sourceKey:"scroller.scrollBehaviorX.contentSize",key:"scrollerWidth"},{sourceKey:"scroller.scrollBehaviorY.contentSize",key:"scrollerHeight"},{sourceKey:"scroller.scrollBehaviorX.maxScrollPos",key:"maxScrollX"},{sourceKey:"scroller.scrollBehaviorY.maxScrollPos",key:"maxScrollY"},{sourceKey:"scroller.scrollBehaviorX.minScrollPos",key:"minScrollX"},{sourceKey:"scroller.scrollBehaviorY.minScrollPos",key:"minScrollY"},{sourceKey:"scroller.scrollBehaviorX.movingDirection",key:"movingDirectionX"},{sourceKey:"scroller.scrollBehaviorY.movingDirection",key:"movingDirectionY"},{sourceKey:"scroller.scrollBehaviorX.direction",key:"directionX"},{sourceKey:"scroller.scrollBehaviorY.direction",key:"directionY"},{sourceKey:"scroller.actions.enabled",key:"enabled"},{sourceKey:"scroller.animater.pending",key:"pending"},{sourceKey:"scroller.animater.stop",key:"stop"},{sourceKey:"scroller.scrollTo",key:"scrollTo"},{sourceKey:"scroller.scrollBy",key:"scrollBy"},{sourceKey:"scroller.scrollToElement",key:"scrollToElement"},{sourceKey:"scroller.resetPosition",key:"resetPosition"}];function warn$3(e){console.error("[BScroll warn]: "+e)}var inBrowser$3=typeof window<"u",ua$3=inBrowser$3&&navigator.userAgent.toLowerCase(),isWeChatDevTools=!!(ua$3&&/wechatdevtools/.test(ua$3)),isAndroid=ua$3&&ua$3.indexOf("android")>0,isIOSBadVersion=function(){if(typeof ua$3=="string"){var e=/os (\d\d?_\d(_\d)?)/,t=e.exec(ua$3);if(!t)return!1;var n=t[1].split("_").map(function(o){return parseInt(o,10)});return n[0]===13&&n[1]>=4}return!1}(),supportsPassive$2=!1;if(inBrowser$3){var EventName$2="test-passive";try{var opts$2={};Object.defineProperty(opts$2,"passive",{get:function(){supportsPassive$2=!0}}),window.addEventListener(EventName$2,function(){},opts$2)}catch{}}function getNow$1(){return window.performance&&window.performance.now&&window.performance.timing?window.performance.now()+window.performance.timing.navigationStart:+new Date}var extend$3=function(e,t){for(var n in t)e[n]=t[n];return e};function isUndef(e){return e==null}function between$1(e,t,n){return e<t?t:e>n?n:e}var elementStyle$3=inBrowser$3&&document.createElement("div").style,vendor$3=function(){if(!inBrowser$3)return!1;for(var e=[{key:"standard",value:"transform"},{key:"webkit",value:"webkitTransform"},{key:"Moz",value:"MozTransform"},{key:"O",value:"OTransform"},{key:"ms",value:"msTransform"}],t=0,n=e;t<n.length;t++){var o=n[t];if(elementStyle$3[o.value]!==void 0)return o.key}return!1}();function prefixStyle$3(e){return vendor$3===!1?e:vendor$3==="standard"?e==="transitionEnd"?"transitionend":e:vendor$3+e.charAt(0).toUpperCase()+e.substr(1)}function getElement(e){return typeof e=="string"?document.querySelector(e):e}function addEvent$2(e,t,n,o){var r=supportsPassive$2?{passive:!1,capture:!!o}:!!o;e.addEventListener(t,n,r)}function removeEvent$2(e,t,n,o){e.removeEventListener(t,n,{capture:!!o})}function maybePrevent$2(e){e.cancelable&&e.preventDefault()}function offset(e){for(var t=0,n=0;e;)t-=e.offsetLeft,n-=e.offsetTop,e=e.offsetParent;return{left:t,top:n}}vendor$3&&vendor$3!=="standard"&&""+vendor$3.toLowerCase();var transform$1=prefixStyle$3("transform"),transition=prefixStyle$3("transition"),hasPerspective=inBrowser$3&&prefixStyle$3("perspective")in elementStyle$3,hasTouch=inBrowser$3&&("ontouchstart"in window||isWeChatDevTools),hasTransition=inBrowser$3&&transition in elementStyle$3,style$1={transform:transform$1,transitionTimingFunction:prefixStyle$3("transitionTimingFunction"),transitionDuration:prefixStyle$3("transitionDuration"),transitionDelay:prefixStyle$3("transitionDelay"),transformOrigin:prefixStyle$3("transformOrigin"),transitionEnd:prefixStyle$3("transitionEnd"),transitionProperty:prefixStyle$3("transitionProperty")},eventTypeMap={touchstart:1,touchmove:1,touchend:1,touchcancel:1,mousedown:2,mousemove:2,mouseup:2};function getRect$1(e){if(e instanceof window.SVGElement){var t=e.getBoundingClientRect();return{top:t.top,left:t.left,width:t.width,height:t.height}}else return{top:e.offsetTop,left:e.offsetLeft,width:e.offsetWidth,height:e.offsetHeight}}function preventDefaultExceptionFn$1(e,t){for(var n in t)if(t[n].test(e[n]))return!0;return!1}var tagExceptionFn=preventDefaultExceptionFn$1;function tap(e,t){var n=document.createEvent("Event");n.initEvent(t,!0,!0),n.pageX=e.pageX,n.pageY=e.pageY,e.target.dispatchEvent(n)}function click(e,t){t===void 0&&(t="click");var n;e.type==="mouseup"?n=e:(e.type==="touchend"||e.type==="touchcancel")&&(n=e.changedTouches[0]);var o={};n&&(o.screenX=n.screenX||0,o.screenY=n.screenY||0,o.clientX=n.clientX||0,o.clientY=n.clientY||0);var r,s=!0,a=!0,l=e.ctrlKey,u=e.shiftKey,d=e.altKey,h=e.metaKey,f={ctrlKey:l,shiftKey:u,altKey:d,metaKey:h};if(typeof MouseEvent<"u")try{r=new MouseEvent(t,extend$3(__assign$1({bubbles:s,cancelable:a},f),o))}catch{g()}else g();function g(){r=document.createEvent("Event"),r.initEvent(t,s,a),extend$3(r,o)}r.forwardedTouchEvent=!0,r._constructed=!0,e.target.dispatchEvent(r)}function dblclick(e){click(e,"dblclick")}var ease$1={swipeBounce:{style:"cubic-bezier(0.25, 0.46, 0.45, 0.94)",fn:function(e){return e*(2-e)}},bounce:{style:"cubic-bezier(0.165, 0.84, 0.44, 1)",fn:function(e){return 1- --e*e*e*e}}},DEFAULT_INTERVAL=1e3/60,windowCompat=inBrowser$3&&window;function noop$1(){}var requestAnimationFrame$1=function(){return inBrowser$3?windowCompat.requestAnimationFrame||windowCompat.webkitRequestAnimationFrame||windowCompat.mozRequestAnimationFrame||windowCompat.oRequestAnimationFrame||function(e){return window.setTimeout(e,e.interval||DEFAULT_INTERVAL)}:noop$1}(),cancelAnimationFrame=function(){return inBrowser$3?windowCompat.cancelAnimationFrame||windowCompat.webkitCancelAnimationFrame||windowCompat.mozCancelAnimationFrame||windowCompat.oCancelAnimationFrame||function(e){window.clearTimeout(e)}:noop$1}(),noop=function(e){},sharedPropertyDefinition={enumerable:!0,configurable:!0,get:noop,set:noop},getProperty=function(e,t){for(var n=t.split("."),o=0;o<n.length-1;o++)if(e=e[n[o]],typeof e!="object"||!e)return;var r=n.pop();return typeof e[r]=="function"?function(){return e[r].apply(e,arguments)}:e[r]},setProperty=function(e,t,n){for(var o=t.split("."),r,s=0;s<o.length-1;s++)r=o[s],e[r]||(e[r]={}),e=e[r];e[o.pop()]=n};function propertiesProxy(e,t,n){sharedPropertyDefinition.get=function(){return getProperty(this,t)},sharedPropertyDefinition.set=function(r){setProperty(this,t,r)},Object.defineProperty(e,n,sharedPropertyDefinition)}var EventEmitter$1=function(){function e(t){this.events={},this.eventTypes={},this.registerType(t)}return e.prototype.on=function(t,n,o){return o===void 0&&(o=this),this.hasType(t),this.events[t]||(this.events[t]=[]),this.events[t].push([n,o]),this},e.prototype.once=function(t,n,o){var r=this;o===void 0&&(o=this),this.hasType(t);var s=function(){for(var a=[],l=0;l<arguments.length;l++)a[l]=arguments[l];r.off(t,s);var u=n.apply(o,a);if(u===!0)return u};return s.fn=n,this.on(t,s),this},e.prototype.off=function(t,n){if(!t&&!n)return this.events={},this;if(t){if(this.hasType(t),!n)return this.events[t]=[],this;var o=this.events[t];if(!o)return this;for(var r=o.length;r--;)(o[r][0]===n||o[r][0]&&o[r][0].fn===n)&&o.splice(r,1);return this}},e.prototype.trigger=function(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];this.hasType(t);var r=this.events[t];if(r)for(var s=r.length,a=__spreadArrays$1(r),l,u=0;u<s;u++){var d=a[u],h=d[0],f=d[1];if(h&&(l=h.apply(f,n),l===!0))return l}},e.prototype.registerType=function(t){var n=this;t.forEach(function(o){n.eventTypes[o]=o})},e.prototype.destroy=function(){this.events={},this.eventTypes={}},e.prototype.hasType=function(t){var n=this.eventTypes,o=n[t]===t;o||warn$3('EventEmitter has used unknown event type: "'+t+'", should be oneof ['+(""+Object.keys(n).map(function(r){return JSON.stringify(r)}))+"]")},e}(),EventRegister$2=function(){function e(t,n){this.wrapper=t,this.events=n,this.addDOMEvents()}return e.prototype.destroy=function(){this.removeDOMEvents(),this.events=[]},e.prototype.addDOMEvents=function(){this.handleDOMEvents(addEvent$2)},e.prototype.removeDOMEvents=function(){this.handleDOMEvents(removeEvent$2)},e.prototype.handleDOMEvents=function(t){var n=this,o=this.wrapper;this.events.forEach(function(r){t(o,r.name,n,!!r.capture)})},e.prototype.handleEvent=function(t){var n=t.type;this.events.some(function(o){return o.name===n?(o.handler(t),!0):!1})},e}(),CustomOptions=function(){function e(){}return e}(),OptionsConstructor=function(e){__extends(t,e);function t(){var n=e.call(this)||this;return n.startX=0,n.startY=0,n.scrollX=!1,n.scrollY=!0,n.freeScroll=!1,n.directionLockThreshold=0,n.eventPassthrough="",n.click=!1,n.dblclick=!1,n.tap="",n.bounce={top:!0,bottom:!0,left:!0,right:!0},n.bounceTime=800,n.momentum=!0,n.momentumLimitTime=300,n.momentumLimitDistance=15,n.swipeTime=2500,n.swipeBounceTime=500,n.deceleration=.0015,n.flickLimitTime=200,n.flickLimitDistance=100,n.resizePolling=60,n.probeType=0,n.stopPropagation=!1,n.preventDefault=!0,n.preventDefaultException={tagName:/^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/},n.tagException={tagName:/^TEXTAREA$/},n.HWCompositing=!0,n.useTransition=!0,n.bindToWrapper=!1,n.bindToTarget=!1,n.disableMouse=hasTouch,n.disableTouch=!hasTouch,n.autoBlur=!0,n.autoEndDistance=5,n.outOfBoundaryDampingFactor=1/3,n.specifiedIndexAsContent=0,n.quadrant=1,n}return t.prototype.merge=function(n){if(!n)return this;for(var o in n){if(o==="bounce"){this.bounce=this.resolveBounce(n[o]);continue}this[o]=n[o]}return this},t.prototype.process=function(){return this.translateZ=this.HWCompositing&&hasPerspective?" translateZ(1px)":"",this.useTransition=this.useTransition&&hasTransition,this.preventDefault=!this.eventPassthrough&&this.preventDefault,this.scrollX=this.eventPassthrough==="horizontal"?!1:this.scrollX,this.scrollY=this.eventPassthrough==="vertical"?!1:this.scrollY,this.freeScroll=this.freeScroll&&!this.eventPassthrough,this.scrollX=this.freeScroll?!0:this.scrollX,this.scrollY=this.freeScroll?!0:this.scrollY,this.directionLockThreshold=this.eventPassthrough?0:this.directionLockThreshold,this},t.prototype.resolveBounce=function(n){var o={top:!0,right:!0,bottom:!0,left:!0},r={top:!1,right:!1,bottom:!1,left:!1},s;return typeof n=="object"?s=extend$3(o,n):s=n?o:r,s},t}(CustomOptions),ActionsHandler=function(){function e(t,n){this.wrapper=t,this.options=n,this.hooks=new EventEmitter$1(["beforeStart","start","move","end","click"]),this.handleDOMEvents()}return e.prototype.handleDOMEvents=function(){var t=this.options,n=t.bindToWrapper,o=t.disableMouse,r=t.disableTouch,s=t.click,a=this.wrapper,l=n?a:window,u=[],d=[],h=!r,f=!o;s&&u.push({name:"click",handler:this.click.bind(this),capture:!0}),h&&(u.push({name:"touchstart",handler:this.start.bind(this)}),d.push({name:"touchmove",handler:this.move.bind(this)},{name:"touchend",handler:this.end.bind(this)},{name:"touchcancel",handler:this.end.bind(this)})),f&&(u.push({name:"mousedown",handler:this.start.bind(this)}),d.push({name:"mousemove",handler:this.move.bind(this)},{name:"mouseup",handler:this.end.bind(this)})),this.wrapperEventRegister=new EventRegister$2(a,u),this.targetEventRegister=new EventRegister$2(l,d)},e.prototype.beforeHandler=function(t,n){var o=this.options,r=o.preventDefault,s=o.stopPropagation,a=o.preventDefaultException,l={start:function(){return r&&!preventDefaultExceptionFn$1(t.target,a)},end:function(){return r&&!preventDefaultExceptionFn$1(t.target,a)},move:function(){return r}};l[n]()&&t.preventDefault(),s&&t.stopPropagation()},e.prototype.setInitiated=function(t){t===void 0&&(t=0),this.initiated=t},e.prototype.start=function(t){var n=eventTypeMap[t.type];if(!(this.initiated&&this.initiated!==n)){if(this.setInitiated(n),tagExceptionFn(t.target,this.options.tagException)){this.setInitiated();return}if(!(n===2&&t.button!==0)&&!this.hooks.trigger(this.hooks.eventTypes.beforeStart,t)){this.beforeHandler(t,"start");var o=t.touches?t.touches[0]:t;this.pointX=o.pageX,this.pointY=o.pageY,this.hooks.trigger(this.hooks.eventTypes.start,t)}}},e.prototype.move=function(t){if(eventTypeMap[t.type]===this.initiated){this.beforeHandler(t,"move");var n=t.touches?t.touches[0]:t,o=n.pageX-this.pointX,r=n.pageY-this.pointY;if(this.pointX=n.pageX,this.pointY=n.pageY,!this.hooks.trigger(this.hooks.eventTypes.move,{deltaX:o,deltaY:r,e:t})){var s=document.documentElement.scrollLeft||window.pageXOffset||document.body.scrollLeft,a=document.documentElement.scrollTop||window.pageYOffset||document.body.scrollTop,l=this.pointX-s,u=this.pointY-a,d=this.options.autoEndDistance;(l>document.documentElement.clientWidth-d||u>document.documentElement.clientHeight-d||l<d||u<d)&&this.end(t)}}},e.prototype.end=function(t){eventTypeMap[t.type]===this.initiated&&(this.setInitiated(),this.beforeHandler(t,"end"),this.hooks.trigger(this.hooks.eventTypes.end,t))},e.prototype.click=function(t){this.hooks.trigger(this.hooks.eventTypes.click,t)},e.prototype.setContent=function(t){t!==this.wrapper&&(this.wrapper=t,this.rebindDOMEvents())},e.prototype.rebindDOMEvents=function(){this.wrapperEventRegister.destroy(),this.targetEventRegister.destroy(),this.handleDOMEvents()},e.prototype.destroy=function(){this.wrapperEventRegister.destroy(),this.targetEventRegister.destroy(),this.hooks.destroy()},e}(),translaterMetaData={x:["translateX","px"],y:["translateY","px"]},Translater=function(){function e(t){this.setContent(t),this.hooks=new EventEmitter$1(["beforeTranslate","translate"])}return e.prototype.getComputedPosition=function(){var t=window.getComputedStyle(this.content,null),n=t[style$1.transform].split(")")[0].split(", "),o=+(n[12]||n[4])||0,r=+(n[13]||n[5])||0;return{x:o,y:r}},e.prototype.translate=function(t){var n=[];Object.keys(t).forEach(function(o){if(translaterMetaData[o]){var r=translaterMetaData[o][0];if(r){var s=translaterMetaData[o][1],a=t[o];n.push(r+"("+a+s+")")}}}),this.hooks.trigger(this.hooks.eventTypes.beforeTranslate,n,t),this.style[style$1.transform]=n.join(" "),this.hooks.trigger(this.hooks.eventTypes.translate,t)},e.prototype.setContent=function(t){this.content!==t&&(this.content=t,this.style=t.style)},e.prototype.destroy=function(){this.hooks.destroy()},e}(),Base$1=function(){function e(t,n,o){this.translater=n,this.options=o,this.timer=0,this.hooks=new EventEmitter$1(["move","end","beforeForceStop","forceStop","callStop","time","timeFunction"]),this.setContent(t)}return e.prototype.translate=function(t){this.translater.translate(t)},e.prototype.setPending=function(t){this.pending=t},e.prototype.setForceStopped=function(t){this.forceStopped=t},e.prototype.setCallStop=function(t){this.callStopWhenPending=t},e.prototype.setContent=function(t){this.content!==t&&(this.content=t,this.style=t.style,this.stop())},e.prototype.clearTimer=function(){this.timer&&(cancelAnimationFrame(this.timer),this.timer=0)},e.prototype.destroy=function(){this.hooks.destroy(),cancelAnimationFrame(this.timer)},e}(),isValidPostion=function(e,t,n,o){var r=function(d,h){var f=d-h,g=f>0?-1:f<0?1:0;return g},s=r(t.x,e.x),a=r(t.y,e.y),l=n.x-o.x,u=n.y-o.y;return s*l<=0&&a*u<=0},Transition$1=function(e){__extends(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.startProbe=function(n,o){var r=this,s=n,a=function(){var l=r.translater.getComputedPosition();isValidPostion(n,o,l,s)&&r.hooks.trigger(r.hooks.eventTypes.move,l),r.pending||(r.callStopWhenPending?r.callStopWhenPending=!1:r.hooks.trigger(r.hooks.eventTypes.end,l)),s=l,r.pending&&(r.timer=requestAnimationFrame$1(a))};this.callStopWhenPending&&this.setCallStop(!1),cancelAnimationFrame(this.timer),a()},t.prototype.transitionTime=function(n){n===void 0&&(n=0),this.style[style$1.transitionDuration]=n+"ms",this.hooks.trigger(this.hooks.eventTypes.time,n)},t.prototype.transitionTimingFunction=function(n){this.style[style$1.transitionTimingFunction]=n,this.hooks.trigger(this.hooks.eventTypes.timeFunction,n)},t.prototype.transitionProperty=function(){this.style[style$1.transitionProperty]=style$1.transform},t.prototype.move=function(n,o,r,s){this.setPending(r>0),this.transitionTimingFunction(s),this.transitionProperty(),this.transitionTime(r),this.translate(o);var a=this.options.probeType===3;r&&a&&this.startProbe(n,o),r||(this._reflow=this.content.offsetHeight,a&&this.hooks.trigger(this.hooks.eventTypes.move,o),this.hooks.trigger(this.hooks.eventTypes.end,o))},t.prototype.doStop=function(){var n=this.pending;if(this.setForceStopped(!1),this.setCallStop(!1),n){this.setPending(!1),cancelAnimationFrame(this.timer);var o=this.translater.getComputedPosition(),r=o.x,s=o.y;this.transitionTime(),this.translate({x:r,y:s}),this.setForceStopped(!0),this.setCallStop(!0),this.hooks.trigger(this.hooks.eventTypes.forceStop,{x:r,y:s})}return n},t.prototype.stop=function(){var n=this.doStop();n&&this.hooks.trigger(this.hooks.eventTypes.callStop)},t}(Base$1),Animation$1=function(e){__extends(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.move=function(n,o,r,s){if(!r){this.translate(o),this.options.probeType===3&&this.hooks.trigger(this.hooks.eventTypes.move,o),this.hooks.trigger(this.hooks.eventTypes.end,o);return}this.animate(n,o,r,s)},t.prototype.animate=function(n,o,r,s){var a=this,l=getNow$1(),u=l+r,d=this.options.probeType===3,h=function(){var f=getNow$1();if(f>=u){a.translate(o),d&&a.hooks.trigger(a.hooks.eventTypes.move,o),a.hooks.trigger(a.hooks.eventTypes.end,o);return}f=(f-l)/r;var g=s(f),b={};Object.keys(o).forEach(function(_){var T=n[_],A=o[_];b[_]=(A-T)*g+T}),a.translate(b),d&&a.hooks.trigger(a.hooks.eventTypes.move,b),a.pending&&(a.timer=requestAnimationFrame$1(h)),a.pending||(a.callStopWhenPending?a.callStopWhenPending=!1:a.hooks.trigger(a.hooks.eventTypes.end,o))};this.setPending(!0),this.callStopWhenPending&&this.setCallStop(!1),cancelAnimationFrame(this.timer),h()},t.prototype.doStop=function(){var n=this.pending;if(this.setForceStopped(!1),this.setCallStop(!1),n){this.setPending(!1),cancelAnimationFrame(this.timer);var o=this.translater.getComputedPosition();this.setForceStopped(!0),this.setCallStop(!0),this.hooks.trigger(this.hooks.eventTypes.forceStop,o)}return n},t.prototype.stop=function(){var n=this.doStop();n&&this.hooks.trigger(this.hooks.eventTypes.callStop)},t}(Base$1);function createAnimater(e,t,n){var o=n.useTransition,r={};return Object.defineProperty(r,"probeType",{enumerable:!0,configurable:!1,get:function(){return n.probeType}}),o?new Transition$1(e,t,r):new Animation$1(e,t,r)}var Behavior=function(){function e(t,n,o){this.wrapper=t,this.options=o,this.hooks=new EventEmitter$1(["beforeComputeBoundary","computeBoundary","momentum","end","ignoreHasScroll"]),this.refresh(n)}return e.prototype.start=function(){this.dist=0,this.setMovingDirection(0),this.setDirection(0)},e.prototype.move=function(t){return t=this.hasScroll?t:0,this.setMovingDirection(t),this.performDampingAlgorithm(t,this.options.outOfBoundaryDampingFactor)},e.prototype.setMovingDirection=function(t){this.movingDirection=t>0?-1:t<0?1:0},e.prototype.setDirection=function(t){this.direction=t>0?-1:t<0?1:0},e.prototype.performDampingAlgorithm=function(t,n){var o=this.currentPos+t;return(o>this.minScrollPos||o<this.maxScrollPos)&&(o>this.minScrollPos&&this.options.bounces[0]||o<this.maxScrollPos&&this.options.bounces[1]?o=this.currentPos+t*n:o=o>this.minScrollPos?this.minScrollPos:this.maxScrollPos),o},e.prototype.end=function(t){var n={duration:0},o=Math.abs(this.currentPos-this.startPos);if(this.options.momentum&&t<this.options.momentumLimitTime&&o>this.options.momentumLimitDistance){var r=this.direction===-1&&this.options.bounces[0]||this.direction===1&&this.options.bounces[1]?this.wrapperSize:0;n=this.hasScroll?this.momentum(this.currentPos,this.startPos,t,this.maxScrollPos,this.minScrollPos,r,this.options):{destination:this.currentPos,duration:0}}else this.hooks.trigger(this.hooks.eventTypes.end,n);return n},e.prototype.momentum=function(t,n,o,r,s,a,l){l===void 0&&(l=this.options);var u=t-n,d=Math.abs(u)/o,h=l.deceleration,f=l.swipeBounceTime,g=l.swipeTime,b=Math.min(g,d*2/h),_={destination:t+d*d/h*(u<0?-1:1),duration:b,rate:15};return this.hooks.trigger(this.hooks.eventTypes.momentum,_,u),_.destination<r?(_.destination=a?Math.max(r-a/4,r-a/_.rate*d):r,_.duration=f):_.destination>s&&(_.destination=a?Math.min(s+a/4,s+a/_.rate*d):s,_.duration=f),_.destination=Math.round(_.destination),_},e.prototype.updateDirection=function(){var t=this.currentPos-this.absStartPos;this.setDirection(t)},e.prototype.refresh=function(t){var n=this.options.rect,o=n.size,r=n.position,s=window.getComputedStyle(this.wrapper,null).position==="static",a=getRect$1(this.wrapper);this.wrapperSize=this.wrapper[o==="width"?"clientWidth":"clientHeight"],this.setContent(t);var l=getRect$1(this.content);this.contentSize=l[o],this.relativeOffset=l[r],s&&(this.relativeOffset-=a[r]),this.computeBoundary(),this.setDirection(0)},e.prototype.setContent=function(t){t!==this.content&&(this.content=t,this.resetState())},e.prototype.resetState=function(){this.currentPos=0,this.startPos=0,this.dist=0,this.setDirection(0),this.setMovingDirection(0),this.resetStartPos()},e.prototype.computeBoundary=function(){this.hooks.trigger(this.hooks.eventTypes.beforeComputeBoundary);var t={minScrollPos:0,maxScrollPos:this.wrapperSize-this.contentSize};t.maxScrollPos<0&&(t.maxScrollPos-=this.relativeOffset,this.options.specifiedIndexAsContent===0&&(t.minScrollPos=-this.relativeOffset)),this.hooks.trigger(this.hooks.eventTypes.computeBoundary,t),this.minScrollPos=t.minScrollPos,this.maxScrollPos=t.maxScrollPos,this.hasScroll=this.options.scrollable&&this.maxScrollPos<this.minScrollPos,!this.hasScroll&&this.minScrollPos<this.maxScrollPos&&(this.maxScrollPos=this.minScrollPos,this.contentSize=this.wrapperSize)},e.prototype.updatePosition=function(t){this.currentPos=t},e.prototype.getCurrentPos=function(){return this.currentPos},e.prototype.checkInBoundary=function(){var t=this.adjustPosition(this.currentPos),n=t===this.getCurrentPos();return{position:t,inBoundary:n}},e.prototype.adjustPosition=function(t){return!this.hasScroll&&!this.hooks.trigger(this.hooks.eventTypes.ignoreHasScroll)?t=this.minScrollPos:t>this.minScrollPos?t=this.minScrollPos:t<this.maxScrollPos&&(t=this.maxScrollPos),t},e.prototype.updateStartPos=function(){this.startPos=this.currentPos},e.prototype.updateAbsStartPos=function(){this.absStartPos=this.currentPos},e.prototype.resetStartPos=function(){this.updateStartPos(),this.updateAbsStartPos()},e.prototype.getAbsDist=function(t){return this.dist+=t,Math.abs(this.dist)},e.prototype.destroy=function(){this.hooks.destroy()},e}(),_a,_b,_c,_d,PassthroughHandlers=(_a={},_a.yes=function(e){return!0},_a.no=function(e){return maybePrevent$2(e),!1},_a),DirectionMap=(_b={},_b.horizontal=(_c={},_c.yes="horizontal",_c.no="vertical",_c),_b.vertical=(_d={},_d.yes="vertical",_d.no="horizontal",_d),_b),DirectionLockAction=function(){function e(t,n,o){this.directionLockThreshold=t,this.freeScroll=n,this.eventPassthrough=o,this.reset()}return e.prototype.reset=function(){this.directionLocked=""},e.prototype.checkMovingDirection=function(t,n,o){return this.computeDirectionLock(t,n),this.handleEventPassthrough(o)},e.prototype.adjustDelta=function(t,n){return this.directionLocked==="horizontal"?n=0:this.directionLocked==="vertical"&&(t=0),{deltaX:t,deltaY:n}},e.prototype.computeDirectionLock=function(t,n){this.directionLocked===""&&!this.freeScroll&&(t>n+this.directionLockThreshold?this.directionLocked="horizontal":n>=t+this.directionLockThreshold?this.directionLocked="vertical":this.directionLocked="none")},e.prototype.handleEventPassthrough=function(t){var n=DirectionMap[this.directionLocked];if(n){if(this.eventPassthrough===n.yes)return PassthroughHandlers.yes(t);if(this.eventPassthrough===n.no)return PassthroughHandlers.no(t)}return!1},e}(),applyQuadrantTransformation=function(e,t,n){return n===2?[t,-e]:n===3?[-e,-t]:n===4?[-t,e]:[e,t]},ScrollerActions=function(){function e(t,n,o,r,s){this.hooks=new EventEmitter$1(["start","beforeMove","scrollStart","scroll","beforeEnd","end","scrollEnd","contentNotMoved","detectMovingDirection","coordinateTransformation"]),this.scrollBehaviorX=t,this.scrollBehaviorY=n,this.actionsHandler=o,this.animater=r,this.options=s,this.directionLockAction=new DirectionLockAction(s.directionLockThreshold,s.freeScroll,s.eventPassthrough),this.enabled=!0,this.bindActionsHandler()}return e.prototype.bindActionsHandler=function(){var t=this;this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.start,function(n){return t.enabled?t.handleStart(n):!0}),this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.move,function(n){var o=n.deltaX,r=n.deltaY,s=n.e;if(!t.enabled)return!0;var a=applyQuadrantTransformation(o,r,t.options.quadrant),l=a[0],u=a[1],d={deltaX:l,deltaY:u};return t.hooks.trigger(t.hooks.eventTypes.coordinateTransformation,d),t.handleMove(d.deltaX,d.deltaY,s)}),this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.end,function(n){return t.enabled?t.handleEnd(n):!0}),this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.click,function(n){t.enabled&&!n._constructed&&t.handleClick(n)})},e.prototype.handleStart=function(t){var n=getNow$1();this.fingerMoved=!1,this.contentMoved=!1,this.startTime=n,this.directionLockAction.reset(),this.scrollBehaviorX.start(),this.scrollBehaviorY.start(),this.animater.doStop(),this.scrollBehaviorX.resetStartPos(),this.scrollBehaviorY.resetStartPos(),this.hooks.trigger(this.hooks.eventTypes.start,t)},e.prototype.handleMove=function(t,n,o){if(!this.hooks.trigger(this.hooks.eventTypes.beforeMove,o)){var r=this.scrollBehaviorX.getAbsDist(t),s=this.scrollBehaviorY.getAbsDist(n),a=getNow$1();if(this.checkMomentum(r,s,a))return!0;if(this.directionLockAction.checkMovingDirection(r,s,o))return this.actionsHandler.setInitiated(),!0;var l=this.directionLockAction.adjustDelta(t,n),u=this.scrollBehaviorX.getCurrentPos(),d=this.scrollBehaviorX.move(l.deltaX),h=this.scrollBehaviorY.getCurrentPos(),f=this.scrollBehaviorY.move(l.deltaY);if(!this.hooks.trigger(this.hooks.eventTypes.detectMovingDirection)){this.fingerMoved||(this.fingerMoved=!0);var g=d!==u||f!==h;!this.contentMoved&&!g&&this.hooks.trigger(this.hooks.eventTypes.contentNotMoved),!this.contentMoved&&g&&(this.contentMoved=!0,this.hooks.trigger(this.hooks.eventTypes.scrollStart)),this.contentMoved&&g&&(this.animater.translate({x:d,y:f}),this.dispatchScroll(a))}}},e.prototype.dispatchScroll=function(t){t-this.startTime>this.options.momentumLimitTime&&(this.startTime=t,this.scrollBehaviorX.updateStartPos(),this.scrollBehaviorY.updateStartPos(),this.options.probeType===1&&this.hooks.trigger(this.hooks.eventTypes.scroll,this.getCurrentPos())),this.options.probeType>1&&this.hooks.trigger(this.hooks.eventTypes.scroll,this.getCurrentPos())},e.prototype.checkMomentum=function(t,n,o){return o-this.endTime>this.options.momentumLimitTime&&n<this.options.momentumLimitDistance&&t<this.options.momentumLimitDistance},e.prototype.handleEnd=function(t){if(!this.hooks.trigger(this.hooks.eventTypes.beforeEnd,t)){var n=this.getCurrentPos();if(this.scrollBehaviorX.updateDirection(),this.scrollBehaviorY.updateDirection(),this.hooks.trigger(this.hooks.eventTypes.end,t,n))return!0;n=this.ensureIntegerPos(n),this.animater.translate(n),this.endTime=getNow$1();var o=this.endTime-this.startTime;this.hooks.trigger(this.hooks.eventTypes.scrollEnd,n,o)}},e.prototype.ensureIntegerPos=function(t){this.ensuringInteger=!0;var n=t.x,o=t.y,r=this.scrollBehaviorX,s=r.minScrollPos,a=r.maxScrollPos,l=this.scrollBehaviorY,u=l.minScrollPos,d=l.maxScrollPos;return n=n>0?Math.ceil(n):Math.floor(n),o=o>0?Math.ceil(o):Math.floor(o),n=between$1(n,a,s),o=between$1(o,d,u),{x:n,y:o}},e.prototype.handleClick=function(t){preventDefaultExceptionFn$1(t.target,this.options.preventDefaultException)||(maybePrevent$2(t),t.stopPropagation())},e.prototype.getCurrentPos=function(){return{x:this.scrollBehaviorX.getCurrentPos(),y:this.scrollBehaviorY.getCurrentPos()}},e.prototype.refresh=function(){this.endTime=0},e.prototype.destroy=function(){this.hooks.destroy()},e}();function createActionsHandlerOptions(e){var t=["click","bindToWrapper","disableMouse","disableTouch","preventDefault","stopPropagation","tagException","preventDefaultException","autoEndDistance"].reduce(function(n,o){return n[o]=e[o],n},{});return t}function createBehaviorOptions(e,t,n,o){var r=["momentum","momentumLimitTime","momentumLimitDistance","deceleration","swipeBounceTime","swipeTime","outOfBoundaryDampingFactor","specifiedIndexAsContent"].reduce(function(s,a){return s[a]=e[a],s},{});return r.scrollable=!!e[t],r.bounces=n,r.rect=o,r}function bubbling(e,t,n){n.forEach(function(o){var r,s;typeof o=="string"?r=s=o:(r=o.source,s=o.target),e.on(r,function(){for(var a=[],l=0;l<arguments.length;l++)a[l]=arguments[l];return t.trigger.apply(t,__spreadArrays$1([s],a))})})}function isSamePoint(e,t){for(var n=Object.keys(e),o=0,r=n;o<r.length;o++){var s=r[o];if(e[s]!==t[s])return!1}return!0}var MIN_SCROLL_DISTANCE=1,Scroller=function(){function e(t,n,o){this.wrapper=t,this.content=n,this.resizeTimeout=0,this.hooks=new EventEmitter$1(["beforeStart","beforeMove","beforeScrollStart","scrollStart","scroll","beforeEnd","scrollEnd","resize","touchEnd","end","flick","scrollCancel","momentum","scrollTo","minDistanceScroll","scrollToElement","beforeRefresh"]),this.options=o;var r=this.options.bounce,s=r.left,a=r.right,l=r.top,u=r.bottom;this.scrollBehaviorX=new Behavior(t,n,createBehaviorOptions(o,"scrollX",[s,a],{size:"width",position:"left"})),this.scrollBehaviorY=new Behavior(t,n,createBehaviorOptions(o,"scrollY",[l,u],{size:"height",position:"top"})),this.translater=new Translater(this.content),this.animater=createAnimater(this.content,this.translater,this.options),this.actionsHandler=new ActionsHandler(this.options.bindToTarget?this.content:t,createActionsHandlerOptions(this.options)),this.actions=new ScrollerActions(this.scrollBehaviorX,this.scrollBehaviorY,this.actionsHandler,this.animater,this.options);var d=this.resize.bind(this);this.resizeRegister=new EventRegister$2(window,[{name:"orientationchange",handler:d},{name:"resize",handler:d}]),this.registerTransitionEnd(),this.init()}return e.prototype.init=function(){var t=this;this.bindTranslater(),this.bindAnimater(),this.bindActions(),this.hooks.on(this.hooks.eventTypes.scrollEnd,function(){t.togglePointerEvents(!0)})},e.prototype.registerTransitionEnd=function(){this.transitionEndRegister=new EventRegister$2(this.content,[{name:style$1.transitionEnd,handler:this.transitionEnd.bind(this)}])},e.prototype.bindTranslater=function(){var t=this,n=this.translater.hooks;n.on(n.eventTypes.beforeTranslate,function(o){t.options.translateZ&&o.push(t.options.translateZ)}),n.on(n.eventTypes.translate,function(o){var r=t.getCurrentPos();if(t.updatePositions(o),t.actions.ensuringInteger===!0){t.actions.ensuringInteger=!1;return}(o.x!==r.x||o.y!==r.y)&&t.togglePointerEvents(!1)})},e.prototype.bindAnimater=function(){var t=this;this.animater.hooks.on(this.animater.hooks.eventTypes.end,function(n){t.resetPosition(t.options.bounceTime)||(t.animater.setPending(!1),t.hooks.trigger(t.hooks.eventTypes.scrollEnd,n))}),bubbling(this.animater.hooks,this.hooks,[{source:this.animater.hooks.eventTypes.move,target:this.hooks.eventTypes.scroll},{source:this.animater.hooks.eventTypes.forceStop,target:this.hooks.eventTypes.scrollEnd}])},e.prototype.bindActions=function(){var t=this,n=this.actions;bubbling(n.hooks,this.hooks,[{source:n.hooks.eventTypes.start,target:this.hooks.eventTypes.beforeStart},{source:n.hooks.eventTypes.start,target:this.hooks.eventTypes.beforeScrollStart},{source:n.hooks.eventTypes.beforeMove,target:this.hooks.eventTypes.beforeMove},{source:n.hooks.eventTypes.scrollStart,target:this.hooks.eventTypes.scrollStart},{source:n.hooks.eventTypes.scroll,target:this.hooks.eventTypes.scroll},{source:n.hooks.eventTypes.beforeEnd,target:this.hooks.eventTypes.beforeEnd}]),n.hooks.on(n.hooks.eventTypes.end,function(o,r){if(t.hooks.trigger(t.hooks.eventTypes.touchEnd,r),t.hooks.trigger(t.hooks.eventTypes.end,r)||!n.fingerMoved&&(t.hooks.trigger(t.hooks.eventTypes.scrollCancel),t.checkClick(o)))return!0;if(t.resetPosition(t.options.bounceTime,ease$1.bounce))return t.animater.setForceStopped(!1),!0}),n.hooks.on(n.hooks.eventTypes.scrollEnd,function(o,r){var s=Math.abs(o.x-t.scrollBehaviorX.startPos),a=Math.abs(o.y-t.scrollBehaviorY.startPos);if(t.checkFlick(r,s,a)){t.animater.setForceStopped(!1),t.hooks.trigger(t.hooks.eventTypes.flick);return}if(t.momentum(o,r)){t.animater.setForceStopped(!1);return}n.contentMoved&&t.hooks.trigger(t.hooks.eventTypes.scrollEnd,o),t.animater.forceStopped&&t.animater.setForceStopped(!1)})},e.prototype.checkFlick=function(t,n,o){var r=1;if(this.hooks.events.flick.length>1&&t<this.options.flickLimitTime&&n<this.options.flickLimitDistance&&o<this.options.flickLimitDistance&&(o>r||n>r))return!0},e.prototype.momentum=function(t,n){var o={time:0,easing:ease$1.swiper,newX:t.x,newY:t.y},r=this.scrollBehaviorX.end(n),s=this.scrollBehaviorY.end(n);if(o.newX=isUndef(r.destination)?o.newX:r.destination,o.newY=isUndef(s.destination)?o.newY:s.destination,o.time=Math.max(r.duration,s.duration),this.hooks.trigger(this.hooks.eventTypes.momentum,o,this),o.newX!==t.x||o.newY!==t.y)return(o.newX>this.scrollBehaviorX.minScrollPos||o.newX<this.scrollBehaviorX.maxScrollPos||o.newY>this.scrollBehaviorY.minScrollPos||o.newY<this.scrollBehaviorY.maxScrollPos)&&(o.easing=ease$1.swipeBounce),this.scrollTo(o.newX,o.newY,o.time,o.easing),!0},e.prototype.checkClick=function(t){var n={preventClick:this.animater.forceStopped};if(this.hooks.trigger(this.hooks.eventTypes.checkClick))return this.animater.setForceStopped(!1),!0;if(!n.preventClick){var o=this.options.dblclick,r=!1;if(o&&this.lastClickTime){var s=o.delay,a=s===void 0?300:s;getNow$1()-this.lastClickTime<a&&(r=!0,dblclick(t))}return this.options.tap&&tap(t,this.options.tap),this.options.click&&!preventDefaultExceptionFn$1(t.target,this.options.preventDefaultException)&&click(t),this.lastClickTime=r?null:getNow$1(),!0}return!1},e.prototype.resize=function(){var t=this;this.actions.enabled&&(isAndroid&&(this.wrapper.scrollTop=0),clearTimeout(this.resizeTimeout),this.resizeTimeout=window.setTimeout(function(){t.hooks.trigger(t.hooks.eventTypes.resize)},this.options.resizePolling))},e.prototype.transitionEnd=function(t){if(!(t.target!==this.content||!this.animater.pending)){var n=this.animater;n.transitionTime(),this.resetPosition(this.options.bounceTime,ease$1.bounce)||(this.animater.setPending(!1),this.options.probeType!==3&&this.hooks.trigger(this.hooks.eventTypes.scrollEnd,this.getCurrentPos()))}},e.prototype.togglePointerEvents=function(t){t===void 0&&(t=!0);for(var n=this.content.children.length?this.content.children:[this.content],o=t?"auto":"none",r=0;r<n.length;r++){var s=n[r];s.isBScrollContainer||(s.style.pointerEvents=o)}},e.prototype.refresh=function(t){var n=this.setContent(t);this.hooks.trigger(this.hooks.eventTypes.beforeRefresh),this.scrollBehaviorX.refresh(t),this.scrollBehaviorY.refresh(t),n&&(this.translater.setContent(t),this.animater.setContent(t),this.transitionEndRegister.destroy(),this.registerTransitionEnd(),this.options.bindToTarget&&this.actionsHandler.setContent(t)),this.actions.refresh(),this.wrapperOffset=offset(this.wrapper)},e.prototype.setContent=function(t){var n=t!==this.content;return n&&(this.content=t),n},e.prototype.scrollBy=function(t,n,o,r){o===void 0&&(o=0);var s=this.getCurrentPos(),a=s.x,l=s.y;r=r||ease$1.bounce,t+=a,n+=l,this.scrollTo(t,n,o,r)},e.prototype.scrollTo=function(t,n,o,r,s){o===void 0&&(o=0),r===void 0&&(r=ease$1.bounce),s===void 0&&(s={start:{},end:{}});var a=this.options.useTransition?r.style:r.fn,l=this.getCurrentPos(),u=__assign$1({x:l.x,y:l.y},s.start),d=__assign$1({x:t,y:n},s.end);if(this.hooks.trigger(this.hooks.eventTypes.scrollTo,d),!isSamePoint(u,d)){var h=Math.abs(d.x-u.x),f=Math.abs(d.y-u.y);h<MIN_SCROLL_DISTANCE&&f<MIN_SCROLL_DISTANCE&&(o=0,this.hooks.trigger(this.hooks.eventTypes.minDistanceScroll)),this.animater.move(u,d,o,a)}},e.prototype.scrollToElement=function(t,n,o,r,s){var a=getElement(t),l=offset(a),u=function(h,f,g){return typeof h=="number"?h:h?Math.round(f/2-g/2):0};o=u(o,a.offsetWidth,this.wrapper.offsetWidth),r=u(r,a.offsetHeight,this.wrapper.offsetHeight);var d=function(h,f,g,b){return h-=f,h=b.adjustPosition(h-g),h};l.left=d(l.left,this.wrapperOffset.left,o,this.scrollBehaviorX),l.top=d(l.top,this.wrapperOffset.top,r,this.scrollBehaviorY),!this.hooks.trigger(this.hooks.eventTypes.scrollToElement,a,l)&&this.scrollTo(l.left,l.top,n,s)},e.prototype.resetPosition=function(t,n){t===void 0&&(t=0),n===void 0&&(n=ease$1.bounce);var o=this.scrollBehaviorX.checkInBoundary(),r=o.position,s=o.inBoundary,a=this.scrollBehaviorY.checkInBoundary(),l=a.position,u=a.inBoundary;return s&&u?!1:(isIOSBadVersion&&this.reflow(),this.scrollTo(r,l,t,n),!0)},e.prototype.reflow=function(){this._reflow=this.content.offsetHeight},e.prototype.updatePositions=function(t){this.scrollBehaviorX.updatePosition(t.x),this.scrollBehaviorY.updatePosition(t.y)},e.prototype.getCurrentPos=function(){return this.actions.getCurrentPos()},e.prototype.enable=function(){this.actions.enabled=!0},e.prototype.disable=function(){cancelAnimationFrame(this.animater.timer),this.actions.enabled=!1},e.prototype.destroy=function(){var t=this,n=["resizeRegister","transitionEndRegister","actionsHandler","actions","hooks","animater","translater","scrollBehaviorX","scrollBehaviorY"];n.forEach(function(o){return t[o].destroy()})},e}(),BScrollConstructor=function(e){__extends(t,e);function t(n,o){var r=e.call(this,["refresh","contentChanged","enable","disable","beforeScrollStart","scrollStart","scroll","scrollEnd","scrollCancel","touchEnd","flick","destroy"])||this,s=getElement(n);return s?(r.plugins={},r.options=new OptionsConstructor().merge(o).process(),r.setContent(s).valid&&(r.hooks=new EventEmitter$1(["refresh","enable","disable","destroy","beforeInitialScrollTo","contentChanged"]),r.init(s)),r):(warn$3("Can not resolve the wrapper DOM."),r)}return t.use=function(n){var o=n.pluginName,r=t.plugins.some(function(s){return n===s.ctor});return r?t:isUndef(o)?(warn$3("Plugin Class must specify plugin's name in static property by 'pluginName' field."),t):(t.pluginsMap[o]=!0,t.plugins.push({name:o,applyOrder:n.applyOrder,ctor:n}),t)},t.prototype.setContent=function(n){var o=!1,r=!0,s=n.children[this.options.specifiedIndexAsContent];return s?(o=this.content!==s,o&&(this.content=s)):(warn$3("The wrapper need at least one child element to be content element to scroll."),r=!1),{valid:r,contentChanged:o}},t.prototype.init=function(n){var o=this;this.wrapper=n,n.isBScrollContainer=!0,this.scroller=new Scroller(n,this.content,this.options),this.scroller.hooks.on(this.scroller.hooks.eventTypes.resize,function(){o.refresh()}),this.eventBubbling(),this.handleAutoBlur(),this.enable(),this.proxy(propertiesConfig$1),this.applyPlugins(),this.refreshWithoutReset(this.content);var r=this.options,s=r.startX,a=r.startY,l={x:s,y:a};this.hooks.trigger(this.hooks.eventTypes.beforeInitialScrollTo,l)||this.scroller.scrollTo(l.x,l.y)},t.prototype.applyPlugins=function(){var n=this,o=this.options;t.plugins.sort(function(r,s){var a,l=(a={},a.pre=-1,a.post=1,a),u=r.applyOrder?l[r.applyOrder]:0,d=s.applyOrder?l[s.applyOrder]:0;return u-d}).forEach(function(r){var s=r.ctor;o[r.name]&&typeof s=="function"&&(n.plugins[r.name]=new s(n))})},t.prototype.handleAutoBlur=function(){this.options.autoBlur&&this.on(this.eventTypes.beforeScrollStart,function(){var n=document.activeElement;n&&(n.tagName==="INPUT"||n.tagName==="TEXTAREA")&&n.blur()})},t.prototype.eventBubbling=function(){bubbling(this.scroller.hooks,this,[this.eventTypes.beforeScrollStart,this.eventTypes.scrollStart,this.eventTypes.scroll,this.eventTypes.scrollEnd,this.eventTypes.scrollCancel,this.eventTypes.touchEnd,this.eventTypes.flick])},t.prototype.refreshWithoutReset=function(n){this.scroller.refresh(n),this.hooks.trigger(this.hooks.eventTypes.refresh,n),this.trigger(this.eventTypes.refresh,n)},t.prototype.proxy=function(n){var o=this;n.forEach(function(r){var s=r.key,a=r.sourceKey;propertiesProxy(o,a,s)})},t.prototype.refresh=function(){var n=this.setContent(this.wrapper),o=n.contentChanged,r=n.valid;if(r){var s=this.content;this.refreshWithoutReset(s),o&&(this.hooks.trigger(this.hooks.eventTypes.contentChanged,s),this.trigger(this.eventTypes.contentChanged,s)),this.scroller.resetPosition()}},t.prototype.enable=function(){this.scroller.enable(),this.hooks.trigger(this.hooks.eventTypes.enable),this.trigger(this.eventTypes.enable)},t.prototype.disable=function(){this.scroller.disable(),this.hooks.trigger(this.hooks.eventTypes.disable),this.trigger(this.eventTypes.disable)},t.prototype.destroy=function(){this.hooks.trigger(this.hooks.eventTypes.destroy),this.trigger(this.eventTypes.destroy),this.scroller.destroy()},t.prototype.eventRegister=function(n){this.registerType(n)},t.plugins=[],t.pluginsMap={},t}(EventEmitter$1);function createBScroll(e,t){var n=new BScrollConstructor(e,t);return n}createBScroll.use=BScrollConstructor.use,createBScroll.plugins=BScrollConstructor.plugins,createBScroll.pluginsMap=BScrollConstructor.pluginsMap;var BScroll=createBScroll;/*!
67
67
  * better-scroll / mouse-wheel
68
68
  * (c) 2016-2023 ustbhuangyi
69
69
  * Released under the MIT License.
70
- */function warn$2(e){console.error("[BScroll warn]: "+e)}var inBrowser$2=typeof window<"u",ua$2=inBrowser$2&&navigator.userAgent.toLowerCase();ua$2&&ua$2.indexOf("android")>0,function(){if(typeof ua$2=="string"){var e=/os (\d\d?_\d(_\d)?)/,t=e.exec(ua$2);if(!t)return!1;var n=t[1].split("_").map(function(o){return parseInt(o,10)});return n[0]===13&&n[1]>=4}return!1}();var supportsPassive$1=!1;if(inBrowser$2){var EventName$1="test-passive";try{var opts$1={};Object.defineProperty(opts$1,"passive",{get:function(){supportsPassive$1=!0}}),window.addEventListener(EventName$1,function(){},opts$1)}catch{}}var extend$2=function(e,t){for(var n in t)e[n]=t[n];return e},elementStyle$2=inBrowser$2&&document.createElement("div").style,vendor$2=function(){if(!inBrowser$2)return!1;for(var e=[{key:"standard",value:"transform"},{key:"webkit",value:"webkitTransform"},{key:"Moz",value:"MozTransform"},{key:"O",value:"OTransform"},{key:"ms",value:"msTransform"}],t=0,n=e;t<n.length;t++){var o=n[t];if(elementStyle$2[o.value]!==void 0)return o.key}return!1}();function prefixStyle$2(e){return vendor$2===!1?e:vendor$2==="standard"?e==="transitionEnd"?"transitionend":e:vendor$2+e.charAt(0).toUpperCase()+e.substr(1)}function addEvent$1(e,t,n,o){var r=supportsPassive$1?{passive:!1,capture:!!o}:!!o;e.addEventListener(t,n,r)}function removeEvent$1(e,t,n,o){e.removeEventListener(t,n,{capture:!!o})}function maybePrevent$1(e){e.cancelable&&e.preventDefault()}vendor$2&&vendor$2!=="standard"&&""+vendor$2.toLowerCase(),prefixStyle$2("transform"),prefixStyle$2("transition"),inBrowser$2&&prefixStyle$2("perspective")in elementStyle$2,prefixStyle$2("transitionTimingFunction"),prefixStyle$2("transitionDuration"),prefixStyle$2("transitionDelay"),prefixStyle$2("transformOrigin"),prefixStyle$2("transitionEnd"),prefixStyle$2("transitionProperty");function preventDefaultExceptionFn(e,t){for(var n in t)if(t[n].test(e[n]))return!0;return!1}var EventRegister$1=function(){function e(t,n){this.wrapper=t,this.events=n,this.addDOMEvents()}return e.prototype.destroy=function(){this.removeDOMEvents(),this.events=[]},e.prototype.addDOMEvents=function(){this.handleDOMEvents(addEvent$1)},e.prototype.removeDOMEvents=function(){this.handleDOMEvents(removeEvent$1)},e.prototype.handleDOMEvents=function(t){var n=this,o=this.wrapper;this.events.forEach(function(r){t(o,r.name,n,!!r.capture)})},e.prototype.handleEvent=function(t){var n=t.type;this.events.some(function(o){return o.name===n?(o.handler(t),!0):!1})},e}(),MouseWheel=function(){function e(t){this.scroll=t,this.wheelEndTimer=0,this.wheelMoveTimer=0,this.wheelStart=!1,this.init()}return e.prototype.init=function(){this.handleBScroll(),this.handleOptions(),this.handleHooks(),this.registerEvent()},e.prototype.handleBScroll=function(){this.scroll.registerType(["alterOptions","mousewheelStart","mousewheelMove","mousewheelEnd"])},e.prototype.handleOptions=function(){var t=this.scroll.options.mouseWheel===!0?{}:this.scroll.options.mouseWheel,n={speed:20,invert:!1,easeTime:300,discreteTime:400,throttleTime:0,dampingFactor:.1};this.mouseWheelOpt=extend$2(n,t)},e.prototype.handleHooks=function(){this.hooksFn=[],this.registerHooks(this.scroll.hooks,"destroy",this.destroy)},e.prototype.registerEvent=function(){this.eventRegister=new EventRegister$1(this.scroll.scroller.wrapper,[{name:"wheel",handler:this.wheelHandler.bind(this)},{name:"mousewheel",handler:this.wheelHandler.bind(this)},{name:"DOMMouseScroll",handler:this.wheelHandler.bind(this)}])},e.prototype.registerHooks=function(t,n,o){t.on(n,o,this),this.hooksFn.push([t,n,o])},e.prototype.wheelHandler=function(t){if(this.scroll.enabled){this.beforeHandler(t),this.wheelStart||(this.wheelStartHandler(t),this.wheelStart=!0);var n=this.getWheelDelta(t);this.wheelMoveHandler(n),this.wheelEndDetector(n)}},e.prototype.wheelStartHandler=function(t){this.cleanCache();var n=this.scroll.scroller,o=n.scrollBehaviorX,r=n.scrollBehaviorY;o.setMovingDirection(0),r.setMovingDirection(0),o.setDirection(0),r.setDirection(0),this.scroll.trigger(this.scroll.eventTypes.alterOptions,this.mouseWheelOpt),this.scroll.trigger(this.scroll.eventTypes.mousewheelStart)},e.prototype.cleanCache=function(){this.deltaCache=[]},e.prototype.wheelMoveHandler=function(t){var n=this,o=this.mouseWheelOpt,r=o.throttleTime,s=o.dampingFactor;if(r&&this.wheelMoveTimer)this.deltaCache.push(t);else{var a=this.deltaCache.reduce(function(b,_){return{x:b.x+_.x,y:b.y+_.y}},{x:0,y:0});this.cleanCache();var l=this.scroll.scroller,u=l.scrollBehaviorX,d=l.scrollBehaviorY;u.setMovingDirection(-t.directionX),d.setMovingDirection(-t.directionY),u.setDirection(t.x),d.setDirection(t.y);var p=u.performDampingAlgorithm(Math.round(t.x)+a.x,s),f=d.performDampingAlgorithm(Math.round(t.y)+a.x,s);if(!this.scroll.trigger(this.scroll.eventTypes.mousewheelMove,{x:p,y:f})){var g=this.getEaseTime();(p!==this.scroll.x||f!==this.scroll.y)&&this.scroll.scrollTo(p,f,g)}r&&(this.wheelMoveTimer=window.setTimeout(function(){n.wheelMoveTimer=0},r))}},e.prototype.wheelEndDetector=function(t){var n=this;window.clearTimeout(this.wheelEndTimer),this.wheelEndTimer=window.setTimeout(function(){n.wheelStart=!1,window.clearTimeout(n.wheelMoveTimer),n.wheelMoveTimer=0,n.scroll.trigger(n.scroll.eventTypes.mousewheelEnd,t)},this.mouseWheelOpt.discreteTime)},e.prototype.getWheelDelta=function(t){var n=this.mouseWheelOpt,o=n.speed,r=n.invert,s=0,a=0,l=r?-1:1;switch(!0){case"deltaX"in t:t.deltaMode===1?(s=-t.deltaX*o,a=-t.deltaY*o):(s=-t.deltaX,a=-t.deltaY);break;case"wheelDeltaX"in t:s=t.wheelDeltaX/120*o,a=t.wheelDeltaY/120*o;break;case"wheelDelta"in t:s=a=t.wheelDelta/120*o;break;case"detail"in t:s=a=-t.detail/3*o;break}s*=l,a*=l,this.scroll.hasVerticalScroll||(Math.abs(a)>Math.abs(s)&&(s=a),a=0),this.scroll.hasHorizontalScroll||(s=0);var u=s>0?-1:s<0?1:0,d=a>0?-1:a<0?1:0;return{x:s,y:a,directionX:u,directionY:d}},e.prototype.beforeHandler=function(t){var n=this.scroll.options,o=n.preventDefault,r=n.stopPropagation,s=n.preventDefaultException;o&&!preventDefaultExceptionFn(t.target,s)&&maybePrevent$1(t),r&&t.stopPropagation()},e.prototype.getEaseTime=function(){var t=100,n=this.mouseWheelOpt.easeTime;return n<t&&warn$2("easeTime should be greater than 100.If mouseWheel easeTime is too small,scrollEnd will be triggered many times."),Math.max(n,t)},e.prototype.destroy=function(){this.eventRegister.destroy(),window.clearTimeout(this.wheelEndTimer),window.clearTimeout(this.wheelMoveTimer),this.hooksFn.forEach(function(t){var n=t[0],o=t[1],r=t[2];n.off(o,r)})},e.pluginName="mouseWheel",e.applyOrder="pre",e}();/*!
70
+ */function warn$2(e){console.error("[BScroll warn]: "+e)}var inBrowser$2=typeof window<"u",ua$2=inBrowser$2&&navigator.userAgent.toLowerCase();ua$2&&ua$2.indexOf("android")>0,function(){if(typeof ua$2=="string"){var e=/os (\d\d?_\d(_\d)?)/,t=e.exec(ua$2);if(!t)return!1;var n=t[1].split("_").map(function(o){return parseInt(o,10)});return n[0]===13&&n[1]>=4}return!1}();var supportsPassive$1=!1;if(inBrowser$2){var EventName$1="test-passive";try{var opts$1={};Object.defineProperty(opts$1,"passive",{get:function(){supportsPassive$1=!0}}),window.addEventListener(EventName$1,function(){},opts$1)}catch{}}var extend$2=function(e,t){for(var n in t)e[n]=t[n];return e},elementStyle$2=inBrowser$2&&document.createElement("div").style,vendor$2=function(){if(!inBrowser$2)return!1;for(var e=[{key:"standard",value:"transform"},{key:"webkit",value:"webkitTransform"},{key:"Moz",value:"MozTransform"},{key:"O",value:"OTransform"},{key:"ms",value:"msTransform"}],t=0,n=e;t<n.length;t++){var o=n[t];if(elementStyle$2[o.value]!==void 0)return o.key}return!1}();function prefixStyle$2(e){return vendor$2===!1?e:vendor$2==="standard"?e==="transitionEnd"?"transitionend":e:vendor$2+e.charAt(0).toUpperCase()+e.substr(1)}function addEvent$1(e,t,n,o){var r=supportsPassive$1?{passive:!1,capture:!!o}:!!o;e.addEventListener(t,n,r)}function removeEvent$1(e,t,n,o){e.removeEventListener(t,n,{capture:!!o})}function maybePrevent$1(e){e.cancelable&&e.preventDefault()}vendor$2&&vendor$2!=="standard"&&""+vendor$2.toLowerCase(),prefixStyle$2("transform"),prefixStyle$2("transition"),inBrowser$2&&prefixStyle$2("perspective")in elementStyle$2,prefixStyle$2("transitionTimingFunction"),prefixStyle$2("transitionDuration"),prefixStyle$2("transitionDelay"),prefixStyle$2("transformOrigin"),prefixStyle$2("transitionEnd"),prefixStyle$2("transitionProperty");function preventDefaultExceptionFn(e,t){for(var n in t)if(t[n].test(e[n]))return!0;return!1}var EventRegister$1=function(){function e(t,n){this.wrapper=t,this.events=n,this.addDOMEvents()}return e.prototype.destroy=function(){this.removeDOMEvents(),this.events=[]},e.prototype.addDOMEvents=function(){this.handleDOMEvents(addEvent$1)},e.prototype.removeDOMEvents=function(){this.handleDOMEvents(removeEvent$1)},e.prototype.handleDOMEvents=function(t){var n=this,o=this.wrapper;this.events.forEach(function(r){t(o,r.name,n,!!r.capture)})},e.prototype.handleEvent=function(t){var n=t.type;this.events.some(function(o){return o.name===n?(o.handler(t),!0):!1})},e}(),MouseWheel=function(){function e(t){this.scroll=t,this.wheelEndTimer=0,this.wheelMoveTimer=0,this.wheelStart=!1,this.init()}return e.prototype.init=function(){this.handleBScroll(),this.handleOptions(),this.handleHooks(),this.registerEvent()},e.prototype.handleBScroll=function(){this.scroll.registerType(["alterOptions","mousewheelStart","mousewheelMove","mousewheelEnd"])},e.prototype.handleOptions=function(){var t=this.scroll.options.mouseWheel===!0?{}:this.scroll.options.mouseWheel,n={speed:20,invert:!1,easeTime:300,discreteTime:400,throttleTime:0,dampingFactor:.1};this.mouseWheelOpt=extend$2(n,t)},e.prototype.handleHooks=function(){this.hooksFn=[],this.registerHooks(this.scroll.hooks,"destroy",this.destroy)},e.prototype.registerEvent=function(){this.eventRegister=new EventRegister$1(this.scroll.scroller.wrapper,[{name:"wheel",handler:this.wheelHandler.bind(this)},{name:"mousewheel",handler:this.wheelHandler.bind(this)},{name:"DOMMouseScroll",handler:this.wheelHandler.bind(this)}])},e.prototype.registerHooks=function(t,n,o){t.on(n,o,this),this.hooksFn.push([t,n,o])},e.prototype.wheelHandler=function(t){if(this.scroll.enabled){this.beforeHandler(t),this.wheelStart||(this.wheelStartHandler(t),this.wheelStart=!0);var n=this.getWheelDelta(t);this.wheelMoveHandler(n),this.wheelEndDetector(n)}},e.prototype.wheelStartHandler=function(t){this.cleanCache();var n=this.scroll.scroller,o=n.scrollBehaviorX,r=n.scrollBehaviorY;o.setMovingDirection(0),r.setMovingDirection(0),o.setDirection(0),r.setDirection(0),this.scroll.trigger(this.scroll.eventTypes.alterOptions,this.mouseWheelOpt),this.scroll.trigger(this.scroll.eventTypes.mousewheelStart)},e.prototype.cleanCache=function(){this.deltaCache=[]},e.prototype.wheelMoveHandler=function(t){var n=this,o=this.mouseWheelOpt,r=o.throttleTime,s=o.dampingFactor;if(r&&this.wheelMoveTimer)this.deltaCache.push(t);else{var a=this.deltaCache.reduce(function(b,_){return{x:b.x+_.x,y:b.y+_.y}},{x:0,y:0});this.cleanCache();var l=this.scroll.scroller,u=l.scrollBehaviorX,d=l.scrollBehaviorY;u.setMovingDirection(-t.directionX),d.setMovingDirection(-t.directionY),u.setDirection(t.x),d.setDirection(t.y);var h=u.performDampingAlgorithm(Math.round(t.x)+a.x,s),f=d.performDampingAlgorithm(Math.round(t.y)+a.x,s);if(!this.scroll.trigger(this.scroll.eventTypes.mousewheelMove,{x:h,y:f})){var g=this.getEaseTime();(h!==this.scroll.x||f!==this.scroll.y)&&this.scroll.scrollTo(h,f,g)}r&&(this.wheelMoveTimer=window.setTimeout(function(){n.wheelMoveTimer=0},r))}},e.prototype.wheelEndDetector=function(t){var n=this;window.clearTimeout(this.wheelEndTimer),this.wheelEndTimer=window.setTimeout(function(){n.wheelStart=!1,window.clearTimeout(n.wheelMoveTimer),n.wheelMoveTimer=0,n.scroll.trigger(n.scroll.eventTypes.mousewheelEnd,t)},this.mouseWheelOpt.discreteTime)},e.prototype.getWheelDelta=function(t){var n=this.mouseWheelOpt,o=n.speed,r=n.invert,s=0,a=0,l=r?-1:1;switch(!0){case"deltaX"in t:t.deltaMode===1?(s=-t.deltaX*o,a=-t.deltaY*o):(s=-t.deltaX,a=-t.deltaY);break;case"wheelDeltaX"in t:s=t.wheelDeltaX/120*o,a=t.wheelDeltaY/120*o;break;case"wheelDelta"in t:s=a=t.wheelDelta/120*o;break;case"detail"in t:s=a=-t.detail/3*o;break}s*=l,a*=l,this.scroll.hasVerticalScroll||(Math.abs(a)>Math.abs(s)&&(s=a),a=0),this.scroll.hasHorizontalScroll||(s=0);var u=s>0?-1:s<0?1:0,d=a>0?-1:a<0?1:0;return{x:s,y:a,directionX:u,directionY:d}},e.prototype.beforeHandler=function(t){var n=this.scroll.options,o=n.preventDefault,r=n.stopPropagation,s=n.preventDefaultException;o&&!preventDefaultExceptionFn(t.target,s)&&maybePrevent$1(t),r&&t.stopPropagation()},e.prototype.getEaseTime=function(){var t=100,n=this.mouseWheelOpt.easeTime;return n<t&&warn$2("easeTime should be greater than 100.If mouseWheel easeTime is too small,scrollEnd will be triggered many times."),Math.max(n,t)},e.prototype.destroy=function(){this.eventRegister.destroy(),window.clearTimeout(this.wheelEndTimer),window.clearTimeout(this.wheelMoveTimer),this.hooksFn.forEach(function(t){var n=t[0],o=t[1],r=t[2];n.off(o,r)})},e.pluginName="mouseWheel",e.applyOrder="pre",e}();/*!
71
71
  * better-scroll / scroll-bar
72
72
  * (c) 2016-2023 ustbhuangyi
73
73
  * Released under the MIT License.
@@ -84,15 +84,15 @@ map({
84
84
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
85
85
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
86
86
  PERFORMANCE OF THIS SOFTWARE.
87
- ***************************************************************************** */var __assign=function(){return __assign=Object.assign||function(t){for(var n,o=1,r=arguments.length;o<r;o++){n=arguments[o];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},__assign.apply(this,arguments)};function __spreadArrays(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;for(var o=Array(e),r=0,t=0;t<n;t++)for(var s=arguments[t],a=0,l=s.length;a<l;a++,r++)o[r]=s[a];return o}function warn$1(e){console.error("[BScroll warn]: "+e)}var inBrowser$1=typeof window<"u",ua$1=inBrowser$1&&navigator.userAgent.toLowerCase();ua$1&&ua$1.indexOf("android")>0,function(){if(typeof ua$1=="string"){var e=/os (\d\d?_\d(_\d)?)/,t=e.exec(ua$1);if(!t)return!1;var n=t[1].split("_").map(function(o){return parseInt(o,10)});return n[0]===13&&n[1]>=4}return!1}();var supportsPassive=!1;if(inBrowser$1){var EventName="test-passive";try{var opts={};Object.defineProperty(opts,"passive",{get:function(){supportsPassive=!0}}),window.addEventListener(EventName,function(){},opts)}catch{}}function getNow(){return window.performance&&window.performance.now&&window.performance.timing?window.performance.now()+window.performance.timing.navigationStart:+new Date}var extend$1=function(e,t){for(var n in t)e[n]=t[n];return e};function between(e,t,n){return e<t?t:e>n?n:e}var elementStyle$1=inBrowser$1&&document.createElement("div").style,vendor$1=function(){if(!inBrowser$1)return!1;for(var e=[{key:"standard",value:"transform"},{key:"webkit",value:"webkitTransform"},{key:"Moz",value:"MozTransform"},{key:"O",value:"OTransform"},{key:"ms",value:"msTransform"}],t=0,n=e;t<n.length;t++){var o=n[t];if(elementStyle$1[o.value]!==void 0)return o.key}return!1}();function prefixStyle$1(e){return vendor$1===!1?e:vendor$1==="standard"?e==="transitionEnd"?"transitionend":e:vendor$1+e.charAt(0).toUpperCase()+e.substr(1)}function addEvent(e,t,n,o){var r=supportsPassive?{passive:!1,capture:!!o}:!!o;e.addEventListener(t,n,r)}function removeEvent(e,t,n,o){e.removeEventListener(t,n,{capture:!!o})}function maybePrevent(e){e.cancelable&&e.preventDefault()}vendor$1&&vendor$1!=="standard"&&""+vendor$1.toLowerCase();var transform=prefixStyle$1("transform");prefixStyle$1("transition"),inBrowser$1&&prefixStyle$1("perspective")in elementStyle$1;var style={transform,transitionTimingFunction:prefixStyle$1("transitionTimingFunction"),transitionDuration:prefixStyle$1("transitionDuration"),transitionDelay:prefixStyle$1("transitionDelay"),transformOrigin:prefixStyle$1("transformOrigin"),transitionEnd:prefixStyle$1("transitionEnd"),transitionProperty:prefixStyle$1("transitionProperty")},EventEmitter=function(){function e(t){this.events={},this.eventTypes={},this.registerType(t)}return e.prototype.on=function(t,n,o){return o===void 0&&(o=this),this.hasType(t),this.events[t]||(this.events[t]=[]),this.events[t].push([n,o]),this},e.prototype.once=function(t,n,o){var r=this;o===void 0&&(o=this),this.hasType(t);var s=function(){for(var a=[],l=0;l<arguments.length;l++)a[l]=arguments[l];r.off(t,s);var u=n.apply(o,a);if(u===!0)return u};return s.fn=n,this.on(t,s),this},e.prototype.off=function(t,n){if(!t&&!n)return this.events={},this;if(t){if(this.hasType(t),!n)return this.events[t]=[],this;var o=this.events[t];if(!o)return this;for(var r=o.length;r--;)(o[r][0]===n||o[r][0]&&o[r][0].fn===n)&&o.splice(r,1);return this}},e.prototype.trigger=function(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];this.hasType(t);var r=this.events[t];if(r)for(var s=r.length,a=__spreadArrays(r),l,u=0;u<s;u++){var d=a[u],p=d[0],f=d[1];if(p&&(l=p.apply(f,n),l===!0))return l}},e.prototype.registerType=function(t){var n=this;t.forEach(function(o){n.eventTypes[o]=o})},e.prototype.destroy=function(){this.events={},this.eventTypes={}},e.prototype.hasType=function(t){var n=this.eventTypes,o=n[t]===t;o||warn$1('EventEmitter has used unknown event type: "'+t+'", should be oneof ['+(""+Object.keys(n).map(function(r){return JSON.stringify(r)}))+"]")},e}(),EventRegister=function(){function e(t,n){this.wrapper=t,this.events=n,this.addDOMEvents()}return e.prototype.destroy=function(){this.removeDOMEvents(),this.events=[]},e.prototype.addDOMEvents=function(){this.handleDOMEvents(addEvent)},e.prototype.removeDOMEvents=function(){this.handleDOMEvents(removeEvent)},e.prototype.handleDOMEvents=function(t){var n=this,o=this.wrapper;this.events.forEach(function(r){t(o,r.name,n,!!r.capture)})},e.prototype.handleEvent=function(t){var n=t.type;this.events.some(function(o){return o.name===n?(o.handler(t),!0):!1})},e}(),EventHandler=function(){function e(t,n){this.indicator=t,this.options=n,this.hooks=new EventEmitter(["touchStart","touchMove","touchEnd"]),this.registerEvents()}return e.prototype.registerEvents=function(){var t=this.options,n=t.disableMouse,o=t.disableTouch,r=[],s=[],a=[];n||(r.push({name:"mousedown",handler:this.start.bind(this)}),s.push({name:"mousemove",handler:this.move.bind(this)}),a.push({name:"mouseup",handler:this.end.bind(this)})),o||(r.push({name:"touchstart",handler:this.start.bind(this)}),s.push({name:"touchmove",handler:this.move.bind(this)}),a.push({name:"touchend",handler:this.end.bind(this)},{name:"touchcancel",handler:this.end.bind(this)})),this.startEventRegister=new EventRegister(this.indicator.indicatorEl,r),this.moveEventRegister=new EventRegister(window,s),this.endEventRegister=new EventRegister(window,a)},e.prototype.BScrollIsDisabled=function(){return!this.indicator.scroll.enabled},e.prototype.start=function(t){if(!this.BScrollIsDisabled()){var n=t.touches?t.touches[0]:t;maybePrevent(t),t.stopPropagation(),this.initiated=!0,this.lastPoint=n[this.indicator.keysMap.point],this.hooks.trigger(this.hooks.eventTypes.touchStart)}},e.prototype.move=function(t){if(this.initiated){var n=t.touches?t.touches[0]:t,o=n[this.indicator.keysMap.point];maybePrevent(t),t.stopPropagation();var r=o-this.lastPoint;this.lastPoint=o,this.hooks.trigger(this.hooks.eventTypes.touchMove,r)}},e.prototype.end=function(t){this.initiated&&(this.initiated=!1,maybePrevent(t),t.stopPropagation(),this.hooks.trigger(this.hooks.eventTypes.touchEnd))},e.prototype.destroy=function(){this.startEventRegister.destroy(),this.moveEventRegister.destroy(),this.endEventRegister.destroy()},e}(),Indicator=function(){function e(t,n){this.scroll=t,this.options=n,this.hooksFn=[],this.wrapper=n.wrapper,this.direction=n.direction,this.indicatorEl=this.wrapper.children[0],this.keysMap=this.getKeysMap(),this.handleFade(),this.handleHooks()}return e.prototype.handleFade=function(){this.options.fade&&(this.wrapper.style.opacity="0")},e.prototype.handleHooks=function(){var t=this,n=this.options,o=n.fade,r=n.interactive,s=n.scrollbarTrackClickable,a=this.scroll,l=a.hooks,u=a.scroller.translater.hooks,d=a.scroller.animater.hooks;if(this.registerHooks(l,l.eventTypes.refresh,this.refresh),this.registerHooks(u,u.eventTypes.translate,function(_){var T=t.keysMap.hasScroll;t.scroll[T]&&t.updatePosition(_)}),this.registerHooks(d,d.eventTypes.time,this.transitionTime),this.registerHooks(d,d.eventTypes.timeFunction,this.transitionTimingFunction),o&&(this.registerHooks(a,a.eventTypes.scrollEnd,function(){t.fade()}),this.registerHooks(a,a.eventTypes.scrollStart,function(){t.fade(!0)}),a.eventTypes.mousewheelStart&&a.eventTypes.mousewheelEnd&&(this.registerHooks(a,a.eventTypes.mousewheelStart,function(){t.fade(!0)}),this.registerHooks(a,a.eventTypes.mousewheelMove,function(){t.fade(!0)}),this.registerHooks(a,a.eventTypes.mousewheelEnd,function(){t.fade()}))),r){var p=this.scroll.options,f=p.disableMouse,g=p.disableTouch;this.eventHandler=new EventHandler(this,{disableMouse:f,disableTouch:g});var b=this.eventHandler.hooks;this.registerHooks(b,b.eventTypes.touchStart,this.startHandler),this.registerHooks(b,b.eventTypes.touchMove,this.moveHandler),this.registerHooks(b,b.eventTypes.touchEnd,this.endHandler)}s&&this.bindClick()},e.prototype.registerHooks=function(t,n,o){t.on(n,o,this),this.hooksFn.push([t,n,o])},e.prototype.bindClick=function(){var t=this.wrapper;this.clickEventRegister=new EventRegister(t,[{name:"click",handler:this.handleClick.bind(this)}])},e.prototype.handleClick=function(t){var n=this.calculateclickOffsetPos(t),o=this.scroll,r=o.x,s=o.y;r=this.direction==="horizontal"?n:r,s=this.direction==="vertical"?n:s,this.scroll.scrollTo(r,s,this.options.scrollbarTrackOffsetTime)},e.prototype.calculateclickOffsetPos=function(t){var n=this.keysMap,o=n.point,r=n.domRect,s=this.options.scrollbarTrackOffsetType,a=t[o]-this.wrapperRect[r],l=a<this.currentPos?-1:1,u=0,d=this.currentPos;return s==="step"?u=this.scrollInfo.baseSize*l:(u=0,d=a),this.newPos(d,u,this.scrollInfo)},e.prototype.getKeysMap=function(){return this.direction==="vertical"?{hasScroll:"hasVerticalScroll",size:"height",wrapperSize:"clientHeight",scrollerSize:"scrollerHeight",maxScrollPos:"maxScrollY",pos:"y",point:"pageY",translateProperty:"translateY",domRect:"top"}:{hasScroll:"hasHorizontalScroll",size:"width",wrapperSize:"clientWidth",scrollerSize:"scrollerWidth",maxScrollPos:"maxScrollX",pos:"x",point:"pageX",translateProperty:"translateX",domRect:"left"}},e.prototype.fade=function(t){var n=this.options,o=n.fadeInTime,r=n.fadeOutTime,s=t?o:r,a=this.wrapper;a.style[style.transitionDuration]=s+"ms",a.style.opacity=t?"1":"0"},e.prototype.refresh=function(){var t=this.keysMap.hasScroll,n=this.scroll,o=n.x,r=n.y;if(this.wrapperRect=this.wrapper.getBoundingClientRect(),this.canScroll(n[t])){var s=this.keysMap,a=s.wrapperSize,l=s.scrollerSize,u=s.maxScrollPos;this.scrollInfo=this.refreshScrollInfo(this.wrapper[a],n[l],n[u],this.indicatorEl[a]),this.updatePosition({x:o,y:r})}},e.prototype.transitionTime=function(t){t===void 0&&(t=0),this.indicatorEl.style[style.transitionDuration]=t+"ms"},e.prototype.transitionTimingFunction=function(t){this.indicatorEl.style[style.transitionTimingFunction]=t},e.prototype.canScroll=function(t){return this.wrapper.style.display=t?"block":"none",t},e.prototype.refreshScrollInfo=function(t,n,o,r){var s=Math.max(Math.round(t*t/(n||t||1)),this.options.minSize);this.options.isCustom&&(s=r);var a=t-s,l=a/o;return{baseSize:s,maxScrollPos:a,minScrollPos:0,sizeRatio:l}},e.prototype.updatePosition=function(t){var n=this.caculatePosAndSize(t,this.scrollInfo),o=n.pos,r=n.size;this.refreshStyle(r,o),this.currentPos=o},e.prototype.caculatePosAndSize=function(t,n){var o=this.keysMap.pos,r=n.sizeRatio,s=n.baseSize,a=n.maxScrollPos,l=n.minScrollPos,u=this.options.minSize,d=Math.round(r*t[o]),p;return d<l?(p=Math.max(s+d*3,u),d=l):d>a?(p=Math.max(s-(d-a)*3,u),d=a+s-p):p=s,{pos:d,size:p}},e.prototype.refreshStyle=function(t,n){var o=this.keysMap,r=o.translateProperty,s=o.size,a=this.scroll.options.translateZ;this.indicatorEl.style[s]=t+"px",this.indicatorEl.style[style.transform]=r+"("+n+"px)"+a},e.prototype.startHandler=function(){this.moved=!1,this.startTime=getNow(),this.transitionTime(),this.scroll.scroller.hooks.trigger(this.scroll.scroller.hooks.eventTypes.beforeScrollStart)},e.prototype.moveHandler=function(t){if(!this.moved&&!this.indicatorNotMoved(t)&&(this.moved=!0,this.scroll.scroller.hooks.trigger(this.scroll.scroller.hooks.eventTypes.scrollStart)),this.moved){var n=this.newPos(this.currentPos,t,this.scrollInfo);this.syncBScroll(n)}},e.prototype.endHandler=function(){if(this.moved){var t=this.scroll,n=t.x,o=t.y;this.scroll.scroller.hooks.trigger(this.scroll.scroller.hooks.eventTypes.scrollEnd,{x:n,y:o})}},e.prototype.indicatorNotMoved=function(t){var n=this.currentPos,o=this.scrollInfo,r=o.maxScrollPos,s=o.minScrollPos,a=n===s&&t<=0||n===r&&t>=0;return a},e.prototype.syncBScroll=function(t){var n=getNow(),o=this.scroll,r=o.x,s=o.y,a=o.options,l=o.scroller,u=o.maxScrollY,d=o.minScrollY,p=o.maxScrollX,f=o.minScrollX,g=a.probeType,b=a.momentumLimitTime,_={x:r,y:s};this.direction==="vertical"?_.y=between(t,u,d):_.x=between(t,p,f),l.translater.translate(_),n-this.startTime>b&&(this.startTime=n,g===1&&l.hooks.trigger(l.hooks.eventTypes.scroll,_)),g>1&&l.hooks.trigger(l.hooks.eventTypes.scroll,_)},e.prototype.newPos=function(t,n,o){var r=o.maxScrollPos,s=o.sizeRatio,a=o.minScrollPos,l=t+n;return l=between(l,a,r),Math.round(l/s)},e.prototype.destroy=function(){var t=this.options,n=t.interactive,o=t.scrollbarTrackClickable,r=t.isCustom;n&&this.eventHandler.destroy(),o&&this.clickEventRegister.destroy(),r||this.wrapper.parentNode.removeChild(this.wrapper),this.hooksFn.forEach(function(s){var a=s[0],l=s[1],u=s[2];a.off(l,u)}),this.hooksFn.length=0},e}(),ScrollBar=function(){function e(t){this.scroll=t,this.handleOptions(),this.createIndicators(),this.handleHooks()}return e.prototype.handleHooks=function(){var t=this,n=this.scroll;n.hooks.on(n.hooks.eventTypes.destroy,function(){for(var o=0,r=t.indicators;o<r.length;o++){var s=r[o];s.destroy()}})},e.prototype.handleOptions=function(){var t=this.scroll.options.scrollbar===!0?{}:this.scroll.options.scrollbar,n={fade:!0,fadeInTime:250,fadeOutTime:500,interactive:!1,customElements:[],minSize:8,scrollbarTrackClickable:!1,scrollbarTrackOffsetType:"step",scrollbarTrackOffsetTime:300};this.options=extend$1(n,t)},e.prototype.createIndicators=function(){for(var t,n=this.scroll,o=[],r=["scrollX","scrollY"],s=["horizontal","vertical"],a=this.options.customElements,l=0;l<r.length;l++){var u=r[l];if(n.options[u]){var d=a.shift(),p=s[l],f=!1,g=d||this.createScrollbarElement(p);g!==d?n.wrapper.appendChild(g):f=!0,t=__assign(__assign({wrapper:g,direction:p},this.options),{isCustom:f}),o.push(new Indicator(n,t))}}this.indicators=o},e.prototype.createScrollbarElement=function(t,n){n===void 0&&(n=this.options.scrollbarTrackClickable);var o=document.createElement("div"),r=document.createElement("div");return o.style.cssText="position:absolute;z-index:9999;overflow:hidden;",r.style.cssText="box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;",r.className="bscroll-indicator",t==="horizontal"?(o.style.cssText+="height:7px;left:2px;right:2px;bottom:0;",r.style.height="100%",o.className="bscroll-horizontal-scrollbar"):(o.style.cssText+="width:7px;bottom:2px;top:2px;right:1px;",r.style.width="100%",o.className="bscroll-vertical-scrollbar"),n||(o.style.cssText+="pointer-events:none;"),o.appendChild(r),o},e.pluginName="scrollbar",e}();/*!
87
+ ***************************************************************************** */var __assign=function(){return __assign=Object.assign||function(t){for(var n,o=1,r=arguments.length;o<r;o++){n=arguments[o];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},__assign.apply(this,arguments)};function __spreadArrays(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;for(var o=Array(e),r=0,t=0;t<n;t++)for(var s=arguments[t],a=0,l=s.length;a<l;a++,r++)o[r]=s[a];return o}function warn$1(e){console.error("[BScroll warn]: "+e)}var inBrowser$1=typeof window<"u",ua$1=inBrowser$1&&navigator.userAgent.toLowerCase();ua$1&&ua$1.indexOf("android")>0,function(){if(typeof ua$1=="string"){var e=/os (\d\d?_\d(_\d)?)/,t=e.exec(ua$1);if(!t)return!1;var n=t[1].split("_").map(function(o){return parseInt(o,10)});return n[0]===13&&n[1]>=4}return!1}();var supportsPassive=!1;if(inBrowser$1){var EventName="test-passive";try{var opts={};Object.defineProperty(opts,"passive",{get:function(){supportsPassive=!0}}),window.addEventListener(EventName,function(){},opts)}catch{}}function getNow(){return window.performance&&window.performance.now&&window.performance.timing?window.performance.now()+window.performance.timing.navigationStart:+new Date}var extend$1=function(e,t){for(var n in t)e[n]=t[n];return e};function between(e,t,n){return e<t?t:e>n?n:e}var elementStyle$1=inBrowser$1&&document.createElement("div").style,vendor$1=function(){if(!inBrowser$1)return!1;for(var e=[{key:"standard",value:"transform"},{key:"webkit",value:"webkitTransform"},{key:"Moz",value:"MozTransform"},{key:"O",value:"OTransform"},{key:"ms",value:"msTransform"}],t=0,n=e;t<n.length;t++){var o=n[t];if(elementStyle$1[o.value]!==void 0)return o.key}return!1}();function prefixStyle$1(e){return vendor$1===!1?e:vendor$1==="standard"?e==="transitionEnd"?"transitionend":e:vendor$1+e.charAt(0).toUpperCase()+e.substr(1)}function addEvent(e,t,n,o){var r=supportsPassive?{passive:!1,capture:!!o}:!!o;e.addEventListener(t,n,r)}function removeEvent(e,t,n,o){e.removeEventListener(t,n,{capture:!!o})}function maybePrevent(e){e.cancelable&&e.preventDefault()}vendor$1&&vendor$1!=="standard"&&""+vendor$1.toLowerCase();var transform=prefixStyle$1("transform");prefixStyle$1("transition"),inBrowser$1&&prefixStyle$1("perspective")in elementStyle$1;var style={transform,transitionTimingFunction:prefixStyle$1("transitionTimingFunction"),transitionDuration:prefixStyle$1("transitionDuration"),transitionDelay:prefixStyle$1("transitionDelay"),transformOrigin:prefixStyle$1("transformOrigin"),transitionEnd:prefixStyle$1("transitionEnd"),transitionProperty:prefixStyle$1("transitionProperty")},EventEmitter=function(){function e(t){this.events={},this.eventTypes={},this.registerType(t)}return e.prototype.on=function(t,n,o){return o===void 0&&(o=this),this.hasType(t),this.events[t]||(this.events[t]=[]),this.events[t].push([n,o]),this},e.prototype.once=function(t,n,o){var r=this;o===void 0&&(o=this),this.hasType(t);var s=function(){for(var a=[],l=0;l<arguments.length;l++)a[l]=arguments[l];r.off(t,s);var u=n.apply(o,a);if(u===!0)return u};return s.fn=n,this.on(t,s),this},e.prototype.off=function(t,n){if(!t&&!n)return this.events={},this;if(t){if(this.hasType(t),!n)return this.events[t]=[],this;var o=this.events[t];if(!o)return this;for(var r=o.length;r--;)(o[r][0]===n||o[r][0]&&o[r][0].fn===n)&&o.splice(r,1);return this}},e.prototype.trigger=function(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];this.hasType(t);var r=this.events[t];if(r)for(var s=r.length,a=__spreadArrays(r),l,u=0;u<s;u++){var d=a[u],h=d[0],f=d[1];if(h&&(l=h.apply(f,n),l===!0))return l}},e.prototype.registerType=function(t){var n=this;t.forEach(function(o){n.eventTypes[o]=o})},e.prototype.destroy=function(){this.events={},this.eventTypes={}},e.prototype.hasType=function(t){var n=this.eventTypes,o=n[t]===t;o||warn$1('EventEmitter has used unknown event type: "'+t+'", should be oneof ['+(""+Object.keys(n).map(function(r){return JSON.stringify(r)}))+"]")},e}(),EventRegister=function(){function e(t,n){this.wrapper=t,this.events=n,this.addDOMEvents()}return e.prototype.destroy=function(){this.removeDOMEvents(),this.events=[]},e.prototype.addDOMEvents=function(){this.handleDOMEvents(addEvent)},e.prototype.removeDOMEvents=function(){this.handleDOMEvents(removeEvent)},e.prototype.handleDOMEvents=function(t){var n=this,o=this.wrapper;this.events.forEach(function(r){t(o,r.name,n,!!r.capture)})},e.prototype.handleEvent=function(t){var n=t.type;this.events.some(function(o){return o.name===n?(o.handler(t),!0):!1})},e}(),EventHandler=function(){function e(t,n){this.indicator=t,this.options=n,this.hooks=new EventEmitter(["touchStart","touchMove","touchEnd"]),this.registerEvents()}return e.prototype.registerEvents=function(){var t=this.options,n=t.disableMouse,o=t.disableTouch,r=[],s=[],a=[];n||(r.push({name:"mousedown",handler:this.start.bind(this)}),s.push({name:"mousemove",handler:this.move.bind(this)}),a.push({name:"mouseup",handler:this.end.bind(this)})),o||(r.push({name:"touchstart",handler:this.start.bind(this)}),s.push({name:"touchmove",handler:this.move.bind(this)}),a.push({name:"touchend",handler:this.end.bind(this)},{name:"touchcancel",handler:this.end.bind(this)})),this.startEventRegister=new EventRegister(this.indicator.indicatorEl,r),this.moveEventRegister=new EventRegister(window,s),this.endEventRegister=new EventRegister(window,a)},e.prototype.BScrollIsDisabled=function(){return!this.indicator.scroll.enabled},e.prototype.start=function(t){if(!this.BScrollIsDisabled()){var n=t.touches?t.touches[0]:t;maybePrevent(t),t.stopPropagation(),this.initiated=!0,this.lastPoint=n[this.indicator.keysMap.point],this.hooks.trigger(this.hooks.eventTypes.touchStart)}},e.prototype.move=function(t){if(this.initiated){var n=t.touches?t.touches[0]:t,o=n[this.indicator.keysMap.point];maybePrevent(t),t.stopPropagation();var r=o-this.lastPoint;this.lastPoint=o,this.hooks.trigger(this.hooks.eventTypes.touchMove,r)}},e.prototype.end=function(t){this.initiated&&(this.initiated=!1,maybePrevent(t),t.stopPropagation(),this.hooks.trigger(this.hooks.eventTypes.touchEnd))},e.prototype.destroy=function(){this.startEventRegister.destroy(),this.moveEventRegister.destroy(),this.endEventRegister.destroy()},e}(),Indicator=function(){function e(t,n){this.scroll=t,this.options=n,this.hooksFn=[],this.wrapper=n.wrapper,this.direction=n.direction,this.indicatorEl=this.wrapper.children[0],this.keysMap=this.getKeysMap(),this.handleFade(),this.handleHooks()}return e.prototype.handleFade=function(){this.options.fade&&(this.wrapper.style.opacity="0")},e.prototype.handleHooks=function(){var t=this,n=this.options,o=n.fade,r=n.interactive,s=n.scrollbarTrackClickable,a=this.scroll,l=a.hooks,u=a.scroller.translater.hooks,d=a.scroller.animater.hooks;if(this.registerHooks(l,l.eventTypes.refresh,this.refresh),this.registerHooks(u,u.eventTypes.translate,function(_){var T=t.keysMap.hasScroll;t.scroll[T]&&t.updatePosition(_)}),this.registerHooks(d,d.eventTypes.time,this.transitionTime),this.registerHooks(d,d.eventTypes.timeFunction,this.transitionTimingFunction),o&&(this.registerHooks(a,a.eventTypes.scrollEnd,function(){t.fade()}),this.registerHooks(a,a.eventTypes.scrollStart,function(){t.fade(!0)}),a.eventTypes.mousewheelStart&&a.eventTypes.mousewheelEnd&&(this.registerHooks(a,a.eventTypes.mousewheelStart,function(){t.fade(!0)}),this.registerHooks(a,a.eventTypes.mousewheelMove,function(){t.fade(!0)}),this.registerHooks(a,a.eventTypes.mousewheelEnd,function(){t.fade()}))),r){var h=this.scroll.options,f=h.disableMouse,g=h.disableTouch;this.eventHandler=new EventHandler(this,{disableMouse:f,disableTouch:g});var b=this.eventHandler.hooks;this.registerHooks(b,b.eventTypes.touchStart,this.startHandler),this.registerHooks(b,b.eventTypes.touchMove,this.moveHandler),this.registerHooks(b,b.eventTypes.touchEnd,this.endHandler)}s&&this.bindClick()},e.prototype.registerHooks=function(t,n,o){t.on(n,o,this),this.hooksFn.push([t,n,o])},e.prototype.bindClick=function(){var t=this.wrapper;this.clickEventRegister=new EventRegister(t,[{name:"click",handler:this.handleClick.bind(this)}])},e.prototype.handleClick=function(t){var n=this.calculateclickOffsetPos(t),o=this.scroll,r=o.x,s=o.y;r=this.direction==="horizontal"?n:r,s=this.direction==="vertical"?n:s,this.scroll.scrollTo(r,s,this.options.scrollbarTrackOffsetTime)},e.prototype.calculateclickOffsetPos=function(t){var n=this.keysMap,o=n.point,r=n.domRect,s=this.options.scrollbarTrackOffsetType,a=t[o]-this.wrapperRect[r],l=a<this.currentPos?-1:1,u=0,d=this.currentPos;return s==="step"?u=this.scrollInfo.baseSize*l:(u=0,d=a),this.newPos(d,u,this.scrollInfo)},e.prototype.getKeysMap=function(){return this.direction==="vertical"?{hasScroll:"hasVerticalScroll",size:"height",wrapperSize:"clientHeight",scrollerSize:"scrollerHeight",maxScrollPos:"maxScrollY",pos:"y",point:"pageY",translateProperty:"translateY",domRect:"top"}:{hasScroll:"hasHorizontalScroll",size:"width",wrapperSize:"clientWidth",scrollerSize:"scrollerWidth",maxScrollPos:"maxScrollX",pos:"x",point:"pageX",translateProperty:"translateX",domRect:"left"}},e.prototype.fade=function(t){var n=this.options,o=n.fadeInTime,r=n.fadeOutTime,s=t?o:r,a=this.wrapper;a.style[style.transitionDuration]=s+"ms",a.style.opacity=t?"1":"0"},e.prototype.refresh=function(){var t=this.keysMap.hasScroll,n=this.scroll,o=n.x,r=n.y;if(this.wrapperRect=this.wrapper.getBoundingClientRect(),this.canScroll(n[t])){var s=this.keysMap,a=s.wrapperSize,l=s.scrollerSize,u=s.maxScrollPos;this.scrollInfo=this.refreshScrollInfo(this.wrapper[a],n[l],n[u],this.indicatorEl[a]),this.updatePosition({x:o,y:r})}},e.prototype.transitionTime=function(t){t===void 0&&(t=0),this.indicatorEl.style[style.transitionDuration]=t+"ms"},e.prototype.transitionTimingFunction=function(t){this.indicatorEl.style[style.transitionTimingFunction]=t},e.prototype.canScroll=function(t){return this.wrapper.style.display=t?"block":"none",t},e.prototype.refreshScrollInfo=function(t,n,o,r){var s=Math.max(Math.round(t*t/(n||t||1)),this.options.minSize);this.options.isCustom&&(s=r);var a=t-s,l=a/o;return{baseSize:s,maxScrollPos:a,minScrollPos:0,sizeRatio:l}},e.prototype.updatePosition=function(t){var n=this.caculatePosAndSize(t,this.scrollInfo),o=n.pos,r=n.size;this.refreshStyle(r,o),this.currentPos=o},e.prototype.caculatePosAndSize=function(t,n){var o=this.keysMap.pos,r=n.sizeRatio,s=n.baseSize,a=n.maxScrollPos,l=n.minScrollPos,u=this.options.minSize,d=Math.round(r*t[o]),h;return d<l?(h=Math.max(s+d*3,u),d=l):d>a?(h=Math.max(s-(d-a)*3,u),d=a+s-h):h=s,{pos:d,size:h}},e.prototype.refreshStyle=function(t,n){var o=this.keysMap,r=o.translateProperty,s=o.size,a=this.scroll.options.translateZ;this.indicatorEl.style[s]=t+"px",this.indicatorEl.style[style.transform]=r+"("+n+"px)"+a},e.prototype.startHandler=function(){this.moved=!1,this.startTime=getNow(),this.transitionTime(),this.scroll.scroller.hooks.trigger(this.scroll.scroller.hooks.eventTypes.beforeScrollStart)},e.prototype.moveHandler=function(t){if(!this.moved&&!this.indicatorNotMoved(t)&&(this.moved=!0,this.scroll.scroller.hooks.trigger(this.scroll.scroller.hooks.eventTypes.scrollStart)),this.moved){var n=this.newPos(this.currentPos,t,this.scrollInfo);this.syncBScroll(n)}},e.prototype.endHandler=function(){if(this.moved){var t=this.scroll,n=t.x,o=t.y;this.scroll.scroller.hooks.trigger(this.scroll.scroller.hooks.eventTypes.scrollEnd,{x:n,y:o})}},e.prototype.indicatorNotMoved=function(t){var n=this.currentPos,o=this.scrollInfo,r=o.maxScrollPos,s=o.minScrollPos,a=n===s&&t<=0||n===r&&t>=0;return a},e.prototype.syncBScroll=function(t){var n=getNow(),o=this.scroll,r=o.x,s=o.y,a=o.options,l=o.scroller,u=o.maxScrollY,d=o.minScrollY,h=o.maxScrollX,f=o.minScrollX,g=a.probeType,b=a.momentumLimitTime,_={x:r,y:s};this.direction==="vertical"?_.y=between(t,u,d):_.x=between(t,h,f),l.translater.translate(_),n-this.startTime>b&&(this.startTime=n,g===1&&l.hooks.trigger(l.hooks.eventTypes.scroll,_)),g>1&&l.hooks.trigger(l.hooks.eventTypes.scroll,_)},e.prototype.newPos=function(t,n,o){var r=o.maxScrollPos,s=o.sizeRatio,a=o.minScrollPos,l=t+n;return l=between(l,a,r),Math.round(l/s)},e.prototype.destroy=function(){var t=this.options,n=t.interactive,o=t.scrollbarTrackClickable,r=t.isCustom;n&&this.eventHandler.destroy(),o&&this.clickEventRegister.destroy(),r||this.wrapper.parentNode.removeChild(this.wrapper),this.hooksFn.forEach(function(s){var a=s[0],l=s[1],u=s[2];a.off(l,u)}),this.hooksFn.length=0},e}(),ScrollBar=function(){function e(t){this.scroll=t,this.handleOptions(),this.createIndicators(),this.handleHooks()}return e.prototype.handleHooks=function(){var t=this,n=this.scroll;n.hooks.on(n.hooks.eventTypes.destroy,function(){for(var o=0,r=t.indicators;o<r.length;o++){var s=r[o];s.destroy()}})},e.prototype.handleOptions=function(){var t=this.scroll.options.scrollbar===!0?{}:this.scroll.options.scrollbar,n={fade:!0,fadeInTime:250,fadeOutTime:500,interactive:!1,customElements:[],minSize:8,scrollbarTrackClickable:!1,scrollbarTrackOffsetType:"step",scrollbarTrackOffsetTime:300};this.options=extend$1(n,t)},e.prototype.createIndicators=function(){for(var t,n=this.scroll,o=[],r=["scrollX","scrollY"],s=["horizontal","vertical"],a=this.options.customElements,l=0;l<r.length;l++){var u=r[l];if(n.options[u]){var d=a.shift(),h=s[l],f=!1,g=d||this.createScrollbarElement(h);g!==d?n.wrapper.appendChild(g):f=!0,t=__assign(__assign({wrapper:g,direction:h},this.options),{isCustom:f}),o.push(new Indicator(n,t))}}this.indicators=o},e.prototype.createScrollbarElement=function(t,n){n===void 0&&(n=this.options.scrollbarTrackClickable);var o=document.createElement("div"),r=document.createElement("div");return o.style.cssText="position:absolute;z-index:9999;overflow:hidden;",r.style.cssText="box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;",r.className="bscroll-indicator",t==="horizontal"?(o.style.cssText+="height:7px;left:2px;right:2px;bottom:0;",r.style.height="100%",o.className="bscroll-horizontal-scrollbar"):(o.style.cssText+="width:7px;bottom:2px;top:2px;right:1px;",r.style.width="100%",o.className="bscroll-vertical-scrollbar"),n||(o.style.cssText+="pointer-events:none;"),o.appendChild(r),o},e.pluginName="scrollbar",e}();/*!
88
88
  * better-scroll / nested-scroll
89
89
  * (c) 2016-2020 ustbhuangyi
90
90
  * Released under the MIT License.
91
- */const compatibleFeatures={duplicateClick:function(e){var t=e[0],n=e[1];t.options.click&&n.options.click&&(n.options.click=!1)},nestedScroll:function(e){var t=e[0],n=e[1],o=t.options.scrollX,r=t.options.scrollY,s=n.options.scrollX,a=n.options.scrollY;(o===s||r===a)&&(e.forEach(function(l,u){var d=e[(u+1)%2];l.on("scrollStart",function(){d.pending&&(d.stop(),d.resetPosition()),setupData(d),d.disable()}),l.on("touchEnd",function(){d.enable()})}),n.on("scrollStart",function(){checkBeyondBoundary(n)&&(n.disable(),t.enable())}))}};var NestedScroll=function(){function e(t){var n=e.nestedScroll;return n instanceof e||(n=e.nestedScroll=this,n.stores=[]),n.setup(t),n.addHooks(t),n}return e.prototype.setup=function(t){this.appendBScroll(t),this.handleContainRelationship(),this.handleCompatible()},e.prototype.addHooks=function(t){var n=this;t.on("destroy",function(){n.teardown(t)})},e.prototype.teardown=function(t){this.removeBScroll(t),this.handleContainRelationship(),this.handleCompatible()},e.prototype.appendBScroll=function(t){this.stores.push(t)},e.prototype.removeBScroll=function(t){var n=this.stores.indexOf(t);n!==-1&&(t.wrapper.isBScrollContainer=void 0,this.stores.splice(n,1))},e.prototype.handleContainRelationship=function(){var t=this.stores;if(t.length<=1){t[0]&&t[0].__parentInfo&&(t[0].__parentInfo=void 0);return}for(var n,o,r,s,a=0;a<t.length;a++){n=t[a],o=n.wrapper;for(var l=0;l<t.length;l++)if(r=t[l],s=r.wrapper,n!==r&&s.contains(o))if(!n.__parentInfo)n.__parentInfo={parent:r,depth:calculateDepths(o,s)};else{var u=calculateDepths(o,s),d=n.__parentInfo.depth;d>u&&(n.__parentInfo={parent:r,depth:u})}}},e.prototype.handleCompatible=function(){var t=this.availableBScrolls(),n=["duplicateClick","nestedScroll"];t.forEach(function(o){n.forEach(function(r){compatibleFeatures[r](o)})})},e.prototype.availableBScrolls=function(){var t=[];return t=this.stores.filter(function(n){return!!n.__parentInfo}).map(function(n){return[n.__parentInfo.parent,n]}),t},e.pluginName="nestedScroll",e}();function calculateDepths(e,t){for(var n=0,o=e.parentNode;o&&o!==t;)n++,o=o.parentNode;return n}function checkBeyondBoundary(e){var t=hasScroll(e),n=t.hasHorizontalScroll,o=t.hasVerticalScroll,r=e.scroller,s=r.scrollBehaviorX,a=r.scrollBehaviorY,l=e.x>=e.minScrollX&&s.movingDirection===-1,u=e.x<=e.maxScrollX&&s.movingDirection===1,d=e.y>=e.minScrollY&&a.movingDirection===-1,p=e.y<=e.maxScrollY&&a.movingDirection===1;return o?d||p:n?l||u:!1}function setupData(e){var t=hasScroll(e),n=t.hasHorizontalScroll,o=t.hasVerticalScroll,r=e.scroller,s=r.actions,a=r.scrollBehaviorX,l=r.scrollBehaviorY;s.startTime=+new Date,o?l.startPos=l.currentPos:n&&(a.startPos=a.currentPos)}function hasScroll(e){return{hasHorizontalScroll:e.scroller.scrollBehaviorX.hasScroll,hasVerticalScroll:e.scroller.scrollBehaviorY.hasScroll}}function patchedMomentum(e,t,n,o,r,s,a){a===void 0&&(a=this.options);var l=e-t,u=Math.abs(l)/n,d=a.deceleration;a.swipeBounceTime;var p=a.swipeTime,f={destination:e+u/d*(l<0?-1:1),duration:p,rate:15};return this.hooks.trigger(this.hooks.eventTypes.momentum,f,l),f.destination<o?(f.destination=s?Math.max(o-s/4,o-s/f.rate*u):o,f.duration=Math.abs(f.destination-e)/u):f.destination>r&&(f.destination=s?Math.min(r+s/4,r+s/f.rate*u):r,f.duration=Math.abs(f.destination-e)/u),f.destination=Math.round(f.destination),f}/*!
91
+ */const compatibleFeatures={duplicateClick:function(e){var t=e[0],n=e[1];t.options.click&&n.options.click&&(n.options.click=!1)},nestedScroll:function(e){var t=e[0],n=e[1],o=t.options.scrollX,r=t.options.scrollY,s=n.options.scrollX,a=n.options.scrollY;(o===s||r===a)&&(e.forEach(function(l,u){var d=e[(u+1)%2];l.on("scrollStart",function(){d.pending&&(d.stop(),d.resetPosition()),setupData(d),d.disable()}),l.on("touchEnd",function(){d.enable()})}),n.on("scrollStart",function(){checkBeyondBoundary(n)&&(n.disable(),t.enable())}))}};var NestedScroll=function(){function e(t){var n=e.nestedScroll;return n instanceof e||(n=e.nestedScroll=this,n.stores=[]),n.setup(t),n.addHooks(t),n}return e.prototype.setup=function(t){this.appendBScroll(t),this.handleContainRelationship(),this.handleCompatible()},e.prototype.addHooks=function(t){var n=this;t.on("destroy",function(){n.teardown(t)})},e.prototype.teardown=function(t){this.removeBScroll(t),this.handleContainRelationship(),this.handleCompatible()},e.prototype.appendBScroll=function(t){this.stores.push(t)},e.prototype.removeBScroll=function(t){var n=this.stores.indexOf(t);n!==-1&&(t.wrapper.isBScrollContainer=void 0,this.stores.splice(n,1))},e.prototype.handleContainRelationship=function(){var t=this.stores;if(t.length<=1){t[0]&&t[0].__parentInfo&&(t[0].__parentInfo=void 0);return}for(var n,o,r,s,a=0;a<t.length;a++){n=t[a],o=n.wrapper;for(var l=0;l<t.length;l++)if(r=t[l],s=r.wrapper,n!==r&&s.contains(o))if(!n.__parentInfo)n.__parentInfo={parent:r,depth:calculateDepths(o,s)};else{var u=calculateDepths(o,s),d=n.__parentInfo.depth;d>u&&(n.__parentInfo={parent:r,depth:u})}}},e.prototype.handleCompatible=function(){var t=this.availableBScrolls(),n=["duplicateClick","nestedScroll"];t.forEach(function(o){n.forEach(function(r){compatibleFeatures[r](o)})})},e.prototype.availableBScrolls=function(){var t=[];return t=this.stores.filter(function(n){return!!n.__parentInfo}).map(function(n){return[n.__parentInfo.parent,n]}),t},e.pluginName="nestedScroll",e}();function calculateDepths(e,t){for(var n=0,o=e.parentNode;o&&o!==t;)n++,o=o.parentNode;return n}function checkBeyondBoundary(e){var t=hasScroll(e),n=t.hasHorizontalScroll,o=t.hasVerticalScroll,r=e.scroller,s=r.scrollBehaviorX,a=r.scrollBehaviorY,l=e.x>=e.minScrollX&&s.movingDirection===-1,u=e.x<=e.maxScrollX&&s.movingDirection===1,d=e.y>=e.minScrollY&&a.movingDirection===-1,h=e.y<=e.maxScrollY&&a.movingDirection===1;return o?d||h:n?l||u:!1}function setupData(e){var t=hasScroll(e),n=t.hasHorizontalScroll,o=t.hasVerticalScroll,r=e.scroller,s=r.actions,a=r.scrollBehaviorX,l=r.scrollBehaviorY;s.startTime=+new Date,o?l.startPos=l.currentPos:n&&(a.startPos=a.currentPos)}function hasScroll(e){return{hasHorizontalScroll:e.scroller.scrollBehaviorX.hasScroll,hasVerticalScroll:e.scroller.scrollBehaviorY.hasScroll}}function patchedMomentum(e,t,n,o,r,s,a){a===void 0&&(a=this.options);var l=e-t,u=Math.abs(l)/n,d=a.deceleration;a.swipeBounceTime;var h=a.swipeTime,f={destination:e+u/d*(l<0?-1:1),duration:h,rate:15};return this.hooks.trigger(this.hooks.eventTypes.momentum,f,l),f.destination<o?(f.destination=s?Math.max(o-s/4,o-s/f.rate*u):o,f.duration=Math.abs(f.destination-e)/u):f.destination>r&&(f.destination=s?Math.min(r+s/4,r+s/f.rate*u):r,f.duration=Math.abs(f.destination-e)/u),f.destination=Math.round(f.destination),f}/*!
92
92
  * better-scroll / slide
93
93
  * (c) 2016-2020 ustbhuangyi
94
94
  * Released under the MIT License.
95
- */function warn(e){console.error("[BScroll warn]: "+e)}var inBrowser=typeof window<"u",ua=inBrowser&&navigator.userAgent.toLowerCase();ua&&ua.indexOf("android")>0;function extend(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var o=0;o<t.length;o++){var r=t[o];for(var s in r)e[s]=r[s]}return e}function fixInboundValue(e,t,n){return e<t?t:e>n?n:e}var elementStyle=inBrowser&&document.createElement("div").style,vendor=function(){if(!inBrowser)return!1;var e={webkit:"webkitTransform",Moz:"MozTransform",O:"OTransform",ms:"msTransform",standard:"transform"};for(var t in e)if(elementStyle[e[t]]!==void 0)return t;return!1}();function prefixStyle(e){return vendor===!1?e:vendor==="standard"?e==="transitionEnd"?"transitionend":e:vendor+e.charAt(0).toUpperCase()+e.substr(1)}vendor&&vendor!=="standard"&&""+vendor.toLowerCase(),prefixStyle("transform"),prefixStyle("transition"),inBrowser&&prefixStyle("perspective")in elementStyle,prefixStyle("transitionTimingFunction"),prefixStyle("transitionDuration"),prefixStyle("transitionDelay"),prefixStyle("transformOrigin"),prefixStyle("transitionEnd");function getRect(e){if(e instanceof window.SVGElement){var t=e.getBoundingClientRect();return{top:t.top,left:t.left,width:t.width,height:t.height}}else return{top:e.offsetTop,left:e.offsetLeft,width:e.offsetWidth,height:e.offsetHeight}}function prepend(e,t){var n=t.firstChild;n?before(e,n):t.appendChild(e)}function before(e,t){t.parentNode.insertBefore(e,t)}function removeChild(e,t){e.removeChild(t)}var ease={bounce:{style:"cubic-bezier(0.165, 0.84, 0.44, 1)",fn:function(e){return 1- --e*e*e*e}}},PagesPos=function(){function e(t,n){this.scroll=t,this.slideOpt=n,this.slideEl=null,this.init()}return e.prototype.init=function(){var t=this.scroll.scroller,n=t.scrollBehaviorX,o=t.scrollBehaviorY,r=getRect(t.wrapper),s=getRect(t.content);this.wrapperWidth=r.width,this.wrapperHeight=r.height,this.scrollerHeight=o.hasScroll?s.height:r.height,this.scrollerWidth=n.hasScroll?s.width:r.width;var a=this.slideOpt.stepX||this.wrapperWidth,l=this.slideOpt.stepY||this.wrapperHeight,u=t.content,d=this.slideOpt.el;typeof d=="string"&&(this.slideEl=u.querySelectorAll(d)),this.pages=this.slideEl?this.computePagePosInfoByEl(this.slideEl):this.computePagePosInfo(a,l),this.xLen=this.pages?this.pages.length:0,this.yLen=this.pages&&this.pages[0]?this.pages[0].length:0},e.prototype.hasInfo=function(){return!(!this.pages||!this.pages.length)},e.prototype.getPos=function(t,n){return this.pages[t]?this.pages[t][n]:null},e.prototype.getNearestPage=function(t,n){if(this.hasInfo()){for(var o=0,r=0,s=this.pages.length;o<s-1&&!(t>=this.pages[o][0].cx);o++);for(s=this.pages[o].length;r<s-1&&!(n>=this.pages[0][r].cy);r++);return{pageX:o,pageY:r}}},e.prototype.computePagePosInfo=function(t,n){var o=[],r=0,s,a,l,u=0,d,p=this.scroll.scroller.scrollBehaviorX.maxScrollPos,f=this.scroll.scroller.scrollBehaviorY.maxScrollPos;for(a=Math.round(t/2),l=Math.round(n/2);r>-this.scrollerWidth;){for(o[u]=[],d=0,s=0;s>-this.scrollerHeight;)o[u][d]={x:Math.max(r,p),y:Math.max(s,f),width:t,height:n,cx:r-a,cy:s-l},s-=n,d++;r-=t,u++}return o},e.prototype.computePagePosInfoByEl=function(t){for(var n=[],o=0,r=0,s,a,l=0,u=t.length,d=0,p=-1,f,g=this.scroll.scroller.scrollBehaviorX.maxScrollPos,b=this.scroll.scroller.scrollBehaviorY.maxScrollPos;l<u;l++)f=getRect(t[l]),(l===0||f.left<=getRect(t[l-1]).left)&&(d=0,p++),n[d]||(n[d]=[]),o=Math.max(-f.left,g),r=Math.max(-f.top,b),s=o-Math.round(f.width/2),a=r-Math.round(f.height/2),n[d][p]={x:o,y:r,width:f.width,height:f.height,cx:s,cy:a},o>g&&d++;return n},e}(),PageInfo=function(){function e(t,n){this.scroll=t,this.slideOpt=n}return e.prototype.init=function(){this.currentPage={x:0,y:0,pageX:0,pageY:0},this.pagesPos=new PagesPos(this.scroll,this.slideOpt),this.checkSlideLoop()},e.prototype.changeCurrentPage=function(t){this.currentPage=t},e.prototype.change2safePage=function(t,n){if(this.pagesPos.hasInfo()){t>=this.pagesPos.xLen?t=this.pagesPos.xLen-1:t<0&&(t=0),n>=this.pagesPos.yLen?n=this.pagesPos.yLen-1:n<0&&(n=0);var o=this.pagesPos.getPos(t,n);return{pageX:t,pageY:n,x:o?o.x:0,y:o?o.y:0}}},e.prototype.getInitPage=function(){var t=this.loopX?1:0,n=this.loopY?1:0;return{pageX:t,pageY:n}},e.prototype.getRealPage=function(t){var n=function(r,s){for(var a=[],l=0;l<s;l++)a.push(l);return a.unshift(s-1),a.push(0),a[r]},o=t?extend({},t):extend({},this.currentPage);return this.loopX&&(o.pageX=n(o.pageX,this.pagesPos.xLen-2)),this.loopY&&(o.pageY=n(o.pageY,this.pagesPos.yLen-2)),{pageX:o.pageX,pageY:o.pageY}},e.prototype.getPageSize=function(){return this.pagesPos.getPos(this.currentPage.pageX,this.currentPage.pageY)},e.prototype.realPage2Page=function(t,n){if(this.pagesPos.hasInfo()){var o=this.pagesPos.xLen-1,r=this.pagesPos.yLen-1,s=0,a=0;return this.loopX&&(t+=1,s=s+1,o=o-1),this.loopY&&(n+=1,a=a+1,r=r-1),t=fixInboundValue(t,s,o),n=fixInboundValue(n,a,r),{realX:t,realY:n}}},e.prototype.nextPage=function(){return this.changedPageNum("positive")},e.prototype.prevPage=function(){return this.changedPageNum("negative")},e.prototype.nearestPage=function(t,n,o,r){var s=this.pagesPos.getNearestPage(t,n);if(!s)return{x:0,y:0,pageX:0,pageY:0};var a=s.pageX,l=s.pageY,u,d;return a===this.currentPage.pageX&&(a+=o,a=fixInboundValue(a,0,this.pagesPos.xLen-1)),l===this.currentPage.pageY&&(l+=r,l=fixInboundValue(s.pageY,0,this.pagesPos.yLen-1)),u=this.pagesPos.getPos(a,0).x,d=this.pagesPos.getPos(0,l).y,{x:u,y:d,pageX:a,pageY:l}},e.prototype.getLoopStage=function(){if(!this.needLoop)return"middle";if(this.loopX){if(this.currentPage.pageX===0)return"head";if(this.currentPage.pageX===this.pagesPos.xLen-1)return"tail"}if(this.loopY){if(this.currentPage.pageY===0)return"head";if(this.currentPage.pageY===this.pagesPos.yLen-1)return"tail"}return"middle"},e.prototype.resetLoopPage=function(){if(this.loopX){if(this.currentPage.pageX===0)return{pageX:this.pagesPos.xLen-2,pageY:this.currentPage.pageY};if(this.currentPage.pageX===this.pagesPos.xLen-1)return{pageX:1,pageY:this.currentPage.pageY}}if(this.loopY){if(this.currentPage.pageY===0)return{pageX:this.currentPage.pageX,pageY:this.pagesPos.yLen-2};if(this.currentPage.pageY===this.pagesPos.yLen-1)return{pageX:this.currentPage.pageX,pageY:1}}},e.prototype.isSameWithCurrent=function(t){return!(t.pageX!==this.currentPage.pageX||t.pageY!==this.currentPage.pageY)},e.prototype.changedPageNum=function(t){var n=this.currentPage.pageX,o=this.currentPage.pageY;return this.slideX&&(n=t==="negative"?n-1:n+1),this.slideY&&(o=t==="negative"?o-1:o+1),{pageX:n,pageY:o}},e.prototype.checkSlideLoop=function(){this.needLoop=this.slideOpt.loop,this.pagesPos.xLen>1&&(this.slideX=!0),this.pagesPos.pages[0]&&this.pagesPos.yLen>1&&(this.slideY=!0),this.loopX=this.needLoop&&this.slideX,this.loopY=this.needLoop&&this.slideY,this.slideX&&this.slideY&&warn("slide does not support two direction at the same time.")},e}(),sourcePrefix="plugins.slide",propertiesMap=[{key:"next",name:"next"},{key:"prev",name:"prev"},{key:"goToPage",name:"goToPage"},{key:"getCurrentPage",name:"getCurrentPage"}],propertiesConfig=propertiesMap.map(function(e){return{key:e.key,sourceKey:sourcePrefix+"."+e.name}}),Slide=function(){function e(t){this.scroll=t,this.resetLooping=!1,this.isTouching=!1,this.scroll.proxy(propertiesConfig),this.scroll.registerType(["slideWillChange"]),this.slideOpt=this.scroll.options.slide,this.page=new PageInfo(t,this.slideOpt),this.hooksFn=[],this.willChangeToPage={pageX:0,pageY:0},this.init()}return e.prototype.init=function(){var t=this,n=this.slideOpt,o=this.scroll.scroller.content,r=!1;if(n.loop){var s=o.children;s.length>1?(this.cloneSlideEleForLoop(o),r=!0):n.loop=!1}var a=this.setSlideWidth(o),l=this.setSlideHeight(this.scroll.scroller.wrapper,o),u=a||l,d=this.scroll.hooks,p=this.scroll.scroller.hooks;this.registorHooks(d,"refresh",this.initSlideState),this.registorHooks(d,"destroy",this.destroy),this.registorHooks(p,"momentum",this.modifyScrollMetaHandler),this.registorHooks(this.scroll,"scrollEnd",this.amendCurrentPage),this.registorHooks(p,"beforeStart",this.setTouchFlag),this.registorHooks(p,"scroll",this.scrollMoving),this.registorHooks(p,"resize",this.resize),this.scroll.eventTypes.mousewheelMove&&this.scroll.eventTypes.mousewheelEnd&&(this.registorHooks(this.scroll,"mousewheelMove",function(){return!0}),this.registorHooks(this.scroll,"mousewheelEnd",function(f){(f.directionX===1||f.directionY===1)&&t.next(),(f.directionX===-1||f.directionY===-1)&&t.prev()})),n.listenFlick!==!1&&this.registorHooks(p,"flick",this.flickHandler),!r&&!u?this.initSlideState():this.scroll.refresh()},e.prototype.resize=function(){var t=this,n=this.scroll.scroller.content,o=this.scroll.scroller.wrapper;return clearTimeout(this.resizeTimeout),this.resizeTimeout=window.setTimeout(function(){t.clearSlideWidth(n),t.clearSlideHeight(n),t.setSlideWidth(n),t.setSlideHeight(o,n),t.scroll.refresh()},this.scroll.options.resizePolling),!0},e.prototype.next=function(t,n){var o=this.page.nextPage(),r=o.pageX,s=o.pageY;this.goTo(r,s,t,n)},e.prototype.prev=function(t,n){var o=this.page.prevPage(),r=o.pageX,s=o.pageY;this.goTo(r,s,t,n)},e.prototype.goToPage=function(t,n,o,r){var s=this.page.realPage2Page(t,n);s&&this.goTo(s.realX,s.realY,o,r)},e.prototype.getCurrentPage=function(){return this.page.getRealPage()},e.prototype.nearestPage=function(t,n){var o=this.scroll.scroller.scrollBehaviorX,r=this.scroll.scroller.scrollBehaviorY,s=!0;return Math.abs(t-o.absStartPos)<=this.thresholdX&&Math.abs(n-r.absStartPos)<=this.thresholdY&&(s=!1),s?this.page.nearestPage(fixInboundValue(t,o.maxScrollPos,o.minScrollPos),fixInboundValue(n,r.maxScrollPos,r.minScrollPos),o.direction,r.direction):this.page.currentPage},e.prototype.destroy=function(){var t=this.scroll.scroller.content;if(this.slideOpt.loop){var n=t.children;n.length>2&&(removeChild(t,n[n.length-1]),removeChild(t,n[0]))}this.hooksFn.forEach(function(o){var r=o[0],s=o[1],a=o[2];r.eventTypes[s]&&r.off(s,a)}),this.hooksFn.length=0},e.prototype.initSlideState=function(){const t=this.page.currentPage;if(this.page.init(),t)this.page.currentPage=t;else{var n=this.page.getInitPage();this.goTo(n.pageX,n.pageY,0)}this.initThreshold()},e.prototype.initThreshold=function(){var t=this.slideOpt.threshold||.1;if(t%1===0)this.thresholdX=t,this.thresholdY=t;else{var n=this.page.getPageSize();n&&(this.thresholdX=Math.round(n.width*t),this.thresholdY=Math.round(n.height*t))}},e.prototype.cloneSlideEleForLoop=function(t){var n=t.children;prepend(n[n.length-1].cloneNode(!0),t),t.appendChild(n[1].cloneNode(!0))},e.prototype.amendCurrentPage=function(){if(this.isTouching=!1,!!this.slideOpt.loop){if(this.resetLooping){this.resetLooping=!1;return}var t=!1;if(this.page.loopX&&(this.scroll.x===this.scroll.scroller.scrollBehaviorX.minScrollPos||this.scroll.x===this.scroll.scroller.scrollBehaviorX.maxScrollPos)&&(t=!0),this.page.loopY&&(this.scroll.y===this.scroll.scroller.scrollBehaviorY.minScrollPos||this.scroll.y===this.scroll.scroller.scrollBehaviorY.maxScrollPos)&&(t=!0),t){var n=this.scroll.scroller.scrollBehaviorX,o=this.scroll.scroller.scrollBehaviorY,r=this.page.nearestPage(fixInboundValue(this.scroll.x,n.maxScrollPos,n.minScrollPos),fixInboundValue(this.scroll.y,o.maxScrollPos,o.minScrollPos),0,0),s={x:r.x,y:r.y,pageX:r.pageX,pageY:r.pageY};this.page.isSameWithCurrent(s)||this.page.changeCurrentPage(s)}var a=this.page.resetLoopPage();if(a)return this.resetLooping=!0,this.goTo(a.pageX,a.pageY,0),!0;this.pageWillChangeTo(this.page.currentPage)}},e.prototype.shouldSetWidthHeight=function(t){var n={width:["scrollX","disableSetWidth"],height:["scrollY","disableSetHeight"]},o=n[t];return!(!this.scroll.options[o[0]]||this.slideOpt[o[1]])},e.prototype.clearSlideWidth=function(t){if(this.shouldSetWidthHeight("width")){for(var n=t.children,o=0;o<n.length;o++){var r=n[o];r.removeAttribute("style")}t.removeAttribute("style")}},e.prototype.setSlideWidth=function(t){if(!this.shouldSetWidthHeight("width"))return!1;for(var n=t.children,o=n[0].clientWidth,r=0;r<n.length;r++){var s=n[r];s.style.width=o+"px"}return t.style.width=o*n.length+"px",!0},e.prototype.clearSlideHeight=function(t){if(this.shouldSetWidthHeight("height")){for(var n=t.children,o=0;o<n.length;o++){var r=n[o];r.removeAttribute("style")}t.removeAttribute("style")}},e.prototype.setSlideHeight=function(t,n){if(!this.shouldSetWidthHeight("height"))return!1;for(var o=t.clientHeight,r=n.children,s=0;s<r.length;s++){var a=r[s];a.style.height=o+"px"}return n.style.height=o*r.length+"px",!0},e.prototype.goTo=function(t,n,o,r){n===void 0&&(n=0);var s=this.page.change2safePage(t,n);if(s){var a=r||this.slideOpt.easing||ease.bounce,l=s.x,u=s.y,d=l-this.scroll.scroller.scrollBehaviorX.currentPos,p=u-this.scroll.scroller.scrollBehaviorY.currentPos;!d&&!p||(o=o===void 0?this.getAnimateTime(d,p):o,this.page.changeCurrentPage({x:l,y:u,pageX:s.pageX,pageY:s.pageY}),this.pageWillChangeTo(this.page.currentPage),this.scroll.scroller.scrollTo(l,u,o,a))}},e.prototype.flickHandler=function(){var t=this.scroll.scroller.scrollBehaviorX,n=this.scroll.scroller.scrollBehaviorY,o=t.currentPos-t.startPos,r=n.currentPos-n.startPos,s=this.getAnimateTime(o,r);this.goTo(this.page.currentPage.pageX+t.direction,this.page.currentPage.pageY+n.direction,s)},e.prototype.getAnimateTime=function(t,n){return this.slideOpt.speed?this.slideOpt.speed:Math.max(Math.max(Math.min(Math.abs(t),1e3),Math.min(Math.abs(n),1e3)),300)},e.prototype.modifyScrollMetaHandler=function(t){var n=this.nearestPage(t.newX,t.newY);t.time=this.getAnimateTime(t.newX-n.x,t.newY-n.y),t.newX=n.x,t.newY=n.y,t.easing=this.slideOpt.easing||ease.bounce,this.page.changeCurrentPage({x:t.newX,y:t.newY,pageX:n.pageX,pageY:n.pageY}),this.pageWillChangeTo(this.page.currentPage)},e.prototype.scrollMoving=function(t){if(this.isTouching){var n=this.nearestPage(t.x,t.y);this.pageWillChangeTo(n)}},e.prototype.pageWillChangeTo=function(t){var n=this.page.getRealPage(t);n.pageX===this.willChangeToPage.pageX&&n.pageY===this.willChangeToPage.pageY||(this.willChangeToPage=n,this.scroll.trigger("slideWillChange",this.willChangeToPage))},e.prototype.setTouchFlag=function(){this.isTouching=!0},e.prototype.registorHooks=function(t,n,o){t.on(n,o,this),this.hooksFn.push([t,n,o])},e.pluginName="slide",e}();BScroll.use(ScrollBar),BScroll.use(NestedScroll),BScroll.use(MouseWheel),BScroll.use(Slide);let Group$1=class extends React__namespace.Component{constructor(t){super(t),this.scrollNeedsToInit=!1,this.scrollRef=React__namespace.createRef()}componentDidMount(){this.props.scrollEnabled&&this.props.nativeScroll!==!0&&this.setupIScroll(),this.scrollRef.current.noodlNode=this.props.noodlNode}componentWillUnmount(){this.iScroll&&(this.iScroll.destroy(),this.iScroll=void 0),this.props.noodlNode.context.setNodeFocused(this.props.noodlNode,!1)}componentDidUpdate(){this.scrollNeedsToInit&&(this.setupIScroll(),this.scrollNeedsToInit=!1),this.iScroll&&setTimeout(()=>{this.iScroll&&this.iScroll.refresh()},0)}scrollToIndex(t,n){if(this.iScroll){const o=this.scrollRef.current.children[0].children[t];o&&this.iScroll.scrollToElement(o,n,0,0)}else{const o=this.scrollRef.current.children[t];o&&o.scrollIntoView({behavior:"smooth"})}}scrollToElement(t,n){if(!t)return;const o=ReactDOM.findDOMNode(t.getRef());o&&o.scrollIntoView&&(this.iScroll?this.iScroll.scrollToElement(o,n,0,0):o.scrollIntoView({behavior:"smooth"}))}setupIScroll(){const{scrollSnapEnabled:t}=this.props,n=this.getScrollDirection(),o={disableSetWidth:!0,disableSetHeight:!0,loop:!1},r=this.scrollRef.current;this.iScroll=new BScroll(r,{bounceTime:500,swipeBounceTime:300,scrollbar:this.props.showScrollbar?{}:void 0,momentum:t?!this.props.scrollSnapToEveryItem:!0,bounce:this.props.scrollBounceEnabled&&!(t&&o.loop),scrollX:n==="x"||n==="both",scrollY:n==="y"||n==="both",slide:t?o:void 0,probeType:this.props.onScrollPositionChanged?3:1,click:!0,nestedScroll:!0,useTransition:!1});const s=this.iScroll.scroller;s.scrollBehaviorX&&(s.scrollBehaviorX.momentum=patchedMomentum.bind(s.scrollBehaviorX)),s.scrollBehaviorY&&(s.scrollBehaviorY.momentum=patchedMomentum.bind(s.scrollBehaviorY)),this.iScroll.on("beforeScrollStart",()=>{this.iScroll.refresh()}),this.iScroll.on("scrollStart",()=>{this.props.onScrollStart&&this.props.onScrollStart()}),this.iScroll.on("scrollEnd",()=>{this.props.onScrollEnd&&this.props.onScrollEnd()}),this.props.onScrollPositionChanged&&this.iScroll.on("scroll",()=>{this.props.onScrollPositionChanged(n==="x"?-this.iScroll.x:-this.iScroll.y)})}UNSAFE_componentWillReceiveProps(t){(this.props.scrollSnapEnabled!==t.scrollSnapEnabled||this.props.onScrollPositionChanged!==t.onScrollPositionChanged||this.props.onScrollStart!==t.onScrollStart||this.props.onScrollEnd!==t.onScrollEnd||this.props.showScrollbar!==t.showScrollbar||this.props.scrollEnabled!==t.scrollEnabled||this.props.nativeScroll!==t.nativeScroll||this.props.scrollSnapToEveryItem!==t.scrollSnapToEveryItem||this.props.layout!==t.layout||this.props.flexWrap!==t.flexWrap||this.props.scrollBounceEnabled!==t.scrollBounceEnabled)&&(this.iScroll&&(this.iScroll.destroy(),this.iScroll=void 0),this.scrollNeedsToInit=t.scrollEnabled&&!t.nativeScroll)}renderIScroll(){const{flexDirection:t,flexWrap:n}=this.props.style,o={display:"inline-flex",flexShrink:0,flexDirection:t,flexWrap:n,touchAction:"none"};return t==="row"?n==="wrap"?o.width="100%":o.height="100%":n==="wrap"?o.height="100%":o.width="100%",React__namespace.createElement("div",{className:"scroll-wrapper-internal",style:o},this.props.children)}getScrollDirection(){return this.props.flexWrap==="wrap"||this.props.flexWrap==="wrap-reverse"?this.props.layout==="row"?"y":"x":this.props.layout==="row"?"x":"y"}render(){const{as:t="div",...n}=this.props,o=n.scrollEnabled&&!n.nativeScroll?this.renderIScroll():n.children,r={...n.style};if(Layout.size(r,n),Layout.align(r,n),n.clip&&(r.overflowX="hidden",r.overflowY="hidden"),n.scrollEnabled&&n.nativeScroll){const a=this.getScrollDirection();a==="y"?r.overflowY="auto":a==="x"?r.overflowX="auto":a==="both"&&(r.overflowX="auto",r.overflowY="auto")}r.opacity===0&&(r.pointerEvents="none");const s={className:n.className,...n.attrs,...n.dom,...pointerProps(n),style:r,ref:this.scrollRef};return React__namespace.createElement(t,{...s},o)}};const GroupNode={name:"Group",docs:"https://docs.noodl.net/nodes/basic-elements/group",connectionPanel:{groupPriority:["General","Style","Events","Mounted","Hover Events","Pointer Events","Focus","Scroll"]},initialize(){this.props.attrs={},this._internal={scrollElementDuration:500,scrollIndexDuration:500,scrollIndex:0},this.props.layout="column"},getReactComponent(){return Group$1},noodlNodeAsProp:!0,visualStates:[{name:"neutral",label:"Neutral"},{name:"hover",label:"Hover"}],defaultCss:{display:"flex",position:"relative",flexDirection:"column"},inputs:{flexDirection:{index:12,displayName:"Layout",group:"Layout",type:{name:"enum",enums:[{label:"None",value:"none"},{label:"Vertical",value:"column"},{label:"Horizontal",value:"row"}]},default:"column",set(e){this.props.layout=e,e!=="none"?this.setStyle({flexDirection:e}):this.removeStyle(["flexDirection"]),this.context.editorConnection&&(e!=="none"&&!flexDirectionValues.includes(e)?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"layout-warning",{message:"Invalid Layout value has to be a valid flex-direction value."}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"layout-warning")),this.forceUpdate()}},"scrollToIndex.do":{displayName:"Scroll To Index - Do",group:"Scroll To Index",type:"signal",index:505,valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{if(!this.innerReactComponentRef)return;const e=this._internal.scrollIndex,t=this._internal.scrollIndexDuration;this.innerReactComponentRef.scrollToIndex(e,t)})}},"scrollToElement.do":{displayName:"Scroll To Element - Do",group:"Scroll To Element",type:"signal",index:500,valueChangedToTrue(){this.innerReactComponentRef&&this.scheduleAfterInputsHaveUpdated(()=>{const e=this._internal.scrollElement,t=this._internal.scrollElementDuration;this.innerReactComponentRef.scrollToElement(e,t)})}},"scrollToElement.element":{displayName:"Scroll To Element - Element",group:"Scroll To Element",type:"reference",index:501,set(e){this._internal.scrollElement=e}},"scrollToElement.duration":{displayName:"Scroll To Element - Duration",group:"Scroll To Element",type:"number",default:500,index:502,set(e){this._internal.scrollElementDuration=e}},"scrollToIndex.index":{displayName:"Scroll To Index - Index",group:"Scroll To Index",type:"number",default:0,index:506,set(e){this._internal.scrollIndex=e}},"scrollToIndex.duration":{displayName:"Scroll To Index - Duration",group:"Scroll To Index",type:"number",default:500,index:507,set(e){this._internal.scrollIndexDuration=e}},focus:{displayName:"Focus",type:"signal",group:"Focus",valueChangedToTrue(){this.context.setNodeFocused(this,!0)}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputProps:{clip:{index:19,displayName:"Clip Content",type:"boolean",group:"Layout",default:!1},scrollEnabled:{index:54,group:"Scroll",displayName:"Enable Scroll",type:"boolean",default:!1},scrollSnapEnabled:{index:55,displayName:"Snap",group:"Scroll",type:"boolean",default:!1},scrollSnapToEveryItem:{index:56,displayName:"Snap To Every Item",group:"Scroll",type:"boolean",default:!1},showScrollbar:{index:57,displayName:"Show Scrollbar",group:"Scroll",type:"boolean",default:!1},scrollBounceEnabled:{index:58,displayName:"Bounce at boundaries",group:"Scroll",type:"boolean",default:!0},nativeScroll:{index:60,group:"Scroll",displayName:"Native platform scroll",type:"boolean",default:!0},as:{index:1e5,group:"Advanced HTML",displayName:"Tag",type:{name:"enum",enums:[{label:"<div>",value:"div"},{label:"<section>",value:"section"},{label:"<article>",value:"article"},{label:"<aside>",value:"aside"},{label:"<nav>",value:"nav"},{label:"<header>",value:"header"},{label:"<footer>",value:"footer"},{label:"<main>",value:"main"},{label:"<span>",value:"span"}]},default:"div"}},inputCss:{alignItems:{index:13,group:"Align and justify content",displayName:"Align Items",type:{name:"enum",enums:[{label:"Start",value:"flex-start"},{label:"End",value:"flex-end"},{label:"Center",value:"center"}],alignComp:"align-items"},default:"flex-start"},justifyContent:{index:14,group:"Align and justify content",displayName:"Justify Content",type:{name:"enum",enums:[{label:"Start",value:"flex-start"},{label:"End",value:"flex-end"},{label:"Center",value:"center"},{label:"Space Between",value:"space-between"},{label:"Space Around",value:"space-around"},{label:"Space Evenly",value:"space-evenly"}],alignComp:"justify-content"},default:"flex-start",applyDefault:!1},flexWrap:{index:15,displayName:"Multi Line Wrap",group:"Layout",type:{name:"enum",enums:[{label:"Off",value:"nowrap"},{label:"On",value:"wrap"},{label:"On Reverse",value:"wrap-reverse"}]},default:"nowrap",onChange(e){this.props.flexWrap=e,this.forceUpdate()},applyDefault:!1},alignContent:{index:16,group:"Layout",displayName:"Align Content",type:{name:"enum",enums:[{label:"Start",value:"flex-start"},{label:"End",value:"flex-end"},{label:"Center",value:"center"},{label:"Space Between",value:"space-between"},{label:"Space Around",value:"space-around"},{label:"Space Evenly",value:"space-evenly"}],alignComp:"align-content"}},rowGap:{index:17,displayName:"Vertical Gap",group:"Layout",type:{name:"number",units:["px","%","em"],defaultUnit:"px"},default:0,applyDefault:!1},columnGap:{index:18,displayName:"Horizontal Gap",group:"Layout",type:{name:"number",units:["px","%","em"],defaultUnit:"px"},default:0,applyDefault:!1},backgroundColor:{index:201,displayName:"Background Color",group:"Style",type:"color",default:"transparent",applyDefault:!1,allowVisualStates:!0}},outputProps:{onScrollPositionChanged:{displayName:"Scroll Position",type:"number",group:"Scroll"},onScrollStart:{displayName:"Scroll Start",type:"signal",group:"Scroll"},onScrollEnd:{displayName:"Scroll End",type:"signal",group:"Scroll"}},outputs:{focused:{displayName:"Focused",type:"signal",group:"Focus"},focusLost:{displayName:"Focus Lost",type:"signal",group:"Focus"}},dynamicports:[{condition:"flexDirection != none",inputs:["scrollEnabled"]},{condition:"flexDirection != none AND scrollEnabled = true",inputs:["nativeScroll"]},{condition:"flexDirection != none AND scrollEnabled = true AND nativeScroll = false",inputs:["scrollBounceEnabled","scrollSnapEnabled","showScrollbar","scrollToElement.do","scrollToElement.element","scrollToElement.duration","scrollToIndex.do","scrollToIndex.index","scrollToIndex.duration"]},{condition:"flexDirection != none AND scrollEnabled = true AND scrollSnapEnabled = true",inputs:["scrollSnapToEveryItem"]},{condition:"flexDirection != none",inputs:["flexWrap"]},{condition:"flexWrap = wrap OR flexWrap = wrap-reverse",inputs:["alignContent"]},{condition:"flexDirection = row OR flexWrap = wrap OR flexWrap = wrap-reverse",inputs:["columnGap"]},{condition:"flexDirection = column OR flexWrap = wrap OR flexWrap = wrap-reverse",inputs:["rowGap"]}],methods:{_focus(){this.sendSignalOnOutput("focused")},_blur(){this.sendSignalOnOutput("focusLost")}}};NodeSharedPortDefinitions.addDimensions(GroupNode),NodeSharedPortDefinitions.addTransformInputs(GroupNode),NodeSharedPortDefinitions.addSharedVisualInputs(GroupNode),NodeSharedPortDefinitions.addPaddingInputs(GroupNode),NodeSharedPortDefinitions.addMarginInputs(GroupNode),NodeSharedPortDefinitions.addAlignInputs(GroupNode),NodeSharedPortDefinitions.addPointerEventOutputs(GroupNode),NodeSharedPortDefinitions.addBorderInputs(GroupNode),NodeSharedPortDefinitions.addShadowInputs(GroupNode);function defineTooltips$1(e){e.inputProps.clip.tooltip=createTooltip({title:"Clip content",body:"Controls if elements that are too big to fit will be clipped",images:[{src:"clip-enabled.svg",label:"Enabled"},{src:"clip-disabled.svg",label:"Disabled"}]}),e.inputCss.flexWrap.tooltip=createTooltip({title:"Multiline wrap",body:"Elements will wrap to the next line when there's not enough space",images:[{src:"multiline-h.svg",body:"Using a horizontal layout"},{src:"multiline-v.svg",body:"Using a vertical layout"}]})}Noodl.runDeployed||defineTooltips$1(GroupNode);const Group=createNodeFromReactComponent(GroupNode);function Icon$1(e){const t={userSelect:"none",...e.style};Layout.size(t,e),Layout.align(t,e);function n(){const r={};if(e.iconSourceType==="image"&&e.iconImageSource!==void 0){r.width=e.iconSize,r.height=e.iconSize;let s=e.iconImageSource;if(typeof s=="string"&&s.startsWith("/")){const a=Noodl.Env.BaseUrl;a&&(s=a+s.substring(1))}return React.createElement("img",{alt:"",src:s,style:r})}else if(e.iconSourceType==="icon"&&e.iconIconSource!==void 0)return r.fontSize=e.iconSize,r.color=e.iconColor,r.lineHeight=1,React.createElement("div",{style:{lineHeight:0}},e.iconIconSource.codeAsClass===!0?React.createElement("span",{className:[e.iconIconSource.class,e.iconIconSource.code].join(" "),style:r}):React.createElement("span",{className:e.iconIconSource.class,style:r},e.iconIconSource.code));return null}let o="ndl-visual-icon";return e.className&&(o=o+" "+e.className),React.createElement("div",{className:o,style:t},n())}const IconNode={name:"net.noodl.visual.icon",displayName:"Icon",docs:"https://docs.noodl.net/nodes/basic-elements/icon",allowChildren:!1,noodlNodeAsProp:!0,connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Hover Events","Pointer Events","Focus Events"]},getReactComponent(){return Icon$1}};NodeSharedPortDefinitions.addAlignInputs(IconNode),NodeSharedPortDefinitions.addTransformInputs(IconNode),NodeSharedPortDefinitions.addPaddingInputs(IconNode,{defaults:{paddingTop:5,paddingRight:5,paddingBottom:5,paddingLeft:5}}),NodeSharedPortDefinitions.addMarginInputs(IconNode),NodeSharedPortDefinitions.addIconInputs(IconNode,{hideEnableIconInput:!0,defaults:{useIcon:!0}}),NodeSharedPortDefinitions.addSharedVisualInputs(IconNode);const Icon=createNodeFromReactComponent(IconNode);function Image$1(e){const t={...e.style};if(Layout.size(t,e),Layout.align(t,e),t.opacity===0&&(t.pointerEvents="none"),e.dom?.src?.startsWith("/")){const n=Noodl.Env.BaseUrl;n&&(e.dom.src=n+e.dom.src.substring(1))}return React__namespace.createElement("img",{...e.attrs,className:e.className,...e.dom,...pointerProps(e),style:t})}const ImageNode={name:"Image",docs:"https://docs.noodl.net/nodes/basic-elements/image",noodlNodeAsProp:!0,visualStates:[{name:"neutral",label:"Neutral"},{name:"hover",label:"Hover"}],connectionPanel:{groupPriority:["General","Image","Style","Actions","Events","Mounted","Pointer Events","Hover Events","Dimensions","Margin and padding"]},initialize(){this.props.attrs={},this.props.default=""},getReactComponent(){return Image$1},getInspectInfo(){if(this.props.dom.srcSet)return this.props.dom.srcSet;if(this.props.dom.src){const e=this.props.dom.src.toString();return[{type:"text",value:e},{type:"image",value:e}]}},allowChildren:!1,defaultCss:{display:"block",flexShrink:0},inputCss:{objectFit:{displayName:"Image Fit",group:"Dimensions",type:{name:"enum",enums:[{label:"Fill",value:"fill"},{label:"Contain",value:"contain"},{label:"Cover",value:"cover"},{label:"None",value:"none"},{label:"Scale Down",value:"scale-down"}]},default:"contain",allowVisualStates:!0}},dynamicports:[{condition:"sizeMode = explicit",inputs:["objectFit"]}],inputs:{src:{displayName:"Source",group:"Image",propPath:"dom",type:{name:"image"},index:30,allowVisualStates:!0,set(e){this.props.dom.src=getAbsoluteUrl(e),this.forceUpdate()}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputProps:{srcSet:{displayName:"Source Set",group:"Image",propPath:"dom",type:{name:"string"},index:31,allowVisualStates:!0},alt:{displayName:"Alternate text",tooltip:"The alt text is used by screen readers, or if the image can't be downloaded or displayed",type:"string",propPath:"dom",index:1e3,default:""}},outputProps:{onLoad:{displayName:"On Load",propPath:"dom",type:"signal",group:"Events"},onError:{displayName:"On Error",propPath:"dom",type:"signal",group:"Events"}}};NodeSharedPortDefinitions.addDimensions(ImageNode,{defaultSizeMode:"contentSize",contentLabel:"Image"}),NodeSharedPortDefinitions.addTransformInputs(ImageNode),NodeSharedPortDefinitions.addMarginInputs(ImageNode),NodeSharedPortDefinitions.addSharedVisualInputs(ImageNode),NodeSharedPortDefinitions.addAlignInputs(ImageNode),NodeSharedPortDefinitions.addPointerEventOutputs(ImageNode),NodeSharedPortDefinitions.addBorderInputs(ImageNode),NodeSharedPortDefinitions.addShadowInputs(ImageNode);const Image=createNodeFromReactComponent(ImageNode);function Text(e){const{as:t="div"}=e,n={...e.textStyle,...e.style};return Layout.size(n,e),Layout.align(n,e),n.color=e.noodlNode.context.styles.resolveColor(n.color),e.sizeMode==="contentSize"||e.sizeMode==="contentWidth"?n.whiteSpace="pre":(n.whiteSpace="pre-wrap",n.overflowWrap="anywhere"),n.opacity===0&&(n.pointerEvents="none"),React.createElement(t,{className:["ndl-visual-text",e.className].join(" "),...e.attrs,...e.dom,...pointerProps(e),style:n},String(e.text))}const TextNode={name:"Text",docs:"https://docs.noodl.net/nodes/basic-elements/text",visualStates:[{name:"neutral",label:"Neutral"},{name:"hover",label:"Hover"}],allowChildren:!1,noodlNodeAsProp:!0,usePortAsLabel:"text",portLabelTruncationMode:"length",connectionPanel:{groupPriority:["General","Text","Text Style","Style","Events","Mounted","Hover Events","Pointer Events"]},nodeDoubleClickAction:{focusPort:"text"},initialize(){this.props.attrs={}},getReactComponent(){return Text},getInspectInfo(){return this.props.text},defaultCss:{position:"relative",display:"flex"},inputProps:{text:{index:19,group:"Text",displayName:"Text",default:"Text",type:{name:"string",multiline:!0}},as:{index:1e5,group:"Advanced HTML",displayName:"Tag",type:{name:"enum",enums:[{label:"<div>",value:"div"},{label:"<h1>",value:"h1"},{label:"<h2>",value:"h2"},{label:"<h3>",value:"h3"},{label:"<h4>",value:"h4"},{label:"<h5>",value:"h5"},{label:"<h6>",value:"h6"},{label:"<p>",value:"p"},{label:"<span>",value:"span"}]},default:"div"}},inputCss:{wordBreak:{index:27,group:"Text",displayName:"Word Break",applyDefault:!1,type:{name:"enum",enums:[{label:"Normal",value:"normal"},{label:"Break All",value:"break-all"}]},default:"normal"}},inputs:{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",justifyContent:"flex-start"});break;case"center":this.setStyle({textAlign:"center",justifyContent:"center"});break;case"right":this.setStyle({textAlign:"right",justifyContent:"flex-end"});break}}},textAlignY:{group:"Text Alignment",index:14,displayName:"Text Vertical Align",type:{name:"enum",enums:[{label:"Top",value:"top"},{label:"Center",value:"center"},{label:"Bottom",value:"bottom"}],alignComp:"vertical"},default:"top",set(e){switch(e){case"top":this.setStyle({alignItems:"flex-start"});break;case"center":this.setStyle({alignItems:"center"});break;case"bottom":this.setStyle({alignItems:"flex-end"});break}}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}}};NodeSharedPortDefinitions.addDimensions(TextNode,{defaultSizeMode:"contentHeight",contentLabel:"Text"}),NodeSharedPortDefinitions.addTextStyleInputs(TextNode),NodeSharedPortDefinitions.addAlignInputs(TextNode),NodeSharedPortDefinitions.addTransformInputs(TextNode),NodeSharedPortDefinitions.addMarginInputs(TextNode),NodeSharedPortDefinitions.addSharedVisualInputs(TextNode),NodeSharedPortDefinitions.addPointerEventOutputs(TextNode);function defineTooltips(e){e.inputCss.wordBreak.tooltip=createTooltip({title:"Word break",body:["Control where line breaks are allowed","- Normal: Break on spaces and other whitespace characters","- Break All: Allow line breaks between any two characters, including inside words"]})}Noodl.runDeployed||defineTooltips(TextNode);const TextNode$1=createNodeFromReactComponent(TextNode);class CachedVideo extends React.PureComponent{componentDidUpdate(){this.video&&(this.video.muted=this.props.muted,this.video.loop=this.props.loop,this.video.volume=this.props.volume,this.video.autoplay=this.props.autoplay,this.video.controls=this.props.controls)}render(){let t=this.props.src?this.props.src.toString():void 0;if(t&&(t.indexOf("#t=")===-1&&(t+="#t=0.01"),t.startsWith("/"))){const n=Noodl.Env.BaseUrl;n&&(t=n+t.substring(1))}return React.createElement("video",{...this.props,playsInline:!0,src:t,...pointerProps(this.props),ref:n=>{this.video=n,this.props.innerRef(n)}})}}let Video$1=class extends React.Component{constructor(t){super(t),this.wantToPlay=!1,this.canPlay=!1}componentWillUnmount(){this.canPlay=!1}setSourceObject(t){this.video.srcObject!==t&&(this.video.srcObject=t,this.canPlay=!1)}play(){this.wantToPlay=!0,this.canPlay&&this.video.play()}restart(){this.wantToPlay=!0,this.canPlay&&(this.video.currentTime=0,this.video.play())}pause(){this.wantToPlay=!1,this.video&&this.video.pause()}reset(){this.wantToPlay=!1,this.video&&(this.video.currentTime=0,this.video.pause())}render(){const t=this.props,n={...t.style};return Layout.size(n,t),Layout.align(n,t),n.opacity===0&&(n.pointerEvents="none"),n.objectPosition=`${t.objectPositionX} ${t.objectPositionY}`,React.createElement(CachedVideo,{...t.dom,className:t.className,style:n,innerRef:o=>{this.video=o,this.props.onVideoElementCreated&&this.props.onVideoElementCreated(o)},onCanPlay:()=>{this.canPlay=!0,this.wantToPlay&&this.video.play(),this.props.onCanPlay&&this.props.onCanPlay(),this.props.videoWidth&&this.props.videoWidth(this.video.videoWidth),this.props.videoHeight&&this.props.videoHeight(this.video.videoHeight)}})}};const VideoNode={name:"Video",docs:"https://docs.noodl.net/nodes/basic-elements/video",connectionPanel:{groupPriority:["General","Video","Video Actions","Style","Actions","Events","Mounted","Playback","Pointer Events","Hover Events","Dimensions","Margin and padding"]},getReactComponent(){return Video$1},allowChildren:!1,noodlNodeAsProp:!0,defaultCss:{display:"block"},inputs:{srcObject:{displayName:"Source Object",group:"Video",type:"mediastream",default:null,set(e){this.innerReactComponentRef&&this.innerReactComponentRef.setSourceObject(e)}},play:{type:"signal",group:"Video Actions",displayName:"Play",tooltip:{standard:"Play the video"},valueChangedToTrue(){this.innerReactComponentRef&&this.innerReactComponentRef.play()}},restart:{type:"signal",group:"Video Actions",displayName:"Restart",tooltip:{standard:"Restart the video from the beginning"},valueChangedToTrue(){this.innerReactComponentRef&&this.innerReactComponentRef.restart()}},pause:{type:"boolean",group:"Video Actions",displayName:"Pause",valueChangedToTrue(){this.innerReactComponentRef&&this.innerReactComponentRef.pause()}},reset:{type:"boolean",group:"Video Actions",displayName:"Reset",valueChangedToTrue(){this.innerReactComponentRef&&this.innerReactComponentRef.reset()}},src:{displayName:"Source",group:"Video",type:"string",set(e){this.props.dom.src=getAbsoluteUrl(e),this.forceUpdate()}},poster:{displayName:"Poster",group:"Video",type:"image",set(e){this.props.dom.poster=getAbsoluteUrl(e),this.forceUpdate()}}},inputProps:{autoplay:{displayName:"Autoplay",propPath:"dom",group:"Video",type:"boolean"},controls:{displayName:"Controls",propPath:"dom",group:"Video",type:"boolean"},volume:{displayName:"Volume",propPath:"dom",group:"Video",type:"number",default:1},muted:{displayName:"Muted",propPath:"dom",group:"Video",type:"boolean"},loop:{displayName:"Loop",propPath:"dom",group:"Video",type:"boolean"},objectPositionX:{displayName:"Video Position X",group:"Video Layout",type:{name:"number",units:["%","px"],defaultUnit:"%"},default:50},objectPositionY:{displayName:"Video Position Y",group:"Video Layout",type:{name:"number",units:["%","px"],defaultUnit:"%"},default:50}},inputCss:{objectFit:{displayName:"Object Fit",group:"Video Layout",type:{name:"enum",enums:[{label:"Contain",value:"contain"},{label:"Cover",value:"cover"},{label:"Fill",value:"fill"},{label:"None",value:"none"}]},default:"contain"}},outputProps:{onCanPlay:{type:"signal",group:"Events",displayName:"On Can Play"},onTimeUpdate:{group:"Playback",displayName:"Playback Position",type:"number",propPath:"dom",getValue(e){return e.target.currentTime}},onPlay:{group:"Events",displayName:"On Play",type:"signal",propPath:"dom"},onPause:{group:"Events",displayName:"On Pause",type:"signal",propPath:"dom"},onVideoElementCreated:{type:"domelement",displayName:"DOM Element"},videoWidth:{group:"Playback",type:"number",displayName:"Video Width"},videoHeight:{group:"Playback",type:"number",displayName:"Video Height"}}};NodeSharedPortDefinitions.addDimensions(VideoNode,{defaultSizeMode:"contentSize",contentLabel:"Video"}),NodeSharedPortDefinitions.addTransformInputs(VideoNode),NodeSharedPortDefinitions.addMarginInputs(VideoNode),NodeSharedPortDefinitions.addSharedVisualInputs(VideoNode),NodeSharedPortDefinitions.addAlignInputs(VideoNode),NodeSharedPortDefinitions.addPointerEventOutputs(VideoNode),NodeSharedPortDefinitions.addBorderInputs(VideoNode);const Video=createNodeFromReactComponent(VideoNode);function _shallowCompare(e,t){for(var n in e)if(e.hasOwnProperty(n)&&e[n]!==t[n])return!1;for(var n in t)if(t.hasOwnProperty(n)&&e[n]!==t[n])return!1;return!0}const _styleSheets={};function updateStylesForClass(e,t,n){if(_styleSheets[e])_shallowCompare(t,_styleSheets[e].props)||(_styleSheets[e].style.innerHTML=n(e,t),_styleSheets[e].props=Object.assign({},t));else{var o=document.createElement("style");o.innerHTML=n(e,t),document.head.appendChild(o),_styleSheets[e]={style:o,props:Object.assign({},t)}}}function mergeAttribute(e,t,n){e[t]||(e[t]={});for(const o in n)e[t][o]=n[o]}function addInputProps(e,t){mergeAttribute(e,"inputProps",t)}function addOutputProps(e,t){mergeAttribute(e,"outputProps",t)}function addControlEventsAndStates(e){addInputProps(e,{blockTouch:{index:450,displayName:"Block Pointer Events",type:"boolean"}}),addOutputProps(e,{focusState:{displayName:"Focused",group:"States",type:"boolean",props:{onFocus(){this.outputPropValues.focusState=!0,this.flagOutputDirty("focusState"),this.hasOutput("onFocus")&&this.sendSignalOnOutput("onFocus")},onBlur(){this.outputPropValues.focusState=!1,this.flagOutputDirty("focusState"),this.hasOutput("onBlur")&&this.sendSignalOnOutput("onBlur")}}},onFocus:{displayName:"Focused",group:"Events",type:"signal",props:{onFocus(){this.outputPropValues.focusState=!0,this.flagOutputDirty("focusState"),this.sendSignalOnOutput("onFocus")}}},onBlur:{displayName:"Blurred",group:"Events",type:"signal",props:{onBlur(){this.outputPropValues.focusState=!1,this.flagOutputDirty("focusState"),this.sendSignalOnOutput("onBlur")}}},hoverState:{displayName:"Hover",group:"States",type:"boolean",props:{onMouseOver(){this.outputPropValues.hoverState=!0,this.flagOutputDirty("hoverState"),this.hasOutput("hoverStart")&&this.sendSignalOnOutput("hoverStart")},onMouseLeave(){this.outputPropValues.hoverState=!1,this.flagOutputDirty("hoverState"),this.hasOutput("hoverEnd")&&this.sendSignalOnOutput("hoverEnd")}}},hoverStart:{displayName:"Hover Start",group:"Events",type:"signal",props:{onMouseOver(){this.outputPropValues.hoverState=!0,this.flagOutputDirty("hoverState"),this.sendSignalOnOutput("hoverStart")}}},hoverEnd:{displayName:"Hover End",group:"Events",type:"signal",props:{onMouseLeave(){this.outputPropValues.hoverState=!1,this.flagOutputDirty("hoverState"),this.sendSignalOnOutput("hoverEnd")}}},pressedState:{displayName:"Pressed",group:"States",type:"boolean",props:{onMouseDown(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this.hasOutput("pointerDown")&&this.sendSignalOnOutput("pointerDown")},onTouchStart(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this.hasOutput("pointerDown")&&this.sendSignalOnOutput("pointerDown")},onMouseUp(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.hasOutput("pointerUp")&&this.sendSignalOnOutput("pointerUp")},onTouchEnd(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.hasOutput("pointerUp")&&this.sendSignalOnOutput("pointerUp")},onTouchCancel(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.hasOutput("pointerUp")&&this.sendSignalOnOutput("pointerUp")}}},pointerDown:{displayName:"Pointer Down",group:"Events",type:"signal",props:{onMouseDown(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this.sendSignalOnOutput("pointerDown")},onTouchStart(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this.sendSignalOnOutput("pointerDown")}}},pointerUp:{displayName:"Pointer Up",group:"Events",type:"signal",props:{onMouseUp(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.sendSignalOnOutput("pointerUp")},onTouchEnd(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.sendSignalOnOutput("pointerUp")},onTouchCancel(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.sendSignalOnOutput("pointerUp")}}}})}function controlEvents(e){return Object.assign({},{onFocus:e.onFocus,onBlur:e.onBlur},pointerProps(e))}const Utils={updateStylesForClass,addControlEventsAndStates,controlEvents};function Button(e){React.useEffect(()=>{e.focusChanged&&e.focusChanged(!1),e.hoverChanged&&e.hoverChanged(!1),e.pressedChanged&&e.pressedChanged(!1)},[]);var t={...e.style};Layout.size(t,e),Layout.align(t,e),e.textStyle!==void 0&&(t=Object.assign({},e.textStyle,t)),e.boxShadowEnabled&&(t.boxShadow=`${e.boxShadowInset?"inset ":""}${e.boxShadowOffsetX} ${e.boxShadowOffsetY} ${e.boxShadowBlurRadius} ${e.boxShadowSpreadRadius} ${e.boxShadowColor}`);let n="ndl-controls-button";return e.className&&(n=n+" "+e.className),React.createElement("button",{className:n,disabled:!e.enabled,...Utils.controlEvents(e),type:e.buttonType,style:t,onClick:e.onClick},e.label,e.children)}var ButtonNode={name:"Button",docs:"https://docs.noodl.net/nodes/visual/button",allowChildren:!0,noodlNodeAsProp:!0,initialize(){this.outputPropValues.hoverState=this.outputPropValues.focusState=this.outputPropValues.pressedState=!1,this.props.id=this._internal.controlId="input-"+guid(),this.props.enabled=this._internal.enabled=!0},getReactComponent(){return Button},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"))}},textStyle:{index:20,type:"textStyle",group:"Text",displayName:"Text Style",default:"None",set(e){this.props.textStyle=this.context.styles.getTextStyle(e),this.forceUpdate()}},fontFamily:{index:21,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()}}},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}}},inputCss:{fontSize:{index:21,group:"Text",displayName:"Font Size",type:{name:"number",units:["px"],defaultUnit:"px"},onChange(){this.props.textStyle&&this.forceUpdate()}},color:{index:24,group:"Text",displayName:"Color",type:"color",default:"#FFFFFF"},backgroundColor:{index:100,displayName:"Background Color",group:"Style",type:"color",default:"#000000"},paddingLeft:{index:64,group:"Margin and padding",default:20,applyDefault:!1,displayName:"Pad Left",type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-left"}},paddingRight:{index:65,group:"Margin and padding",default:20,applyDefault:!1,displayName:"Pad Right",type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-right"}},paddingTop:{index:66,group:"Margin and padding",displayName:"Pad Top",default:5,applyDefault:!1,type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-top"}},paddingBottom:{index:67,group:"Margin and padding",displayName:"Pad Bottom",default:5,applyDefault:!1,type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-bottom"}},borderRadius:{index:202,displayName:"Border Radius",group:"Style",type:{name:"number",units:["px"],defaultUnit:"px"},default:0,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:0,applyDefault:!1},borderColor:{index:205,displayName:"Border Color",group:"Style",type:"color",default:"#000000"}},inputProps:{label:{type:"string",displayName:"Label",group:"General",default:"Label"},buttonType:{type:{name:"enum",enums:[{label:"Button",value:"button"},{label:"Submit",value:"submit"}]},displayName:"Type",default:"button",group:"General"},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)"}},outputProps:{onClick:{displayName:"Click",group:"Events",type:"signal"}},dynamicports:[{condition:"boxShadowEnabled = true",inputs:["boxShadowOffsetX","boxShadowOffsetY","boxShadowInset","boxShadowBlurRadius","boxShadowSpreadRadius","boxShadowColor"]}],methods:{}};NodeSharedPortDefinitions.addDimensions(ButtonNode,{defaultSizeMode:"contentSize",contentLabel:"Content",useDimensionConstraints:!1}),NodeSharedPortDefinitions.addAlignInputs(ButtonNode),NodeSharedPortDefinitions.addTransformInputs(ButtonNode),NodeSharedPortDefinitions.addMarginInputs(ButtonNode),NodeSharedPortDefinitions.addSharedVisualInputs(ButtonNode),Utils.addControlEventsAndStates(ButtonNode),ButtonNode=createNodeFromReactComponent(ButtonNode),ButtonNode.setup=function(e,t){t.on("nodeAdded.Button",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 ButtonOld=ButtonNode;function _styleTemplate$2(e,t){return`
95
+ */function warn(e){console.error("[BScroll warn]: "+e)}var inBrowser=typeof window<"u",ua=inBrowser&&navigator.userAgent.toLowerCase();ua&&ua.indexOf("android")>0;function extend(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var o=0;o<t.length;o++){var r=t[o];for(var s in r)e[s]=r[s]}return e}function fixInboundValue(e,t,n){return e<t?t:e>n?n:e}var elementStyle=inBrowser&&document.createElement("div").style,vendor=function(){if(!inBrowser)return!1;var e={webkit:"webkitTransform",Moz:"MozTransform",O:"OTransform",ms:"msTransform",standard:"transform"};for(var t in e)if(elementStyle[e[t]]!==void 0)return t;return!1}();function prefixStyle(e){return vendor===!1?e:vendor==="standard"?e==="transitionEnd"?"transitionend":e:vendor+e.charAt(0).toUpperCase()+e.substr(1)}vendor&&vendor!=="standard"&&""+vendor.toLowerCase(),prefixStyle("transform"),prefixStyle("transition"),inBrowser&&prefixStyle("perspective")in elementStyle,prefixStyle("transitionTimingFunction"),prefixStyle("transitionDuration"),prefixStyle("transitionDelay"),prefixStyle("transformOrigin"),prefixStyle("transitionEnd");function getRect(e){if(e instanceof window.SVGElement){var t=e.getBoundingClientRect();return{top:t.top,left:t.left,width:t.width,height:t.height}}else return{top:e.offsetTop,left:e.offsetLeft,width:e.offsetWidth,height:e.offsetHeight}}function prepend(e,t){var n=t.firstChild;n?before(e,n):t.appendChild(e)}function before(e,t){t.parentNode.insertBefore(e,t)}function removeChild(e,t){e.removeChild(t)}var ease={bounce:{style:"cubic-bezier(0.165, 0.84, 0.44, 1)",fn:function(e){return 1- --e*e*e*e}}},PagesPos=function(){function e(t,n){this.scroll=t,this.slideOpt=n,this.slideEl=null,this.init()}return e.prototype.init=function(){var t=this.scroll.scroller,n=t.scrollBehaviorX,o=t.scrollBehaviorY,r=getRect(t.wrapper),s=getRect(t.content);this.wrapperWidth=r.width,this.wrapperHeight=r.height,this.scrollerHeight=o.hasScroll?s.height:r.height,this.scrollerWidth=n.hasScroll?s.width:r.width;var a=this.slideOpt.stepX||this.wrapperWidth,l=this.slideOpt.stepY||this.wrapperHeight,u=t.content,d=this.slideOpt.el;typeof d=="string"&&(this.slideEl=u.querySelectorAll(d)),this.pages=this.slideEl?this.computePagePosInfoByEl(this.slideEl):this.computePagePosInfo(a,l),this.xLen=this.pages?this.pages.length:0,this.yLen=this.pages&&this.pages[0]?this.pages[0].length:0},e.prototype.hasInfo=function(){return!(!this.pages||!this.pages.length)},e.prototype.getPos=function(t,n){return this.pages[t]?this.pages[t][n]:null},e.prototype.getNearestPage=function(t,n){if(this.hasInfo()){for(var o=0,r=0,s=this.pages.length;o<s-1&&!(t>=this.pages[o][0].cx);o++);for(s=this.pages[o].length;r<s-1&&!(n>=this.pages[0][r].cy);r++);return{pageX:o,pageY:r}}},e.prototype.computePagePosInfo=function(t,n){var o=[],r=0,s,a,l,u=0,d,h=this.scroll.scroller.scrollBehaviorX.maxScrollPos,f=this.scroll.scroller.scrollBehaviorY.maxScrollPos;for(a=Math.round(t/2),l=Math.round(n/2);r>-this.scrollerWidth;){for(o[u]=[],d=0,s=0;s>-this.scrollerHeight;)o[u][d]={x:Math.max(r,h),y:Math.max(s,f),width:t,height:n,cx:r-a,cy:s-l},s-=n,d++;r-=t,u++}return o},e.prototype.computePagePosInfoByEl=function(t){for(var n=[],o=0,r=0,s,a,l=0,u=t.length,d=0,h=-1,f,g=this.scroll.scroller.scrollBehaviorX.maxScrollPos,b=this.scroll.scroller.scrollBehaviorY.maxScrollPos;l<u;l++)f=getRect(t[l]),(l===0||f.left<=getRect(t[l-1]).left)&&(d=0,h++),n[d]||(n[d]=[]),o=Math.max(-f.left,g),r=Math.max(-f.top,b),s=o-Math.round(f.width/2),a=r-Math.round(f.height/2),n[d][h]={x:o,y:r,width:f.width,height:f.height,cx:s,cy:a},o>g&&d++;return n},e}(),PageInfo=function(){function e(t,n){this.scroll=t,this.slideOpt=n}return e.prototype.init=function(){this.currentPage={x:0,y:0,pageX:0,pageY:0},this.pagesPos=new PagesPos(this.scroll,this.slideOpt),this.checkSlideLoop()},e.prototype.changeCurrentPage=function(t){this.currentPage=t},e.prototype.change2safePage=function(t,n){if(this.pagesPos.hasInfo()){t>=this.pagesPos.xLen?t=this.pagesPos.xLen-1:t<0&&(t=0),n>=this.pagesPos.yLen?n=this.pagesPos.yLen-1:n<0&&(n=0);var o=this.pagesPos.getPos(t,n);return{pageX:t,pageY:n,x:o?o.x:0,y:o?o.y:0}}},e.prototype.getInitPage=function(){var t=this.loopX?1:0,n=this.loopY?1:0;return{pageX:t,pageY:n}},e.prototype.getRealPage=function(t){var n=function(r,s){for(var a=[],l=0;l<s;l++)a.push(l);return a.unshift(s-1),a.push(0),a[r]},o=t?extend({},t):extend({},this.currentPage);return this.loopX&&(o.pageX=n(o.pageX,this.pagesPos.xLen-2)),this.loopY&&(o.pageY=n(o.pageY,this.pagesPos.yLen-2)),{pageX:o.pageX,pageY:o.pageY}},e.prototype.getPageSize=function(){return this.pagesPos.getPos(this.currentPage.pageX,this.currentPage.pageY)},e.prototype.realPage2Page=function(t,n){if(this.pagesPos.hasInfo()){var o=this.pagesPos.xLen-1,r=this.pagesPos.yLen-1,s=0,a=0;return this.loopX&&(t+=1,s=s+1,o=o-1),this.loopY&&(n+=1,a=a+1,r=r-1),t=fixInboundValue(t,s,o),n=fixInboundValue(n,a,r),{realX:t,realY:n}}},e.prototype.nextPage=function(){return this.changedPageNum("positive")},e.prototype.prevPage=function(){return this.changedPageNum("negative")},e.prototype.nearestPage=function(t,n,o,r){var s=this.pagesPos.getNearestPage(t,n);if(!s)return{x:0,y:0,pageX:0,pageY:0};var a=s.pageX,l=s.pageY,u,d;return a===this.currentPage.pageX&&(a+=o,a=fixInboundValue(a,0,this.pagesPos.xLen-1)),l===this.currentPage.pageY&&(l+=r,l=fixInboundValue(s.pageY,0,this.pagesPos.yLen-1)),u=this.pagesPos.getPos(a,0).x,d=this.pagesPos.getPos(0,l).y,{x:u,y:d,pageX:a,pageY:l}},e.prototype.getLoopStage=function(){if(!this.needLoop)return"middle";if(this.loopX){if(this.currentPage.pageX===0)return"head";if(this.currentPage.pageX===this.pagesPos.xLen-1)return"tail"}if(this.loopY){if(this.currentPage.pageY===0)return"head";if(this.currentPage.pageY===this.pagesPos.yLen-1)return"tail"}return"middle"},e.prototype.resetLoopPage=function(){if(this.loopX){if(this.currentPage.pageX===0)return{pageX:this.pagesPos.xLen-2,pageY:this.currentPage.pageY};if(this.currentPage.pageX===this.pagesPos.xLen-1)return{pageX:1,pageY:this.currentPage.pageY}}if(this.loopY){if(this.currentPage.pageY===0)return{pageX:this.currentPage.pageX,pageY:this.pagesPos.yLen-2};if(this.currentPage.pageY===this.pagesPos.yLen-1)return{pageX:this.currentPage.pageX,pageY:1}}},e.prototype.isSameWithCurrent=function(t){return!(t.pageX!==this.currentPage.pageX||t.pageY!==this.currentPage.pageY)},e.prototype.changedPageNum=function(t){var n=this.currentPage.pageX,o=this.currentPage.pageY;return this.slideX&&(n=t==="negative"?n-1:n+1),this.slideY&&(o=t==="negative"?o-1:o+1),{pageX:n,pageY:o}},e.prototype.checkSlideLoop=function(){this.needLoop=this.slideOpt.loop,this.pagesPos.xLen>1&&(this.slideX=!0),this.pagesPos.pages[0]&&this.pagesPos.yLen>1&&(this.slideY=!0),this.loopX=this.needLoop&&this.slideX,this.loopY=this.needLoop&&this.slideY,this.slideX&&this.slideY&&warn("slide does not support two direction at the same time.")},e}(),sourcePrefix="plugins.slide",propertiesMap=[{key:"next",name:"next"},{key:"prev",name:"prev"},{key:"goToPage",name:"goToPage"},{key:"getCurrentPage",name:"getCurrentPage"}],propertiesConfig=propertiesMap.map(function(e){return{key:e.key,sourceKey:sourcePrefix+"."+e.name}}),Slide=function(){function e(t){this.scroll=t,this.resetLooping=!1,this.isTouching=!1,this.scroll.proxy(propertiesConfig),this.scroll.registerType(["slideWillChange"]),this.slideOpt=this.scroll.options.slide,this.page=new PageInfo(t,this.slideOpt),this.hooksFn=[],this.willChangeToPage={pageX:0,pageY:0},this.init()}return e.prototype.init=function(){var t=this,n=this.slideOpt,o=this.scroll.scroller.content,r=!1;if(n.loop){var s=o.children;s.length>1?(this.cloneSlideEleForLoop(o),r=!0):n.loop=!1}var a=this.setSlideWidth(o),l=this.setSlideHeight(this.scroll.scroller.wrapper,o),u=a||l,d=this.scroll.hooks,h=this.scroll.scroller.hooks;this.registorHooks(d,"refresh",this.initSlideState),this.registorHooks(d,"destroy",this.destroy),this.registorHooks(h,"momentum",this.modifyScrollMetaHandler),this.registorHooks(this.scroll,"scrollEnd",this.amendCurrentPage),this.registorHooks(h,"beforeStart",this.setTouchFlag),this.registorHooks(h,"scroll",this.scrollMoving),this.registorHooks(h,"resize",this.resize),this.scroll.eventTypes.mousewheelMove&&this.scroll.eventTypes.mousewheelEnd&&(this.registorHooks(this.scroll,"mousewheelMove",function(){return!0}),this.registorHooks(this.scroll,"mousewheelEnd",function(f){(f.directionX===1||f.directionY===1)&&t.next(),(f.directionX===-1||f.directionY===-1)&&t.prev()})),n.listenFlick!==!1&&this.registorHooks(h,"flick",this.flickHandler),!r&&!u?this.initSlideState():this.scroll.refresh()},e.prototype.resize=function(){var t=this,n=this.scroll.scroller.content,o=this.scroll.scroller.wrapper;return clearTimeout(this.resizeTimeout),this.resizeTimeout=window.setTimeout(function(){t.clearSlideWidth(n),t.clearSlideHeight(n),t.setSlideWidth(n),t.setSlideHeight(o,n),t.scroll.refresh()},this.scroll.options.resizePolling),!0},e.prototype.next=function(t,n){var o=this.page.nextPage(),r=o.pageX,s=o.pageY;this.goTo(r,s,t,n)},e.prototype.prev=function(t,n){var o=this.page.prevPage(),r=o.pageX,s=o.pageY;this.goTo(r,s,t,n)},e.prototype.goToPage=function(t,n,o,r){var s=this.page.realPage2Page(t,n);s&&this.goTo(s.realX,s.realY,o,r)},e.prototype.getCurrentPage=function(){return this.page.getRealPage()},e.prototype.nearestPage=function(t,n){var o=this.scroll.scroller.scrollBehaviorX,r=this.scroll.scroller.scrollBehaviorY,s=!0;return Math.abs(t-o.absStartPos)<=this.thresholdX&&Math.abs(n-r.absStartPos)<=this.thresholdY&&(s=!1),s?this.page.nearestPage(fixInboundValue(t,o.maxScrollPos,o.minScrollPos),fixInboundValue(n,r.maxScrollPos,r.minScrollPos),o.direction,r.direction):this.page.currentPage},e.prototype.destroy=function(){var t=this.scroll.scroller.content;if(this.slideOpt.loop){var n=t.children;n.length>2&&(removeChild(t,n[n.length-1]),removeChild(t,n[0]))}this.hooksFn.forEach(function(o){var r=o[0],s=o[1],a=o[2];r.eventTypes[s]&&r.off(s,a)}),this.hooksFn.length=0},e.prototype.initSlideState=function(){const t=this.page.currentPage;if(this.page.init(),t)this.page.currentPage=t;else{var n=this.page.getInitPage();this.goTo(n.pageX,n.pageY,0)}this.initThreshold()},e.prototype.initThreshold=function(){var t=this.slideOpt.threshold||.1;if(t%1===0)this.thresholdX=t,this.thresholdY=t;else{var n=this.page.getPageSize();n&&(this.thresholdX=Math.round(n.width*t),this.thresholdY=Math.round(n.height*t))}},e.prototype.cloneSlideEleForLoop=function(t){var n=t.children;prepend(n[n.length-1].cloneNode(!0),t),t.appendChild(n[1].cloneNode(!0))},e.prototype.amendCurrentPage=function(){if(this.isTouching=!1,!!this.slideOpt.loop){if(this.resetLooping){this.resetLooping=!1;return}var t=!1;if(this.page.loopX&&(this.scroll.x===this.scroll.scroller.scrollBehaviorX.minScrollPos||this.scroll.x===this.scroll.scroller.scrollBehaviorX.maxScrollPos)&&(t=!0),this.page.loopY&&(this.scroll.y===this.scroll.scroller.scrollBehaviorY.minScrollPos||this.scroll.y===this.scroll.scroller.scrollBehaviorY.maxScrollPos)&&(t=!0),t){var n=this.scroll.scroller.scrollBehaviorX,o=this.scroll.scroller.scrollBehaviorY,r=this.page.nearestPage(fixInboundValue(this.scroll.x,n.maxScrollPos,n.minScrollPos),fixInboundValue(this.scroll.y,o.maxScrollPos,o.minScrollPos),0,0),s={x:r.x,y:r.y,pageX:r.pageX,pageY:r.pageY};this.page.isSameWithCurrent(s)||this.page.changeCurrentPage(s)}var a=this.page.resetLoopPage();if(a)return this.resetLooping=!0,this.goTo(a.pageX,a.pageY,0),!0;this.pageWillChangeTo(this.page.currentPage)}},e.prototype.shouldSetWidthHeight=function(t){var n={width:["scrollX","disableSetWidth"],height:["scrollY","disableSetHeight"]},o=n[t];return!(!this.scroll.options[o[0]]||this.slideOpt[o[1]])},e.prototype.clearSlideWidth=function(t){if(this.shouldSetWidthHeight("width")){for(var n=t.children,o=0;o<n.length;o++){var r=n[o];r.removeAttribute("style")}t.removeAttribute("style")}},e.prototype.setSlideWidth=function(t){if(!this.shouldSetWidthHeight("width"))return!1;for(var n=t.children,o=n[0].clientWidth,r=0;r<n.length;r++){var s=n[r];s.style.width=o+"px"}return t.style.width=o*n.length+"px",!0},e.prototype.clearSlideHeight=function(t){if(this.shouldSetWidthHeight("height")){for(var n=t.children,o=0;o<n.length;o++){var r=n[o];r.removeAttribute("style")}t.removeAttribute("style")}},e.prototype.setSlideHeight=function(t,n){if(!this.shouldSetWidthHeight("height"))return!1;for(var o=t.clientHeight,r=n.children,s=0;s<r.length;s++){var a=r[s];a.style.height=o+"px"}return n.style.height=o*r.length+"px",!0},e.prototype.goTo=function(t,n,o,r){n===void 0&&(n=0);var s=this.page.change2safePage(t,n);if(s){var a=r||this.slideOpt.easing||ease.bounce,l=s.x,u=s.y,d=l-this.scroll.scroller.scrollBehaviorX.currentPos,h=u-this.scroll.scroller.scrollBehaviorY.currentPos;!d&&!h||(o=o===void 0?this.getAnimateTime(d,h):o,this.page.changeCurrentPage({x:l,y:u,pageX:s.pageX,pageY:s.pageY}),this.pageWillChangeTo(this.page.currentPage),this.scroll.scroller.scrollTo(l,u,o,a))}},e.prototype.flickHandler=function(){var t=this.scroll.scroller.scrollBehaviorX,n=this.scroll.scroller.scrollBehaviorY,o=t.currentPos-t.startPos,r=n.currentPos-n.startPos,s=this.getAnimateTime(o,r);this.goTo(this.page.currentPage.pageX+t.direction,this.page.currentPage.pageY+n.direction,s)},e.prototype.getAnimateTime=function(t,n){return this.slideOpt.speed?this.slideOpt.speed:Math.max(Math.max(Math.min(Math.abs(t),1e3),Math.min(Math.abs(n),1e3)),300)},e.prototype.modifyScrollMetaHandler=function(t){var n=this.nearestPage(t.newX,t.newY);t.time=this.getAnimateTime(t.newX-n.x,t.newY-n.y),t.newX=n.x,t.newY=n.y,t.easing=this.slideOpt.easing||ease.bounce,this.page.changeCurrentPage({x:t.newX,y:t.newY,pageX:n.pageX,pageY:n.pageY}),this.pageWillChangeTo(this.page.currentPage)},e.prototype.scrollMoving=function(t){if(this.isTouching){var n=this.nearestPage(t.x,t.y);this.pageWillChangeTo(n)}},e.prototype.pageWillChangeTo=function(t){var n=this.page.getRealPage(t);n.pageX===this.willChangeToPage.pageX&&n.pageY===this.willChangeToPage.pageY||(this.willChangeToPage=n,this.scroll.trigger("slideWillChange",this.willChangeToPage))},e.prototype.setTouchFlag=function(){this.isTouching=!0},e.prototype.registorHooks=function(t,n,o){t.on(n,o,this),this.hooksFn.push([t,n,o])},e.pluginName="slide",e}();BScroll.use(ScrollBar),BScroll.use(NestedScroll),BScroll.use(MouseWheel),BScroll.use(Slide);let Group$1=class extends React__namespace.Component{constructor(t){super(t),this.scrollNeedsToInit=!1,this.scrollRef=React__namespace.createRef()}componentDidMount(){this.props.scrollEnabled&&this.props.nativeScroll!==!0&&this.setupIScroll(),this.scrollRef.current.noodlNode=this.props.noodlNode}componentWillUnmount(){this.iScroll&&(this.iScroll.destroy(),this.iScroll=void 0),this.props.noodlNode.context.setNodeFocused(this.props.noodlNode,!1)}componentDidUpdate(){this.scrollNeedsToInit&&(this.setupIScroll(),this.scrollNeedsToInit=!1),this.iScroll&&setTimeout(()=>{this.iScroll&&this.iScroll.refresh()},0)}scrollToIndex(t,n){if(this.iScroll){const o=this.scrollRef.current.children[0].children[t];o&&this.iScroll.scrollToElement(o,n,0,0)}else{const o=this.scrollRef.current.children[t];o&&o.scrollIntoView({behavior:"smooth"})}}scrollToElement(t,n){if(!t)return;const o=ReactDOM.findDOMNode(t.getRef());o&&o.scrollIntoView&&(this.iScroll?this.iScroll.scrollToElement(o,n,0,0):o.scrollIntoView({behavior:"smooth"}))}setupIScroll(){const{scrollSnapEnabled:t}=this.props,n=this.getScrollDirection(),o={disableSetWidth:!0,disableSetHeight:!0,loop:!1},r=this.scrollRef.current;this.iScroll=new BScroll(r,{bounceTime:500,swipeBounceTime:300,scrollbar:this.props.showScrollbar?{}:void 0,momentum:t?!this.props.scrollSnapToEveryItem:!0,bounce:this.props.scrollBounceEnabled&&!(t&&o.loop),scrollX:n==="x"||n==="both",scrollY:n==="y"||n==="both",slide:t?o:void 0,probeType:this.props.onScrollPositionChanged?3:1,click:!0,nestedScroll:!0,useTransition:!1});const s=this.iScroll.scroller;s.scrollBehaviorX&&(s.scrollBehaviorX.momentum=patchedMomentum.bind(s.scrollBehaviorX)),s.scrollBehaviorY&&(s.scrollBehaviorY.momentum=patchedMomentum.bind(s.scrollBehaviorY)),this.iScroll.on("beforeScrollStart",()=>{this.iScroll.refresh()}),this.iScroll.on("scrollStart",()=>{this.props.onScrollStart&&this.props.onScrollStart()}),this.iScroll.on("scrollEnd",()=>{this.props.onScrollEnd&&this.props.onScrollEnd()}),this.props.onScrollPositionChanged&&this.iScroll.on("scroll",()=>{this.props.onScrollPositionChanged(n==="x"?-this.iScroll.x:-this.iScroll.y)})}UNSAFE_componentWillReceiveProps(t){(this.props.scrollSnapEnabled!==t.scrollSnapEnabled||this.props.onScrollPositionChanged!==t.onScrollPositionChanged||this.props.onScrollStart!==t.onScrollStart||this.props.onScrollEnd!==t.onScrollEnd||this.props.showScrollbar!==t.showScrollbar||this.props.scrollEnabled!==t.scrollEnabled||this.props.nativeScroll!==t.nativeScroll||this.props.scrollSnapToEveryItem!==t.scrollSnapToEveryItem||this.props.layout!==t.layout||this.props.flexWrap!==t.flexWrap||this.props.scrollBounceEnabled!==t.scrollBounceEnabled)&&(this.iScroll&&(this.iScroll.destroy(),this.iScroll=void 0),this.scrollNeedsToInit=t.scrollEnabled&&!t.nativeScroll)}renderIScroll(){const{flexDirection:t,flexWrap:n}=this.props.style,o={display:"inline-flex",flexShrink:0,flexDirection:t,flexWrap:n,touchAction:"none"};return t==="row"?n==="wrap"?o.width="100%":o.height="100%":n==="wrap"?o.height="100%":o.width="100%",React__namespace.createElement("div",{className:"scroll-wrapper-internal",style:o},this.props.children)}getScrollDirection(){return this.props.flexWrap==="wrap"||this.props.flexWrap==="wrap-reverse"?this.props.layout==="row"?"y":"x":this.props.layout==="row"?"x":"y"}render(){const{as:t="div",...n}=this.props,o=n.scrollEnabled&&!n.nativeScroll?this.renderIScroll():n.children,r={...n.style};if(Layout.size(r,n),Layout.align(r,n),n.clip&&(r.overflowX="hidden",r.overflowY="hidden"),n.scrollEnabled&&n.nativeScroll){const a=this.getScrollDirection();a==="y"?r.overflowY="auto":a==="x"?r.overflowX="auto":a==="both"&&(r.overflowX="auto",r.overflowY="auto")}r.opacity===0&&(r.pointerEvents="none");const s={className:n.className,...n.attrs,...n.dom,...pointerProps(n),style:r,ref:this.scrollRef};return React__namespace.createElement(t,{...s},o)}};const GroupNode={name:"Group",docs:"https://docs.noodl.net/nodes/basic-elements/group",connectionPanel:{groupPriority:["General","Style","Events","Mounted","Hover Events","Pointer Events","Focus","Scroll"]},initialize(){this.props.attrs={},this._internal={scrollElementDuration:500,scrollIndexDuration:500,scrollIndex:0},this.props.layout="column"},getReactComponent(){return Group$1},noodlNodeAsProp:!0,visualStates:[{name:"neutral",label:"Neutral"},{name:"hover",label:"Hover"}],defaultCss:{display:"flex",position:"relative",flexDirection:"column"},inputs:{flexDirection:{index:12,displayName:"Layout",group:"Layout",type:{name:"enum",enums:[{label:"None",value:"none"},{label:"Vertical",value:"column"},{label:"Horizontal",value:"row"}]},default:"column",set(e){this.props.layout=e,e!=="none"?this.setStyle({flexDirection:e}):this.removeStyle(["flexDirection"]),this.context.editorConnection&&(e!=="none"&&!flexDirectionValues.includes(e)?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"layout-warning",{message:"Invalid Layout value has to be a valid flex-direction value."}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"layout-warning")),this.forceUpdate()}},"scrollToIndex.do":{displayName:"Scroll To Index - Do",group:"Scroll To Index",type:"signal",index:505,valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{if(!this.innerReactComponentRef)return;const e=this._internal.scrollIndex,t=this._internal.scrollIndexDuration;this.innerReactComponentRef.scrollToIndex(e,t)})}},"scrollToElement.do":{displayName:"Scroll To Element - Do",group:"Scroll To Element",type:"signal",index:500,valueChangedToTrue(){this.innerReactComponentRef&&this.scheduleAfterInputsHaveUpdated(()=>{const e=this._internal.scrollElement,t=this._internal.scrollElementDuration;this.innerReactComponentRef.scrollToElement(e,t)})}},"scrollToElement.element":{displayName:"Scroll To Element - Element",group:"Scroll To Element",type:"reference",index:501,set(e){this._internal.scrollElement=e}},"scrollToElement.duration":{displayName:"Scroll To Element - Duration",group:"Scroll To Element",type:"number",default:500,index:502,set(e){this._internal.scrollElementDuration=e}},"scrollToIndex.index":{displayName:"Scroll To Index - Index",group:"Scroll To Index",type:"number",default:0,index:506,set(e){this._internal.scrollIndex=e}},"scrollToIndex.duration":{displayName:"Scroll To Index - Duration",group:"Scroll To Index",type:"number",default:500,index:507,set(e){this._internal.scrollIndexDuration=e}},focus:{displayName:"Focus",type:"signal",group:"Focus",valueChangedToTrue(){this.context.setNodeFocused(this,!0)}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputProps:{clip:{index:19,displayName:"Clip Content",type:"boolean",group:"Layout",default:!1},scrollEnabled:{index:54,group:"Scroll",displayName:"Enable Scroll",type:"boolean",default:!1},scrollSnapEnabled:{index:55,displayName:"Snap",group:"Scroll",type:"boolean",default:!1},scrollSnapToEveryItem:{index:56,displayName:"Snap To Every Item",group:"Scroll",type:"boolean",default:!1},showScrollbar:{index:57,displayName:"Show Scrollbar",group:"Scroll",type:"boolean",default:!1},scrollBounceEnabled:{index:58,displayName:"Bounce at boundaries",group:"Scroll",type:"boolean",default:!0},nativeScroll:{index:60,group:"Scroll",displayName:"Native platform scroll",type:"boolean",default:!0},as:{index:1e5,group:"Advanced HTML",displayName:"Tag",type:{name:"enum",enums:[{label:"<div>",value:"div"},{label:"<section>",value:"section"},{label:"<article>",value:"article"},{label:"<aside>",value:"aside"},{label:"<nav>",value:"nav"},{label:"<header>",value:"header"},{label:"<footer>",value:"footer"},{label:"<main>",value:"main"},{label:"<span>",value:"span"}]},default:"div"}},inputCss:{alignItems:{index:13,group:"Align and justify content",displayName:"Align Items",type:{name:"enum",enums:[{label:"Start",value:"flex-start"},{label:"End",value:"flex-end"},{label:"Center",value:"center"}],alignComp:"align-items"},default:"flex-start"},justifyContent:{index:14,group:"Align and justify content",displayName:"Justify Content",type:{name:"enum",enums:[{label:"Start",value:"flex-start"},{label:"End",value:"flex-end"},{label:"Center",value:"center"},{label:"Space Between",value:"space-between"},{label:"Space Around",value:"space-around"},{label:"Space Evenly",value:"space-evenly"}],alignComp:"justify-content"},default:"flex-start",applyDefault:!1},flexWrap:{index:15,displayName:"Multi Line Wrap",group:"Layout",type:{name:"enum",enums:[{label:"Off",value:"nowrap"},{label:"On",value:"wrap"},{label:"On Reverse",value:"wrap-reverse"}]},default:"nowrap",onChange(e){this.props.flexWrap=e,this.forceUpdate()},applyDefault:!1},alignContent:{index:16,group:"Layout",displayName:"Align Content",type:{name:"enum",enums:[{label:"Start",value:"flex-start"},{label:"End",value:"flex-end"},{label:"Center",value:"center"},{label:"Space Between",value:"space-between"},{label:"Space Around",value:"space-around"},{label:"Space Evenly",value:"space-evenly"}],alignComp:"align-content"}},rowGap:{index:17,displayName:"Vertical Gap",group:"Layout",type:{name:"number",units:["px","%","em"],defaultUnit:"px"},default:0,applyDefault:!1},columnGap:{index:18,displayName:"Horizontal Gap",group:"Layout",type:{name:"number",units:["px","%","em"],defaultUnit:"px"},default:0,applyDefault:!1},backgroundColor:{index:201,displayName:"Background Color",group:"Style",type:"color",default:"transparent",applyDefault:!1,allowVisualStates:!0}},outputProps:{onScrollPositionChanged:{displayName:"Scroll Position",type:"number",group:"Scroll"},onScrollStart:{displayName:"Scroll Start",type:"signal",group:"Scroll"},onScrollEnd:{displayName:"Scroll End",type:"signal",group:"Scroll"}},outputs:{focused:{displayName:"Focused",type:"signal",group:"Focus"},focusLost:{displayName:"Focus Lost",type:"signal",group:"Focus"}},dynamicports:[{condition:"flexDirection != none",inputs:["scrollEnabled"]},{condition:"flexDirection != none AND scrollEnabled = true",inputs:["nativeScroll"]},{condition:"flexDirection != none AND scrollEnabled = true AND nativeScroll = false",inputs:["scrollBounceEnabled","scrollSnapEnabled","showScrollbar","scrollToElement.do","scrollToElement.element","scrollToElement.duration","scrollToIndex.do","scrollToIndex.index","scrollToIndex.duration"]},{condition:"flexDirection != none AND scrollEnabled = true AND scrollSnapEnabled = true",inputs:["scrollSnapToEveryItem"]},{condition:"flexDirection != none",inputs:["flexWrap"]},{condition:"flexWrap = wrap OR flexWrap = wrap-reverse",inputs:["alignContent"]},{condition:"flexDirection = row OR flexWrap = wrap OR flexWrap = wrap-reverse",inputs:["columnGap"]},{condition:"flexDirection = column OR flexWrap = wrap OR flexWrap = wrap-reverse",inputs:["rowGap"]}],methods:{_focus(){this.sendSignalOnOutput("focused")},_blur(){this.sendSignalOnOutput("focusLost")}}};NodeSharedPortDefinitions.addDimensions(GroupNode),NodeSharedPortDefinitions.addTransformInputs(GroupNode),NodeSharedPortDefinitions.addSharedVisualInputs(GroupNode),NodeSharedPortDefinitions.addPaddingInputs(GroupNode),NodeSharedPortDefinitions.addMarginInputs(GroupNode),NodeSharedPortDefinitions.addAlignInputs(GroupNode),NodeSharedPortDefinitions.addPointerEventOutputs(GroupNode),NodeSharedPortDefinitions.addBorderInputs(GroupNode),NodeSharedPortDefinitions.addShadowInputs(GroupNode);function defineTooltips$1(e){e.inputProps.clip.tooltip=createTooltip({title:"Clip content",body:"Controls if elements that are too big to fit will be clipped",images:[{src:"clip-enabled.svg",label:"Enabled"},{src:"clip-disabled.svg",label:"Disabled"}]}),e.inputCss.flexWrap.tooltip=createTooltip({title:"Multiline wrap",body:"Elements will wrap to the next line when there's not enough space",images:[{src:"multiline-h.svg",body:"Using a horizontal layout"},{src:"multiline-v.svg",body:"Using a vertical layout"}]})}Noodl.runDeployed||defineTooltips$1(GroupNode);const Group=createNodeFromReactComponent(GroupNode);function Icon$1(e){const t={userSelect:"none",...e.style};Layout.size(t,e),Layout.align(t,e);function n(){const r={};if(e.iconSourceType==="image"&&e.iconImageSource!==void 0){r.width=e.iconSize,r.height=e.iconSize;let s=e.iconImageSource;if(typeof s=="string"&&s.startsWith("/")){const a=Noodl.Env.BaseUrl;a&&(s=a+s.substring(1))}return React.createElement("img",{alt:"",src:s,style:r})}else if(e.iconSourceType==="icon"&&e.iconIconSource!==void 0)return r.fontSize=e.iconSize,r.color=e.iconColor,r.lineHeight=1,React.createElement("div",{style:{lineHeight:0}},e.iconIconSource.codeAsClass===!0?React.createElement("span",{className:[e.iconIconSource.class,e.iconIconSource.code].join(" "),style:r}):React.createElement("span",{className:e.iconIconSource.class,style:r},e.iconIconSource.code));return null}let o="ndl-visual-icon";return e.className&&(o=o+" "+e.className),React.createElement("div",{className:o,style:t},n())}const IconNode={name:"net.noodl.visual.icon",displayName:"Icon",docs:"https://docs.noodl.net/nodes/basic-elements/icon",allowChildren:!1,noodlNodeAsProp:!0,connectionPanel:{groupPriority:["General","Style","Actions","Events","States","Mounted","Hover Events","Pointer Events","Focus Events"]},getReactComponent(){return Icon$1}};NodeSharedPortDefinitions.addAlignInputs(IconNode),NodeSharedPortDefinitions.addTransformInputs(IconNode),NodeSharedPortDefinitions.addPaddingInputs(IconNode,{defaults:{paddingTop:5,paddingRight:5,paddingBottom:5,paddingLeft:5}}),NodeSharedPortDefinitions.addMarginInputs(IconNode),NodeSharedPortDefinitions.addIconInputs(IconNode,{hideEnableIconInput:!0,defaults:{useIcon:!0}}),NodeSharedPortDefinitions.addSharedVisualInputs(IconNode);const Icon=createNodeFromReactComponent(IconNode);function Image$1(e){const t={...e.style};if(Layout.size(t,e),Layout.align(t,e),t.opacity===0&&(t.pointerEvents="none"),e.dom?.src?.startsWith("/")){const n=Noodl.Env.BaseUrl;n&&(e.dom.src=n+e.dom.src.substring(1))}return React__namespace.createElement("img",{...e.attrs,className:e.className,...e.dom,...pointerProps(e),style:t})}const ImageNode={name:"Image",docs:"https://docs.noodl.net/nodes/basic-elements/image",noodlNodeAsProp:!0,visualStates:[{name:"neutral",label:"Neutral"},{name:"hover",label:"Hover"}],connectionPanel:{groupPriority:["General","Image","Style","Actions","Events","Mounted","Pointer Events","Hover Events","Dimensions","Margin and padding"]},initialize(){this.props.attrs={},this.props.default=""},getReactComponent(){return Image$1},getInspectInfo(){if(this.props.dom.srcSet)return this.props.dom.srcSet;if(this.props.dom.src){const e=this.props.dom.src.toString();return[{type:"text",value:e},{type:"image",value:e}]}},allowChildren:!1,defaultCss:{display:"block",flexShrink:0},inputCss:{objectFit:{displayName:"Image Fit",group:"Dimensions",type:{name:"enum",enums:[{label:"Fill",value:"fill"},{label:"Contain",value:"contain"},{label:"Cover",value:"cover"},{label:"None",value:"none"},{label:"Scale Down",value:"scale-down"}]},default:"contain",allowVisualStates:!0}},dynamicports:[{condition:"sizeMode = explicit",inputs:["objectFit"]}],inputs:{src:{displayName:"Source",group:"Image",propPath:"dom",type:{name:"image"},index:30,allowVisualStates:!0,set(e){this.props.dom.src=getAbsoluteUrl(e),this.forceUpdate()}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}},inputProps:{srcSet:{displayName:"Source Set",group:"Image",propPath:"dom",type:{name:"string"},index:31,allowVisualStates:!0},alt:{displayName:"Alternate text",tooltip:"The alt text is used by screen readers, or if the image can't be downloaded or displayed",type:"string",propPath:"dom",index:1e3,default:""}},outputProps:{onLoad:{displayName:"On Load",propPath:"dom",type:"signal",group:"Events"},onError:{displayName:"On Error",propPath:"dom",type:"signal",group:"Events"}}};NodeSharedPortDefinitions.addDimensions(ImageNode,{defaultSizeMode:"contentSize",contentLabel:"Image"}),NodeSharedPortDefinitions.addTransformInputs(ImageNode),NodeSharedPortDefinitions.addMarginInputs(ImageNode),NodeSharedPortDefinitions.addSharedVisualInputs(ImageNode),NodeSharedPortDefinitions.addAlignInputs(ImageNode),NodeSharedPortDefinitions.addPointerEventOutputs(ImageNode),NodeSharedPortDefinitions.addBorderInputs(ImageNode),NodeSharedPortDefinitions.addShadowInputs(ImageNode);const Image=createNodeFromReactComponent(ImageNode);function Text(e){const{as:t="div"}=e,n={...e.textStyle,...e.style};return Layout.size(n,e),Layout.align(n,e),n.color=e.noodlNode.context.styles.resolveColor(n.color),e.sizeMode==="contentSize"||e.sizeMode==="contentWidth"?n.whiteSpace="pre":(n.whiteSpace="pre-wrap",n.overflowWrap="anywhere"),n.opacity===0&&(n.pointerEvents="none"),React.createElement(t,{className:["ndl-visual-text",e.className].join(" "),...e.attrs,...e.dom,...pointerProps(e),style:n},String(e.text))}const TextNode={name:"Text",docs:"https://docs.noodl.net/nodes/basic-elements/text",visualStates:[{name:"neutral",label:"Neutral"},{name:"hover",label:"Hover"}],allowChildren:!1,noodlNodeAsProp:!0,usePortAsLabel:"text",portLabelTruncationMode:"length",connectionPanel:{groupPriority:["General","Text","Text Style","Style","Events","Mounted","Hover Events","Pointer Events"]},nodeDoubleClickAction:{focusPort:"text"},initialize(){this.props.attrs={}},getReactComponent(){return Text},getInspectInfo(){return this.props.text},defaultCss:{position:"relative",display:"flex"},inputProps:{text:{index:19,group:"Text",displayName:"Text",default:"Text",type:{name:"string",multiline:!0}},as:{index:1e5,group:"Advanced HTML",displayName:"Tag",type:{name:"enum",enums:[{label:"<div>",value:"div"},{label:"<h1>",value:"h1"},{label:"<h2>",value:"h2"},{label:"<h3>",value:"h3"},{label:"<h4>",value:"h4"},{label:"<h5>",value:"h5"},{label:"<h6>",value:"h6"},{label:"<p>",value:"p"},{label:"<span>",value:"span"}]},default:"div"}},inputCss:{wordBreak:{index:27,group:"Text",displayName:"Word Break",applyDefault:!1,type:{name:"enum",enums:[{label:"Normal",value:"normal"},{label:"Break All",value:"break-all"}]},default:"normal"}},inputs:{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",justifyContent:"flex-start"});break;case"center":this.setStyle({textAlign:"center",justifyContent:"center"});break;case"right":this.setStyle({textAlign:"right",justifyContent:"flex-end"});break}}},textAlignY:{group:"Text Alignment",index:14,displayName:"Text Vertical Align",type:{name:"enum",enums:[{label:"Top",value:"top"},{label:"Center",value:"center"},{label:"Bottom",value:"bottom"}],alignComp:"vertical"},default:"top",set(e){switch(e){case"top":this.setStyle({alignItems:"flex-start"});break;case"center":this.setStyle({alignItems:"center"});break;case"bottom":this.setStyle({alignItems:"flex-end"});break}}},testId:{index:100009,displayName:"Test ID Attribute",group:"Advanced HTML",type:"string",set(e){this.props.attrs["data-testid"]=e,this.forceUpdate()}}}};NodeSharedPortDefinitions.addDimensions(TextNode,{defaultSizeMode:"contentHeight",contentLabel:"Text"}),NodeSharedPortDefinitions.addTextStyleInputs(TextNode),NodeSharedPortDefinitions.addAlignInputs(TextNode),NodeSharedPortDefinitions.addTransformInputs(TextNode),NodeSharedPortDefinitions.addMarginInputs(TextNode),NodeSharedPortDefinitions.addSharedVisualInputs(TextNode),NodeSharedPortDefinitions.addPointerEventOutputs(TextNode);function defineTooltips(e){e.inputCss.wordBreak.tooltip=createTooltip({title:"Word break",body:["Control where line breaks are allowed","- Normal: Break on spaces and other whitespace characters","- Break All: Allow line breaks between any two characters, including inside words"]})}Noodl.runDeployed||defineTooltips(TextNode);const TextNode$1=createNodeFromReactComponent(TextNode);class CachedVideo extends React.PureComponent{componentDidUpdate(){this.video&&(this.video.muted=this.props.muted,this.video.loop=this.props.loop,this.video.volume=this.props.volume,this.video.autoplay=this.props.autoplay,this.video.controls=this.props.controls)}render(){let t=this.props.src?this.props.src.toString():void 0;if(t&&(t.indexOf("#t=")===-1&&(t+="#t=0.01"),t.startsWith("/"))){const n=Noodl.Env.BaseUrl;n&&(t=n+t.substring(1))}return React.createElement("video",{...this.props,playsInline:!0,src:t,...pointerProps(this.props),ref:n=>{this.video=n,this.props.innerRef(n)}})}}let Video$1=class extends React.Component{constructor(t){super(t),this.wantToPlay=!1,this.canPlay=!1}componentWillUnmount(){this.canPlay=!1}setSourceObject(t){this.video.srcObject!==t&&(this.video.srcObject=t,this.canPlay=!1)}play(){this.wantToPlay=!0,this.canPlay&&this.video.play()}restart(){this.wantToPlay=!0,this.canPlay&&(this.video.currentTime=0,this.video.play())}pause(){this.wantToPlay=!1,this.video&&this.video.pause()}reset(){this.wantToPlay=!1,this.video&&(this.video.currentTime=0,this.video.pause())}render(){const t=this.props,n={...t.style};return Layout.size(n,t),Layout.align(n,t),n.opacity===0&&(n.pointerEvents="none"),n.objectPosition=`${t.objectPositionX} ${t.objectPositionY}`,React.createElement(CachedVideo,{...t.dom,className:t.className,style:n,innerRef:o=>{this.video=o,this.props.onVideoElementCreated&&this.props.onVideoElementCreated(o)},onCanPlay:()=>{this.canPlay=!0,this.wantToPlay&&this.video.play(),this.props.onCanPlay&&this.props.onCanPlay(),this.props.videoWidth&&this.props.videoWidth(this.video.videoWidth),this.props.videoHeight&&this.props.videoHeight(this.video.videoHeight)}})}};const VideoNode={name:"Video",docs:"https://docs.noodl.net/nodes/basic-elements/video",connectionPanel:{groupPriority:["General","Video","Video Actions","Style","Actions","Events","Mounted","Playback","Pointer Events","Hover Events","Dimensions","Margin and padding"]},getReactComponent(){return Video$1},allowChildren:!1,noodlNodeAsProp:!0,defaultCss:{display:"block"},inputs:{srcObject:{displayName:"Source Object",group:"Video",type:"mediastream",default:null,set(e){this.innerReactComponentRef&&this.innerReactComponentRef.setSourceObject(e)}},play:{type:"signal",group:"Video Actions",displayName:"Play",tooltip:{standard:"Play the video"},valueChangedToTrue(){this.innerReactComponentRef&&this.innerReactComponentRef.play()}},restart:{type:"signal",group:"Video Actions",displayName:"Restart",tooltip:{standard:"Restart the video from the beginning"},valueChangedToTrue(){this.innerReactComponentRef&&this.innerReactComponentRef.restart()}},pause:{type:"boolean",group:"Video Actions",displayName:"Pause",valueChangedToTrue(){this.innerReactComponentRef&&this.innerReactComponentRef.pause()}},reset:{type:"boolean",group:"Video Actions",displayName:"Reset",valueChangedToTrue(){this.innerReactComponentRef&&this.innerReactComponentRef.reset()}},src:{displayName:"Source",group:"Video",type:"string",set(e){this.props.dom.src=getAbsoluteUrl(e),this.forceUpdate()}},poster:{displayName:"Poster",group:"Video",type:"image",set(e){this.props.dom.poster=getAbsoluteUrl(e),this.forceUpdate()}}},inputProps:{autoplay:{displayName:"Autoplay",propPath:"dom",group:"Video",type:"boolean"},controls:{displayName:"Controls",propPath:"dom",group:"Video",type:"boolean"},volume:{displayName:"Volume",propPath:"dom",group:"Video",type:"number",default:1},muted:{displayName:"Muted",propPath:"dom",group:"Video",type:"boolean"},loop:{displayName:"Loop",propPath:"dom",group:"Video",type:"boolean"},objectPositionX:{displayName:"Video Position X",group:"Video Layout",type:{name:"number",units:["%","px"],defaultUnit:"%"},default:50},objectPositionY:{displayName:"Video Position Y",group:"Video Layout",type:{name:"number",units:["%","px"],defaultUnit:"%"},default:50}},inputCss:{objectFit:{displayName:"Object Fit",group:"Video Layout",type:{name:"enum",enums:[{label:"Contain",value:"contain"},{label:"Cover",value:"cover"},{label:"Fill",value:"fill"},{label:"None",value:"none"}]},default:"contain"}},outputProps:{onCanPlay:{type:"signal",group:"Events",displayName:"On Can Play"},onTimeUpdate:{group:"Playback",displayName:"Playback Position",type:"number",propPath:"dom",getValue(e){return e.target.currentTime}},onPlay:{group:"Events",displayName:"On Play",type:"signal",propPath:"dom"},onPause:{group:"Events",displayName:"On Pause",type:"signal",propPath:"dom"},onVideoElementCreated:{type:"domelement",displayName:"DOM Element"},videoWidth:{group:"Playback",type:"number",displayName:"Video Width"},videoHeight:{group:"Playback",type:"number",displayName:"Video Height"}}};NodeSharedPortDefinitions.addDimensions(VideoNode,{defaultSizeMode:"contentSize",contentLabel:"Video"}),NodeSharedPortDefinitions.addTransformInputs(VideoNode),NodeSharedPortDefinitions.addMarginInputs(VideoNode),NodeSharedPortDefinitions.addSharedVisualInputs(VideoNode),NodeSharedPortDefinitions.addAlignInputs(VideoNode),NodeSharedPortDefinitions.addPointerEventOutputs(VideoNode),NodeSharedPortDefinitions.addBorderInputs(VideoNode);const Video=createNodeFromReactComponent(VideoNode);function _shallowCompare(e,t){for(var n in e)if(e.hasOwnProperty(n)&&e[n]!==t[n])return!1;for(var n in t)if(t.hasOwnProperty(n)&&e[n]!==t[n])return!1;return!0}const _styleSheets={};function updateStylesForClass(e,t,n){if(_styleSheets[e])_shallowCompare(t,_styleSheets[e].props)||(_styleSheets[e].style.innerHTML=n(e,t),_styleSheets[e].props=Object.assign({},t));else{var o=document.createElement("style");o.innerHTML=n(e,t),document.head.appendChild(o),_styleSheets[e]={style:o,props:Object.assign({},t)}}}function mergeAttribute(e,t,n){e[t]||(e[t]={});for(const o in n)e[t][o]=n[o]}function addInputProps(e,t){mergeAttribute(e,"inputProps",t)}function addOutputProps(e,t){mergeAttribute(e,"outputProps",t)}function addControlEventsAndStates(e){addInputProps(e,{blockTouch:{index:450,displayName:"Block Pointer Events",type:"boolean"}}),addOutputProps(e,{focusState:{displayName:"Focused",group:"States",type:"boolean",props:{onFocus(){this.outputPropValues.focusState=!0,this.flagOutputDirty("focusState"),this.hasOutput("onFocus")&&this.sendSignalOnOutput("onFocus")},onBlur(){this.outputPropValues.focusState=!1,this.flagOutputDirty("focusState"),this.hasOutput("onBlur")&&this.sendSignalOnOutput("onBlur")}}},onFocus:{displayName:"Focused",group:"Events",type:"signal",props:{onFocus(){this.outputPropValues.focusState=!0,this.flagOutputDirty("focusState"),this.sendSignalOnOutput("onFocus")}}},onBlur:{displayName:"Blurred",group:"Events",type:"signal",props:{onBlur(){this.outputPropValues.focusState=!1,this.flagOutputDirty("focusState"),this.sendSignalOnOutput("onBlur")}}},hoverState:{displayName:"Hover",group:"States",type:"boolean",props:{onMouseOver(){this.outputPropValues.hoverState=!0,this.flagOutputDirty("hoverState"),this.hasOutput("hoverStart")&&this.sendSignalOnOutput("hoverStart")},onMouseLeave(){this.outputPropValues.hoverState=!1,this.flagOutputDirty("hoverState"),this.hasOutput("hoverEnd")&&this.sendSignalOnOutput("hoverEnd")}}},hoverStart:{displayName:"Hover Start",group:"Events",type:"signal",props:{onMouseOver(){this.outputPropValues.hoverState=!0,this.flagOutputDirty("hoverState"),this.sendSignalOnOutput("hoverStart")}}},hoverEnd:{displayName:"Hover End",group:"Events",type:"signal",props:{onMouseLeave(){this.outputPropValues.hoverState=!1,this.flagOutputDirty("hoverState"),this.sendSignalOnOutput("hoverEnd")}}},pressedState:{displayName:"Pressed",group:"States",type:"boolean",props:{onMouseDown(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this.hasOutput("pointerDown")&&this.sendSignalOnOutput("pointerDown")},onTouchStart(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this.hasOutput("pointerDown")&&this.sendSignalOnOutput("pointerDown")},onMouseUp(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.hasOutput("pointerUp")&&this.sendSignalOnOutput("pointerUp")},onTouchEnd(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.hasOutput("pointerUp")&&this.sendSignalOnOutput("pointerUp")},onTouchCancel(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.hasOutput("pointerUp")&&this.sendSignalOnOutput("pointerUp")}}},pointerDown:{displayName:"Pointer Down",group:"Events",type:"signal",props:{onMouseDown(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this.sendSignalOnOutput("pointerDown")},onTouchStart(){this.outputPropValues.pressedState=!0,this.flagOutputDirty("pressedState"),this.sendSignalOnOutput("pointerDown")}}},pointerUp:{displayName:"Pointer Up",group:"Events",type:"signal",props:{onMouseUp(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.sendSignalOnOutput("pointerUp")},onTouchEnd(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.sendSignalOnOutput("pointerUp")},onTouchCancel(){this.outputPropValues.pressedState=!1,this.flagOutputDirty("pressedState"),this.sendSignalOnOutput("pointerUp")}}}})}function controlEvents(e){return Object.assign({},{onFocus:e.onFocus,onBlur:e.onBlur},pointerProps(e))}const Utils={updateStylesForClass,addControlEventsAndStates,controlEvents};function Button(e){React.useEffect(()=>{e.focusChanged&&e.focusChanged(!1),e.hoverChanged&&e.hoverChanged(!1),e.pressedChanged&&e.pressedChanged(!1)},[]);var t={...e.style};Layout.size(t,e),Layout.align(t,e),e.textStyle!==void 0&&(t=Object.assign({},e.textStyle,t)),e.boxShadowEnabled&&(t.boxShadow=`${e.boxShadowInset?"inset ":""}${e.boxShadowOffsetX} ${e.boxShadowOffsetY} ${e.boxShadowBlurRadius} ${e.boxShadowSpreadRadius} ${e.boxShadowColor}`);let n="ndl-controls-button";return e.className&&(n=n+" "+e.className),React.createElement("button",{className:n,disabled:!e.enabled,...Utils.controlEvents(e),type:e.buttonType,style:t,onClick:e.onClick},e.label,e.children)}var ButtonNode={name:"Button",docs:"https://docs.noodl.net/nodes/visual/button",allowChildren:!0,noodlNodeAsProp:!0,initialize(){this.outputPropValues.hoverState=this.outputPropValues.focusState=this.outputPropValues.pressedState=!1,this.props.id=this._internal.controlId="input-"+guid(),this.props.enabled=this._internal.enabled=!0},getReactComponent(){return Button},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"))}},textStyle:{index:20,type:"textStyle",group:"Text",displayName:"Text Style",default:"None",set(e){this.props.textStyle=this.context.styles.getTextStyle(e),this.forceUpdate()}},fontFamily:{index:21,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()}}},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}}},inputCss:{fontSize:{index:21,group:"Text",displayName:"Font Size",type:{name:"number",units:["px"],defaultUnit:"px"},onChange(){this.props.textStyle&&this.forceUpdate()}},color:{index:24,group:"Text",displayName:"Color",type:"color",default:"#FFFFFF"},backgroundColor:{index:100,displayName:"Background Color",group:"Style",type:"color",default:"#000000"},paddingLeft:{index:64,group:"Margin and padding",default:20,applyDefault:!1,displayName:"Pad Left",type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-left"}},paddingRight:{index:65,group:"Margin and padding",default:20,applyDefault:!1,displayName:"Pad Right",type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-right"}},paddingTop:{index:66,group:"Margin and padding",displayName:"Pad Top",default:5,applyDefault:!1,type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-top"}},paddingBottom:{index:67,group:"Margin and padding",displayName:"Pad Bottom",default:5,applyDefault:!1,type:{name:"number",units:["px"],defaultUnit:"px",marginPaddingComp:"padding-bottom"}},borderRadius:{index:202,displayName:"Border Radius",group:"Style",type:{name:"number",units:["px"],defaultUnit:"px"},default:0,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:0,applyDefault:!1},borderColor:{index:205,displayName:"Border Color",group:"Style",type:"color",default:"#000000"}},inputProps:{label:{type:"string",displayName:"Label",group:"General",default:"Label"},buttonType:{type:{name:"enum",enums:[{label:"Button",value:"button"},{label:"Submit",value:"submit"}]},displayName:"Type",default:"button",group:"General"},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)"}},outputProps:{onClick:{displayName:"Click",group:"Events",type:"signal"}},dynamicports:[{condition:"boxShadowEnabled = true",inputs:["boxShadowOffsetX","boxShadowOffsetY","boxShadowInset","boxShadowBlurRadius","boxShadowSpreadRadius","boxShadowColor"]}],methods:{}};NodeSharedPortDefinitions.addDimensions(ButtonNode,{defaultSizeMode:"contentSize",contentLabel:"Content",useDimensionConstraints:!1}),NodeSharedPortDefinitions.addAlignInputs(ButtonNode),NodeSharedPortDefinitions.addTransformInputs(ButtonNode),NodeSharedPortDefinitions.addMarginInputs(ButtonNode),NodeSharedPortDefinitions.addSharedVisualInputs(ButtonNode),Utils.addControlEventsAndStates(ButtonNode),ButtonNode=createNodeFromReactComponent(ButtonNode),ButtonNode.setup=function(e,t){t.on("nodeAdded.Button",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 ButtonOld=ButtonNode;function _styleTemplate$2(e,t){return`
96
96
  .${e}:checked {
97
97
  background-color: ${t.checkedBackgroundColor};
98
98
  }
@@ -169,17 +169,17 @@ 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 p=[];for(var f in d)p.push({name:f,type:"*",plug:"output",displayName:f});e.editorConnection.sendDynamicPorts(o.id,p,{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(p=>p.name===d.name&&p.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],p=this.targetValues[a];s[0]=Math.floor(EaseCurves.linear(d[0],p[0],u)),s[1]=Math.floor(EaseCurves.linear(d[1],p[1],u)),s[2]=Math.floor(EaseCurves.linear(d[2],p[2],u)),s[3]=Math.floor(EaseCurves.linear(d[3],p[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 p=t.stateParameterTypes["type-"+a];if(p==="boolean"){var l=t.stateParameters["value-"+e+"-"+a];t.currentValues[a]=l===void 0?!1:!!l,this.flagOutputDirty(a)}else if(p==="string"||p==="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 p;u?(p={plug:"input",before:u.before,after:u.after,patterns:["transition-{{*}}","to-{{*}}","at-{{*}}","reached-{{*}}"]},r&&r.forEach(function(f){p.patterns.push("value-{{*}}-"+f)})):d&&(p=[{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:p})}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 p=u[d];a.push({type:{name:r["type-"+p]===void 0?"*":r["type-"+p]},plug:"input",group:"Property Values",displayName:p,name:"prop-"+p}),a.push({type:{name:"enum",enums:l,allowEditOnly:!0},plug:"input",group:"Property Types",displayName:p,default:"*",name:"type-"+p})}}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&&(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') }
176
176
  })
177
- `;var MapCollectionNode={name:"Map Collection",docs:"https://docs.noodl.net/nodes/data/array/array-map",displayNodeName:"Array Map",shortDesc:"Map array fields",category:"Data",color:"data",initialize:function(){var e=this;this._internal.collectionChangedCallback=function(){e.scheduleMap()}},inputs:{items:{type:"array",displayName:"Items",group:"General",set:function(e){this.setCollection(e),this.scheduleMap()}},mapScript:{type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},displayName:"Script",default:defaultMapCode,set:function(e){this._internal.mapCode=e;try{this._internal.mapFunc=new Function("map","object",this._internal.mapCode)}catch(t){this._internal.mapFunc=void 0,console.log("Error while parsing map script: "+t)}this.scheduleMap()}}},outputs:{items:{type:"array",displayName:"Items",group:"General",getter:function(){return this._internal.mappedCollection}},count:{type:"number",displayName:"Count",group:"General",getter:function(){return this._internal.mappedCollection?this._internal.mappedCollection.size():0}},modified:{group:"Events",type:"signal",displayName:"Changed"}},prototypeExtensions:{setCollection:function(e){this.bindCollection(e),this.flagOutputDirty("items"),this.flagOutputDirty("count")},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()},scheduleMap:function(){this.collectionChangedScheduled||(this.collectionChangedScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{if(this.collectionChangedScheduled=!1,this._internal.collection!==void 0){var e=this._internal.collection.map(t=>{var n=Model.create();return this._internal.mapFunc(function(o){for(var r in o)typeof o[r]=="function"?n.set(r,o[r](t)):typeof o[r]=="string"&&n.set(r,t.get(o[r]))},t),n});this._internal.mappedCollection=Collection.create(e),this.sendSignalOnOutput("modified"),this.flagOutputDirty("items"),this.flagOutputDirty("count")}}))}}};const MapCollectionNode$1={node:MapCollectionNode,setup:function(e,t){!e.editorConnection||e.editorConnection.isRunningLocally()}};function _makeRequest$1(e,t){var n=new XMLHttpRequest;n.onreadystatechange=function(){if(n.readyState===4){var s;try{s=JSON.parse(n.response)}catch{}n.status===200||n.status===201?t.success(s):t.error(s)}},n.open(t.method||"GET",t.endpoint+e,!0),n.setRequestHeader("X-Parse-Application-Id",t.appId),n.setRequestHeader("Content-Type","application/json");const o=Runtime.instance.getMetaData("cloudservices");o&&o.deployVersion&&n.setRequestHeader("x-noodl-cloud-version",o.deployVersion);var r=localStorage["Parse/"+t.appId+"/currentUser"];if(r!==void 0)try{const s=JSON.parse(r);n.setRequestHeader("X-Parse-Session-Token",s.sessionToken)}catch{}n.send(JSON.stringify(t.content))}var CloudFunctionNode$1={name:"CloudFunction2",displayName:"Cloud Function",category:"Cloud Services",color:"data",usePortAsLabel:"function",docs:"https://docs.noodl.net/nodes/data/cloud-data/cloud-function",initialize:function(){this._internal.paramsValues={},this._internal.resultsValues={}},getInspectInfo(){const e=this._internal.lastCallResult;return e?[{type:"value",value:e}]:"[Not executed yet]"},inputs:{call:{type:"signal",displayName:"Call",group:"Actions",valueChangedToTrue:function(){this.scheduleCall()}}},outputs:{success:{type:"signal",displayName:"Success",group:"Signals"},failure:{type:"signal",displayName:"Failure",group:"Signals"},error:{type:"string",displayName:"Error",group:"Error",getter:function(){return this._internal.error}}},methods:{setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure")},getResultsValue:function(e){return this._internal.resultsValues[e]},registerOutputIfNeeded:function(e){this.hasOutput(e)||e.startsWith("out-")&&this.registerOutput(e,{getter:this.getResultsValue.bind(this,e.substring(4))})},setParamsValue:function(e,t){this._internal.paramsValues[e]=t},setFunctionName:function(e){this._internal.functionName=e},registerInputIfNeeded:function(e){this.hasInput(e)||(e==="function"&&this.registerInput(e,{set:this.setFunctionName.bind(this)}),e.startsWith("in-")&&this.registerInput(e,{set:this.setParamsValue.bind(this,e.substring(3))}))},scheduleCall:function(){var e=this._internal;e.hasScheduledCall||(e.hasScheduledCall=!0,this.scheduleAfterInputsHaveUpdated(this.doCall.bind(this)))},doCall:function(){this._internal.hasScheduledCall=!1;const e=Runtime.instance.getMetaData("cloudservices");this.context.editorConnection&&(e===void 0||e.endpoint===void 0?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"cloud-function-2",{message:"No cloud services defined in this project."}):this._internal.functionName===void 0?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"cloud-function-2",{message:"No function specified"}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"cloud-function-2"));const t=e.appId,n=this.context.editorConnection.isRunningLocally()?`http://${window.location.hostname}:8577`:e.endpoint;_makeRequest$1("/functions/"+encodeURIComponent(this._internal.functionName),{appId:t,endpoint:n,content:this._internal.paramsValues,method:"POST",success:o=>{if(o===void 0)this._internal.lastCallResult={status:"success",parameters:this._internal.paramsValues,results:"empty"};else{const r=o.result||{};for(let s in r)this._internal.resultsValues[s]=r[s],this.hasOutput("out-"+s)&&this.flagOutputDirty("out-"+s);this._internal.lastCallResult={status:"success",parameters:this._internal.paramsValues,results:this._internal.resultsValues}}this.sendSignalOnOutput("success")},error:o=>{const r=typeof o=="string"?o:o?.error||"Failed running cloud function.";this._internal.lastCallResult={status:"failure",error:r},this.setError(r)}})}}};const CloudFunction2={node:CloudFunctionNode$1,setup:function(e,t){}},OpenFilePicker={name:"Open File Picker",docs:"https://docs.noodl.net/nodes/utilities/open-file-picker",category:"Utilities",getInspectInfo(){if(this._internal.file)return this._internal.file.path},initialize(){const e=document.createElement("input");e.type="file",this._internal.inputElement=e},inputs:{open:{type:"signal",displayName:"Open",group:"Actions",valueChangedToTrue(){const e=this._internal.inputElement,t=n=>{this._internal.file=n.target.files[0],this.flagOutputDirty("file"),this.flagOutputDirty("path"),this.flagOutputDirty("name"),this.flagOutputDirty("sizeInBytes"),this.flagOutputDirty("type"),this.sendSignalOnOutput("success"),e.onchange=null,e.value=""};e.accept=this._internal.acceptedFileTypes,this._internal.capture&&(e.capture=this._internal.capture),e.onchange=t,e.click()}},acceptedFileTypes:{group:"General",type:"string",displayName:"Accepted file types",set(e){this._internal.acceptedFileTypes=e}},capture:{group:"General",type:"string",displayName:"Capture",set(e){this._internal.capture=e}}},outputs:{file:{type:"*",displayName:"File",group:"General",get(){return this._internal.file}},path:{displayName:"Path",group:"Metadata",type:"string",get(){return this._internal.file&&this._internal.file.path}},name:{displayName:"Name",group:"Metadata",type:"string",get(){return this._internal.file&&this._internal.file.name}},sizeInBytes:{displayName:"Size in bytes",group:"Metadata",type:"number",get(){return this._internal.file&&this._internal.file.size}},type:{displayName:"Type",group:"Metadata",type:"string",get(){return this._internal.file&&this._internal.file.type}},success:{type:"signal",group:"Events",displayName:"Success"}}},OpenFilePicker$1={node:OpenFilePicker},UploadFile={name:"Upload File",docs:"https://docs.noodl.net/nodes/data/cloud-data/upload-file",category:"Cloud Services",color:"data",getInspectInfo(){return this._internal.response},inputs:{file:{group:"General",displayName:"File",type:"*",set(e){this._internal.file=e}},upload:{type:"signal",displayName:"Upload",group:"Actions",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{const e=this._internal.file;if(!e){this.setError("No file specified");return}CloudStore.instance.uploadFile({file:e,onUploadProgress:t=>{this._internal.progressTotal=t.total,this._internal.progressLoaded=t.loaded,this.flagOutputDirty("progressTotalBytes"),this.flagOutputDirty("progressLoadedBytes"),this.flagOutputDirty("progressLoadedPercent"),this.sendSignalOnOutput("progressChanged")},success:t=>{this._internal.cloudFile=new CloudFile(t),this.flagOutputDirty("cloudFile"),this.sendSignalOnOutput("success")},error:t=>this.setError(t)})})}}},outputs:{cloudFile:{group:"General",displayName:"Cloud File",type:"cloudfile",get(){return this._internal.cloudFile}},success:{group:"Events",displayName:"Success",type:"signal"},failure:{group:"Events",displayName:"Failure",type:"signal"},error:{type:"string",displayName:"Error",group:"Error",get(){return this._internal.error}},errorStatus:{type:"number",displayName:"Error Status Code",group:"Error",get(){return this._internal.errorStatus}},progressChanged:{type:"signal",displayName:"Progress Changed",group:"Events"},progressTotalBytes:{type:"number",displayName:"Total Bytes",group:"Progress",get(){return this._internal.progressTotal}},progressLoadedBytes:{type:"number",displayName:"Uploaded Bytes",group:"Progress",get(){return this._internal.progressLoaded}},progressLoadedPercent:{type:"number",displayName:"Uploaded Percent",group:"Progress",get(){return this._internal.progressTotal?this._internal.progressLoaded/this._internal.progressTotal*100:0}}},methods:{setError(e){this._internal.error=e.hasOwnProperty("error")?e.error:e,this._internal.errorStatus=e.code||e.status||0,this.flagOutputDirty("error"),this.flagOutputDirty("errorStatus"),this.sendSignalOnOutput("failure")}}},UploadFile$1={node:UploadFile},NavigateBack={name:"PageStackNavigateBack",displayNodeName:"Pop Component Stack",category:"Navigation",docs:"https://docs.noodl.net/nodes/component-stack/pop-component",inputs:{navigate:{displayName:"Navigate",group:"Actions",valueChangedToTrue:function(){this.scheduleNavigate()}},results:{type:{name:"stringlist",allowEditOnly:!0},group:"Results",set:function(e){this._internal.results=e}},backActions:{type:{name:"stringlist",allowEditOnly:!0},group:"Back Actions",set:function(e){this._internal.backActions=e}}},initialize:function(){this._internal.resultValues={}},methods:{scheduleNavigate:function(){var e=this,t=this._internal;t.hasScheduledNavigate||(t.hasScheduledNavigate=!0,this.scheduleAfterInputsHaveUpdated(function(){t.hasScheduledNavigate=!1,e.navigate()}))},_setBackCallback(e){this._internal.backCallback=e},navigate(){this._internal.backCallback!==void 0&&this._internal.backCallback({backAction:this._internal.backAction,results:this._internal.resultValues})},setResultValue:function(e,t){this._internal.resultValues[e]=t},backActionTriggered:function(e){this._internal.backAction=e,this.scheduleNavigate()},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e.startsWith("result-"))return this.registerInput(e,{set:this.setResultValue.bind(this,e.substring(7))});if(e.startsWith("backAction-"))return this.registerInput(e,{set:t=>{t&&this.backActionTriggered(e)}})}}}};function setup$1(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[],a=o.parameters.results;if(a){a=a?a.split(","):void 0;for(var l in a){var u=a[l];s.push({type:{name:"*"},plug:"input",group:"Results",name:"result-"+u,displayName:u})}}var d=o.parameters.backActions;if(d){d=d?d.split(","):void 0;for(var l in d){var u=d[l];s.push({type:"signal",plug:"input",group:"Back Actions",name:"backAction-"+u,displayName:u})}}e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){(s.name==="results"||s.name==="backActions")&&r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.PageStackNavigateBack",function(o){n(o)});for(const o of t.getNodesWithType("PageStackNavigateBack"))n(o)})}const NavigateBack$1={node:NavigateBack,setup:setup$1},NavigateToPathNode={name:"PageStackNavigateToPath",displayNodeName:"Navigate To Path",category:"Navigation",docs:"https://docs.noodl.net/nodes/navigation/navigate-to-path",initialize(){const e=this._internal;e.params={},e.query={},e.openInNewTab=!1},inputs:{path:{type:{name:"string"},displayName:"Path",group:"General",set(e){this._internal.path=e}},queryNames:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Query",group:"Query",set(e){this._internal.queryNames=e}},openInNewTab:{index:10,displayName:"Open in new tab",group:"General",default:!1,type:"boolean",set(e){this._internal.openInNewTab=!!e}},navigate:{displayName:"Navigate",group:"Actions",valueChangedToTrue(){this.scheduleNavigate()}}},outputs:{},methods:{scheduleNavigate(){var e=this._internal;e.hasScheduledNavigate||(e.hasScheduledNavigate=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.hasScheduledNavigate=!1,this.navigate()}))},navigate(){var e=this._internal,t=e.path;if(t!==void 0){var n=e.path.match(/\{[A-Za-z0-9_]*\}/g),o=[];n&&(o=n.map(function(d){return d.replace("{","").replace("}","")})),o.forEach(function(d){var p=e.params[d];t=t.replace("{"+d+"}",p!==void 0?p:"")});var r,s,a=Runtime.instance.getProjectSettings().navigationPathType;a===void 0||a==="hash"?s=t:r=t;var l=[];e.queryNames!==void 0&&e.queryNames.split(",").forEach(d=>{e.query[d]!==void 0&&l.push(d+"="+e.query[d])});var u=(r!==void 0?r:"")+(l.length>=1?"?"+l.join("&"):"")+(s!==void 0?"#"+s:"");this._internal.openInNewTab?window.open(u,"_blank"):(window.history.pushState({},"",u),dispatchEvent(new PopStateEvent("popstate",{})))}},setParam(e,t){this._internal.params[e]=t},setQuery(e,t){this._internal.query[e]=t},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e.startsWith("p-"))return this.registerInput(e,{set:this.setParam.bind(this,e.substring(2))});if(e.startsWith("q-"))return this.registerInput(e,{set:this.setQuery.bind(this,e.substring(2))})}}}},NavigateToPath={node:NavigateToPathNode,setup:function e(t,n){if(!t.editorConnection||!t.editorConnection.isRunningLocally())return;function o(r){function s(){var a=[];if(r.parameters.path!==void 0)var l=r.parameters.path.match(/\{[A-Za-z0-9_]*\}/g)||[],u=l.map(function(p){return p.replace("{","").replace("}","")}),a=u.filter(function(p,f,g){return g.indexOf(p)===f}).map(function(p){return{name:"p-"+p,displayName:p,group:"Parameter",type:"*",plug:"input"}});r.parameters.queryNames!==void 0&&r.parameters.queryNames.split(",").forEach(d=>{a.push({name:"q-"+d,displayName:d,group:"Query",plug:"input",type:"*"})}),t.editorConnection.sendDynamicPorts(r.id,a)}s(),r.on("parameterUpdated",function(a){s()})}n.on("editorImportComplete",()=>{n.on("nodeAdded.PageStackNavigateToPath",function(r){o(r)});for(const r of n.getNodesWithType("PageStackNavigateToPath"))o(r)})}},Navigate={name:"PageStackNavigate",displayNodeName:"Push Component To Stack",category:"Navigation",docs:"https://docs.noodl.net/nodes/component-stack/push-component",initialize:function(){this._internal.transitionParams={},this._internal.pageParams={},this._internal.backResults={}},inputs:{stack:{type:{name:"string",identifierOf:"PackStack"},displayName:"Stack",group:"General",default:"Main",set:function(e){this._internal.stack=e}},mode:{type:{name:"enum",enums:[{label:"Push",value:"push"},{label:"Replace",value:"replace"}]},displayName:"Mode",default:"push",group:"General",set:function(e){this._internal.navigationMode=e}},navigate:{displayName:"Navigate",group:"Actions",valueChangedToTrue:function(){this.scheduleNavigate()}}},outputs:{navigated:{type:"signal",displayName:"Navigated",group:"Events"}},methods:{scheduleNavigate:function(){var e=this,t=this._internal;t.hasScheduledNavigate||(t.hasScheduledNavigate=!0,this.scheduleAfterInputsHaveUpdated(function(){t.hasScheduledNavigate=!1,e.navigate()}))},navigate(){this._internal.navigationMode==="push"||this._internal.navigationMode===void 0?NavigationHandler.instance.navigate(this._internal.stack,{target:this._internal.target,transition:{type:this._internal.transition,...this._internal.transitionParams},params:this._internal.pageParams,backCallback:(e,t)=>{this._internal.backResults=t;for(const n in t)this.hasOutput("backResult-"+n)&&this.flagOutputDirty("backResult-"+n);e!==void 0&&this.sendSignalOnOutput(e)},hasNavigated:()=>{this.sendSignalOnOutput("navigated")}}):this._internal.navigationMode==="replace"&&NavigationHandler.instance.replace(this._internal.stack,{target:this._internal.target,params:this._internal.pageParams,hasNavigated:()=>{this.scheduleAfterInputsHaveUpdated(()=>{this.sendSignalOnOutput("navigated")})}})},setTransitionParam:function(e,t){this._internal.transitionParams[e]=t},setPageParam:function(e,t){this._internal.pageParams[e]=t},getBackResult:function(e,t){return this._internal.backResults[e]},setTargetPageId:function(e){this._internal.target=e},setTransition:function(e){this._internal.transition=e},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e==="target")return this.registerInput(e,{set:this.setTargetPageId.bind(this)});if(e==="transition")return this.registerInput(e,{set:this.setTransition.bind(this)});if(e.startsWith("tr-"))return this.registerInput(e,{set:this.setTransitionParam.bind(this,e.substring(3))});if(e.startsWith("pm-"))return this.registerInput(e,{set:this.setPageParam.bind(this,e.substring(3))})}},registerOutputIfNeeded:function(e){if(!this.hasOutput(e)){if(e.startsWith("backResult-"))return this.registerOutput(e,{getter:this.getBackResult.bind(this,e.substring(11))});if(e.startsWith("backAction-"))return this.registerOutput(e,{getter:function(){}})}}}};function setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var l=[];if(o.parameters.mode==="push"||o.parameters.mode===void 0){l.push({name:"transition",plug:"input",type:{name:"enum",enums:Object.keys(Transitions)},default:"Push",displayName:"Transition",group:"Transition"});var u=o.parameters.transition||"Push";Transitions[u]&&(l=l.concat(Transitions[u].ports(o.parameters)))}const p=t.getNodesWithType("Page Stack").find(f=>(f.parameters.name||"Main")===(o.parameters.stack||"Main"));if(p!==void 0){const f=p.parameters.pages;if(f!==void 0&&f.length>0){l.push({plug:"input",type:{name:"enum",enums:f.map(_=>({label:_.label,value:_.id}))},group:"General",displayName:"Target Page",name:"target",default:f[0].id});const g=o.parameters.target||f[0].id,b=p.parameters["pageComp-"+g];if(b!==void 0){const _=t.components[b];if(_!==void 0){for(const T in _.inputPorts)l.push({name:"pm-"+T,displayName:T,type:"*",plug:"input",group:"Parameters"});for(const T of _.getNodesWithType("PageStackNavigateBack"))T.parameters.backActions!==void 0&&T.parameters.backActions.split(",").forEach(A=>{l.find(v=>v.name==="backAction-"+A)||l.push({name:"backAction-"+A,displayName:A,type:"signal",plug:"output",group:"Back Actions"})}),T.parameters.results&&T.parameters.results.split(",").forEach(A=>{l.find(v=>v.name==="backResult-"+A)||l.push({name:"backResult-"+A,displayName:A,type:"*",plug:"output",group:"Back Results"})})}}}}e.editorConnection.sendDynamicPorts(o.id,l)}function s(){var l=t.getNodesWithType("Page Stack"),u=l.find(g=>g.parameters.name===o.parameters.stack);if(u!==void 0){var d=u.parameters.pages;if(!(d===void 0||d.length===0)){var p=u.parameters["pageComp-"+(o.parameters.target||d[0].id)];if(p!==void 0){var f=t.components[p];if(f!==void 0){f.on("inputPortAdded",r),f.on("inputPortRemoved",r);for(const g of f.getNodesWithType("PageStackNavigateBack"))g.on("parameterUpdated",r);f.on("nodeAdded",g=>{g.type==="PageStackNavigateBack"&&(g.on("parameterUpdated",r),r())}),f.on("nodeWasRemoved",g=>{g.type==="PageStackNavigateBack"&&r()})}}}}}r(),s(),o.on("parameterUpdated",function(l){l.name==="target"?(s(),r()):(l.name==="stack"||l.name==="mode"||l.name==="transition"||l.name.startsWith("tr-"))&&r()});function a(l){l.on("parameterUpdated",function(u){(u.name==="pages"||u.name==="name")&&r()})}t.on("nodeAdded.Page Stack",a),t.on("nodeWasRemoved.Page Stack",r);for(const l of t.getNodesWithType("Page Stack"))a(l)}t.on("editorImportComplete",()=>{t.on("nodeAdded.PageStackNavigate",function(o){n(o)});for(const o of t.getNodesWithType("PageStackNavigate"))n(o)})}const Navigate$1={node:Navigate,setup},ShowPopupNode={name:"NavigationShowPopup",displayNodeName:"Show Popup",category:"Navigation",docs:"https://docs.noodl.net/nodes/popups/show-popup",initialize:function(){this._internal.popupParams={},this._internal.closeResults={}},inputs:{target:{type:"component",displayName:"Target",group:"General",set:function(e){this._internal.target=e}},show:{type:"signal",displayName:"Show",group:"Actions",valueChangedToTrue:function(){this.scheduleShow()}}},outputs:{Closed:{type:"signal"}},methods:{setPopupParam:function(e,t){this._internal.popupParams[e]=t},getCloseResult:function(e){return this._internal.closeResults[e]},scheduleShow:function(){var e=this,t=this._internal;t.hasScheduledShow||(t.hasScheduledShow=!0,this.scheduleAfterInputsHaveUpdated(function(){t.hasScheduledShow=!1,e.show()}))},show:function(){this._internal.target!=null&&this.context.showPopup(this._internal.target,this._internal.popupParams,{senderNode:this.nodeScope.componentOwner,onClosePopup:(e,t)=>{this._internal.closeResults=t;for(const n in t)this.hasOutput("closeResult-"+n)&&this.flagOutputDirty("closeResult-"+n);e?this.sendSignalOnOutput(e):this.sendSignalOnOutput("Closed")}})},registerInputIfNeeded:function(e){if(!this.hasInput(e)&&e.startsWith("popupParam-"))return this.registerInput(e,{set:this.setPopupParam.bind(this,e.substring(11))})},registerOutputIfNeeded:function(e){if(!this.hasOutput(e)){if(e.startsWith("closeResult-"))return this.registerOutput(e,{getter:this.getCloseResult.bind(this,e.substring(12))});if(e.startsWith("closeAction-"))return this.registerOutput(e,{getter:function(){}})}}}},ShowPopup={node:ShowPopupNode,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var a=[],l=o.parameters.target;if(l!==void 0){var u=t.components[l];if(u){for(var d in u.inputPorts){var p=u.inputPorts[d];a.push({name:"popupParam-"+d,displayName:d,type:p.type||"*",plug:"input",group:"Params"})}for(const f of u.getNodesWithType("NavigationClosePopup"))f.parameters.closeActions!==void 0&&f.parameters.closeActions.split(",").forEach(g=>{a.find(b=>b.name===g)||a.push({name:"closeAction-"+g,displayName:g,type:"signal",plug:"output",group:"Close Actions"})}),f.parameters.results!==void 0&&f.parameters.results.split(",").forEach(g=>{a.push({name:"closeResult-"+g,displayName:g,type:"*",plug:"output",group:"Close Results"})})}}e.editorConnection.sendDynamicPorts(o.id,a)}function s(a){if(a!==void 0){var l=t.components[a];if(l!==void 0){l.on("inputPortAdded",r),l.on("inputPortRemoved",r);for(const u of l.getNodesWithType("NavigationClosePopup"))u.on("parameterUpdated",r);l.on("nodeAdded",u=>{u.type==="NavigationClosePopup"&&(u.on("parameterUpdated",r),r())}),l.on("nodeWasRemoved",u=>{u.type==="NavigationClosePopup"&&r()})}}}r(),s(o.parameters.target),o.on("parameterUpdated",function(a){a.name==="target"&&(r(),s(o.parameters.target))})}t.on("editorImportComplete",()=>{t.on("nodeAdded.NavigationShowPopup",function(o){n(o)});for(const o of t.getNodesWithType("NavigationShowPopup"))n(o)})}},ClosePopupNode={name:"NavigationClosePopup",displayNodeName:"Close Popup",category:"Navigation",docs:"https://docs.noodl.net/nodes/popups/close-popup",initialize:function(){this._internal.resultValues={}},inputs:{results:{type:{name:"stringlist",allowEditOnly:!0},group:"Results",set:function(e){this._internal.results=e}},closeActions:{type:{name:"stringlist",allowEditOnly:!0},group:"Close Actions",set:function(e){this._internal.closeActions=e}},close:{type:"Signal",displayName:"Close",group:"Actions",valueChangedToTrue:function(){this.scheduleClose()}}},methods:{setResultValue:function(e,t){this._internal.resultValues[e]=t},_setCloseCallback:function(e){this._internal.closeCallback=e},scheduleClose:function(){const e=this,t=this._internal;t.hasScheduledClose||(t.hasScheduledClose=!0,this.scheduleAfterInputsHaveUpdated(function(){t.hasScheduledClose=!1,e.close()}))},close:function(){this._internal.closeCallback&&this._internal.closeCallback(this._internal.closeAction,this._internal.resultValues)},closeActionTriggered:function(e){this._internal.closeAction=e,this.scheduleClose()},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e.startsWith("result-"))return this.registerInput(e,{set:this.setResultValue.bind(this,e.substring(7))});if(e.startsWith("closeAction-"))return this.registerInput(e,{set:createSetter({valueChangedToTrue:this.closeActionTriggered.bind(this,e)})})}}}},ClosePopup={node:ClosePopupNode,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[],a=o.parameters.results;if(a){a=a?a.split(","):void 0;for(var l in a){var u=a[l];s.push({type:{name:"*"},plug:"input",group:"Results",name:"result-"+u,displayName:u})}}var d=o.parameters.closeActions;if(d){d=d?d.split(","):void 0;for(const p in d){const f=d[p];s.push({type:"signal",plug:"input",group:"Close Actions",name:"closeAction-"+f,displayName:f})}}e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){(s.name==="results"||s.name==="closeActions")&&r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.NavigationClosePopup",function(o){n(o)});for(const o of t.getNodesWithType("NavigationClosePopup"))n(o)})}},PageInputsNode={name:"PageInputs",displayNodeName:"Page Inputs",category:"Navigation",docs:"https://docs.noodl.net/nodes/navigation/page-inputs",color:"component",initialize:function(){var e=this._internal;e.params={}},inputs:{pathParams:{type:{name:"stringlist",allowEditOnly:!0},group:"Path Parameters"},queryParams:{type:{name:"stringlist",allowEditOnly:!0},group:"Query Parameters"}},outputs:{},methods:{_setPageParams:function(e){for(var t in e)this._internal.params[t]=e[t],this.hasOutput("pm-"+t)&&this.flagOutputDirty("pm-"+t)},getPageParam:function(e){return this._internal.params[e]},registerOutputIfNeeded:function(e){if(!this.hasOutput(e)&&e.startsWith("pm-"))return this.registerOutput(e,{getter:this.getPageParam.bind(this,e.substring(3))})}}},PageInputs={node:PageInputsNode},RouterNavigate={name:"RouterNavigate",displayNodeName:"Navigate",category:"Navigation",docs:"https://docs.noodl.net/nodes/navigation/navigate",initialize:function(){this._internal.pageParams={},this._internal.openInNewTab=!1},inputs:{navigate:{displayName:"Navigate",group:"Actions",valueChangedToTrue:function(){this.scheduleNavigate()}},openInNewTab:{index:10,displayName:"Open in new tab",group:"General",default:!1,type:"boolean",set(e){this._internal.openInNewTab=!!e}}},outputs:{navigated:{type:"signal",displayName:"Navigated",group:"Events"}},methods:{scheduleNavigate:function(){var e=this._internal;e.hasScheduledNavigate||(e.hasScheduledNavigate=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.hasScheduledNavigate=!1,this.navigate()}))},navigate(){RouterHandler.instance.navigate(this._internal.router,{target:this._internal.target,params:this._internal.pageParams,openInNewTab:this._internal.openInNewTab,hasNavigated:()=>{this.scheduleAfterInputsHaveUpdated(()=>{this.sendSignalOnOutput("navigated")})}})},setPageParam:function(e,t){this._internal.pageParams[e]=t},setTargetPage:function(e){this._internal.target=e},setRouter:function(e){this._internal.router=e},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e==="target")return this.registerInput(e,{set:this.setTargetPage.bind(this)});if(e==="router")return this.registerInput(e,{set:this.setRouter.bind(this)});if(e.startsWith("pm-"))return this.registerInput(e,{set:this.setPageParam.bind(this,e.substring(3))})}}}},RouterNavigate$1={node:RouterNavigate},LoginNodeDefinition={name:"net.noodl.user.LogIn",docs:"https://docs.noodl.net/nodes/data/user/log-in",displayNodeName:"Log In",category:"Cloud Services",color:"data",outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},inputs:{login:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleLogIn()}},username:{displayName:"Username",type:"string",group:"General",set(e){this._internal.username=e}},password:{displayName:"Password",type:"string",group:"General",set(e){this._internal.password=e}}},methods:{setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning")},scheduleLogIn(){this.logInScheduled!==!0&&(this.logInScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.logInScheduled=!1,UserService.instance.logIn({username:this._internal.username,password:this._internal.password,success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}},Login={node:LoginNodeDefinition,setup(e,t){}},LogOutNodeDefinition={name:"net.noodl.user.LogOut",docs:"https://docs.noodl.net/nodes/data/user/log-out",displayNodeName:"Log Out",category:"Cloud Services",color:"data",outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},inputs:{login:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleLogOut()}}},methods:{setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning")},scheduleLogOut(){this.logOutScheduled!==!0&&(this.logOutScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.logOutScheduled=!1,UserService.instance.logOut({success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}},Logout={node:LogOutNodeDefinition,setup(e,t){}},SignUpNodeDefinition={name:"net.noodl.user.SignUp",docs:"https://docs.noodl.net/nodes/data/user/sign-up",displayNodeName:"Sign Up",category:"Cloud Services",color:"data",initialize(){const e=this._internal;e.userProperties={}},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},inputs:{signup:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleSignUp()}},username:{displayName:"Username",type:"string",group:"General",set(e){this._internal.username=e}},password:{displayName:"Password",type:"string",group:"General",set(e){this._internal.password=e}},email:{displayName:"Email",type:"string",group:"General",set(e){this._internal.email=e}}},methods:{setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning")},scheduleSignUp(){const e=this._internal;this.signUpScheduled!==!0&&(this.signUpScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.signUpScheduled=!1,UserService.instance.signUp({username:this._internal.username,password:this._internal.password,email:this._internal.email,properties:e.userProperties,success:()=>{this.sendSignalOnOutput("success")},error:t=>{this.setError(t)}})}))},setUserProperty(e,t){this._internal.userProperties[e]=t},registerInputIfNeeded(e){if(!this.hasInput(e)&&e.startsWith("prop-"))return this.registerInput(e,{set:this.setUserProperty.bind(this,e.substring(5))})}}};function updatePorts$5(e,t,n,o){var r=[];if(o){var s=o.find(d=>d.name==="_User");if(s&&s.schema&&s.schema.properties){var a=s.schema.properties;const d=["authData","password","username","createdAt","updatedAt","emailVerified","email"];for(var l in a)if(d.indexOf(l)===-1){var u=a[l];if(!r.find(p=>p.name===l)&&u.type!=="Relation"){const p={String:"string",Boolean:"boolean",Number:"number",Date:"date"};r.push({type:{name:p[u.type]?p[u.type]:"*"},plug:"input",group:"Properties",name:"prop-"+l,displayName:l})}}}}n.sendDynamicPorts(e,r)}const Signup={node:SignUpNodeDefinition,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$5(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections")),o.on("parameterUpdated",function(r){updatePorts$5(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections"))}),t.on("metadataChanged.systemCollections",function(r){updatePorts$5(o.id,o.parameters,e.editorConnection,r)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.net.noodl.user.SignUp",function(o){n(o)});for(const o of t.getNodesWithType("net.noodl.user.SignUp"))n(o)})}};var VerifyEmailNodeDefinition={name:"net.noodl.user.VerifyEmail",docs:"https://docs.noodl.net/nodes/data/user/verify-email",displayNodeName:"Verify Email",category:"Cloud Services",color:"data",deprecated:!0,initialize:function(){this._internal},getInspectInfo(){},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter:function(){return this._internal.error}}},inputs:{verify:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleVerifyEmail()}},token:{type:"string",displayName:"Token",group:"General",set:function(e){this._internal.token=e}},username:{type:"string",displayName:"Username",group:"General",set:function(e){this._internal.username=e}}},methods:{setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-verify-email-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-verify-email-warning")},scheduleVerifyEmail:function(){this._internal,this.logOutScheduled!==!0&&(this.logOutScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.logOutScheduled=!1,UserService.instance.verifyEmail({token:this._internal.token,username:this._internal.username,success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}};const VerifyEmail={node:VerifyEmailNodeDefinition,setup:function(e,t){}};var SendEmailVerificationNodeDefinition={name:"net.noodl.user.SendEmailVerification",docs:"https://docs.noodl.net/nodes/data/user/send-email-verification",displayNodeName:"Send Email Verification",category:"Cloud Services",color:"data",deprecated:!0,initialize:function(){this._internal},getInspectInfo(){},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter:function(){return this._internal.error}}},inputs:{send:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleSendEmailVerification()}},email:{type:"string",displayName:"Email",group:"General",set:function(e){this._internal.email=e}}},methods:{setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-send-email-verification-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-send-email-verification-warning")},scheduleSendEmailVerification:function(){this._internal,this.sendScheduled!==!0&&(this.sendScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.sendScheduled=!1,UserService.instance.sendEmailVerification({email:this._internal.email,success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}};const SendEmailVerification={node:SendEmailVerificationNodeDefinition,setup:function(e,t){}};var ResetPasswordNodeDefinition={name:"net.noodl.user.ResetPassword",docs:"https://docs.noodl.net/nodes/data/user/reset-password",displayNodeName:"Reset Password",category:"Cloud Services",color:"data",deprecated:!0,initialize:function(){this._internal},getInspectInfo(){},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter:function(){return this._internal.error}}},inputs:{reset:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleResetPassword()}},token:{type:"string",displayName:"Token",group:"General",set:function(e){this._internal.token=e}},username:{type:"string",displayName:"Username",group:"General",set:function(e){this._internal.username=e}},newPassword:{type:"string",displayName:"New Password",group:"General",set:function(e){this._internal.newPassword=e}}},methods:{setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-verify-email-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-verify-email-warning")},scheduleResetPassword:function(){this._internal,this.resetPasswordScheduled!==!0&&(this.resetPasswordScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.resetPasswordScheduled=!1,UserService.instance.resetPassword({token:this._internal.token,username:this._internal.username,newPassword:this._internal.newPassword,success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}};const ResetPassword={node:ResetPasswordNodeDefinition,setup:function(e,t){}};var RequestPasswordResetNodeDefinition={name:"net.noodl.user.RequestPasswordReset",docs:"https://docs.noodl.net/nodes/data/user/request-password-reset",displayNodeName:"Request Password Reset",category:"Cloud Services",color:"data",deprecated:!0,initialize:function(){this._internal},getInspectInfo(){},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter:function(){return this._internal.error}}},inputs:{send:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleRequestPasswordReset()}},email:{type:"string",displayName:"Email",group:"General",set:function(e){this._internal.email=e}}},methods:{setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-send-email-verification-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-send-email-verification-warning")},scheduleRequestPasswordReset:function(){this._internal,this.sendScheduled!==!0&&(this.sendScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.sendScheduled=!1,UserService.instance.requestPasswordReset({email:this._internal.email,success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}};const RequestPasswordReset={node:RequestPasswordResetNodeDefinition,setup:function(e,t){}};function _makeRequest(e,t){var n=new XMLHttpRequest;n.onreadystatechange=function(){if(n.readyState===4){var r;try{r=JSON.parse(n.response)}catch{}n.status===200||n.status===201?t.success(r):t.error(r)}},n.open(t.method||"GET",t.endpoint+e,!0),n.setRequestHeader("X-Parse-Application-Id",t.appId),n.setRequestHeader("Content-Type","application/json");var o=localStorage["Parse/"+t.appId+"/currentUser"];if(o!==void 0)try{const r=JSON.parse(o);n.setRequestHeader("X-Parse-Session-Token",r.sessionToken)}catch{}n.send(JSON.stringify(t.content))}var CloudFunctionNode={name:"Cloud Function",category:"Cloud Services",color:"data",usePortAsLabel:"functionName",docs:"https://docs.noodl.net/nodes/data/cloud-data/cloud-function",deprecated:!0,initialize:function(){this._internal.paramsValues={}},getInspectInfo(){const e=this._internal.lastCallResult;return e?[{type:"value",value:e}]:"[Not executed yet]"},inputs:{functionName:{type:"string",displayName:"Function Name",group:"General",set:function(e){this._internal.functionName=e}},params:{group:"Parameters",type:{name:"stringlist",allowEditOnly:!0},set:function(e){this._internal.params=e}},call:{type:"signal",displayName:"Call",group:"Actions",valueChangedToTrue:function(){this.scheduleCall()}}},outputs:{success:{type:"signal",displayName:"Success",group:"Signals"},failure:{type:"signal",displayName:"Failure",group:"Signals"},result:{type:"*",displayName:"Result",group:"Output",getter:function(){return this._internal.result}}},methods:{registerOutputIfNeeded:function(e){this.hasOutput(e)},setParamsValue:function(e,t){this._internal.paramsValues[e]=t},registerInputIfNeeded:function(e){this.hasInput(e)||e.startsWith("pm-")&&this.registerInput(e,{set:this.setParamsValue.bind(this,e.substring(3))})},scheduleCall:function(){var e=this._internal;e.hasScheduledCall||(e.hasScheduledCall=!0,this.scheduleAfterInputsHaveUpdated(this.doCall.bind(this)))},doCall:function(){this._internal.hasScheduledCall=!1;const e=Runtime.instance.getMetaData("cloudservices");if(e===void 0){console.log("No cloud services defined in this project."),this._internal.lastCallResult={status:"failure",res:"No active cloud services in this project"},this.sendSignalOnOutput("failure");return}var t=e.appId,n=e.endpoint;_makeRequest("/functions/"+encodeURIComponent(this._internal.functionName),{appId:t,endpoint:n,content:this._internal.paramsValues,method:"POST",success:r=>{var r=r.result;if(r===void 0){this.sendSignalOnOutput("failure");return}this._internal.result=CloudStore._deserializeJSON(r),this.flagOutputDirty("result"),this._internal.lastCallResult={status:"success",result:this._internal.result},this.sendSignalOnOutput("success")},error:o=>{this._internal.lastCallResult={status:"failure",res:o},this.sendSignalOnOutput("failure")}})}}};const CloudFunction={node:CloudFunctionNode,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[],a=o.parameters.params;if(a!==void 0){a=a.split(",");for(var l in a){var u=a[l];s.push({type:"*",plug:"input",group:"Parameters",name:"pm-"+u,displayName:u})}}e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){s.name==="params"&&r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.Cloud Function",function(o){n(o)});for(const o of t.getNodesWithType("Cloud Function"))n(o)})}},ComponentState={name:"Component State",displayNodeName:"Component Object",category:"Component Utilities",color:"component",docs:"https://docs.noodl.net/nodes/component-utilities/component-object",deprecated:!0,initialize:function(){this._internal.inputValues={},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(){const e=this._internal.model.data;return Object.keys(e).map(t=>({type:"text",value:t+": "+e[t]}))},inputs:{properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set(e){}},store:{displayName:"Set",group:"Actions",valueChangedToTrue(){this.scheduleStore()}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleFetch()}}},outputs:{changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"},stored:{type:"signal",displayName:"Stored",group:"Events"}},methods:{scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledStore=!1;for(var t in e.inputValues)e.model.set(t,e.inputValues[t],{resolve:!0});this.sendSignalOnOutput("stored")})}},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))return;const t=e.split("-"),n=t[t.length-1];e.startsWith("value-")&&this.registerInput(e,{set(o){this._internal.inputValues[n]=o,this.isInputConnected("store")===!1&&this.scheduleStore()}})}}};function updatePorts$4(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 ComponentState$1={node:ComponentState,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Component State",n=>{updatePorts$4(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",o=>{(o.name==="properties"||o.name.startsWith("type-"))&&updatePorts$4(n.id,n.parameters,e.editorConnection)})})}},graphEventEmitter=new eventsExports.EventEmitter;graphEventEmitter.setMaxListeners(1e6);const ParentComponentState={name:"Parent Component State",displayNodeName:"Parent Component Object",category:"Component Utilities",color:"component",docs:"https://docs.noodl.net/nodes/component-utilities/parent-component-object",deprecated:!0,initialize(){this._internal.inputValues={},this._internal.onModelChangedCallback=e=>{this.isInputConnected("fetch")!==!0&&(this.hasOutput(e.name)&&this.flagOutputDirty(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.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){}},store:{displayName:"Set",group:"Actions",valueChangedToTrue(){this.scheduleStore()}},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"},stored:{type:"signal",displayName:"Stored",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("Component State").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(n)&&this.flagOutputDirty(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});this.sendSignalOnOutput("stored")}})}},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),graphEventEmitter.off("componentStateNodesChanged",this.onComponentStateNodesChanged),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},registerOutputIfNeeded(e){this.hasOutput(e)||this.registerOutput(e,{get(){if(this._internal.model)return this._internal.model.get(e,{resolve:!0})}})},registerInputIfNeeded:function(e){this.hasInput(e)||this.registerInput(e,{set(t){this._internal.inputValues[e]=t,this.isInputConnected("store")===!1&&this.scheduleStore()}})}}};function updatePorts$3(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: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 ParentComponentState$1={node:ParentComponentState,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||(t.on("nodeAdded.Parent Component State",n=>{updatePorts$3(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",o=>{updatePorts$3(n.id,n.parameters,e.editorConnection)})}),t.on("nodeAdded.Component State",n=>{setTimeout(()=>{graphEventEmitter.emit("componentStateNodesChanged")},0)}),t.on("nodeRemoved.Component State",n=>{setTimeout(()=>{graphEventEmitter.emit("componentStateNodesChanged")})}))}};var ModelNodeDefinition$1={name:"Model",docs:"https://docs.noodl.net/nodes/data/object",displayNodeName:"Object",shortDesc:"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.",category:"Data",usePortAsLabel:"modelId",color:"data",deprecated:!0,initialize:function(){var e=this._internal;e.inputValues={};var t=this;this._internal.onModelChangedCallback=function(n){t.isInputConnected("fetch")!==!0&&(t.hasOutput(n.name)&&t.flagOutputDirty(n.name),t.hasOutput("changed-"+n.name)&&t.sendSignalOnOutput("changed-"+n.name),t.sendSignalOnOutput("changed"))}},getInspectInfo(){const e=this._internal.model;if(!e)return"[No Object]";const t=[{type:"text",value:"Id: "+e.getId()}],n=this._internal.model.data;return t.concat(Object.keys(n).map(o=>({type:"text",value:o+": "+n[o]})))},outputs:{id:{type:"string",displayName:"Id",group:"General",getter:function(){return this._internal.model?this._internal.model.getId():this._internal.modelId}},stored:{type:"signal",displayName:"Stored",group:"Events"},changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"},created:{type:"signal",displayName:"Created",group:"Events"}},inputs:{modelId:{type:{name:"string",identifierOf:"ModelName",identifierDisplayName:"Object Ids"},displayName:"Id",group:"General",set:function(e){e instanceof Model&&(e=e.getId()),this._internal.modelId=e,this.isInputConnected("fetch")===!1?this.setModelID(e):this.flagOutputDirty("id")}},properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set:function(e){}},new:{displayName:"New",group:"Actions",valueChangedToTrue:function(){this.scheduleNew()}},store:{displayName:"Set",group:"Actions",valueChangedToTrue:function(){this.scheduleStore()}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.scheduleSetModel()}},clear:{displayName:"Clear",group:"Actions",valueChangedToTrue:function(){var e=this._internal;if(e.model)for(var t in e.inputValues)e.model.set(t,void 0,{resolve:!0})}}},prototypeExtensions:{scheduleStore:function(){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});this.sendSignalOnOutput("stored")}})}},scheduleNew:function(){if(!this.hasScheduledNew){this.hasScheduledNew=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledNew=!1;const t=Model.get();for(var n in e.inputValues)t.set(n,e.inputValues[n],{resolve:!0});this.setModel(t),this.sendSignalOnOutput("created"),this.sendSignalOnOutput("stored")})}},scheduleSetModel:function(){this.hasScheduledSetModel||(this.hasScheduledSetModel=!0,this._internal,this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledSetModel=!1,this.setModelID(this._internal.modelId)}))},setModelID:function(e){var t=Model.get(e);this.setModel(t),this.sendSignalOnOutput("fetched")},setModel:function(e){this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback),this._internal.model=e,this.flagOutputDirty("id"),e.on("change",this._internal.onModelChangedCallback);for(var t in e.data)this.hasOutput(t)&&this.flagOutputDirty(t)},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},registerOutputIfNeeded:function(e){this.hasOutput(e)||this.registerOutput(e,{getter:userOutputGetter$2.bind(this,e)})},registerInputIfNeeded:function(e){this.hasInput(e)||this.registerInput(e,{set:userInputSetter$2.bind(this,e)})}}};function userOutputGetter$2(e){return this._internal.model?this._internal.model.get(e,{resolve:!0}):void 0}function userInputSetter$2(e,t){if(this._internal.inputValues[e]=t,this.isInputConnected("store")===!1&&this.isInputConnected("new")===!1){const n=this._internal.model;(n?n.get(e)!==t:!0)&&this.scheduleStore()}}function updatePorts$2(e,t,n){var o=[],r=t.properties;if(r){r=r?r.split(","):void 0;for(var s in r){var a=r[s];o.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name: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 ModelNode={node:ModelNodeDefinition$1,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Model",function(n){updatePorts$2(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",function(o){updatePorts$2(n.id,n.parameters,e.editorConnection)})})}},VariableNodeDefinition={name:"Variable",docs:"https://docs.noodl.net/nodes/data/variable",category:"Data",usePortAsLabel:"name",color:"data",deprecated:!0,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}},stored:{type:"signal",displayName:"Stored",group:"Events"},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"))}},store:{displayName:"Set",group:"Actions",valueChangedToTrue:function(){this.scheduleStore()}},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.isInputConnected("store")===!1&&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),this.sendSignalOnOutput("stored")})}},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)}}},VariableNode={node:VariableNodeDefinition},GyroscopeNode={name:"Gyroscope",docs:"https://docs.noodl.net/nodes/sensors/device-orientation",shortDesc:"The orientation of a device. Works on phones, tablets and other devices with the required sensors.",displayNodeName:"Device Orientation",category:"Sensors",deprecated:!0,initialize:function(){this._internal.alpha=0,this._internal.beta=0,this._internal.gamma=0;var e=onDeviceOrientation.bind(this);window.addEventListener("deviceorientation",e),this.context.eventEmitter.once("applicationDataReloaded",function(){window.removeEventListener("deviceorientation",e)})},outputs:{rotationX:{type:"number",displayName:"Rotation X",getter:function(){return-this._internal.beta}},rotationY:{type:"number",displayName:"Rotation Y",getter:function(){return this._internal.gamma}},rotationZ:{type:"number",displayName:"Rotation Z",getter:function(){return-this._internal.alpha}}}};function onDeviceOrientation(e){e.alpha!==this._internal.alpha&&(this._internal.alpha=e.alpha,this.flagOutputDirty("rotationZ")),e.beta!==this._internal.beta&&(this._internal.beta=e.beta,this.flagOutputDirty("rotationX")),e.gamma!==this._internal.gamma&&(this._internal.gamma=e.gamma,this.flagOutputDirty("rotationY"))}const Gyroscope={node:GyroscopeNode},GlobalsNode={name:"Globals",shortDesc:"A node used to communicate values across the project.",category:"Utilities",color:"component",deprecated:!0,initialize:function(){this._internal.listeners=[]},panels:[{name:"PortEditor",context:["select","connectTo","connectFrom"],title:"Globals",plug:"input/output",type:{name:"*"}}],prototypeExtensions:{_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this);for(var e=this.context.globalsEventEmitter,t=0;t<this._internal.listeners.length;t++){var n=this._internal.listeners[t];e.removeListener(n.name,n.listener)}this._internal.listeners=[]},_newOutputValueReceived:{value:function(e){this._cachedInputValues[e]=this.context.globalValues[e],this.flagOutputDirty(e)}},registerInputIfNeeded:{value:function(e){var t=this;this.hasInput(e)||this.registerInput(e,{set:t.context.setGlobalValue.bind(t.context,e)})}},registerOutputIfNeeded:{value:function(e){if(!this.hasOutput(e)){var t=this._newOutputValueReceived.bind(this,e),n=this.context.globalsEventEmitter;this._internal.listeners.push({name:e,listener:t}),n.on(e,t),this.registerOutput(e,{getter:function(){return this.context.globalValues[e]}})}}}}},Globals={node:GlobalsNode},SignalToIndexNode={name:"Signal To Index",docs:"https://docs.noodl.net/nodes/logic/signal-to-index",shortDesc:"Maps signal inputs to their index value.",category:"Logic",deprecated:!0,initialize:function(){this._internal.currentIndex=0},getInspectInfo(){return"Index: "+this._internal.currentIndex},numberedInputs:{input:{type:"boolean",displayPrefix:"Signal",createSetter(e){return createSetter({valueChangedToTrue:this.onValueChangedToTrue.bind(this,e)})},selectors:{startIndex:{displayName:"Start Index",set(e){this._internal.currentIndex=e,this.flagOutputDirty("index")}}}}},outputs:{index:{displayName:"Index",type:"number",getter:function(){return this._internal.currentIndex}},signalTriggered:{displayName:"Signal Triggered",type:"signal"}},prototypeExtensions:{onValueChangedToTrue:function(e){this.sendSignalOnOutput("signalTriggered"),this._internal.currentIndex!==e&&(this._internal.currentIndex=e,this.flagOutputDirty("index"))}}},SignalToIndex={node:SignalToIndexNode},NumberBlend={name:"Number Blend",docs:"https://docs.noodl.net/nodes/interpolation/number-blend",shortDesc:"Computes a result output based on blending (linearly interpolating) between the inputs.",category:"Interpolation",deprecated:!0,initialize:function(){var e=this._internal;e.inputs=[],e.blendValue=0,e.result=0,e.clamp=!1},getInspectInfo(){return this._internal.result},prototypeExtensions:{updateResult:function(){var e=this._internal.inputs;if(e.length===0)return 0;var t=Math.floor(this._internal.blendValue),n=this._internal.blendValue-t;t>=e.length-1?this._internal.clamp?(t=e.length-1,n=0):(n+=t-(e.length-1),t=e.length-1):t<=0&&(this._internal.clamp?(t=0,n=0):(n+=t,t=0)),n===0||e.length===1?this._internal.result=e[t]:t===e.length-1&&n>0?this._internal.result=EaseCurves.linear(e[t-1],e[t],n+1):this._internal.result=EaseCurves.linear(e[t],e[t+1],n),this.flagOutputDirty("result")}},numberedInputs:{input:{type:"number",displayPrefix:"Number",createSetter(e){return function(t){const n=this._internal.inputs;n[e]!==t&&(n[e]=t||0,this.updateResult())}}}},inputs:{blendValue:{type:"number",displayName:"Blend Value",default:0,set:function(e){this._internal.blendValue=e,this.updateResult()}},clamp:{type:"boolean",displayName:"Clamp",default:!1,set:function(e){this._internal.clamp=!!e,this.updateResult()}}},outputs:{result:{type:"number",displayName:"Result",getter:function(){return this._internal.result}}}},NumberBlend$1={node:NumberBlend},StringSelectorNode={name:"String Selector",displayNodeName:"Index To String",shortDesc:"Choose between multiple strings.",category:"Utilities",deprecated:!0,initialize:function(){this._internal.inputs=[],this._internal.currentSelectedIndex=0,this._internal.indexChanged=!1},getInspectInfo(){return this._internal.inputs[this._internal.currentSelectedIndex]},numberedInputs:{input:{type:"string",displayPrefix:"String for ",group:"Inputs",createSetter:function(e){return function(t){t=t?t.toString():"",this._internal.inputs[e]=t,this._internal.currentSelectedIndex===e&&this.flagOutputDirty("currentValue")}}}},inputs:{index:{type:{name:"number"},displayName:"Index",default:0,set:function(e){e=e|0,this._internal.currentSelectedIndex=e,this.flagOutputDirty("currentValue"),this.sendSignalOnOutput("indexChanged")}}},outputs:{currentValue:{type:"string",displayName:"Current Value",group:"Value",getter:function(){return this._internal.inputs[this._internal.currentSelectedIndex]}},indexChanged:{type:"signal",displayName:"Index Changed",group:"Signals"}}},StringSelector={node:StringSelectorNode};function SubAnimation(e){this.name=e.name,this.startValue=0,this.endValue=0,this.currentValue=void 0,this.startMode="implicit",this.ease=e.ease,this.node=e.node,this.hasSampledStartValue=!1;var t=this;this.animation=e.node.context.timerScheduler.createTimer({startValue:0,endValue:0,onRunning:function(n){var o=t.ease(this.startValue,this.endValue,n);t.setCurrentValue(o)}}),this.animation.startValue=0,this.animation.endValue=0}Object.defineProperties(SubAnimation.prototype,{setCurrentValue:{value:function(e){this.currentValue=e,this.node.flagOutputDirty(this.name)}},play:{value:function(e,t){if(e===void 0&&(console.log("Animation warning, start value is undefined"),e=0),t===void 0){console.error("Animation error, start:",e,"end:",t);return}var n=this.animation;n.startValue=e,this.setCurrentValue(e),n.endValue=t,n.duration=this.node._internal.duration,n.start()}},playToEnd:{value:function(){this.hasConnections()!==!1&&(this.updateStartValue(),this.play(this.getTargetsCurrentValue(),this.endValue))}},playToStart:{value:function(){this.hasConnections()!==!1&&(this.updateStartValue(),this.play(this.getTargetsCurrentValue(),this.startValue))}},replayToEnd:{value:function(){this.hasConnections()!==!1&&(this.updateStartValue(),this.play(this.startValue,this.endValue))}},replayToStart:{value:function(){this.hasConnections()!==!1&&this.play(this.endValue,this.startValue)}},hasConnections:{value:function(){return this.node.getOutput(this.name).hasConnections()}},getTargetsCurrentValue:{value:function(){var e=this.node.getOutput(this.name).connections;const t=e[0].node.getInputValue(e[0].inputPortName);return t instanceof Object&&t.hasOwnProperty("value")?t.value:t}},updateStartValue:{value:function(){this.startMode!=="implicit"||this.hasSampledStartValue||(this.hasSampledStartValue=!0,this.startValue=this.getTargetsCurrentValue())}},stop:{value:function(){this.animation.stop(),this.setCurrentValue(void 0)}},jumpToStart:{value:function(){this.animation.stop(),this.setCurrentValue(this.startValue)}},jumpToEnd:{value:function(){this.animation.stop(),this.setCurrentValue(this.endValue)}}});var easeEnum=[{value:"easeOut",label:"Ease Out"},{value:"easeIn",label:"Ease In"},{value:"linear",label:"Linear"},{value:"easeInOut",label:"Ease In Out"},{value:"cubicBezier",label:"Cubic Bezier"}],defaultDuration$1=300,AnimationNode={name:"Animation",docs:"https://docs.noodl.net/nodes/animation/animation",shortDesc:"Node that can animate any number of values, with different types of easing curves.",category:"Animation",deprecated:!0,initialize:function(){var e=this._internal;e.duration=defaultDuration$1,e.ease=EaseCurves.easeOut,e._isPlayingToEnd=!1,e.animations=[],e.cubicBezierPoints=[0,0,0,0],e.cubicBezierFunction=void 0;var t=this;e.animation=this.context.timerScheduler.createTimer({onFinish:function(){e._isPlayingToEnd===!1?t.sendSignalOnOutput("hasReachedStart"):t.sendSignalOnOutput("hasReachedEnd")}})},inputs:{duration:{index:0,type:"number",displayName:"Duration (ms)",group:"Animation Properties",default:defaultDuration$1,set:function(e){this._internal.duration=e}},easingCurve:{index:10,type:{name:"enum",enums:easeEnum},group:"Animation Properties",displayName:"Easing Curve",default:"easeOut",set:function(e){var t;e==="cubicBezier"?(this.updateCubicBezierFunction(),t=this._internal.cubicBezierFunction):t=EaseCurves[e],this._internal.ease=t}},playToEnd:{index:20,group:"Play",displayName:"To End",editorName:"Play To End",valueChangedToTrue:function(){this._internal._isPlayingToEnd=!0;var e=this._internal.animation,t=this._internal.animations,n=this;this.scheduleAfterInputsHaveUpdated(function(){e.duration=n._internal.duration,e.start();for(var o=0;o<t.length;o++)t[o].ease=n._internal.ease,t[o].playToEnd()})}},playToStart:{index:21,group:"Play",displayName:"To Start",editorName:"Play To Start",valueChangedToTrue:function(){this._internal._isPlayingToEnd=!1;var e=this._internal.animation,t=this._internal.animations,n=this;this.scheduleAfterInputsHaveUpdated(function(){e.duration=n._internal.duration,e.start();for(var o=0;o<t.length;o++)t[o].ease=n._internal.ease,t[o].playToStart()})}},replayToEnd:{index:22,group:"Play",displayName:"From Start To End",editorName:"Play From Start To End",valueChangedToTrue:function(){var e=this._internal.animation,t=this._internal.animations,n=this;this._internal._isPlayingToEnd=!0,this.scheduleAfterInputsHaveUpdated(function(){e.duration=n._internal.duration,e.start();for(var o=0;o<t.length;o++)t[o].ease=n._internal.ease,t[o].replayToEnd()})}},replayToStart:{index:23,group:"Play",displayName:"From End To Start",editorName:"Play From End To Start",valueChangedToTrue:function(){this._internal._isPlayingToEnd=!1;var e=this._internal.animation,t=this._internal.animations,n=this;this.scheduleAfterInputsHaveUpdated(function(){e.duration=n._internal.duration,e.start();for(var o=0;o<t.length;o++)t[o].ease=n._internal.ease,t[o].replayToStart()})}},stop:{index:60,group:"Instant Actions",displayName:"Stop",valueChangedToTrue:function(){var e=this._internal.animation,t=this._internal.animations;e.stop();for(var n=0;n<t.length;n++)t[n].stop()}},jumpToStart:{index:61,group:"Instant Actions",displayName:"Jump To Start",valueChangedToTrue:function(){for(var e=this._internal.animations,t=0;t<e.length;t++)e[t].jumpToStart();this.sendSignalOnOutput("hasReachedStart")}},jumpToEnd:{index:62,group:"Instant Actions",displayName:"Jump To End",valueChangedToTrue:function(){for(var e=this._internal.animations,t=0;t<e.length;t++)e[t].jumpToEnd();this.sendSignalOnOutput("hasReachedEnd")}},cubicBezierP1X:{displayName:"P1 X",group:"Cubic Bezier",type:{name:"number"},index:11,set:function(e){this._internal.cubicBezierPoints[0]=Math.min(1,Math.max(0,e)),this.updateCubicBezierFunction()}},cubicBezierP1Y:{displayName:"P1 Y",group:"Cubic Bezier",type:{name:"number"},index:12,set:function(e){this._internal.cubicBezierPoints[1]=e,this.updateCubicBezierFunction()}},cubicBezierP2X:{displayName:"P2 X",group:"Cubic Bezier",type:{name:"number"},index:13,set:function(e){this._internal.cubicBezierPoints[2]=Math.min(1,Math.max(0,e)),this.updateCubicBezierFunction()}},cubicBezierP2Y:{displayName:"P2 Y",group:"Cubic Bezier",type:{name:"number"},index:14,set:function(e){this._internal.cubicBezierPoints[3]=e,this.updateCubicBezierFunction()}}},outputs:{hasReachedStart:{type:"signal",group:"Signals",displayName:"Has Reached Start"},hasReachedEnd:{type:"signal",group:"Signals",displayName:"Has Reached End"}},dynamicports:[{condition:"easingCurve = cubicBezier",inputs:["cubicBezierP1X","cubicBezierP1Y","cubicBezierP2X","cubicBezierP2Y"]},{name:"expand/basic",indexStep:100,template:[{name:"{{portname}}.startMode",type:{name:"enum",enums:[{value:"explicit",label:"Explicit"},{value:"implicit",label:"Implicit"}],allowEditOnly:!0},plug:"input",group:"{{portname}} Animation",displayName:"Start Mode",default:"implicit",index:1e3},{name:"{{portname}}.endValue",type:"number",plug:"input",group:"{{portname}} Animation",displayName:"End Value",editorName:"End Value | {{portname}} ",default:0,index:1002}]},{name:"expand/basic",condition:"'{{portname}}.startMode' = explicit",indexStep:100,template:[{name:"{{portname}}.startValue",plug:"input",type:"number",displayName:"Start Value",editorName:"Start Value | {{portname}}",group:"{{portname}} Animation",default:0,index:1001}]}],panels:[{name:"PortEditor",title:"Animations",plug:"output",type:{name:"number"},group:"Animation Values"}],prototypeExtensions:{updateCubicBezierFunction:{value:function(){var e=this._internal.cubicBezierPoints,t=BezierEasing(e);this._internal.cubicBezierFunction=function(n,o,r){return EaseCurves.linear(n,o,t.get(r))},this._internal.ease=this._internal.cubicBezierFunction}},_registerAnimationGroup:{value:function(e){var t=new SubAnimation({node:this,ease:this._internal.ease,name:e});this._internal.animations.push(t);var n={};n[e+".startMode"]={set:function(o){t.startMode=o}},n[e+".startValue"]={default:0,set:function(o){t.startValue=o}},n[e+".endValue"]={default:0,set:function(o){t.endValue=o}},this.registerInputs(n),this.registerOutput(e,{getter:function(){return t.currentValue}})}},registerInputIfNeeded:{value:function(e){if(!this.hasInput(e)){var t=e.indexOf("."),n=e.substr(0,t);this.hasOutput(n)||this._registerAnimationGroup(n)}}},registerOutputIfNeeded:{value:function(e){this.hasOutput(e)||this._registerAnimationGroup(e)}}}};const Animation={node:AnimationNode},defaultDuration=300,TransitionNode={name:"Transition",docs:"https://docs.noodl.net/nodes/animation/transition",shortDesc:"This node can interpolate smooothely for the current value to a target value.",category:"Animation",deprecated:!0,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,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")}})},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()}}},"overrideCurrentValue.value":{type:{name:"number"},group:"Override Value",displayName:"Override Value",editorName:"Value|Override Value",set:function(e){this._internal.overrideValue=e}},"overrideCurrentValue.do":{group:"Override Value",displayName:"Do",editorName:"Do|Override Value",valueChangedToTrue:function(){setCurrentNumber.call(this,this._internal.overrideValue)}},duration:{type:"number",group:"Parameters",displayName:"Duration",default:defaultDuration,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"}}};function setCurrentNumber(e){var t=this._internal._animation;t.stop(),t.startValue=e,this.scheduleAfterInputsHaveUpdated(function(){t.endValue!==e&&t.start()}),this._internal.currentNumber=e,this.flagOutputDirty("currentValue")}const Transition={node:TransitionNode};var lodash_isequal={exports:{}};lodash_isequal.exports;var hasRequiredLodash_isequal;function requireLodash_isequal(){return hasRequiredLodash_isequal||(hasRequiredLodash_isequal=1,function(e,t){var n=200,o="__lodash_hash_undefined__",r=1,s=2,a=9007199254740991,l="[object Arguments]",u="[object Array]",d="[object AsyncFunction]",p="[object Boolean]",f="[object Date]",g="[object Error]",b="[object Function]",_="[object GeneratorFunction]",T="[object Map]",A="[object Number]",v="[object Null]",I="[object Object]",k="[object Promise]",N="[object Proxy]",w="[object RegExp]",E="[object Set]",F="[object String]",L="[object Symbol]",B="[object Undefined]",H="[object WeakMap]",J="[object ArrayBuffer]",ie="[object DataView]",pe="[object Float32Array]",xe="[object Float64Array]",Me="[object Int8Array]",ae="[object Int16Array]",Ie="[object Int32Array]",Te="[object Uint8Array]",Ne="[object Uint8ClampedArray]",me="[object Uint16Array]",Ee="[object Uint32Array]",Ae=/[\\^$.*+?()[\]{}|]/g,qe=/^\[object .+?Constructor\]$/,Fe=/^(?:0|[1-9]\d*)$/,Y={};Y[pe]=Y[xe]=Y[Me]=Y[ae]=Y[Ie]=Y[Te]=Y[Ne]=Y[me]=Y[Ee]=!0,Y[l]=Y[u]=Y[J]=Y[p]=Y[ie]=Y[f]=Y[g]=Y[b]=Y[T]=Y[A]=Y[I]=Y[w]=Y[E]=Y[F]=Y[H]=!1;var ve=typeof commonjsGlobal=="object"&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,Ve=typeof self=="object"&&self&&self.Object===Object&&self,re=ve||Ve||Function("return this")(),Oe=t&&!t.nodeType&&t,$e=Oe&&!0&&e&&!e.nodeType&&e,Le=$e&&$e.exports===Oe,fe=Le&&ve.process,Xe=function(){try{return fe&&fe.binding&&fe.binding("util")}catch{}}(),Be=Xe&&Xe.isTypedArray;function De(m,P){for(var D=-1,W=m==null?0:m.length,Q=0,X=[];++D<W;){var ne=m[D];P(ne,D,m)&&(X[Q++]=ne)}return X}function Ue(m,P){for(var D=-1,W=P.length,Q=m.length;++D<W;)m[Q+D]=P[D];return m}function je(m,P){for(var D=-1,W=m==null?0:m.length;++D<W;)if(P(m[D],D,m))return!0;return!1}function Re(m,P){for(var D=-1,W=Array(m);++D<m;)W[D]=P(D);return W}function We(m){return function(P){return m(P)}}function st(m,P){return m.has(P)}function K(m,P){return m?.[P]}function et(m){var P=-1,D=Array(m.size);return m.forEach(function(W,Q){D[++P]=[Q,W]}),D}function tt(m,P){return function(D){return m(P(D))}}function le(m){var P=-1,D=Array(m.size);return m.forEach(function(W){D[++P]=W}),D}var ye=Array.prototype,ue=Function.prototype,Se=Object.prototype,ge=re["__core-js_shared__"],ze=ue.toString,Z=Se.hasOwnProperty,Ce=function(){var m=/[^.]+$/.exec(ge&&ge.keys&&ge.keys.IE_PROTO||"");return m?"Symbol(src)_1."+m:""}(),c=Se.toString,h=RegExp("^"+ze.call(Z).replace(Ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=Le?re.Buffer:void 0,S=re.Symbol,O=re.Uint8Array,M=Se.propertyIsEnumerable,U=ye.splice,j=S?S.toStringTag:void 0,z=Object.getOwnPropertySymbols,q=y?y.isBuffer:void 0,C=tt(Object.keys,Object),x=lt(re,"DataView"),V=lt(re,"Map"),G=lt(re,"Promise"),ee=lt(re,"Set"),oe=lt(re,"WeakMap"),de=lt(Object,"create"),ke=ot(x),Ye=ot(V),St=ot(G),Je=ot(ee),at=ot(oe),ut=S?S.prototype:void 0,bt=ut?ut.valueOf:void 0;function nt(m){var P=-1,D=m==null?0:m.length;for(this.clear();++P<D;){var W=m[P];this.set(W[0],W[1])}}function Rt(){this.__data__=de?de(null):{},this.size=0}function kt(m){var P=this.has(m)&&delete this.__data__[m];return this.size-=P?1:0,P}function Mt(m){var P=this.__data__;if(de){var D=P[m];return D===o?void 0:D}return Z.call(P,m)?P[m]:void 0}function At(m){var P=this.__data__;return de?P[m]!==void 0:Z.call(P,m)}function Ft(m,P){var D=this.__data__;return this.size+=this.has(m)?0:1,D[m]=de&&P===void 0?o:P,this}nt.prototype.clear=Rt,nt.prototype.delete=kt,nt.prototype.get=Mt,nt.prototype.has=At,nt.prototype.set=Ft;function He(m){var P=-1,D=m==null?0:m.length;for(this.clear();++P<D;){var W=m[P];this.set(W[0],W[1])}}function Vt(){this.__data__=[],this.size=0}function $t(m){var P=this.__data__,D=ft(P,m);if(D<0)return!1;var W=P.length-1;return D==W?P.pop():U.call(P,D,1),--this.size,!0}function Lt(m){var P=this.__data__,D=ft(P,m);return D<0?void 0:P[D][1]}function Bt(m){return ft(this.__data__,m)>-1}function Ut(m,P){var D=this.__data__,W=ft(D,m);return W<0?(++this.size,D.push([m,P])):D[W][1]=P,this}He.prototype.clear=Vt,He.prototype.delete=$t,He.prototype.get=Lt,He.prototype.has=Bt,He.prototype.set=Ut;function it(m){var P=-1,D=m==null?0:m.length;for(this.clear();++P<D;){var W=m[P];this.set(W[0],W[1])}}function jt(){this.size=0,this.__data__={hash:new nt,map:new(V||He),string:new nt}}function Wt(m){var P=gt(this,m).delete(m);return this.size-=P?1:0,P}function zt(m){return gt(this,m).get(m)}function Ht(m){return gt(this,m).has(m)}function Gt(m,P){var D=gt(this,m),W=D.size;return D.set(m,P),this.size+=D.size==W?0:1,this}it.prototype.clear=jt,it.prototype.delete=Wt,it.prototype.get=zt,it.prototype.has=Ht,it.prototype.set=Gt;function ht(m){var P=-1,D=m==null?0:m.length;for(this.__data__=new it;++P<D;)this.add(m[P])}function qt(m){return this.__data__.set(m,o),this}function Xt(m){return this.__data__.has(m)}ht.prototype.add=ht.prototype.push=qt,ht.prototype.has=Xt;function Ke(m){var P=this.__data__=new He(m);this.size=P.size}function Yt(){this.__data__=new He,this.size=0}function Jt(m){var P=this.__data__,D=P.delete(m);return this.size=P.size,D}function Kt(m){return this.__data__.get(m)}function Qt(m){return this.__data__.has(m)}function Zt(m,P){var D=this.__data__;if(D instanceof He){var W=D.__data__;if(!V||W.length<n-1)return W.push([m,P]),this.size=++D.size,this;D=this.__data__=new it(W)}return D.set(m,P),this.size=D.size,this}Ke.prototype.clear=Yt,Ke.prototype.delete=Jt,Ke.prototype.get=Kt,Ke.prototype.has=Qt,Ke.prototype.set=Zt;function en(m,P){var D=mt(m),W=!D&&mn(m),Q=!D&&!W&&Nt(m),X=!D&&!W&&!Q&&Et(m),ne=D||W||Q||X,se=ne?Re(m.length,String):[],ce=se.length;for(var te in m)Z.call(m,te)&&!(ne&&(te=="length"||Q&&(te=="offset"||te=="parent")||X&&(te=="buffer"||te=="byteLength"||te=="byteOffset")||cn(te,ce)))&&se.push(te);return se}function ft(m,P){for(var D=m.length;D--;)if(Ot(m[D][0],P))return D;return-1}function tn(m,P,D){var W=P(m);return mt(m)?W:Ue(W,D(m))}function dt(m){return m==null?m===void 0?B:v:j&&j in Object(m)?un(m):gn(m)}function Ct(m){return ct(m)&&dt(m)==l}function _t(m,P,D,W,Q){return m===P?!0:m==null||P==null||!ct(m)&&!ct(P)?m!==m&&P!==P:nn(m,P,D,W,_t,Q)}function nn(m,P,D,W,Q,X){var ne=mt(m),se=mt(P),ce=ne?u:Qe(m),te=se?u:Qe(P);ce=ce==l?I:ce,te=te==l?I:te;var be=ce==I,we=te==I,he=ce==te;if(he&&Nt(m)){if(!Nt(P))return!1;ne=!0,be=!1}if(he&&!be)return X||(X=new Ke),ne||Et(m)?Pt(m,P,D,W,Q,X):an(m,P,ce,D,W,Q,X);if(!(D&r)){var _e=be&&Z.call(m,"__wrapped__"),Pe=we&&Z.call(P,"__wrapped__");if(_e||Pe){var Ze=_e?m.value():m,Ge=Pe?P.value():P;return X||(X=new Ke),Q(Ze,Ge,D,W,X)}}return he?(X||(X=new Ke),ln(m,P,D,W,Q,X)):!1}function on(m){if(!Tt(m)||hn(m))return!1;var P=wt(m)?h:qe;return P.test(ot(m))}function rn(m){return ct(m)&&xt(m.length)&&!!Y[dt(m)]}function sn(m){if(!fn(m))return C(m);var P=[];for(var D in Object(m))Z.call(m,D)&&D!="constructor"&&P.push(D);return P}function Pt(m,P,D,W,Q,X){var ne=D&r,se=m.length,ce=P.length;if(se!=ce&&!(ne&&ce>se))return!1;var te=X.get(m);if(te&&X.get(P))return te==P;var be=-1,we=!0,he=D&s?new ht:void 0;for(X.set(m,P),X.set(P,m);++be<se;){var _e=m[be],Pe=P[be];if(W)var Ze=ne?W(Pe,_e,be,P,m,X):W(_e,Pe,be,m,P,X);if(Ze!==void 0){if(Ze)continue;we=!1;break}if(he){if(!je(P,function(Ge,rt){if(!st(he,rt)&&(_e===Ge||Q(_e,Ge,D,W,X)))return he.push(rt)})){we=!1;break}}else if(!(_e===Pe||Q(_e,Pe,D,W,X))){we=!1;break}}return X.delete(m),X.delete(P),we}function an(m,P,D,W,Q,X,ne){switch(D){case ie:if(m.byteLength!=P.byteLength||m.byteOffset!=P.byteOffset)return!1;m=m.buffer,P=P.buffer;case J:return!(m.byteLength!=P.byteLength||!X(new O(m),new O(P)));case p:case f:case A:return Ot(+m,+P);case g:return m.name==P.name&&m.message==P.message;case w:case F:return m==P+"";case T:var se=et;case E:var ce=W&r;if(se||(se=le),m.size!=P.size&&!ce)return!1;var te=ne.get(m);if(te)return te==P;W|=s,ne.set(m,P);var be=Pt(se(m),se(P),W,Q,X,ne);return ne.delete(m),be;case L:if(bt)return bt.call(m)==bt.call(P)}return!1}function ln(m,P,D,W,Q,X){var ne=D&r,se=It(m),ce=se.length,te=It(P),be=te.length;if(ce!=be&&!ne)return!1;for(var we=ce;we--;){var he=se[we];if(!(ne?he in P:Z.call(P,he)))return!1}var _e=X.get(m);if(_e&&X.get(P))return _e==P;var Pe=!0;X.set(m,P),X.set(P,m);for(var Ze=ne;++we<ce;){he=se[we];var Ge=m[he],rt=P[he];if(W)var Dt=ne?W(rt,Ge,he,P,m,X):W(Ge,rt,he,m,P,X);if(!(Dt===void 0?Ge===rt||Q(Ge,rt,D,W,X):Dt)){Pe=!1;break}Ze||(Ze=he=="constructor")}if(Pe&&!Ze){var yt=m.constructor,vt=P.constructor;yt!=vt&&"constructor"in m&&"constructor"in P&&!(typeof yt=="function"&&yt instanceof yt&&typeof vt=="function"&&vt instanceof vt)&&(Pe=!1)}return X.delete(m),X.delete(P),Pe}function It(m){return tn(m,Sn,dn)}function gt(m,P){var D=m.__data__;return pn(P)?D[typeof P=="string"?"string":"hash"]:D.map}function lt(m,P){var D=K(m,P);return on(D)?D:void 0}function un(m){var P=Z.call(m,j),D=m[j];try{m[j]=void 0;var W=!0}catch{}var Q=c.call(m);return W&&(P?m[j]=D:delete m[j]),Q}var dn=z?function(m){return m==null?[]:(m=Object(m),De(z(m),function(P){return M.call(m,P)}))}:bn,Qe=dt;(x&&Qe(new x(new ArrayBuffer(1)))!=ie||V&&Qe(new V)!=T||G&&Qe(G.resolve())!=k||ee&&Qe(new ee)!=E||oe&&Qe(new oe)!=H)&&(Qe=function(m){var P=dt(m),D=P==I?m.constructor:void 0,W=D?ot(D):"";if(W)switch(W){case ke:return ie;case Ye:return T;case St:return k;case Je:return E;case at:return H}return P});function cn(m,P){return P=P??a,!!P&&(typeof m=="number"||Fe.test(m))&&m>-1&&m%1==0&&m<P}function pn(m){var P=typeof m;return P=="string"||P=="number"||P=="symbol"||P=="boolean"?m!=="__proto__":m===null}function hn(m){return!!Ce&&Ce in m}function fn(m){var P=m&&m.constructor,D=typeof P=="function"&&P.prototype||Se;return m===D}function gn(m){return c.call(m)}function ot(m){if(m!=null){try{return ze.call(m)}catch{}try{return m+""}catch{}}return""}function Ot(m,P){return m===P||m!==m&&P!==P}var mn=Ct(function(){return arguments}())?Ct:function(m){return ct(m)&&Z.call(m,"callee")&&!M.call(m,"callee")},mt=Array.isArray;function yn(m){return m!=null&&xt(m.length)&&!wt(m)}var Nt=q||Nn;function vn(m,P){return _t(m,P)}function wt(m){if(!Tt(m))return!1;var P=dt(m);return P==b||P==_||P==d||P==N}function xt(m){return typeof m=="number"&&m>-1&&m%1==0&&m<=a}function Tt(m){var P=typeof m;return m!=null&&(P=="object"||P=="function")}function ct(m){return m!=null&&typeof m=="object"}var Et=Be?We(Be):rn;function Sn(m){return yn(m)?en(m):sn(m)}function bn(){return[]}function Nn(){return!1}e.exports=vn}(lodash_isequal,lodash_isequal.exports)),lodash_isequal.exports}var lodash_isequalExports=requireLodash_isequal();const isEqual=getDefaultExportFromCjs(lodash_isequalExports);var modelPortsHash={},previousProperties={},ModelNodeDefinition={name:"DbModel",docs:"https://docs.noodl.net/nodes/cloud-services/model",displayNodeName:"Model",shortDesc:"Database model",category:"Cloud Services",usePortAsLabel:"$ndlCollectionName",color:"data",deprecated:!0,initialize:function(){var e=this._internal;e.inputValues={},e.relationModelIds={};var t=this;this._internal.onModelChangedCallback=function(n){t.isInputConnected("fetch")||(t.hasOutput(n.name)&&t.flagOutputDirty(n.name),t.hasOutput("changed-"+n.name)&&t.sendSignalOnOutput("changed-"+n.name),t.sendSignalOnOutput("changed"))}},getInspectInfo(){const e=this._internal.model;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:e.data}]:"[No Model]"},outputs:{id:{type:"string",displayName:"Id",group:"General",getter:function(){return this._internal.model?this._internal.model.getId():this._internal.modelId}},saved:{type:"signal",displayName:"Saved",group:"Events"},stored:{type:"signal",displayName:"Stored",group:"Events"},created:{type:"signal",displayName:"Created",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"},changed:{type:"signal",displayName:"Changed",group:"Events"},deleted:{type:"signal",displayName:"Deleted",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Events",getter:function(){return this._internal.error}}},inputs:{modelId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Id",group:"General",set:function(e){e instanceof Model&&(e=e.getId()),this._internal.modelId=e,this.isInputConnected("fetch")===!1?this.setModelID(e):this.flagOutputDirty("id")}},properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set:function(e){}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.scheduleFetch()}},store:{displayName:"Set",group:"Actions",valueChangedToTrue:function(){this.scheduleStore()}},save:{displayName:"Save",group:"Actions",valueChangedToTrue:function(){this.storageSave()}},delete:{displayName:"Delete",group:"Actions",valueChangedToTrue:function(){this.storageDelete()}},new:{displayName:"New",group:"Actions",valueChangedToTrue:function(){this.storageNew()}},insert:{displayName:"Insert",group:"Actions",valueChangedToTrue:function(){this.storageInsert()}}},methods:{setCollectionID:function(e){this._internal.collectionId=e,this.clearWarnings()},setModelID:function(e){var t=Model.get(e);this.setModel(t)},setModel:function(e){this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback),this._internal.model=e,this.flagOutputDirty("id"),e.on("change",this._internal.onModelChangedCallback);for(var t in e.data)this.hasOutput(t)&&this.flagOutputDirty(t);this.sendSignalOnOutput("fetched")},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},scheduleOnce:function(e,t){const n=this,o="hasScheduled"+e;this._internal[o]||(this._internal[o]=!0,this.scheduleAfterInputsHaveUpdated(function(){n._internal[o]=!1,t()}))},_hasChangesPending:function(){const e=this._internal;var t=e.model;for(var n in e.inputValues)if(isEqual(t.data[n],e.inputValues[n]))return!0;return!1},scheduleFetch:function(){var e=this;const t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("Fetch",function(){t.modelId===void 0||t.modelId===""||CloudStore.instance.fetch({collection:t.collectionId,objectId:t.modelId,success:function(n){var o=CloudStore._fromJSON(n,t.collectionId);t.model!==o&&(t.model&&t.model.off("change",t.onModelChangedCallback),t.model=o,o.on("change",t.onModelChangedCallback)),e.flagOutputDirty("id"),delete n.objectId;for(var r in n)e.hasOutput(r)&&e.flagOutputDirty(r);e.sendSignalOnOutput("fetched")},error:function(n){e.setError(n||"Failed to fetch.")}})})},scheduleStore:function(){var e=this,t=this._internal;t.model&&this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("Store",function(){for(var n in t.inputValues)t.model.set(n,t.inputValues[n],{resolve:!0});e.sendSignalOnOutput("stored")})},storageSave:function(){const e=this,t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageSave",function(){if(t.model){var n=t.model;for(var o in t.inputValues)n.set(o,t.inputValues[o],{resolve:!0});CloudStore.instance.save({collection:t.collectionId,objectId:n.getId(),data:n.data,success:function(r){for(var s in r)n.set(s,r[s]);e.sendSignalOnOutput("saved")},error:function(r){e.setError(r||"Failed to save.")}})}})},storageDelete:function(){const e=this;if(!this._internal.model)return;const t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageDelete",function(){CloudStore.instance.delete({collection:t.collectionId,objectId:t.model.getId(),success:function(){t.model.notify("delete"),e.sendSignalOnOutput("deleted")},error:function(n){e.setError(n||"Failed to delete.")}})})},storageInsert:function(){const e=this,t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageInsert",function(){var n=e._getModelInitData();CloudStore.instance.create({collection:t.collectionId,data:n,success:function(o){const r=CloudStore._fromJSON(o,t.collectionId);e.setModel(r),e.sendSignalOnOutput("created"),e.sendSignalOnOutput("saved")},error:function(o){e.setError(o||"Failed to insert.")}})})},checkWarningsBeforeCloudOp(){return this.clearWarnings(),this._internal.collectionId?!0:(this.setError("No collection name specified"),!1)},setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning")},onRelationAdd:function(e){const t=this,n=this._internal;this.scheduleOnce("StorageAddRelation",function(){if(n.model){var o=n.model,r=n.relationModelIds[e];r!==void 0&&CloudStore.instance.addRelation({collection:n.collectionId,objectId:o.getId(),key:e,targetObjectId:r,targetClass:Model.get(r)._class,success:function(s){for(var a in s)o.set(a,s[a]);t.sendSignalOnOutput("$relation-added-"+e)},error:function(s){t.setError(s||"Failed to add relation.")}})}})},onRelationRemove:function(e){const t=this,n=this._internal;this.scheduleOnce("StorageRemoveRelation",function(){if(n.model){var o=n.model,r=n.relationModelIds[e];r!==void 0&&CloudStore.instance.removeRelation({collection:n.collectionId,objectId:o.getId(),key:e,targetObjectId:r,targetClass:Model.get(r)._class,success:function(s){for(var a in s)o.set(a,s[a]);t.sendSignalOnOutput("$relation-removed-"+e)},error:function(s){t.setError(s||"Failed to remove relation.")}})}})},setRelationModelId:function(e,t){this._internal.relationModelIds[e]=t},registerOutputIfNeeded:function(e){if(!this.hasOutput(e)){if(e.startsWith("$relation-added-"))return this.registerOutput(e,{getter:function(){}});if(e.startsWith("$relation-removed-"))return this.registerOutput(e,{getter:function(){}});this.registerOutput(e,{getter:userOutputGetter$1.bind(this,e)})}},_getModelInitData:function(){var e=this._internal,t={};for(var n in e.inputValues)t[n]=e.inputValues[n];if(this._internal.modelInitCode)try{var o=new Function("initialize",this._internal.modelInitCode);o(function(r){for(var s in r)typeof r[s]=="function"?t[s]=r[s]():t[s]=r[s]})}catch(r){console.log("Error while initializing model: "+r)}return t},setModelInitCode:function(e){this._internal.modelInitCode=e},registerInputIfNeeded:function(e){if(this.hasInput(e))return;if(e.startsWith("$relation-add-"))return this.registerInput(e,{set:createSetter({valueChangedToTrue:this.onRelationAdd.bind(this,e.substring(14))})});if(e.startsWith("$relation-remove-"))return this.registerInput(e,{set:createSetter({valueChangedToTrue:this.onRelationRemove.bind(this,e.substring(17))})});if(e.startsWith("$relation-modelid-"))return this.registerInput(e,{set:this.setRelationModelId.bind(this,e.substring(18))});const t={};if(t[e])return this.registerInput(e,{set:createSetter({valueChangedToTrue:t[e]})});const n={$ndlCollectionName:this.setCollectionID.bind(this),$ndlModelInitCode:this.setModelInitCode.bind(this)};if(n[e])return this.registerInput(e,{set:n[e]});this.registerInput(e,{set:userInputSetter$1.bind(this,e)})}}};function userOutputGetter$1(e){return this._internal.model?this._internal.model.get(e,{resolve:!0}):void 0}function userInputSetter$1(e,t){this._internal.inputValues[e]=t}function detectRename(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}}const defaultStorageInitCode=`initialize({
177
+ `;var MapCollectionNode={name:"Map Collection",docs:"https://docs.noodl.net/nodes/data/array/array-map",displayNodeName:"Array Map",shortDesc:"Map array fields",category:"Data",color:"data",initialize:function(){var e=this;this._internal.collectionChangedCallback=function(){e.scheduleMap()}},inputs:{items:{type:"array",displayName:"Items",group:"General",set:function(e){this.setCollection(e),this.scheduleMap()}},mapScript:{type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},displayName:"Script",default:defaultMapCode,set:function(e){this._internal.mapCode=e;try{this._internal.mapFunc=new Function("map","object",this._internal.mapCode)}catch(t){this._internal.mapFunc=void 0,console.log("Error while parsing map script: "+t)}this.scheduleMap()}}},outputs:{items:{type:"array",displayName:"Items",group:"General",getter:function(){return this._internal.mappedCollection}},count:{type:"number",displayName:"Count",group:"General",getter:function(){return this._internal.mappedCollection?this._internal.mappedCollection.size():0}},modified:{group:"Events",type:"signal",displayName:"Changed"}},prototypeExtensions:{setCollection:function(e){this.bindCollection(e),this.flagOutputDirty("items"),this.flagOutputDirty("count")},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()},scheduleMap:function(){this.collectionChangedScheduled||(this.collectionChangedScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{if(this.collectionChangedScheduled=!1,this._internal.collection!==void 0){var e=this._internal.collection.map(t=>{var n=Model.create();return this._internal.mapFunc(function(o){for(var r in o)typeof o[r]=="function"?n.set(r,o[r](t)):typeof o[r]=="string"&&n.set(r,t.get(o[r]))},t),n});this._internal.mappedCollection=Collection.create(e),this.sendSignalOnOutput("modified"),this.flagOutputDirty("items"),this.flagOutputDirty("count")}}))}}};const MapCollectionNode$1={node:MapCollectionNode,setup:function(e,t){!e.editorConnection||e.editorConnection.isRunningLocally()}};function _makeRequest$1(e,t){var n=new XMLHttpRequest;n.onreadystatechange=function(){if(n.readyState===4){var s;try{s=JSON.parse(n.response)}catch{}n.status===200||n.status===201?t.success(s):t.error(s)}},n.open(t.method||"GET",t.endpoint+e,!0),n.setRequestHeader("X-Parse-Application-Id",t.appId),n.setRequestHeader("Content-Type","application/json");const o=Runtime.instance.getMetaData("cloudservices");o&&o.deployVersion&&n.setRequestHeader("x-noodl-cloud-version",o.deployVersion);var r=localStorage["Parse/"+t.appId+"/currentUser"];if(r!==void 0)try{const s=JSON.parse(r);n.setRequestHeader("X-Parse-Session-Token",s.sessionToken)}catch{}n.send(JSON.stringify(t.content))}var CloudFunctionNode$1={name:"CloudFunction2",displayName:"Cloud Function",category:"Cloud Services",color:"data",usePortAsLabel:"function",docs:"https://docs.noodl.net/nodes/data/cloud-data/cloud-function",initialize:function(){this._internal.paramsValues={},this._internal.resultsValues={}},getInspectInfo(){const e=this._internal.lastCallResult;return e?[{type:"value",value:e}]:"[Not executed yet]"},inputs:{call:{type:"signal",displayName:"Call",group:"Actions",valueChangedToTrue:function(){this.scheduleCall()}}},outputs:{success:{type:"signal",displayName:"Success",group:"Signals"},failure:{type:"signal",displayName:"Failure",group:"Signals"},error:{type:"string",displayName:"Error",group:"Error",getter:function(){return this._internal.error}}},methods:{setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure")},getResultsValue:function(e){return this._internal.resultsValues[e]},registerOutputIfNeeded:function(e){this.hasOutput(e)||e.startsWith("out-")&&this.registerOutput(e,{getter:this.getResultsValue.bind(this,e.substring(4))})},setParamsValue:function(e,t){this._internal.paramsValues[e]=t},setFunctionName:function(e){this._internal.functionName=e},registerInputIfNeeded:function(e){this.hasInput(e)||(e==="function"&&this.registerInput(e,{set:this.setFunctionName.bind(this)}),e.startsWith("in-")&&this.registerInput(e,{set:this.setParamsValue.bind(this,e.substring(3))}))},scheduleCall:function(){var e=this._internal;e.hasScheduledCall||(e.hasScheduledCall=!0,this.scheduleAfterInputsHaveUpdated(this.doCall.bind(this)))},doCall:function(){this._internal.hasScheduledCall=!1;const e=Runtime.instance.getMetaData("cloudservices");this.context.editorConnection&&(e===void 0||e.endpoint===void 0?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"cloud-function-2",{message:"No cloud services defined in this project."}):this._internal.functionName===void 0?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"cloud-function-2",{message:"No function specified"}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"cloud-function-2"));const t=e.appId,n=this.context.editorConnection.isRunningLocally()?`http://${window.location.hostname}:8577`:e.endpoint;_makeRequest$1("/functions/"+encodeURIComponent(this._internal.functionName),{appId:t,endpoint:n,content:this._internal.paramsValues,method:"POST",success:o=>{if(o===void 0)this._internal.lastCallResult={status:"success",parameters:this._internal.paramsValues,results:"empty"};else{const r=o.result||{};for(let s in r)this._internal.resultsValues[s]=r[s],this.hasOutput("out-"+s)&&this.flagOutputDirty("out-"+s);this._internal.lastCallResult={status:"success",parameters:this._internal.paramsValues,results:this._internal.resultsValues}}this.sendSignalOnOutput("success")},error:o=>{const r=typeof o=="string"?o:o?.error||"Failed running cloud function.";this._internal.lastCallResult={status:"failure",error:r},this.setError(r)}})}}};const CloudFunction2={node:CloudFunctionNode$1,setup:function(e,t){}},OpenFilePicker={name:"Open File Picker",docs:"https://docs.noodl.net/nodes/utilities/open-file-picker",category:"Utilities",getInspectInfo(){if(this._internal.file)return this._internal.file.path},initialize(){const e=document.createElement("input");e.type="file",this._internal.inputElement=e},inputs:{open:{type:"signal",displayName:"Open",group:"Actions",valueChangedToTrue(){const e=this._internal.inputElement,t=n=>{this._internal.file=n.target.files[0],this.flagOutputDirty("file"),this.flagOutputDirty("path"),this.flagOutputDirty("name"),this.flagOutputDirty("sizeInBytes"),this.flagOutputDirty("type"),this.sendSignalOnOutput("success"),e.onchange=null,e.value=""};e.accept=this._internal.acceptedFileTypes,this._internal.capture&&(e.capture=this._internal.capture),e.onchange=t,e.click()}},acceptedFileTypes:{group:"General",type:"string",displayName:"Accepted file types",set(e){this._internal.acceptedFileTypes=e}},capture:{group:"General",type:"string",displayName:"Capture",set(e){this._internal.capture=e}}},outputs:{file:{type:"*",displayName:"File",group:"General",get(){return this._internal.file}},path:{displayName:"Path",group:"Metadata",type:"string",get(){return this._internal.file&&this._internal.file.path}},name:{displayName:"Name",group:"Metadata",type:"string",get(){return this._internal.file&&this._internal.file.name}},sizeInBytes:{displayName:"Size in bytes",group:"Metadata",type:"number",get(){return this._internal.file&&this._internal.file.size}},type:{displayName:"Type",group:"Metadata",type:"string",get(){return this._internal.file&&this._internal.file.type}},success:{type:"signal",group:"Events",displayName:"Success"}}},OpenFilePicker$1={node:OpenFilePicker},UploadFile={name:"Upload File",docs:"https://docs.noodl.net/nodes/data/cloud-data/upload-file",category:"Cloud Services",color:"data",getInspectInfo(){return this._internal.response},inputs:{file:{group:"General",displayName:"File",type:"*",set(e){this._internal.file=e}},upload:{type:"signal",displayName:"Upload",group:"Actions",valueChangedToTrue(){this.scheduleAfterInputsHaveUpdated(()=>{const e=this._internal.file;if(!e){this.setError("No file specified");return}CloudStore.instance.uploadFile({file:e,onUploadProgress:t=>{this._internal.progressTotal=t.total,this._internal.progressLoaded=t.loaded,this.flagOutputDirty("progressTotalBytes"),this.flagOutputDirty("progressLoadedBytes"),this.flagOutputDirty("progressLoadedPercent"),this.sendSignalOnOutput("progressChanged")},success:t=>{this._internal.cloudFile=new CloudFile(t),this.flagOutputDirty("cloudFile"),this.sendSignalOnOutput("success")},error:t=>this.setError(t)})})}}},outputs:{cloudFile:{group:"General",displayName:"Cloud File",type:"cloudfile",get(){return this._internal.cloudFile}},success:{group:"Events",displayName:"Success",type:"signal"},failure:{group:"Events",displayName:"Failure",type:"signal"},error:{type:"string",displayName:"Error",group:"Error",get(){return this._internal.error}},errorStatus:{type:"number",displayName:"Error Status Code",group:"Error",get(){return this._internal.errorStatus}},progressChanged:{type:"signal",displayName:"Progress Changed",group:"Events"},progressTotalBytes:{type:"number",displayName:"Total Bytes",group:"Progress",get(){return this._internal.progressTotal}},progressLoadedBytes:{type:"number",displayName:"Uploaded Bytes",group:"Progress",get(){return this._internal.progressLoaded}},progressLoadedPercent:{type:"number",displayName:"Uploaded Percent",group:"Progress",get(){return this._internal.progressTotal?this._internal.progressLoaded/this._internal.progressTotal*100:0}}},methods:{setError(e){this._internal.error=e.hasOwnProperty("error")?e.error:e,this._internal.errorStatus=e.code||e.status||0,this.flagOutputDirty("error"),this.flagOutputDirty("errorStatus"),this.sendSignalOnOutput("failure")}}},UploadFile$1={node:UploadFile},NavigateBack={name:"PageStackNavigateBack",displayNodeName:"Pop Component Stack",category:"Navigation",docs:"https://docs.noodl.net/nodes/component-stack/pop-component",inputs:{navigate:{displayName:"Navigate",group:"Actions",valueChangedToTrue:function(){this.scheduleNavigate()}},results:{type:{name:"stringlist",allowEditOnly:!0},group:"Results",set:function(e){this._internal.results=e}},backActions:{type:{name:"stringlist",allowEditOnly:!0},group:"Back Actions",set:function(e){this._internal.backActions=e}}},initialize:function(){this._internal.resultValues={}},methods:{scheduleNavigate:function(){var e=this,t=this._internal;t.hasScheduledNavigate||(t.hasScheduledNavigate=!0,this.scheduleAfterInputsHaveUpdated(function(){t.hasScheduledNavigate=!1,e.navigate()}))},_setBackCallback(e){this._internal.backCallback=e},navigate(){this._internal.backCallback!==void 0&&this._internal.backCallback({backAction:this._internal.backAction,results:this._internal.resultValues})},setResultValue:function(e,t){this._internal.resultValues[e]=t},backActionTriggered:function(e){this._internal.backAction=e,this.scheduleNavigate()},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e.startsWith("result-"))return this.registerInput(e,{set:this.setResultValue.bind(this,e.substring(7))});if(e.startsWith("backAction-"))return this.registerInput(e,{set:t=>{t&&this.backActionTriggered(e)}})}}}};function setup$1(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[],a=o.parameters.results;if(a){a=a?a.split(","):void 0;for(var l in a){var u=a[l];s.push({type:{name:"*"},plug:"input",group:"Results",name:"result-"+u,displayName:u})}}var d=o.parameters.backActions;if(d){d=d?d.split(","):void 0;for(var l in d){var u=d[l];s.push({type:"signal",plug:"input",group:"Back Actions",name:"backAction-"+u,displayName:u})}}e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){(s.name==="results"||s.name==="backActions")&&r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.PageStackNavigateBack",function(o){n(o)});for(const o of t.getNodesWithType("PageStackNavigateBack"))n(o)})}const NavigateBack$1={node:NavigateBack,setup:setup$1},NavigateToPathNode={name:"PageStackNavigateToPath",displayNodeName:"Navigate To Path",category:"Navigation",docs:"https://docs.noodl.net/nodes/navigation/navigate-to-path",initialize(){const e=this._internal;e.params={},e.query={},e.openInNewTab=!1},inputs:{path:{type:{name:"string"},displayName:"Path",group:"General",set(e){this._internal.path=e}},queryNames:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Query",group:"Query",set(e){this._internal.queryNames=e}},openInNewTab:{index:10,displayName:"Open in new tab",group:"General",default:!1,type:"boolean",set(e){this._internal.openInNewTab=!!e}},navigate:{displayName:"Navigate",group:"Actions",valueChangedToTrue(){this.scheduleNavigate()}}},outputs:{},methods:{scheduleNavigate(){var e=this._internal;e.hasScheduledNavigate||(e.hasScheduledNavigate=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.hasScheduledNavigate=!1,this.navigate()}))},navigate(){var e=this._internal,t=e.path;if(t!==void 0){var n=e.path.match(/\{[A-Za-z0-9_]*\}/g),o=[];n&&(o=n.map(function(d){return d.replace("{","").replace("}","")})),o.forEach(function(d){var h=e.params[d];t=t.replace("{"+d+"}",h!==void 0?h:"")});var r,s,a=Runtime.instance.getProjectSettings().navigationPathType;a===void 0||a==="hash"?s=t:r=t;var l=[];e.queryNames!==void 0&&e.queryNames.split(",").forEach(d=>{e.query[d]!==void 0&&l.push(d+"="+e.query[d])});var u=(r!==void 0?r:"")+(l.length>=1?"?"+l.join("&"):"")+(s!==void 0?"#"+s:"");this._internal.openInNewTab?window.open(u,"_blank"):(window.history.pushState({},"",u),dispatchEvent(new PopStateEvent("popstate",{})))}},setParam(e,t){this._internal.params[e]=t},setQuery(e,t){this._internal.query[e]=t},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e.startsWith("p-"))return this.registerInput(e,{set:this.setParam.bind(this,e.substring(2))});if(e.startsWith("q-"))return this.registerInput(e,{set:this.setQuery.bind(this,e.substring(2))})}}}},NavigateToPath={node:NavigateToPathNode,setup:function e(t,n){if(!t.editorConnection||!t.editorConnection.isRunningLocally())return;function o(r){function s(){var a=[];if(r.parameters.path!==void 0)var l=r.parameters.path.match(/\{[A-Za-z0-9_]*\}/g)||[],u=l.map(function(h){return h.replace("{","").replace("}","")}),a=u.filter(function(h,f,g){return g.indexOf(h)===f}).map(function(h){return{name:"p-"+h,displayName:h,group:"Parameter",type:"*",plug:"input"}});r.parameters.queryNames!==void 0&&r.parameters.queryNames.split(",").forEach(d=>{a.push({name:"q-"+d,displayName:d,group:"Query",plug:"input",type:"*"})}),t.editorConnection.sendDynamicPorts(r.id,a)}s(),r.on("parameterUpdated",function(a){s()})}n.on("editorImportComplete",()=>{n.on("nodeAdded.PageStackNavigateToPath",function(r){o(r)});for(const r of n.getNodesWithType("PageStackNavigateToPath"))o(r)})}},Navigate={name:"PageStackNavigate",displayNodeName:"Push Component To Stack",category:"Navigation",docs:"https://docs.noodl.net/nodes/component-stack/push-component",initialize:function(){this._internal.transitionParams={},this._internal.pageParams={},this._internal.backResults={}},inputs:{stack:{type:{name:"string",identifierOf:"PackStack"},displayName:"Stack",group:"General",default:"Main",set:function(e){this._internal.stack=e}},mode:{type:{name:"enum",enums:[{label:"Push",value:"push"},{label:"Replace",value:"replace"}]},displayName:"Mode",default:"push",group:"General",set:function(e){this._internal.navigationMode=e}},navigate:{displayName:"Navigate",group:"Actions",valueChangedToTrue:function(){this.scheduleNavigate()}}},outputs:{navigated:{type:"signal",displayName:"Navigated",group:"Events"}},methods:{scheduleNavigate:function(){var e=this,t=this._internal;t.hasScheduledNavigate||(t.hasScheduledNavigate=!0,this.scheduleAfterInputsHaveUpdated(function(){t.hasScheduledNavigate=!1,e.navigate()}))},navigate(){this._internal.navigationMode==="push"||this._internal.navigationMode===void 0?NavigationHandler.instance.navigate(this._internal.stack,{target:this._internal.target,transition:{type:this._internal.transition,...this._internal.transitionParams},params:this._internal.pageParams,backCallback:(e,t)=>{this._internal.backResults=t;for(const n in t)this.hasOutput("backResult-"+n)&&this.flagOutputDirty("backResult-"+n);e!==void 0&&this.sendSignalOnOutput(e)},hasNavigated:()=>{this.sendSignalOnOutput("navigated")}}):this._internal.navigationMode==="replace"&&NavigationHandler.instance.replace(this._internal.stack,{target:this._internal.target,params:this._internal.pageParams,hasNavigated:()=>{this.scheduleAfterInputsHaveUpdated(()=>{this.sendSignalOnOutput("navigated")})}})},setTransitionParam:function(e,t){this._internal.transitionParams[e]=t},setPageParam:function(e,t){this._internal.pageParams[e]=t},getBackResult:function(e,t){return this._internal.backResults[e]},setTargetPageId:function(e){this._internal.target=e},setTransition:function(e){this._internal.transition=e},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e==="target")return this.registerInput(e,{set:this.setTargetPageId.bind(this)});if(e==="transition")return this.registerInput(e,{set:this.setTransition.bind(this)});if(e.startsWith("tr-"))return this.registerInput(e,{set:this.setTransitionParam.bind(this,e.substring(3))});if(e.startsWith("pm-"))return this.registerInput(e,{set:this.setPageParam.bind(this,e.substring(3))})}},registerOutputIfNeeded:function(e){if(!this.hasOutput(e)){if(e.startsWith("backResult-"))return this.registerOutput(e,{getter:this.getBackResult.bind(this,e.substring(11))});if(e.startsWith("backAction-"))return this.registerOutput(e,{getter:function(){}})}}}};function setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var l=[];if(o.parameters.mode==="push"||o.parameters.mode===void 0){l.push({name:"transition",plug:"input",type:{name:"enum",enums:Object.keys(Transitions)},default:"Push",displayName:"Transition",group:"Transition"});var u=o.parameters.transition||"Push";Transitions[u]&&(l=l.concat(Transitions[u].ports(o.parameters)))}const h=t.getNodesWithType("Page Stack").find(f=>(f.parameters.name||"Main")===(o.parameters.stack||"Main"));if(h!==void 0){const f=h.parameters.pages;if(f!==void 0&&f.length>0){l.push({plug:"input",type:{name:"enum",enums:f.map(_=>({label:_.label,value:_.id}))},group:"General",displayName:"Target Page",name:"target",default:f[0].id});const g=o.parameters.target||f[0].id,b=h.parameters["pageComp-"+g];if(b!==void 0){const _=t.components[b];if(_!==void 0){for(const T in _.inputPorts)l.push({name:"pm-"+T,displayName:T,type:"*",plug:"input",group:"Parameters"});for(const T of _.getNodesWithType("PageStackNavigateBack"))T.parameters.backActions!==void 0&&T.parameters.backActions.split(",").forEach(A=>{l.find(v=>v.name==="backAction-"+A)||l.push({name:"backAction-"+A,displayName:A,type:"signal",plug:"output",group:"Back Actions"})}),T.parameters.results&&T.parameters.results.split(",").forEach(A=>{l.find(v=>v.name==="backResult-"+A)||l.push({name:"backResult-"+A,displayName:A,type:"*",plug:"output",group:"Back Results"})})}}}}e.editorConnection.sendDynamicPorts(o.id,l)}function s(){var l=t.getNodesWithType("Page Stack"),u=l.find(g=>g.parameters.name===o.parameters.stack);if(u!==void 0){var d=u.parameters.pages;if(!(d===void 0||d.length===0)){var h=u.parameters["pageComp-"+(o.parameters.target||d[0].id)];if(h!==void 0){var f=t.components[h];if(f!==void 0){f.on("inputPortAdded",r),f.on("inputPortRemoved",r);for(const g of f.getNodesWithType("PageStackNavigateBack"))g.on("parameterUpdated",r);f.on("nodeAdded",g=>{g.type==="PageStackNavigateBack"&&(g.on("parameterUpdated",r),r())}),f.on("nodeWasRemoved",g=>{g.type==="PageStackNavigateBack"&&r()})}}}}}r(),s(),o.on("parameterUpdated",function(l){l.name==="target"?(s(),r()):(l.name==="stack"||l.name==="mode"||l.name==="transition"||l.name.startsWith("tr-"))&&r()});function a(l){l.on("parameterUpdated",function(u){(u.name==="pages"||u.name==="name")&&r()})}t.on("nodeAdded.Page Stack",a),t.on("nodeWasRemoved.Page Stack",r);for(const l of t.getNodesWithType("Page Stack"))a(l)}t.on("editorImportComplete",()=>{t.on("nodeAdded.PageStackNavigate",function(o){n(o)});for(const o of t.getNodesWithType("PageStackNavigate"))n(o)})}const Navigate$1={node:Navigate,setup},ShowPopupNode={name:"NavigationShowPopup",displayNodeName:"Show Popup",category:"Navigation",docs:"https://docs.noodl.net/nodes/popups/show-popup",initialize:function(){this._internal.popupParams={},this._internal.closeResults={}},inputs:{target:{type:"component",displayName:"Target",group:"General",set:function(e){this._internal.target=e}},show:{type:"signal",displayName:"Show",group:"Actions",valueChangedToTrue:function(){this.scheduleShow()}}},outputs:{Closed:{type:"signal"}},methods:{setPopupParam:function(e,t){this._internal.popupParams[e]=t},getCloseResult:function(e){return this._internal.closeResults[e]},scheduleShow:function(){var e=this,t=this._internal;t.hasScheduledShow||(t.hasScheduledShow=!0,this.scheduleAfterInputsHaveUpdated(function(){t.hasScheduledShow=!1,e.show()}))},show:function(){this._internal.target!=null&&this.context.showPopup(this._internal.target,this._internal.popupParams,{senderNode:this.nodeScope.componentOwner,onClosePopup:(e,t)=>{this._internal.closeResults=t;for(const n in t)this.hasOutput("closeResult-"+n)&&this.flagOutputDirty("closeResult-"+n);e?this.sendSignalOnOutput(e):this.sendSignalOnOutput("Closed")}})},registerInputIfNeeded:function(e){if(!this.hasInput(e)&&e.startsWith("popupParam-"))return this.registerInput(e,{set:this.setPopupParam.bind(this,e.substring(11))})},registerOutputIfNeeded:function(e){if(!this.hasOutput(e)){if(e.startsWith("closeResult-"))return this.registerOutput(e,{getter:this.getCloseResult.bind(this,e.substring(12))});if(e.startsWith("closeAction-"))return this.registerOutput(e,{getter:function(){}})}}}},ShowPopup={node:ShowPopupNode,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var a=[],l=o.parameters.target;if(l!==void 0){var u=t.components[l];if(u){for(var d in u.inputPorts){var h=u.inputPorts[d];a.push({name:"popupParam-"+d,displayName:d,type:h.type||"*",plug:"input",group:"Params"})}for(const f of u.getNodesWithType("NavigationClosePopup"))f.parameters.closeActions!==void 0&&f.parameters.closeActions.split(",").forEach(g=>{a.find(b=>b.name===g)||a.push({name:"closeAction-"+g,displayName:g,type:"signal",plug:"output",group:"Close Actions"})}),f.parameters.results!==void 0&&f.parameters.results.split(",").forEach(g=>{a.push({name:"closeResult-"+g,displayName:g,type:"*",plug:"output",group:"Close Results"})})}}e.editorConnection.sendDynamicPorts(o.id,a)}function s(a){if(a!==void 0){var l=t.components[a];if(l!==void 0){l.on("inputPortAdded",r),l.on("inputPortRemoved",r);for(const u of l.getNodesWithType("NavigationClosePopup"))u.on("parameterUpdated",r);l.on("nodeAdded",u=>{u.type==="NavigationClosePopup"&&(u.on("parameterUpdated",r),r())}),l.on("nodeWasRemoved",u=>{u.type==="NavigationClosePopup"&&r()})}}}r(),s(o.parameters.target),o.on("parameterUpdated",function(a){a.name==="target"&&(r(),s(o.parameters.target))})}t.on("editorImportComplete",()=>{t.on("nodeAdded.NavigationShowPopup",function(o){n(o)});for(const o of t.getNodesWithType("NavigationShowPopup"))n(o)})}},ClosePopupNode={name:"NavigationClosePopup",displayNodeName:"Close Popup",category:"Navigation",docs:"https://docs.noodl.net/nodes/popups/close-popup",initialize:function(){this._internal.resultValues={}},inputs:{results:{type:{name:"stringlist",allowEditOnly:!0},group:"Results",set:function(e){this._internal.results=e}},closeActions:{type:{name:"stringlist",allowEditOnly:!0},group:"Close Actions",set:function(e){this._internal.closeActions=e}},close:{type:"Signal",displayName:"Close",group:"Actions",valueChangedToTrue:function(){this.scheduleClose()}}},methods:{setResultValue:function(e,t){this._internal.resultValues[e]=t},_setCloseCallback:function(e){this._internal.closeCallback=e},scheduleClose:function(){const e=this,t=this._internal;t.hasScheduledClose||(t.hasScheduledClose=!0,this.scheduleAfterInputsHaveUpdated(function(){t.hasScheduledClose=!1,e.close()}))},close:function(){this._internal.closeCallback&&this._internal.closeCallback(this._internal.closeAction,this._internal.resultValues)},closeActionTriggered:function(e){this._internal.closeAction=e,this.scheduleClose()},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e.startsWith("result-"))return this.registerInput(e,{set:this.setResultValue.bind(this,e.substring(7))});if(e.startsWith("closeAction-"))return this.registerInput(e,{set:createSetter({valueChangedToTrue:this.closeActionTriggered.bind(this,e)})})}}}},ClosePopup={node:ClosePopupNode,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[],a=o.parameters.results;if(a){a=a?a.split(","):void 0;for(var l in a){var u=a[l];s.push({type:{name:"*"},plug:"input",group:"Results",name:"result-"+u,displayName:u})}}var d=o.parameters.closeActions;if(d){d=d?d.split(","):void 0;for(const h in d){const f=d[h];s.push({type:"signal",plug:"input",group:"Close Actions",name:"closeAction-"+f,displayName:f})}}e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){(s.name==="results"||s.name==="closeActions")&&r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.NavigationClosePopup",function(o){n(o)});for(const o of t.getNodesWithType("NavigationClosePopup"))n(o)})}},PageInputsNode={name:"PageInputs",displayNodeName:"Page Inputs",category:"Navigation",docs:"https://docs.noodl.net/nodes/navigation/page-inputs",color:"component",initialize:function(){var e=this._internal;e.params={}},inputs:{pathParams:{type:{name:"stringlist",allowEditOnly:!0},group:"Path Parameters"},queryParams:{type:{name:"stringlist",allowEditOnly:!0},group:"Query Parameters"}},outputs:{},methods:{_setPageParams:function(e){for(var t in e)this._internal.params[t]=e[t],this.hasOutput("pm-"+t)&&this.flagOutputDirty("pm-"+t)},getPageParam:function(e){return this._internal.params[e]},registerOutputIfNeeded:function(e){if(!this.hasOutput(e)&&e.startsWith("pm-"))return this.registerOutput(e,{getter:this.getPageParam.bind(this,e.substring(3))})}}},PageInputs={node:PageInputsNode},RouterNavigate={name:"RouterNavigate",displayNodeName:"Navigate",category:"Navigation",docs:"https://docs.noodl.net/nodes/navigation/navigate",initialize:function(){this._internal.pageParams={},this._internal.openInNewTab=!1},inputs:{navigate:{displayName:"Navigate",group:"Actions",valueChangedToTrue:function(){this.scheduleNavigate()}},openInNewTab:{index:10,displayName:"Open in new tab",group:"General",default:!1,type:"boolean",set(e){this._internal.openInNewTab=!!e}}},outputs:{navigated:{type:"signal",displayName:"Navigated",group:"Events"}},methods:{scheduleNavigate:function(){var e=this._internal;e.hasScheduledNavigate||(e.hasScheduledNavigate=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.hasScheduledNavigate=!1,this.navigate()}))},navigate(){RouterHandler.instance.navigate(this._internal.router,{target:this._internal.target,params:this._internal.pageParams,openInNewTab:this._internal.openInNewTab,hasNavigated:()=>{this.scheduleAfterInputsHaveUpdated(()=>{this.sendSignalOnOutput("navigated")})}})},setPageParam:function(e,t){this._internal.pageParams[e]=t},setTargetPage:function(e){this._internal.target=e},setRouter:function(e){this._internal.router=e},registerInputIfNeeded:function(e){if(!this.hasInput(e)){if(e==="target")return this.registerInput(e,{set:this.setTargetPage.bind(this)});if(e==="router")return this.registerInput(e,{set:this.setRouter.bind(this)});if(e.startsWith("pm-"))return this.registerInput(e,{set:this.setPageParam.bind(this,e.substring(3))})}}}},RouterNavigate$1={node:RouterNavigate},LoginNodeDefinition={name:"net.noodl.user.LogIn",docs:"https://docs.noodl.net/nodes/data/user/log-in",displayNodeName:"Log In",category:"Cloud Services",color:"data",outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},inputs:{login:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleLogIn()}},username:{displayName:"Username",type:"string",group:"General",set(e){this._internal.username=e}},password:{displayName:"Password",type:"string",group:"General",set(e){this._internal.password=e}}},methods:{setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning")},scheduleLogIn(){this.logInScheduled!==!0&&(this.logInScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.logInScheduled=!1,UserService.instance.logIn({username:this._internal.username,password:this._internal.password,success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}},Login={node:LoginNodeDefinition,setup(e,t){}},LogOutNodeDefinition={name:"net.noodl.user.LogOut",docs:"https://docs.noodl.net/nodes/data/user/log-out",displayNodeName:"Log Out",category:"Cloud Services",color:"data",outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},inputs:{login:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleLogOut()}}},methods:{setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning")},scheduleLogOut(){this.logOutScheduled!==!0&&(this.logOutScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.logOutScheduled=!1,UserService.instance.logOut({success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}},Logout={node:LogOutNodeDefinition,setup(e,t){}},SignUpNodeDefinition={name:"net.noodl.user.SignUp",docs:"https://docs.noodl.net/nodes/data/user/sign-up",displayNodeName:"Sign Up",category:"Cloud Services",color:"data",initialize(){const e=this._internal;e.userProperties={}},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter(){return this._internal.error}}},inputs:{signup:{displayName:"Do",group:"Actions",valueChangedToTrue(){this.scheduleSignUp()}},username:{displayName:"Username",type:"string",group:"General",set(e){this._internal.username=e}},password:{displayName:"Password",type:"string",group:"General",set(e){this._internal.password=e}},email:{displayName:"Email",type:"string",group:"General",set(e){this._internal.email=e}}},methods:{setError(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-login-warning")},scheduleSignUp(){const e=this._internal;this.signUpScheduled!==!0&&(this.signUpScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.signUpScheduled=!1,UserService.instance.signUp({username:this._internal.username,password:this._internal.password,email:this._internal.email,properties:e.userProperties,success:()=>{this.sendSignalOnOutput("success")},error:t=>{this.setError(t)}})}))},setUserProperty(e,t){this._internal.userProperties[e]=t},registerInputIfNeeded(e){if(!this.hasInput(e)&&e.startsWith("prop-"))return this.registerInput(e,{set:this.setUserProperty.bind(this,e.substring(5))})}}};function updatePorts$5(e,t,n,o){var r=[];if(o){var s=o.find(d=>d.name==="_User");if(s&&s.schema&&s.schema.properties){var a=s.schema.properties;const d=["authData","password","username","createdAt","updatedAt","emailVerified","email"];for(var l in a)if(d.indexOf(l)===-1){var u=a[l];if(!r.find(h=>h.name===l)&&u.type!=="Relation"){const h={String:"string",Boolean:"boolean",Number:"number",Date:"date"};r.push({type:{name:h[u.type]?h[u.type]:"*"},plug:"input",group:"Properties",name:"prop-"+l,displayName:l})}}}}n.sendDynamicPorts(e,r)}const Signup={node:SignUpNodeDefinition,setup(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$5(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections")),o.on("parameterUpdated",function(r){updatePorts$5(o.id,o.parameters,e.editorConnection,t.getMetaData("systemCollections"))}),t.on("metadataChanged.systemCollections",function(r){updatePorts$5(o.id,o.parameters,e.editorConnection,r)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.net.noodl.user.SignUp",function(o){n(o)});for(const o of t.getNodesWithType("net.noodl.user.SignUp"))n(o)})}};var VerifyEmailNodeDefinition={name:"net.noodl.user.VerifyEmail",docs:"https://docs.noodl.net/nodes/data/user/verify-email",displayNodeName:"Verify Email",category:"Cloud Services",color:"data",deprecated:!0,initialize:function(){this._internal},getInspectInfo(){},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter:function(){return this._internal.error}}},inputs:{verify:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleVerifyEmail()}},token:{type:"string",displayName:"Token",group:"General",set:function(e){this._internal.token=e}},username:{type:"string",displayName:"Username",group:"General",set:function(e){this._internal.username=e}}},methods:{setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-verify-email-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-verify-email-warning")},scheduleVerifyEmail:function(){this._internal,this.logOutScheduled!==!0&&(this.logOutScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.logOutScheduled=!1,UserService.instance.verifyEmail({token:this._internal.token,username:this._internal.username,success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}};const VerifyEmail={node:VerifyEmailNodeDefinition,setup:function(e,t){}};var SendEmailVerificationNodeDefinition={name:"net.noodl.user.SendEmailVerification",docs:"https://docs.noodl.net/nodes/data/user/send-email-verification",displayNodeName:"Send Email Verification",category:"Cloud Services",color:"data",deprecated:!0,initialize:function(){this._internal},getInspectInfo(){},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter:function(){return this._internal.error}}},inputs:{send:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleSendEmailVerification()}},email:{type:"string",displayName:"Email",group:"General",set:function(e){this._internal.email=e}}},methods:{setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-send-email-verification-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-send-email-verification-warning")},scheduleSendEmailVerification:function(){this._internal,this.sendScheduled!==!0&&(this.sendScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.sendScheduled=!1,UserService.instance.sendEmailVerification({email:this._internal.email,success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}};const SendEmailVerification={node:SendEmailVerificationNodeDefinition,setup:function(e,t){}};var ResetPasswordNodeDefinition={name:"net.noodl.user.ResetPassword",docs:"https://docs.noodl.net/nodes/data/user/reset-password",displayNodeName:"Reset Password",category:"Cloud Services",color:"data",deprecated:!0,initialize:function(){this._internal},getInspectInfo(){},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter:function(){return this._internal.error}}},inputs:{reset:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleResetPassword()}},token:{type:"string",displayName:"Token",group:"General",set:function(e){this._internal.token=e}},username:{type:"string",displayName:"Username",group:"General",set:function(e){this._internal.username=e}},newPassword:{type:"string",displayName:"New Password",group:"General",set:function(e){this._internal.newPassword=e}}},methods:{setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-verify-email-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-verify-email-warning")},scheduleResetPassword:function(){this._internal,this.resetPasswordScheduled!==!0&&(this.resetPasswordScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.resetPasswordScheduled=!1,UserService.instance.resetPassword({token:this._internal.token,username:this._internal.username,newPassword:this._internal.newPassword,success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}};const ResetPassword={node:ResetPasswordNodeDefinition,setup:function(e,t){}};var RequestPasswordResetNodeDefinition={name:"net.noodl.user.RequestPasswordReset",docs:"https://docs.noodl.net/nodes/data/user/request-password-reset",displayNodeName:"Request Password Reset",category:"Cloud Services",color:"data",deprecated:!0,initialize:function(){this._internal},getInspectInfo(){},outputs:{success:{type:"signal",displayName:"Success",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Error",getter:function(){return this._internal.error}}},inputs:{send:{displayName:"Do",group:"Actions",valueChangedToTrue:function(){this.scheduleRequestPasswordReset()}},email:{type:"string",displayName:"Email",group:"General",set:function(e){this._internal.email=e}}},methods:{setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"user-send-email-verification-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"user-send-email-verification-warning")},scheduleRequestPasswordReset:function(){this._internal,this.sendScheduled!==!0&&(this.sendScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{this.sendScheduled=!1,UserService.instance.requestPasswordReset({email:this._internal.email,success:()=>{this.sendSignalOnOutput("success")},error:e=>{this.setError(e)}})}))}}};const RequestPasswordReset={node:RequestPasswordResetNodeDefinition,setup:function(e,t){}};function _makeRequest(e,t){var n=new XMLHttpRequest;n.onreadystatechange=function(){if(n.readyState===4){var r;try{r=JSON.parse(n.response)}catch{}n.status===200||n.status===201?t.success(r):t.error(r)}},n.open(t.method||"GET",t.endpoint+e,!0),n.setRequestHeader("X-Parse-Application-Id",t.appId),n.setRequestHeader("Content-Type","application/json");var o=localStorage["Parse/"+t.appId+"/currentUser"];if(o!==void 0)try{const r=JSON.parse(o);n.setRequestHeader("X-Parse-Session-Token",r.sessionToken)}catch{}n.send(JSON.stringify(t.content))}var CloudFunctionNode={name:"Cloud Function",category:"Cloud Services",color:"data",usePortAsLabel:"functionName",docs:"https://docs.noodl.net/nodes/data/cloud-data/cloud-function",deprecated:!0,initialize:function(){this._internal.paramsValues={}},getInspectInfo(){const e=this._internal.lastCallResult;return e?[{type:"value",value:e}]:"[Not executed yet]"},inputs:{functionName:{type:"string",displayName:"Function Name",group:"General",set:function(e){this._internal.functionName=e}},params:{group:"Parameters",type:{name:"stringlist",allowEditOnly:!0},set:function(e){this._internal.params=e}},call:{type:"signal",displayName:"Call",group:"Actions",valueChangedToTrue:function(){this.scheduleCall()}}},outputs:{success:{type:"signal",displayName:"Success",group:"Signals"},failure:{type:"signal",displayName:"Failure",group:"Signals"},result:{type:"*",displayName:"Result",group:"Output",getter:function(){return this._internal.result}}},methods:{registerOutputIfNeeded:function(e){this.hasOutput(e)},setParamsValue:function(e,t){this._internal.paramsValues[e]=t},registerInputIfNeeded:function(e){this.hasInput(e)||e.startsWith("pm-")&&this.registerInput(e,{set:this.setParamsValue.bind(this,e.substring(3))})},scheduleCall:function(){var e=this._internal;e.hasScheduledCall||(e.hasScheduledCall=!0,this.scheduleAfterInputsHaveUpdated(this.doCall.bind(this)))},doCall:function(){this._internal.hasScheduledCall=!1;const e=Runtime.instance.getMetaData("cloudservices");if(e===void 0){console.log("No cloud services defined in this project."),this._internal.lastCallResult={status:"failure",res:"No active cloud services in this project"},this.sendSignalOnOutput("failure");return}var t=e.appId,n=e.endpoint;_makeRequest("/functions/"+encodeURIComponent(this._internal.functionName),{appId:t,endpoint:n,content:this._internal.paramsValues,method:"POST",success:r=>{var r=r.result;if(r===void 0){this.sendSignalOnOutput("failure");return}this._internal.result=CloudStore._deserializeJSON(r),this.flagOutputDirty("result"),this._internal.lastCallResult={status:"success",result:this._internal.result},this.sendSignalOnOutput("success")},error:o=>{this._internal.lastCallResult={status:"failure",res:o},this.sendSignalOnOutput("failure")}})}}};const CloudFunction={node:CloudFunctionNode,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){function r(){var s=[],a=o.parameters.params;if(a!==void 0){a=a.split(",");for(var l in a){var u=a[l];s.push({type:"*",plug:"input",group:"Parameters",name:"pm-"+u,displayName:u})}}e.editorConnection.sendDynamicPorts(o.id,s)}r(),o.on("parameterUpdated",function(s){s.name==="params"&&r()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.Cloud Function",function(o){n(o)});for(const o of t.getNodesWithType("Cloud Function"))n(o)})}},ComponentState={name:"Component State",displayNodeName:"Component Object",category:"Component Utilities",color:"component",docs:"https://docs.noodl.net/nodes/component-utilities/component-object",deprecated:!0,initialize:function(){this._internal.inputValues={},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(){const e=this._internal.model.data;return Object.keys(e).map(t=>({type:"text",value:t+": "+e[t]}))},inputs:{properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set(e){}},store:{displayName:"Set",group:"Actions",valueChangedToTrue(){this.scheduleStore()}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue(){this.scheduleFetch()}}},outputs:{changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"},stored:{type:"signal",displayName:"Stored",group:"Events"}},methods:{scheduleStore(){if(!this.hasScheduledStore){this.hasScheduledStore=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledStore=!1;for(var t in e.inputValues)e.model.set(t,e.inputValues[t],{resolve:!0});this.sendSignalOnOutput("stored")})}},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))return;const t=e.split("-"),n=t[t.length-1];e.startsWith("value-")&&this.registerInput(e,{set(o){this._internal.inputValues[n]=o,this.isInputConnected("store")===!1&&this.scheduleStore()}})}}};function updatePorts$4(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 ComponentState$1={node:ComponentState,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Component State",n=>{updatePorts$4(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",o=>{(o.name==="properties"||o.name.startsWith("type-"))&&updatePorts$4(n.id,n.parameters,e.editorConnection)})})}},graphEventEmitter=new eventsExports.EventEmitter;graphEventEmitter.setMaxListeners(1e6);const ParentComponentState={name:"Parent Component State",displayNodeName:"Parent Component Object",category:"Component Utilities",color:"component",docs:"https://docs.noodl.net/nodes/component-utilities/parent-component-object",deprecated:!0,initialize(){this._internal.inputValues={},this._internal.onModelChangedCallback=e=>{this.isInputConnected("fetch")!==!0&&(this.hasOutput(e.name)&&this.flagOutputDirty(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.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){}},store:{displayName:"Set",group:"Actions",valueChangedToTrue(){this.scheduleStore()}},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"},stored:{type:"signal",displayName:"Stored",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("Component State").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(n)&&this.flagOutputDirty(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});this.sendSignalOnOutput("stored")}})}},_onNodeDeleted(){Node.prototype._onNodeDeleted.call(this),graphEventEmitter.off("componentStateNodesChanged",this.onComponentStateNodesChanged),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},registerOutputIfNeeded(e){this.hasOutput(e)||this.registerOutput(e,{get(){if(this._internal.model)return this._internal.model.get(e,{resolve:!0})}})},registerInputIfNeeded:function(e){this.hasInput(e)||this.registerInput(e,{set(t){this._internal.inputValues[e]=t,this.isInputConnected("store")===!1&&this.scheduleStore()}})}}};function updatePorts$3(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: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 ParentComponentState$1={node:ParentComponentState,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||(t.on("nodeAdded.Parent Component State",n=>{updatePorts$3(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",o=>{updatePorts$3(n.id,n.parameters,e.editorConnection)})}),t.on("nodeAdded.Component State",n=>{setTimeout(()=>{graphEventEmitter.emit("componentStateNodesChanged")},0)}),t.on("nodeRemoved.Component State",n=>{setTimeout(()=>{graphEventEmitter.emit("componentStateNodesChanged")})}))}};var ModelNodeDefinition$1={name:"Model",docs:"https://docs.noodl.net/nodes/data/object",displayNodeName:"Object",shortDesc:"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.",category:"Data",usePortAsLabel:"modelId",color:"data",deprecated:!0,initialize:function(){var e=this._internal;e.inputValues={};var t=this;this._internal.onModelChangedCallback=function(n){t.isInputConnected("fetch")!==!0&&(t.hasOutput(n.name)&&t.flagOutputDirty(n.name),t.hasOutput("changed-"+n.name)&&t.sendSignalOnOutput("changed-"+n.name),t.sendSignalOnOutput("changed"))}},getInspectInfo(){const e=this._internal.model;if(!e)return"[No Object]";const t=[{type:"text",value:"Id: "+e.getId()}],n=this._internal.model.data;return t.concat(Object.keys(n).map(o=>({type:"text",value:o+": "+n[o]})))},outputs:{id:{type:"string",displayName:"Id",group:"General",getter:function(){return this._internal.model?this._internal.model.getId():this._internal.modelId}},stored:{type:"signal",displayName:"Stored",group:"Events"},changed:{type:"signal",displayName:"Changed",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"},created:{type:"signal",displayName:"Created",group:"Events"}},inputs:{modelId:{type:{name:"string",identifierOf:"ModelName",identifierDisplayName:"Object Ids"},displayName:"Id",group:"General",set:function(e){e instanceof Model&&(e=e.getId()),this._internal.modelId=e,this.isInputConnected("fetch")===!1?this.setModelID(e):this.flagOutputDirty("id")}},properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set:function(e){}},new:{displayName:"New",group:"Actions",valueChangedToTrue:function(){this.scheduleNew()}},store:{displayName:"Set",group:"Actions",valueChangedToTrue:function(){this.scheduleStore()}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.scheduleSetModel()}},clear:{displayName:"Clear",group:"Actions",valueChangedToTrue:function(){var e=this._internal;if(e.model)for(var t in e.inputValues)e.model.set(t,void 0,{resolve:!0})}}},prototypeExtensions:{scheduleStore:function(){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});this.sendSignalOnOutput("stored")}})}},scheduleNew:function(){if(!this.hasScheduledNew){this.hasScheduledNew=!0;var e=this._internal;this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledNew=!1;const t=Model.get();for(var n in e.inputValues)t.set(n,e.inputValues[n],{resolve:!0});this.setModel(t),this.sendSignalOnOutput("created"),this.sendSignalOnOutput("stored")})}},scheduleSetModel:function(){this.hasScheduledSetModel||(this.hasScheduledSetModel=!0,this._internal,this.scheduleAfterInputsHaveUpdated(()=>{this.hasScheduledSetModel=!1,this.setModelID(this._internal.modelId)}))},setModelID:function(e){var t=Model.get(e);this.setModel(t),this.sendSignalOnOutput("fetched")},setModel:function(e){this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback),this._internal.model=e,this.flagOutputDirty("id"),e.on("change",this._internal.onModelChangedCallback);for(var t in e.data)this.hasOutput(t)&&this.flagOutputDirty(t)},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},registerOutputIfNeeded:function(e){this.hasOutput(e)||this.registerOutput(e,{getter:userOutputGetter$2.bind(this,e)})},registerInputIfNeeded:function(e){this.hasInput(e)||this.registerInput(e,{set:userInputSetter$2.bind(this,e)})}}};function userOutputGetter$2(e){return this._internal.model?this._internal.model.get(e,{resolve:!0}):void 0}function userInputSetter$2(e,t){if(this._internal.inputValues[e]=t,this.isInputConnected("store")===!1&&this.isInputConnected("new")===!1){const n=this._internal.model;(n?n.get(e)!==t:!0)&&this.scheduleStore()}}function updatePorts$2(e,t,n){var o=[],r=t.properties;if(r){r=r?r.split(","):void 0;for(var s in r){var a=r[s];o.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name: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 ModelNode={node:ModelNodeDefinition$1,setup:function(e,t){!e.editorConnection||!e.editorConnection.isRunningLocally()||t.on("nodeAdded.Model",function(n){updatePorts$2(n.id,n.parameters,e.editorConnection),n.on("parameterUpdated",function(o){updatePorts$2(n.id,n.parameters,e.editorConnection)})})}},VariableNodeDefinition={name:"Variable",docs:"https://docs.noodl.net/nodes/data/variable",category:"Data",usePortAsLabel:"name",color:"data",deprecated:!0,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}},stored:{type:"signal",displayName:"Stored",group:"Events"},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"))}},store:{displayName:"Set",group:"Actions",valueChangedToTrue:function(){this.scheduleStore()}},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.isInputConnected("store")===!1&&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),this.sendSignalOnOutput("stored")})}},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)}}},VariableNode={node:VariableNodeDefinition},GyroscopeNode={name:"Gyroscope",docs:"https://docs.noodl.net/nodes/sensors/device-orientation",shortDesc:"The orientation of a device. Works on phones, tablets and other devices with the required sensors.",displayNodeName:"Device Orientation",category:"Sensors",deprecated:!0,initialize:function(){this._internal.alpha=0,this._internal.beta=0,this._internal.gamma=0;var e=onDeviceOrientation.bind(this);window.addEventListener("deviceorientation",e),this.context.eventEmitter.once("applicationDataReloaded",function(){window.removeEventListener("deviceorientation",e)})},outputs:{rotationX:{type:"number",displayName:"Rotation X",getter:function(){return-this._internal.beta}},rotationY:{type:"number",displayName:"Rotation Y",getter:function(){return this._internal.gamma}},rotationZ:{type:"number",displayName:"Rotation Z",getter:function(){return-this._internal.alpha}}}};function onDeviceOrientation(e){e.alpha!==this._internal.alpha&&(this._internal.alpha=e.alpha,this.flagOutputDirty("rotationZ")),e.beta!==this._internal.beta&&(this._internal.beta=e.beta,this.flagOutputDirty("rotationX")),e.gamma!==this._internal.gamma&&(this._internal.gamma=e.gamma,this.flagOutputDirty("rotationY"))}const Gyroscope={node:GyroscopeNode},GlobalsNode={name:"Globals",shortDesc:"A node used to communicate values across the project.",category:"Utilities",color:"component",deprecated:!0,initialize:function(){this._internal.listeners=[]},panels:[{name:"PortEditor",context:["select","connectTo","connectFrom"],title:"Globals",plug:"input/output",type:{name:"*"}}],prototypeExtensions:{_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this);for(var e=this.context.globalsEventEmitter,t=0;t<this._internal.listeners.length;t++){var n=this._internal.listeners[t];e.removeListener(n.name,n.listener)}this._internal.listeners=[]},_newOutputValueReceived:{value:function(e){this._cachedInputValues[e]=this.context.globalValues[e],this.flagOutputDirty(e)}},registerInputIfNeeded:{value:function(e){var t=this;this.hasInput(e)||this.registerInput(e,{set:t.context.setGlobalValue.bind(t.context,e)})}},registerOutputIfNeeded:{value:function(e){if(!this.hasOutput(e)){var t=this._newOutputValueReceived.bind(this,e),n=this.context.globalsEventEmitter;this._internal.listeners.push({name:e,listener:t}),n.on(e,t),this.registerOutput(e,{getter:function(){return this.context.globalValues[e]}})}}}}},Globals={node:GlobalsNode},SignalToIndexNode={name:"Signal To Index",docs:"https://docs.noodl.net/nodes/logic/signal-to-index",shortDesc:"Maps signal inputs to their index value.",category:"Logic",deprecated:!0,initialize:function(){this._internal.currentIndex=0},getInspectInfo(){return"Index: "+this._internal.currentIndex},numberedInputs:{input:{type:"boolean",displayPrefix:"Signal",createSetter(e){return createSetter({valueChangedToTrue:this.onValueChangedToTrue.bind(this,e)})},selectors:{startIndex:{displayName:"Start Index",set(e){this._internal.currentIndex=e,this.flagOutputDirty("index")}}}}},outputs:{index:{displayName:"Index",type:"number",getter:function(){return this._internal.currentIndex}},signalTriggered:{displayName:"Signal Triggered",type:"signal"}},prototypeExtensions:{onValueChangedToTrue:function(e){this.sendSignalOnOutput("signalTriggered"),this._internal.currentIndex!==e&&(this._internal.currentIndex=e,this.flagOutputDirty("index"))}}},SignalToIndex={node:SignalToIndexNode},NumberBlend={name:"Number Blend",docs:"https://docs.noodl.net/nodes/interpolation/number-blend",shortDesc:"Computes a result output based on blending (linearly interpolating) between the inputs.",category:"Interpolation",deprecated:!0,initialize:function(){var e=this._internal;e.inputs=[],e.blendValue=0,e.result=0,e.clamp=!1},getInspectInfo(){return this._internal.result},prototypeExtensions:{updateResult:function(){var e=this._internal.inputs;if(e.length===0)return 0;var t=Math.floor(this._internal.blendValue),n=this._internal.blendValue-t;t>=e.length-1?this._internal.clamp?(t=e.length-1,n=0):(n+=t-(e.length-1),t=e.length-1):t<=0&&(this._internal.clamp?(t=0,n=0):(n+=t,t=0)),n===0||e.length===1?this._internal.result=e[t]:t===e.length-1&&n>0?this._internal.result=EaseCurves.linear(e[t-1],e[t],n+1):this._internal.result=EaseCurves.linear(e[t],e[t+1],n),this.flagOutputDirty("result")}},numberedInputs:{input:{type:"number",displayPrefix:"Number",createSetter(e){return function(t){const n=this._internal.inputs;n[e]!==t&&(n[e]=t||0,this.updateResult())}}}},inputs:{blendValue:{type:"number",displayName:"Blend Value",default:0,set:function(e){this._internal.blendValue=e,this.updateResult()}},clamp:{type:"boolean",displayName:"Clamp",default:!1,set:function(e){this._internal.clamp=!!e,this.updateResult()}}},outputs:{result:{type:"number",displayName:"Result",getter:function(){return this._internal.result}}}},NumberBlend$1={node:NumberBlend},StringSelectorNode={name:"String Selector",displayNodeName:"Index To String",shortDesc:"Choose between multiple strings.",category:"Utilities",deprecated:!0,initialize:function(){this._internal.inputs=[],this._internal.currentSelectedIndex=0,this._internal.indexChanged=!1},getInspectInfo(){return this._internal.inputs[this._internal.currentSelectedIndex]},numberedInputs:{input:{type:"string",displayPrefix:"String for ",group:"Inputs",createSetter:function(e){return function(t){t=t?t.toString():"",this._internal.inputs[e]=t,this._internal.currentSelectedIndex===e&&this.flagOutputDirty("currentValue")}}}},inputs:{index:{type:{name:"number"},displayName:"Index",default:0,set:function(e){e=e|0,this._internal.currentSelectedIndex=e,this.flagOutputDirty("currentValue"),this.sendSignalOnOutput("indexChanged")}}},outputs:{currentValue:{type:"string",displayName:"Current Value",group:"Value",getter:function(){return this._internal.inputs[this._internal.currentSelectedIndex]}},indexChanged:{type:"signal",displayName:"Index Changed",group:"Signals"}}},StringSelector={node:StringSelectorNode};function SubAnimation(e){this.name=e.name,this.startValue=0,this.endValue=0,this.currentValue=void 0,this.startMode="implicit",this.ease=e.ease,this.node=e.node,this.hasSampledStartValue=!1;var t=this;this.animation=e.node.context.timerScheduler.createTimer({startValue:0,endValue:0,onRunning:function(n){var o=t.ease(this.startValue,this.endValue,n);t.setCurrentValue(o)}}),this.animation.startValue=0,this.animation.endValue=0}Object.defineProperties(SubAnimation.prototype,{setCurrentValue:{value:function(e){this.currentValue=e,this.node.flagOutputDirty(this.name)}},play:{value:function(e,t){if(e===void 0&&(console.log("Animation warning, start value is undefined"),e=0),t===void 0){console.error("Animation error, start:",e,"end:",t);return}var n=this.animation;n.startValue=e,this.setCurrentValue(e),n.endValue=t,n.duration=this.node._internal.duration,n.start()}},playToEnd:{value:function(){this.hasConnections()!==!1&&(this.updateStartValue(),this.play(this.getTargetsCurrentValue(),this.endValue))}},playToStart:{value:function(){this.hasConnections()!==!1&&(this.updateStartValue(),this.play(this.getTargetsCurrentValue(),this.startValue))}},replayToEnd:{value:function(){this.hasConnections()!==!1&&(this.updateStartValue(),this.play(this.startValue,this.endValue))}},replayToStart:{value:function(){this.hasConnections()!==!1&&this.play(this.endValue,this.startValue)}},hasConnections:{value:function(){return this.node.getOutput(this.name).hasConnections()}},getTargetsCurrentValue:{value:function(){var e=this.node.getOutput(this.name).connections;const t=e[0].node.getInputValue(e[0].inputPortName);return t instanceof Object&&t.hasOwnProperty("value")?t.value:t}},updateStartValue:{value:function(){this.startMode!=="implicit"||this.hasSampledStartValue||(this.hasSampledStartValue=!0,this.startValue=this.getTargetsCurrentValue())}},stop:{value:function(){this.animation.stop(),this.setCurrentValue(void 0)}},jumpToStart:{value:function(){this.animation.stop(),this.setCurrentValue(this.startValue)}},jumpToEnd:{value:function(){this.animation.stop(),this.setCurrentValue(this.endValue)}}});var easeEnum=[{value:"easeOut",label:"Ease Out"},{value:"easeIn",label:"Ease In"},{value:"linear",label:"Linear"},{value:"easeInOut",label:"Ease In Out"},{value:"cubicBezier",label:"Cubic Bezier"}],defaultDuration$1=300,AnimationNode={name:"Animation",docs:"https://docs.noodl.net/nodes/animation/animation",shortDesc:"Node that can animate any number of values, with different types of easing curves.",category:"Animation",deprecated:!0,initialize:function(){var e=this._internal;e.duration=defaultDuration$1,e.ease=EaseCurves.easeOut,e._isPlayingToEnd=!1,e.animations=[],e.cubicBezierPoints=[0,0,0,0],e.cubicBezierFunction=void 0;var t=this;e.animation=this.context.timerScheduler.createTimer({onFinish:function(){e._isPlayingToEnd===!1?t.sendSignalOnOutput("hasReachedStart"):t.sendSignalOnOutput("hasReachedEnd")}})},inputs:{duration:{index:0,type:"number",displayName:"Duration (ms)",group:"Animation Properties",default:defaultDuration$1,set:function(e){this._internal.duration=e}},easingCurve:{index:10,type:{name:"enum",enums:easeEnum},group:"Animation Properties",displayName:"Easing Curve",default:"easeOut",set:function(e){var t;e==="cubicBezier"?(this.updateCubicBezierFunction(),t=this._internal.cubicBezierFunction):t=EaseCurves[e],this._internal.ease=t}},playToEnd:{index:20,group:"Play",displayName:"To End",editorName:"Play To End",valueChangedToTrue:function(){this._internal._isPlayingToEnd=!0;var e=this._internal.animation,t=this._internal.animations,n=this;this.scheduleAfterInputsHaveUpdated(function(){e.duration=n._internal.duration,e.start();for(var o=0;o<t.length;o++)t[o].ease=n._internal.ease,t[o].playToEnd()})}},playToStart:{index:21,group:"Play",displayName:"To Start",editorName:"Play To Start",valueChangedToTrue:function(){this._internal._isPlayingToEnd=!1;var e=this._internal.animation,t=this._internal.animations,n=this;this.scheduleAfterInputsHaveUpdated(function(){e.duration=n._internal.duration,e.start();for(var o=0;o<t.length;o++)t[o].ease=n._internal.ease,t[o].playToStart()})}},replayToEnd:{index:22,group:"Play",displayName:"From Start To End",editorName:"Play From Start To End",valueChangedToTrue:function(){var e=this._internal.animation,t=this._internal.animations,n=this;this._internal._isPlayingToEnd=!0,this.scheduleAfterInputsHaveUpdated(function(){e.duration=n._internal.duration,e.start();for(var o=0;o<t.length;o++)t[o].ease=n._internal.ease,t[o].replayToEnd()})}},replayToStart:{index:23,group:"Play",displayName:"From End To Start",editorName:"Play From End To Start",valueChangedToTrue:function(){this._internal._isPlayingToEnd=!1;var e=this._internal.animation,t=this._internal.animations,n=this;this.scheduleAfterInputsHaveUpdated(function(){e.duration=n._internal.duration,e.start();for(var o=0;o<t.length;o++)t[o].ease=n._internal.ease,t[o].replayToStart()})}},stop:{index:60,group:"Instant Actions",displayName:"Stop",valueChangedToTrue:function(){var e=this._internal.animation,t=this._internal.animations;e.stop();for(var n=0;n<t.length;n++)t[n].stop()}},jumpToStart:{index:61,group:"Instant Actions",displayName:"Jump To Start",valueChangedToTrue:function(){for(var e=this._internal.animations,t=0;t<e.length;t++)e[t].jumpToStart();this.sendSignalOnOutput("hasReachedStart")}},jumpToEnd:{index:62,group:"Instant Actions",displayName:"Jump To End",valueChangedToTrue:function(){for(var e=this._internal.animations,t=0;t<e.length;t++)e[t].jumpToEnd();this.sendSignalOnOutput("hasReachedEnd")}},cubicBezierP1X:{displayName:"P1 X",group:"Cubic Bezier",type:{name:"number"},index:11,set:function(e){this._internal.cubicBezierPoints[0]=Math.min(1,Math.max(0,e)),this.updateCubicBezierFunction()}},cubicBezierP1Y:{displayName:"P1 Y",group:"Cubic Bezier",type:{name:"number"},index:12,set:function(e){this._internal.cubicBezierPoints[1]=e,this.updateCubicBezierFunction()}},cubicBezierP2X:{displayName:"P2 X",group:"Cubic Bezier",type:{name:"number"},index:13,set:function(e){this._internal.cubicBezierPoints[2]=Math.min(1,Math.max(0,e)),this.updateCubicBezierFunction()}},cubicBezierP2Y:{displayName:"P2 Y",group:"Cubic Bezier",type:{name:"number"},index:14,set:function(e){this._internal.cubicBezierPoints[3]=e,this.updateCubicBezierFunction()}}},outputs:{hasReachedStart:{type:"signal",group:"Signals",displayName:"Has Reached Start"},hasReachedEnd:{type:"signal",group:"Signals",displayName:"Has Reached End"}},dynamicports:[{condition:"easingCurve = cubicBezier",inputs:["cubicBezierP1X","cubicBezierP1Y","cubicBezierP2X","cubicBezierP2Y"]},{name:"expand/basic",indexStep:100,template:[{name:"{{portname}}.startMode",type:{name:"enum",enums:[{value:"explicit",label:"Explicit"},{value:"implicit",label:"Implicit"}],allowEditOnly:!0},plug:"input",group:"{{portname}} Animation",displayName:"Start Mode",default:"implicit",index:1e3},{name:"{{portname}}.endValue",type:"number",plug:"input",group:"{{portname}} Animation",displayName:"End Value",editorName:"End Value | {{portname}} ",default:0,index:1002}]},{name:"expand/basic",condition:"'{{portname}}.startMode' = explicit",indexStep:100,template:[{name:"{{portname}}.startValue",plug:"input",type:"number",displayName:"Start Value",editorName:"Start Value | {{portname}}",group:"{{portname}} Animation",default:0,index:1001}]}],panels:[{name:"PortEditor",title:"Animations",plug:"output",type:{name:"number"},group:"Animation Values"}],prototypeExtensions:{updateCubicBezierFunction:{value:function(){var e=this._internal.cubicBezierPoints,t=BezierEasing(e);this._internal.cubicBezierFunction=function(n,o,r){return EaseCurves.linear(n,o,t.get(r))},this._internal.ease=this._internal.cubicBezierFunction}},_registerAnimationGroup:{value:function(e){var t=new SubAnimation({node:this,ease:this._internal.ease,name:e});this._internal.animations.push(t);var n={};n[e+".startMode"]={set:function(o){t.startMode=o}},n[e+".startValue"]={default:0,set:function(o){t.startValue=o}},n[e+".endValue"]={default:0,set:function(o){t.endValue=o}},this.registerInputs(n),this.registerOutput(e,{getter:function(){return t.currentValue}})}},registerInputIfNeeded:{value:function(e){if(!this.hasInput(e)){var t=e.indexOf("."),n=e.substr(0,t);this.hasOutput(n)||this._registerAnimationGroup(n)}}},registerOutputIfNeeded:{value:function(e){this.hasOutput(e)||this._registerAnimationGroup(e)}}}};const Animation={node:AnimationNode},defaultDuration=300,TransitionNode={name:"Transition",docs:"https://docs.noodl.net/nodes/animation/transition",shortDesc:"This node can interpolate smooothely for the current value to a target value.",category:"Animation",deprecated:!0,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,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")}})},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()}}},"overrideCurrentValue.value":{type:{name:"number"},group:"Override Value",displayName:"Override Value",editorName:"Value|Override Value",set:function(e){this._internal.overrideValue=e}},"overrideCurrentValue.do":{group:"Override Value",displayName:"Do",editorName:"Do|Override Value",valueChangedToTrue:function(){setCurrentNumber.call(this,this._internal.overrideValue)}},duration:{type:"number",group:"Parameters",displayName:"Duration",default:defaultDuration,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"}}};function setCurrentNumber(e){var t=this._internal._animation;t.stop(),t.startValue=e,this.scheduleAfterInputsHaveUpdated(function(){t.endValue!==e&&t.start()}),this._internal.currentNumber=e,this.flagOutputDirty("currentValue")}const Transition={node:TransitionNode};var lodash_isequal={exports:{}};lodash_isequal.exports;var hasRequiredLodash_isequal;function requireLodash_isequal(){return hasRequiredLodash_isequal||(hasRequiredLodash_isequal=1,function(e,t){var n=200,o="__lodash_hash_undefined__",r=1,s=2,a=9007199254740991,l="[object Arguments]",u="[object Array]",d="[object AsyncFunction]",h="[object Boolean]",f="[object Date]",g="[object Error]",b="[object Function]",_="[object GeneratorFunction]",T="[object Map]",A="[object Number]",v="[object Null]",I="[object Object]",k="[object Promise]",N="[object Proxy]",w="[object RegExp]",E="[object Set]",F="[object String]",L="[object Symbol]",B="[object Undefined]",H="[object WeakMap]",J="[object ArrayBuffer]",ie="[object DataView]",pe="[object Float32Array]",xe="[object Float64Array]",Me="[object Int8Array]",ae="[object Int16Array]",Ie="[object Int32Array]",Te="[object Uint8Array]",Ne="[object Uint8ClampedArray]",me="[object Uint16Array]",Ee="[object Uint32Array]",Ae=/[\\^$.*+?()[\]{}|]/g,qe=/^\[object .+?Constructor\]$/,Fe=/^(?:0|[1-9]\d*)$/,Y={};Y[pe]=Y[xe]=Y[Me]=Y[ae]=Y[Ie]=Y[Te]=Y[Ne]=Y[me]=Y[Ee]=!0,Y[l]=Y[u]=Y[J]=Y[h]=Y[ie]=Y[f]=Y[g]=Y[b]=Y[T]=Y[A]=Y[I]=Y[w]=Y[E]=Y[F]=Y[H]=!1;var ve=typeof commonjsGlobal=="object"&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,Ve=typeof self=="object"&&self&&self.Object===Object&&self,re=ve||Ve||Function("return this")(),Oe=t&&!t.nodeType&&t,$e=Oe&&!0&&e&&!e.nodeType&&e,Le=$e&&$e.exports===Oe,fe=Le&&ve.process,Xe=function(){try{return fe&&fe.binding&&fe.binding("util")}catch{}}(),Be=Xe&&Xe.isTypedArray;function De(m,P){for(var D=-1,W=m==null?0:m.length,Q=0,X=[];++D<W;){var ne=m[D];P(ne,D,m)&&(X[Q++]=ne)}return X}function Ue(m,P){for(var D=-1,W=P.length,Q=m.length;++D<W;)m[Q+D]=P[D];return m}function je(m,P){for(var D=-1,W=m==null?0:m.length;++D<W;)if(P(m[D],D,m))return!0;return!1}function Re(m,P){for(var D=-1,W=Array(m);++D<m;)W[D]=P(D);return W}function We(m){return function(P){return m(P)}}function st(m,P){return m.has(P)}function K(m,P){return m?.[P]}function et(m){var P=-1,D=Array(m.size);return m.forEach(function(W,Q){D[++P]=[Q,W]}),D}function tt(m,P){return function(D){return m(P(D))}}function le(m){var P=-1,D=Array(m.size);return m.forEach(function(W){D[++P]=W}),D}var ye=Array.prototype,ue=Function.prototype,Se=Object.prototype,ge=re["__core-js_shared__"],ze=ue.toString,Z=Se.hasOwnProperty,Ce=function(){var m=/[^.]+$/.exec(ge&&ge.keys&&ge.keys.IE_PROTO||"");return m?"Symbol(src)_1."+m:""}(),c=Se.toString,p=RegExp("^"+ze.call(Z).replace(Ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=Le?re.Buffer:void 0,S=re.Symbol,O=re.Uint8Array,M=Se.propertyIsEnumerable,U=ye.splice,j=S?S.toStringTag:void 0,z=Object.getOwnPropertySymbols,q=y?y.isBuffer:void 0,C=tt(Object.keys,Object),x=lt(re,"DataView"),V=lt(re,"Map"),G=lt(re,"Promise"),ee=lt(re,"Set"),oe=lt(re,"WeakMap"),de=lt(Object,"create"),ke=ot(x),Ye=ot(V),St=ot(G),Je=ot(ee),at=ot(oe),ut=S?S.prototype:void 0,bt=ut?ut.valueOf:void 0;function nt(m){var P=-1,D=m==null?0:m.length;for(this.clear();++P<D;){var W=m[P];this.set(W[0],W[1])}}function Rt(){this.__data__=de?de(null):{},this.size=0}function kt(m){var P=this.has(m)&&delete this.__data__[m];return this.size-=P?1:0,P}function Mt(m){var P=this.__data__;if(de){var D=P[m];return D===o?void 0:D}return Z.call(P,m)?P[m]:void 0}function At(m){var P=this.__data__;return de?P[m]!==void 0:Z.call(P,m)}function Ft(m,P){var D=this.__data__;return this.size+=this.has(m)?0:1,D[m]=de&&P===void 0?o:P,this}nt.prototype.clear=Rt,nt.prototype.delete=kt,nt.prototype.get=Mt,nt.prototype.has=At,nt.prototype.set=Ft;function He(m){var P=-1,D=m==null?0:m.length;for(this.clear();++P<D;){var W=m[P];this.set(W[0],W[1])}}function Vt(){this.__data__=[],this.size=0}function $t(m){var P=this.__data__,D=ft(P,m);if(D<0)return!1;var W=P.length-1;return D==W?P.pop():U.call(P,D,1),--this.size,!0}function Lt(m){var P=this.__data__,D=ft(P,m);return D<0?void 0:P[D][1]}function Bt(m){return ft(this.__data__,m)>-1}function Ut(m,P){var D=this.__data__,W=ft(D,m);return W<0?(++this.size,D.push([m,P])):D[W][1]=P,this}He.prototype.clear=Vt,He.prototype.delete=$t,He.prototype.get=Lt,He.prototype.has=Bt,He.prototype.set=Ut;function it(m){var P=-1,D=m==null?0:m.length;for(this.clear();++P<D;){var W=m[P];this.set(W[0],W[1])}}function jt(){this.size=0,this.__data__={hash:new nt,map:new(V||He),string:new nt}}function Wt(m){var P=gt(this,m).delete(m);return this.size-=P?1:0,P}function zt(m){return gt(this,m).get(m)}function Ht(m){return gt(this,m).has(m)}function Gt(m,P){var D=gt(this,m),W=D.size;return D.set(m,P),this.size+=D.size==W?0:1,this}it.prototype.clear=jt,it.prototype.delete=Wt,it.prototype.get=zt,it.prototype.has=Ht,it.prototype.set=Gt;function ht(m){var P=-1,D=m==null?0:m.length;for(this.__data__=new it;++P<D;)this.add(m[P])}function qt(m){return this.__data__.set(m,o),this}function Xt(m){return this.__data__.has(m)}ht.prototype.add=ht.prototype.push=qt,ht.prototype.has=Xt;function Ke(m){var P=this.__data__=new He(m);this.size=P.size}function Yt(){this.__data__=new He,this.size=0}function Jt(m){var P=this.__data__,D=P.delete(m);return this.size=P.size,D}function Kt(m){return this.__data__.get(m)}function Qt(m){return this.__data__.has(m)}function Zt(m,P){var D=this.__data__;if(D instanceof He){var W=D.__data__;if(!V||W.length<n-1)return W.push([m,P]),this.size=++D.size,this;D=this.__data__=new it(W)}return D.set(m,P),this.size=D.size,this}Ke.prototype.clear=Yt,Ke.prototype.delete=Jt,Ke.prototype.get=Kt,Ke.prototype.has=Qt,Ke.prototype.set=Zt;function en(m,P){var D=mt(m),W=!D&&mn(m),Q=!D&&!W&&Nt(m),X=!D&&!W&&!Q&&Et(m),ne=D||W||Q||X,se=ne?Re(m.length,String):[],ce=se.length;for(var te in m)Z.call(m,te)&&!(ne&&(te=="length"||Q&&(te=="offset"||te=="parent")||X&&(te=="buffer"||te=="byteLength"||te=="byteOffset")||cn(te,ce)))&&se.push(te);return se}function ft(m,P){for(var D=m.length;D--;)if(Ot(m[D][0],P))return D;return-1}function tn(m,P,D){var W=P(m);return mt(m)?W:Ue(W,D(m))}function dt(m){return m==null?m===void 0?B:v:j&&j in Object(m)?un(m):gn(m)}function Ct(m){return ct(m)&&dt(m)==l}function _t(m,P,D,W,Q){return m===P?!0:m==null||P==null||!ct(m)&&!ct(P)?m!==m&&P!==P:nn(m,P,D,W,_t,Q)}function nn(m,P,D,W,Q,X){var ne=mt(m),se=mt(P),ce=ne?u:Qe(m),te=se?u:Qe(P);ce=ce==l?I:ce,te=te==l?I:te;var be=ce==I,we=te==I,he=ce==te;if(he&&Nt(m)){if(!Nt(P))return!1;ne=!0,be=!1}if(he&&!be)return X||(X=new Ke),ne||Et(m)?Pt(m,P,D,W,Q,X):an(m,P,ce,D,W,Q,X);if(!(D&r)){var _e=be&&Z.call(m,"__wrapped__"),Pe=we&&Z.call(P,"__wrapped__");if(_e||Pe){var Ze=_e?m.value():m,Ge=Pe?P.value():P;return X||(X=new Ke),Q(Ze,Ge,D,W,X)}}return he?(X||(X=new Ke),ln(m,P,D,W,Q,X)):!1}function on(m){if(!Tt(m)||hn(m))return!1;var P=wt(m)?p:qe;return P.test(ot(m))}function rn(m){return ct(m)&&xt(m.length)&&!!Y[dt(m)]}function sn(m){if(!fn(m))return C(m);var P=[];for(var D in Object(m))Z.call(m,D)&&D!="constructor"&&P.push(D);return P}function Pt(m,P,D,W,Q,X){var ne=D&r,se=m.length,ce=P.length;if(se!=ce&&!(ne&&ce>se))return!1;var te=X.get(m);if(te&&X.get(P))return te==P;var be=-1,we=!0,he=D&s?new ht:void 0;for(X.set(m,P),X.set(P,m);++be<se;){var _e=m[be],Pe=P[be];if(W)var Ze=ne?W(Pe,_e,be,P,m,X):W(_e,Pe,be,m,P,X);if(Ze!==void 0){if(Ze)continue;we=!1;break}if(he){if(!je(P,function(Ge,rt){if(!st(he,rt)&&(_e===Ge||Q(_e,Ge,D,W,X)))return he.push(rt)})){we=!1;break}}else if(!(_e===Pe||Q(_e,Pe,D,W,X))){we=!1;break}}return X.delete(m),X.delete(P),we}function an(m,P,D,W,Q,X,ne){switch(D){case ie:if(m.byteLength!=P.byteLength||m.byteOffset!=P.byteOffset)return!1;m=m.buffer,P=P.buffer;case J:return!(m.byteLength!=P.byteLength||!X(new O(m),new O(P)));case h:case f:case A:return Ot(+m,+P);case g:return m.name==P.name&&m.message==P.message;case w:case F:return m==P+"";case T:var se=et;case E:var ce=W&r;if(se||(se=le),m.size!=P.size&&!ce)return!1;var te=ne.get(m);if(te)return te==P;W|=s,ne.set(m,P);var be=Pt(se(m),se(P),W,Q,X,ne);return ne.delete(m),be;case L:if(bt)return bt.call(m)==bt.call(P)}return!1}function ln(m,P,D,W,Q,X){var ne=D&r,se=It(m),ce=se.length,te=It(P),be=te.length;if(ce!=be&&!ne)return!1;for(var we=ce;we--;){var he=se[we];if(!(ne?he in P:Z.call(P,he)))return!1}var _e=X.get(m);if(_e&&X.get(P))return _e==P;var Pe=!0;X.set(m,P),X.set(P,m);for(var Ze=ne;++we<ce;){he=se[we];var Ge=m[he],rt=P[he];if(W)var Dt=ne?W(rt,Ge,he,P,m,X):W(Ge,rt,he,m,P,X);if(!(Dt===void 0?Ge===rt||Q(Ge,rt,D,W,X):Dt)){Pe=!1;break}Ze||(Ze=he=="constructor")}if(Pe&&!Ze){var yt=m.constructor,vt=P.constructor;yt!=vt&&"constructor"in m&&"constructor"in P&&!(typeof yt=="function"&&yt instanceof yt&&typeof vt=="function"&&vt instanceof vt)&&(Pe=!1)}return X.delete(m),X.delete(P),Pe}function It(m){return tn(m,Sn,dn)}function gt(m,P){var D=m.__data__;return pn(P)?D[typeof P=="string"?"string":"hash"]:D.map}function lt(m,P){var D=K(m,P);return on(D)?D:void 0}function un(m){var P=Z.call(m,j),D=m[j];try{m[j]=void 0;var W=!0}catch{}var Q=c.call(m);return W&&(P?m[j]=D:delete m[j]),Q}var dn=z?function(m){return m==null?[]:(m=Object(m),De(z(m),function(P){return M.call(m,P)}))}:bn,Qe=dt;(x&&Qe(new x(new ArrayBuffer(1)))!=ie||V&&Qe(new V)!=T||G&&Qe(G.resolve())!=k||ee&&Qe(new ee)!=E||oe&&Qe(new oe)!=H)&&(Qe=function(m){var P=dt(m),D=P==I?m.constructor:void 0,W=D?ot(D):"";if(W)switch(W){case ke:return ie;case Ye:return T;case St:return k;case Je:return E;case at:return H}return P});function cn(m,P){return P=P??a,!!P&&(typeof m=="number"||Fe.test(m))&&m>-1&&m%1==0&&m<P}function pn(m){var P=typeof m;return P=="string"||P=="number"||P=="symbol"||P=="boolean"?m!=="__proto__":m===null}function hn(m){return!!Ce&&Ce in m}function fn(m){var P=m&&m.constructor,D=typeof P=="function"&&P.prototype||Se;return m===D}function gn(m){return c.call(m)}function ot(m){if(m!=null){try{return ze.call(m)}catch{}try{return m+""}catch{}}return""}function Ot(m,P){return m===P||m!==m&&P!==P}var mn=Ct(function(){return arguments}())?Ct:function(m){return ct(m)&&Z.call(m,"callee")&&!M.call(m,"callee")},mt=Array.isArray;function yn(m){return m!=null&&xt(m.length)&&!wt(m)}var Nt=q||Nn;function vn(m,P){return _t(m,P)}function wt(m){if(!Tt(m))return!1;var P=dt(m);return P==b||P==_||P==d||P==N}function xt(m){return typeof m=="number"&&m>-1&&m%1==0&&m<=a}function Tt(m){var P=typeof m;return m!=null&&(P=="object"||P=="function")}function ct(m){return m!=null&&typeof m=="object"}var Et=Be?We(Be):rn;function Sn(m){return yn(m)?en(m):sn(m)}function bn(){return[]}function Nn(){return!1}e.exports=vn}(lodash_isequal,lodash_isequal.exports)),lodash_isequal.exports}var lodash_isequalExports=requireLodash_isequal();const isEqual=getDefaultExportFromCjs(lodash_isequalExports);var modelPortsHash={},previousProperties={},ModelNodeDefinition={name:"DbModel",docs:"https://docs.noodl.net/nodes/cloud-services/model",displayNodeName:"Model",shortDesc:"Database model",category:"Cloud Services",usePortAsLabel:"$ndlCollectionName",color:"data",deprecated:!0,initialize:function(){var e=this._internal;e.inputValues={},e.relationModelIds={};var t=this;this._internal.onModelChangedCallback=function(n){t.isInputConnected("fetch")||(t.hasOutput(n.name)&&t.flagOutputDirty(n.name),t.hasOutput("changed-"+n.name)&&t.sendSignalOnOutput("changed-"+n.name),t.sendSignalOnOutput("changed"))}},getInspectInfo(){const e=this._internal.model;return e?[{type:"text",value:"Id: "+e.getId()},{type:"value",value:e.data}]:"[No Model]"},outputs:{id:{type:"string",displayName:"Id",group:"General",getter:function(){return this._internal.model?this._internal.model.getId():this._internal.modelId}},saved:{type:"signal",displayName:"Saved",group:"Events"},stored:{type:"signal",displayName:"Stored",group:"Events"},created:{type:"signal",displayName:"Created",group:"Events"},fetched:{type:"signal",displayName:"Fetched",group:"Events"},changed:{type:"signal",displayName:"Changed",group:"Events"},deleted:{type:"signal",displayName:"Deleted",group:"Events"},failure:{type:"signal",displayName:"Failure",group:"Events"},error:{type:"string",displayName:"Error",group:"Events",getter:function(){return this._internal.error}}},inputs:{modelId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Id",group:"General",set:function(e){e instanceof Model&&(e=e.getId()),this._internal.modelId=e,this.isInputConnected("fetch")===!1?this.setModelID(e):this.flagOutputDirty("id")}},properties:{type:{name:"stringlist",allowEditOnly:!0},displayName:"Properties",group:"Properties",set:function(e){}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.scheduleFetch()}},store:{displayName:"Set",group:"Actions",valueChangedToTrue:function(){this.scheduleStore()}},save:{displayName:"Save",group:"Actions",valueChangedToTrue:function(){this.storageSave()}},delete:{displayName:"Delete",group:"Actions",valueChangedToTrue:function(){this.storageDelete()}},new:{displayName:"New",group:"Actions",valueChangedToTrue:function(){this.storageNew()}},insert:{displayName:"Insert",group:"Actions",valueChangedToTrue:function(){this.storageInsert()}}},methods:{setCollectionID:function(e){this._internal.collectionId=e,this.clearWarnings()},setModelID:function(e){var t=Model.get(e);this.setModel(t)},setModel:function(e){this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback),this._internal.model=e,this.flagOutputDirty("id"),e.on("change",this._internal.onModelChangedCallback);for(var t in e.data)this.hasOutput(t)&&this.flagOutputDirty(t);this.sendSignalOnOutput("fetched")},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.model&&this._internal.model.off("change",this._internal.onModelChangedCallback)},scheduleOnce:function(e,t){const n=this,o="hasScheduled"+e;this._internal[o]||(this._internal[o]=!0,this.scheduleAfterInputsHaveUpdated(function(){n._internal[o]=!1,t()}))},_hasChangesPending:function(){const e=this._internal;var t=e.model;for(var n in e.inputValues)if(isEqual(t.data[n],e.inputValues[n]))return!0;return!1},scheduleFetch:function(){var e=this;const t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("Fetch",function(){t.modelId===void 0||t.modelId===""||CloudStore.instance.fetch({collection:t.collectionId,objectId:t.modelId,success:function(n){var o=CloudStore._fromJSON(n,t.collectionId);t.model!==o&&(t.model&&t.model.off("change",t.onModelChangedCallback),t.model=o,o.on("change",t.onModelChangedCallback)),e.flagOutputDirty("id"),delete n.objectId;for(var r in n)e.hasOutput(r)&&e.flagOutputDirty(r);e.sendSignalOnOutput("fetched")},error:function(n){e.setError(n||"Failed to fetch.")}})})},scheduleStore:function(){var e=this,t=this._internal;t.model&&this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("Store",function(){for(var n in t.inputValues)t.model.set(n,t.inputValues[n],{resolve:!0});e.sendSignalOnOutput("stored")})},storageSave:function(){const e=this,t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageSave",function(){if(t.model){var n=t.model;for(var o in t.inputValues)n.set(o,t.inputValues[o],{resolve:!0});CloudStore.instance.save({collection:t.collectionId,objectId:n.getId(),data:n.data,success:function(r){for(var s in r)n.set(s,r[s]);e.sendSignalOnOutput("saved")},error:function(r){e.setError(r||"Failed to save.")}})}})},storageDelete:function(){const e=this;if(!this._internal.model)return;const t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageDelete",function(){CloudStore.instance.delete({collection:t.collectionId,objectId:t.model.getId(),success:function(){t.model.notify("delete"),e.sendSignalOnOutput("deleted")},error:function(n){e.setError(n||"Failed to delete.")}})})},storageInsert:function(){const e=this,t=this._internal;this.checkWarningsBeforeCloudOp()&&this.scheduleOnce("StorageInsert",function(){var n=e._getModelInitData();CloudStore.instance.create({collection:t.collectionId,data:n,success:function(o){const r=CloudStore._fromJSON(o,t.collectionId);e.setModel(r),e.sendSignalOnOutput("created"),e.sendSignalOnOutput("saved")},error:function(o){e.setError(o||"Failed to insert.")}})})},checkWarningsBeforeCloudOp(){return this.clearWarnings(),this._internal.collectionId?!0:(this.setError("No collection name specified"),!1)},setError:function(e){this._internal.error=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure"),this.context.editorConnection&&this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning",{message:e,showGlobally:!0})},clearWarnings(){this.context.editorConnection&&this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"storage-op-warning")},onRelationAdd:function(e){const t=this,n=this._internal;this.scheduleOnce("StorageAddRelation",function(){if(n.model){var o=n.model,r=n.relationModelIds[e];r!==void 0&&CloudStore.instance.addRelation({collection:n.collectionId,objectId:o.getId(),key:e,targetObjectId:r,targetClass:Model.get(r)._class,success:function(s){for(var a in s)o.set(a,s[a]);t.sendSignalOnOutput("$relation-added-"+e)},error:function(s){t.setError(s||"Failed to add relation.")}})}})},onRelationRemove:function(e){const t=this,n=this._internal;this.scheduleOnce("StorageRemoveRelation",function(){if(n.model){var o=n.model,r=n.relationModelIds[e];r!==void 0&&CloudStore.instance.removeRelation({collection:n.collectionId,objectId:o.getId(),key:e,targetObjectId:r,targetClass:Model.get(r)._class,success:function(s){for(var a in s)o.set(a,s[a]);t.sendSignalOnOutput("$relation-removed-"+e)},error:function(s){t.setError(s||"Failed to remove relation.")}})}})},setRelationModelId:function(e,t){this._internal.relationModelIds[e]=t},registerOutputIfNeeded:function(e){if(!this.hasOutput(e)){if(e.startsWith("$relation-added-"))return this.registerOutput(e,{getter:function(){}});if(e.startsWith("$relation-removed-"))return this.registerOutput(e,{getter:function(){}});this.registerOutput(e,{getter:userOutputGetter$1.bind(this,e)})}},_getModelInitData:function(){var e=this._internal,t={};for(var n in e.inputValues)t[n]=e.inputValues[n];if(this._internal.modelInitCode)try{var o=new Function("initialize",this._internal.modelInitCode);o(function(r){for(var s in r)typeof r[s]=="function"?t[s]=r[s]():t[s]=r[s]})}catch(r){console.log("Error while initializing model: "+r)}return t},setModelInitCode:function(e){this._internal.modelInitCode=e},registerInputIfNeeded:function(e){if(this.hasInput(e))return;if(e.startsWith("$relation-add-"))return this.registerInput(e,{set:createSetter({valueChangedToTrue:this.onRelationAdd.bind(this,e.substring(14))})});if(e.startsWith("$relation-remove-"))return this.registerInput(e,{set:createSetter({valueChangedToTrue:this.onRelationRemove.bind(this,e.substring(17))})});if(e.startsWith("$relation-modelid-"))return this.registerInput(e,{set:this.setRelationModelId.bind(this,e.substring(18))});const t={};if(t[e])return this.registerInput(e,{set:createSetter({valueChangedToTrue:t[e]})});const n={$ndlCollectionName:this.setCollectionID.bind(this),$ndlModelInitCode:this.setModelInitCode.bind(this)};if(n[e])return this.registerInput(e,{set:n[e]});this.registerInput(e,{set:userInputSetter$1.bind(this,e)})}}};function userOutputGetter$1(e){return this._internal.model?this._internal.model.get(e,{resolve:!0}):void 0}function userInputSetter$1(e,t){this._internal.inputValues[e]=t}function detectRename(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}}const defaultStorageInitCode=`initialize({
178
178
  // Here you can initialize new models
179
179
  //myProperty:'Some init value',
180
180
  //anotherProperty:function() { return 'Some other value' }
181
181
  })
182
- `;function updatePorts$1(e,t,n,o){var r=[],s=t.properties;if(s){s=s?s.split(","):void 0;for(var a in s){var l=s[a];r.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name:l}),r.push({type:"signal",plug:"output",group:"Events",displayName:"Changed "+l,name:"changed-"+l})}var u=detectRename(previousProperties[e],s);if(previousProperties[e]=s,u)var d={plug:"input/output",patterns:["{{*}}"],before:u.before,after:u.after}}if(r.push({name:"$ndlCollectionName",displayName:"Class",group:"General",type:{name:"enum",enums:o!==void 0?o.map(_=>({value:_.name,label:_.name})):[],allowEditOnly:!0},plug:"input"}),t.$ndlCollectionName&&o){var p=o.find(_=>_.name===t.$ndlCollectionName);if(p&&p.schema&&p.schema.properties){var f=p.schema.properties;for(var g in f){var l=f[g];r.find(T=>T.name===g)||(l.type==="Relation"?(r.push({type:"signal",plug:"input",group:g+" Relation",name:"$relation-add-"+g,displayName:"Add",editorName:g+" | Add"}),r.push({type:"signal",plug:"input",group:g+" Relation",name:"$relation-remove-"+g,displayName:"Remove",editorName:g+" | Remove"}),r.push({type:{name:"string",allowConnectionsOnly:!0},plug:"input",group:g+" Relation",name:"$relation-modelid-"+g,displayName:"Model Id",editorName:g+" | Model Id"}),r.push({type:"signal",plug:"output",group:g+" Relation",name:"$relation-removed-"+g,displayName:"Removed",editorName:g+" | Removed"}),r.push({type:"signal",plug:"output",group:g+" Relation",name:"$relation-added-"+g,displayName:"Added",editorName:g+" | Added"})):(r.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name:g}),r.push({type:"signal",plug:"output",group:"Events",displayName:"Changed "+g,name:"changed-"+g})))}}}r.push({name:"$ndlModelInitCode",displayName:"Initialize",group:"Scripts",type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},default:defaultStorageInitCode,plug:"input"});var b=JSON.stringify(r);modelPortsHash[e]!==b&&(modelPortsHash[e]=b,n.sendDynamicPorts(e,r,{renamed:d}))}const DbModelNode={node:ModelNodeDefinition,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$1(o.id,o.parameters,e.editorConnection,t.getMetaData("dbCollections")),o.on("parameterUpdated",function(r){updatePorts$1(o.id,o.parameters,e.editorConnection,t.getMetaData("dbCollections"))}),t.on("metadataChanged.dbCollections",function(r){CloudStore.invalidateCollections(),updatePorts$1(o.id,o.parameters,e.editorConnection,r)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.DbModel",function(o){n(o)});for(const o of t.getNodesWithType("DbModel"))n(o)})}};function _convertFilterOp(e,t){const n=Object.keys(e);if(n.length===0)return{};if(n.length!==1)return t.error("Filter must only have one key found "+n.join(","));const o={},r=n[0];if(e.and!==void 0&&Array.isArray(e.and))o.$and=e.and.map(g=>_convertFilterOp(g,t));else if(e.or!==void 0&&Array.isArray(e.or))o.$or=e.or.map(g=>_convertFilterOp(g,t));else if(e.idEqualTo!==void 0)o.objectId={$eq:e.idEqualTo};else if(e.idContainedIn!==void 0)o.objectId={$in:e.idContainedIn};else if(e.relatedTo!==void 0){var s=e.relatedTo.id;if(s===void 0)return t.error("Must provide id in relatedTo filter");var a=e.relatedTo.key;if(a===void 0)return t.error("Must provide key in relatedTo filter");var l=Model.get(s);o.$relatedTo={object:{__type:"Pointer",objectId:s,className:l._class},key:a}}else if(typeof e[r]=="object"){const g=e[r];if(g.equalTo!==void 0)o[r]={$eq:g.equalTo};else if(g.notEqualTo!==void 0)o[r]={$ne:g.notEqualTo};else if(g.lessThan!==void 0)o[r]={$lt:g.lessThan};else if(g.greaterThan!==void 0)o[r]={$gt:g.greaterThan};else if(g.lessThanOrEqualTo!==void 0)o[r]={$lte:g.lessThanOrEqualTo};else if(g.greaterThanOrEqualTo!==void 0)o[r]={$gte:g.greaterThanOrEqualTo};else if(g.exists!==void 0)o[r]={$exists:g.exists};else if(g.containedIn!==void 0)o[r]={$in:g.containedIn};else if(g.notContainedIn!==void 0)o[r]={$nin:g.notContainedIn};else if(g.pointsTo!==void 0){var l=Model.get(g.pointsTo);if(CloudStore._collections[t.collectionName])var u=CloudStore._collections[t.collectionName].schema;var d=u&&u.properties&&u.properties[r]?u.properties[r].targetClass:void 0,p=u&&u.properties&&u.properties[r]?u.properties[r].type:void 0;p==="Relation"?o[r]={__type:"Pointer",objectId:g.pointsTo,className:d}:Array.isArray(g.pointsTo)?o[r]={$in:g.pointsTo.map(_=>({__type:"Pointer",objectId:_,className:d}))}:o[r]={$eq:{__type:"Pointer",objectId:g.pointsTo,className:d}}}else if(g.matchesRegex!==void 0)o[r]={$regex:g.matchesRegex,$options:g.options};else if(g.text!==void 0&&g.text.search!==void 0){var f=g.text.search;typeof f=="string"?o[r]={$text:{$search:{$term:f,$caseSensitive:!1}}}:o[r]={$text:{$search:{$term:f.term,$language:f.language,$caseSensitive:f.caseSensitive,$diacriticSensitive:f.diacriticSensitive}}}}}else t.error("Unrecognized filter keys "+n.join(","));return o}var DbCollectionNode={name:"DbCollection",docs:"https://docs.noodl.net/nodes/cloud-services/collection",displayNodeName:"Query Collection",shortDesc:"A database collection.",category:"Cloud Services",usePortAsLabel:"collectionName",color:"data",deprecated:!0,initialize:function(){var e=this,t=!1;this._internal.collectionChangedCallback=function(){t||(t=!0,e.scheduleAfterInputsHaveUpdated(function(){e.sendSignalOnOutput("modified"),e.flagOutputDirty("count"),e.flagOutputDirty("firstItemId"),t=!1}))},this._internal.storageSettings={}},inputs:{},outputs:{id:{type:"string",displayName:"Name",group:"General",getter:function(){return this._internal.name}},items:{type:"array",displayName:"Result",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}},modified:{group:"Events",type:"signal",displayName:"Modified"},fetched:{group:"Events",type:"signal",displayName:"Fetched"},failure:{group:"Events",type:"signal",displayName:"Failure"},error:{type:"string",displayName:"Error",group:"Events",getter:function(){return this._internal.error}}},prototypeExtensions:{setCollectionName:function(e){this._internal.name=e,this.flagOutputDirty("id")},setCollection:function(e){this.bindCollection(e),this.flagOutputDirty("firstItemId"),this.flagOutputDirty("items"),this.flagOutputDirty("count")},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()},setError:function(e){this._internal.err=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure")},fetch:function(){var e=this._internal;this.context.editorConnection&&(this._internal.name===void 0?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"query-collection",{message:"No collection specified for query"}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"query-collection")),!e.fetchScheduled&&(e.fetchScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.fetchScheduled=!1;const t=Collection.get(),n=this.getStorageFilter();CloudStore.instance.query({collection:this._internal.name,where:n.where,sort:n.sort,limit:this.getStorageLimit(),skip:this.getStorageSkip(),success:o=>{o!==void 0&&t.set(o.map(r=>{var s=CloudStore._fromJSON(r,this._internal.name);return s.on("delete",()=>t.remove(s)),s})),this.setCollection(t),this.sendSignalOnOutput("fetched")},error:o=>{this.setCollection(t),this.setError(o||"Failed to fetch.")}})}))},getStorageFilter:function(){const e=this._internal.storageSettings;if(e.storageFilterType===void 0||e.storageFilterType==="simple"){if(e.storageFilter){const f=e.storageFilter.split(",");var t=[];f.forEach(function(g){const b={};var _="$"+(e["storageFilterOp-"+g]||"eq");b[g]={},b[g][_]=e["storageFilterValue-"+g],t.push(b)});var n=t.length>1?{$and:t}:t[0]}if(e.storageSort){const f=e.storageSort.split(",");var o=[];f.forEach(function(g){o.push((e["storageSort-"+g]==="descending"?"-":"")+g)})}return{where:n,sort:o}}else if(e.storageFilterType==="json"){if(!this._internal.filterFunc)try{var r=e.storageJSONFilter;r=r.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,""),this._internal.filterVariables=r.match(/\$[A-Za-z0-9]+/g)||[];var s=["filter","where","sort","Inputs"].concat(this._internal.filterVariables).concat([r]);this._internal.filterFunc=Function.apply(null,s)}catch(b){this._internal.filterFunc=void 0,console.log("Error while parsing filter script: "+b)}if(!this._internal.filterFunc)return;var a={},o=[],l=this,u=function(b){a=_convertFilterOp(b,{collectionName:l._internal.name,error:function(_){l.context.editorConnection.sendWarning(l.nodeScope.componentOwner.name,l.id,"query-collection-filter",{message:_})}})},d=function(b){o=b};const g={};for(let b in e)b.startsWith("storageFilterValue-")&&(g[b.substring(19)]=e[b]);var p=[u,u,d,g];this._internal.filterVariables.forEach(b=>{p.push(e["storageFilterValue-"+b.substring(1)])});try{this._internal.filterFunc.apply(this,p)}catch(b){console.log("Error while running filter script: "+b)}return{where:a,sort:o}}},getStorageLimit:function(){const e=this._internal.storageSettings;if(e.storageEnableLimit)return e.storageLimit||10},getStorageSkip:function(){const e=this._internal.storageSettings;if(e.storageEnableLimit)return e.storageSkip||0},registerOutputIfNeeded:function(e){this.hasOutput(e)||this.registerOutput(e,{getter:userOutputGetter.bind(this,e)})},registerInputIfNeeded:function(e){if(this.hasInput(e))return;const t={storageFetch:this.fetch.bind(this)};if(t[e])return this.registerInput(e,{set:createSetter({valueChangedToTrue:t[e]})});const n={collectionName:this.setCollectionName.bind(this)};if(n[e])return this.registerInput(e,{set:n[e]});this.registerInput(e,{set:userInputSetter.bind(this,e)})}}};function userOutputGetter(e){return this._internal.storageSettings[e]}function userInputSetter(e,t){this._internal.storageSettings[e]=t}const _defaultJSONQuery=`// Write your query script here, check out the reference documentation for examples
182
+ `;function updatePorts$1(e,t,n,o){var r=[],s=t.properties;if(s){s=s?s.split(","):void 0;for(var a in s){var l=s[a];r.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name:l}),r.push({type:"signal",plug:"output",group:"Events",displayName:"Changed "+l,name:"changed-"+l})}var u=detectRename(previousProperties[e],s);if(previousProperties[e]=s,u)var d={plug:"input/output",patterns:["{{*}}"],before:u.before,after:u.after}}if(r.push({name:"$ndlCollectionName",displayName:"Class",group:"General",type:{name:"enum",enums:o!==void 0?o.map(_=>({value:_.name,label:_.name})):[],allowEditOnly:!0},plug:"input"}),t.$ndlCollectionName&&o){var h=o.find(_=>_.name===t.$ndlCollectionName);if(h&&h.schema&&h.schema.properties){var f=h.schema.properties;for(var g in f){var l=f[g];r.find(T=>T.name===g)||(l.type==="Relation"?(r.push({type:"signal",plug:"input",group:g+" Relation",name:"$relation-add-"+g,displayName:"Add",editorName:g+" | Add"}),r.push({type:"signal",plug:"input",group:g+" Relation",name:"$relation-remove-"+g,displayName:"Remove",editorName:g+" | Remove"}),r.push({type:{name:"string",allowConnectionsOnly:!0},plug:"input",group:g+" Relation",name:"$relation-modelid-"+g,displayName:"Model Id",editorName:g+" | Model Id"}),r.push({type:"signal",plug:"output",group:g+" Relation",name:"$relation-removed-"+g,displayName:"Removed",editorName:g+" | Removed"}),r.push({type:"signal",plug:"output",group:g+" Relation",name:"$relation-added-"+g,displayName:"Added",editorName:g+" | Added"})):(r.push({type:{name:"*",allowConnectionsOnly:!0},plug:"input/output",group:"Properties",name:g}),r.push({type:"signal",plug:"output",group:"Events",displayName:"Changed "+g,name:"changed-"+g})))}}}r.push({name:"$ndlModelInitCode",displayName:"Initialize",group:"Scripts",type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},default:defaultStorageInitCode,plug:"input"});var b=JSON.stringify(r);modelPortsHash[e]!==b&&(modelPortsHash[e]=b,n.sendDynamicPorts(e,r,{renamed:d}))}const DbModelNode={node:ModelNodeDefinition,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts$1(o.id,o.parameters,e.editorConnection,t.getMetaData("dbCollections")),o.on("parameterUpdated",function(r){updatePorts$1(o.id,o.parameters,e.editorConnection,t.getMetaData("dbCollections"))}),t.on("metadataChanged.dbCollections",function(r){CloudStore.invalidateCollections(),updatePorts$1(o.id,o.parameters,e.editorConnection,r)})}t.on("editorImportComplete",()=>{t.on("nodeAdded.DbModel",function(o){n(o)});for(const o of t.getNodesWithType("DbModel"))n(o)})}};function _convertFilterOp(e,t){const n=Object.keys(e);if(n.length===0)return{};if(n.length!==1)return t.error("Filter must only have one key found "+n.join(","));const o={},r=n[0];if(e.and!==void 0&&Array.isArray(e.and))o.$and=e.and.map(g=>_convertFilterOp(g,t));else if(e.or!==void 0&&Array.isArray(e.or))o.$or=e.or.map(g=>_convertFilterOp(g,t));else if(e.idEqualTo!==void 0)o.objectId={$eq:e.idEqualTo};else if(e.idContainedIn!==void 0)o.objectId={$in:e.idContainedIn};else if(e.relatedTo!==void 0){var s=e.relatedTo.id;if(s===void 0)return t.error("Must provide id in relatedTo filter");var a=e.relatedTo.key;if(a===void 0)return t.error("Must provide key in relatedTo filter");var l=Model.get(s);o.$relatedTo={object:{__type:"Pointer",objectId:s,className:l._class},key:a}}else if(typeof e[r]=="object"){const g=e[r];if(g.equalTo!==void 0)o[r]={$eq:g.equalTo};else if(g.notEqualTo!==void 0)o[r]={$ne:g.notEqualTo};else if(g.lessThan!==void 0)o[r]={$lt:g.lessThan};else if(g.greaterThan!==void 0)o[r]={$gt:g.greaterThan};else if(g.lessThanOrEqualTo!==void 0)o[r]={$lte:g.lessThanOrEqualTo};else if(g.greaterThanOrEqualTo!==void 0)o[r]={$gte:g.greaterThanOrEqualTo};else if(g.exists!==void 0)o[r]={$exists:g.exists};else if(g.containedIn!==void 0)o[r]={$in:g.containedIn};else if(g.notContainedIn!==void 0)o[r]={$nin:g.notContainedIn};else if(g.pointsTo!==void 0){var l=Model.get(g.pointsTo);if(CloudStore._collections[t.collectionName])var u=CloudStore._collections[t.collectionName].schema;var d=u&&u.properties&&u.properties[r]?u.properties[r].targetClass:void 0,h=u&&u.properties&&u.properties[r]?u.properties[r].type:void 0;h==="Relation"?o[r]={__type:"Pointer",objectId:g.pointsTo,className:d}:Array.isArray(g.pointsTo)?o[r]={$in:g.pointsTo.map(_=>({__type:"Pointer",objectId:_,className:d}))}:o[r]={$eq:{__type:"Pointer",objectId:g.pointsTo,className:d}}}else if(g.matchesRegex!==void 0)o[r]={$regex:g.matchesRegex,$options:g.options};else if(g.text!==void 0&&g.text.search!==void 0){var f=g.text.search;typeof f=="string"?o[r]={$text:{$search:{$term:f,$caseSensitive:!1}}}:o[r]={$text:{$search:{$term:f.term,$language:f.language,$caseSensitive:f.caseSensitive,$diacriticSensitive:f.diacriticSensitive}}}}}else t.error("Unrecognized filter keys "+n.join(","));return o}var DbCollectionNode={name:"DbCollection",docs:"https://docs.noodl.net/nodes/cloud-services/collection",displayNodeName:"Query Collection",shortDesc:"A database collection.",category:"Cloud Services",usePortAsLabel:"collectionName",color:"data",deprecated:!0,initialize:function(){var e=this,t=!1;this._internal.collectionChangedCallback=function(){t||(t=!0,e.scheduleAfterInputsHaveUpdated(function(){e.sendSignalOnOutput("modified"),e.flagOutputDirty("count"),e.flagOutputDirty("firstItemId"),t=!1}))},this._internal.storageSettings={}},inputs:{},outputs:{id:{type:"string",displayName:"Name",group:"General",getter:function(){return this._internal.name}},items:{type:"array",displayName:"Result",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}},modified:{group:"Events",type:"signal",displayName:"Modified"},fetched:{group:"Events",type:"signal",displayName:"Fetched"},failure:{group:"Events",type:"signal",displayName:"Failure"},error:{type:"string",displayName:"Error",group:"Events",getter:function(){return this._internal.error}}},prototypeExtensions:{setCollectionName:function(e){this._internal.name=e,this.flagOutputDirty("id")},setCollection:function(e){this.bindCollection(e),this.flagOutputDirty("firstItemId"),this.flagOutputDirty("items"),this.flagOutputDirty("count")},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()},setError:function(e){this._internal.err=e,this.flagOutputDirty("error"),this.sendSignalOnOutput("failure")},fetch:function(){var e=this._internal;this.context.editorConnection&&(this._internal.name===void 0?this.context.editorConnection.sendWarning(this.nodeScope.componentOwner.name,this.id,"query-collection",{message:"No collection specified for query"}):this.context.editorConnection.clearWarning(this.nodeScope.componentOwner.name,this.id,"query-collection")),!e.fetchScheduled&&(e.fetchScheduled=!0,this.scheduleAfterInputsHaveUpdated(()=>{e.fetchScheduled=!1;const t=Collection.get(),n=this.getStorageFilter();CloudStore.instance.query({collection:this._internal.name,where:n.where,sort:n.sort,limit:this.getStorageLimit(),skip:this.getStorageSkip(),success:o=>{o!==void 0&&t.set(o.map(r=>{var s=CloudStore._fromJSON(r,this._internal.name);return s.on("delete",()=>t.remove(s)),s})),this.setCollection(t),this.sendSignalOnOutput("fetched")},error:o=>{this.setCollection(t),this.setError(o||"Failed to fetch.")}})}))},getStorageFilter:function(){const e=this._internal.storageSettings;if(e.storageFilterType===void 0||e.storageFilterType==="simple"){if(e.storageFilter){const f=e.storageFilter.split(",");var t=[];f.forEach(function(g){const b={};var _="$"+(e["storageFilterOp-"+g]||"eq");b[g]={},b[g][_]=e["storageFilterValue-"+g],t.push(b)});var n=t.length>1?{$and:t}:t[0]}if(e.storageSort){const f=e.storageSort.split(",");var o=[];f.forEach(function(g){o.push((e["storageSort-"+g]==="descending"?"-":"")+g)})}return{where:n,sort:o}}else if(e.storageFilterType==="json"){if(!this._internal.filterFunc)try{var r=e.storageJSONFilter;r=r.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,""),this._internal.filterVariables=r.match(/\$[A-Za-z0-9]+/g)||[];var s=["filter","where","sort","Inputs"].concat(this._internal.filterVariables).concat([r]);this._internal.filterFunc=Function.apply(null,s)}catch(b){this._internal.filterFunc=void 0,console.log("Error while parsing filter script: "+b)}if(!this._internal.filterFunc)return;var a={},o=[],l=this,u=function(b){a=_convertFilterOp(b,{collectionName:l._internal.name,error:function(_){l.context.editorConnection.sendWarning(l.nodeScope.componentOwner.name,l.id,"query-collection-filter",{message:_})}})},d=function(b){o=b};const g={};for(let b in e)b.startsWith("storageFilterValue-")&&(g[b.substring(19)]=e[b]);var h=[u,u,d,g];this._internal.filterVariables.forEach(b=>{h.push(e["storageFilterValue-"+b.substring(1)])});try{this._internal.filterFunc.apply(this,h)}catch(b){console.log("Error while running filter script: "+b)}return{where:a,sort:o}}},getStorageLimit:function(){const e=this._internal.storageSettings;if(e.storageEnableLimit)return e.storageLimit||10},getStorageSkip:function(){const e=this._internal.storageSettings;if(e.storageEnableLimit)return e.storageSkip||0},registerOutputIfNeeded:function(e){this.hasOutput(e)||this.registerOutput(e,{getter:userOutputGetter.bind(this,e)})},registerInputIfNeeded:function(e){if(this.hasInput(e))return;const t={storageFetch:this.fetch.bind(this)};if(t[e])return this.registerInput(e,{set:createSetter({valueChangedToTrue:t[e]})});const n={collectionName:this.setCollectionName.bind(this)};if(n[e])return this.registerInput(e,{set:n[e]});this.registerInput(e,{set:userInputSetter.bind(this,e)})}}};function userOutputGetter(e){return this._internal.storageSettings[e]}function userInputSetter(e,t){this._internal.storageSettings[e]=t}const _defaultJSONQuery=`// Write your query script here, check out the reference documentation for examples
183
183
  where({ })
184
- `;function updatePorts(e,t,n,o){var r=[];if(r.push({name:"collectionName",type:{name:"enum",enums:o!==void 0?o.map(u=>({value:u.name,label:u.name})):[],allowEditOnly:!0},displayName:"Collecton Name",plug:"input",group:"General"}),r.push({name:"storageFilterType",type:{name:"enum",allowEditOnly:!0,enums:[{value:"simple",label:"Simple"},{value:"json",label:"Advanced"}]},displayName:"Filter",default:"simple",plug:"input",group:"General"}),r.push({type:"boolean",plug:"input",group:"Limit",name:"storageEnableLimit",displayName:"Use limit"}),t.storageEnableLimit&&(r.push({type:"number",default:10,plug:"input",group:"Limit",name:"storageLimit",displayName:"Limit"}),r.push({type:"number",default:0,plug:"input",group:"Limit",name:"storageSkip",displayName:"Skip"})),r.push({type:"signal",plug:"input",group:"Storage",name:"storageFetch",displayName:"Fetch"}),t.storageFilterType===void 0||t.storageFilterType==="simple"){r.push({type:{name:"stringlist",allowEditOnly:!0},plug:"input",group:"Filter",name:"storageFilter",displayName:"Filter"});const u={string:[{value:"eq",label:"Equals"},{value:"ne",label:"Not Equals"}],boolean:[{value:"eq",label:"Equals"},{value:"ne",label:"Not Equals"}],number:[{value:"eq",label:"Equals"},{value:"ne",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.storageFilter){var s=t.storageFilter.split(",");s.forEach(d=>{r.push({type:{name:"enum",enums:[{value:"string",label:"String"},{value:"number",label:"Number"},{value:"boolean",label:"Boolean"}]},default:"string",plug:"input",group:d+" filter",displayName:"Type",editorName:d+" filter | Type",name:"storageFilterType-"+d});var p=t["storageFilterType-"+d];r.push({type:{name:"enum",enums:u[p||"string"]},default:"eq",plug:"input",group:d+" filter",displayName:"Op",editorName:d+" filter| Op",name:"storageFilterOp-"+d}),r.push({type:p||"string",plug:"input",group:d+" filter",displayName:"Value",editorName:d+" Filter Value",name:"storageFilterValue-"+d})})}if(r.push({type:{name:"stringlist",allowEditOnly:!0},plug:"input",group:"Sort",name:"storageSort",displayName:"Sort"}),t.storageSort){var s=t.storageSort.split(",");s.forEach(p=>{r.push({type:{name:"enum",enums:[{value:"ascending",label:"Ascending"},{value:"descending",label:"Descending"}]},default:"ascending",plug:"input",group:p+" sort",displayName:"Sort",editorName:p+" sorting",name:"storageSort-"+p})})}}else if(t.storageFilterType==="json"){r.push({type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},plug:"input",group:"Filter",name:"storageJSONFilter",default:_defaultJSONQuery,displayName:"Filter"});var a=t.storageJSONFilter;if(a){a=a.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,"");var l=a.match(/\$[A-Za-z0-9]+/g);if(l){const u={};l.forEach(d=>{u[d]=!0}),Object.keys(u).forEach(d=>{r.push({name:"storageFilterValue-"+d.substring(1),displayName:d.substring(1),group:"Filter Values",plug:"input",type:{name:"*",allowConnectionsOnly:!0}})})}JavascriptNodeParser.parseAndAddPortsFromScript(a,r,{inputPrefix:"storageFilterValue-",inputGroup:"Filter Values",inputType:{name:"*",allowConnectionsOnly:!0},skipOutputs:!0})}}n.sendDynamicPorts(e,r)}const DbCollectionNode$1={node:DbCollectionNode,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts(o.id,o.parameters,e.editorConnection,t.getMetaData("dbCollections")),o.on("parameterUpdated",function(r){r.name.startsWith("storage")&&updatePorts(o.id,o.parameters,e.editorConnection,t.getMetaData("dbCollections"))}),t.on("metadataChanged.dbCollections",function(r){CloudStore.invalidateCollections(),updatePorts(o.id,o.parameters,e.editorConnection,r)}),t.on("metadataChanged.cloudservices",function(r){CloudStore.instance._initCloudServices()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.DbCollection",function(o){n(o)});for(const o of t.getNodesWithType("DbCollection"))n(o)})}},CollectionNode={name:"Collection",docs:"https://docs.noodl.net/nodes/data/array",displayNodeName:"Array",shortDesc:"A collection of models, mainly used together with a For Each Node.",category:"Data",usePortAsLabel:"collectionId",color:"data",deprecated:!0,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("count"),t=!1})))},this._internal.sourceCollectionChangedCallback=function(){e.isInputConnected("store")!==!0&&e.scheduleCopyItems()}},getInspectInfo(){if(this._internal.collection)return"Count: "+this._internal.collection.size()},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)}))}},modifyId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Item Id",group:"Modify",set:function(e){this._internal.modifyId=e}},store:{displayName:"Set",group:"Actions",valueChangedToTrue:function(){this.scheduleStore()}},add:{displayName:"Add",group:"Modify",valueChangedToTrue:function(){var e=this,t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){if(t.modifyId!==void 0&&(t.collection===void 0&&this.isInputConnected("fetch")===!1&&e.setCollection(Collection.get()),t.collection!==void 0)){var n=Model.get(t.modifyId);t.collection.add(n),e.sendSignalOnOutput("modified")}})}},remove:{displayName:"Remove",group:"Modify",valueChangedToTrue:function(){var e=this,t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){if(t.modifyId!==void 0&&(t.collection===void 0&&this.isInputConnected("fetch")===!1&&e.setCollection(Collection.get()),t.collection!==void 0)){var n=Model.get(t.modifyId);t.collection.remove(n),e.sendSignalOnOutput("modified")}})}},clear:{displayName:"Clear",group:"Modify",valueChangedToTrue:function(){var e=this,t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){t.collection===void 0&&this.isInputConnected("fetch")===!1&&e.setCollection(Collection.get()),t.collection!==void 0&&(t.collection.set([]),e.sendSignalOnOutput("modified"),e.sendSignalOnOutput("count"))})}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.scheduleSetCollection()}},new:{displayName:"New",group:"Actions",valueChangedToTrue:function(){this.scheduleNew()}}},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}},count:{type:"number",displayName:"Count",group:"General",getter:function(){return this._internal.collection?this._internal.collection.size():0}},modified:{group:"Events",type:"signal",displayName:"Modified"},changed:{group:"Events",type:"signal",displayName:"Changed"},stored:{group:"Events",type:"signal",displayName:"Stored"},fetched:{group:"Events",type:"signal",displayName:"Fetched"},created:{group:"Events",type:"signal",displayName:"Created"}},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("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),e.sendSignalOnOutput("stored")})}},_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()}))},scheduleNew:function(){var e=this;if(!this.hasScheduledNew){this.hasScheduledNew=!0;var t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){e.hasScheduledNew=!1,e.setCollection(Collection.get()),t.sourceCollection&&t.collection.set(t.sourceCollection),e.sendSignalOnOutput("created")})}},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.collection&&this._internal.collection.off("change",this._internal.collectionChangedCallback)}}},CollectionNode$1={node:CollectionNode},ScriptDownloadDefinition={name:"Script Downloader",docs:"https://docs.noodl.net/nodes/javascript/script-downloader",shortDesc:"Script Downloader allows you load external Javascript libraries. ",category:"Javascript",color:"javascript",deprecated:!0,initialize:function(){var e=this._internal;e.loaded=!1,e.scripts=[],e.loadedScripts={},e.startLoad=!0},inputs:{startLoad:{type:"boolean",default:!0,displayName:"Load on start",group:"General",set:function(e){this._internal.startLoad=e}},load:{displayName:"Load",group:"Actions",valueChangedToTrue:function(){this.scheduleUpdateScripts()}}},outputs:{loaded:{type:"signal",displayName:"Loaded"}},numberedInputs:{input:{displayPrefix:"Script",group:"External scripts",type:"string",index:3008,createSetter:function(e){return function(t){t=t.toString(),this._internal.scripts[e]=t,this._internal.loadStarted||(this._internal.loadStarted=!0,this.scheduleAfterInputsHaveUpdated(function(){this._internal.loadStarted=!1,this._internal.startLoad&&this.updateScripts()}))}}}},methods:{removeLoadTerminator:function(){var e="sentinel_"+this.id,t=document.getElementById(e);t&&t.parentNode&&t.parentNode.removeChild(t)},scheduleUpdateScripts:function(){const e=this;this._internal.updateScriptsScheduled||(this._internal.updateScriptsScheduled=!0,this.scheduleAfterInputsHaveUpdated(function(){e._internal.updateScriptsScheduled=!1,e.updateScripts()}))},updateScripts:function(){var e="sentinel_"+this.id;this.removeLoadTerminator();var t=this._internal.scripts;t=t.filter(function(d){return d!==""});for(var n=document.head.getElementsByTagName("script"),o={},r=0;r<n.length;r++){var s=n[r];s.src!==void 0&&s.src!==""&&(o[s.src]=s)}for(var r=0;r<t.length;r++){var s=t[r].trim();if(!this._internal.loadedScripts.hasOwnProperty(s)){if(o.hasOwnProperty(s))continue;var a=document.createElement("script");a.src=s,a.async=!1,document.head.appendChild(a)}}var l=this,u=document.createElement("script");u.onload=u.onreadystatechange=function(d){(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")&&(l._internal.loaded=!0,l.sendSignalOnOutput("loaded"),l.removeLoadTerminator())},u.id=e,u.src="load_terminator.js",u.async=!1,document.head.appendChild(u)}}},ScriptDownloader={node:ScriptDownloadDefinition,setup:function(e,t){!e.editorConnection||e.editorConnection.isRunningLocally()}};function registerNodes(e){[Switch$1,Timer$1,Color,EventSender$1,EventReceiver$1,ScreenResolution$1,JavaScript,NumberRemapper,ValueChanged,States,ForEach,ForEachActions,ColorBlend,AnimateToValue$1,ComponentObject$1,ParentComponentObject$1,SetComponentObjectProperties,SetParentComponentObjectProperties,VariableNode2,SetVariableNode,CollectionNode2,CollectionNodeInsert,CollectionNodeRemove,CollectionNodeClear,CollectionNodeNew,FilterCollectionNode$1,StaticData,MapCollectionNode$1,CloudFunction2,OpenFilePicker$1,UploadFile$1,NavigateBack$1,NavigateToPath,Navigate$1,ShowPopup,ClosePopup,PageInputs,RouterNavigate$1,Login,Logout,Signup,VerifyEmail,SendEmailVerification,ResetPassword,RequestPasswordReset,CloudFunction,ComponentState$1,ParentComponentState$1,ModelNode,VariableNode,Gyroscope,Globals,SignalToIndex,NumberBlend$1,StringSelector,Animation,Transition,DbModelNode,DbCollectionNode$1,CollectionNode$1,ScriptDownloader].forEach(function(t){e.registerNode(t)}),e.registerNode(CSSDefinition$1),e.registerNode(Group),e.registerNode(TextNode$1),e.registerNode(Image),e.registerNode(Icon),e.registerNode(Circle),e.registerNode(Video),e.registerNode(DragNode$1),e.registerNode(ExternalLink),e.registerNode(Columns),e.registerNode(ButtonOld),e.registerNode(CheckBoxOld),e.registerNode(RadioButtonOld),e.registerNode(OptionsOld),e.registerNode(RangeOld),e.registerNode(Label$1),e.registerNode(definition),e.registerNode(Form$1),e.registerNode(FieldSet$1),e.registerNode(Button$1),e.registerNode(CheckBox$1),e.registerNode(RadioButtonGroup),e.registerNode(RadioButton$1),e.registerNode(Options$1),e.registerNode(Range$1),e.registerNode(TextInput$1),e.registerNode(NavigationStack),e.registerNode(Page),e.registerNode(Router)}function getInputsWithType(e,t){const n=[];return e.getAllNodesRecursive().forEach(r=>{const s=[];for(const a in r._inputs)r._inputs[a].type===t&&s.push(a);s.length&&n.push({node:r,inputs:s})}),n}class Styles{constructor({graphModel:t,nodeRegister:n,getNodeScope:o}){this.getNodeScope=o,this.graphModel=t,this.nodeRegister=n,this.setStyles(t.getMetaData("styles")||{}),t.on("metadataChanged.styles",r=>this.setStyles(r))}setStyles(t){this.styles=t;const n=t.text||{};Object.values(n).filter(s=>s.fontFamily).forEach(s=>{let a=s.fontFamily;a.split(".").length>1&&(FontLoader.instance.loadFont(a),a=a.replace(/\.[^/.]+$/,""),a=a.split("/").pop(),s.fontFamily=a)});for(const s in n){const a=n[s];for(const l in a){const u=a[l];typeof u=="object"&&(a[l]=u.value+u.unit)}}for(const s in n){const a=n[s];a.hasOwnProperty("color")&&!a.color&&delete a.color}const o=this.getNodeScope&&this.getNodeScope();if(!o)return;const r=this.graphModel.getVariants();for(const s of r)this._variantHasInputsWithTypes(s,["color","textStyle"])&&o.getAllNodesWithVariantRecursive(s).forEach(l=>l.setVariant(s));["color","textStyle"].forEach(s=>{getInputsWithType(o,s).forEach(({node:a,inputs:l})=>{l.forEach(u=>{a.getInputValue(u)&&a.setInputValue(u,a.getInputValue(u))})})})}resolveColor(t){if(!this.styles.colors)return t;const n=this.styles.colors[t];return n||t}getTextStyle(t){return this.styles.text?this.styles.text[t]||{}:{}}_variantHasInputsWithTypes(t,n){if(!this.nodeRegister.hasNode(t.typename))return;const o=this.nodeRegister.getNodeMetadata(t.typename),r=new Set(Object.keys(t.parameters));for(const s in t.stateParameters)Object.keys(t.stateParameters[s]).forEach(a=>r.add(a));for(const s of Array.from(r)){const a=o.inputs[s]&&o.inputs[s].type;if(n.includes(a))return!0}return!1}}typeof window<"u"&&window.NoodlEditor&&(window.NoodlEditorInspectorAPI={enabled:!1,inspector:null,setInspector(e){this.inspector=e,this.enabled?this.inspector.enable():this.inspector.disable()},setEnabled(e){this.enabled=e,this.inspector&&(this.enabled?this.inspector.enable():this.inspector.disable()),window.NoodlEditorHighlightAPI.highlighter&&window.NoodlEditorHighlightAPI.highlighter.setWindowSelected(e)}},window.NoodlEditorHighlightAPI={highlighter:null,setHighlighter(e){this.highlighter=e,this.highlighter.setWindowSelected(window.NoodlEditorInspectorAPI.enabled)},selectNode(e){this.highlighter.deselectNodes(),e&&e!=="null"?this.highlighter.selectNodesWithId(e):window.NoodlEditorInspectorAPI.enabled&&this.highlighter.setWindowSelected(!0)}});class Viewer extends React.Component{constructor(t){super(t),this.state={popups:[]};const{noodlRuntime:n}=t;this.runningDeployed=this.props.projectData!==void 0,this.focusedNoodlNodes=[],n.context.setNodeFocused=this.setNodeFocused.bind(this);const o=typeof document<"u"&&document.location.href.indexOf("forceDebugger=true")!==-1||Noodl.enableDebugInspectors;if(n.setDebugInspectorsEnabled(o),n.context.setPopupCallbacks({onShow:r=>{const s=this.state.popups.concat([r]);n.getProjectSettings().bodyScroll&&s.length===1&&(document.body.style.width=document.body.clientWidth+"px",document.body.style.top=`-${window.scrollY}px`,document.body.style.position="fixed"),this.setState({popups:s})},onClose:r=>{const s=this.state.popups.filter(l=>l!==r);if(this.setState({popups:s}),n.getProjectSettings().bodyScroll&&s.length===0){const l=document.body.style.top;document.body.style.position="",document.body.style.top="",document.body.style.width="100%",window.scrollTo(0,parseInt(l||"0")*-1)}}}),registerNodes(n),createNoodlAPI(n),n.setProjectSettings(projectSettings),this.props.noodlModules)for(const r of this.props.noodlModules){if(r.reactNodes){const s=[];for(const l of r.reactNodes)s.push(createNodeFromReactComponent(l));const a=r.nodes||[];r.nodes=a.concat(s)}n.registerModule(r)}if(n.eventEmitter.on("rootComponentUpdated",()=>{requestAnimationFrame(()=>this.forceUpdate())}),n.graphModel.on("projectSettingsChanged",r=>{typeof document>"u"||(r.bodyScroll?document.body.classList.add("body-scroll"):document.body.classList.remove("body-scroll"))}),this.styles=new Styles({graphModel:n.graphModel,getNodeScope:()=>n.context.rootComponent&&n.context.rootComponent.nodeScope,nodeRegister:n.context.nodeRegister}),n.context.styles=this.styles,this.state.waitingForExport=!this.runningDeployed,this.runningDeployed){this.props.noodlRuntime.setData(this.props.projectData);const r=Object.keys(this.props.projectData.componentIndex);r.length<30&&setTimeout(()=>{this.props.noodlRuntime.prefetchBundles(r,3)},1e4)}else n.graphModel.on("editorImportComplete",()=>{this.setState({waitingForExport:!1})}),this.connectToEditor();this.focusedNoodlNodes=[]}connectToEditor(){const{noodlRuntime:t}=this.props;var n=(Noodl.host||location.protocol+"//"+location.host)+location.pathname+(location.search?location.search:"");const o=n.replace("http","ws");t.connectToEditor(o),this.highlightedNodes=new Map,this.isUpdatingHighlights=!1,typeof window<"u"&&window.NoodlEditor&&(this.highlighter=new Highlighter(t),NoodlEditorHighlightAPI.setHighlighter(this.highlighter),t.editorConnection.on("hoverStart",r=>{this.highlighter.highlightNodesWithId(r)}),t.editorConnection.on("hoverEnd",r=>{this.highlighter.disableHighlight()}),this.inspector=new Inspector({onDisableHighlight:()=>this.highlighter.disableHighlight(),onHighlight:r=>this.highlighter.highlightNodesWithId(r),onInspect:r=>{NoodlEditor.inspectNodes(r)}}),NoodlEditorInspectorAPI.setInspector(this.inspector)),t.editorConnection.on("debuggingEnabledChanged",r=>{t.setDebugInspectorsEnabled(r)}),this.graphWarnings=new GraphWarnings(t.graphModel,t.editorConnection)}setNodeFocused(t,n){if(n&&this.focusedNoodlNodes.indexOf(t)===-1)this.focusedNoodlNodes.filter(o=>!o.contains(t)).forEach(o=>{o._blur()}),t._focus(),this.focusedNoodlNodes.push(t);else if(!n){const o=this.focusedNoodlNodes.indexOf(t);if(o!==-1)return;t._blur(),this.focusedNoodlNodes.filter(r=>r.contains(t)).forEach(r=>{r._blur()}),this.focusedNoodlNodes.splice(o,1)}}onClickCapture(t){const n=[];let o=t.target;for(;o;)o.noodlNode&&o.noodlNode._focus&&n.push(o.noodlNode),o=o.parentNode;this.focusedNoodlNodes.filter(r=>n.indexOf(r)===-1).forEach(r=>r._blur()),n.filter(r=>this.focusedNoodlNodes.indexOf(r)===-1).forEach(r=>r._focus()),this.focusedNoodlNodes=n}render(){const t=this.props.noodlRuntime.rootComponent;if(this.state.waitingForExport)return null;if(!t)return this.runningDeployed?null:NoHomeError();if(this.props.noodlRuntime.getProjectSettings().bodyScroll){const o={margin:0,padding:0,minHeight:"100vh",alignSelf:"stretch",display:"flex",flexDirection:"column"};return React.createElement("div",{style:o,onClickCapture:r=>this.onClickCapture(r)},React.createElement("div",{style:{...o,isolation:"isolate"}},t.render()),this.state.popups.length?React.createElement("div",{style:{...o,isolation:"isolate"}},this.state.popups.map(r=>r.render())):null)}else return React.createElement("div",{style:{margin:0,padding:0,overflow:"hidden",width:"100%",height:"100%"},onClickCapture:o=>this.onClickCapture(o)},t.render(),this.state.popups.map(o=>o.render()))}}registerPolyfills();function createArgs(){return typeof window>"u"?{type:"browser",platform:{requestUpdate:e=>setImmediate(e),getCurrentTime:()=>0,objectToString:e=>JSON.stringify(e,null,2)},componentFilter:e=>!e.name.startsWith("/#__cloud__/")}:{type:"browser",platform:{requestUpdate:e=>window.requestAnimationFrame(e),getCurrentTime:()=>window.performance.now(),objectToString:e=>JSON.stringify(e,null,2)},componentFilter:e=>!e.name.startsWith("/#__cloud__/")}}const NoodlViewerReact={render(e,t,{isLocal:n=!1}){const o=createArgs();n&&(o.platform.isRunningLocally=()=>!0);const r=new Runtime(o);ReactDOM.render(React.createElement(Viewer,{noodlRuntime:r,noodlModules:t},null),e)},renderDeployed(e,t,n){e.children.length>0&&e.children[0].hasAttribute("data-reactroot")?ReactDOM.hydrate(this.createElement(t,n),e):ReactDOM.render(this.createElement(t,n),e)},createElement(e,t){const n=new Runtime({...createArgs(),runDeployed:!0});return React.createElement(Viewer,{noodlRuntime:n,noodlModules:e,projectData:t},null)}};window.ELECTRON_DISABLE_SECURITY_WARNINGS=!0,window.Noodl._viewerReact=NoodlViewerReact})(React,ReactDOM);
184
+ `;function updatePorts(e,t,n,o){var r=[];if(r.push({name:"collectionName",type:{name:"enum",enums:o!==void 0?o.map(u=>({value:u.name,label:u.name})):[],allowEditOnly:!0},displayName:"Collecton Name",plug:"input",group:"General"}),r.push({name:"storageFilterType",type:{name:"enum",allowEditOnly:!0,enums:[{value:"simple",label:"Simple"},{value:"json",label:"Advanced"}]},displayName:"Filter",default:"simple",plug:"input",group:"General"}),r.push({type:"boolean",plug:"input",group:"Limit",name:"storageEnableLimit",displayName:"Use limit"}),t.storageEnableLimit&&(r.push({type:"number",default:10,plug:"input",group:"Limit",name:"storageLimit",displayName:"Limit"}),r.push({type:"number",default:0,plug:"input",group:"Limit",name:"storageSkip",displayName:"Skip"})),r.push({type:"signal",plug:"input",group:"Storage",name:"storageFetch",displayName:"Fetch"}),t.storageFilterType===void 0||t.storageFilterType==="simple"){r.push({type:{name:"stringlist",allowEditOnly:!0},plug:"input",group:"Filter",name:"storageFilter",displayName:"Filter"});const u={string:[{value:"eq",label:"Equals"},{value:"ne",label:"Not Equals"}],boolean:[{value:"eq",label:"Equals"},{value:"ne",label:"Not Equals"}],number:[{value:"eq",label:"Equals"},{value:"ne",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.storageFilter){var s=t.storageFilter.split(",");s.forEach(d=>{r.push({type:{name:"enum",enums:[{value:"string",label:"String"},{value:"number",label:"Number"},{value:"boolean",label:"Boolean"}]},default:"string",plug:"input",group:d+" filter",displayName:"Type",editorName:d+" filter | Type",name:"storageFilterType-"+d});var h=t["storageFilterType-"+d];r.push({type:{name:"enum",enums:u[h||"string"]},default:"eq",plug:"input",group:d+" filter",displayName:"Op",editorName:d+" filter| Op",name:"storageFilterOp-"+d}),r.push({type:h||"string",plug:"input",group:d+" filter",displayName:"Value",editorName:d+" Filter Value",name:"storageFilterValue-"+d})})}if(r.push({type:{name:"stringlist",allowEditOnly:!0},plug:"input",group:"Sort",name:"storageSort",displayName:"Sort"}),t.storageSort){var s=t.storageSort.split(",");s.forEach(h=>{r.push({type:{name:"enum",enums:[{value:"ascending",label:"Ascending"},{value:"descending",label:"Descending"}]},default:"ascending",plug:"input",group:h+" sort",displayName:"Sort",editorName:h+" sorting",name:"storageSort-"+h})})}}else if(t.storageFilterType==="json"){r.push({type:{name:"string",allowEditOnly:!0,codeeditor:"javascript"},plug:"input",group:"Filter",name:"storageJSONFilter",default:_defaultJSONQuery,displayName:"Filter"});var a=t.storageJSONFilter;if(a){a=a.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,"");var l=a.match(/\$[A-Za-z0-9]+/g);if(l){const u={};l.forEach(d=>{u[d]=!0}),Object.keys(u).forEach(d=>{r.push({name:"storageFilterValue-"+d.substring(1),displayName:d.substring(1),group:"Filter Values",plug:"input",type:{name:"*",allowConnectionsOnly:!0}})})}JavascriptNodeParser.parseAndAddPortsFromScript(a,r,{inputPrefix:"storageFilterValue-",inputGroup:"Filter Values",inputType:{name:"*",allowConnectionsOnly:!0},skipOutputs:!0})}}n.sendDynamicPorts(e,r)}const DbCollectionNode$1={node:DbCollectionNode,setup:function(e,t){if(!e.editorConnection||!e.editorConnection.isRunningLocally())return;function n(o){updatePorts(o.id,o.parameters,e.editorConnection,t.getMetaData("dbCollections")),o.on("parameterUpdated",function(r){r.name.startsWith("storage")&&updatePorts(o.id,o.parameters,e.editorConnection,t.getMetaData("dbCollections"))}),t.on("metadataChanged.dbCollections",function(r){CloudStore.invalidateCollections(),updatePorts(o.id,o.parameters,e.editorConnection,r)}),t.on("metadataChanged.cloudservices",function(r){CloudStore.instance._initCloudServices()})}t.on("editorImportComplete",()=>{t.on("nodeAdded.DbCollection",function(o){n(o)});for(const o of t.getNodesWithType("DbCollection"))n(o)})}},CollectionNode={name:"Collection",docs:"https://docs.noodl.net/nodes/data/array",displayNodeName:"Array",shortDesc:"A collection of models, mainly used together with a For Each Node.",category:"Data",usePortAsLabel:"collectionId",color:"data",deprecated:!0,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("count"),t=!1})))},this._internal.sourceCollectionChangedCallback=function(){e.isInputConnected("store")!==!0&&e.scheduleCopyItems()}},getInspectInfo(){if(this._internal.collection)return"Count: "+this._internal.collection.size()},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)}))}},modifyId:{type:{name:"string",allowConnectionsOnly:!0},displayName:"Item Id",group:"Modify",set:function(e){this._internal.modifyId=e}},store:{displayName:"Set",group:"Actions",valueChangedToTrue:function(){this.scheduleStore()}},add:{displayName:"Add",group:"Modify",valueChangedToTrue:function(){var e=this,t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){if(t.modifyId!==void 0&&(t.collection===void 0&&this.isInputConnected("fetch")===!1&&e.setCollection(Collection.get()),t.collection!==void 0)){var n=Model.get(t.modifyId);t.collection.add(n),e.sendSignalOnOutput("modified")}})}},remove:{displayName:"Remove",group:"Modify",valueChangedToTrue:function(){var e=this,t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){if(t.modifyId!==void 0&&(t.collection===void 0&&this.isInputConnected("fetch")===!1&&e.setCollection(Collection.get()),t.collection!==void 0)){var n=Model.get(t.modifyId);t.collection.remove(n),e.sendSignalOnOutput("modified")}})}},clear:{displayName:"Clear",group:"Modify",valueChangedToTrue:function(){var e=this,t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){t.collection===void 0&&this.isInputConnected("fetch")===!1&&e.setCollection(Collection.get()),t.collection!==void 0&&(t.collection.set([]),e.sendSignalOnOutput("modified"),e.sendSignalOnOutput("count"))})}},fetch:{displayName:"Fetch",group:"Actions",valueChangedToTrue:function(){this.scheduleSetCollection()}},new:{displayName:"New",group:"Actions",valueChangedToTrue:function(){this.scheduleNew()}}},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}},count:{type:"number",displayName:"Count",group:"General",getter:function(){return this._internal.collection?this._internal.collection.size():0}},modified:{group:"Events",type:"signal",displayName:"Modified"},changed:{group:"Events",type:"signal",displayName:"Changed"},stored:{group:"Events",type:"signal",displayName:"Stored"},fetched:{group:"Events",type:"signal",displayName:"Fetched"},created:{group:"Events",type:"signal",displayName:"Created"}},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("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),e.sendSignalOnOutput("stored")})}},_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()}))},scheduleNew:function(){var e=this;if(!this.hasScheduledNew){this.hasScheduledNew=!0;var t=this._internal;this.scheduleAfterInputsHaveUpdated(function(){e.hasScheduledNew=!1,e.setCollection(Collection.get()),t.sourceCollection&&t.collection.set(t.sourceCollection),e.sendSignalOnOutput("created")})}},_onNodeDeleted:function(){Node.prototype._onNodeDeleted.call(this),this._internal.collection&&this._internal.collection.off("change",this._internal.collectionChangedCallback)}}},CollectionNode$1={node:CollectionNode},ScriptDownloadDefinition={name:"Script Downloader",docs:"https://docs.noodl.net/nodes/javascript/script-downloader",shortDesc:"Script Downloader allows you load external Javascript libraries. ",category:"Javascript",color:"javascript",deprecated:!0,initialize:function(){var e=this._internal;e.loaded=!1,e.scripts=[],e.loadedScripts={},e.startLoad=!0},inputs:{startLoad:{type:"boolean",default:!0,displayName:"Load on start",group:"General",set:function(e){this._internal.startLoad=e}},load:{displayName:"Load",group:"Actions",valueChangedToTrue:function(){this.scheduleUpdateScripts()}}},outputs:{loaded:{type:"signal",displayName:"Loaded"}},numberedInputs:{input:{displayPrefix:"Script",group:"External scripts",type:"string",index:3008,createSetter:function(e){return function(t){t=t.toString(),this._internal.scripts[e]=t,this._internal.loadStarted||(this._internal.loadStarted=!0,this.scheduleAfterInputsHaveUpdated(function(){this._internal.loadStarted=!1,this._internal.startLoad&&this.updateScripts()}))}}}},methods:{removeLoadTerminator:function(){var e="sentinel_"+this.id,t=document.getElementById(e);t&&t.parentNode&&t.parentNode.removeChild(t)},scheduleUpdateScripts:function(){const e=this;this._internal.updateScriptsScheduled||(this._internal.updateScriptsScheduled=!0,this.scheduleAfterInputsHaveUpdated(function(){e._internal.updateScriptsScheduled=!1,e.updateScripts()}))},updateScripts:function(){var e="sentinel_"+this.id;this.removeLoadTerminator();var t=this._internal.scripts;t=t.filter(function(d){return d!==""});for(var n=document.head.getElementsByTagName("script"),o={},r=0;r<n.length;r++){var s=n[r];s.src!==void 0&&s.src!==""&&(o[s.src]=s)}for(var r=0;r<t.length;r++){var s=t[r].trim();if(!this._internal.loadedScripts.hasOwnProperty(s)){if(o.hasOwnProperty(s))continue;var a=document.createElement("script");a.src=s,a.async=!1,document.head.appendChild(a)}}var l=this,u=document.createElement("script");u.onload=u.onreadystatechange=function(d){(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")&&(l._internal.loaded=!0,l.sendSignalOnOutput("loaded"),l.removeLoadTerminator())},u.id=e,u.src="load_terminator.js",u.async=!1,document.head.appendChild(u)}}},ScriptDownloader={node:ScriptDownloadDefinition,setup:function(e,t){!e.editorConnection||e.editorConnection.isRunningLocally()}};function registerNodes(e){[Switch$1,Timer$1,Color,EventSender$1,EventReceiver$1,ScreenResolution$1,JavaScript,NumberRemapper,ValueChanged,States,ForEach,ForEachActions,ColorBlend,AnimateToValue$1,ComponentObject$1,ParentComponentObject$1,SetComponentObjectProperties,SetParentComponentObjectProperties,VariableNode2,SetVariableNode,CollectionNode2,CollectionNodeInsert,CollectionNodeRemove,CollectionNodeClear,CollectionNodeNew,FilterCollectionNode$1,StaticData,MapCollectionNode$1,CloudFunction2,OpenFilePicker$1,UploadFile$1,NavigateBack$1,NavigateToPath,Navigate$1,ShowPopup,ClosePopup,PageInputs,RouterNavigate$1,Login,Logout,Signup,VerifyEmail,SendEmailVerification,ResetPassword,RequestPasswordReset,CloudFunction,ComponentState$1,ParentComponentState$1,ModelNode,VariableNode,Gyroscope,Globals,SignalToIndex,NumberBlend$1,StringSelector,Animation,Transition,DbModelNode,DbCollectionNode$1,CollectionNode$1,ScriptDownloader].forEach(function(t){e.registerNode(t)}),e.registerNode(CSSDefinition$1),e.registerNode(Group),e.registerNode(TextNode$1),e.registerNode(Image),e.registerNode(Icon),e.registerNode(Circle),e.registerNode(Video),e.registerNode(DragNode$1),e.registerNode(ExternalLink),e.registerNode(Columns),e.registerNode(ButtonOld),e.registerNode(CheckBoxOld),e.registerNode(RadioButtonOld),e.registerNode(OptionsOld),e.registerNode(RangeOld),e.registerNode(Label$1),e.registerNode(definition),e.registerNode(Form$1),e.registerNode(FieldSet$1),e.registerNode(Button$1),e.registerNode(CheckBox$1),e.registerNode(RadioButtonGroup),e.registerNode(RadioButton$1),e.registerNode(Options$1),e.registerNode(Range$1),e.registerNode(TextInput$1),e.registerNode(NavigationStack),e.registerNode(Page),e.registerNode(Router)}function getInputsWithType(e,t){const n=[];return e.getAllNodesRecursive().forEach(r=>{const s=[];for(const a in r._inputs)r._inputs[a].type===t&&s.push(a);s.length&&n.push({node:r,inputs:s})}),n}class Styles{constructor({graphModel:t,nodeRegister:n,getNodeScope:o}){this.getNodeScope=o,this.graphModel=t,this.nodeRegister=n,this.setStyles(t.getMetaData("styles")||{}),t.on("metadataChanged.styles",r=>this.setStyles(r))}setStyles(t){this.styles=t;const n=t.text||{};Object.values(n).filter(s=>s.fontFamily).forEach(s=>{let a=s.fontFamily;a.split(".").length>1&&(FontLoader.instance.loadFont(a),a=a.replace(/\.[^/.]+$/,""),a=a.split("/").pop(),s.fontFamily=a)});for(const s in n){const a=n[s];for(const l in a){const u=a[l];typeof u=="object"&&(a[l]=u.value+u.unit)}}for(const s in n){const a=n[s];a.hasOwnProperty("color")&&!a.color&&delete a.color}const o=this.getNodeScope&&this.getNodeScope();if(!o)return;const r=this.graphModel.getVariants();for(const s of r)this._variantHasInputsWithTypes(s,["color","textStyle"])&&o.getAllNodesWithVariantRecursive(s).forEach(l=>l.setVariant(s));["color","textStyle"].forEach(s=>{getInputsWithType(o,s).forEach(({node:a,inputs:l})=>{l.forEach(u=>{a.getInputValue(u)&&a.setInputValue(u,a.getInputValue(u))})})})}resolveColor(t){if(!this.styles.colors)return t;const n=this.styles.colors[t];return n||t}getTextStyle(t){return this.styles.text?this.styles.text[t]||{}:{}}_variantHasInputsWithTypes(t,n){if(!this.nodeRegister.hasNode(t.typename))return;const o=this.nodeRegister.getNodeMetadata(t.typename),r=new Set(Object.keys(t.parameters));for(const s in t.stateParameters)Object.keys(t.stateParameters[s]).forEach(a=>r.add(a));for(const s of Array.from(r)){const a=o.inputs[s]&&o.inputs[s].type;if(n.includes(a))return!0}return!1}}typeof window<"u"&&window.NoodlEditor&&(window.NoodlEditorInspectorAPI={enabled:!1,inspector:null,setInspector(e){this.inspector=e,this.enabled?this.inspector.enable():this.inspector.disable()},setEnabled(e){this.enabled=e,this.inspector&&(this.enabled?this.inspector.enable():this.inspector.disable()),window.NoodlEditorHighlightAPI.highlighter&&window.NoodlEditorHighlightAPI.highlighter.setWindowSelected(e)}},window.NoodlEditorHighlightAPI={highlighter:null,setHighlighter(e){this.highlighter=e,this.highlighter.setWindowSelected(window.NoodlEditorInspectorAPI.enabled)},selectNode(e){this.highlighter.deselectNodes(),e&&e!=="null"?this.highlighter.selectNodesWithId(e):window.NoodlEditorInspectorAPI.enabled&&this.highlighter.setWindowSelected(!0)}});class Viewer extends React.Component{constructor(t){super(t),this.state={popups:[]};const{noodlRuntime:n}=t;this.runningDeployed=this.props.projectData!==void 0,this.focusedNoodlNodes=[],n.context.setNodeFocused=this.setNodeFocused.bind(this);const o=typeof document<"u"&&document.location.href.indexOf("forceDebugger=true")!==-1||Noodl.enableDebugInspectors;if(n.setDebugInspectorsEnabled(o),n.context.setPopupCallbacks({onShow:r=>{const s=this.state.popups.concat([r]);n.getProjectSettings().bodyScroll&&s.length===1&&(document.body.style.width=document.body.clientWidth+"px",document.body.style.top=`-${window.scrollY}px`,document.body.style.position="fixed"),this.setState({popups:s})},onClose:r=>{const s=this.state.popups.filter(l=>l!==r);if(this.setState({popups:s}),n.getProjectSettings().bodyScroll&&s.length===0){const l=document.body.style.top;document.body.style.position="",document.body.style.top="",document.body.style.width="100%",window.scrollTo(0,parseInt(l||"0")*-1)}}}),registerNodes(n),createNoodlAPI(n),n.setProjectSettings(projectSettings),this.props.noodlModules)for(const r of this.props.noodlModules){if(r.reactNodes){const s=[];for(const l of r.reactNodes)s.push(createNodeFromReactComponent(l));const a=r.nodes||[];r.nodes=a.concat(s)}n.registerModule(r)}if(n.eventEmitter.on("rootComponentUpdated",()=>{requestAnimationFrame(()=>this.forceUpdate())}),n.graphModel.on("projectSettingsChanged",r=>{typeof document>"u"||(r.bodyScroll?document.body.classList.add("body-scroll"):document.body.classList.remove("body-scroll"))}),this.styles=new Styles({graphModel:n.graphModel,getNodeScope:()=>n.context.rootComponent&&n.context.rootComponent.nodeScope,nodeRegister:n.context.nodeRegister}),n.context.styles=this.styles,this.state.waitingForExport=!this.runningDeployed,this.runningDeployed){this.props.noodlRuntime.setData(this.props.projectData);const r=Object.keys(this.props.projectData.componentIndex);r.length<30&&setTimeout(()=>{this.props.noodlRuntime.prefetchBundles(r,3)},1e4)}else n.graphModel.on("editorImportComplete",()=>{this.setState({waitingForExport:!1})}),this.connectToEditor();this.focusedNoodlNodes=[]}connectToEditor(){const{noodlRuntime:t}=this.props;var n=(Noodl.host||location.protocol+"//"+location.host)+location.pathname+(location.search?location.search:"");const o=n.replace("http","ws");t.connectToEditor(o),this.highlightedNodes=new Map,this.isUpdatingHighlights=!1,typeof window<"u"&&window.NoodlEditor&&(this.highlighter=new Highlighter(t),NoodlEditorHighlightAPI.setHighlighter(this.highlighter),t.editorConnection.on("hoverStart",r=>{this.highlighter.highlightNodesWithId(r)}),t.editorConnection.on("hoverEnd",r=>{this.highlighter.disableHighlight()}),this.inspector=new Inspector({onDisableHighlight:()=>this.highlighter.disableHighlight(),onHighlight:r=>this.highlighter.highlightNodesWithId(r),onInspect:r=>{NoodlEditor.inspectNodes(r)}}),NoodlEditorInspectorAPI.setInspector(this.inspector)),t.editorConnection.on("debuggingEnabledChanged",r=>{t.setDebugInspectorsEnabled(r)}),this.graphWarnings=new GraphWarnings(t.graphModel,t.editorConnection)}setNodeFocused(t,n){if(n&&this.focusedNoodlNodes.indexOf(t)===-1)this.focusedNoodlNodes.filter(o=>!o.contains(t)).forEach(o=>{o._blur()}),t._focus(),this.focusedNoodlNodes.push(t);else if(!n){const o=this.focusedNoodlNodes.indexOf(t);if(o!==-1)return;t._blur(),this.focusedNoodlNodes.filter(r=>r.contains(t)).forEach(r=>{r._blur()}),this.focusedNoodlNodes.splice(o,1)}}onClickCapture(t){const n=[];let o=t.target;for(;o;)o.noodlNode&&o.noodlNode._focus&&n.push(o.noodlNode),o=o.parentNode;this.focusedNoodlNodes.filter(r=>n.indexOf(r)===-1).forEach(r=>r._blur()),n.filter(r=>this.focusedNoodlNodes.indexOf(r)===-1).forEach(r=>r._focus()),this.focusedNoodlNodes=n}render(){const t=this.props.noodlRuntime.rootComponent;if(this.state.waitingForExport)return null;if(!t)return this.runningDeployed?null:NoHomeError();if(this.props.noodlRuntime.getProjectSettings().bodyScroll){const o={margin:0,padding:0,minHeight:"100vh",alignSelf:"stretch",display:"flex",flexDirection:"column"};return React.createElement("div",{style:o,onClickCapture:r=>this.onClickCapture(r)},React.createElement("div",{style:{...o,isolation:"isolate"}},t.render()),this.state.popups.length?React.createElement("div",{style:{...o,isolation:"isolate"}},this.state.popups.map(r=>r.render())):null)}else return React.createElement("div",{style:{margin:0,padding:0,overflow:"hidden",width:"100%",height:"100%"},onClickCapture:o=>this.onClickCapture(o)},t.render(),this.state.popups.map(o=>o.render()))}}registerPolyfills();function createArgs(){return typeof window>"u"?{type:"browser",platform:{requestUpdate:e=>setImmediate(e),getCurrentTime:()=>0,objectToString:e=>JSON.stringify(e,null,2)},componentFilter:e=>!e.name.startsWith("/#__cloud__/")}:{type:"browser",platform:{requestUpdate:e=>window.requestAnimationFrame(e),getCurrentTime:()=>window.performance.now(),objectToString:e=>JSON.stringify(e,null,2)},componentFilter:e=>!e.name.startsWith("/#__cloud__/")}}const NoodlViewerReact={render(e,t,{isLocal:n=!1}){const o=createArgs();n&&(o.platform.isRunningLocally=()=>!0);const r=new Runtime(o);ReactDOM.render(React.createElement(Viewer,{noodlRuntime:r,noodlModules:t},null),e)},renderDeployed(e,t,n){e.children.length>0&&e.children[0].hasAttribute("data-reactroot")?ReactDOM.hydrate(this.createElement(t,n),e):ReactDOM.render(this.createElement(t,n),e)},createElement(e,t){const n=new Runtime({...createArgs(),runDeployed:!0});return React.createElement(Viewer,{noodlRuntime:n,noodlModules:e,projectData:t},null)}};window.ELECTRON_DISABLE_SECURITY_WARNINGS=!0,window.Noodl._viewerReact=NoodlViewerReact})(React,ReactDOM);
185
185
  //# sourceMappingURL=fluxscape.index.preview.js.map