escher.min.js 55 KB

1
  1. !function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i((t="undefined"!=typeof globalThis?globalThis:t||self).Escher={})}(this,function(t){"use strict";function n(){this.events=[]}function r(t,i){this.x=t||0,this.y=i||0}function h(t){void 0!==t?this.m=t:this.identity()}function O(){}function l(){this.uuid=O.generate(),this.children=[],this.parent=null,this.level=0,this.position=new r(0,0),this.origin=new r(0,0),this.scale=new r(1,1),this.rotation=0,this.visible=!0,this.layer=0,this.matrix=new h,this.globalMatrix=new h,this.inverseGlobalMatrix=new h,this.masks=[],this.matrixAutoUpdate=!0,this.matrixNeedsUpdate=!0,this.draggable=!1,this.pointerEvents=!0,this.ignoreViewport=!1,this.saveContextState=!0,this.restoreContextState=!0,this.pointerInside=!1,this.beingDragged=!1,this.serializable=!0}function a(){this.pressed=!1,this.justPressed=!1,this.justReleased=!1}function d(t,i){this._keys=new Array(5),this._position=new r(0,0),this._positionUpdated=!1,this._delta=new r(0,0),this._wheel=0,this._wheelUpdated=!1,this._doubleClicked=new Array(5),this.keys=new Array(5),this.position=new r(0,0),this.delta=new r(0,0),this.wheel=0,this.doubleClicked=new Array(5),this.domElement=void 0!==t?t:window,this.canvas=null,void 0!==i&&this.setCanvas(i),this.events=new n;for(var e=0;e<5;e++)this._doubleClicked[e]=!1,this.doubleClicked[e]=!1,this._keys[e]=new a,this.keys[e]=new a;var o,s=this;void 0!==window.onmousewheel?this.events.add(this.domElement,"mousewheel",function(t){s._wheel=t.deltaY,s._wheelUpdated=!0}):void 0!==window.addEventListener?this.events.add(this.domElement,"DOMMouseScroll",function(t){s._wheel=30*t.detail,s._wheelUpdated=!0}):this.events.add(this.domElement,"wheel",function(t){s._wheel=t.deltaY,s._wheelUpdated=!0}),(void 0!==window.ontouchstart||0<navigator.msMaxTouchPoints)&&(o=new r(0,0),this.events.add(this.domElement,"touchstart",function(t){t=t.touches[0];s.updatePosition(t.clientX,t.clientY,0,0),s.updateKey(d.LEFT,a.DOWN),o.set(t.clientX,t.clientY)}),this.events.add(this.domElement,"touchend",function(t){s.updateKey(d.LEFT,a.UP)}),this.events.add(this.domElement,"touchcancel",function(t){s.updateKey(d.LEFT,a.UP)}),this.events.add(document.body,"touchmove",function(t){t=t.touches[0];s.updatePosition(t.clientX,t.clientY,t.clientX-o.x,t.clientY-o.y),o.set(t.clientX,t.clientY)})),this.events.add(this.domElement,"mousemove",function(t){s.updatePosition(t.clientX,t.clientY,t.movementX,t.movementY)}),this.events.add(this.domElement,"mousedown",function(t){s.updateKey(t.which-1,a.DOWN)}),this.events.add(this.domElement,"mouseup",function(t){s.updateKey(t.which-1,a.UP)}),this.events.add(this.domElement,"dragstart",function(t){s.updateKey(t.which-1,a.UP)}),this.events.add(this.domElement,"dblclick",function(t){s._doubleClicked[t.which-1]=!0}),this.create()}function j(t){this.uuid=O.generate(),this.canvas=t,this.position=new r(0,0),this.center=new r(0,0),this.scale=1,this.rotation=0,this.matrix=new h,this.inverseMatrix=new h,this.matrixNeedsUpdate=!0,this.centerOnPointer=!1,this.rotationPoint=null}function p(t){this.viewport=t,this.dragButton=d.RIGHT,this.rotateButton=d.MIDDLE,this.allowScale=!0,this.recenterViewport=p.RECENTER_NONE,this.allowRotation=!0,this.rotationPoint=null,this.rotationInitial=0}function B(t){this.callback=t,this.running=!1,this.id=-1}function N(t,i){void 0===i&&(i={alpha:!0,disableContextMenu:!0,imageSmoothingEnabled:!0,imageSmoothingQuality:"low",globalCompositeOperation:"source-over"}),this.manager=new n,i.disableContextMenu&&this.manager.add(t,"contextmenu",function(t){t.preventDefault(),t.stopPropagation()}),this.manager.create(),this.canvas=t,this.container=null,this.context=this.canvas.getContext("2d",{alpha:i.alpha}),this.context.imageSmoothingEnabled=i.imageSmoothingEnabled,this.context.imageSmoothingQuality=i.imageSmoothingQuality,this.context.globalCompositeOperation=i.globalCompositeOperation,this.pointer=new d(window,this.canvas),this.autoClear=!0}function i(t,i){this.min=void 0!==t?t:new r,this.max=void 0!==i?i:new r}function e(){l.call(this)}function o(){e.call(this),this.box=new i(new r(-50,-35),new r(50,35)),this.invert=!1}function s(){this.cache=null,this.needsUpdate=!0}function c(t){s.call(this),this.color=t||"#000000"}function u(){l.call(this),this.box=new i(new r(-50,-50),new r(50,50)),this.strokeStyle=new c("#000000"),this.lineWidth=1,this.fillStyle=new c("#FFFFFF")}function y(){l.call(this),this.radius=10,this.strokeStyle=new c("#000000"),this.lineWidth=1,this.fillStyle=new c("#FFFFFF")}function m(){l.call(this),this.from=new r,this.to=new r,this.dashPattern=[5,5],this.strokeStyle=new c("#000000"),this.lineWidth=1}function f(){l.call(this),this.text="",this.font="16px Arial",this.strokeStyle=null,this.lineWidth=1,this.fillStyle=new c("#000000"),this.textAlign="center",this.textBaseline="middle"}function x(t){l.call(this),this.box=new i,this.image=document.createElement("img"),void 0!==t&&this.setImage(t)}function g(t){l.call(this),this.parentElement=null,this.element=document.createElement(t||"div"),this.element.style.transformStyle="preserve-3d",this.element.style.position="absolute",this.element.style.top="0px",this.element.style.bottom="0px",this.element.style.transformOrigin="0px 0px",this.element.style.overflow="auto",this.element.style.pointerEvents="none",this.size=new r(100,100)}function b(t){l.call(this),this.box=new i,this.image=document.createElement("img"),this.repetition="repeat",void 0!==t&&this.setImage(t)}function v(){f.call(this),this.maxWidth=null,this.lineHeight=null}function S(){m.call(this),this.fromCp=new r,this.toCp=new r}function w(){m.call(this),this.controlPoint=new r}function k(){u.call(this),this.radius=5}function P(){l.call(this),this.box=new i(new r(-50,-35),new r(50,35)),this.strokeStyle=new c("rgb(0, 153, 255)"),this.lineWidth=1,this.fillStyle=new c("rgba(0, 153, 255, 0.3)"),this.min=0,this.max=10,this.data=[]}function C(){P.call(this),this.radius=5,this.drawLine=!1}function M(){P.call(this),this.barWidth=null}function _(t,i){this.offset=t,this.color=i}function T(){s.call(this),this.colors=[]}function A(){T.call(this),this.start=new r(-100,0),this.end=new r(100,0)}function E(){l.call(this),this.value=50,this.min=0,this.max=100,this.radius=80,this.lineWidth=10,this.startAngle=Math.PI,this.endAngle=2*Math.PI,this.dial=!1,this.baseStyle=new c("#e9ecf1"),this.barStyle=new A,this.barStyle.start.set(-100,0),this.barStyle.end.set(100,0),this.barStyle.addColorStop(0,"#e5ff50"),this.barStyle.addColorStop(.5,"#50ff67"),this.barStyle.addColorStop(1,"#32adff")}function W(t){l.call(this),this.data=void 0!==t?t:[],this.sliceSize=!1,this.radius=50,this.lineWidth=1,this.startAngle=0,this.endAngle=2*Math.PI}function z(t){l.call(this),this.path=void 0!==t?t:new Path2D("M10 10 h 80 v 80 h -80 Z"),this.strokeStyle=new c("#000000"),this.lineWidth=1,this.fillStyle=new c("#FFFFFF")}function U(t){s.call(this),this.source=t||document.createElement("img"),this.repetition="repeat",this.matrix=new h}function L(){T.call(this),this.start=new r(0,0),this.startRadius=10,this.end=new r(0,0),this.endRadius=50}function F(){l.call(this)}function R(){S.call(this),this.lineWidth=2,this.outputSocket=null,this.inputSocket=null}function I(t,i,e,o){y.call(this),this.draggable=!0,this.radius=6,this.layer=1,this.name=void 0!==o?o:"",this.category=void 0!==e?e:"",this.multiple=!0,this.direction=i,this.node=t,this.connectors=[],this.creatingConnection=!1,this.text=new f,this.text.text=this.name,this.direction===I.INPUT?(this.text.position.x-=10,this.text.textAlign="right"):this.direction===I.OUTPUT&&(this.text.position.x+=10,this.text.textAlign="left"),this.add(this.text)}function D(){k.call(this),this.draggable=!0,this.inputs=[],this.outputs=[]}function G(){}function V(){}n.prototype.add=function(t,i,e){this.events.push([t,i,e,!1])},n.prototype.clear=function(){this.destroy(),this.events=[]},n.prototype.create=function(){for(var t=0;t<this.events.length;t++){var i=this.events[t];i[0].addEventListener(i[1],i[2]),i[3]=!0}},n.prototype.destroy=function(){for(var t=0;t<this.events.length;t++){var i=this.events[t];i[0].removeEventListener(i[1],i[2]),i[3]=!1}},r.prototype.set=function(t,i){this.x=t,this.y=i},r.prototype.setScalar=function(t){this.x=t,this.y=t},r.prototype.clone=function(){return new r(this.x,this.y)},r.prototype.copy=function(t){this.x=t.x,this.y=t.y},r.prototype.add=function(t){this.x+=t.x,this.y+=t.y},r.prototype.addScalar=function(t){this.x+=t,this.y+=t},r.prototype.addVectors=function(t,i){this.x=t.x+i.x,this.y=t.y+i.y},r.prototype.addScaledVector=function(t,i){this.x+=t.x*i,this.y+=t.y*i},r.prototype.sub=function(t){this.x-=t.x,this.y-=t.y},r.prototype.subScalar=function(t){this.x-=t,this.y-=t},r.prototype.subVectors=function(t,i){this.x=t.x-i.x,this.y=t.y-i.y},r.prototype.multiply=function(t){this.x*=t.x,this.y*=t.y},r.prototype.multiplyScalar=function(t){this.x*=t,this.y*=t},r.prototype.divide=function(t){this.x/=t.x,this.y/=t.y},r.prototype.divideScalar=function(t){return this.multiplyScalar(1/t)},r.prototype.min=function(t){this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y)},r.prototype.max=function(t){this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y)},r.prototype.clamp=function(t,i){this.x=Math.max(t.x,Math.min(i.x,this.x)),this.y=Math.max(t.y,Math.min(i.y,this.y))},r.prototype.clampScalar=function(t,i){this.x=Math.max(t,Math.min(i,this.x)),this.y=Math.max(t,Math.min(i,this.y))},r.prototype.clampLength=function(t,i){var e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(t,Math.min(i,e)))},r.prototype.floor=function(){this.x=Math.floor(this.x),this.y=Math.floor(this.y)},r.prototype.ceil=function(){this.x=Math.ceil(this.x),this.y=Math.ceil(this.y)},r.prototype.round=function(){this.x=Math.round(this.x),this.y=Math.round(this.y)},r.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},r.prototype.dot=function(t){return this.x*t.x+this.y*t.y},r.prototype.cross=function(t){return this.x*t.y-this.y*t.x},r.prototype.lengthSq=function(){return this.x*this.x+this.y*this.y},r.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},r.prototype.manhattanLength=function(){return Math.abs(this.x)+Math.abs(this.y)},r.prototype.normalize=function(){return this.divideScalar(this.length()||1)},r.prototype.angle=function(t){var i=Math.atan2(this.y,this.x);return t&&i<0&&(i+=2*Math.PI),i},r.prototype.distanceTo=function(t){return Math.sqrt(this.distanceToSquared(t))},r.prototype.distanceToSquared=function(t){var i=this.x-t.x,t=this.y-t.y;return i*i+t*t},r.prototype.manhattanDistanceTo=function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)},r.prototype.setLength=function(t){return this.normalize().multiplyScalar(t)},r.prototype.lerp=function(t,i){this.x+=(t.x-this.x)*i,this.y+=(t.y-this.y)*i},r.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},r.prototype.fromArray=function(t){this.set(t[0],t[1])},r.prototype.toArray=function(){return[this.x,this.y]},r.prototype.rotateAround=function(t,i){var e=Math.cos(i),i=Math.sin(i),o=this.x-t.x,s=this.y-t.y;this.x=o*e-s*i+t.x,this.y=o*i+s*e+t.y},h.prototype.copy=function(t){this.m=t.m.slice(0)},h.prototype.clone=function(){return new h(this.m.slice(0))},h.prototype.identity=function(){this.m=[1,0,0,1,0,0]},h.prototype.multiply=function(t){var i=this.m[0]*t.m[0]+this.m[2]*t.m[1],e=this.m[1]*t.m[0]+this.m[3]*t.m[1],o=this.m[0]*t.m[2]+this.m[2]*t.m[3],s=this.m[1]*t.m[2]+this.m[3]*t.m[3],n=this.m[0]*t.m[4]+this.m[2]*t.m[5]+this.m[4],t=this.m[1]*t.m[4]+this.m[3]*t.m[5]+this.m[5];this.m=[i,e,o,s,n,t]},h.prototype.premultiply=function(t){var i=t.m[0]*this.m[0]+t.m[2]*this.m[1],e=t.m[1]*this.m[0]+t.m[3]*this.m[1],o=t.m[0]*this.m[2]+t.m[2]*this.m[3],s=t.m[1]*this.m[2]+t.m[3]*this.m[3],n=t.m[0]*this.m[4]+t.m[2]*this.m[5]+t.m[4],t=t.m[1]*this.m[4]+t.m[3]*this.m[5]+t.m[5];this.m=[i,e,o,s,n,t]},h.prototype.compose=function(t,i,e,o,s,n,r){this.m=[1,0,0,1,t,i],0!==r&&(t=Math.cos(r),i=Math.sin(r),this.multiply(new h([t,i,-i,t,0,0]))),1===e&&1===o||this.scale(e,o),0===s&&0===n||this.multiply(new h([1,0,0,1,-s,-n]))},h.prototype.translate=function(t,i){this.m[4]+=this.m[0]*t+this.m[2]*i,this.m[5]+=this.m[1]*t+this.m[3]*i},h.prototype.rotate=function(t){var i=Math.cos(t),t=Math.sin(t),e=this.m[0]*i+this.m[2]*t,o=this.m[1]*i+this.m[3]*t,s=this.m[0]*-t+this.m[2]*i,t=this.m[1]*-t+this.m[3]*i;this.m[0]=e,this.m[1]=o,this.m[2]=s,this.m[3]=t},h.prototype.scale=function(t,i){this.m[0]*=t,this.m[1]*=t,this.m[2]*=i,this.m[3]*=i},h.prototype.setPosition=function(t,i){this.m[4]=t,this.m[5]=i},h.prototype.getScale=function(){return new r(this.m[0],this.m[3])},h.prototype.getPosition=function(){return new r(this.m[4],this.m[5])},h.prototype.skew=function(t,i){this.multiply(new h([1,Math.tan(i),Math.tan(t),1,0,0]))},h.prototype.determinant=function(){return 1/(this.m[0]*this.m[3]-this.m[1]*this.m[2])},h.prototype.getInverse=function(){var t=this.determinant();return new h([this.m[3]*t,-this.m[1]*t,-this.m[2]*t,this.m[0]*t,t*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),t*(this.m[1]*this.m[4]-this.m[0]*this.m[5])])},h.prototype.transformPoint=function(t){return new r(t.x*this.m[0]+t.y*this.m[2]+this.m[4],t.x*this.m[1]+t.y*this.m[3]+this.m[5])},h.prototype.setContextTransform=function(t){t.setTransform(this.m[0],this.m[1],this.m[2],this.m[3],this.m[4],this.m[5])},h.prototype.tranformContext=function(t){t.transform(this.m[0],this.m[1],this.m[2],this.m[3],this.m[4],this.m[5])},h.prototype.cssTransform=function(){return"matrix("+this.m[0]+","+this.m[1]+","+this.m[2]+","+this.m[3]+","+this.m[4]+","+this.m[5]+")"},O.generate=function(){for(var s=[],t=0;t<256;t++)s[t]=(t<16?"0":"")+t.toString(16);return function(){var t=4294967295*Math.random()|0,i=4294967295*Math.random()|0,e=4294967295*Math.random()|0,o=4294967295*Math.random()|0;return(s[255&t]+s[t>>8&255]+s[t>>16&255]+s[t>>24&255]+"-"+s[255&i]+s[i>>8&255]+"-"+s[i>>16&15|64]+s[i>>24&255]+"-"+s[63&e|128]+s[e>>8&255]+"-"+s[e>>16&255]+s[e>>24&255]+s[255&o]+s[o>>8&255]+s[o>>16&255]+s[o>>24&255]).toUpperCase()}}(),(l.prototype.constructor=l).prototype.type="Object2D",l.types=new Map([[l.prototype.type,l]]),l.register=function(t,i){l.types.set(i,t)},l.prototype.getWorldPointIntersections=function(t,i){void 0===i&&(i=[]);var e=this.inverseGlobalMatrix.transformPoint(t);this.isInside(e)&&i.push(this);for(var o=0;o<this.children.length;o++)this.children[o].getWorldPointIntersections(t,i);return i},l.prototype.isWorldPointInside=function(t,i){var e=this.inverseGlobalMatrix.transformPoint(t);if(this.isInside(e))return!0;if(i)for(var o=0;o<this.children.length;o++)if(this.children[o].isWorldPointInside(t,!0))return!0;return!1},l.prototype.destroy=function(){null!==this.parent&&this.parent.remove(this)},l.prototype.traverse=function(t){t(this);for(var i=0;i<this.children.length;i++)this.children[i].traverse(t)},l.prototype.getChildByUUID=function(i){var e=null;return this.traverse(function(t){t.uuid===i&&(e=t)}),e},l.prototype.add=function(t){t.parent=this,t.level=this.level+1,t.traverse(function(t){null!==t.onAdd&&t.onAdd(this)}),this.children.push(t)},l.prototype.remove=function(t){var i,t=this.children.indexOf(t);-1!==t&&((i=this.children[t]).parent=null,i.level=0,i.traverse(function(t){null!==t.onRemove&&t.onRemove(this)}),this.children.splice(t,1))},l.prototype.isInside=function(t){return!1},l.prototype.updateMatrix=function(t){(this.matrixAutoUpdate||this.matrixNeedsUpdate)&&(this.matrix.compose(this.position.x,this.position.y,this.scale.x,this.scale.y,this.origin.x,this.origin.y,this.rotation),this.globalMatrix.copy(this.matrix),null!==this.parent&&this.globalMatrix.premultiply(this.parent.globalMatrix),this.inverseGlobalMatrix=this.globalMatrix.getInverse(),this.matrixNeedsUpdate=!1)},l.prototype.transform=function(t,i,e,o){this.globalMatrix.tranformContext(t)},l.prototype.style=null,l.prototype.draw=null,l.prototype.onPointerDrag=function(t,i,e,o){this.position.add(e)},l.prototype.onPointerDragStart=null,l.prototype.onPointerDragEnd=null,l.prototype.onAdd=null,l.prototype.onRemove=null,l.prototype.onUpdate=null,l.prototype.onPointerEnter=null,l.prototype.onPointerLeave=null,l.prototype.onPointerOver=null,l.prototype.onButtonPressed=null,l.prototype.onDoubleClick=null,l.prototype.onButtonDown=null,l.prototype.onButtonUp=null,l.prototype.serialize=function(t){var i={uuid:this.uuid,type:this.type,position:this.position.toArray(),origin:this.origin.toArray(),scale:this.scale.toArray(),rotation:this.rotation,visible:this.visible,layer:this.layer,matrix:this.matrix.m,globalMatrix:this.globalMatrix.m,inverseGlobalMatrix:this.inverseGlobalMatrix.m,matrixAutoUpdate:this.matrixAutoUpdate,draggable:this.draggable,pointerEvents:this.pointerEvents,ignoreViewport:this.ignoreViewport,saveContextState:this.saveContextState,restoreContextState:this.restoreContextState,children:[],masks:[]};if(!1!==t)for(var e=0;e<this.children.length;e++)this.children[e].serializable&&i.children.push(this.children[e].serialize());for(e=0;e<this.masks.length;e++)i.masks.push(this.masks[e].uuid);return i},l.prototype.parse=function(t,i){this.uuid=t.uuid,this.position.fromArray(t.position),this.origin.fromArray(t.origin),this.scale.fromArray(t.scale),this.rotation=t.rotation,this.visible=t.visible,this.layer=t.layer,this.matrix=new h(t.matrix),this.globalMatrix=new h(t.globalMatrix),this.inverseGlobalMatrix=new h(t.inverseGlobalMatrix),this.matrixAutoUpdate=t.matrixAutoUpdate,this.draggable=t.draggable,this.pointerEvents=t.pointerEvents,this.ignoreViewport=t.ignoreViewport,this.saveContextState=t.saveContextState,this.restoreContextState=t.restoreContextState;for(var e=0;e<this.masks.length;e++)t.masks.push(i.getChildByUUID(t.masks[e]))},l.parse=function(t){var s=[];for(var i=function t(i){if(!l.types.has(i.type))throw new Error("Object type "+i.type+" unknown. Cannot parse data.");var e=new(l.types.get(i.type));e.uuid=i.uuid,s.push({object:e,data:i});for(var o=0;o<i.children.length;o++)e.add(t(i.children[o]));return e}(t),e=0;e<s.length;e++)s[e].object.parse(s[e].data,i);return i},a.DOWN=-1,a.UP=1,a.RESET=0,(a.prototype.constructor=a).prototype.update=function(t){this.justPressed=!1,this.justReleased=!1,t===a.DOWN?(!1===this.pressed&&(this.justPressed=!0),this.pressed=!0):t===a.UP?(this.pressed&&(this.justReleased=!0),this.pressed=!1):t===a.RESET&&(this.justReleased=!1,this.justPressed=!1)},a.prototype.set=function(t,i,e){this.justPressed=t,this.pressed=i,this.justReleased=e},a.prototype.reset=function(){this.justPressed=!1,this.pressed=!1,this.justReleased=!1},((d.prototype=d).constructor=d).LEFT=0,d.MIDDLE=1,d.RIGHT=2,d.BACK=3,d.FORWARD=4,d.setCanvas=function(t){(this.canvas=t).pointerInside=!1,t.addEventListener("mouseenter",function(){this.pointerInside=!0}),t.addEventListener("mouseleave",function(){this.pointerInside=!1})},d.insideCanvas=function(){return null!==this.canvas&&this.canvas.pointerInside},d.buttonPressed=function(t){return this.keys[t].pressed},d.buttonDoubleClicked=function(t){return this.doubleClicked[t]},d.buttonJustPressed=function(t){return this.keys[t].justPressed},d.buttonJustReleased=function(t){return this.keys[t].justReleased},d.updatePosition=function(t,i,e,o){var s;null!==this.canvas&&(t-=(s=this.canvas.getBoundingClientRect()).left,i-=s.top),this._position.set(t,i),this._delta.x+=e,this._delta.y+=o,this._positionUpdated=!0},d.updateKey=function(t,i){-1<t&&this._keys[t].update(i)},d.update=function(){for(var t=0;t<5;t++)this._keys[t].justPressed&&this.keys[t].justPressed&&(this._keys[t].justPressed=!1),this._keys[t].justReleased&&this.keys[t].justReleased&&(this._keys[t].justReleased=!1),this.keys[t].set(this._keys[t].justPressed,this._keys[t].pressed,this._keys[t].justReleased),!0===this._doubleClicked[t]?(this.doubleClicked[t]=!0,this._doubleClicked[t]=!1):this.doubleClicked[t]=!1;this._wheelUpdated?(this.wheel=this._wheel,this._wheelUpdated=!1):this.wheel=0,this._positionUpdated?(this.delta.copy(this._delta),this.position.copy(this._position),this._delta.set(0,0),this._positionUpdated=!1):(this.delta.x=0,this.delta.y=0)},d.create=function(){this.events.create()},d.dispose=function(){this.events.destroy()},j.prototype.updateMatrix=function(){var t,i;this.matrixNeedsUpdate&&(this.matrix.m=[1,0,0,1,this.position.x,this.position.y],0===this.center.x&&0===this.center.y||this.matrix.multiply(new h([1,0,0,1,this.center.x,this.center.y])),0!==this.rotation&&(t=Math.cos(this.rotation),i=Math.sin(this.rotation),this.matrix.multiply(new h([t,i,-i,t,0,0]))),1!==this.scale&&this.matrix.multiply(new h([this.scale,0,0,this.scale,0,0])),0===this.center.x&&0===this.center.y||this.matrix.multiply(new h([1,0,0,1,-this.center.x,-this.center.y])),this.inverseMatrix=this.matrix.getInverse(),this.matrixNeedsUpdate=!1)},j.prototype.centerObject=function(t,i){t=t.globalMatrix.transformPoint(new r);t.multiplyScalar(-this.scale),t.x+=i.width/2,t.y+=i.height/2,this.position.copy(t),this.matrixNeedsUpdate=!0},p.RECENTER_NONE=0,p.RECENTER_CANVAS=1,p.RECENTER_POINTER=2,p.prototype.update=function(t){var i;this.allowScale&&0!==t.wheel&&(i=.001*t.wheel*this.viewport.scale,this.viewport.scale-=i,this.viewport.matrixNeedsUpdate=!0),this.allowRotation&&t.buttonPressed(this.rotateButton)?null===this.rotationPoint?(this.rotationPoint=t.position.clone(),this.rotationInitial=this.viewport.rotation):((i=t.position.clone()).sub(this.rotationPoint),this.viewport.rotation=this.rotationInitial+i.angle(),this.viewport.matrixNeedsUpdate=!0):(this.rotationPoint=null,t.buttonPressed(this.dragButton)&&(this.viewport.position.add(t.delta),this.viewport.matrixNeedsUpdate=!0),null!==t.canvas&&(this.recenterViewport===p.RECENTER_CANVAS?(i=new r(t.canvas.width/2,t.canvas.height/2),i=this.viewport.inverseMatrix.transformPoint(i),this.viewport.center.copy(i),this.viewport.matrixNeedsUpdate=!0):this.recenterViewport===p.RECENTER_POINTER&&(i=this.viewport.inverseMatrix.transformPoint(t.position),this.viewport.center.copy(i),this.viewport.matrixNeedsUpdate=!0)))},B.prototype.start=function(){var i;this.running||(this.running=!0,i=this,function t(){i.callback(),i.running&&(i.id=requestAnimationFrame(t))}())},B.prototype.stop=function(){this.running=!1,cancelAnimationFrame(this.id)},N.prototype.getDomContainer=function(){return null!==this.container?this.container:this.canvas.parentElement},N.prototype.createRenderLoop=function(t,i,e){var o=this,s=new p(i),n=new B(function(){void 0!==e&&e(),s.update(o.pointer),o.update(t,i)});return n.start(),n},N.prototype.dispose=function(t,i,e){this.manager.destroy(),this.pointer.dispose()},N.prototype.update=function(t,i){for(var e=[],o=(t.traverse(function(t){t.visible&&e.push(t)}),e.sort(function(t,i){return i.layer===t.layer?i.level-t.level:i.layer-t.layer}),this.pointer),s=(o.update(),i.updateMatrix(),o.position.clone()),n=i.inverseMatrix.transformPoint(s),r=0;r<e.length;r++)if((a=e[r]).pointerEvents){var h=a.inverseGlobalMatrix.transformPoint(a.ignoreViewport?s:n);if(a.isInside(h)){if(a.pointerInside||null===a.onPointerEnter||a.onPointerEnter(o,i),null!==a.onPointerOver&&a.onPointerOver(o,i),o.buttonDoubleClicked(d.LEFT)&&null!==a.onDoubleClick&&a.onDoubleClick(o,i),o.buttonPressed(d.LEFT)&&null!==a.onButtonPressed&&a.onButtonPressed(o,i),o.buttonJustReleased(d.LEFT)&&null!==a.onButtonUp&&a.onButtonUp(o,i),o.buttonJustPressed(d.LEFT)&&(null!==a.onButtonDown&&a.onButtonDown(o,i),a.draggable)){a.beingDragged=!0,null!==a.onPointerDragStart&&a.onPointerDragStart(o,i);break}a.pointerInside=!0}else a.pointerInside&&(null!==a.onPointerLeave&&a.onPointerLeave(o,i),a.pointerInside=!1);o.buttonJustReleased(d.LEFT)&&a.draggable&&(!0===a.beingDragged&&null!==a.onPointerDragEnd&&a.onPointerDragEnd(o,i),a.beingDragged=!1)}for(var a,l,p,c,r=0;r<e.length;r++)(a=e[r]).beingDragged&&null!==a.onPointerDrag&&((p=o.position.clone()).sub(o.delta),l=i.inverseMatrix.transformPoint(o.position),p=i.inverseMatrix.transformPoint(p),(c=l.clone()).sub(p),a.onPointerDrag(o,i,c,l)),null!==a.onUpdate&&a.onUpdate();t.traverse(function(t){t.updateMatrix()}),this.context.setTransform(1,0,0,1,0,0),this.autoClear&&this.context.clearRect(0,0,this.canvas.width,this.canvas.height);for(r=e.length-1;0<=r;r--)if(!e[r].isMask){e[r].saveContextState&&this.context.save();for(var u=e[r].masks,y=0;y<u.length;y++)u[y].ignoreViewport||i.matrix.setContextTransform(this.context),u[y].transform(this.context,i,this.canvas,this),u[y].clip(this.context,i,this.canvas);e[r].ignoreViewport?0<u.length&&this.context.setTransform(1,0,0,1,0,0):i.matrix.setContextTransform(this.context),e[r].transform(this.context,i,this.canvas,this),null!==e[r].style&&e[r].style(this.context,i,this.canvas),null!==e[r].draw&&e[r].draw(this.context,i,this.canvas),e[r].restoreContextState&&this.context.restore()}},i.prototype.set=function(t,i){return this.min.copy(t),this.max.copy(i),this},i.prototype.setFromPoints=function(t){this.min=new r(1/0,1/0),this.max=new r(-1/0,-1/0);for(var i=0,e=t.length;i<e;i++)this.expandByPoint(t[i]);return this},i.prototype.setFromCenterAndSize=function(t,i){i=(new r).copy(i).multiplyScalar(.5);return this.min.copy(t).sub(i),this.max.copy(t).add(i),this},i.prototype.clone=function(){var t=new i;return t.copy(this),t},i.prototype.copy=function(t){this.min.copy(t.min),this.max.copy(t.max)},i.prototype.isEmpty=function(){return this.max.x<this.min.x||this.max.y<this.min.y},i.prototype.getCenter=function(t){return void 0===t&&(t=new r),this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5),t},i.prototype.getSize=function(t){return void 0===t&&(t=new r),this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min),t},i.prototype.expandByPoint=function(t){return this.min.min(t),this.max.max(t),this},i.prototype.expandByVector=function(t){this.min.sub(t),this.max.add(t)},i.prototype.expandByScalar=function(t){this.min.addScalar(-t),this.max.addScalar(t)},i.prototype.containsPoint=function(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y)},i.prototype.containsBox=function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},i.prototype.intersectsBox=function(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y)},i.prototype.distanceToPoint=function(t){return(new r).copy(t).clamp(this.min,this.max).sub(t).length()},i.prototype.intersect=function(t){this.min.max(t.min),this.max.min(t.max)},i.prototype.union=function(t){this.min.min(t.min),this.max.max(t.max)},i.prototype.translate=function(t){this.min.add(t),this.max.add(t)},i.prototype.equals=function(t){return t.min.equals(this.min)&&t.max.equals(this.max)},i.prototype.toArray=function(){return[this.min.x,this.min.y,this.max.x,this.max.y]},i.prototype.fromArray=function(t){this.min.set(t[0],t[1]),this.max.set(t[2],t[3])},((e.prototype=Object.create(l.prototype)).constructor=e).prototype.type="Mask",l.register(e,"Mask"),e.prototype.isMask=!0,e.prototype.clip=function(t,i,e){},((o.prototype=Object.create(e.prototype)).constructor=o).prototype.type="BoxMask",l.register(o,"BoxMask"),o.prototype.isInside=function(t){return this.box.containsPoint(t)},o.prototype.clip=function(t,i,e){t.beginPath();var o,s=this.box.max.x-this.box.min.x;this.invert?(t.rect(this.box.min.x-1e4,-5e3,1e4,1e4),t.rect(this.box.max.x,-5e3,1e4,1e4),t.rect(this.box.min.x,this.box.min.y-1e4,s,1e4),t.rect(this.box.min.x,this.box.max.y,s,1e4)):(o=this.box.max.y-this.box.min.y,t.fillRect(this.box.min.x,this.box.min.y,s,o)),t.clip()},s.prototype.get=function(t){},s.prototype.serialize=function(){},s.prototype.parse=function(t){},s.types=new Map([]),s.register=function(t,i){s.types.set(i,t)},s.parse=function(t){var i=new(s.types.get(t.type));return i.parse(t),i},c.prototype=Object.create(s.prototype),s.register(c,"Color"),c.prototype.get=function(t){return this.color},c.prototype.serialize=function(){return{type:"Color",color:this.color}},c.prototype.parse=function(t){this.color=t.color},((u.prototype=Object.create(l.prototype)).constructor=u).prototype.type="Box",l.register(u,"Box"),u.prototype.isInside=function(t){return this.box.containsPoint(t)},u.prototype.draw=function(t,i,e){var o=this.box.max.x-this.box.min.x,s=this.box.max.y-this.box.min.y;null!==this.fillStyle&&(t.fillStyle=this.fillStyle.get(t),t.fillRect(this.box.min.x,this.box.min.y,o,s)),null!==this.strokeStyle&&(t.lineWidth=this.lineWidth,t.strokeStyle=this.strokeStyle.get(t),t.strokeRect(this.box.min.x,this.box.min.y,o,s))},u.prototype.serialize=function(t){t=l.prototype.serialize.call(this,t);return t.box=this.box.toArray(),t.strokeStyle=null!==this.strokeStyle?this.strokeStyle.serialize():null,t.lineWidth=this.lineWidth,t.fillStyle=null!==this.fillStyle?this.fillStyle.serialize():null,t},u.prototype.parse=function(t,i){l.prototype.parse.call(this,t,i),this.box.fromArray(t.box),this.strokeStyle=null!==t.strokeStyle?s.parse(t.strokeStyle):null,this.lineWidth=t.lineWidth,this.fillStyle=null!==t.fillStyle?s.parse(t.fillStyle):null},((y.prototype=Object.create(l.prototype)).constructor=y).prototype.type="Circle",l.register(y,"Circle"),y.prototype.isInside=function(t){return t.length()<=this.radius},y.prototype.draw=function(t,i,e){t.beginPath(),t.arc(0,0,this.radius,0,2*Math.PI),null!==this.fillStyle&&(t.fillStyle=this.fillStyle.get(t),t.fill()),null!==this.strokeStyle&&(t.lineWidth=this.lineWidth,t.strokeStyle=this.strokeStyle.get(t),t.stroke())},y.prototype.serialize=function(t){t=l.prototype.serialize.call(this,t);return t.radius=this.radius,t.strokeStyle=null!==this.strokeStyle?this.strokeStyle.serialize():null,t.lineWidth=this.lineWidth,t.fillStyle=null!==this.fillStyle?this.fillStyle.serialize():null,t},y.prototype.parse=function(t,i){l.prototype.parse.call(this,t,i),this.radius=t.radius,this.strokeStyle=null!==t.strokeStyle?s.parse(t.strokeStyle):null,this.lineWidth=t.lineWidth,this.fillStyle=null!==t.fillStyle?s.parse(t.fillStyle):null},((m.prototype=Object.create(l.prototype)).constructor=m).prototype.type="Line",l.register(m,"Line"),m.prototype.style=function(t,i,e){t.lineWidth=this.lineWidth,t.strokeStyle=this.strokeStyle.get(t),t.setLineDash(this.dashPattern)},m.prototype.draw=function(t,i,e){t.beginPath(),t.moveTo(this.from.x,this.from.y),t.lineTo(this.to.x,this.to.y),t.stroke()},m.prototype.serialize=function(t){t=l.prototype.serialize.call(this,t);return t.from=this.from.toArray(),t.to=this.to.toArray(),t.dashPattern=this.dashPattern,t.strokeStyle=null!==this.strokeStyle?this.strokeStyle.serialize():null,t.lineWidth=this.lineWidth,t},m.prototype.parse=function(t,i){l.prototype.parse.call(this,t,i),this.to.fromArray(t.to),this.from.fromArray(t.from),this.dashPattern=t.dashPattern,this.strokeStyle=null!==t.strokeStyle?s.parse(t.strokeStyle):null,this.lineWidth=t.lineWidth},((f.prototype=Object.create(l.prototype)).constructor=f).prototype.type="Text",l.register(f,"Text"),f.prototype.draw=function(t,i,e){t.font=this.font,t.textAlign=this.textAlign,t.textBaseline=this.textBaseline,null!==this.fillStyle&&(t.fillStyle=this.fillStyle.get(t),t.fillText(this.text,0,0)),null!==this.strokeStyle&&(t.strokeStyle=this.strokeStyle.get(t),t.strokeText(this.text,0,0))},f.prototype.serialize=function(t){t=l.prototype.serialize.call(this,t);return t.text=this.text,t.font=this.font,t.strokeStyle=null!==this.strokeStyle?this.strokeStyle.serialize():null,t.lineWidth=this.lineWidth,t.fillStyle=null!==this.fillStyle?this.fillStyle.serialize():null,t.textAlign=this.textAlign,t.textBaseline=this.textBaseline,t},f.prototype.parse=function(t,i){l.prototype.parse.call(this,t,i),this.text=t.text,this.font=t.font,this.strokeStyle=null!==t.strokeStyle?Style.parse(t.strokeStyle):null,this.lineWidth=t.lineWidth,this.fillStyle=null!==t.fillStyle?Style.parse(t.fillStyle):null,this.textAlign=t.textAlign,this.textBaseline=t.textBaseline},((x.prototype=Object.create(l.prototype)).constructor=x).prototype.type="Image",l.register(x,"Image"),x.prototype.setImage=function(t){var i=this;this.image.onload=function(){i.box.min.set(0,0),i.box.max.set(this.naturalWidth,this.naturalHeight)},this.image.src=t},x.prototype.isInside=function(t){return this.box.containsPoint(t)},x.prototype.draw=function(t,i,e){0<this.image.src.length&&t.drawImage(this.image,0,0,this.image.naturalWidth,this.image.naturalHeight,this.box.min.x,this.box.min.y,this.box.max.x-this.box.min.x,this.box.max.y-this.box.min.y)},x.prototype.serialize=function(t){t=l.prototype.serialize.call(this,t);return t.box=this.box.toArray(),t.image=this.image.src,t},x.prototype.parse=function(t,i){l.prototype.parse.call(this,t,i),this.box.fromArray(t.box),this.image.src=t.image},((g.prototype=Object.create(l.prototype)).constructor=g).prototype.type="DOM",l.register(g,"DOM"),g.prototype.onAdd=function(){null!==this.parentElement&&this.parentElement.appendChild(this.element)},g.prototype.onRemove=function(){null!==this.parentElement&&this.parentElement.removeChild(this.element)},g.prototype.transform=function(t,i,e,o){null===this.parentElement&&(this.parentElement=o.getDomContainer(),this.parentElement.appendChild(this.element)),this.ignoreViewport?this.element.style.transform=this.globalMatrix.cssTransform():((o=i.matrix.clone()).multiply(this.globalMatrix),this.element.style.transform=o.cssTransform()),this.element.style.width=this.size.x+"px",this.element.style.height=this.size.y+"px",this.element.style.display=this.visible?"block":"none"},g.prototype.serialize=function(t){t=l.prototype.serialize.call(this,t);return t.size=this.size.toArray(),t.element=this.element.outerHTML,t},g.prototype.parse=function(t,i){l.prototype.parse.call(this,t,i),this.size.fromArray(t.size);i=(new DOMParser).parseFromString(this.element.outerHTML,"text/html");this.element=i.body.children[0]},((b.prototype=Object.create(l.prototype)).constructor=b).prototype.type="Pattern",l.register(b,"Pattern"),b.prototype.setImage=function(t){var i=this;this.image.onload=function(){i.box.min.set(0,0),i.box.max.set(this.naturalWidth,this.naturalHeight)},this.image.src=t},b.prototype.isInside=function(t){return this.box.containsPoint(t)},b.prototype.draw=function(t,i,e){var o,s=this.box.max.x-this.box.min.x,n=this.box.max.y-this.box.min.y;0<this.image.src.length&&(o=t.createPattern(this.image,this.repetition),t.fillStyle=o,t.fillRect(this.box.min.x,this.box.min.y,s,n))},b.prototype.serialize=function(t){t=l.prototype.serialize.call(this,t);return t.box=this.box.toArray(),t.image=this.image.src,t.repetition=this.repetition,t},b.prototype.parse=function(t,i){l.prototype.parse.call(this,t,i),this.box.fromArray(t.box),this.image.src=t.image,this.repetition=t.repetition},((v.prototype=Object.create(f.prototype)).constructor=v).prototype.type="MultiLineText",l.register(v,"MultiLineText"),v.prototype.draw=function(t,i,e){t.font=this.font,t.textAlign=this.textAlign,t.textBaseline=this.textBaseline;for(var o=this.lineHeight||Number.parseFloat(this.font),s=this.text.split("\n"),n=0,r=0;r<s.length;r++){var h=s[r],a=t.measureText(h),l=[];if(null!==this.maxWidth&&a.width>this.maxWidth)for(;0<h.length;){for(var p="",c=t.measureText(p+h[0]);c.width<this.maxWidth&&0<h.length;)p+=h[0],h=h.substr(1),c=t.measureText(p+h[0]);l.push(p)}else l=[h];for(var u=0;u<l.length;u++)null!==this.fillStyle&&(t.fillStyle=this.fillStyle.get(t),t.fillText(l[u],this.position.x,this.position.y+n)),null!==this.strokeStyle&&(t.lineWidth=this.lineWidth,t.strokeStyle=this.strokeStyle.get(t),t.strokeText(l[u],this.position.x,this.position.y+n)),n+=o}},v.prototype.serialize=function(t){t=f.prototype.serialize.call(this,t);return t.maxWidth=this.maxWidth,t.lineHeight=this.lineHeight,t},v.prototype.parse=function(t,i){f.prototype.parse.call(this,t,i),this.maxWidth=t.maxWidth,this.lineHeight=t.lineHeight},((S.prototype=Object.create(m.prototype)).constructor=S).prototype.type="BezierCurve",l.register(S,"BezierCurve"),S.curveHelper=function(o){var s=new y,t=(s.radius=3,s.layer=o.layer+1,s.draggable=!0,s.onPointerDrag=function(t,i,e){l.prototype.onPointerDrag.call(this,t,i,e),o.fromCp.copy(s.position)},o.parent.add(s),new m),n=(t.from=o.from,t.to=o.fromCp,o.parent.add(t),new y),t=(n.radius=3,n.layer=o.layer+1,n.draggable=!0,n.onPointerDrag=function(t,i,e){l.prototype.onPointerDrag.call(this,t,i,e),o.toCp.copy(n.position)},o.parent.add(n),new m);t.from=o.to,t.to=o.toCp,o.parent.add(t)},S.prototype.draw=function(t,i,e){t.beginPath(),t.moveTo(this.from.x,this.from.y),t.bezierCurveTo(this.fromCp.x,this.fromCp.y,this.toCp.x,this.toCp.y,this.to.x,this.to.y),t.stroke()},S.prototype.serialize=function(t){t=m.prototype.serialize.call(this,t);return t.fromCp=this.fromCp.toArray(),t.toCp=this.toCp.toArray(),t},S.prototype.parse=function(t,i){m.prototype.parse.call(this,t,i),this.fromCp.fromArray(t.fromCp),this.toCp.fromArray(t.toCp)},((w.prototype=Object.create(m.prototype)).constructor=w).prototype.type="QuadraticCurve",l.register(w,"QuadraticCurve"),w.curveHelper=function(o){var t=new m,s=(t.from=o.from,t.to=o.controlPoint,o.parent.add(t),new y),t=(s.radius=3,s.layer=o.layer+1,s.draggable=!0,s.position=o.controlPoint,s.onPointerDrag=function(t,i,e){l.prototype.onPointerDrag.call(this,t,i,e),o.controlPoint.copy(s.position)},o.parent.add(s),new m);t.from=o.to,t.to=o.controlPoint,o.parent.add(t)},w.prototype.draw=function(t,i,e){t.beginPath(),t.moveTo(this.from.x,this.from.y),t.quadraticCurveTo(this.controlPoint.x,this.controlPoint.y,this.to.x,this.to.y),t.stroke()},w.prototype.serialize=function(t){t=m.prototype.serialize.call(this,t);return t.controlPoint=this.controlPoint.toArray(),t},w.prototype.parse=function(t,i){m.prototype.parse.call(this,t,i),this.controlPoint.fromArray(t.controlPoint)},((k.prototype=Object.create(u.prototype)).constructor=k).prototype.type="RoundedBox",l.register(k,"RoundedBox"),k.roundRect=function(t,i,e,o,s,n){t.beginPath(),t.moveTo(i+n,e),t.lineTo(i+o-n,e),t.quadraticCurveTo(i+o,e,i+o,e+n),t.lineTo(i+o,e+s-n),t.quadraticCurveTo(i+o,e+s,i+o-n,e+s),t.lineTo(i+n,e+s),t.quadraticCurveTo(i,e+s,i,e+s-n),t.lineTo(i,e+n),t.quadraticCurveTo(i,e,i+n,e),t.closePath()},k.prototype.draw=function(t,i,e){var o=this.box.max.x-this.box.min.x,s=this.box.max.y-this.box.min.y;null!==this.fillStyle&&(t.fillStyle=this.fillStyle.get(t),k.roundRect(t,this.box.min.x,this.box.min.y,o,s,this.radius),t.fill()),null!==this.strokeStyle&&(t.lineWidth=this.lineWidth,t.strokeStyle=this.strokeStyle.get(t),k.roundRect(t,this.box.min.x,this.box.min.y,o,s,this.radius),t.stroke())},k.prototype.serialize=function(t){t=u.prototype.serialize.call(this,t);return t.radius=this.radius,t},k.prototype.parse=function(t,i){u.prototype.parse.call(this,t,i),this.radius=t.radius},((P.prototype=Object.create(l.prototype)).constructor=P).prototype.type="Graph",l.register(P,"Graph"),P.prototype.isInside=function(t){return this.box.containsPoint(t)},P.prototype.draw=function(t,i,e){if(0!==this.data.length){var o=this.box.max.x-this.box.min.x,s=this.box.max.y-this.box.min.y,n=(t.lineWidth=this.lineWidth,t.beginPath(),o/(this.data.length-1)),r=this.max-this.min;t.moveTo(this.box.min.x,this.box.max.y-(this.data[0]-this.min)/r*s);for(var h=1,a=n;h<this.data.length;a+=n,h++)t.lineTo(this.box.min.x+a,this.box.max.y-(this.data[h]-this.min)/r*s);null!==this.strokeStyle&&(t.strokeStyle=this.strokeStyle.get(t),t.stroke()),null!==this.fillStyle&&(t.fillStyle=this.fillStyle.get(t),t.lineTo(this.box.max.x,this.box.max.y),t.lineTo(this.box.min.x,this.box.max.y),t.fill())}},P.prototype.serialize=function(t){t=l.prototype.serialize.call(this,t);return t.box=this.box.toArray(),t.strokeStyle=null!==this.strokeStyle?this.strokeStyle.serialize():null,t.lineWidth=this.lineWidth,t.fillStyle=null!==this.fillStyle?this.fillStyle.serialize():null,t.min=this.min,t.max=this.max,t.data=this.data,t},P.prototype.parse=function(t,i){l.prototype.parse.call(this,t,i),this.box.fromArray(t.box),this.strokeStyle=null!==t.strokeStyle?Style.parse(t.strokeStyle):null,this.lineWidth=t.lineWidth,this.fillStyle=null!==t.fillStyle?Style.parse(t.fillStyle):null,this.min=t.min,this.max=t.max,this.data=t.data},((C.prototype=Object.create(P.prototype)).constructor=C).prototype.type="BarGraph",l.register(C,"BarGraph"),C.prototype.draw=function(t,i,e){if(0!==this.data.length){var o=this.box.max.x-this.box.min.x,s=this.box.max.y-this.box.min.y,n=o/(this.data.length-1),r=this.max-this.min;if(t.lineWidth=this.lineWidth,this.drawLine){t.beginPath(),t.moveTo(this.box.min.x,this.box.max.y-(this.data[0]-this.min)/r*s);for(var h=1,a=n;h<this.data.length;a+=n,h++)t.lineTo(this.box.min.x+a,this.box.max.y-(this.data[h]-this.min)/r*s);null!==this.strokeStyle&&(t.strokeStyle=this.strokeStyle.get(t),t.stroke())}t.beginPath();for(h=0,a=0;h<this.data.length;a+=n,h++){var l=this.box.max.y-(this.data[h]-this.min)/r*s;t.moveTo(this.box.min.x+a+this.radius,l),t.arc(this.box.min.x+a,l,this.radius,0,2*Math.PI,!0)}null!==this.strokeStyle&&(t.strokeStyle=this.strokeStyle.get(t),t.stroke()),null!==this.fillStyle&&(t.fillStyle=this.fillStyle.get(t),t.fill())}},C.prototype.serialize=function(t){t=P.prototype.serialize.call(this,t);return t.radius=this.radius,t},C.prototype.parse=function(t,i){P.prototype.parse.call(this,t,i),this.radius=t.radius},((M.prototype=Object.create(P.prototype)).constructor=M).prototype.type="BarGraph",l.register(M,"BarGraph"),M.prototype.draw=function(t,i,e){if(0!==this.data.length){for(var o=this.box.max.x-this.box.min.x,s=this.box.max.y-this.box.min.y,n=o/(this.data.length-1),r=this.max-this.min,h=(t.lineWidth=this.lineWidth,t.beginPath(),null!==this.barWidth?this.barWidth:o/this.data.length),a=h/2,l=0,p=0;l<this.data.length;p+=n,l++){var c=this.box.max.y-(this.data[l]-this.min)/r*s;t.moveTo(this.box.min.x+p-a,c),t.rect(this.box.min.x+p-a,c,h,this.box.max.y-c)}null!==this.strokeStyle&&(t.strokeStyle=this.strokeStyle.get(t),t.stroke()),null!==this.fillStyle&&(t.fillStyle=this.fillStyle.get(t),t.fill())}},M.prototype.serialize=function(t){return P.prototype.serialize.call(this,t)},M.prototype.parse=function(t,i){P.prototype.parse.call(this,t,i)},(T.prototype=Object.create(s.prototype)).addColorStop=function(t,i){this.colors.push(new _(t,i))},T.prototype.serialize=function(){return{colors:this.colors}},T.prototype.parse=function(t){for(var i=[],e=0;e<t.colors.length;e++)i.push(new _(t.colors[e].offset,t.colors[e].color));this.colors=i},A.prototype=Object.create(T.prototype),s.register(A,"LinearGradient"),A.prototype.get=function(t){for(var i=t.createLinearGradient(this.start.x,this.start.y,this.end.x,this.end.y),e=0;e<this.colors.length;e++)i.addColorStop(this.colors[e].offset,this.colors[e].color);return i},A.prototype.serialize=function(){var t=T.prototype.serialize.call(this);return Object.assign(t,{type:"LinearGradient",start:this.start.toArray(),end:this.end.toArray()}),t},A.prototype.parse=function(t){T.prototype.parse.call(this,t),this.start.fromArray(t.start),this.end.fromArray(t.end)},((E.prototype=Object.create(l.prototype)).constructor=E).prototype.type="Gauge",l.register(E,"Gauge"),E.prototype.isInside=function(t){return t.length()<=this.radius},E.prototype.draw=function(t,i,e){var o=this.value/(this.max-this.min),s=[this.startAngle,this.endAngle],n=s[0]+(s[1]-s[0])*o,r=[0,0],h=(t.lineWidth=this.lineWidth,t.lineCap="round",t.strokeStyle=this.baseStyle.get(t),t.beginPath(),t.arc(r[0],r[1],this.radius,s[0],s[1]),t.stroke(),t.createLinearGradient(-this.radius,0,this.radius,0));t.strokeStyle=this.barStyle.get(t),t.lineWidth=this.lineWidth,t.beginPath(),t.arc(r[0],r[1],this.radius,s[0],n),t.stroke(),this.dial&&(s=(this.startAngle-this.endAngle)*o,(n=[Math.cos(s)*this.radius,Math.sin(s)*this.radius])[0]=n[0]-r[0],n[1]=n[1]-r[1],t.fillStyle="#FFFFFF",t.beginPath(),t.arc(n[0],n[1],this.lineWidth/2,0,2*Math.PI),t.fill(),t.fillStyle=h,t.beginPath(),t.arc(n[0],n[1],this.lineWidth/3,0,2*Math.PI),t.fill())},E.prototype.serialize=function(t){t=l.prototype.serialize.call(this,t);return t.value=this.value,t.min=this.min,t.max=this.max,t.radius=this.radius,t.lineWidth=this.lineWidth,t.startAngle=this.startAngle,t.endAngle=this.endAngle,t.dial=this.dial,t.baseStyle=null!==this.baseStyle?this.baseStyle.serialize():null,t.barStyle=null!==this.barStyle?this.barStyle.serialize():null,t},E.prototype.parse=function(t,i){l.prototype.parse.call(this,t,i),this.value=t.value,this.min=t.min,this.max=t.max,this.radius=t.radius,this.lineWidth=t.lineWidth,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this.dial=t.dial,this.baseStyle=null!==t.baseStyle?Style.parse(t.baseStyle):null,this.barStyle=null!==t.barStyle?Style.parse(t.barStyle):null},((W.prototype=Object.create(l.prototype)).constructor=W).prototype.type="PieChart",l.register(W,"PieChart"),W.prototype.isInside=function(t){return t.length()<=this.radius},W.prototype.draw=function(t){if(0!==this.data.length){for(var i=0,e=this.data[0].value,o=0;o<this.data.length;o++)i+=this.data[o].value,this.data[o].value>e&&(e=this.data[o].value);t.lineWidth=this.lineWidth;for(var s=this.endAngle-this.startAngle,n=this.startAngle,o=0;o<this.data.length;o++){var r=s*(this.data[o].value/i);this.data[o].fillStyle&&(t.beginPath(),t.moveTo(0,0),h=this.sliceSize?this.data[o].value/e*this.radius:this.radius,t.arc(0,0,h,n,n+r),t.moveTo(0,0),t.fillStyle=this.data[o].fillStyle.get(t),t.fill()),n+=r}for(o=0;o<this.data.length;o++){var h,r=s*(this.data[o].value/i);this.data[o].strokeStyle&&(t.beginPath(),t.moveTo(0,0),h=this.sliceSize?this.data[o].value/e*this.radius:this.radius,t.arc(0,0,h,n,n+r),t.moveTo(0,0),t.strokeStyle=this.data[o].strokeStyle.get(t),t.stroke()),n+=r}}},W.prototype.serialize=function(t){t=l.prototype.serialize.call(this,t);return t.radius=this.radius,t.lineWidth=this.lineWidth,t.startAngle=this.startAngle,t.endAngle=this.endAngle,t.sliceSize=this.sliceSize,t},W.prototype.parse=function(t,i){l.prototype.parse.call(this,t,i),this.radius=t.radius,this.lineWidth=t.lineWidth,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this.sliceSize=t.sliceSize},((z.prototype=Object.create(l.prototype)).constructor=z).prototype.type="Path",l.register(z,"Path"),z.prototype.draw=function(t){null!==this.fillStyle&&(t.fillStyle=this.fillStyle.get(t),t.fill(this.path)),null!==this.strokeStyle&&(t.lineWidth=this.lineWidth,t.strokeStyle=this.strokeStyle.get(t),t.stroke(this.path))},z.prototype.serialize=function(t){t=l.prototype.serialize.call(this,t);return t.strokeStyle=null!==this.strokeStyle?this.strokeStyle.serialize():null,t.lineWidth=this.lineWidth,t.fillStyle=null!==this.fillStyle?this.fillStyle.serialize():null,t},z.prototype.parse=function(t,i){l.prototype.parse.call(this,t,i),this.strokeStyle=null!==t.strokeStyle?s.parse(t.strokeStyle):null,this.lineWidth=t.lineWidth,this.fillStyle=null!==t.fillStyle?s.parse(t.fillStyle):null},U.prototype=Object.create(s.prototype),s.register(U,"Pattern"),U.prototype.setTransform=function(t){this.matrix.m=t,this.needsUpdate=!0},U.prototype.get=function(t){return!this.needsUpdate&&null!==this.cache||(this.cache=t.createPattern(this.source,this.repetition),this.cache.setTransform(this.matrix.cssTransform()),this.needsUpdate=!1),this.cache},U.prototype.serialize=function(){var t=T.prototype.serialize.call(this);return Object.assign(t,{type:"Pattern",matrix:this.matrix.m,repetition:this.repetition,source:this.source}),t},U.prototype.parse=function(t){T.prototype.parse.call(this,t),this.matrix=new h(t.matrix),this.repetition=t.repetition,this.source=t.source},L.prototype=Object.create(T.prototype),s.register(L,"RadialGradient"),L.prototype.get=function(t){for(var i=t.createRadialGradient(this.start.x,this.start.y,this.startRadius,this.end.x,this.end.y,this.endRadius),e=0;e<this.colors.length;e++)i.addColorStop(this.colors[e].offset,this.colors[e].color);return i},L.prototype.serialize=function(){var t=T.prototype.serialize.call(this);return Object.assign(t,{type:"RadialGradient",start:this.start.toArray(),end:this.end.toArray(),startRadius:this.startRadius,endRadius:this.endRadius}),t},L.prototype.parse=function(t){T.prototype.parse.call(this,t),this.start.fromArray(t.start),this.end.fromArray(t.end),this.startRadius=t.startRadius,this.endRadius=t.endRadius},((F.prototype=Object.create(l.prototype)).constructor=F).prototype.type="NodeGraph",l.register(F,"NodeGraph"),F.prototype.addNode=function(t){for(var i=0,e=0,o=0;o<this.children.length;o++)this.children[o].position.x>i&&(i=this.children[o].position.x),this.children[o].position.y>e&&(e=this.children[o].position.y);return t.position.set(i+200,e/2),this.add(t),null!==t.registerSockets&&t.registerSockets(),t},((R.prototype=Object.create(S.prototype)).constructor=R).prototype.type="NodeConnector",l.register(R,"NodeConnector"),R.prototype.destroy=function(){S.prototype.destroy.call(this),null!==this.outputSocket&&(this.outputSocket.removeConnector(this),this.outputSocket=null),null!==this.inputSocket&&(this.inputSocket.removeConnector(this),this.inputSocket=null)},R.prototype.onUpdate=function(){null!==this.outputSocket&&this.from.copy(this.outputSocket.position),null!==this.inputSocket&&this.to.copy(this.inputSocket.position),this.fromCp.copy(this.from),this.fromCp.add(this.to),this.fromCp.multiplyScalar(.5),this.toCp.copy(this.fromCp);var t=this.to.y-this.from.y,i=this.to.x-this.from.x;Math.abs(i)>Math.abs(t)?(this.toCp.x+=.5*i,this.fromCp.x-=.5*i):(this.toCp.y+=.5*t,this.fromCp.y-=.5*t)},R.prototype.serialize=function(t){t=S.prototype.serialize.call(this,t);return t.outputSocket=null!==this.outputSocket?this.outputSocket.uuid:null,t.inputSocket=null!==this.inputSocket?this.inputSocket.uuid:null,t},R.prototype.parse=function(t,i){S.prototype.parse.call(this,t,i),null!==t.outputSocket&&(this.outputSocket=i.getChildByUUID(t.outputSocket)),null!==t.inputSocket&&(this.inputSocket=i.getChildByUUID(t.inputSocket))},((I.prototype=Object.create(y.prototype)).constructor=I).prototype.type="NodeSocket",l.register(I,"NodeSocket"),I.INPUT=1,I.OUTPUT=2,I.prototype.getValue=function(){return this.direction===I.INPUT&&0<this.connectors.length&&null!==this.connectors[0].outputSocket?this.connectors[0].outputSocket.getValue():null},I.prototype.connectTo=function(t){var i;if(this.isCompatible(t))return i=new R,this.attachConnector(i),t.attachConnector(i),i;throw new Error("Sockets are not compatible they cannot be connected.")},I.prototype.attachConnector=function(t){this.canAddConnector()||this.destroyConnectors(),this.direction===I.INPUT?t.inputSocket=this:this.direction===I.OUTPUT&&(t.outputSocket=this),this.connectors.push(t),null===t.parent&&this.parent.add(t)},I.prototype.isCompatible=function(t){return this.direction!==t.direction&&this.category===t.category},I.prototype.canAddConnector=function(){return!(0<this.connectors.length&&(this.direction===I.INPUT||this.direction===I.OUTPUT&&!this.multiple))},I.prototype.canConnect=function(t){return this.isCompatible(t)&&this.canAddConnector()},I.prototype.removeConnector=function(t){var i=this.connectors.indexOf(t);-1!==i&&(this.connectors.splice(i,1),t.destroy())},I.prototype.destroyConnectors=function(){for(var t=0;t<this.connectors.length;t++)this.connectors[t].destroy()},I.prototype.destroy=function(){y.prototype.destroy.call(this),this.destroyConnectors()},I.prototype.onPointerDragStart=function(t,i){this.creatingConnection=!0,this.attachConnector(new R)},I.prototype.onPointerDrag=function(t,i,e,o){this.creatingConnection&&(this.direction===I.INPUT?this.connectors[this.connectors.length-1].from.copy(o):this.direction===I.OUTPUT&&this.connectors[this.connectors.length-1].to.copy(o))},I.prototype.onPointerDragEnd=function(t,i){if(this.creatingConnection){for(var i=i.inverseMatrix.transformPoint(t.position),e=this.parent.getWorldPointIntersections(i),o=!1,s=0;s<e.length;s++)if(e[s]instanceof I&&this.isCompatible(e[s])){e[s].attachConnector(this.connectors[this.connectors.length-1]),o=!0;break}o||this.connectors[this.connectors.length-1].destroy()}this.creatingConnection=!1},I.prototype.serialize=function(t){var i=y.prototype.serialize.call(this,t);i.name=this.name,i.category=this.category,i.multiple=this.multiple,i.direction=this.direction,i.node=this.node.uuid,i.connectors=[];for(var e=0;e<this.connectors.length;e++)i.connectors.push(this.connectors[e].uuid);return i},I.prototype.parse=function(t,i){y.prototype.parse.call(this,t,i),this.name=t.name,this.category=t.category,this.multiple=t.multiple,this.direction=t.direction,this.node=i.getChildByUUID(t.node);for(var e=0;e<t.connectors.length;e++)this.connectors.push(i.getChildByUUID(t.connectors[e]))},((D.prototype=Object.create(k.prototype)).constructor=D).prototype.type="Node",l.register(D,"Node"),D.prototype.registerSockets=null,D.prototype.addInput=function(t,i){t=new I(this,I.INPUT,t,i);return this.inputs.push(t),this.parent.add(t),t},D.prototype.addOutput=function(t,i){t=new I(this,I.OUTPUT,t,i);return this.outputs.push(t),this.parent.add(t),t},D.prototype.getOutput=function(t){for(var i=0;i<this.outputs.length;i++)if(this.outputs[i].name===t)return this.outputs[i];return null},D.prototype.getInput=function(t){for(var i=0;i<this.inputs.length;i++)if(this.inputs[i].name===t)return this.inputs[i];return null},D.prototype.destroy=function(){k.prototype.destroy.call(this);for(var t=0;t<this.inputs.length;t++)this.inputs[t].destroy();for(t=0;t<this.outputs.length;t++)this.outputs[t].destroy()},D.prototype.onUpdate=function(){for(var t=this.box.max.y-this.box.min.y,i=t/(this.inputs.length+1),e=this.box.min.y+i,o=0;o<this.inputs.length;o++)this.inputs[o].position.set(this.position.x+this.box.min.x,this.position.y+(e+i*o));for(i=t/(this.outputs.length+1),e=this.box.min.y+i,o=0;o<this.outputs.length;o++)this.outputs[o].position.set(this.position.x+this.box.max.x,this.position.y+(e+i*o))},D.prototype.serialize=function(t){var i=k.prototype.serialize.call(this,t);i.inputs=[];for(var e=0;e<this.inputs.length;e++)i.inputs.push(this.inputs[e].uuid);i.outputs=[];for(e=0;e<this.outputs.length;e++)i.outputs.push(this.outputs[e].uuid);return i},D.prototype.parse=function(t,i){k.prototype.parse.call(this,t,i);for(var e=0;e<t.inputs.length;e++)this.inputs.push(i.getChildByUUID(t.inputs[e]));for(e=0;e<t.outputs.length;e++)this.outputs.push(i.getChildByUUID(t.outputs[e]))},G.rotateTool=function(o){var t=new y;t.radius=4,t.layer=o.layer+1,t.onPointerDrag=function(t,i,e){o.rotation+=.001*e.x},o.add(t)},G.boxResizeTool=function(o){var s,n,r,h;function a(){s.position.copy(o.box.min),r.position.copy(o.box.max),n.position.set(o.box.max.x,o.box.min.y),h.position.set(o.box.min.x,o.box.max.y)}void 0===o.box?console.warn("escher.js: Helpers.boxResizeTool(), object box property missing."):((s=new y).radius=4,s.layer=o.layer+1,s.draggable=!0,s.onPointerDrag=function(t,i,e){l.prototype.onPointerDrag.call(this,t,i,e),o.box.min.copy(s.position),a()},o.add(s),(n=new y).radius=4,n.layer=o.layer+1,n.draggable=!0,n.onPointerDrag=function(t,i,e){l.prototype.onPointerDrag.call(this,t,i,e),o.box.max.x=n.position.x,o.box.min.y=n.position.y,a()},o.add(n),(r=new y).radius=4,r.layer=o.layer+1,r.draggable=!0,r.onPointerDrag=function(t,i,e){l.prototype.onPointerDrag.call(this,t,i,e),o.box.max.copy(r.position),a()},o.add(r),(h=new y).radius=4,h.layer=o.layer+1,h.draggable=!0,h.onPointerDrag=function(t,i,e){l.prototype.onPointerDrag.call(this,t,i,e),o.box.min.x=h.position.x,o.box.max.y=h.position.y,a()},o.add(h),a())},V.read=function(t,i,e){var o=new XMLHttpRequest;o.overrideMimeType("text/plain"),o.open("GET",t,!0),void 0!==i&&(o.onload=function(){i(o.response)}),void 0!==e&&(o.onerror=e),o.send(null)},V.write=function(t,i){var i=new Blob([i],{type:"octet/stream"}),e=document.createElement("a");e.download=t,e.href=window.URL.createObjectURL(i),e.style.display="none",e.onclick=function(){document.body.removeChild(this)},document.body.appendChild(e),e.click()},V.select=function(i,t){var e=document.createElement("input");e.type="file",e.style.display="none",document.body.appendChild(e),void 0!==t&&(e.accept=t),e.onchange=function(t){void 0!==i&&i(e.files),document.body.removeChild(e)},e.click()},t.AnimationTimer=B,t.BarGraph=M,t.BezierCurve=S,t.Box=u,t.Box2=i,t.BoxMask=o,t.Circle=y,t.ColorStyle=c,t.DOM=g,t.EventManager=n,t.FileUtils=V,t.Gauge=E,t.GradientColorStop=_,t.GradientStyle=T,t.Graph=P,t.Helpers=G,t.Image=x,t.Key=a,t.Line=m,t.LinearGradientStyle=A,t.Mask=e,t.Matrix=h,t.MultiLineText=v,t.Node=D,t.NodeConnector=R,t.NodeGraph=F,t.NodeSocket=I,t.Object2D=l,t.Path=z,t.Pattern=b,t.PatternStyle=U,t.PieChart=W,t.Pointer=d,t.QuadraticCurve=w,t.RadialGradientStyle=L,t.Renderer=N,t.RoundedBox=k,t.ScatterGraph=C,t.Style=s,t.Text=f,t.UUID=O,t.Vector2=r,t.Viewport=j,t.ViewportControls=p,Object.defineProperty(t,"__esModule",{value:!0})});