diff --git a/dist/mapd-draw-dev.js b/dist/mapd-draw-dev.js index ee0e746..1a5d15f 100644 --- a/dist/mapd-draw-dev.js +++ b/dist/mapd-draw-dev.js @@ -225,7 +225,7 @@ eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("/* unused harmony export EventConstants */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return DrawEngine; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_canvas_utils__ = __webpack_require__(32);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_point2d__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shapes_base_shape__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__style_basic_style__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_utils__ = __webpack_require__(33);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__view_camera2d__ = __webpack_require__(34);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__util_event_handler__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_css_element_queries_src_ResizeSensor__ = __webpack_require__(35);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_css_element_queries_src_ResizeSensor___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_css_element_queries_src_ResizeSensor__);\n\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\n\n\n\n\n\n\nvar mouseevents = [\"mousedown\", \"mouseup\", \"mousemove\", \"click\", \"dblclick\", \"mouseover\", \"mouseout\"];\nvar marginProps = [\"top\", \"bottom\", \"left\", \"right\"];\nvar EventConstants = {\n MOUSEDOWN: \"mousedown\",\n MOUSEUP: \"mouseup\",\n MOUSEMOVE: \"mousemove\",\n CLICK: \"click\",\n DBLCLICK: \"dblclick\",\n MOUSEOVER: \"mouseover\",\n MOUSEOUT: \"mouseout\",\n SHAPE_ADD: \"shape:add\",\n SHAPE_DELETE: \"shape:delete\"\n};\n\nvar DrawStyleState =\n/*#__PURE__*/\nfunction (_BasicStyle) {\n _inherits(DrawStyleState, _BasicStyle);\n\n function DrawStyleState() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, DrawStyleState);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(DrawStyleState)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this._defaults = {\n packedFillColor: _this.packedFillColor,\n packedStrokeColor: _this.packedStrokeColor,\n strokeWidth: _this.strokeWidth,\n lineJoin: _this.lineJoin,\n lineCap: _this.lineCap,\n dashPattern: _this.dashPattern,\n dashOffset: _this.dashOffset\n };\n return _this;\n }\n\n _createClass(DrawStyleState, [{\n key: \"setFillStyle\",\n value: function setFillStyle(ctx, fillStyle) {\n if (fillStyle.packedFillColor !== this.packedFillColor) {\n this.packedFillColor = fillStyle.packedFillColor;\n ctx.fillStyle = this.fillColor;\n }\n }\n }, {\n key: \"setStrokeStyle\",\n value: function setStrokeStyle(ctx, strokeStyle) {\n if (strokeStyle.packedStrokeColor !== this.packedStrokeColor) {\n this.packedStrokeColor = strokeStyle.packedStrokeColor;\n ctx.strokeStyle = this.strokeColor;\n }\n\n if (strokeStyle.strokeWidth !== this._strokeWidth) {\n this.strokeWidth = strokeStyle.strokeWidth;\n ctx.lineWidth = this._strokeWidth;\n }\n\n if (strokeStyle.lineJoin !== this._lineJoin) {\n this.lineJoin = strokeStyle.lineJoin;\n ctx.lineJoin = this._lineJoin;\n }\n\n if (strokeStyle.lineCap !== this._lineCap) {\n this.lineCap = strokeStyle.lineCap;\n ctx.lineCap = this._lineCap;\n }\n\n var dashPattern = strokeStyle._dashPattern;\n var diff = false;\n\n if (dashPattern.length === this._dashPattern.length) {\n for (var i = 0; i < dashPattern.length; i += 1) {\n if (dashPattern[i] !== this._dashPattern[i]) {\n diff = true;\n break;\n }\n }\n } else {\n diff = true;\n }\n\n if (diff) {\n this.dashPattern = dashPattern;\n ctx.setLineDash(this._dashPattern);\n }\n\n if (strokeStyle.dashOffset !== this._dashOffset) {\n this.dashOffset = strokeStyle.dashOffset;\n ctx.lineDashOffset = this._dashOffset;\n }\n }\n }, {\n key: \"applyDefaults\",\n value: function applyDefaults(ctx) {\n var _this2 = this;\n\n Object.getOwnPropertyNames(this._defaults).forEach(function (prop) {\n _this2[prop] = _this2._defaults[prop];\n });\n this.setFillCtx(ctx);\n this.setStrokeCtx(ctx);\n }\n }]);\n\n return DrawStyleState;\n}(__WEBPACK_IMPORTED_MODULE_3__style_basic_style__[\"a\" /* default */]);\n\nfunction addClass(element, className) {\n if (element && \" \".concat(element.className, \" \").indexOf(\" \".concat(className, \" \")) < 0) {\n element.className += (element.className ? \" \" : \"\") + className;\n }\n}\n\nfunction createCanvas(parent) {\n var canvasContainer = document.createElement(\"div\");\n addClass(canvasContainer, \"mapd-draw-canvas-container\");\n var canvas = document.createElement(\"canvas\");\n var canvasContext = canvas.getContext(\"2d\");\n var ratio = __WEBPACK_IMPORTED_MODULE_0__util_canvas_utils__[\"a\" /* makeCanvasAutoHighDPI */](canvasContext); // const ratio = 1\n // add class?\n\n addClass(canvas, \"mapd-draw-canvas\");\n canvas.style.position = \"absolute\";\n canvas.style.pointerEvents = \"none\";\n canvasContainer.appendChild(canvas); // canvas.setAttribute(\"width\", ratio * parent.offsetX)\n // canvas.setAttribute(\"height\", ratio * parent.offsetY)\n // parent.insertBefore(canvas, parent.firstChild)\n\n parent.appendChild(canvasContainer);\n return {\n canvasContainer: canvasContainer,\n canvas: canvas,\n canvasContext: canvasContext,\n ratio: ratio\n };\n}\n\nfunction addShapesToMap(newShapes, existingObjectsMap, currIds, reorderCb, redrawCb) {\n newShapes.forEach(function (shape) {\n existingObjectsMap.set(shape, {\n shapeObj: shape,\n shapeId: currIds.shapeId,\n shapeIdx: -1\n });\n shape.on([\"changed:order\", \"changed:visibility\", \"changed:style\"], reorderCb);\n shape.on([\"changed:geom\", \"changed:visibility\", \"changed:xform\"], redrawCb);\n currIds.shapeId += 1;\n });\n}\n\nfunction deleteShapesFromMap(shapes, existingObjectsMap, reorderCb, redrawCb) {\n var idxs = [];\n shapes.forEach(function (shape) {\n var shapeInfo = existingObjectsMap.get(shape);\n\n if (shapeInfo) {\n idxs.push(shapeInfo.shapeIdx);\n }\n\n existingObjectsMap[\"delete\"](shape);\n shape.off([\"changed\"], [reorderCb, redrawCb]);\n });\n return idxs;\n}\n\nvar DrawEngine =\n/*#__PURE__*/\nfunction (_EventHander) {\n _inherits(DrawEngine, _EventHander);\n\n function DrawEngine(parent, opts) {\n var _this3;\n\n _classCallCheck(this, DrawEngine);\n\n _this3 = _possibleConstructorReturn(this, _getPrototypeOf(DrawEngine).call(this));\n\n _this3._init(parent, opts);\n\n return _this3;\n }\n\n _createClass(DrawEngine, [{\n key: \"destroy\",\n value: function destroy() {\n var _this4 = this;\n\n this._destroyCanvas();\n\n if (this._objects) {\n this._objects.forEach(function (shapeInfo, shape) {\n shape.off(\"changed\", [_this4._reorderCb, _this4._redrawCb]);\n });\n\n this._objects.clear();\n\n this._sortedObjs = [];\n\n this._reorderedObjIdxs.clear();\n }\n }\n }, {\n key: \"_resize\",\n value: function _resize(opts) {\n var width = 0;\n\n if (this._parent.offsetWidth) {\n width = Math.max(width, this._parent.offsetWidth - this._margins.left - this._margins.right);\n }\n\n var height = 0;\n\n if (this._parent.offsetHeight) {\n height = Math.max(height, this._parent.offsetHeight - this._margins.top - this._margins.bottom);\n }\n\n this._drawCanvas.width = width * this._pixelRatio;\n this._drawCanvas.height = height * this._pixelRatio;\n this._drawCanvas.style.left = \"\".concat(this._margins.left, \"px\");\n this._drawCanvas.style.top = \"\".concat(this._margins.top, \"px\");\n this._drawCanvas.style.width = \"\".concat(width, \"px\");\n this._drawCanvas.style.height = \"\".concat(height, \"px\");\n\n if (this._camera) {// const currViewport = this._camera.viewport\n // const currSpace = this._camera.projectionBounds\n // const viewportExtents = [0, 0]\n // AABox2d.getExtents(viewportExtents, currViewport)\n // const spaceCenter = [0, 0]\n // const spaceExtents = [0, 0]\n // AABox2d.getCenter(spaceCenter, currSpace)\n // AABox2d.getExtents(spaceExtents, currSpace)\n // const ratio = spaceExtents\n // Vec2d.div(ratio, spaceExtents, viewportExtents)\n // AABox2d.set(currViewport, 0, 0, width, height)\n // AABox2d.getExtents(viewportExtents, currViewport)\n // Vec2d.multiply(spaceExtents, ratio, viewportExtents)\n // AABox2d.initCenterExtents(currSpace, spaceCenter, spaceExtents)\n // this._camera.viewport = currViewport\n // this._camera.projectionBounds = currSpace\n // // this._camera.viewport = [0, 0, width, height]\n // // this._camera.projectionBounds = [0, 0, width, height]\n } else {\n var projDims = opts && opts.projectionDimensions ? opts.projectionDimensions : [width, height];\n this._camera = new __WEBPACK_IMPORTED_MODULE_5__view_camera2d__[\"a\" /* default */]([0, 0, width, height], projDims, opts.flipY ? Boolean(opts.flipY) : false);\n\n this._camera.setPosition(opts && opts.cameraPosition ? opts.cameraPosition : [width / 2.0, height / 2.0]);\n\n this._camera.on(\"changed\", this._rerenderCb);\n } // this._camera = new Camera2d([0, 0, this.width, this.height], [0, 0, this.width, this.height])\n // this._camera.on(\"changed\", this._rerenderCb)\n\n\n this._rerenderCb();\n }\n }, {\n key: \"_mousedownCB\",\n value: function _mousedownCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"mousedown\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_mouseupCB\",\n value: function _mouseupCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"mouseup\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_mousemoveCB\",\n value: function _mousemoveCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"mousemove\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_clickCB\",\n value: function _clickCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"click\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_dblclickCB\",\n value: function _dblclickCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"dblclick\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_mouseoverCB\",\n value: function _mouseoverCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"mouseover\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_mouseoutCB\",\n value: function _mouseoutCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"mouseout\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_enableEvents\",\n value: function _enableEvents() {\n this.registerEvents(mouseevents);\n var callbacks = mouseevents.map(function (event) {\n return \"_\".concat(event, \"CB\");\n }); // bindAll(callbacks, this)\n\n for (var i = 0; i < mouseevents.length; i += 1) {\n document.addEventListener(mouseevents[i], this[callbacks[i]], true);\n }\n }\n }, {\n key: \"_disableEvents\",\n value: function _disableEvents() {\n var callbacks = mouseevents.map(function (event) {\n return \"_\".concat(event, \"CB\");\n });\n\n for (var i = 0; i < mouseevents.length; i += 1) {\n document.removeEventListener(mouseevents[i], this[callbacks[i]], true);\n }\n }\n }, {\n key: \"_initCanvas\",\n value: function _initCanvas(parent, opts) {\n var _this5 = this;\n\n var forceEvents = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n this._margins = opts && opts.margins ? Object.assign({}, opts.margins) : {};\n marginProps.forEach(function (prop) {\n if (typeof _this5._margins[prop] !== \"number\") {\n _this5._margins[prop] = 0;\n }\n });\n\n var _createCanvas = createCanvas(parent),\n canvasContainer = _createCanvas.canvasContainer,\n canvas = _createCanvas.canvas,\n canvasContext = _createCanvas.canvasContext,\n ratio = _createCanvas.ratio;\n\n this._container = canvasContainer;\n this._drawCanvas = canvas;\n this._drawCtx = canvasContext;\n this._pixelRatio = ratio;\n this._parent = parent;\n Object(__WEBPACK_IMPORTED_MODULE_4__util_utils__[\"a\" /* bindAll */])([\"_resize\"], this);\n\n this._resize(opts);\n\n this._resizeSensor = new __WEBPACK_IMPORTED_MODULE_7_css_element_queries_src_ResizeSensor___default.a(parent, this._resize);\n\n if (forceEvents || forceEvents === null && opts && opts.enableEvents) {\n this._enableEvents();\n }\n }\n }, {\n key: \"_destroyCanvas\",\n value: function _destroyCanvas() {\n if (this._drawCanvas) {\n this._disableEvents();\n }\n\n if (this._parent) {\n this._parent.removeChild(this._drawCanvas);\n\n if (this._resizeSensor) {\n this._resizeSensor.detach(this._parent, this._resize);\n }\n }\n\n this._drawCanvas = null;\n this._drawCtx = null;\n this._parent = null;\n }\n }, {\n key: \"_init\",\n value: function _init(parent, opts) {\n var forceEvents = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n this.registerEvents([EventConstants.SHAPE_ADD, EventConstants.SHAPE_DELETE]);\n Object(__WEBPACK_IMPORTED_MODULE_4__util_utils__[\"a\" /* bindAll */])([\"_reorderCb\", \"_rerenderCb\"], this);\n Object(__WEBPACK_IMPORTED_MODULE_4__util_utils__[\"a\" /* bindAll */])([\"_mousedownCB\", \"_mouseupCB\", \"_mousemoveCB\", \"_clickCB\", \"_dblclickCB\", \"_mouseoverCB\", \"_mouseoutCB\"], this);\n this._renderFrameCb = this.renderAll.bind(this);\n this._renderRequestId = 0;\n this._ids = {\n shapeId: 1\n };\n this._objects = new Map();\n this._sortedObjs = [];\n this._reorderedObjIdxs = new Set();\n\n this._initCanvas(parent, opts, forceEvents);\n\n this._styleState = new DrawStyleState({\n fillColor: \"red\"\n });\n }\n }, {\n key: \"getContainer\",\n value: function getContainer() {\n return this._parent;\n }\n }, {\n key: \"getCanvasContainer\",\n value: function getCanvasContainer() {\n return this._container;\n }\n }, {\n key: \"getCanvas\",\n value: function getCanvas() {\n return this._drawCanvas;\n }\n }, {\n key: \"project\",\n value: function project(out, screenPt) {\n var screenToWorldMatrix = this._camera.screenToWorldMatrix;\n return __WEBPACK_IMPORTED_MODULE_1__core_point2d__[\"transformMat2d\"](out, screenPt, screenToWorldMatrix);\n }\n }, {\n key: \"unproject\",\n value: function unproject(out, worldPt) {\n var worldToScreenMatrix = this._camera.worldToScreenMatrix;\n return __WEBPACK_IMPORTED_MODULE_1__core_point2d__[\"transformMat2d\"](out, worldPt, worldToScreenMatrix);\n }\n }, {\n key: \"hasShape\",\n value: function hasShape(shape) {\n return this._objects.has(shape);\n }\n }, {\n key: \"addShape\",\n value: function addShape(shape) {\n var shapes = shape;\n\n if (!Array.isArray(shapes)) {\n shapes = [shape];\n }\n\n addShapesToMap(shapes, this._objects, this._ids, this._reorderCb, this._rerenderCb); // fire add event\n\n this.fire(\"shape:add\", {\n shape: shapes\n });\n var proxyEvent = {\n target: shapes\n };\n\n this._reorderCb(proxyEvent);\n\n return this;\n }\n }, {\n key: \"deleteShape\",\n value: function deleteShape(shape) {\n var shapes = shape;\n\n if (!Array.isArray(shapes)) {\n shapes = [shape];\n }\n\n var idxs = deleteShapesFromMap(shapes, this._objects, this._reorderCb, this._rerenderCb);\n var index = -1;\n\n for (var i = 0; i < shapes.length; i += 1) {\n if ((index = this._sortedObjs.indexOf(shapes[i])) >= 0) {\n this._sortedObjs.splice(index, 1);\n }\n\n this._reorderedObjIdxs.add(idxs[i]);\n }\n\n this._rerenderCb();\n\n this.fire(\"shape:delete\", {\n shape: shapes\n });\n return this;\n }\n }, {\n key: \"deleteAllShapes\",\n value: function deleteAllShapes() {\n this.deleteShape(this.sortedShapes.slice());\n return this;\n }\n }, {\n key: \"moveShapeToTop\",\n value: function moveShapeToTop(shape) {\n if (this._objects.has(shape)) {\n var shapes = this.sortedShapes;\n var zindex = shapes[shapes.length - 1].zIndex;\n shape.zIndex = zindex + 1;\n }\n }\n }, {\n key: \"moveShapeToBack\",\n value: function moveShapeToBack(shape) {\n if (this._objects.has(shape)) {\n var shapes = this.sortedShapes;\n var zindex = shapes[0].zIndex;\n shape.zIndex = zindex;\n }\n }\n }, {\n key: \"getShapesAsJSON\",\n value: function getShapesAsJSON() {\n var shapes = this.sortedShapes;\n return shapes.map(function (shape) {\n return shape.toJSON();\n });\n }\n }, {\n key: \"_rerenderCb\",\n value: function _rerenderCb() {\n if (this._renderRequestId) {\n window.cancelAnimationFrame(this._renderRequestId);\n }\n\n this._renderRequestId = window.requestAnimationFrame(this._renderFrameCb);\n }\n }, {\n key: \"_reorderCb\",\n value: function _reorderCb(event) {\n var _this6 = this;\n\n var changedShapes = event.target;\n\n if (!Array.isArray(changedShapes)) {\n changedShapes = [event.target];\n }\n\n changedShapes.forEach(function (changedShape) {\n console.assert(changedShape, \"A changed event doesn't have an object\");\n\n var shapeInfo = _this6._objects.get(changedShape);\n\n console.assert(shapeInfo, \"A changed event target isn't in the list of shapes \".concat(changedShape));\n\n if (shapeInfo.shapeIdx < 0) {\n shapeInfo.shapeIdx = _this6._sortedObjs.push(changedShape) - 1;\n }\n\n _this6._reorderedObjIdxs.add(shapeInfo.shapeIdx);\n });\n\n this._rerenderCb();\n }\n }, {\n key: \"_renderShapes\",\n value: function _renderShapes(ctx, drawShapes, camera) {\n var _this7 = this;\n\n var worldToScreenMat = camera.worldToScreenMatrix;\n drawShapes.forEach(function (shape) {\n if (shape.visible) {\n shape.render(ctx, worldToScreenMat, _this7._styleState);\n }\n });\n }\n }, {\n key: \"renderAll\",\n value: function renderAll() {\n var ctx = this._drawCtx; // ctx.clearRect(0, 0, this.width, this.height)\n\n ctx.clearRect(0, 0, this._drawCanvas.offsetWidth, this._drawCanvas.offsetHeight);\n\n if (!this._objects.size) {\n return;\n }\n\n ctx.save();\n var drawShapes = this.sortedShapes;\n\n this._styleState.applyDefaults(ctx);\n\n this._renderShapes(ctx, drawShapes, this._camera);\n\n ctx.restore();\n }\n }, {\n key: \"sortedShapes\",\n get: function get() {\n if (this._reorderedObjIdxs.size) {\n console.assert(this._sortedObjs.length === this._objects.size, \"Size mismatch when rendering objets. Something got out of sync - sorted objs length: \".concat(this._sortedObjs.length, \", objects length: \").concat(this._objects.size)); // if (this._reorderedObjIdxs.length / this._sortedObjs.length > 0.7) {\n // // might as well just resort the whole thing over\n // this._sortedObjs.sort(shapeInfoCompare)\n // } else {\n // }\n\n this._sortedObjs.sort(__WEBPACK_IMPORTED_MODULE_2__shapes_base_shape__[\"a\" /* default */].shapeCompare);\n\n this._reorderedObjIdxs.clear();\n }\n\n return this._sortedObjs;\n }\n }, {\n key: \"margins\",\n get: function get() {\n var _this8 = this;\n\n var rtn = {};\n marginProps.forEach(function (prop) {\n rtn[prop] = _this8._margins[prop];\n });\n return rtn;\n },\n set: function set(margins) {\n var _this9 = this;\n\n marginProps.forEach(function (prop) {\n if (typeof margins[prop] === \"number\" && margins[prop] !== _this9._margins[prop]) {\n _this9._margins[prop] = margins.prop;\n }\n });\n\n this._resize();\n }\n }, {\n key: \"viewport\",\n get: function get() {\n return this._camera.viewport;\n },\n set: function set(viewport) {\n this._camera.viewport = viewport;\n }\n }, {\n key: \"projectionDimensions\",\n get: function get() {\n return this._camera.projectionDimensions;\n },\n set: function set(projectionDimensions) {\n this._camera.projectionDimensions = projectionDimensions;\n return this;\n }\n }, {\n key: \"cameraPosition\",\n get: function get() {\n return this._camera.getPosition();\n },\n set: function set(pos) {\n this._camera.setPosition(pos);\n\n return this;\n }\n }]);\n\n return DrawEngine;\n}(__WEBPACK_IMPORTED_MODULE_6__util_event_handler__[\"a\" /* default */]);\n\n\nDrawEngine.EventConstants = EventConstants;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9lbmdpbmUvZHJhdy1lbmdpbmUuanM/ZmYwMiJdLCJuYW1lcyI6WyJtb3VzZWV2ZW50cyIsIm1hcmdpblByb3BzIiwiRXZlbnRDb25zdGFudHMiLCJNT1VTRURPV04iLCJNT1VTRVVQIiwiTU9VU0VNT1ZFIiwiQ0xJQ0siLCJEQkxDTElDSyIsIk1PVVNFT1ZFUiIsIk1PVVNFT1VUIiwiU0hBUEVfQUREIiwiU0hBUEVfREVMRVRFIiwiRHJhd1N0eWxlU3RhdGUiLCJhcmdzIiwiX2RlZmF1bHRzIiwicGFja2VkRmlsbENvbG9yIiwicGFja2VkU3Ryb2tlQ29sb3IiLCJzdHJva2VXaWR0aCIsImxpbmVKb2luIiwibGluZUNhcCIsImRhc2hQYXR0ZXJuIiwiZGFzaE9mZnNldCIsImN0eCIsImZpbGxTdHlsZSIsImZpbGxDb2xvciIsInN0cm9rZVN0eWxlIiwic3Ryb2tlQ29sb3IiLCJfc3Ryb2tlV2lkdGgiLCJsaW5lV2lkdGgiLCJfbGluZUpvaW4iLCJfbGluZUNhcCIsIl9kYXNoUGF0dGVybiIsImRpZmYiLCJsZW5ndGgiLCJpIiwic2V0TGluZURhc2giLCJfZGFzaE9mZnNldCIsImxpbmVEYXNoT2Zmc2V0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJwcm9wIiwic2V0RmlsbEN0eCIsInNldFN0cm9rZUN0eCIsIkJhc2ljU3R5bGUiLCJhZGRDbGFzcyIsImVsZW1lbnQiLCJjbGFzc05hbWUiLCJpbmRleE9mIiwiY3JlYXRlQ2FudmFzIiwicGFyZW50IiwiY2FudmFzQ29udGFpbmVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2FudmFzIiwiY2FudmFzQ29udGV4dCIsImdldENvbnRleHQiLCJyYXRpbyIsIkNhbnZhc1V0aWxzIiwic3R5bGUiLCJwb3NpdGlvbiIsInBvaW50ZXJFdmVudHMiLCJhcHBlbmRDaGlsZCIsImFkZFNoYXBlc1RvTWFwIiwibmV3U2hhcGVzIiwiZXhpc3RpbmdPYmplY3RzTWFwIiwiY3VycklkcyIsInJlb3JkZXJDYiIsInJlZHJhd0NiIiwic2hhcGUiLCJzZXQiLCJzaGFwZU9iaiIsInNoYXBlSWQiLCJzaGFwZUlkeCIsIm9uIiwiZGVsZXRlU2hhcGVzRnJvbU1hcCIsInNoYXBlcyIsImlkeHMiLCJzaGFwZUluZm8iLCJnZXQiLCJwdXNoIiwib2ZmIiwiRHJhd0VuZ2luZSIsIm9wdHMiLCJfaW5pdCIsIl9kZXN0cm95Q2FudmFzIiwiX29iamVjdHMiLCJfcmVvcmRlckNiIiwiX3JlZHJhd0NiIiwiY2xlYXIiLCJfc29ydGVkT2JqcyIsIl9yZW9yZGVyZWRPYmpJZHhzIiwid2lkdGgiLCJfcGFyZW50Iiwib2Zmc2V0V2lkdGgiLCJNYXRoIiwibWF4IiwiX21hcmdpbnMiLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJ0b3AiLCJib3R0b20iLCJfZHJhd0NhbnZhcyIsIl9waXhlbFJhdGlvIiwiX2NhbWVyYSIsInByb2pEaW1zIiwicHJvamVjdGlvbkRpbWVuc2lvbnMiLCJDYW1lcmEyZCIsImZsaXBZIiwiQm9vbGVhbiIsInNldFBvc2l0aW9uIiwiY2FtZXJhUG9zaXRpb24iLCJfcmVyZW5kZXJDYiIsImV2ZW50IiwidGFyZ2V0IiwiZmlyZSIsIm9yaWdpbmFsRXZlbnQiLCJyZWdpc3RlckV2ZW50cyIsImNhbGxiYWNrcyIsIm1hcCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZm9yY2VFdmVudHMiLCJtYXJnaW5zIiwiYXNzaWduIiwiX2NvbnRhaW5lciIsIl9kcmF3Q3R4IiwiYmluZEFsbCIsIl9yZXNpemUiLCJfcmVzaXplU2Vuc29yIiwiUmVzaXplU2Vuc29yIiwiZW5hYmxlRXZlbnRzIiwiX2VuYWJsZUV2ZW50cyIsIl9kaXNhYmxlRXZlbnRzIiwicmVtb3ZlQ2hpbGQiLCJkZXRhY2giLCJfcmVuZGVyRnJhbWVDYiIsInJlbmRlckFsbCIsImJpbmQiLCJfcmVuZGVyUmVxdWVzdElkIiwiX2lkcyIsIk1hcCIsIlNldCIsIl9pbml0Q2FudmFzIiwiX3N0eWxlU3RhdGUiLCJvdXQiLCJzY3JlZW5QdCIsInNjcmVlblRvV29ybGRNYXRyaXgiLCJQb2ludDJkIiwid29ybGRQdCIsIndvcmxkVG9TY3JlZW5NYXRyaXgiLCJoYXMiLCJBcnJheSIsImlzQXJyYXkiLCJwcm94eUV2ZW50IiwiaW5kZXgiLCJzcGxpY2UiLCJhZGQiLCJkZWxldGVTaGFwZSIsInNvcnRlZFNoYXBlcyIsInNsaWNlIiwiemluZGV4IiwiekluZGV4IiwidG9KU09OIiwid2luZG93IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjaGFuZ2VkU2hhcGVzIiwiY2hhbmdlZFNoYXBlIiwiY29uc29sZSIsImFzc2VydCIsImRyYXdTaGFwZXMiLCJjYW1lcmEiLCJ3b3JsZFRvU2NyZWVuTWF0IiwidmlzaWJsZSIsInJlbmRlciIsImNsZWFyUmVjdCIsInNpemUiLCJzYXZlIiwiYXBwbHlEZWZhdWx0cyIsIl9yZW5kZXJTaGFwZXMiLCJyZXN0b3JlIiwic29ydCIsIkJhc2VTaGFwZSIsInNoYXBlQ29tcGFyZSIsInJ0biIsInZpZXdwb3J0IiwiZ2V0UG9zaXRpb24iLCJwb3MiLCJFdmVudEhhbmRlciJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFNQSxXQUFXLEdBQUcsQ0FDbEIsV0FEa0IsRUFFbEIsU0FGa0IsRUFHbEIsV0FIa0IsRUFJbEIsT0FKa0IsRUFLbEIsVUFMa0IsRUFNbEIsV0FOa0IsRUFPbEIsVUFQa0IsQ0FBcEI7QUFTQSxJQUFNQyxXQUFXLEdBQUcsQ0FBQyxLQUFELEVBQVEsUUFBUixFQUFrQixNQUFsQixFQUEwQixPQUExQixDQUFwQjtBQUVPLElBQU1DLGNBQWMsR0FBRztBQUM1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QUFPLEtBQUtGLE9BQUwsQ0FBYW1GLFdBQWIsRUFBUDtBQUNELEs7c0JBRWtCQyxHLEVBQUs7QUFDdEIsV0FBS3BGLE9BQUwsQ0FBYU0sV0FBYixDQUF5QjhFLEdBQXpCOztBQUNBLGFBQU8sSUFBUDtBQUNEOzs7O0VBdlVxQ0Msb0U7OztBQWtleEM3RyxVQUFVLENBQUNoRixjQUFYLEdBQTRCQSxjQUE1QiIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiXG5cbmltcG9ydCAqIGFzIENhbnZhc1V0aWxzIGZyb20gXCIuLi91dGlsL2NhbnZhcy11dGlsc1wiXG5pbXBvcnQgKiBhcyBQb2ludDJkIGZyb20gXCIuLi9jb3JlL3BvaW50MmRcIlxuaW1wb3J0IEJhc2VTaGFwZSBmcm9tIFwiLi4vc2hhcGVzL2Jhc2Utc2hhcGVcIlxuaW1wb3J0IEJhc2ljU3R5bGUgZnJvbSBcIi4uL3N0eWxlL2Jhc2ljLXN0eWxlXCJcbmltcG9ydCB7IGJpbmRBbGwgfSBmcm9tIFwiLi4vdXRpbC91dGlsc1wiXG5pbXBvcnQgQ2FtZXJhMmQgZnJvbSBcIi4uL3ZpZXcvY2FtZXJhMmRcIlxuaW1wb3J0IEV2ZW50SGFuZGVyIGZyb20gXCIuLi91dGlsL2V2ZW50LWhhbmRsZXJcIlxuaW1wb3J0IFJlc2l6ZVNlbnNvciBmcm9tIFwiY3NzLWVsZW1lbnQtcXVlcmllcy9zcmMvUmVzaXplU2Vuc29yXCJcblxuY29uc3QgbW91c2VldmVudHMgPSBbXG4gIFwibW91c2Vkb3duXCIsXG4gIFwibW91c2V1cFwiLFxuICBcIm1vdXNlbW92ZVwiLFxuICBcImNsaWNrXCIsXG4gIFwiZGJsY2xpY2tcIixcbiAgXCJtb3VzZW92ZXJcIixcbiAgXCJtb3VzZW91dFwiXG5dXG5jb25zdCBtYXJnaW5Qcm9wcyA9IFtcInRvcFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIiwgXCJyaWdodFwiXVxuXG5leHBvcnQgY29uc3QgRXZlbnRDb25zdGFudHMgPSB7XG4gIE1PVVNFRE9XTjogXCJtb3VzZWRvd25cIixcbiAgTU9VU0VVUDogXCJtb3VzZXVwXCIsXG4gIE1PVVNFTU9WRTogXCJtb3VzZW1vdmVcIixcbiAgQ0xJQ0s6IFwiY2xpY2tcIixcbiAgREJMQ0xJQ0s6IFwiZGJsY2xpY2tcIixcbiAgTU9VU0VPVkVSOiBcIm1vdXNlb3ZlclwiLFxuICBNT1VTRU9VVDogXCJtb3VzZW91dFwiLFxuICBTSEFQRV9BREQ6IFwic2hhcGU6YWRkXCIsXG4gIFNIQVBFX0RFTEVURTogXCJzaGFwZTpkZWxldGVcIlxufVxuXG5jbGFzcyBEcmF3U3R5bGVTdGF0ZSBleHRlbmRzIEJhc2ljU3R5bGUge1xuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgc3VwZXIoLi4uYXJncylcbiAgICB0aGlzLl9kZWZhdWx0cyA9IHtcbiAgICAgIHBhY2tlZEZpbGxDb2xvcjogdGhpcy5wYWNrZWRGaWxsQ29sb3IsXG4gICAgICBwYWNrZWRTdHJva2VDb2xvcjogdGhpcy5wYWNrZWRTdHJva2VDb2xvcixcbiAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLnN0cm9rZVdpZHRoLFxuICAgICAgbGluZUpvaW46IHRoaXMubGluZUpvaW4sXG4gICAgICBsaW5lQ2FwOiB0aGlzLmxpbmVDYXAsXG4gICAgICBkYXNoUGF0dGVybjogdGhpcy5kYXNoUGF0dGVybixcbiAgICAgIGRhc2hPZmZzZXQ6IHRoaXMuZGFzaE9mZnNldFxuICAgIH1cbiAgfVxuXG4gIHNldEZpbGxTdHlsZShjdHgsIGZpbGxTdHlsZSkge1xuICAgIGlmIChmaWxsU3R5bGUucGFja2VkRmlsbENvbG9yICE9PSB0aGlzLnBhY2tlZEZpbGxDb2xvcikge1xuICAgICAgdGhpcy5wYWNrZWRGaWxsQ29sb3IgPSBmaWxsU3R5bGUucGFja2VkRmlsbENvbG9yXG4gICAgICBjdHguZmlsbFN0eWxlID0gdGhpcy5maWxsQ29sb3JcbiAgICB9XG4gIH1cblxuICBzZXRTdHJva2VTdHlsZShjdHgsIHN0cm9rZVN0eWxlKSB7XG4gICAgaWYgKHN0cm9rZVN0eWxlLnBhY2tlZFN0cm9rZUNvbG9yICE9PSB0aGlzLnBhY2tlZFN0cm9rZUNvbG9yKSB7XG4gICAgICB0aGlzLnBhY2tlZFN0cm9rZUNvbG9yID0gc3Ryb2tlU3R5bGUucGFja2VkU3Ryb2tlQ29sb3JcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHRoaXMuc3Ryb2tlQ29sb3JcbiAgICB9XG4gICAgaWYgKHN0cm9rZVN0eWxlLnN0cm9rZVdpZHRoICE9PSB0aGlzLl9zdHJva2VXaWR0aCkge1xuICAgICAgdGhpcy5zdHJva2VXaWR0aCA9IHN0cm9rZVN0eWxlLnN0cm9rZVdpZHRoXG4gICAgICBjdHgubGluZVdpZHRoID0gdGhpcy5fc3Ryb2tlV2lkdGhcbiAgICB9XG4gICAgaWYgKHN0cm9rZVN0eWxlLmxpbmVKb2luICE9PSB0aGlzLl9saW5lSm9pbikge1xuICAgICAgdGhpcy5saW5lSm9pbiA9IHN0cm9rZVN0eWxlLmxpbmVKb2luXG4gICAgICBjdHgubGluZUpvaW4gPSB0aGlzLl9saW5lSm9pblxuICAgIH1cbiAgICBpZiAoc3Ryb2tlU3R5bGUubGluZUNhcCAhPT0gdGhpcy5fbGluZUNhcCkge1xuICAgICAgdGhpcy5saW5lQ2FwID0gc3Ryb2tlU3R5bGUubGluZUNhcFxuICAgICAgY3R4LmxpbmVDYXAgPSB0aGlzLl9saW5lQ2FwXG4gICAgfVxuXG4gICAgY29uc3QgZGFzaFBhdHRlcm4gPSBzdHJva2VTdHlsZS5fZGFzaFBhdHRlcm5cbiAgICBsZXQgZGlmZiA9IGZhbHNlXG4gICAgaWYgKGRhc2hQYXR0ZXJuLmxlbmd0aCA9PT0gdGhpcy5fZGFzaFBhdHRlcm4ubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhc2hQYXR0ZXJuLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChkYXNoUGF0dGVybltpXSAhPT0gdGhpcy5fZGFzaFBhdHRlcm5baV0pIHtcbiAgICAgICAgICBkaWZmID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlmZiA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAoZGlmZikge1xuICAgICAgdGhpcy5kYXNoUGF0dGVybiA9IGRhc2hQYXR0ZXJuXG4gICAgICBjdHguc2V0TGluZURhc2godGhpcy5fZGFzaFBhdHRlcm4pXG4gICAgfVxuXG4gICAgaWYgKHN0cm9rZVN0eWxlLmRhc2hPZmZzZXQgIT09IHRoaXMuX2Rhc2hPZmZzZXQpIHtcbiAgICAgIHRoaXMuZGFzaE9mZnNldCA9IHN0cm9rZVN0eWxlLmRhc2hPZmZzZXRcbiAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IHRoaXMuX2Rhc2hPZmZzZXRcbiAgICB9XG4gIH1cblxuICBhcHBseURlZmF1bHRzKGN0eCkge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2RlZmF1bHRzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgdGhpc1twcm9wXSA9IHRoaXMuX2RlZmF1bHRzW3Byb3BdXG4gICAgfSlcbiAgICB0aGlzLnNldEZpbGxDdHgoY3R4KVxuICAgIHRoaXMuc2V0U3Ryb2tlQ3R4KGN0eClcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQgJiYgYCAke2VsZW1lbnQuY2xhc3NOYW1lfSBgLmluZGV4T2YoYCAke2NsYXNzTmFtZX0gYCkgPCAwKSB7XG4gICAgZWxlbWVudC5jbGFzc05hbWUgKz0gKGVsZW1lbnQuY2xhc3NOYW1lID8gXCIgXCIgOiBcIlwiKSArIGNsYXNzTmFtZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhbnZhcyhwYXJlbnQpIHtcbiAgY29uc3QgY2FudmFzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICBhZGRDbGFzcyhjYW52YXNDb250YWluZXIsIFwibWFwZC1kcmF3LWNhbnZhcy1jb250YWluZXJcIilcblxuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpXG4gIGNvbnN0IGNhbnZhc0NvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXG4gIGNvbnN0IHJhdGlvID0gQ2FudmFzVXRpbHMubWFrZUNhbnZhc0F1dG9IaWdoRFBJKGNhbnZhc0NvbnRleHQpXG4gIC8vIGNvbnN0IHJhdGlvID0gMVxuXG4gIC8vIGFkZCBjbGFzcz9cbiAgYWRkQ2xhc3MoY2FudmFzLCBcIm1hcGQtZHJhdy1jYW52YXNcIilcbiAgY2FudmFzLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiXG4gIGNhbnZhcy5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCJcblxuICBjYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQoY2FudmFzKVxuXG4gIC8vIGNhbnZhcy5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCByYXRpbyAqIHBhcmVudC5vZmZzZXRYKVxuICAvLyBjYW52YXMuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIHJhdGlvICogcGFyZW50Lm9mZnNldFkpXG4gIC8vIHBhcmVudC5pbnNlcnRCZWZvcmUoY2FudmFzLCBwYXJlbnQuZmlyc3RDaGlsZClcbiAgcGFyZW50LmFwcGVuZENoaWxkKGNhbnZhc0NvbnRhaW5lcilcblxuICByZXR1cm4ge1xuICAgIGNhbnZhc0NvbnRhaW5lcixcbiAgICBjYW52YXMsXG4gICAgY2FudmFzQ29udGV4dCxcbiAgICByYXRpb1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFNoYXBlc1RvTWFwKFxuICBuZXdTaGFwZXMsXG4gIGV4aXN0aW5nT2JqZWN0c01hcCxcbiAgY3VycklkcyxcbiAgcmVvcmRlckNiLFxuICByZWRyYXdDYlxuKSB7XG4gIG5ld1NoYXBlcy5mb3JFYWNoKHNoYXBlID0+IHtcbiAgICBleGlzdGluZ09iamVjdHNNYXAuc2V0KHNoYXBlLCB7XG4gICAgICBzaGFwZU9iajogc2hhcGUsXG4gICAgICBzaGFwZUlkOiBjdXJySWRzLnNoYXBlSWQsXG4gICAgICBzaGFwZUlkeDogLTFcbiAgICB9KVxuICAgIHNoYXBlLm9uKFxuICAgICAgW1wiY2hhbmdlZDpvcmRlclwiLCBcImNoYW5nZWQ6dmlzaWJpbGl0eVwiLCBcImNoYW5nZWQ6c3R5bGVcIl0sXG4gICAgICByZW9yZGVyQ2JcbiAgICApXG4gICAgc2hhcGUub24oW1wiY2hhbmdlZDpnZW9tXCIsIFwiY2hhbmdlZDp2aXNpYmlsaXR5XCIsIFwiY2hhbmdlZDp4Zm9ybVwiXSwgcmVkcmF3Q2IpXG4gICAgY3Vycklkcy5zaGFwZUlkICs9IDFcbiAgfSlcbn1cblxuZnVuY3Rpb24gZGVsZXRlU2hhcGVzRnJvbU1hcChzaGFwZXMsIGV4aXN0aW5nT2JqZWN0c01hcCwgcmVvcmRlckNiLCByZWRyYXdDYikge1xuICBjb25zdCBpZHhzID0gW11cbiAgc2hhcGVzLmZvckVhY2goc2hhcGUgPT4ge1xuICAgIGNvbnN0IHNoYXBlSW5mbyA9IGV4aXN0aW5nT2JqZWN0c01hcC5nZXQoc2hhcGUpXG4gICAgaWYgKHNoYXBlSW5mbykge1xuICAgICAgaWR4cy5wdXNoKHNoYXBlSW5mby5zaGFwZUlkeClcbiAgICB9XG4gICAgZXhpc3RpbmdPYmplY3RzTWFwLmRlbGV0ZShzaGFwZSlcbiAgICBzaGFwZS5vZmYoW1wiY2hhbmdlZFwiXSwgW3Jlb3JkZXJDYiwgcmVkcmF3Q2JdKVxuICB9KVxuICByZXR1cm4gaWR4c1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmF3RW5naW5lIGV4dGVuZHMgRXZlbnRIYW5kZXIge1xuICBjb25zdHJ1Y3RvcihwYXJlbnQsIG9wdHMpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5faW5pdChwYXJlbnQsIG9wdHMpXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3lDYW52YXMoKVxuXG4gICAgaWYgKHRoaXMuX29iamVjdHMpIHtcbiAgICAgIHRoaXMuX29iamVjdHMuZm9yRWFjaCgoc2hhcGVJbmZvLCBzaGFwZSkgPT4ge1xuICAgICAgICBzaGFwZS5vZmYoXCJjaGFuZ2VkXCIsIFt0aGlzLl9yZW9yZGVyQ2IsIHRoaXMuX3JlZHJhd0NiXSlcbiAgICAgIH0pXG4gICAgICB0aGlzLl9vYmplY3RzLmNsZWFyKClcbiAgICAgIHRoaXMuX3NvcnRlZE9ianMgPSBbXVxuICAgICAgdGhpcy5fcmVvcmRlcmVkT2JqSWR4cy5jbGVhcigpXG4gICAgfVxuICB9XG5cbiAgX3Jlc2l6ZShvcHRzKSB7XG4gICAgbGV0IHdpZHRoID0gMFxuICAgIGlmICh0aGlzLl9wYXJlbnQub2Zmc2V0V2lkdGgpIHtcbiAgICAgIHdpZHRoID0gTWF0aC5tYXgoXG4gICAgICAgIHdpZHRoLFxuICAgICAgICB0aGlzLl9wYXJlbnQub2Zmc2V0V2lkdGggLSB0aGlzLl9tYXJnaW5zLmxlZnQgLSB0aGlzLl9tYXJnaW5zLnJpZ2h0XG4gICAgICApXG4gICAgfVxuXG4gICAgbGV0IGhlaWdodCA9IDBcbiAgICBpZiAodGhpcy5fcGFyZW50Lm9mZnNldEhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgdGhpcy5fcGFyZW50Lm9mZnNldEhlaWdodCAtIHRoaXMuX21hcmdpbnMudG9wIC0gdGhpcy5fbWFyZ2lucy5ib3R0b21cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aGlzLl9kcmF3Q2FudmFzLndpZHRoID0gd2lkdGggKiB0aGlzLl9waXhlbFJhdGlvXG4gICAgdGhpcy5fZHJhd0NhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiB0aGlzLl9waXhlbFJhdGlvXG5cbiAgICB0aGlzLl9kcmF3Q2FudmFzLnN0eWxlLmxlZnQgPSBgJHt0aGlzLl9tYXJnaW5zLmxlZnR9cHhgXG4gICAgdGhpcy5fZHJhd0NhbnZhcy5zdHlsZS50b3AgPSBgJHt0aGlzLl9tYXJnaW5zLnRvcH1weGBcbiAgICB0aGlzLl9kcmF3Q2FudmFzLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgXG4gICAgdGhpcy5fZHJhd0NhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgXG5cbiAgICBpZiAodGhpcy5fY2FtZXJhKSB7XG4gICAgICAvLyBjb25zdCBjdXJyVmlld3BvcnQgPSB0aGlzLl9jYW1lcmEudmlld3BvcnRcbiAgICAgIC8vIGNvbnN0IGN1cnJTcGFjZSA9IHRoaXMuX2NhbWVyYS5wcm9qZWN0aW9uQm91bmRzXG4gICAgICAvLyBjb25zdCB2aWV3cG9ydEV4dGVudHMgPSBbMCwgMF1cbiAgICAgIC8vIEFBQm94MmQuZ2V0RXh0ZW50cyh2aWV3cG9ydEV4dGVudHMsIGN1cnJWaWV3cG9ydClcbiAgICAgIC8vIGNvbnN0IHNwYWNlQ2VudGVyID0gWzAsIDBdXG4gICAgICAvLyBjb25zdCBzcGFjZUV4dGVudHMgPSBbMCwgMF1cbiAgICAgIC8vIEFBQm94MmQuZ2V0Q2VudGVyKHNwYWNlQ2VudGVyLCBjdXJyU3BhY2UpXG4gICAgICAvLyBBQUJveDJkLmdldEV4dGVudHMoc3BhY2VFeHRlbnRzLCBjdXJyU3BhY2UpXG4gICAgICAvLyBjb25zdCByYXRpbyA9IHNwYWNlRXh0ZW50c1xuICAgICAgLy8gVmVjMmQuZGl2KHJhdGlvLCBzcGFjZUV4dGVudHMsIHZpZXdwb3J0RXh0ZW50cylcbiAgICAgIC8vIEFBQm94MmQuc2V0KGN1cnJWaWV3cG9ydCwgMCwgMCwgd2lkdGgsIGhlaWdodClcbiAgICAgIC8vIEFBQm94MmQuZ2V0RXh0ZW50cyh2aWV3cG9ydEV4dGVudHMsIGN1cnJWaWV3cG9ydClcbiAgICAgIC8vIFZlYzJkLm11bHRpcGx5KHNwYWNlRXh0ZW50cywgcmF0aW8sIHZpZXdwb3J0RXh0ZW50cylcbiAgICAgIC8vIEFBQm94MmQuaW5pdENlbnRlckV4dGVudHMoY3VyclNwYWNlLCBzcGFjZUNlbnRlciwgc3BhY2VFeHRlbnRzKVxuICAgICAgLy8gdGhpcy5fY2FtZXJhLnZpZXdwb3J0ID0gY3VyclZpZXdwb3J0XG4gICAgICAvLyB0aGlzLl9jYW1lcmEucHJvamVjdGlvbkJvdW5kcyA9IGN1cnJTcGFjZVxuICAgICAgLy8gICAvLyB0aGlzLl9jYW1lcmEudmlld3BvcnQgPSBbMCwgMCwgd2lkdGgsIGhlaWdodF1cbiAgICAgIC8vICAgLy8gdGhpcy5fY2FtZXJhLnByb2plY3Rpb25Cb3VuZHMgPSBbMCwgMCwgd2lkdGgsIGhlaWdodF1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcHJvakRpbXMgPVxuICAgICAgICBvcHRzICYmIG9wdHMucHJvamVjdGlvbkRpbWVuc2lvbnNcbiAgICAgICAgICA/IG9wdHMucHJvamVjdGlvbkRpbWVuc2lvbnNcbiAgICAgICAgICA6IFt3aWR0aCwgaGVpZ2h0XVxuICAgICAgdGhpcy5fY2FtZXJhID0gbmV3IENhbWVyYTJkKFxuICAgICAgICBbMCwgMCwgd2lkdGgsIGhlaWdodF0sXG4gICAgICAgIHByb2pEaW1zLFxuICAgICAgICBvcHRzLmZsaXBZID8gQm9vbGVhbihvcHRzLmZsaXBZKSA6IGZhbHNlXG4gICAgICApXG4gICAgICB0aGlzLl9jYW1lcmEuc2V0UG9zaXRpb24oXG4gICAgICAgIG9wdHMgJiYgb3B0cy5jYW1lcmFQb3NpdGlvblxuICAgICAgICAgID8gb3B0cy5jYW1lcmFQb3NpdGlvblxuICAgICAgICAgIDogW3dpZHRoIC8gMi4wLCBoZWlnaHQgLyAyLjBdXG4gICAgICApXG4gICAgICB0aGlzLl9jYW1lcmEub24oXCJjaGFuZ2VkXCIsIHRoaXMuX3JlcmVuZGVyQ2IpXG4gICAgfVxuICAgIC8vIHRoaXMuX2NhbWVyYSA9IG5ldyBDYW1lcmEyZChbMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdLCBbMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdKVxuICAgIC8vIHRoaXMuX2NhbWVyYS5vbihcImNoYW5nZWRcIiwgdGhpcy5fcmVyZW5kZXJDYilcblxuICAgIHRoaXMuX3JlcmVuZGVyQ2IoKVxuICB9XG5cbiAgX21vdXNlZG93bkNCKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gdGhpcy5fcGFyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmZpcmUoXCJtb3VzZWRvd25cIiwge1xuICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICB9KVxuICB9XG5cbiAgX21vdXNldXBDQihldmVudCkge1xuICAgIGlmIChldmVudC50YXJnZXQgIT09IHRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5maXJlKFwibW91c2V1cFwiLCB7XG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgIH0pXG4gIH1cblxuICBfbW91c2Vtb3ZlQ0IoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSB0aGlzLl9wYXJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmlyZShcIm1vdXNlbW92ZVwiLCB7XG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgIH0pXG4gIH1cblxuICBfY2xpY2tDQihldmVudCkge1xuICAgIGlmIChldmVudC50YXJnZXQgIT09IHRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5maXJlKFwiY2xpY2tcIiwge1xuICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICB9KVxuICB9XG5cbiAgX2RibGNsaWNrQ0IoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSB0aGlzLl9wYXJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmlyZShcImRibGNsaWNrXCIsIHtcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgfSlcbiAgfVxuXG4gIF9tb3VzZW92ZXJDQihldmVudCkge1xuICAgIGlmIChldmVudC50YXJnZXQgIT09IHRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5maXJlKFwibW91c2VvdmVyXCIsIHtcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgfSlcbiAgfVxuXG4gIF9tb3VzZW91dENCKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gdGhpcy5fcGFyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmZpcmUoXCJtb3VzZW91dFwiLCB7XG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgIH0pXG4gIH1cblxuICBfZW5hYmxlRXZlbnRzKCkge1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudHMobW91c2VldmVudHMpXG4gICAgY29uc3QgY2FsbGJhY2tzID0gbW91c2VldmVudHMubWFwKGV2ZW50ID0+IGBfJHtldmVudH1DQmApXG4gICAgLy8gYmluZEFsbChjYWxsYmFja3MsIHRoaXMpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb3VzZWV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihtb3VzZWV2ZW50c1tpXSwgdGhpc1tjYWxsYmFja3NbaV1dLCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIF9kaXNhYmxlRXZlbnRzKCkge1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9IG1vdXNlZXZlbnRzLm1hcChldmVudCA9PiBgXyR7ZXZlbnR9Q0JgKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW91c2VldmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobW91c2VldmVudHNbaV0sIHRoaXNbY2FsbGJhY2tzW2ldXSwgdHJ1ZSlcbiAgICB9XG4gIH1cblxuICBfaW5pdENhbnZhcyhwYXJlbnQsIG9wdHMsIGZvcmNlRXZlbnRzID0gbnVsbCkge1xuICAgIHRoaXMuX21hcmdpbnMgPSBvcHRzICYmIG9wdHMubWFyZ2lucyA/IE9iamVjdC5hc3NpZ24oe30sIG9wdHMubWFyZ2lucykgOiB7fVxuICAgIG1hcmdpblByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuX21hcmdpbnNbcHJvcF0gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdGhpcy5fbWFyZ2luc1twcm9wXSA9IDBcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgeyBjYW52YXNDb250YWluZXIsIGNhbnZhcywgY2FudmFzQ29udGV4dCwgcmF0aW8gfSA9IGNyZWF0ZUNhbnZhcyhcbiAgICAgIHBhcmVudFxuICAgIClcblxuICAgIHRoaXMuX2NvbnRhaW5lciA9IGNhbnZhc0NvbnRhaW5lclxuICAgIHRoaXMuX2RyYXdDYW52YXMgPSBjYW52YXNcbiAgICB0aGlzLl9kcmF3Q3R4ID0gY2FudmFzQ29udGV4dFxuICAgIHRoaXMuX3BpeGVsUmF0aW8gPSByYXRpb1xuICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudFxuXG4gICAgYmluZEFsbChbXCJfcmVzaXplXCJdLCB0aGlzKVxuICAgIHRoaXMuX3Jlc2l6ZShvcHRzKVxuICAgIHRoaXMuX3Jlc2l6ZVNlbnNvciA9IG5ldyBSZXNpemVTZW5zb3IocGFyZW50LCB0aGlzLl9yZXNpemUpXG5cbiAgICBpZiAoZm9yY2VFdmVudHMgfHwgKGZvcmNlRXZlbnRzID09PSBudWxsICYmIG9wdHMgJiYgb3B0cy5lbmFibGVFdmVudHMpKSB7XG4gICAgICB0aGlzLl9lbmFibGVFdmVudHMoKVxuICAgIH1cbiAgfVxuXG4gIF9kZXN0cm95Q2FudmFzKCkge1xuICAgIGlmICh0aGlzLl9kcmF3Q2FudmFzKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlRXZlbnRzKClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGFyZW50KSB7XG4gICAgICB0aGlzLl9wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fZHJhd0NhbnZhcylcblxuICAgICAgaWYgKHRoaXMuX3Jlc2l6ZVNlbnNvcikge1xuICAgICAgICB0aGlzLl9yZXNpemVTZW5zb3IuZGV0YWNoKHRoaXMuX3BhcmVudCwgdGhpcy5fcmVzaXplKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2RyYXdDYW52YXMgPSBudWxsXG4gICAgdGhpcy5fZHJhd0N0eCA9IG51bGxcbiAgICB0aGlzLl9wYXJlbnQgPSBudWxsXG4gIH1cblxuICBfaW5pdChwYXJlbnQsIG9wdHMsIGZvcmNlRXZlbnRzID0gbnVsbCkge1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudHMoW0V2ZW50Q29uc3RhbnRzLlNIQVBFX0FERCwgRXZlbnRDb25zdGFudHMuU0hBUEVfREVMRVRFXSlcblxuICAgIGJpbmRBbGwoW1wiX3Jlb3JkZXJDYlwiLCBcIl9yZXJlbmRlckNiXCJdLCB0aGlzKVxuICAgIGJpbmRBbGwoXG4gICAgICBbXG4gICAgICAgIFwiX21vdXNlZG93bkNCXCIsXG4gICAgICAgIFwiX21vdXNldXBDQlwiLFxuICAgICAgICBcIl9tb3VzZW1vdmVDQlwiLFxuICAgICAgICBcIl9jbGlja0NCXCIsXG4gICAgICAgIFwiX2RibGNsaWNrQ0JcIixcbiAgICAgICAgXCJfbW91c2VvdmVyQ0JcIixcbiAgICAgICAgXCJfbW91c2VvdXRDQlwiXG4gICAgICBdLFxuICAgICAgdGhpc1xuICAgIClcblxuICAgIHRoaXMuX3JlbmRlckZyYW1lQ2IgPSB0aGlzLnJlbmRlckFsbC5iaW5kKHRoaXMpXG4gICAgdGhpcy5fcmVuZGVyUmVxdWVzdElkID0gMFxuICAgIHRoaXMuX2lkcyA9IHtcbiAgICAgIHNoYXBlSWQ6IDFcbiAgICB9XG5cbiAgICB0aGlzLl9vYmplY3RzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fc29ydGVkT2JqcyA9IFtdXG4gICAgdGhpcy5fcmVvcmRlcmVkT2JqSWR4cyA9IG5ldyBTZXQoKVxuXG4gICAgdGhpcy5faW5pdENhbnZhcyhwYXJlbnQsIG9wdHMsIGZvcmNlRXZlbnRzKVxuXG4gICAgdGhpcy5fc3R5bGVTdGF0ZSA9IG5ldyBEcmF3U3R5bGVTdGF0ZSh7XG4gICAgICBmaWxsQ29sb3I6IFwicmVkXCJcbiAgICB9KVxuICB9XG5cbiAgZ2V0Q29udGFpbmVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRcbiAgfVxuXG4gIGdldENhbnZhc0NvbnRhaW5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyXG4gIH1cblxuICBnZXRDYW52YXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdDYW52YXNcbiAgfVxuXG4gIGdldCBzb3J0ZWRTaGFwZXMoKSB7XG4gICAgaWYgKHRoaXMuX3Jlb3JkZXJlZE9iaklkeHMuc2l6ZSkge1xuICAgICAgY29uc29sZS5hc3NlcnQoXG4gICAgICAgIHRoaXMuX3NvcnRlZE9ianMubGVuZ3RoID09PSB0aGlzLl9vYmplY3RzLnNpemUsXG4gICAgICAgIGBTaXplIG1pc21hdGNoIHdoZW4gcmVuZGVyaW5nIG9iamV0cy4gU29tZXRoaW5nIGdvdCBvdXQgb2Ygc3luYyAtIHNvcnRlZCBvYmpzIGxlbmd0aDogJHt0aGlzLl9zb3J0ZWRPYmpzLmxlbmd0aH0sIG9iamVjdHMgbGVuZ3RoOiAke3RoaXMuX29iamVjdHMuc2l6ZX1gXG4gICAgICApXG5cbiAgICAgIC8vIGlmICh0aGlzLl9yZW9yZGVyZWRPYmpJZHhzLmxlbmd0aCAvIHRoaXMuX3NvcnRlZE9ianMubGVuZ3RoID4gMC43KSB7XG4gICAgICAvLyAgIC8vIG1pZ2h0IGFzIHdlbGwganVzdCByZXNvcnQgdGhlIHdob2xlIHRoaW5nIG92ZXJcbiAgICAgIC8vICAgdGhpcy5fc29ydGVkT2Jqcy5zb3J0KHNoYXBlSW5mb0NvbXBhcmUpXG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gfVxuXG4gICAgICB0aGlzLl9zb3J0ZWRPYmpzLnNvcnQoQmFzZVNoYXBlLnNoYXBlQ29tcGFyZSlcbiAgICAgIHRoaXMuX3Jlb3JkZXJlZE9iaklkeHMuY2xlYXIoKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc29ydGVkT2Jqc1xuICB9XG5cbiAgZ2V0IG1hcmdpbnMoKSB7XG4gICAgY29uc3QgcnRuID0ge31cbiAgICBtYXJnaW5Qcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgcnRuW3Byb3BdID0gdGhpcy5fbWFyZ2luc1twcm9wXVxuICAgIH0pXG4gICAgcmV0dXJuIHJ0blxuICB9XG5cbiAgc2V0IG1hcmdpbnMobWFyZ2lucykge1xuICAgIG1hcmdpblByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBtYXJnaW5zW3Byb3BdID09PSBcIm51bWJlclwiICYmXG4gICAgICAgIG1hcmdpbnNbcHJvcF0gIT09IHRoaXMuX21hcmdpbnNbcHJvcF1cbiAgICAgICkge1xuICAgICAgICB0aGlzLl9tYXJnaW5zW3Byb3BdID0gbWFyZ2lucy5wcm9wXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuX3Jlc2l6ZSgpXG4gIH1cblxuICBnZXQgdmlld3BvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbWVyYS52aWV3cG9ydFxuICB9XG5cbiAgc2V0IHZpZXdwb3J0KHZpZXdwb3J0KSB7XG4gICAgdGhpcy5fY2FtZXJhLnZpZXdwb3J0ID0gdmlld3BvcnRcbiAgfVxuXG4gIGdldCBwcm9qZWN0aW9uRGltZW5zaW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FtZXJhLnByb2plY3Rpb25EaW1lbnNpb25zXG4gIH1cblxuICBzZXQgcHJvamVjdGlvbkRpbWVuc2lvbnMocHJvamVjdGlvbkRpbWVuc2lvbnMpIHtcbiAgICB0aGlzLl9jYW1lcmEucHJvamVjdGlvbkRpbWVuc2lvbnMgPSBwcm9qZWN0aW9uRGltZW5zaW9uc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBnZXQgY2FtZXJhUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbWVyYS5nZXRQb3NpdGlvbigpXG4gIH1cblxuICBzZXQgY2FtZXJhUG9zaXRpb24ocG9zKSB7XG4gICAgdGhpcy5fY2FtZXJhLnNldFBvc2l0aW9uKHBvcylcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcHJvamVjdChvdXQsIHNjcmVlblB0KSB7XG4gICAgY29uc3Qgc2NyZWVuVG9Xb3JsZE1hdHJpeCA9IHRoaXMuX2NhbWVyYS5zY3JlZW5Ub1dvcmxkTWF0cml4XG4gICAgcmV0dXJuIFBvaW50MmQudHJhbnNmb3JtTWF0MmQob3V0LCBzY3JlZW5QdCwgc2NyZWVuVG9Xb3JsZE1hdHJpeClcbiAgfVxuXG4gIHVucHJvamVjdChvdXQsIHdvcmxkUHQpIHtcbiAgICBjb25zdCB3b3JsZFRvU2NyZWVuTWF0cml4ID0gdGhpcy5fY2FtZXJhLndvcmxkVG9TY3JlZW5NYXRyaXhcbiAgICByZXR1cm4gUG9pbnQyZC50cmFuc2Zvcm1NYXQyZChvdXQsIHdvcmxkUHQsIHdvcmxkVG9TY3JlZW5NYXRyaXgpXG4gIH1cblxuICBoYXNTaGFwZShzaGFwZSkge1xuICAgIHJldHVybiB0aGlzLl9vYmplY3RzLmhhcyhzaGFwZSlcbiAgfVxuXG4gIGFkZFNoYXBlKHNoYXBlKSB7XG4gICAgbGV0IHNoYXBlcyA9IHNoYXBlXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNoYXBlcykpIHtcbiAgICAgIHNoYXBlcyA9IFtzaGFwZV1cbiAgICB9XG5cbiAgICBhZGRTaGFwZXNUb01hcChcbiAgICAgIHNoYXBlcyxcbiAgICAgIHRoaXMuX29iamVjdHMsXG4gICAgICB0aGlzLl9pZHMsXG4gICAgICB0aGlzLl9yZW9yZGVyQ2IsXG4gICAgICB0aGlzLl9yZXJlbmRlckNiXG4gICAgKVxuXG4gICAgLy8gZmlyZSBhZGQgZXZlbnRcbiAgICB0aGlzLmZpcmUoXCJzaGFwZTphZGRcIiwge1xuICAgICAgc2hhcGU6IHNoYXBlc1xuICAgIH0pXG5cbiAgICBjb25zdCBwcm94eUV2ZW50ID0ge1xuICAgICAgdGFyZ2V0OiBzaGFwZXNcbiAgICB9XG4gICAgdGhpcy5fcmVvcmRlckNiKHByb3h5RXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZGVsZXRlU2hhcGUoc2hhcGUpIHtcbiAgICBsZXQgc2hhcGVzID0gc2hhcGVcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2hhcGVzKSkge1xuICAgICAgc2hhcGVzID0gW3NoYXBlXVxuICAgIH1cblxuICAgIGNvbnN0IGlkeHMgPSBkZWxldGVTaGFwZXNGcm9tTWFwKFxuICAgICAgc2hhcGVzLFxuICAgICAgdGhpcy5fb2JqZWN0cyxcbiAgICAgIHRoaXMuX3Jlb3JkZXJDYixcbiAgICAgIHRoaXMuX3JlcmVuZGVyQ2JcbiAgICApXG4gICAgbGV0IGluZGV4ID0gLTFcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKChpbmRleCA9IHRoaXMuX3NvcnRlZE9ianMuaW5kZXhPZihzaGFwZXNbaV0pKSA+PSAwKSB7XG4gICAgICAgIHRoaXMuX3NvcnRlZE9ianMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgfVxuICAgICAgdGhpcy5fcmVvcmRlcmVkT2JqSWR4cy5hZGQoaWR4c1tpXSlcbiAgICB9XG4gICAgdGhpcy5fcmVyZW5kZXJDYigpXG5cbiAgICB0aGlzLmZpcmUoXCJzaGFwZTpkZWxldGVcIiwge1xuICAgICAgc2hhcGU6IHNoYXBlc1xuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZGVsZXRlQWxsU2hhcGVzKCkge1xuICAgIHRoaXMuZGVsZXRlU2hhcGUodGhpcy5zb3J0ZWRTaGFwZXMuc2xpY2UoKSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgbW92ZVNoYXBlVG9Ub3Aoc2hhcGUpIHtcbiAgICBpZiAodGhpcy5fb2JqZWN0cy5oYXMoc2hhcGUpKSB7XG4gICAgICBjb25zdCBzaGFwZXMgPSB0aGlzLnNvcnRlZFNoYXBlc1xuICAgICAgY29uc3QgemluZGV4ID0gc2hhcGVzW3NoYXBlcy5sZW5ndGggLSAxXS56SW5kZXhcbiAgICAgIHNoYXBlLnpJbmRleCA9IHppbmRleCArIDFcbiAgICB9XG4gIH1cblxuICBtb3ZlU2hhcGVUb0JhY2soc2hhcGUpIHtcbiAgICBpZiAodGhpcy5fb2JqZWN0cy5oYXMoc2hhcGUpKSB7XG4gICAgICBjb25zdCBzaGFwZXMgPSB0aGlzLnNvcnRlZFNoYXBlc1xuICAgICAgY29uc3QgemluZGV4ID0gc2hhcGVzWzBdLnpJbmRleFxuICAgICAgc2hhcGUuekluZGV4ID0gemluZGV4XG4gICAgfVxuICB9XG5cbiAgZ2V0U2hhcGVzQXNKU09OKCkge1xuICAgIGNvbnN0IHNoYXBlcyA9IHRoaXMuc29ydGVkU2hhcGVzXG4gICAgcmV0dXJuIHNoYXBlcy5tYXAoc2hhcGUgPT4gc2hhcGUudG9KU09OKCkpXG4gIH1cblxuICBfcmVyZW5kZXJDYigpIHtcbiAgICBpZiAodGhpcy5fcmVuZGVyUmVxdWVzdElkKSB7XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVuZGVyUmVxdWVzdElkKVxuICAgIH1cbiAgICB0aGlzLl9yZW5kZXJSZXF1ZXN0SWQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2IpXG4gIH1cblxuICBfcmVvcmRlckNiKGV2ZW50KSB7XG4gICAgbGV0IGNoYW5nZWRTaGFwZXMgPSBldmVudC50YXJnZXRcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hhbmdlZFNoYXBlcykpIHtcbiAgICAgIGNoYW5nZWRTaGFwZXMgPSBbZXZlbnQudGFyZ2V0XVxuICAgIH1cbiAgICBjaGFuZ2VkU2hhcGVzLmZvckVhY2goY2hhbmdlZFNoYXBlID0+IHtcbiAgICAgIGNvbnNvbGUuYXNzZXJ0KGNoYW5nZWRTaGFwZSwgXCJBIGNoYW5nZWQgZXZlbnQgZG9lc24ndCBoYXZlIGFuIG9iamVjdFwiKVxuICAgICAgY29uc3Qgc2hhcGVJbmZvID0gdGhpcy5fb2JqZWN0cy5nZXQoY2hhbmdlZFNoYXBlKVxuICAgICAgY29uc29sZS5hc3NlcnQoXG4gICAgICAgIHNoYXBlSW5mbyxcbiAgICAgICAgYEEgY2hhbmdlZCBldmVudCB0YXJnZXQgaXNuJ3QgaW4gdGhlIGxpc3Qgb2Ygc2hhcGVzICR7Y2hhbmdlZFNoYXBlfWBcbiAgICAgIClcbiAgICAgIGlmIChzaGFwZUluZm8uc2hhcGVJZHggPCAwKSB7XG4gICAgICAgIHNoYXBlSW5mby5zaGFwZUlkeCA9IHRoaXMuX3NvcnRlZE9ianMucHVzaChjaGFuZ2VkU2hhcGUpIC0gMVxuICAgICAgfVxuICAgICAgdGhpcy5fcmVvcmRlcmVkT2JqSWR4cy5hZGQoc2hhcGVJbmZvLnNoYXBlSWR4KVxuICAgIH0pXG4gICAgdGhpcy5fcmVyZW5kZXJDYigpXG4gIH1cblxuICBfcmVuZGVyU2hhcGVzKGN0eCwgZHJhd1NoYXBlcywgY2FtZXJhKSB7XG4gICAgY29uc3Qgd29ybGRUb1NjcmVlbk1hdCA9IGNhbWVyYS53b3JsZFRvU2NyZWVuTWF0cml4XG4gICAgZHJhd1NoYXBlcy5mb3JFYWNoKHNoYXBlID0+IHtcbiAgICAgIGlmIChzaGFwZS52aXNpYmxlKSB7XG4gICAgICAgIHNoYXBlLnJlbmRlcihjdHgsIHdvcmxkVG9TY3JlZW5NYXQsIHRoaXMuX3N0eWxlU3RhdGUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJlbmRlckFsbCgpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLl9kcmF3Q3R4XG4gICAgLy8gY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodClcbiAgICBjdHguY2xlYXJSZWN0KFxuICAgICAgMCxcbiAgICAgIDAsXG4gICAgICB0aGlzLl9kcmF3Q2FudmFzLm9mZnNldFdpZHRoLFxuICAgICAgdGhpcy5fZHJhd0NhbnZhcy5vZmZzZXRIZWlnaHRcbiAgICApXG5cbiAgICBpZiAoIXRoaXMuX29iamVjdHMuc2l6ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY3R4LnNhdmUoKVxuICAgIGNvbnN0IGRyYXdTaGFwZXMgPSB0aGlzLnNvcnRlZFNoYXBlc1xuICAgIHRoaXMuX3N0eWxlU3RhdGUuYXBwbHlEZWZhdWx0cyhjdHgpXG4gICAgdGhpcy5fcmVuZGVyU2hhcGVzKGN0eCwgZHJhd1NoYXBlcywgdGhpcy5fY2FtZXJhKVxuICAgIGN0eC5yZXN0b3JlKClcbiAgfVxufVxuXG5EcmF3RW5naW5lLkV2ZW50Q29uc3RhbnRzID0gRXZlbnRDb25zdGFudHNcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2VuZ2luZS9kcmF3LWVuZ2luZS5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///21\n"); +eval("/* unused harmony export EventConstants */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return DrawEngine; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_canvas_utils__ = __webpack_require__(32);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_point2d__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shapes_base_shape__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__style_basic_style__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_utils__ = __webpack_require__(33);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__view_camera2d__ = __webpack_require__(34);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__util_event_handler__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_css_element_queries_src_ResizeSensor__ = __webpack_require__(35);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_css_element_queries_src_ResizeSensor___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_css_element_queries_src_ResizeSensor__);\n\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\n\n\n\n\n\n\nvar mouseevents = [\"mousedown\", \"mouseup\", \"mousemove\", \"click\", \"dblclick\", \"mouseover\", \"mouseout\"];\nvar marginProps = [\"top\", \"bottom\", \"left\", \"right\"];\nvar EventConstants = {\n MOUSEDOWN: \"mousedown\",\n MOUSEUP: \"mouseup\",\n MOUSEMOVE: \"mousemove\",\n CLICK: \"click\",\n DBLCLICK: \"dblclick\",\n MOUSEOVER: \"mouseover\",\n MOUSEOUT: \"mouseout\",\n SHAPE_ADD: \"shape:add\",\n SHAPE_DELETE: \"shape:delete\"\n};\n\nvar DrawStyleState =\n/*#__PURE__*/\nfunction (_BasicStyle) {\n _inherits(DrawStyleState, _BasicStyle);\n\n function DrawStyleState() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, DrawStyleState);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(DrawStyleState)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this._defaults = {\n packedFillColor: _this.packedFillColor,\n packedStrokeColor: _this.packedStrokeColor,\n strokeWidth: _this.strokeWidth,\n lineJoin: _this.lineJoin,\n lineCap: _this.lineCap,\n dashPattern: _this.dashPattern,\n dashOffset: _this.dashOffset\n };\n return _this;\n }\n\n _createClass(DrawStyleState, [{\n key: \"setFillStyle\",\n value: function setFillStyle(ctx, fillStyle) {\n if (fillStyle.packedFillColor !== this.packedFillColor) {\n this.packedFillColor = fillStyle.packedFillColor;\n ctx.fillStyle = this.fillColor;\n }\n }\n }, {\n key: \"setStrokeStyle\",\n value: function setStrokeStyle(ctx, strokeStyle) {\n if (strokeStyle.packedStrokeColor !== this.packedStrokeColor) {\n this.packedStrokeColor = strokeStyle.packedStrokeColor;\n ctx.strokeStyle = this.strokeColor;\n }\n\n if (strokeStyle.strokeWidth !== this._strokeWidth) {\n this.strokeWidth = strokeStyle.strokeWidth;\n ctx.lineWidth = this._strokeWidth;\n }\n\n if (strokeStyle.lineJoin !== this._lineJoin) {\n this.lineJoin = strokeStyle.lineJoin;\n ctx.lineJoin = this._lineJoin;\n }\n\n if (strokeStyle.lineCap !== this._lineCap) {\n this.lineCap = strokeStyle.lineCap;\n ctx.lineCap = this._lineCap;\n }\n\n var dashPattern = strokeStyle._dashPattern;\n var diff = false;\n\n if (dashPattern.length === this._dashPattern.length) {\n for (var i = 0; i < dashPattern.length; i += 1) {\n if (dashPattern[i] !== this._dashPattern[i]) {\n diff = true;\n break;\n }\n }\n } else {\n diff = true;\n }\n\n if (diff) {\n this.dashPattern = dashPattern;\n ctx.setLineDash(this._dashPattern);\n }\n\n if (strokeStyle.dashOffset !== this._dashOffset) {\n this.dashOffset = strokeStyle.dashOffset;\n ctx.lineDashOffset = this._dashOffset;\n }\n }\n }, {\n key: \"applyDefaults\",\n value: function applyDefaults(ctx) {\n var _this2 = this;\n\n Object.getOwnPropertyNames(this._defaults).forEach(function (prop) {\n _this2[prop] = _this2._defaults[prop];\n });\n this.setFillCtx(ctx);\n this.setStrokeCtx(ctx);\n }\n }]);\n\n return DrawStyleState;\n}(__WEBPACK_IMPORTED_MODULE_3__style_basic_style__[\"a\" /* default */]);\n\nfunction addClass(element, className) {\n if (element && \" \".concat(element.className, \" \").indexOf(\" \".concat(className, \" \")) < 0) {\n element.className += (element.className ? \" \" : \"\") + className;\n }\n}\n\nfunction createCanvas(parent) {\n var canvasContainer = document.createElement(\"div\");\n addClass(canvasContainer, \"mapd-draw-canvas-container\");\n var canvas = document.createElement(\"canvas\");\n var canvasContext = canvas.getContext(\"2d\");\n var ratio = __WEBPACK_IMPORTED_MODULE_0__util_canvas_utils__[\"a\" /* makeCanvasAutoHighDPI */](canvasContext); // const ratio = 1\n // add class?\n\n addClass(canvas, \"mapd-draw-canvas\");\n canvas.style.position = \"absolute\";\n canvas.style.pointerEvents = \"none\";\n canvasContainer.appendChild(canvas); // canvas.setAttribute(\"width\", ratio * parent.offsetX)\n // canvas.setAttribute(\"height\", ratio * parent.offsetY)\n // parent.insertBefore(canvas, parent.firstChild)\n\n parent.appendChild(canvasContainer);\n return {\n canvasContainer: canvasContainer,\n canvas: canvas,\n canvasContext: canvasContext,\n ratio: ratio\n };\n}\n\nfunction addShapesToMap(newShapes, existingObjectsMap, currIds, reorderCb, redrawCb) {\n newShapes.forEach(function (shape) {\n existingObjectsMap.set(shape, {\n shapeObj: shape,\n shapeId: currIds.shapeId,\n shapeIdx: -1\n });\n shape.on([\"changed:order\", \"changed:visibility\", \"changed:style\"], reorderCb);\n shape.on([\"changed:geom\", \"changed:visibility\", \"changed:xform\"], redrawCb);\n currIds.shapeId += 1;\n });\n}\n\nfunction deleteShapesFromMap(shapes, existingObjectsMap, reorderCb, redrawCb) {\n var idxs = [];\n shapes.forEach(function (shape) {\n var shapeInfo = existingObjectsMap.get(shape);\n\n if (shapeInfo) {\n idxs.push(shapeInfo.shapeIdx);\n }\n\n existingObjectsMap[\"delete\"](shape);\n shape.off([\"changed\"], [reorderCb, redrawCb]);\n });\n return idxs;\n}\n\nvar DrawEngine =\n/*#__PURE__*/\nfunction (_EventHander) {\n _inherits(DrawEngine, _EventHander);\n\n function DrawEngine(parent, opts) {\n var _this3;\n\n _classCallCheck(this, DrawEngine);\n\n _this3 = _possibleConstructorReturn(this, _getPrototypeOf(DrawEngine).call(this));\n\n _this3._init(parent, opts);\n\n return _this3;\n }\n\n _createClass(DrawEngine, [{\n key: \"destroy\",\n value: function destroy() {\n var _this4 = this;\n\n this._destroyCanvas();\n\n if (this._objects) {\n this._objects.forEach(function (shapeInfo, shape) {\n shape.off(\"changed\", [_this4._reorderCb, _this4._redrawCb]);\n });\n\n this._objects.clear();\n\n this._sortedObjs = [];\n\n this._reorderedObjIdxs.clear();\n }\n }\n }, {\n key: \"_resize\",\n value: function _resize(opts) {\n var width = 0;\n\n if (this._parent.offsetWidth) {\n width = Math.max(width, this._parent.offsetWidth - this._margins.left - this._margins.right);\n }\n\n var height = 0;\n\n if (this._parent.offsetHeight) {\n height = Math.max(height, this._parent.offsetHeight - this._margins.top - this._margins.bottom);\n }\n\n this._drawCanvas.width = width * this._pixelRatio;\n this._drawCanvas.height = height * this._pixelRatio;\n this._drawCanvas.style.left = \"\".concat(this._margins.left, \"px\");\n this._drawCanvas.style.top = \"\".concat(this._margins.top, \"px\");\n this._drawCanvas.style.width = \"\".concat(width, \"px\");\n this._drawCanvas.style.height = \"\".concat(height, \"px\");\n\n if (this._camera) {// const currViewport = this._camera.viewport\n // const currSpace = this._camera.projectionBounds\n // const viewportExtents = [0, 0]\n // AABox2d.getExtents(viewportExtents, currViewport)\n // const spaceCenter = [0, 0]\n // const spaceExtents = [0, 0]\n // AABox2d.getCenter(spaceCenter, currSpace)\n // AABox2d.getExtents(spaceExtents, currSpace)\n // const ratio = spaceExtents\n // Vec2d.div(ratio, spaceExtents, viewportExtents)\n // AABox2d.set(currViewport, 0, 0, width, height)\n // AABox2d.getExtents(viewportExtents, currViewport)\n // Vec2d.multiply(spaceExtents, ratio, viewportExtents)\n // AABox2d.initCenterExtents(currSpace, spaceCenter, spaceExtents)\n // this._camera.viewport = currViewport\n // this._camera.projectionBounds = currSpace\n // // this._camera.viewport = [0, 0, width, height]\n // // this._camera.projectionBounds = [0, 0, width, height]\n } else {\n var projDims = opts && opts.projectionDimensions ? opts.projectionDimensions : [width, height];\n this._camera = new __WEBPACK_IMPORTED_MODULE_5__view_camera2d__[\"a\" /* default */]([0, 0, width, height], projDims, opts.flipY ? Boolean(opts.flipY) : false);\n\n this._camera.setPosition(opts && opts.cameraPosition ? opts.cameraPosition : [width / 2.0, height / 2.0]);\n\n this._camera.on(\"changed\", this._rerenderCb);\n } // this._camera = new Camera2d([0, 0, this.width, this.height], [0, 0, this.width, this.height])\n // this._camera.on(\"changed\", this._rerenderCb)\n\n\n this._rerenderCb();\n }\n }, {\n key: \"_mousedownCB\",\n value: function _mousedownCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"mousedown\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_mouseupCB\",\n value: function _mouseupCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"mouseup\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_mousemoveCB\",\n value: function _mousemoveCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"mousemove\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_clickCB\",\n value: function _clickCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"click\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_dblclickCB\",\n value: function _dblclickCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"dblclick\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_mouseoverCB\",\n value: function _mouseoverCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"mouseover\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_mouseoutCB\",\n value: function _mouseoutCB(event) {\n if (event.target !== this._parent) {\n return;\n }\n\n this.fire(\"mouseout\", {\n originalEvent: event\n });\n }\n }, {\n key: \"_enableEvents\",\n value: function _enableEvents() {\n this.registerEvents(mouseevents);\n var callbacks = mouseevents.map(function (event) {\n return \"_\".concat(event, \"CB\");\n }); // bindAll(callbacks, this)\n\n for (var i = 0; i < mouseevents.length; i += 1) {\n document.addEventListener(mouseevents[i], this[callbacks[i]], true);\n }\n }\n }, {\n key: \"_disableEvents\",\n value: function _disableEvents() {\n var callbacks = mouseevents.map(function (event) {\n return \"_\".concat(event, \"CB\");\n });\n\n for (var i = 0; i < mouseevents.length; i += 1) {\n document.removeEventListener(mouseevents[i], this[callbacks[i]], true);\n }\n }\n }, {\n key: \"_initCanvas\",\n value: function _initCanvas(parent, opts) {\n var _this5 = this;\n\n var forceEvents = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n this._margins = opts && opts.margins ? Object.assign({}, opts.margins) : {};\n marginProps.forEach(function (prop) {\n if (typeof _this5._margins[prop] !== \"number\") {\n _this5._margins[prop] = 0;\n }\n });\n\n var _createCanvas = createCanvas(parent),\n canvasContainer = _createCanvas.canvasContainer,\n canvas = _createCanvas.canvas,\n canvasContext = _createCanvas.canvasContext,\n ratio = _createCanvas.ratio;\n\n this._container = canvasContainer;\n this._drawCanvas = canvas;\n this._drawCtx = canvasContext;\n this._pixelRatio = ratio;\n this._parent = parent;\n Object(__WEBPACK_IMPORTED_MODULE_4__util_utils__[\"a\" /* bindAll */])([\"_resize\"], this);\n\n this._resize(opts);\n\n this._resizeSensor = new __WEBPACK_IMPORTED_MODULE_7_css_element_queries_src_ResizeSensor___default.a(parent, this._resize);\n\n if (forceEvents || forceEvents === null && opts && opts.enableEvents) {\n this._enableEvents();\n }\n }\n }, {\n key: \"_destroyCanvas\",\n value: function _destroyCanvas() {\n if (this._drawCanvas) {\n this._disableEvents();\n }\n\n if (this._parent) {\n this._parent.removeChild(this._drawCanvas);\n\n if (this._resizeSensor) {\n this._resizeSensor.detach(this._parent, this._resize);\n }\n }\n\n this._drawCanvas = null;\n this._drawCtx = null;\n this._parent = null;\n }\n }, {\n key: \"_init\",\n value: function _init(parent, opts) {\n var forceEvents = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n this.registerEvents([EventConstants.SHAPE_ADD, EventConstants.SHAPE_DELETE]);\n Object(__WEBPACK_IMPORTED_MODULE_4__util_utils__[\"a\" /* bindAll */])([\"_reorderCb\", \"_rerenderCb\"], this);\n Object(__WEBPACK_IMPORTED_MODULE_4__util_utils__[\"a\" /* bindAll */])([\"_mousedownCB\", \"_mouseupCB\", \"_mousemoveCB\", \"_clickCB\", \"_dblclickCB\", \"_mouseoverCB\", \"_mouseoutCB\"], this);\n this._renderFrameCb = this.renderAll.bind(this);\n this._renderRequestTime = 0;\n this._ids = {\n shapeId: 1\n };\n this._objects = new Map();\n this._sortedObjs = [];\n this._reorderedObjIdxs = new Set();\n\n this._initCanvas(parent, opts, forceEvents);\n\n this._styleState = new DrawStyleState({\n fillColor: \"red\"\n });\n }\n }, {\n key: \"getContainer\",\n value: function getContainer() {\n return this._parent;\n }\n }, {\n key: \"getCanvasContainer\",\n value: function getCanvasContainer() {\n return this._container;\n }\n }, {\n key: \"getCanvas\",\n value: function getCanvas() {\n return this._drawCanvas;\n }\n }, {\n key: \"project\",\n value: function project(out, screenPt) {\n var screenToWorldMatrix = this._camera.screenToWorldMatrix;\n return __WEBPACK_IMPORTED_MODULE_1__core_point2d__[\"transformMat2d\"](out, screenPt, screenToWorldMatrix);\n }\n }, {\n key: \"unproject\",\n value: function unproject(out, worldPt) {\n var worldToScreenMatrix = this._camera.worldToScreenMatrix;\n return __WEBPACK_IMPORTED_MODULE_1__core_point2d__[\"transformMat2d\"](out, worldPt, worldToScreenMatrix);\n }\n }, {\n key: \"hasShape\",\n value: function hasShape(shape) {\n return this._objects.has(shape);\n }\n }, {\n key: \"addShape\",\n value: function addShape(shape) {\n var shapes = shape;\n\n if (!Array.isArray(shapes)) {\n shapes = [shape];\n }\n\n addShapesToMap(shapes, this._objects, this._ids, this._reorderCb, this._rerenderCb); // fire add event\n\n this.fire(\"shape:add\", {\n shape: shapes\n });\n var proxyEvent = {\n target: shapes\n };\n\n this._reorderCb(proxyEvent);\n\n return this;\n }\n }, {\n key: \"deleteShape\",\n value: function deleteShape(shape) {\n var shapes = shape;\n\n if (!Array.isArray(shapes)) {\n shapes = [shape];\n }\n\n var idxs = deleteShapesFromMap(shapes, this._objects, this._reorderCb, this._rerenderCb);\n var index = -1;\n\n for (var i = 0; i < shapes.length; i += 1) {\n if ((index = this._sortedObjs.indexOf(shapes[i])) >= 0) {\n this._sortedObjs.splice(index, 1);\n }\n\n this._reorderedObjIdxs.add(idxs[i]);\n }\n\n this._rerenderCb();\n\n this.fire(\"shape:delete\", {\n shape: shapes\n });\n return this;\n }\n }, {\n key: \"deleteAllShapes\",\n value: function deleteAllShapes() {\n this.deleteShape(this.sortedShapes.slice());\n return this;\n }\n }, {\n key: \"moveShapeToTop\",\n value: function moveShapeToTop(shape) {\n if (this._objects.has(shape)) {\n var shapes = this.sortedShapes;\n var zindex = shapes[shapes.length - 1].zIndex;\n shape.zIndex = zindex + 1;\n }\n }\n }, {\n key: \"moveShapeToBack\",\n value: function moveShapeToBack(shape) {\n if (this._objects.has(shape)) {\n var shapes = this.sortedShapes;\n var zindex = shapes[0].zIndex;\n shape.zIndex = zindex;\n }\n }\n }, {\n key: \"getShapesAsJSON\",\n value: function getShapesAsJSON() {\n var shapes = this.sortedShapes;\n return shapes.map(function (shape) {\n return shape.toJSON();\n });\n }\n }, {\n key: \"_rerenderCb\",\n value: function _rerenderCb() {\n window.requestAnimationFrame(this._renderFrameCb);\n }\n }, {\n key: \"_reorderCb\",\n value: function _reorderCb(event) {\n var _this6 = this;\n\n var changedShapes = event.target;\n\n if (!Array.isArray(changedShapes)) {\n changedShapes = [event.target];\n }\n\n changedShapes.forEach(function (changedShape) {\n console.assert(changedShape, \"A changed event doesn't have an object\");\n\n var shapeInfo = _this6._objects.get(changedShape);\n\n console.assert(shapeInfo, \"A changed event target isn't in the list of shapes \".concat(changedShape));\n\n if (shapeInfo.shapeIdx < 0) {\n shapeInfo.shapeIdx = _this6._sortedObjs.push(changedShape) - 1;\n }\n\n _this6._reorderedObjIdxs.add(shapeInfo.shapeIdx);\n });\n\n this._rerenderCb();\n }\n }, {\n key: \"_renderShapes\",\n value: function _renderShapes(ctx, drawShapes, camera) {\n var _this7 = this;\n\n var worldToScreenMat = camera.worldToScreenMatrix;\n drawShapes.forEach(function (shape) {\n if (shape.visible) {\n shape.render(ctx, worldToScreenMat, _this7._styleState);\n }\n });\n }\n }, {\n key: \"renderAll\",\n value: function renderAll(timestamp) {\n if (timestamp) {\n if (timestamp <= this._renderRequestTime) {\n return;\n }\n\n this._renderRequestTime = timestamp;\n } else {\n this._renderRequestTime = performance.now();\n }\n\n var ctx = this._drawCtx;\n ctx.clearRect(0, 0, this._drawCanvas.offsetWidth, this._drawCanvas.offsetHeight);\n\n if (!this._objects.size) {\n return;\n }\n\n ctx.save();\n var drawShapes = this.sortedShapes;\n\n this._styleState.applyDefaults(ctx);\n\n this._renderShapes(ctx, drawShapes, this._camera);\n\n ctx.restore();\n }\n }, {\n key: \"sortedShapes\",\n get: function get() {\n if (this._reorderedObjIdxs.size) {\n console.assert(this._sortedObjs.length === this._objects.size, \"Size mismatch when rendering objets. Something got out of sync - sorted objs length: \".concat(this._sortedObjs.length, \", objects length: \").concat(this._objects.size)); // if (this._reorderedObjIdxs.length / this._sortedObjs.length > 0.7) {\n // // might as well just resort the whole thing over\n // this._sortedObjs.sort(shapeInfoCompare)\n // } else {\n // }\n\n this._sortedObjs.sort(__WEBPACK_IMPORTED_MODULE_2__shapes_base_shape__[\"a\" /* default */].shapeCompare);\n\n this._reorderedObjIdxs.clear();\n }\n\n return this._sortedObjs;\n }\n }, {\n key: \"margins\",\n get: function get() {\n var _this8 = this;\n\n var rtn = {};\n marginProps.forEach(function (prop) {\n rtn[prop] = _this8._margins[prop];\n });\n return rtn;\n },\n set: function set(margins) {\n var _this9 = this;\n\n marginProps.forEach(function (prop) {\n if (typeof margins[prop] === \"number\" && margins[prop] !== _this9._margins[prop]) {\n _this9._margins[prop] = margins.prop;\n }\n });\n\n this._resize();\n }\n }, {\n key: \"viewport\",\n get: function get() {\n return this._camera.viewport;\n },\n set: function set(viewport) {\n this._camera.viewport = viewport;\n }\n }, {\n key: \"projectionDimensions\",\n get: function get() {\n return this._camera.projectionDimensions;\n },\n set: function set(projectionDimensions) {\n this._camera.projectionDimensions = projectionDimensions;\n return this;\n }\n }, {\n key: \"cameraPosition\",\n get: function get() {\n return this._camera.getPosition();\n },\n set: function set(pos) {\n this._camera.setPosition(pos);\n\n return this;\n }\n }]);\n\n return DrawEngine;\n}(__WEBPACK_IMPORTED_MODULE_6__util_event_handler__[\"a\" /* default */]);\n\n\nDrawEngine.EventConstants = EventConstants;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9lbmdpbmUvZHJhdy1lbmdpbmUuanM/ZmYwMiJdLCJuYW1lcyI6WyJtb3VzZWV2ZW50cyIsIm1hcmdpblByb3BzIiwiRXZlbnRDb25zdGFudHMiLCJNT1VTRURPV04iLCJNT1VTRVVQIiwiTU9VU0VNT1ZFIiwiQ0xJQ0siLCJEQkxDTElDSyIsIk1PVVNFT1ZFUiIsIk1PVVNFT1VUIiwiU0hBUEVfQUREIiwiU0hBUEVfREVMRVRFIiwiRHJhd1N0eWxlU3RhdGUiLCJhcmdzIiwiX2RlZmF1bHRzIiwicGFja2VkRmlsbENvbG9yIiwicGFja2VkU3Ryb2tlQ29sb3IiLCJzdHJva2VXaWR0aCIsImxpbmVKb2luIiwibGluZUNhcCIsImRhc2hQYXR0ZXJuIiwiZGFzaE9mZnNldCIsImN0eCIsImZpbGxTdHlsZSIsImZpbGxDb2xvciIsInN0cm9rZVN0eWxlIiwic3Ryb2tlQ29sb3IiLCJfc3Ryb2tlV2lkdGgiLCJsaW5lV2lkdGgiLCJfbGluZUpvaW4iLCJfbGluZUNhcCIsIl9kYXNoUGF0dGVybiIsImRpZmYiLCJsZW5ndGgiLCJpIiwic2V0TGluZURhc2giLCJfZGFzaE9mZnNldCIsImxpbmVEYXNoT2Zmc2V0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJwcm9wIiwic2V0RmlsbEN0eCIsInNldFN0cm9rZUN0eCIsIkJhc2ljU3R5bGUiLCJhZGRDbGFzcyIsImVsZW1lbnQiLCJjbGFzc05hbWUiLCJpbmRleE9mIiwiY3JlYXRlQ2FudmFzIiwicGFyZW50IiwiY2FudmFzQ29udGFpbmVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2FudmFzIiwiY2FudmFzQ29udGV4dCIsImdldENvbnRleHQiLCJyYXRpbyIsIkNhbnZhc1V0aWxzIiwic3R5bGUiLCJwb3NpdGlvbiIsInBvaW50ZXJFdmVudHMiLCJhcHBlbmRDaGlsZCIsImFkZFNoYXBlc1RvTWFwIiwibmV3U2hhcGVzIiwiZXhpc3RpbmdPYmplY3RzTWFwIiwiY3VycklkcyIsInJlb3JkZXJDYiIsInJlZHJhd0NiIiwic2hhcGUiLCJzZXQiLCJzaGFwZU9iaiIsInNoYXBlSWQiLCJzaGFwZUlkeCIsIm9uIiwiZGVsZXRlU2hhcGVzRnJvbU1hcCIsInNoYXBlcyIsImlkeHMiLCJzaGFwZUluZm8iLCJnZXQiLCJwdXNoIiwib2ZmIiwiRHJhd0VuZ2luZSIsIm9wdHMiLCJfaW5pdCIsIl9kZXN0cm95Q2FudmFzIiwiX29iamVjdHMiLCJfcmVvcmRlckNiIiwiX3JlZHJhd0NiIiwiY2xlYXIiLCJfc29ydGVkT2JqcyIsIl9yZW9yZGVyZWRPYmpJZHhzIiwid2lkdGgiLCJfcGFyZW50Iiwib2Zmc2V0V2lkdGgiLCJNYXRoIiwibWF4IiwiX21hcmdpbnMiLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJ0b3AiLCJib3R0b20iLCJfZHJhd0NhbnZhcyIsIl9waXhlbFJhdGlvIiwiX2NhbWVyYSIsInByb2pEaW1zIiwicHJvamVjdGlvbkRpbWVuc2lvbnMiLCJDYW1lcmEyZCIsImZsaXBZIiwiQm9vbGVhbiIsInNldFBvc2l0aW9uIiwiY2FtZXJhUG9zaXRpb24iLCJfcmVyZW5kZXJDYiIsImV2ZW50IiwidGFyZ2V0IiwiZmlyZSIsIm9yaWdpbmFsRXZlbnQiLCJyZWdpc3RlckV2ZW50cyIsImNhbGxiYWNrcyIsIm1hcCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZm9yY2VFdmVudHMiLCJtYXJnaW5zIiwiYXNzaWduIiwiX2NvbnRhaW5lciIsIl9kcmF3Q3R4IiwiYmluZEFsbCIsIl9yZXNpemUiLCJfcmVzaXplU2Vuc29yIiwiUmVzaXplU2Vuc29yIiwiZW5hYmxlRXZlbnRzIiwiX2VuYWJsZUV2ZW50cyIsIl9kaXNhYmxlRXZlbnRzIiwicmVtb3ZlQ2hpbGQiLCJkZXRhY2giLCJfcmVuZGVyRnJhbWVDYiIsInJlbmRlckFsbCIsImJpbmQiLCJfcmVuZGVyUmVxdWVzdFRpbWUiLCJfaWRzIiwiTWFwIiwiU2V0IiwiX2luaXRDYW52YXMiLCJfc3R5bGVTdGF0ZSIsIm91dCIsInNjcmVlblB0Iiwic2NyZWVuVG9Xb3JsZE1hdHJpeCIsIlBvaW50MmQiLCJ3b3JsZFB0Iiwid29ybGRUb1NjcmVlbk1hdHJpeCIsImhhcyIsIkFycmF5IiwiaXNBcnJheSIsInByb3h5RXZlbnQiLCJpbmRleCIsInNwbGljZSIsImFkZCIsImRlbGV0ZVNoYXBlIiwic29ydGVkU2hhcGVzIiwic2xpY2UiLCJ6aW5kZXgiLCJ6SW5kZXgiLCJ0b0pTT04iLCJ3aW5kb3ciLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjaGFuZ2VkU2hhcGVzIiwiY2hhbmdlZFNoYXBlIiwiY29uc29sZSIsImFzc2VydCIsImRyYXdTaGFwZXMiLCJjYW1lcmEiLCJ3b3JsZFRvU2NyZWVuTWF0IiwidmlzaWJsZSIsInJlbmRlciIsInRpbWVzdGFtcCIsInBlcmZvcm1hbmNlIiwibm93IiwiY2xlYXJSZWN0Iiwic2l6ZSIsInNhdmUiLCJhcHBseURlZmF1bHRzIiwiX3JlbmRlclNoYXBlcyIsInJlc3RvcmUiLCJzb3J0IiwiQmFzZVNoYXBlIiwic2hhcGVDb21wYXJlIiwicnRuIiwidmlld3BvcnQiLCJnZXRQb3NpdGlvbiIsInBvcyIsIkV2ZW50SGFuZGVyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQU1BLFdBQVcsR0FBRyxDQUNsQixXQURrQixFQUVsQixTQUZrQixFQUdsQixXQUhrQixFQUlsQixPQUprQixFQUtsQixVQUxrQixFQU1sQixXQU5rQixFQU9sQixVQVBrQixDQUFwQjtBQVNBLElBQU1DLFdBQVcsR0FBRyxDQUFDLEtBQUQsRUFBUSxRQUFSLEVBQWtCLE1BQWxCLEVBQTBCLE9BQTFCLENBQXBCO0FBRU8sSUFBTUMsY0FB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QUFDN0MsV0FBS0YsT0FBTCxDQUFhRSxvQkFBYixHQUFvQ0Esb0JBQXBDO0FBQ0EsYUFBTyxJQUFQO0FBQ0Q7Ozt3QkFFb0I7QUFDbkIsYUFBTyxLQUFLRixPQUFMLENBQWFxRixXQUFiLEVBQVA7QUFDRCxLO3NCQUVrQkMsRyxFQUFLO0FBQ3RCLFdBQUt0RixPQUFMLENBQWFNLFdBQWIsQ0FBeUJnRixHQUF6Qjs7QUFDQSxhQUFPLElBQVA7QUFDRDs7OztFQXZVcUNDLG9FOzs7QUF1ZXhDL0csVUFBVSxDQUFDaEYsY0FBWCxHQUE0QkEsY0FBNUIiLCJmaWxlIjoiMjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIlxuXG5pbXBvcnQgKiBhcyBDYW52YXNVdGlscyBmcm9tIFwiLi4vdXRpbC9jYW52YXMtdXRpbHNcIlxuaW1wb3J0ICogYXMgUG9pbnQyZCBmcm9tIFwiLi4vY29yZS9wb2ludDJkXCJcbmltcG9ydCBCYXNlU2hhcGUgZnJvbSBcIi4uL3NoYXBlcy9iYXNlLXNoYXBlXCJcbmltcG9ydCBCYXNpY1N0eWxlIGZyb20gXCIuLi9zdHlsZS9iYXNpYy1zdHlsZVwiXG5pbXBvcnQgeyBiaW5kQWxsIH0gZnJvbSBcIi4uL3V0aWwvdXRpbHNcIlxuaW1wb3J0IENhbWVyYTJkIGZyb20gXCIuLi92aWV3L2NhbWVyYTJkXCJcbmltcG9ydCBFdmVudEhhbmRlciBmcm9tIFwiLi4vdXRpbC9ldmVudC1oYW5kbGVyXCJcbmltcG9ydCBSZXNpemVTZW5zb3IgZnJvbSBcImNzcy1lbGVtZW50LXF1ZXJpZXMvc3JjL1Jlc2l6ZVNlbnNvclwiXG5cbmNvbnN0IG1vdXNlZXZlbnRzID0gW1xuICBcIm1vdXNlZG93blwiLFxuICBcIm1vdXNldXBcIixcbiAgXCJtb3VzZW1vdmVcIixcbiAgXCJjbGlja1wiLFxuICBcImRibGNsaWNrXCIsXG4gIFwibW91c2VvdmVyXCIsXG4gIFwibW91c2VvdXRcIlxuXVxuY29uc3QgbWFyZ2luUHJvcHMgPSBbXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl1cblxuZXhwb3J0IGNvbnN0IEV2ZW50Q29uc3RhbnRzID0ge1xuICBNT1VTRURPV046IFwibW91c2Vkb3duXCIsXG4gIE1PVVNFVVA6IFwibW91c2V1cFwiLFxuICBNT1VTRU1PVkU6IFwibW91c2Vtb3ZlXCIsXG4gIENMSUNLOiBcImNsaWNrXCIsXG4gIERCTENMSUNLOiBcImRibGNsaWNrXCIsXG4gIE1PVVNFT1ZFUjogXCJtb3VzZW92ZXJcIixcbiAgTU9VU0VPVVQ6IFwibW91c2VvdXRcIixcbiAgU0hBUEVfQUREOiBcInNoYXBlOmFkZFwiLFxuICBTSEFQRV9ERUxFVEU6IFwic2hhcGU6ZGVsZXRlXCJcbn1cblxuY2xhc3MgRHJhd1N0eWxlU3RhdGUgZXh0ZW5kcyBCYXNpY1N0eWxlIHtcbiAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgIHN1cGVyKC4uLmFyZ3MpXG4gICAgdGhpcy5fZGVmYXVsdHMgPSB7XG4gICAgICBwYWNrZWRGaWxsQ29sb3I6IHRoaXMucGFja2VkRmlsbENvbG9yLFxuICAgICAgcGFja2VkU3Ryb2tlQ29sb3I6IHRoaXMucGFja2VkU3Ryb2tlQ29sb3IsXG4gICAgICBzdHJva2VXaWR0aDogdGhpcy5zdHJva2VXaWR0aCxcbiAgICAgIGxpbmVKb2luOiB0aGlzLmxpbmVKb2luLFxuICAgICAgbGluZUNhcDogdGhpcy5saW5lQ2FwLFxuICAgICAgZGFzaFBhdHRlcm46IHRoaXMuZGFzaFBhdHRlcm4sXG4gICAgICBkYXNoT2Zmc2V0OiB0aGlzLmRhc2hPZmZzZXRcbiAgICB9XG4gIH1cblxuICBzZXRGaWxsU3R5bGUoY3R4LCBmaWxsU3R5bGUpIHtcbiAgICBpZiAoZmlsbFN0eWxlLnBhY2tlZEZpbGxDb2xvciAhPT0gdGhpcy5wYWNrZWRGaWxsQ29sb3IpIHtcbiAgICAgIHRoaXMucGFja2VkRmlsbENvbG9yID0gZmlsbFN0eWxlLnBhY2tlZEZpbGxDb2xvclxuICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuZmlsbENvbG9yXG4gICAgfVxuICB9XG5cbiAgc2V0U3Ryb2tlU3R5bGUoY3R4LCBzdHJva2VTdHlsZSkge1xuICAgIGlmIChzdHJva2VTdHlsZS5wYWNrZWRTdHJva2VDb2xvciAhPT0gdGhpcy5wYWNrZWRTdHJva2VDb2xvcikge1xuICAgICAgdGhpcy5wYWNrZWRTdHJva2VDb2xvciA9IHN0cm9rZVN0eWxlLnBhY2tlZFN0cm9rZUNvbG9yXG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLnN0cm9rZUNvbG9yXG4gICAgfVxuICAgIGlmIChzdHJva2VTdHlsZS5zdHJva2VXaWR0aCAhPT0gdGhpcy5fc3Ryb2tlV2lkdGgpIHtcbiAgICAgIHRoaXMuc3Ryb2tlV2lkdGggPSBzdHJva2VTdHlsZS5zdHJva2VXaWR0aFxuICAgICAgY3R4LmxpbmVXaWR0aCA9IHRoaXMuX3N0cm9rZVdpZHRoXG4gICAgfVxuICAgIGlmIChzdHJva2VTdHlsZS5saW5lSm9pbiAhPT0gdGhpcy5fbGluZUpvaW4pIHtcbiAgICAgIHRoaXMubGluZUpvaW4gPSBzdHJva2VTdHlsZS5saW5lSm9pblxuICAgICAgY3R4LmxpbmVKb2luID0gdGhpcy5fbGluZUpvaW5cbiAgICB9XG4gICAgaWYgKHN0cm9rZVN0eWxlLmxpbmVDYXAgIT09IHRoaXMuX2xpbmVDYXApIHtcbiAgICAgIHRoaXMubGluZUNhcCA9IHN0cm9rZVN0eWxlLmxpbmVDYXBcbiAgICAgIGN0eC5saW5lQ2FwID0gdGhpcy5fbGluZUNhcFxuICAgIH1cblxuICAgIGNvbnN0IGRhc2hQYXR0ZXJuID0gc3Ryb2tlU3R5bGUuX2Rhc2hQYXR0ZXJuXG4gICAgbGV0IGRpZmYgPSBmYWxzZVxuICAgIGlmIChkYXNoUGF0dGVybi5sZW5ndGggPT09IHRoaXMuX2Rhc2hQYXR0ZXJuLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXNoUGF0dGVybi5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoZGFzaFBhdHRlcm5baV0gIT09IHRoaXMuX2Rhc2hQYXR0ZXJuW2ldKSB7XG4gICAgICAgICAgZGlmZiA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZmYgPSB0cnVlXG4gICAgfVxuXG4gICAgaWYgKGRpZmYpIHtcbiAgICAgIHRoaXMuZGFzaFBhdHRlcm4gPSBkYXNoUGF0dGVyblxuICAgICAgY3R4LnNldExpbmVEYXNoKHRoaXMuX2Rhc2hQYXR0ZXJuKVxuICAgIH1cblxuICAgIGlmIChzdHJva2VTdHlsZS5kYXNoT2Zmc2V0ICE9PSB0aGlzLl9kYXNoT2Zmc2V0KSB7XG4gICAgICB0aGlzLmRhc2hPZmZzZXQgPSBzdHJva2VTdHlsZS5kYXNoT2Zmc2V0XG4gICAgICBjdHgubGluZURhc2hPZmZzZXQgPSB0aGlzLl9kYXNoT2Zmc2V0XG4gICAgfVxuICB9XG5cbiAgYXBwbHlEZWZhdWx0cyhjdHgpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9kZWZhdWx0cykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIHRoaXNbcHJvcF0gPSB0aGlzLl9kZWZhdWx0c1twcm9wXVxuICAgIH0pXG4gICAgdGhpcy5zZXRGaWxsQ3R4KGN0eClcbiAgICB0aGlzLnNldFN0cm9rZUN0eChjdHgpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50ICYmIGAgJHtlbGVtZW50LmNsYXNzTmFtZX0gYC5pbmRleE9mKGAgJHtjbGFzc05hbWV9IGApIDwgMCkge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lICs9IChlbGVtZW50LmNsYXNzTmFtZSA/IFwiIFwiIDogXCJcIikgKyBjbGFzc05hbWVcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDYW52YXMocGFyZW50KSB7XG4gIGNvbnN0IGNhbnZhc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgYWRkQ2xhc3MoY2FudmFzQ29udGFpbmVyLCBcIm1hcGQtZHJhdy1jYW52YXMtY29udGFpbmVyXCIpXG5cbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKVxuICBjb25zdCBjYW52YXNDb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKVxuICBjb25zdCByYXRpbyA9IENhbnZhc1V0aWxzLm1ha2VDYW52YXNBdXRvSGlnaERQSShjYW52YXNDb250ZXh0KVxuICAvLyBjb25zdCByYXRpbyA9IDFcblxuICAvLyBhZGQgY2xhc3M/XG4gIGFkZENsYXNzKGNhbnZhcywgXCJtYXBkLWRyYXctY2FudmFzXCIpXG4gIGNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIlxuICBjYW52YXMuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiXG5cbiAgY2FudmFzQ29udGFpbmVyLmFwcGVuZENoaWxkKGNhbnZhcylcblxuICAvLyBjYW52YXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgcmF0aW8gKiBwYXJlbnQub2Zmc2V0WClcbiAgLy8gY2FudmFzLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCByYXRpbyAqIHBhcmVudC5vZmZzZXRZKVxuICAvLyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNhbnZhcywgcGFyZW50LmZpcnN0Q2hpbGQpXG4gIHBhcmVudC5hcHBlbmRDaGlsZChjYW52YXNDb250YWluZXIpXG5cbiAgcmV0dXJuIHtcbiAgICBjYW52YXNDb250YWluZXIsXG4gICAgY2FudmFzLFxuICAgIGNhbnZhc0NvbnRleHQsXG4gICAgcmF0aW9cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTaGFwZXNUb01hcChcbiAgbmV3U2hhcGVzLFxuICBleGlzdGluZ09iamVjdHNNYXAsXG4gIGN1cnJJZHMsXG4gIHJlb3JkZXJDYixcbiAgcmVkcmF3Q2Jcbikge1xuICBuZXdTaGFwZXMuZm9yRWFjaChzaGFwZSA9PiB7XG4gICAgZXhpc3RpbmdPYmplY3RzTWFwLnNldChzaGFwZSwge1xuICAgICAgc2hhcGVPYmo6IHNoYXBlLFxuICAgICAgc2hhcGVJZDogY3Vycklkcy5zaGFwZUlkLFxuICAgICAgc2hhcGVJZHg6IC0xXG4gICAgfSlcbiAgICBzaGFwZS5vbihcbiAgICAgIFtcImNoYW5nZWQ6b3JkZXJcIiwgXCJjaGFuZ2VkOnZpc2liaWxpdHlcIiwgXCJjaGFuZ2VkOnN0eWxlXCJdLFxuICAgICAgcmVvcmRlckNiXG4gICAgKVxuICAgIHNoYXBlLm9uKFtcImNoYW5nZWQ6Z2VvbVwiLCBcImNoYW5nZWQ6dmlzaWJpbGl0eVwiLCBcImNoYW5nZWQ6eGZvcm1cIl0sIHJlZHJhd0NiKVxuICAgIGN1cnJJZHMuc2hhcGVJZCArPSAxXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGRlbGV0ZVNoYXBlc0Zyb21NYXAoc2hhcGVzLCBleGlzdGluZ09iamVjdHNNYXAsIHJlb3JkZXJDYiwgcmVkcmF3Q2IpIHtcbiAgY29uc3QgaWR4cyA9IFtdXG4gIHNoYXBlcy5mb3JFYWNoKHNoYXBlID0+IHtcbiAgICBjb25zdCBzaGFwZUluZm8gPSBleGlzdGluZ09iamVjdHNNYXAuZ2V0KHNoYXBlKVxuICAgIGlmIChzaGFwZUluZm8pIHtcbiAgICAgIGlkeHMucHVzaChzaGFwZUluZm8uc2hhcGVJZHgpXG4gICAgfVxuICAgIGV4aXN0aW5nT2JqZWN0c01hcC5kZWxldGUoc2hhcGUpXG4gICAgc2hhcGUub2ZmKFtcImNoYW5nZWRcIl0sIFtyZW9yZGVyQ2IsIHJlZHJhd0NiXSlcbiAgfSlcbiAgcmV0dXJuIGlkeHNcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJhd0VuZ2luZSBleHRlbmRzIEV2ZW50SGFuZGVyIHtcbiAgY29uc3RydWN0b3IocGFyZW50LCBvcHRzKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX2luaXQocGFyZW50LCBvcHRzKVxuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95Q2FudmFzKClcblxuICAgIGlmICh0aGlzLl9vYmplY3RzKSB7XG4gICAgICB0aGlzLl9vYmplY3RzLmZvckVhY2goKHNoYXBlSW5mbywgc2hhcGUpID0+IHtcbiAgICAgICAgc2hhcGUub2ZmKFwiY2hhbmdlZFwiLCBbdGhpcy5fcmVvcmRlckNiLCB0aGlzLl9yZWRyYXdDYl0pXG4gICAgICB9KVxuICAgICAgdGhpcy5fb2JqZWN0cy5jbGVhcigpXG4gICAgICB0aGlzLl9zb3J0ZWRPYmpzID0gW11cbiAgICAgIHRoaXMuX3Jlb3JkZXJlZE9iaklkeHMuY2xlYXIoKVxuICAgIH1cbiAgfVxuXG4gIF9yZXNpemUob3B0cykge1xuICAgIGxldCB3aWR0aCA9IDBcbiAgICBpZiAodGhpcy5fcGFyZW50Lm9mZnNldFdpZHRoKSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWF4KFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgdGhpcy5fcGFyZW50Lm9mZnNldFdpZHRoIC0gdGhpcy5fbWFyZ2lucy5sZWZ0IC0gdGhpcy5fbWFyZ2lucy5yaWdodFxuICAgICAgKVxuICAgIH1cblxuICAgIGxldCBoZWlnaHQgPSAwXG4gICAgaWYgKHRoaXMuX3BhcmVudC5vZmZzZXRIZWlnaHQpIHtcbiAgICAgIGhlaWdodCA9IE1hdGgubWF4KFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHRoaXMuX3BhcmVudC5vZmZzZXRIZWlnaHQgLSB0aGlzLl9tYXJnaW5zLnRvcCAtIHRoaXMuX21hcmdpbnMuYm90dG9tXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5fZHJhd0NhbnZhcy53aWR0aCA9IHdpZHRoICogdGhpcy5fcGl4ZWxSYXRpb1xuICAgIHRoaXMuX2RyYXdDYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5fcGl4ZWxSYXRpb1xuXG4gICAgdGhpcy5fZHJhd0NhbnZhcy5zdHlsZS5sZWZ0ID0gYCR7dGhpcy5fbWFyZ2lucy5sZWZ0fXB4YFxuICAgIHRoaXMuX2RyYXdDYW52YXMuc3R5bGUudG9wID0gYCR7dGhpcy5fbWFyZ2lucy50b3B9cHhgXG4gICAgdGhpcy5fZHJhd0NhbnZhcy5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YFxuICAgIHRoaXMuX2RyYXdDYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YFxuXG4gICAgaWYgKHRoaXMuX2NhbWVyYSkge1xuICAgICAgLy8gY29uc3QgY3VyclZpZXdwb3J0ID0gdGhpcy5fY2FtZXJhLnZpZXdwb3J0XG4gICAgICAvLyBjb25zdCBjdXJyU3BhY2UgPSB0aGlzLl9jYW1lcmEucHJvamVjdGlvbkJvdW5kc1xuICAgICAgLy8gY29uc3Qgdmlld3BvcnRFeHRlbnRzID0gWzAsIDBdXG4gICAgICAvLyBBQUJveDJkLmdldEV4dGVudHModmlld3BvcnRFeHRlbnRzLCBjdXJyVmlld3BvcnQpXG4gICAgICAvLyBjb25zdCBzcGFjZUNlbnRlciA9IFswLCAwXVxuICAgICAgLy8gY29uc3Qgc3BhY2VFeHRlbnRzID0gWzAsIDBdXG4gICAgICAvLyBBQUJveDJkLmdldENlbnRlcihzcGFjZUNlbnRlciwgY3VyclNwYWNlKVxuICAgICAgLy8gQUFCb3gyZC5nZXRFeHRlbnRzKHNwYWNlRXh0ZW50cywgY3VyclNwYWNlKVxuICAgICAgLy8gY29uc3QgcmF0aW8gPSBzcGFjZUV4dGVudHNcbiAgICAgIC8vIFZlYzJkLmRpdihyYXRpbywgc3BhY2VFeHRlbnRzLCB2aWV3cG9ydEV4dGVudHMpXG4gICAgICAvLyBBQUJveDJkLnNldChjdXJyVmlld3BvcnQsIDAsIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgICAvLyBBQUJveDJkLmdldEV4dGVudHModmlld3BvcnRFeHRlbnRzLCBjdXJyVmlld3BvcnQpXG4gICAgICAvLyBWZWMyZC5tdWx0aXBseShzcGFjZUV4dGVudHMsIHJhdGlvLCB2aWV3cG9ydEV4dGVudHMpXG4gICAgICAvLyBBQUJveDJkLmluaXRDZW50ZXJFeHRlbnRzKGN1cnJTcGFjZSwgc3BhY2VDZW50ZXIsIHNwYWNlRXh0ZW50cylcbiAgICAgIC8vIHRoaXMuX2NhbWVyYS52aWV3cG9ydCA9IGN1cnJWaWV3cG9ydFxuICAgICAgLy8gdGhpcy5fY2FtZXJhLnByb2plY3Rpb25Cb3VuZHMgPSBjdXJyU3BhY2VcbiAgICAgIC8vICAgLy8gdGhpcy5fY2FtZXJhLnZpZXdwb3J0ID0gWzAsIDAsIHdpZHRoLCBoZWlnaHRdXG4gICAgICAvLyAgIC8vIHRoaXMuX2NhbWVyYS5wcm9qZWN0aW9uQm91bmRzID0gWzAsIDAsIHdpZHRoLCBoZWlnaHRdXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHByb2pEaW1zID1cbiAgICAgICAgb3B0cyAmJiBvcHRzLnByb2plY3Rpb25EaW1lbnNpb25zXG4gICAgICAgICAgPyBvcHRzLnByb2plY3Rpb25EaW1lbnNpb25zXG4gICAgICAgICAgOiBbd2lkdGgsIGhlaWdodF1cbiAgICAgIHRoaXMuX2NhbWVyYSA9IG5ldyBDYW1lcmEyZChcbiAgICAgICAgWzAsIDAsIHdpZHRoLCBoZWlnaHRdLFxuICAgICAgICBwcm9qRGltcyxcbiAgICAgICAgb3B0cy5mbGlwWSA/IEJvb2xlYW4ob3B0cy5mbGlwWSkgOiBmYWxzZVxuICAgICAgKVxuICAgICAgdGhpcy5fY2FtZXJhLnNldFBvc2l0aW9uKFxuICAgICAgICBvcHRzICYmIG9wdHMuY2FtZXJhUG9zaXRpb25cbiAgICAgICAgICA/IG9wdHMuY2FtZXJhUG9zaXRpb25cbiAgICAgICAgICA6IFt3aWR0aCAvIDIuMCwgaGVpZ2h0IC8gMi4wXVxuICAgICAgKVxuICAgICAgdGhpcy5fY2FtZXJhLm9uKFwiY2hhbmdlZFwiLCB0aGlzLl9yZXJlbmRlckNiKVxuICAgIH1cbiAgICAvLyB0aGlzLl9jYW1lcmEgPSBuZXcgQ2FtZXJhMmQoWzAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0XSwgWzAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0XSlcbiAgICAvLyB0aGlzLl9jYW1lcmEub24oXCJjaGFuZ2VkXCIsIHRoaXMuX3JlcmVuZGVyQ2IpXG5cbiAgICB0aGlzLl9yZXJlbmRlckNiKClcbiAgfVxuXG4gIF9tb3VzZWRvd25DQihldmVudCkge1xuICAgIGlmIChldmVudC50YXJnZXQgIT09IHRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5maXJlKFwibW91c2Vkb3duXCIsIHtcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgfSlcbiAgfVxuXG4gIF9tb3VzZXVwQ0IoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSB0aGlzLl9wYXJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmlyZShcIm1vdXNldXBcIiwge1xuICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICB9KVxuICB9XG5cbiAgX21vdXNlbW92ZUNCKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gdGhpcy5fcGFyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmZpcmUoXCJtb3VzZW1vdmVcIiwge1xuICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICB9KVxuICB9XG5cbiAgX2NsaWNrQ0IoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSB0aGlzLl9wYXJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmlyZShcImNsaWNrXCIsIHtcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgfSlcbiAgfVxuXG4gIF9kYmxjbGlja0NCKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gdGhpcy5fcGFyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmZpcmUoXCJkYmxjbGlja1wiLCB7XG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgIH0pXG4gIH1cblxuICBfbW91c2VvdmVyQ0IoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSB0aGlzLl9wYXJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmlyZShcIm1vdXNlb3ZlclwiLCB7XG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgIH0pXG4gIH1cblxuICBfbW91c2VvdXRDQihldmVudCkge1xuICAgIGlmIChldmVudC50YXJnZXQgIT09IHRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5maXJlKFwibW91c2VvdXRcIiwge1xuICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICB9KVxuICB9XG5cbiAgX2VuYWJsZUV2ZW50cygpIHtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnRzKG1vdXNlZXZlbnRzKVxuICAgIGNvbnN0IGNhbGxiYWNrcyA9IG1vdXNlZXZlbnRzLm1hcChldmVudCA9PiBgXyR7ZXZlbnR9Q0JgKVxuICAgIC8vIGJpbmRBbGwoY2FsbGJhY2tzLCB0aGlzKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW91c2VldmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIobW91c2VldmVudHNbaV0sIHRoaXNbY2FsbGJhY2tzW2ldXSwgdHJ1ZSlcbiAgICB9XG4gIH1cblxuICBfZGlzYWJsZUV2ZW50cygpIHtcbiAgICBjb25zdCBjYWxsYmFja3MgPSBtb3VzZWV2ZW50cy5tYXAoZXZlbnQgPT4gYF8ke2V2ZW50fUNCYClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vdXNlZXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG1vdXNlZXZlbnRzW2ldLCB0aGlzW2NhbGxiYWNrc1tpXV0sIHRydWUpXG4gICAgfVxuICB9XG5cbiAgX2luaXRDYW52YXMocGFyZW50LCBvcHRzLCBmb3JjZUV2ZW50cyA9IG51bGwpIHtcbiAgICB0aGlzLl9tYXJnaW5zID0gb3B0cyAmJiBvcHRzLm1hcmdpbnMgPyBPYmplY3QuYXNzaWduKHt9LCBvcHRzLm1hcmdpbnMpIDoge31cbiAgICBtYXJnaW5Qcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9tYXJnaW5zW3Byb3BdICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHRoaXMuX21hcmdpbnNbcHJvcF0gPSAwXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IHsgY2FudmFzQ29udGFpbmVyLCBjYW52YXMsIGNhbnZhc0NvbnRleHQsIHJhdGlvIH0gPSBjcmVhdGVDYW52YXMoXG4gICAgICBwYXJlbnRcbiAgICApXG5cbiAgICB0aGlzLl9jb250YWluZXIgPSBjYW52YXNDb250YWluZXJcbiAgICB0aGlzLl9kcmF3Q2FudmFzID0gY2FudmFzXG4gICAgdGhpcy5fZHJhd0N0eCA9IGNhbnZhc0NvbnRleHRcbiAgICB0aGlzLl9waXhlbFJhdGlvID0gcmF0aW9cbiAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnRcblxuICAgIGJpbmRBbGwoW1wiX3Jlc2l6ZVwiXSwgdGhpcylcbiAgICB0aGlzLl9yZXNpemUob3B0cylcbiAgICB0aGlzLl9yZXNpemVTZW5zb3IgPSBuZXcgUmVzaXplU2Vuc29yKHBhcmVudCwgdGhpcy5fcmVzaXplKVxuXG4gICAgaWYgKGZvcmNlRXZlbnRzIHx8IChmb3JjZUV2ZW50cyA9PT0gbnVsbCAmJiBvcHRzICYmIG9wdHMuZW5hYmxlRXZlbnRzKSkge1xuICAgICAgdGhpcy5fZW5hYmxlRXZlbnRzKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveUNhbnZhcygpIHtcbiAgICBpZiAodGhpcy5fZHJhd0NhbnZhcykge1xuICAgICAgdGhpcy5fZGlzYWJsZUV2ZW50cygpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BhcmVudCkge1xuICAgICAgdGhpcy5fcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX2RyYXdDYW52YXMpXG5cbiAgICAgIGlmICh0aGlzLl9yZXNpemVTZW5zb3IpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplU2Vuc29yLmRldGFjaCh0aGlzLl9wYXJlbnQsIHRoaXMuX3Jlc2l6ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9kcmF3Q2FudmFzID0gbnVsbFxuICAgIHRoaXMuX2RyYXdDdHggPSBudWxsXG4gICAgdGhpcy5fcGFyZW50ID0gbnVsbFxuICB9XG5cbiAgX2luaXQocGFyZW50LCBvcHRzLCBmb3JjZUV2ZW50cyA9IG51bGwpIHtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnRzKFtFdmVudENvbnN0YW50cy5TSEFQRV9BREQsIEV2ZW50Q29uc3RhbnRzLlNIQVBFX0RFTEVURV0pXG5cbiAgICBiaW5kQWxsKFtcIl9yZW9yZGVyQ2JcIiwgXCJfcmVyZW5kZXJDYlwiXSwgdGhpcylcbiAgICBiaW5kQWxsKFxuICAgICAgW1xuICAgICAgICBcIl9tb3VzZWRvd25DQlwiLFxuICAgICAgICBcIl9tb3VzZXVwQ0JcIixcbiAgICAgICAgXCJfbW91c2Vtb3ZlQ0JcIixcbiAgICAgICAgXCJfY2xpY2tDQlwiLFxuICAgICAgICBcIl9kYmxjbGlja0NCXCIsXG4gICAgICAgIFwiX21vdXNlb3ZlckNCXCIsXG4gICAgICAgIFwiX21vdXNlb3V0Q0JcIlxuICAgICAgXSxcbiAgICAgIHRoaXNcbiAgICApXG5cbiAgICB0aGlzLl9yZW5kZXJGcmFtZUNiID0gdGhpcy5yZW5kZXJBbGwuYmluZCh0aGlzKVxuICAgIHRoaXMuX3JlbmRlclJlcXVlc3RUaW1lID0gMFxuICAgIHRoaXMuX2lkcyA9IHtcbiAgICAgIHNoYXBlSWQ6IDFcbiAgICB9XG5cbiAgICB0aGlzLl9vYmplY3RzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fc29ydGVkT2JqcyA9IFtdXG4gICAgdGhpcy5fcmVvcmRlcmVkT2JqSWR4cyA9IG5ldyBTZXQoKVxuXG4gICAgdGhpcy5faW5pdENhbnZhcyhwYXJlbnQsIG9wdHMsIGZvcmNlRXZlbnRzKVxuXG4gICAgdGhpcy5fc3R5bGVTdGF0ZSA9IG5ldyBEcmF3U3R5bGVTdGF0ZSh7XG4gICAgICBmaWxsQ29sb3I6IFwicmVkXCJcbiAgICB9KVxuICB9XG5cbiAgZ2V0Q29udGFpbmVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRcbiAgfVxuXG4gIGdldENhbnZhc0NvbnRhaW5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyXG4gIH1cblxuICBnZXRDYW52YXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdDYW52YXNcbiAgfVxuXG4gIGdldCBzb3J0ZWRTaGFwZXMoKSB7XG4gICAgaWYgKHRoaXMuX3Jlb3JkZXJlZE9iaklkeHMuc2l6ZSkge1xuICAgICAgY29uc29sZS5hc3NlcnQoXG4gICAgICAgIHRoaXMuX3NvcnRlZE9ianMubGVuZ3RoID09PSB0aGlzLl9vYmplY3RzLnNpemUsXG4gICAgICAgIGBTaXplIG1pc21hdGNoIHdoZW4gcmVuZGVyaW5nIG9iamV0cy4gU29tZXRoaW5nIGdvdCBvdXQgb2Ygc3luYyAtIHNvcnRlZCBvYmpzIGxlbmd0aDogJHt0aGlzLl9zb3J0ZWRPYmpzLmxlbmd0aH0sIG9iamVjdHMgbGVuZ3RoOiAke3RoaXMuX29iamVjdHMuc2l6ZX1gXG4gICAgICApXG5cbiAgICAgIC8vIGlmICh0aGlzLl9yZW9yZGVyZWRPYmpJZHhzLmxlbmd0aCAvIHRoaXMuX3NvcnRlZE9ianMubGVuZ3RoID4gMC43KSB7XG4gICAgICAvLyAgIC8vIG1pZ2h0IGFzIHdlbGwganVzdCByZXNvcnQgdGhlIHdob2xlIHRoaW5nIG92ZXJcbiAgICAgIC8vICAgdGhpcy5fc29ydGVkT2Jqcy5zb3J0KHNoYXBlSW5mb0NvbXBhcmUpXG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gfVxuXG4gICAgICB0aGlzLl9zb3J0ZWRPYmpzLnNvcnQoQmFzZVNoYXBlLnNoYXBlQ29tcGFyZSlcbiAgICAgIHRoaXMuX3Jlb3JkZXJlZE9iaklkeHMuY2xlYXIoKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc29ydGVkT2Jqc1xuICB9XG5cbiAgZ2V0IG1hcmdpbnMoKSB7XG4gICAgY29uc3QgcnRuID0ge31cbiAgICBtYXJnaW5Qcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgcnRuW3Byb3BdID0gdGhpcy5fbWFyZ2luc1twcm9wXVxuICAgIH0pXG4gICAgcmV0dXJuIHJ0blxuICB9XG5cbiAgc2V0IG1hcmdpbnMobWFyZ2lucykge1xuICAgIG1hcmdpblByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBtYXJnaW5zW3Byb3BdID09PSBcIm51bWJlclwiICYmXG4gICAgICAgIG1hcmdpbnNbcHJvcF0gIT09IHRoaXMuX21hcmdpbnNbcHJvcF1cbiAgICAgICkge1xuICAgICAgICB0aGlzLl9tYXJnaW5zW3Byb3BdID0gbWFyZ2lucy5wcm9wXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuX3Jlc2l6ZSgpXG4gIH1cblxuICBnZXQgdmlld3BvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbWVyYS52aWV3cG9ydFxuICB9XG5cbiAgc2V0IHZpZXdwb3J0KHZpZXdwb3J0KSB7XG4gICAgdGhpcy5fY2FtZXJhLnZpZXdwb3J0ID0gdmlld3BvcnRcbiAgfVxuXG4gIGdldCBwcm9qZWN0aW9uRGltZW5zaW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FtZXJhLnByb2plY3Rpb25EaW1lbnNpb25zXG4gIH1cblxuICBzZXQgcHJvamVjdGlvbkRpbWVuc2lvbnMocHJvamVjdGlvbkRpbWVuc2lvbnMpIHtcbiAgICB0aGlzLl9jYW1lcmEucHJvamVjdGlvbkRpbWVuc2lvbnMgPSBwcm9qZWN0aW9uRGltZW5zaW9uc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBnZXQgY2FtZXJhUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbWVyYS5nZXRQb3NpdGlvbigpXG4gIH1cblxuICBzZXQgY2FtZXJhUG9zaXRpb24ocG9zKSB7XG4gICAgdGhpcy5fY2FtZXJhLnNldFBvc2l0aW9uKHBvcylcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcHJvamVjdChvdXQsIHNjcmVlblB0KSB7XG4gICAgY29uc3Qgc2NyZWVuVG9Xb3JsZE1hdHJpeCA9IHRoaXMuX2NhbWVyYS5zY3JlZW5Ub1dvcmxkTWF0cml4XG4gICAgcmV0dXJuIFBvaW50MmQudHJhbnNmb3JtTWF0MmQob3V0LCBzY3JlZW5QdCwgc2NyZWVuVG9Xb3JsZE1hdHJpeClcbiAgfVxuXG4gIHVucHJvamVjdChvdXQsIHdvcmxkUHQpIHtcbiAgICBjb25zdCB3b3JsZFRvU2NyZWVuTWF0cml4ID0gdGhpcy5fY2FtZXJhLndvcmxkVG9TY3JlZW5NYXRyaXhcbiAgICByZXR1cm4gUG9pbnQyZC50cmFuc2Zvcm1NYXQyZChvdXQsIHdvcmxkUHQsIHdvcmxkVG9TY3JlZW5NYXRyaXgpXG4gIH1cblxuICBoYXNTaGFwZShzaGFwZSkge1xuICAgIHJldHVybiB0aGlzLl9vYmplY3RzLmhhcyhzaGFwZSlcbiAgfVxuXG4gIGFkZFNoYXBlKHNoYXBlKSB7XG4gICAgbGV0IHNoYXBlcyA9IHNoYXBlXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNoYXBlcykpIHtcbiAgICAgIHNoYXBlcyA9IFtzaGFwZV1cbiAgICB9XG5cbiAgICBhZGRTaGFwZXNUb01hcChcbiAgICAgIHNoYXBlcyxcbiAgICAgIHRoaXMuX29iamVjdHMsXG4gICAgICB0aGlzLl9pZHMsXG4gICAgICB0aGlzLl9yZW9yZGVyQ2IsXG4gICAgICB0aGlzLl9yZXJlbmRlckNiXG4gICAgKVxuXG4gICAgLy8gZmlyZSBhZGQgZXZlbnRcbiAgICB0aGlzLmZpcmUoXCJzaGFwZTphZGRcIiwge1xuICAgICAgc2hhcGU6IHNoYXBlc1xuICAgIH0pXG5cbiAgICBjb25zdCBwcm94eUV2ZW50ID0ge1xuICAgICAgdGFyZ2V0OiBzaGFwZXNcbiAgICB9XG4gICAgdGhpcy5fcmVvcmRlckNiKHByb3h5RXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZGVsZXRlU2hhcGUoc2hhcGUpIHtcbiAgICBsZXQgc2hhcGVzID0gc2hhcGVcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2hhcGVzKSkge1xuICAgICAgc2hhcGVzID0gW3NoYXBlXVxuICAgIH1cblxuICAgIGNvbnN0IGlkeHMgPSBkZWxldGVTaGFwZXNGcm9tTWFwKFxuICAgICAgc2hhcGVzLFxuICAgICAgdGhpcy5fb2JqZWN0cyxcbiAgICAgIHRoaXMuX3Jlb3JkZXJDYixcbiAgICAgIHRoaXMuX3JlcmVuZGVyQ2JcbiAgICApXG4gICAgbGV0IGluZGV4ID0gLTFcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKChpbmRleCA9IHRoaXMuX3NvcnRlZE9ianMuaW5kZXhPZihzaGFwZXNbaV0pKSA+PSAwKSB7XG4gICAgICAgIHRoaXMuX3NvcnRlZE9ianMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgfVxuICAgICAgdGhpcy5fcmVvcmRlcmVkT2JqSWR4cy5hZGQoaWR4c1tpXSlcbiAgICB9XG4gICAgdGhpcy5fcmVyZW5kZXJDYigpXG5cbiAgICB0aGlzLmZpcmUoXCJzaGFwZTpkZWxldGVcIiwge1xuICAgICAgc2hhcGU6IHNoYXBlc1xuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZGVsZXRlQWxsU2hhcGVzKCkge1xuICAgIHRoaXMuZGVsZXRlU2hhcGUodGhpcy5zb3J0ZWRTaGFwZXMuc2xpY2UoKSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgbW92ZVNoYXBlVG9Ub3Aoc2hhcGUpIHtcbiAgICBpZiAodGhpcy5fb2JqZWN0cy5oYXMoc2hhcGUpKSB7XG4gICAgICBjb25zdCBzaGFwZXMgPSB0aGlzLnNvcnRlZFNoYXBlc1xuICAgICAgY29uc3QgemluZGV4ID0gc2hhcGVzW3NoYXBlcy5sZW5ndGggLSAxXS56SW5kZXhcbiAgICAgIHNoYXBlLnpJbmRleCA9IHppbmRleCArIDFcbiAgICB9XG4gIH1cblxuICBtb3ZlU2hhcGVUb0JhY2soc2hhcGUpIHtcbiAgICBpZiAodGhpcy5fb2JqZWN0cy5oYXMoc2hhcGUpKSB7XG4gICAgICBjb25zdCBzaGFwZXMgPSB0aGlzLnNvcnRlZFNoYXBlc1xuICAgICAgY29uc3QgemluZGV4ID0gc2hhcGVzWzBdLnpJbmRleFxuICAgICAgc2hhcGUuekluZGV4ID0gemluZGV4XG4gICAgfVxuICB9XG5cbiAgZ2V0U2hhcGVzQXNKU09OKCkge1xuICAgIGNvbnN0IHNoYXBlcyA9IHRoaXMuc29ydGVkU2hhcGVzXG4gICAgcmV0dXJuIHNoYXBlcy5tYXAoc2hhcGUgPT4gc2hhcGUudG9KU09OKCkpXG4gIH1cblxuICBfcmVyZW5kZXJDYigpIHtcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2IpXG4gIH1cblxuICBfcmVvcmRlckNiKGV2ZW50KSB7XG4gICAgbGV0IGNoYW5nZWRTaGFwZXMgPSBldmVudC50YXJnZXRcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hhbmdlZFNoYXBlcykpIHtcbiAgICAgIGNoYW5nZWRTaGFwZXMgPSBbZXZlbnQudGFyZ2V0XVxuICAgIH1cbiAgICBjaGFuZ2VkU2hhcGVzLmZvckVhY2goY2hhbmdlZFNoYXBlID0+IHtcbiAgICAgIGNvbnNvbGUuYXNzZXJ0KGNoYW5nZWRTaGFwZSwgXCJBIGNoYW5nZWQgZXZlbnQgZG9lc24ndCBoYXZlIGFuIG9iamVjdFwiKVxuICAgICAgY29uc3Qgc2hhcGVJbmZvID0gdGhpcy5fb2JqZWN0cy5nZXQoY2hhbmdlZFNoYXBlKVxuICAgICAgY29uc29sZS5hc3NlcnQoXG4gICAgICAgIHNoYXBlSW5mbyxcbiAgICAgICAgYEEgY2hhbmdlZCBldmVudCB0YXJnZXQgaXNuJ3QgaW4gdGhlIGxpc3Qgb2Ygc2hhcGVzICR7Y2hhbmdlZFNoYXBlfWBcbiAgICAgIClcbiAgICAgIGlmIChzaGFwZUluZm8uc2hhcGVJZHggPCAwKSB7XG4gICAgICAgIHNoYXBlSW5mby5zaGFwZUlkeCA9IHRoaXMuX3NvcnRlZE9ianMucHVzaChjaGFuZ2VkU2hhcGUpIC0gMVxuICAgICAgfVxuICAgICAgdGhpcy5fcmVvcmRlcmVkT2JqSWR4cy5hZGQoc2hhcGVJbmZvLnNoYXBlSWR4KVxuICAgIH0pXG4gICAgdGhpcy5fcmVyZW5kZXJDYigpXG4gIH1cblxuICBfcmVuZGVyU2hhcGVzKGN0eCwgZHJhd1NoYXBlcywgY2FtZXJhKSB7XG4gICAgY29uc3Qgd29ybGRUb1NjcmVlbk1hdCA9IGNhbWVyYS53b3JsZFRvU2NyZWVuTWF0cml4XG4gICAgZHJhd1NoYXBlcy5mb3JFYWNoKHNoYXBlID0+IHtcbiAgICAgIGlmIChzaGFwZS52aXNpYmxlKSB7XG4gICAgICAgIHNoYXBlLnJlbmRlcihjdHgsIHdvcmxkVG9TY3JlZW5NYXQsIHRoaXMuX3N0eWxlU3RhdGUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJlbmRlckFsbCh0aW1lc3RhbXApIHtcbiAgICBpZiAodGltZXN0YW1wKSB7XG4gICAgICBpZiAodGltZXN0YW1wIDw9IHRoaXMuX3JlbmRlclJlcXVlc3RUaW1lKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhpcy5fcmVuZGVyUmVxdWVzdFRpbWUgPSB0aW1lc3RhbXBcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVuZGVyUmVxdWVzdFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IHRoaXMuX2RyYXdDdHhcbiAgICBjdHguY2xlYXJSZWN0KFxuICAgICAgMCxcbiAgICAgIDAsXG4gICAgICB0aGlzLl9kcmF3Q2FudmFzLm9mZnNldFdpZHRoLFxuICAgICAgdGhpcy5fZHJhd0NhbnZhcy5vZmZzZXRIZWlnaHRcbiAgICApXG5cbiAgICBpZiAoIXRoaXMuX29iamVjdHMuc2l6ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY3R4LnNhdmUoKVxuICAgIGNvbnN0IGRyYXdTaGFwZXMgPSB0aGlzLnNvcnRlZFNoYXBlc1xuICAgIHRoaXMuX3N0eWxlU3RhdGUuYXBwbHlEZWZhdWx0cyhjdHgpXG4gICAgdGhpcy5fcmVuZGVyU2hhcGVzKGN0eCwgZHJhd1NoYXBlcywgdGhpcy5fY2FtZXJhKVxuICAgIGN0eC5yZXN0b3JlKClcbiAgfVxufVxuXG5EcmF3RW5naW5lLkV2ZW50Q29uc3RhbnRzID0gRXZlbnRDb25zdGFudHNcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2VuZ2luZS9kcmF3LWVuZ2luZS5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///21\n"); /***/ }), /* 22 */ @@ -252,7 +252,7 @@ eval("Object.defineProperty(__webpack_exports__, \"__esModule\", { value: true } /* 25 */ /***/ (function(module, exports) { -eval("module.exports = {\n\t\"name\": \"@mapd/mapd-draw\",\n\t\"description\": \"A Utility Library for drawing and interacting with shapes using canvas\",\n\t\"version\": \"1.1.0\",\n\t\"homepage\": \"https://omnisci.com\",\n\t\"bugs\": \"https://github.com/omnisci/mapd-draw/issues\",\n\t\"main\": \"dist/mapd-draw.js\",\n\t\"author\": \"MapD Technologies\",\n\t\"license\": \"MIT\",\n\t\"engines\": {\n\t\t\"node\": \">=4.0.0\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/omnisci/mapd-draw.git\"\n\t},\n\t\"dependencies\": {\n\t\t\"css-element-queries\": \"^0.4.0\",\n\t\t\"gl-matrix\": \"^2.3.2\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@babel/core\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-class-properties\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-decorators\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-do-expressions\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-export-default-from\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-export-namespace-from\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-function-bind\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-function-sent\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-json-strings\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-logical-assignment-operators\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-nullish-coalescing-operator\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-numeric-separator\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-optional-chaining\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-pipeline-operator\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-throw-expressions\": \"^7.0.0\",\n\t\t\"@babel/plugin-syntax-dynamic-import\": \"^7.0.0\",\n\t\t\"@babel/plugin-syntax-import-meta\": \"^7.0.0\",\n\t\t\"@babel/preset-env\": \"^7.0.0\",\n\t\t\"@babel/register\": \"^7.0.0\",\n\t\t\"babel-eslint\": \"^10.0.1\",\n\t\t\"babel-loader\": \"^8.0.0\",\n\t\t\"chai\": \"^3.5.0\",\n\t\t\"eslint\": \"^6.0.0\",\n\t\t\"eslint-config-prettier\": \"^6.5.0\",\n\t\t\"eslint-plugin-prettier\": \"^3.1.1\",\n\t\t\"http-server\": \"^0.11.1\",\n\t\t\"json-loader\": \"0.5.4\",\n\t\t\"mocha\": \"^6.2.1\",\n\t\t\"pre-commit\": \"^1.2.2\",\n\t\t\"prettier\": \"1.18.2\",\n\t\t\"webpack\": \"^3.12.0\"\n\t},\n\t\"scripts\": {\n\t\t\"build\": \"npm run build:prod; npm run build:dev\",\n\t\t\"build:prod\": \"npm run webpack\",\n\t\t\"build:dev\": \"npm run webpack:dev\",\n\t\t\"clean\": \"bash scripts/clean.sh\",\n\t\t\"lint:fix\": \"eslint --rule 'prettier/prettier: 0' --fix $(find src -name \\\"*.js\\\" ! -name '*.spec.js'); prettier --write $(find src -name \\\"*.js\\\" ! -name '*.spec.js')\",\n\t\t\"lint\": \"eslint $(find src -name \\\"*.js\\\" ! -name '*.spec.js')\",\n\t\t\"start\": \"npm run build; http-server -p 8085 -o;\",\n\t\t\"watch:dev\": \"node node_modules/webpack/bin/webpack.js --progress --colors --watch --config webpack.dev.config.js\",\n\t\t\"webpack\": \"node node_modules/webpack/bin/webpack.js\",\n\t\t\"webpack:dev\": \"node node_modules/webpack/bin/webpack.js --config webpack.dev.config.js\",\n\t\t\"test\": \"mocha --recursive --require @babel/register\"\n\t},\n\t\"pre-commit\": [\n\t\t\"lint\",\n\t\t\"test\"\n\t]\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vcGFja2FnZS5qc29uPzBjNDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0EseUdBQXlHO0FBQ3pHO0FBQ0EsMEJBQTBCLHdCQUF3QjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG5cdFwibmFtZVwiOiBcIkBtYXBkL21hcGQtZHJhd1wiLFxuXHRcImRlc2NyaXB0aW9uXCI6IFwiQSBVdGlsaXR5IExpYnJhcnkgZm9yIGRyYXdpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggc2hhcGVzIHVzaW5nIGNhbnZhc1wiLFxuXHRcInZlcnNpb25cIjogXCIxLjEuMFwiLFxuXHRcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9vbW5pc2NpLmNvbVwiLFxuXHRcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vb21uaXNjaS9tYXBkLWRyYXcvaXNzdWVzXCIsXG5cdFwibWFpblwiOiBcImRpc3QvbWFwZC1kcmF3LmpzXCIsXG5cdFwiYXV0aG9yXCI6IFwiTWFwRCBUZWNobm9sb2dpZXNcIixcblx0XCJsaWNlbnNlXCI6IFwiTUlUXCIsXG5cdFwiZW5naW5lc1wiOiB7XG5cdFx0XCJub2RlXCI6IFwiPj00LjAuMFwiXG5cdH0sXG5cdFwicmVwb3NpdG9yeVwiOiB7XG5cdFx0XCJ0eXBlXCI6IFwiZ2l0XCIsXG5cdFx0XCJ1cmxcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL29tbmlzY2kvbWFwZC1kcmF3LmdpdFwiXG5cdH0sXG5cdFwiZGVwZW5kZW5jaWVzXCI6IHtcblx0XHRcImNzcy1lbGVtZW50LXF1ZXJpZXNcIjogXCJeMC40LjBcIixcblx0XHRcImdsLW1hdHJpeFwiOiBcIl4yLjMuMlwiXG5cdH0sXG5cdFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcblx0XHRcIkBiYWJlbC9jb3JlXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWNsYXNzLXByb3BlcnRpZXNcIjogXCJeNy4wLjBcIixcblx0XHRcIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtZGVjb3JhdG9yc1wiOiBcIl43LjAuMFwiLFxuXHRcdFwiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1kby1leHByZXNzaW9uc1wiOiBcIl43LjAuMFwiLFxuXHRcdFwiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1leHBvcnQtZGVmYXVsdC1mcm9tXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWV4cG9ydC1uYW1lc3BhY2UtZnJvbVwiOiBcIl43LjAuMFwiLFxuXHRcdFwiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1mdW5jdGlvbi1iaW5kXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWZ1bmN0aW9uLXNlbnRcIjogXCJeNy4wLjBcIixcblx0XHRcIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtanNvbi1zdHJpbmdzXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWxvZ2ljYWwtYXNzaWdubWVudC1vcGVyYXRvcnNcIjogXCJeNy4wLjBcIixcblx0XHRcIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW51bWVyaWMtc2VwYXJhdG9yXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW9wdGlvbmFsLWNoYWluaW5nXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLXBpcGVsaW5lLW9wZXJhdG9yXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLXRocm93LWV4cHJlc3Npb25zXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXN5bnRheC1keW5hbWljLWltcG9ydFwiOiBcIl43LjAuMFwiLFxuXHRcdFwiQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LW1ldGFcIjogXCJeNy4wLjBcIixcblx0XHRcIkBiYWJlbC9wcmVzZXQtZW52XCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcmVnaXN0ZXJcIjogXCJeNy4wLjBcIixcblx0XHRcImJhYmVsLWVzbGludFwiOiBcIl4xMC4wLjFcIixcblx0XHRcImJhYmVsLWxvYWRlclwiOiBcIl44LjAuMFwiLFxuXHRcdFwiY2hhaVwiOiBcIl4zLjUuMFwiLFxuXHRcdFwiZXNsaW50XCI6IFwiXjYuMC4wXCIsXG5cdFx0XCJlc2xpbnQtY29uZmlnLXByZXR0aWVyXCI6IFwiXjYuNS4wXCIsXG5cdFx0XCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyXCI6IFwiXjMuMS4xXCIsXG5cdFx0XCJodHRwLXNlcnZlclwiOiBcIl4wLjExLjFcIixcblx0XHRcImpzb24tbG9hZGVyXCI6IFwiMC41LjRcIixcblx0XHRcIm1vY2hhXCI6IFwiXjYuMi4xXCIsXG5cdFx0XCJwcmUtY29tbWl0XCI6IFwiXjEuMi4yXCIsXG5cdFx0XCJwcmV0dGllclwiOiBcIjEuMTguMlwiLFxuXHRcdFwid2VicGFja1wiOiBcIl4zLjEyLjBcIlxuXHR9LFxuXHRcInNjcmlwdHNcIjoge1xuXHRcdFwiYnVpbGRcIjogXCJucG0gcnVuIGJ1aWxkOnByb2Q7IG5wbSBydW4gYnVpbGQ6ZGV2XCIsXG5cdFx0XCJidWlsZDpwcm9kXCI6IFwibnBtIHJ1biB3ZWJwYWNrXCIsXG5cdFx0XCJidWlsZDpkZXZcIjogXCJucG0gcnVuIHdlYnBhY2s6ZGV2XCIsXG5cdFx0XCJjbGVhblwiOiBcImJhc2ggc2NyaXB0cy9jbGVhbi5zaFwiLFxuXHRcdFwibGludDpmaXhcIjogXCJlc2xpbnQgLS1ydWxlICdwcmV0dGllci9wcmV0dGllcjogMCcgLS1maXggJChmaW5kIHNyYyAtbmFtZSBcXFwiKi5qc1xcXCIgISAtbmFtZSAnKi5zcGVjLmpzJyk7IHByZXR0aWVyIC0td3JpdGUgJChmaW5kIHNyYyAtbmFtZSBcXFwiKi5qc1xcXCIgISAtbmFtZSAnKi5zcGVjLmpzJylcIixcblx0XHRcImxpbnRcIjogXCJlc2xpbnQgJChmaW5kIHNyYyAtbmFtZSBcXFwiKi5qc1xcXCIgISAtbmFtZSAnKi5zcGVjLmpzJylcIixcblx0XHRcInN0YXJ0XCI6IFwibnBtIHJ1biBidWlsZDsgaHR0cC1zZXJ2ZXIgLXAgODA4NSAtbztcIixcblx0XHRcIndhdGNoOmRldlwiOiBcIm5vZGUgbm9kZV9tb2R1bGVzL3dlYnBhY2svYmluL3dlYnBhY2suanMgLS1wcm9ncmVzcyAtLWNvbG9ycyAtLXdhdGNoIC0tY29uZmlnIHdlYnBhY2suZGV2LmNvbmZpZy5qc1wiLFxuXHRcdFwid2VicGFja1wiOiBcIm5vZGUgbm9kZV9tb2R1bGVzL3dlYnBhY2svYmluL3dlYnBhY2suanNcIixcblx0XHRcIndlYnBhY2s6ZGV2XCI6IFwibm9kZSBub2RlX21vZHVsZXMvd2VicGFjay9iaW4vd2VicGFjay5qcyAtLWNvbmZpZyB3ZWJwYWNrLmRldi5jb25maWcuanNcIixcblx0XHRcInRlc3RcIjogXCJtb2NoYSAtLXJlY3Vyc2l2ZSAtLXJlcXVpcmUgQGJhYmVsL3JlZ2lzdGVyXCJcblx0fSxcblx0XCJwcmUtY29tbWl0XCI6IFtcblx0XHRcImxpbnRcIixcblx0XHRcInRlc3RcIlxuXHRdXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL3BhY2thZ2UuanNvblxuLy8gbW9kdWxlIGlkID0gMjVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///25\n"); +eval("module.exports = {\n\t\"name\": \"@mapd/mapd-draw\",\n\t\"description\": \"A Utility Library for drawing and interacting with shapes using canvas\",\n\t\"version\": \"1.1.0\",\n\t\"homepage\": \"https://omnisci.com\",\n\t\"bugs\": \"https://github.com/omnisci/mapd-draw/issues\",\n\t\"main\": \"dist/mapd-draw.js\",\n\t\"author\": \"MapD Technologies\",\n\t\"license\": \"MIT\",\n\t\"engines\": {\n\t\t\"node\": \">=4.0.0\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/omnisci/mapd-draw.git\"\n\t},\n\t\"dependencies\": {\n\t\t\"css-element-queries\": \"^0.4.0\",\n\t\t\"gl-matrix\": \"^2.3.2\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@babel/core\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-class-properties\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-decorators\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-do-expressions\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-export-default-from\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-export-namespace-from\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-function-bind\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-function-sent\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-json-strings\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-logical-assignment-operators\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-nullish-coalescing-operator\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-numeric-separator\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-optional-chaining\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-pipeline-operator\": \"^7.0.0\",\n\t\t\"@babel/plugin-proposal-throw-expressions\": \"^7.0.0\",\n\t\t\"@babel/plugin-syntax-dynamic-import\": \"^7.0.0\",\n\t\t\"@babel/plugin-syntax-import-meta\": \"^7.0.0\",\n\t\t\"@babel/preset-env\": \"^7.0.0\",\n\t\t\"@babel/register\": \"^7.0.0\",\n\t\t\"babel-eslint\": \"^10.0.1\",\n\t\t\"babel-loader\": \"^8.0.0\",\n\t\t\"chai\": \"^3.5.0\",\n\t\t\"eslint\": \"^6.0.0\",\n\t\t\"eslint-config-prettier\": \"^6.5.0\",\n\t\t\"eslint-plugin-prettier\": \"^3.1.1\",\n\t\t\"http-server\": \"^0.11.1\",\n\t\t\"json-loader\": \"0.5.4\",\n\t\t\"mocha\": \"^6.2.1\",\n\t\t\"pre-commit\": \"^1.2.2\",\n\t\t\"prettier\": \"1.18.2\",\n\t\t\"webpack\": \"^3.12.0\"\n\t},\n\t\"scripts\": {\n\t\t\"build\": \"npm run build:prod; npm run build:dev\",\n\t\t\"build:prod\": \"npm run webpack\",\n\t\t\"build:dev\": \"npm run webpack:dev\",\n\t\t\"clean\": \"bash scripts/clean.sh\",\n\t\t\"lint:fix\": \"eslint --rule 'prettier/prettier: 0' --fix $(find src -name \\\"*.js\\\" ! -name '*.spec.js'); prettier --write $(find src -name \\\"*.js\\\" ! -name '*.spec.js')\",\n\t\t\"lint\": \"eslint $(find src -name \\\"*.js\\\" ! -name '*.spec.js')\",\n\t\t\"start\": \"npm run build; http-server -p 8080 -o;\",\n\t\t\"watch:dev\": \"node node_modules/webpack/bin/webpack.js --progress --colors --watch --config webpack.dev.config.js\",\n\t\t\"webpack\": \"node node_modules/webpack/bin/webpack.js\",\n\t\t\"webpack:dev\": \"node node_modules/webpack/bin/webpack.js --config webpack.dev.config.js\",\n\t\t\"test\": \"mocha --recursive --require @babel/register\"\n\t},\n\t\"pre-commit\": [\n\t\t\"lint\",\n\t\t\"test\"\n\t]\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vcGFja2FnZS5qc29uPzBjNDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0EseUdBQXlHO0FBQ3pHO0FBQ0EsMEJBQTBCLHdCQUF3QjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG5cdFwibmFtZVwiOiBcIkBtYXBkL21hcGQtZHJhd1wiLFxuXHRcImRlc2NyaXB0aW9uXCI6IFwiQSBVdGlsaXR5IExpYnJhcnkgZm9yIGRyYXdpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggc2hhcGVzIHVzaW5nIGNhbnZhc1wiLFxuXHRcInZlcnNpb25cIjogXCIxLjEuMFwiLFxuXHRcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9vbW5pc2NpLmNvbVwiLFxuXHRcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vb21uaXNjaS9tYXBkLWRyYXcvaXNzdWVzXCIsXG5cdFwibWFpblwiOiBcImRpc3QvbWFwZC1kcmF3LmpzXCIsXG5cdFwiYXV0aG9yXCI6IFwiTWFwRCBUZWNobm9sb2dpZXNcIixcblx0XCJsaWNlbnNlXCI6IFwiTUlUXCIsXG5cdFwiZW5naW5lc1wiOiB7XG5cdFx0XCJub2RlXCI6IFwiPj00LjAuMFwiXG5cdH0sXG5cdFwicmVwb3NpdG9yeVwiOiB7XG5cdFx0XCJ0eXBlXCI6IFwiZ2l0XCIsXG5cdFx0XCJ1cmxcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL29tbmlzY2kvbWFwZC1kcmF3LmdpdFwiXG5cdH0sXG5cdFwiZGVwZW5kZW5jaWVzXCI6IHtcblx0XHRcImNzcy1lbGVtZW50LXF1ZXJpZXNcIjogXCJeMC40LjBcIixcblx0XHRcImdsLW1hdHJpeFwiOiBcIl4yLjMuMlwiXG5cdH0sXG5cdFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcblx0XHRcIkBiYWJlbC9jb3JlXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWNsYXNzLXByb3BlcnRpZXNcIjogXCJeNy4wLjBcIixcblx0XHRcIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtZGVjb3JhdG9yc1wiOiBcIl43LjAuMFwiLFxuXHRcdFwiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1kby1leHByZXNzaW9uc1wiOiBcIl43LjAuMFwiLFxuXHRcdFwiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1leHBvcnQtZGVmYXVsdC1mcm9tXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWV4cG9ydC1uYW1lc3BhY2UtZnJvbVwiOiBcIl43LjAuMFwiLFxuXHRcdFwiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1mdW5jdGlvbi1iaW5kXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWZ1bmN0aW9uLXNlbnRcIjogXCJeNy4wLjBcIixcblx0XHRcIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtanNvbi1zdHJpbmdzXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWxvZ2ljYWwtYXNzaWdubWVudC1vcGVyYXRvcnNcIjogXCJeNy4wLjBcIixcblx0XHRcIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW51bWVyaWMtc2VwYXJhdG9yXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW9wdGlvbmFsLWNoYWluaW5nXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLXBpcGVsaW5lLW9wZXJhdG9yXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLXRocm93LWV4cHJlc3Npb25zXCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcGx1Z2luLXN5bnRheC1keW5hbWljLWltcG9ydFwiOiBcIl43LjAuMFwiLFxuXHRcdFwiQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LW1ldGFcIjogXCJeNy4wLjBcIixcblx0XHRcIkBiYWJlbC9wcmVzZXQtZW52XCI6IFwiXjcuMC4wXCIsXG5cdFx0XCJAYmFiZWwvcmVnaXN0ZXJcIjogXCJeNy4wLjBcIixcblx0XHRcImJhYmVsLWVzbGludFwiOiBcIl4xMC4wLjFcIixcblx0XHRcImJhYmVsLWxvYWRlclwiOiBcIl44LjAuMFwiLFxuXHRcdFwiY2hhaVwiOiBcIl4zLjUuMFwiLFxuXHRcdFwiZXNsaW50XCI6IFwiXjYuMC4wXCIsXG5cdFx0XCJlc2xpbnQtY29uZmlnLXByZXR0aWVyXCI6IFwiXjYuNS4wXCIsXG5cdFx0XCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyXCI6IFwiXjMuMS4xXCIsXG5cdFx0XCJodHRwLXNlcnZlclwiOiBcIl4wLjExLjFcIixcblx0XHRcImpzb24tbG9hZGVyXCI6IFwiMC41LjRcIixcblx0XHRcIm1vY2hhXCI6IFwiXjYuMi4xXCIsXG5cdFx0XCJwcmUtY29tbWl0XCI6IFwiXjEuMi4yXCIsXG5cdFx0XCJwcmV0dGllclwiOiBcIjEuMTguMlwiLFxuXHRcdFwid2VicGFja1wiOiBcIl4zLjEyLjBcIlxuXHR9LFxuXHRcInNjcmlwdHNcIjoge1xuXHRcdFwiYnVpbGRcIjogXCJucG0gcnVuIGJ1aWxkOnByb2Q7IG5wbSBydW4gYnVpbGQ6ZGV2XCIsXG5cdFx0XCJidWlsZDpwcm9kXCI6IFwibnBtIHJ1biB3ZWJwYWNrXCIsXG5cdFx0XCJidWlsZDpkZXZcIjogXCJucG0gcnVuIHdlYnBhY2s6ZGV2XCIsXG5cdFx0XCJjbGVhblwiOiBcImJhc2ggc2NyaXB0cy9jbGVhbi5zaFwiLFxuXHRcdFwibGludDpmaXhcIjogXCJlc2xpbnQgLS1ydWxlICdwcmV0dGllci9wcmV0dGllcjogMCcgLS1maXggJChmaW5kIHNyYyAtbmFtZSBcXFwiKi5qc1xcXCIgISAtbmFtZSAnKi5zcGVjLmpzJyk7IHByZXR0aWVyIC0td3JpdGUgJChmaW5kIHNyYyAtbmFtZSBcXFwiKi5qc1xcXCIgISAtbmFtZSAnKi5zcGVjLmpzJylcIixcblx0XHRcImxpbnRcIjogXCJlc2xpbnQgJChmaW5kIHNyYyAtbmFtZSBcXFwiKi5qc1xcXCIgISAtbmFtZSAnKi5zcGVjLmpzJylcIixcblx0XHRcInN0YXJ0XCI6IFwibnBtIHJ1biBidWlsZDsgaHR0cC1zZXJ2ZXIgLXAgODA4MCAtbztcIixcblx0XHRcIndhdGNoOmRldlwiOiBcIm5vZGUgbm9kZV9tb2R1bGVzL3dlYnBhY2svYmluL3dlYnBhY2suanMgLS1wcm9ncmVzcyAtLWNvbG9ycyAtLXdhdGNoIC0tY29uZmlnIHdlYnBhY2suZGV2LmNvbmZpZy5qc1wiLFxuXHRcdFwid2VicGFja1wiOiBcIm5vZGUgbm9kZV9tb2R1bGVzL3dlYnBhY2svYmluL3dlYnBhY2suanNcIixcblx0XHRcIndlYnBhY2s6ZGV2XCI6IFwibm9kZSBub2RlX21vZHVsZXMvd2VicGFjay9iaW4vd2VicGFjay5qcyAtLWNvbmZpZyB3ZWJwYWNrLmRldi5jb25maWcuanNcIixcblx0XHRcInRlc3RcIjogXCJtb2NoYSAtLXJlY3Vyc2l2ZSAtLXJlcXVpcmUgQGJhYmVsL3JlZ2lzdGVyXCJcblx0fSxcblx0XCJwcmUtY29tbWl0XCI6IFtcblx0XHRcImxpbnRcIixcblx0XHRcInRlc3RcIlxuXHRdXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL3BhY2thZ2UuanNvblxuLy8gbW9kdWxlIGlkID0gMjVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///25\n"); /***/ }), /* 26 */ diff --git a/dist/mapd-draw.js b/dist/mapd-draw.js index 8d7519e..e3aa024 100644 --- a/dist/mapd-draw.js +++ b/dist/mapd-draw.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.MapdDraw=e():t.MapdDraw=e()}("undefined"!=typeof self?self:this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var r={};return e.m=t,e.c=r,e.d=function(t,r,n){e.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=24)}([function(t,e,r){"use strict";var n=r(1),i=r(28),o=r(29),a=(r(13),r(14),r(15),r(30),r(31));r(16),r(17);r.d(e,"a",function(){return n}),r.d(e,"b",function(){return i}),r.d(e,"c",function(){return o}),r.d(e,"d",function(){return a})},function(t,e,r){"use strict";function n(t){s=t}function i(t){return t*l}function o(t,e){return Math.abs(t-e)<=a*Math.max(1,Math.abs(t),Math.abs(e))}Object.defineProperty(e,"__esModule",{value:!0}),r.d(e,"EPSILON",function(){return a}),r.d(e,"ARRAY_TYPE",function(){return s}),r.d(e,"RANDOM",function(){return c}),e.setMatrixArrayType=n,e.toRadian=i,e.equals=o;var a=1e-6,s="undefined"!=typeof Float32Array?Float32Array:Array,c=Math.random,l=Math.PI/180},function(t,e,r){"use strict";function n(t,e,r,n,i){return t[A]="number"==typeof e?e:1/0,t[I]="number"==typeof r?r:1/0,t[F]="number"==typeof n?n:-1/0,t[D]="number"==typeof i?i:-1/0,t}function i(t,e,r,i){return n(new j.a.ARRAY_TYPE(T.BOX_SIDES),t,e,r,i)}function o(t){var e=new j.a.ARRAY_TYPE(T.BOX_SIDES);return e[A]=t[A],e[I]=t[I],e[F]=t[F],e[D]=t[D],e}function a(t,e){return t[A]=e[A],t[I]=e[I],t[F]=e[F],t[D]=e[D],t}function s(t){return t[A]=1/0,t[I]=1/0,t[F]=-1/0,t[D]=-1/0,t}function c(t){return t[A]=-1/0,t[I]=-1/0,t[F]=1/0,t[D]=1/0,t}function l(t,e){return e[0]<0?(t[A]=-e[0],t[F]=0):(t[A]=0,t[F]=e[0]),e[1]<0?(t[I]=-e[1],t[D]=0):(t[I]=0,t[D]=e[1]),t}function u(t,e,r){for(var n=0;n<2;n+=1)r[n]<0?(t[n]=e[n]-r[n],t[n+2]=e[n]):(t[n]=e[n],t[n+2]=e[n]+r[n]);return t}function h(t,e,r){for(var n=0;n<2;n+=1)r[n]<0?(t[n]=e[n]+r[n],t[n+2]=e[n]-r[n]):(t[n]=e[n]-r[n],t[n+2]=e[n]+r[n]);return t}function f(t){return t[A]>t[F]||t[I]>t[D]}function d(t){return!(isFinite(t[A])&&isFinite(t[I])&&isFinite(t[F])&&isFinite(t[D]))}function p(t,e){var r=t[0],n=t[1],i=t[2],o=t[3],a=e[0],s=e[1],c=e[2],l=e[3];return Math.abs(r-a)<=j.a.EPSILON&&Math.abs(n-s)<=j.a.EPSILON&&Math.abs(i-c)<=j.a.EPSILON&&Math.abs(o-l)<=j.a.EPSILON}function _(t,e){return j.d.set(t,e[F]-e[A],e[D]-e[I])}function v(t,e){return _(t,e),j.d.scale(t,t,.5)}function y(t,e){return v(t,e),t[A]+=e[A],t[I]+=e[I],t}function b(t,e,r){t[A]=e[A]-r[0],t[F]=e[F]+r[0],t[I]=e[I]-r[1],t[D]=e[D]+r[1]}function m(t){return(t[F]-t[A])*(t[D]-t[I])}function g(t,e,r){return i(Math.min(e[A],r[A]),Math.min(e[I],r[I]),Math.max(e[F],r[F]),Math.max(e[D],r[D]))}function w(t,e,r){var n=t;t===e&&(n=i());for(var o=A,c=F;o<=I&&!(e[c]r[c]);o+=1,c+=1)n[o]=Math.max(e[o],r[o]),n[c]=Math.min(e[c],r[c]);return o!==I+1&&s(n),t===e&&a(t,n),t}function k(t,e){return!(t[F]<=e[A]||t[A]>=e[F]||t[D]<=e[I]||t[I]>=e[D])}function x(t,e){return!(e[A]t[F]||e[I]t[D])}function S(t,e){return e[A]>=t[A]&&e[A]<=t[F]&&e[I]>=t[I]&&e[I]<=t[D]}function O(t,e,r){return t!==e&&a(t,e),f(e)?(t[A]=r[A],t[F]=r[A],t[I]=r[I],t[D]=r[I]):(r[A]t[F]&&(t[F]=r[A]),r[I]t[D]&&(t[D]=r[I])),t}function E(t,e,r){t[A]=e[A]+r[0],t[I]=e[I]+r[1],t[F]=e[F]+r[0],t[D]=e[D]+r[1]}function C(t,e,r,n){var o=t;t===e&&(o=i()),s(o);var c=j.d.set(j.d.create(),e[A],e[I]),l=j.d.create();return n(l,c,r),O(o,o,l),c[A]=e[F],n(l,c,r),O(o,o,l),c[I]=e[D],n(l,c,r),O(o,o,l),c[A]=e[A],n(l,c,r),O(o,o,l),t===e&&a(t,o),t}function M(t,e,r){return C(t,e,r,j.d.transformMat2)}function P(t,e,r){return C(t,e,r,j.d.transformMat2d)}Object.defineProperty(e,"__esModule",{value:!0}),r.d(e,"MINX",function(){return A}),r.d(e,"MINY",function(){return I}),r.d(e,"MAXX",function(){return F}),r.d(e,"MAXY",function(){return D}),e.set=n,e.create=i,e.clone=o,e.copy=a,e.initEmpty=s,e.initInfinity=c,e.initSizeFromOrigin=l,e.initSizeFromLocation=u,e.initCenterExtents=h,e.isEmpty=f,e.isInfinite=d,e.equals=p,e.getSize=_,e.getExtents=v,e.getCenter=y,e.expand=b,e.area=m,e.hull=g,e.intersection=w,e.overlaps=k,e.contains=x,e.containsPt=S,e.encapsulatePt=O,e.translate=E,e.transformMat2=M,e.transformMat2d=P;var j=r(0),A=0,I=1,F=2,D=3,T={BOX_SIDES:4}},function(t,e,r){"use strict";function n(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return t[m]=e,t[g]=r,t}function i(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return n(new b.a.ARRAY_TYPE(2),t,e)}function o(t){var e=new b.a.ARRAY_TYPE(2);return e[m]=t[m],e[g]=t[g],e}function a(t,e){return t[m]=e[m],t[g]=e[g],t}function s(t,e){return i(t,e)}function c(t,e,r){return b.d.add(t,e,r)}function l(t,e,r){return b.d.sub(t,e,r)}function u(t,e,r){return b.d.transformMat2(t,e,r)}function h(t,e,r){return b.d.transformMat2d(t,e,r)}function f(t){return"point2d(".concat(t[0]," , ").concat(t[1],")")}function d(t,e){return b.d.distance(t,e)}function p(t,e){return b.d.squaredDistance(t,e)}function _(t,e,r,n){return b.d.lerp(t,e,r,n)}function v(t,e){return b.d.equals(t,e)}function y(t,e){return b.d.exactEquals(t,e)}Object.defineProperty(e,"__esModule",{value:!0}),e.set=n,e.create=i,e.clone=o,e.copy=a,e.initFromValues=s,e.addVec2=c,e.sub=l,e.transformMat2=u,e.transformMat2d=h,e.str=f,e.distance=d,r.d(e,"dist",function(){return w}),e.squaredDistance=p,r.d(e,"sqrDist",function(){return k}),e.lerp=_,e.equals=v,e.exactEquals=y;var b=r(0),m=0,g=1,w=d,k=p},function(t,e,r){"use strict";var n=r(0);n.c.svd=function(t,e,r,n){if(t&&(t[0]=n[4],t[1]=n[5]),e||r){var i=(n[0]+n[3])/2,o=(n[0]-n[3])/2,a=(n[1]+n[2])/2,s=(n[1]-n[2])/2;if(e){var c=Math.sqrt(i*i+s*s),l=Math.sqrt(o*o+a*a);e[0]=c+l,e[1]=c-l}if(r){var u=Math.atan2(a,o),h=Math.atan2(s,i);r[0]=(h-u)/2,r[1]=(h+u)/2}}},e.a=n.c},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){return!e||"object"!==n(e)&&"function"!=typeof e?s(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function s(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function c(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&l(t,e)}function l(t,e){return(l=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}var u=function(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;nr?r:t}function i(t){return t<0?0:t>1?1:t}function o(t,e,r){return t*(1-r)+e*r}Math.QUATER_PI=.25*Math.PI,Math.HALF_PI=.5*Math.PI,Math.HALF_NPI=-.5*Math.PI,Math.TWO_PI=2*Math.PI,Math.NPI=-Math.PI,Math.NQUATER_PI=.25*Math.NPI,Math.NHALF_PI=.5*Math.NPI,Math.NTWO_PI=2*Math.NPI,Math.INV_PI=1/Math.PI,Math.RAD_TO_DEG=180/Math.PI,Math.DEG_TO_RAD=Math.PI/180,Math.EPS=1e-5,Math.clamp=n,Math.clamp01=i,Math.lerp=o,e.a=Math},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r3&&void 0!==arguments[3]?arguments[3]:null,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;this.transformCtx(t,this._fullXform,e),t.beginPath();var o=this._draw(t);(o||void 0===o)&&(this.isFillVisible()&&(null===n||Boolean(n))&&(r.setFillStyle(t,this),t.fill()),this.isStrokeVisible()&&(null===i||Boolean(i))&&(r.setStrokeStyle(t,this),t.setTransform(1,0,0,1,0,0),t.stroke()))}},{key:"setStyle",value:function(t){return y.a.copyBasicStyle(t,this),this}},{key:"toJSON",value:function(){var t=this;return this._stateStack&&this._stateStack.length&&(t=this._stateStack[0]),Object.assign({visible:this.visible,zIndex:t.zIndex},y.a.toJSON(t),_.c.toJSON(this))}},{key:"visible",get:function(){return this._visible&&(this.isFillVisible()||this.isStrokeVisible())}}],[{key:"shapeCompare",value:function(t,e){var r=t.zIndex,n=e.zIndex;if(rn)return 1;var i=d.b.compareFillStyle(t,e);return i||(i=p.b.compareStrokeStyle(t,e)),i}}]),e}(Object(v.a)(g,Object(_.b)("changed:xform"),Object(d.a)("changed:style"),Object(p.a)("changed:style")))},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r=e.length)return 0;var o=0,s=null;return s=t.get(e[r]),s&&(o=a(s[0],e,r+1,n),s[1].forEach(function(t){return t.call(i,n)}),o+=s[1].length),o}function s(t,e){var r=-1,n=t[0],i=t[1];i.length&&e.forEach(function(t){(r=i.indexOf(t))>=0&&i.splice(r,1)}),n.forEach(function(t){s(t,e)})}function c(t){var e=t;if("string"==typeof t)e=[t];else if(!Array.isArray(t))throw new Error("Input must be an array of strings");return e}r.d(e,"a",function(){return l});var l=function(){function t(e){n(this,t),this.initializer(e)}return o(t,[{key:"initializer",value:function(t){this._listeners=new Map,this.registerEvents(t)}},{key:"registerEvents",value:function(t){var e=this;if(t){var r=c(t);if("string"==typeof t)r=[t];else if(!Array.isArray(t))throw new Error("Events must be an array of strings");r.forEach(function(t){for(var r=t.split(":"),n=e._listeners,i=0;it[2]&&(t[2]=e[0],n[2]=r),e[1]t[3]&&(t[3]=e[1],n[3]=r))}function _(t,e,r){var n=e[0]*r[1]-r[0]*e[1];return t[0]+=(e[0]+r[0])*n,t[1]+=(e[1]+r[1])*n,n}function v(t){return Array.isArray(t)||ArrayBuffer&&ArrayBuffer.isView(t)}r.d(e,"a",function(){return S});var y=r(2),b=r(3),m=r(7),g=r(0),w=r(6),k=r(22),x=g.c.create(),S=function(t){function e(t){var r;i(this,e);var n=t.verts||[];if(r=s(this,h(e).call(this,t)),!v(n)||0===n.length||v(n[0])&&n.length<1||!v(n[0])&&(n.length<2||n.length%2!=0))throw new Error("PolyLine shapes must be initialized with an array of 2d points and contain at least 1 points");r._extentIndices=[-1,-1,-1,-1],r._localaabox=y.create(),r._verts=[],r._centroid=[0,0],y.initEmpty(r._aabox);var o=0,a=0;if(v(n[0])){for(a=0;a=this._verts.length)throw new Error("Cannot translate vertex at index ".concat(t,". There are only ").concat(this._verts.length," vertices in the polygon."));if(e[0]||e[1]){var r=b.clone(this._verts[t]),n=b.clone(this._verts[t]);b.addVec2(n,n,e),this._collapseVerts(),this._resetAABox=!0,this._geomDirty=!0,b.copy(n),this.fire("changed:geom",{attr:"verts[".concat(t,"]"),prevVal:r,currVal:n})}return this}},{key:"setVertPosition",value:function(t,e){if(t>=this._verts.length)throw new Error("Cannot translate vertex at index ".concat(t,". There are only ").concat(this._verts.length," vertices in the polygon."));if(!b.equals(e,this._verts[t])){var r=b.clone(this._verts[t]);this._collapseVerts(),b.copy(this._verts[t],e),this._resetAABox=!0,this._geomDirty=!0,this.fire("changed:geom",{attr:"verts[".concat(t,"]"),prevVal:r,currVal:e})}}},{key:"insertVert",value:function(t,e){var r=w.a.min(w.a.max(t,0),this._verts.length);return this._collapseVerts(),t>=this._verts.length?(this._verts.push(b.clone(e)),r=this._verts.length-1):this._verts.splice(t,0,b.clone(e)),this._resetAABox=!0,this._geomDirty=!0,this.fire("changed:geom:addvert",{attr:"verts[".concat(r,"]"),currVal:e}),r}},{key:"appendVert",value:function(t){return this.insertVert(this._verts.length,t)}},{key:"removeVert",value:function(t){if(t>=this._verts.length||t<0)throw new Error("Cannot remove vertex ".concat(t,". Invalid index. There are only ").concat(this._verts.length," vertices in the shape."));var e=this._verts[t];return this._verts.splice(t,1),this._collapseVerts(),this._resetAABox=!0,this._geomDirty=!0,this.fire("changed:geom:removevert",{attr:"verts[".concat(t,"]"),currVal:e}),t}},{key:"_rebuildAABox",value:function(){var t=this;y.initEmpty(this._aabox),this._verts.length<3?this._convexHull=this._verts.map(function(t,e){return e}):this._convexHull=Object(k.a)(this._verts),this._convexHull.forEach(function(e){p(t._aabox,t._verts[e],e,t._extentIndices)});var e=b.create(0,0);y.getCenter(e,this._aabox),this.pivot=e}},{key:"_updateAABox",value:function(){var t=this;if(this._resetAABox&&(this._rebuildAABox(),this._resetAABox=!1),this._boundsOutOfDate||this._geomDirty){y.initEmpty(this._aabox);var e=[0,0],r=this.globalXform;if(this._convexHull.forEach(function(n){y.encapsulatePt(t._aabox,t._aabox,b.transformMat2d(e,t._verts[n],r))}),this._boundsOutOfDate=!1,this._geomDirty){var n=b.create();n[0]=this._verts[this._extentIndices[0]][0]+.5*(this._verts[this._extentIndices[2]][0]-this._verts[this._extentIndices[0]][0]),n[1]=this._verts[this._extentIndices[1]][1]+.5*(this._verts[this._extentIndices[3]][1]-this._verts[this._extentIndices[1]][1]),this.pivot=n,this._geomDirty=!1}}}},{key:"_draw",value:function(t){var e=!1;if(this._verts.length>=2){t.moveTo(this._verts[0][0],this._verts[0][1]);for(var r=1;r0?(n=2*Math.sqrt(r+1),t[3]=.25*n,t[0]=(e[6]-e[9])/n,t[1]=(e[8]-e[2])/n,t[2]=(e[1]-e[4])/n):e[0]>e[5]&&e[0]>e[10]?(n=2*Math.sqrt(1+e[0]-e[5]-e[10]),t[3]=(e[6]-e[9])/n,t[0]=.25*n,t[1]=(e[1]+e[4])/n,t[2]=(e[8]+e[2])/n):e[5]>e[10]?(n=2*Math.sqrt(1+e[5]-e[0]-e[10]),t[3]=(e[8]-e[2])/n,t[0]=(e[1]+e[4])/n,t[1]=.25*n,t[2]=(e[6]+e[9])/n):(n=2*Math.sqrt(1+e[10]-e[0]-e[5]),t[3]=(e[1]-e[4])/n,t[0]=(e[8]+e[2])/n,t[1]=(e[6]+e[9])/n,t[2]=.25*n),t}e.b=n,e.a=i;r(1)},function(t,e,r){"use strict";function n(){var t=new u.ARRAY_TYPE(4);return u.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function i(t,e,r){r*=.5;var n=Math.sin(r);return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=Math.cos(r),t}function o(t,e,r){r*=.5;var n=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c+a*s,t[1]=i*c+o*s,t[2]=o*c-i*s,t[3]=a*c-n*s,t}function a(t,e,r){r*=.5;var n=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c-o*s,t[1]=i*c+a*s,t[2]=o*c+n*s,t[3]=a*c-i*s,t}function s(t,e,r){r*=.5;var n=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c+i*s,t[1]=i*c-n*s,t[2]=o*c+a*s,t[3]=a*c-o*s,t}function c(t,e,r,n){var i=e[0],o=e[1],a=e[2],s=e[3],c=r[0],l=r[1],h=r[2],f=r[3],d=void 0,p=void 0,_=void 0,v=void 0,y=void 0;return p=i*c+o*l+a*h+s*f,p<0&&(p=-p,c=-c,l=-l,h=-h,f=-f),1-p>u.EPSILON?(d=Math.acos(p),_=Math.sin(d),v=Math.sin((1-n)*d)/_,y=Math.sin(n*d)/_):(v=1-n,y=n),t[0]=v*i+y*c,t[1]=v*o+y*l,t[2]=v*a+y*h,t[3]=v*s+y*f,t}function l(t,e){var r=e[0]+e[4]+e[8],n=void 0;if(r>0)n=Math.sqrt(r+1),t[3]=.5*n,n=.5/n,t[0]=(e[5]-e[7])*n,t[1]=(e[6]-e[2])*n,t[2]=(e[1]-e[3])*n;else{var i=0;e[4]>e[0]&&(i=1),e[8]>e[3*i+i]&&(i=2);var o=(i+1)%3,a=(i+2)%3;n=Math.sqrt(e[3*i+i]-e[3*o+o]-e[3*a+a]+1),t[i]=.5*n,n=.5/n,t[3]=(e[3*o+a]-e[3*a+o])*n,t[o]=(e[3*o+i]+e[3*i+o])*n,t[a]=(e[3*a+i]+e[3*i+a])*n}return t}e.b=n,e.e=o,e.f=a,e.g=s,r.d(e,"a",function(){return p}),r.d(e,"c",function(){return _}),r.d(e,"d",function(){return v}),r.d(e,"h",function(){return y});var u=r(1),h=r(13),f=r(16),d=r(17),p=(d.b,d.g,d.c),_=(d.l,d.a,d.k,d.d),v=(d.i,d.h),y=d.m,b=d.j;d.f,d.e,function(){var t=f.a(),e=f.d(1,0,0),r=f.d(0,1,0)}(),function(){var t=n(),e=n()}(),function(){var t=h.a()}()},function(t,e,r){"use strict";function n(){var t=new l.ARRAY_TYPE(3);return l.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function i(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function o(t,e,r){var n=new l.ARRAY_TYPE(3);return n[0]=t,n[1]=e,n[2]=r,n}function a(t,e){var r=e[0],n=e[1],i=e[2],o=r*r+n*n+i*i;return o>0&&(o=1/Math.sqrt(o),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o),t}function s(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function c(t,e,r){var n=e[0],i=e[1],o=e[2],a=r[0],s=r[1],c=r[2];return t[0]=i*c-o*s,t[1]=o*a-n*c,t[2]=n*s-i*a,t}e.a=n,e.d=o,e.f=a,e.c=s,e.b=c,r.d(e,"e",function(){return u});var l=r(1),u=i;!function(){var t=n()}()},function(t,e,r){"use strict";function n(){var t=new y.ARRAY_TYPE(4);return y.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function i(t){var e=new y.ARRAY_TYPE(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function o(t,e,r,n){var i=new y.ARRAY_TYPE(4);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i}function a(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function s(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}function c(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}function l(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}function u(t){var e=t[0],r=t[1],n=t[2],i=t[3];return Math.sqrt(e*e+r*r+n*n+i*i)}function h(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i}function f(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=r*r+n*n+i*i+o*o;return a>0&&(a=1/Math.sqrt(a),t[0]=r*a,t[1]=n*a,t[2]=i*a,t[3]=o*a),t}function d(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function p(t,e,r,n){var i=e[0],o=e[1],a=e[2],s=e[3];return t[0]=i+n*(r[0]-i),t[1]=o+n*(r[1]-o),t[2]=a+n*(r[2]-a),t[3]=s+n*(r[3]-s),t}function _(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]}function v(t,e){var r=t[0],n=t[1],i=t[2],o=t[3],a=e[0],s=e[1],c=e[2],l=e[3];return Math.abs(r-a)<=y.EPSILON*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(n-s)<=y.EPSILON*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(i-c)<=y.EPSILON*Math.max(1,Math.abs(i),Math.abs(c))&&Math.abs(o-l)<=y.EPSILON*Math.max(1,Math.abs(o),Math.abs(l))}e.b=i,e.g=o,e.c=a,e.l=s,e.a=c,e.k=l,e.h=u,e.m=h,e.j=f,e.d=d,e.i=p,e.f=_,e.e=v;var y=r(1);!function(){var t=n()}()},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var r=0;r0}},{key:"isTransparent",value:function(){return this._fillColor.isTransparent()}},{key:"setFillCtx",value:function(t){t.fillStyle=this.fillColor}},{key:"fillColor",set:function(t){return this._fillColor.value=t,this},get:function(){return this._fillColor.value}},{key:"fillOpacity",set:function(t){return this._fillColor.opacity=t,this},get:function(){return this._fillColor.opacity}},{key:"packedFillColor",set:function(t){return this._fillColor.packedValue=t,this},get:function(){return this._fillColor.packedValue}}],[{key:"copyFillStyle",value:function(t,e){void 0===t.packedFillColor?(void 0!==t.fillColor&&(e.fillColor=t.fillColor),void 0!==t.fillOpacity&&(e.fillOpacity=t.fillOpacity)):e.packedFillColor=t.packedFillColor}},{key:"compareFillStyle",value:function(t,e){var r=t.isFillVisible(),n=e.isFillVisible();return r!==n?r-n:t.packedFillColor-e.packedFillColor}},{key:"toJSON",value:function(t){return{fillColor:t.fillColor}}}]),t}()},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){return!e||"object"!==n(e)&&"function"!=typeof e?o(t):e}function o(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function a(t,e,r){return(a="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,r){var n=s(t,e);if(n){var i=Object.getOwnPropertyDescriptor(n,e);return i.get?i.get.call(r):i.value}})(t,e,r||t)}function s(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=c(t)););return t}function c(t){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&u(t,e)}function u(t,e){return(u=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function f(t,e){for(var r=0;r>>24,", ").concat((16711680&t)>>16,", ").concat((65280&t)>>8,", ").concat(p(t),")")}function y(t){if("string"!=typeof t)throw new Error("".concat(t," is not a valid color string"));var e=0,r=null;if(r=t.match(w))e=255,e|=m.a.clamp(Number.parseInt(r[3],10),0,255)<<8,e|=m.a.clamp(Number.parseInt(r[2],10),0,255)<<16,e|=m.a.clamp(Number.parseInt(r[1],10),0,255)<<24;else if(r=t.match(k))e=_(Number.parseFloat(r[4],10)),e|=m.a.clamp(Number.parseInt(r[3],10),0,255)<<8,e|=m.a.clamp(Number.parseInt(r[2],10),0,255)<<16,e|=m.a.clamp(Number.parseInt(r[1],10),0,255)<<24;else if(r=t.match(x))e=255,e|=m.a.clamp(Number.parseInt(r[3],16),0,255)<<8,e|=m.a.clamp(Number.parseInt(r[2],16),0,255)<<16,e|=m.a.clamp(Number.parseInt(r[1],16),0,255)<<24;else{if(!g.has(t))throw new Error("".concat(t," is not a valid color string"));r=g.get(t).match(x),e=255,e|=m.a.clamp(Number.parseInt(r[3],16),0,255)<<8,e|=m.a.clamp(Number.parseInt(r[2],16),0,255)<<16,e|=m.a.clamp(Number.parseInt(r[1],16),0,255)<<24}return e}function b(t,e){return function(r){function n(){return h(this,n),i(this,c(n).apply(this,arguments))}return l(n,r),d(n,[{key:"initializer",value:function(t,e){this._eventHandler=e,a(c(n.prototype),"initializer",this).call(this,t)}},{key:"_checkPackedColorChanged",value:function(r){if(r!==this._color){var n=this._color,i=p(n),o=p(r);this._color=r,this._eventHandler.fire(t,{attr:e,prevVal:v(n),currVal:v(this._color)}),o!==i&&this._eventHandler.fire(t,{attr:"opacity",prevVal:i,currVal:o})}}},{key:"value",set:function(t){var e=y(t);return this._checkPackedColorChanged(e),this},get:function(){return v(this._color)}},{key:"packedValue",set:function(t){var e=0;return e|=t,this._checkPackedColorChanged(e),this},get:function(){return this._color}},{key:"opacity",set:function(e){if("number"!=typeof e)throw new Error("Opacity must be a number between 0-1");var r=255&this._color,n=_(e);return n!==r&&(this._color&=4294967040,this._color|=n,this._eventHandler.fire(t,{attr:"opacity",prevVal:r/255,currVal:n/255})),this},get:function(){return p(this._color)}}]),n}(S)}r.d(e,"b",function(){return S}),e.a=b;var m=r(6),g=new Map([["aliceblue","#F0F8FF"],["antiquewhite","#FAEBD7"],["aqua","#00FFFF"],["aquamarine","#7FFFD4"],["azure","#F0FFFF"],["beige","#F5F5DC"],["bisque","#FFE4C4"],["black","#000000"],["blanchedalmond","#FFEBCD"],["blue","#0000FF"],["blueviolet","#8A2BE2"],["brown","#A52A2A"],["burlywood","#DEB887"],["cadetblue","#5F9EA0"],["chartreuse","#7FFF00"],["chocolate","#D2691E"],["coral","#FF7F50"],["cornflowerblue","#6495ED"],["cornsilk","#FFF8DC"],["crimson","#DC143C"],["cyan","#00FFFF"],["darkblue","#00008B"],["darkcyan","#008B8B"],["darkgoldenrod","#B8860B"],["darkgray","#A9A9A9"],["darkgreen","#006400"],["darkkhaki","#BDB76B"],["darkmagenta","#8B008B"],["darkolivegreen","#556B2F"],["darkorange","#FF8C00"],["darkorchid","#9932CC"],["darkred","#8B0000"],["darksalmon","#E9967A"],["darkseagreen","#8FBC8F"],["darkslateblue","#483D8B"],["darkslategray","#2F4F4F"],["darkturquoise","#00CED1"],["darkviolet","#9400D3"],["deeppink","#FF1493"],["deepskyblue","#00BFFF"],["dimgray","#696969"],["dodgerblue","#1E90FF"],["firebrick","#B22222"],["floralwhite","#FFFAF0"],["forestgreen","#228B22"],["fuchsia","#FF00FF"],["gainsboro","#DCDCDC"],["ghostwhite","#F8F8FF"],["gold","#FFD700"],["goldenrod","#DAA520"],["gray","#808080"],["green","#008000"],["greenyellow","#ADFF2F"],["honeydew","#F0FFF0"],["hotpink","#FF69B4"],["indianred","#CD5C5C"],["indigo","#4B0082"],["ivory","#FFFFF0"],["khaki","#F0E68C"],["lavender","#E6E6FA"],["lavenderblush","#FFF0F5"],["lawngreen","#7CFC00"],["lemonchiffon","#FFFACD"],["lightblue","#ADD8E6"],["lightcoral","#F08080"],["lightcyan","#E0FFFF"],["lightgoldenrodyellow","#FAFAD2"],["lightgray","#D3D3D3"],["lightgreen","#90EE90"],["lightpink","#FFB6C1"],["lightsalmon","#FFA07A"],["lightseagreen","#20B2AA"],["lightskyblue","#87CEFA"],["lightslategray","#778899"],["lightsteelblue","#B0C4DE"],["lightyellow","#FFFFE0"],["lime","#00FF00"],["limegreen","#32CD32"],["linen","#FAF0E6"],["magenta","#FF00FF"],["maroon","#800000"],["mediumaquamarine","#66CDAA"],["mediumblue","#0000CD"],["mediumorchid","#BA55D3"],["mediumpurple","#9370DB"],["mediumseagreen","#3CB371"],["mediumslateblue","#7B68EE"],["mediumspringgreen","#00FA9A"],["mediumturquoise","#48D1CC"],["mediumvioletred","#C71585"],["midnightblue","#191970"],["mintcream","#F5FFFA"],["mistyrose","#FFE4E1"],["moccasin","#FFE4B5"],["navajowhite","#FFDEAD"],["navy","#000080"],["oldlace","#FDF5E6"],["olive","#808000"],["olivedrab","#6B8E23"],["orange","#FFA500"],["orangered","#FF4500"],["orchid","#DA70D6"],["palegoldenrod","#EEE8AA"],["palegreen","#98FB98"],["paleturquoise","#AFEEEE"],["palevioletred","#DB7093"],["papayawhip","#FFEFD5"],["peachpuff","#FFDAB9"],["peru","#CD853F"],["pink","#FFC0CB"],["plum","#DDA0DD"],["powderblue","#B0E0E6"],["purple","#800080"],["rebeccapurple","#663399"],["red","#FF0000"],["rosybrown","#BC8F8F"],["royalblue","#4169E1"],["saddlebrown","#8B4513"],["salmon","#FA8072"],["sandybrown","#F4A460"],["seagreen","#2E8B57"],["seashell","#FFF5EE"],["sienna","#A0522D"],["silver","#C0C0C0"],["skyblue","#87CEEB"],["slateblue","#6A5ACD"],["slategray","#708090"],["snow","#FFFAFA"],["springgreen","#00FF7F"],["steelblue","#4682B4"],["tan","#D2B48C"],["teal","#008080"],["thistle","#D8BFD8"],["tomato","#FF6347"],["turquoise","#40E0D0"],["violet","#EE82EE"],["wheat","#F5DEB3"],["white","#FFFFFF"],["whitesmoke","#F5F5F5"],["yellow","#FFFF00"],["yellowgreen","#9ACD32"]]),w=/^rgb\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)\s*$/i,k=/^rgba\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([0,1](?:\.\d*)?)\s*\)\s*$/i,x=/^#([0-9,a-f,A-F]{2})([0-9,a-f,A-F]{2})([0-9,a-f,A-F]{2})\s*$/i,S=function(){function t(e){h(this,t);for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i0&&this._strokeWidth>0}},{key:"isTransparent",value:function(){return this._strokeColor.isTransparent()}},{key:"setStrokeCtx",value:function(t){t.strokeStyle=this.strokeColor,t.lineWidth=this._strokeWidth,t.lineJoin=this._lineJoin,t.lineCap=this._lineCap,t.setLineDash(this._dashPattern),t.lineDashOffset=this._dashOffset}},{key:"strokeColor",set:function(t){return this._strokeColor.value=t,this},get:function(){return this._strokeColor.value}},{key:"strokeOpacity",set:function(t){this._strokeColor.opacity=t},get:function(){return this._strokeColor.opacity}},{key:"packedStrokeColor",set:function(t){this._strokeColor.packedValue=t},get:function(){return this._strokeColor.packedValue}},{key:"strokeWidth",set:function(t){return a(t),this._strokeWidth=t,this},get:function(){return this._strokeWidth}},{key:"lineJoin",set:function(t){var e=s(t);return this._lineJoin=e,this},get:function(){return _[this._lineJoin]}},{key:"lineCap",set:function(t){var e=c(t);return this._lineCap=e,this},get:function(){return y[this._lineJoin]}},{key:"dashPattern",set:function(t){return l(t),this._dashPattern=t.slice(),this},get:function(){return this._dashPattern.slice()}},{key:"dashOffset",set:function(t){return u(t),this._dashOffset=t,this},get:function(){return this._dashOffset}}],[{key:"copyStrokeStyle",value:function(t,e){void 0===t.packedStrokeColor?(void 0!==t.strokeColor&&(e.strokeColor=t.strokeColor),void 0!==t.strokeOpacity&&(e.strokeOpacity=t.strokeOpacity)):e.packedStrokeColor=t.packedStrokeColor,void 0!==t.strokeWidth&&(e.strokeWidth=t.strokeWidth),void 0!==t.lineJoin&&(e.lineJoin=t.lineJoin),void 0!==t.lineCap&&(e.lineCap=t.lineCap),void 0!==t.dashPattern&&(e.dashPattern=t.dashPattern),void 0!==t.dashOffset&&(e.dashOffset=t.dashOffset)}},{key:"compareStrokeStyle",value:function(t,e){var r=t.isStrokeVisible(),n=e.isStrokeVisible();if(r!==n)return r-n;if(r=t.packedStrokeColor,n=e.packedStrokeColor,r!==n)return r-n;if(r=t.strokeWidth,n=e.strokeWidth,r!==n)return r-n;if(r=t._lineJoin,n=e._lineJoin,r!==n)return r-n;if(r=t._lineCap,n=e._lineCap,r!==n)return r-n;if(r=t._dashPattern,n=e._dashPattern,r.length===n.length&&r.length>0){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:null;this._margins=e&&e.margins?Object.assign({},e.margins):{},E.forEach(function(t){"number"!=typeof r._margins[t]&&(r._margins[t]=0)});var i=d(t),o=i.canvasContainer,a=i.canvas,s=i.canvasContext,c=i.ratio;this._container=o,this._drawCanvas=a,this._drawCtx=s,this._pixelRatio=c,this._parent=t,Object(g.a)(["_resize"],this),this._resize(e),this._resizeSensor=new S.a(t,this._resize),(n||null===n&&e&&e.enableEvents)&&this._enableEvents()}},{key:"_destroyCanvas",value:function(){this._drawCanvas&&this._disableEvents(),this._parent&&(this._parent.removeChild(this._drawCanvas),this._resizeSensor&&this._resizeSensor.detach(this._parent,this._resize)),this._drawCanvas=null,this._drawCtx=null,this._parent=null}},{key:"_init",value:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;this.registerEvents([C.SHAPE_ADD,C.SHAPE_DELETE]),Object(g.a)(["_reorderCb","_rerenderCb"],this),Object(g.a)(["_mousedownCB","_mouseupCB","_mousemoveCB","_clickCB","_dblclickCB","_mouseoverCB","_mouseoutCB"],this),this._renderFrameCb=this.renderAll.bind(this),this._renderRequestId=0,this._ids={shapeId:1},this._objects=new Map,this._sortedObjs=[],this._reorderedObjIdxs=new Set,this._initCanvas(t,e,r),this._styleState=new M({fillColor:"red"})}},{key:"getContainer",value:function(){return this._parent}},{key:"getCanvasContainer",value:function(){return this._container}},{key:"getCanvas",value:function(){return this._drawCanvas}},{key:"project",value:function(t,e){var r=this._camera.screenToWorldMatrix;return y.transformMat2d(t,e,r)}},{key:"unproject",value:function(t,e){var r=this._camera.worldToScreenMatrix;return y.transformMat2d(t,e,r)}},{key:"hasShape",value:function(t){return this._objects.has(t)}},{key:"addShape",value:function(t){var e=t;Array.isArray(e)||(e=[t]),p(e,this._objects,this._ids,this._reorderCb,this._rerenderCb),this.fire("shape:add",{shape:e});var r={target:e};return this._reorderCb(r),this}},{key:"deleteShape",value:function(t){var e=t;Array.isArray(e)||(e=[t]);for(var r=_(e,this._objects,this._reorderCb,this._rerenderCb),n=-1,i=0;i=0&&this._sortedObjs.splice(n,1),this._reorderedObjIdxs.add(r[i]);return this._rerenderCb(),this.fire("shape:delete",{shape:e}),this}},{key:"deleteAllShapes",value:function(){return this.deleteShape(this.sortedShapes.slice()),this}},{key:"moveShapeToTop",value:function(t){if(this._objects.has(t)){var e=this.sortedShapes,r=e[e.length-1].zIndex;t.zIndex=r+1}}},{key:"moveShapeToBack",value:function(t){if(this._objects.has(t)){var e=this.sortedShapes,r=e[0].zIndex;t.zIndex=r}}},{key:"getShapesAsJSON",value:function(){return this.sortedShapes.map(function(t){return t.toJSON()})}},{key:"_rerenderCb",value:function(){this._renderRequestId&&window.cancelAnimationFrame(this._renderRequestId),this._renderRequestId=window.requestAnimationFrame(this._renderFrameCb)}},{key:"_reorderCb",value:function(t){var e=this,r=t.target;Array.isArray(r)||(r=[t.target]),r.forEach(function(t){console.assert(t,"A changed event doesn't have an object");var r=e._objects.get(t);console.assert(r,"A changed event target isn't in the list of shapes ".concat(t)),r.shapeIdx<0&&(r.shapeIdx=e._sortedObjs.push(t)-1),e._reorderedObjIdxs.add(r.shapeIdx)}),this._rerenderCb()}},{key:"_renderShapes",value:function(t,e,r){var n=this,i=r.worldToScreenMatrix;e.forEach(function(e){e.visible&&e.render(t,i,n._styleState)})}},{key:"renderAll",value:function(){var t=this._drawCtx;if(t.clearRect(0,0,this._drawCanvas.offsetWidth,this._drawCanvas.offsetHeight),this._objects.size){t.save();var e=this.sortedShapes;this._styleState.applyDefaults(t),this._renderShapes(t,e,this._camera),t.restore()}}},{key:"sortedShapes",get:function(){return this._reorderedObjIdxs.size&&(console.assert(this._sortedObjs.length===this._objects.size,"Size mismatch when rendering objets. Something got out of sync - sorted objs length: ".concat(this._sortedObjs.length,", objects length: ").concat(this._objects.size)),this._sortedObjs.sort(b.a.shapeCompare),this._reorderedObjIdxs.clear()),this._sortedObjs}},{key:"margins",get:function(){var t=this,e={};return E.forEach(function(r){e[r]=t._margins[r]}),e},set:function(t){var e=this;E.forEach(function(r){"number"==typeof t[r]&&t[r]!==e._margins[r]&&(e._margins[r]=t.prop)}),this._resize()}},{key:"viewport",get:function(){return this._camera.viewport},set:function(t){this._camera.viewport=t}},{key:"projectionDimensions",get:function(){return this._camera.projectionDimensions},set:function(t){return this._camera.projectionDimensions=t,this}},{key:"cameraPosition",get:function(){return this._camera.getPosition()},set:function(t){return this._camera.setPosition(t),this}}]),e}(k.a);P.EventConstants=C},function(t,e,r){"use strict";function n(t,e,r){return(e[o]-t[o])*(r[a]-t[a])-(r[o]-t[o])*(e[a]-t[a])}function i(t){var e=[],r=t.length;if(r<3){for(var i=0;i0?(o[a+1]=0,o[a+2]=1):(o[a+1]=1,o[a+2]=0);for(var c=3;c=0&&o[a+1]>=0&&n(t[o[a]],t[o[a+1]],t[c])<=0;)a+=1;for(a-=1,o[a]=c;o[s]>=0&&o[s+1]>=0&&n(t[o[s-1]],t[o[s]],t[c])<=0;)s-=1;s+=1,o[s]=c}var l=0;for(l=0;l<=s-a-1;l+=1)e[l]=o[a+l];return o[a+l]!==e[0]&&(e[l]=o[a+l]),e}e.a=i;var o=0,a=1},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r=4.0.0"},repository:{type:"git",url:"git+https://github.com/omnisci/mapd-draw.git"},dependencies:{"css-element-queries":"^0.4.0","gl-matrix":"^2.3.2"},devDependencies:{"@babel/core":"^7.0.0","@babel/plugin-proposal-class-properties":"^7.0.0","@babel/plugin-proposal-decorators":"^7.0.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-function-bind":"^7.0.0","@babel/plugin-proposal-function-sent":"^7.0.0","@babel/plugin-proposal-json-strings":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.0.0","@babel/plugin-proposal-numeric-separator":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-proposal-pipeline-operator":"^7.0.0","@babel/plugin-proposal-throw-expressions":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/plugin-syntax-import-meta":"^7.0.0","@babel/preset-env":"^7.0.0","@babel/register":"^7.0.0","babel-eslint":"^10.0.1","babel-loader":"^8.0.0",chai:"^3.5.0",eslint:"^6.0.0","eslint-config-prettier":"^6.5.0","eslint-plugin-prettier":"^3.1.1","http-server":"^0.11.1","json-loader":"0.5.4",mocha:"^6.2.1","pre-commit":"^1.2.2",prettier:"1.18.2",webpack:"^3.12.0"},scripts:{build:"npm run build:prod; npm run build:dev","build:prod":"npm run webpack","build:dev":"npm run webpack:dev",clean:"bash scripts/clean.sh","lint:fix":"eslint --rule 'prettier/prettier: 0' --fix $(find src -name \"*.js\" ! -name '*.spec.js'); prettier --write $(find src -name \"*.js\" ! -name '*.spec.js')",lint:"eslint $(find src -name \"*.js\" ! -name '*.spec.js')",start:"npm run build; http-server -p 8085 -o;","watch:dev":"node node_modules/webpack/bin/webpack.js --progress --colors --watch --config webpack.dev.config.js",webpack:"node node_modules/webpack/bin/webpack.js","webpack:dev":"node node_modules/webpack/bin/webpack.js --config webpack.dev.config.js",test:"mocha --recursive --require @babel/register"},"pre-commit":["lint","test"]}},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r=0&&i<=t.clientWidth&&(o=r-n.top-t.clientTop)>=0&&o<=t.clientHeight}function _(t,e,r){var n=e.getBoundingClientRect();t[0]=r.clientX-n.left-e.clientLeft,t[1]=r.clientY-n.top-e.clientTop}function v(t,e,r,n){_(N,t,e),C.transformMat2d(V,N,n.screenToWorldMatrix);var i=r.shape;i instanceof F.a?E.a(i,r,N,V,n):i instanceof I.a?E.c(i,r,N,V,n):E.b(i,r,N,V,n)}function y(t,e){e.keys={altKey:t.altKey,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,metaKey:t.metaKey}}function b(t){var e=[];return t.forEach(function(t,r){e.push(r)}),e}function m(t,e,r,n,i,o){var a={unselectedShapes:b(r)};g(r),t.save();var s=e[e.length-1].zIndex;t.zIndex=s+1,M.a.copyBasicStyle(n,t),t.selected=!0;var c=null;return(o.scalable||o.rotatable)&&(c=new F.a(i||z,o),t.addChildXform(c)),r.set(t,c),a.selectedShapes=[t],a}function g(t){t.forEach(function(t,e){e.restore(),e.selected=!1,e.removeChildXform(t)}),t.clear()}function w(t,e){var r=[];return e.forEach(function(e){var n=t.get(e);e.restore(),e.selected=!1,e.removeChildXform(n),t.delete(e),r.push(e)}),r}function k(t,e){var r=document.querySelector("".concat("#".concat(e.id," canvas")));return{x:t.offsetX+r.offsetLeft,y:t.offsetY+r.offsetTop}}function x(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:B.SVG_OFFSET,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:B.SVG_OFFSET,o=document.getElementById("cursor"),a=k(t,e);if(null===o){var s=document.createElement("span");s.setAttribute("id","cursor"),s.setAttribute("style","position: absolute; top: ".concat("".concat(a.y,"px"),"; left: ","".concat(a.x,"px"),"; width: 28px; height: 28px; background: ",r,"; cursor: none; z-index: 10; pointer-events: none; transform: translate(").concat(n,"px, ").concat(i,"px)")),e.appendChild(s)}else o.style.background===r?O(t,e):(o.style.background=r,O(t,e))}function S(){var t=document.getElementById("cursor");null!==t&&t.parentNode.removeChild(t)}function O(t,e){var r=document.getElementById("cursor"),n=k(t,e);null!==r&&(r.style.top="".concat("".concat(n.y,"px")),r.style.left="".concat("".concat(n.x,"px")))}r.d(e,"a",function(){return Y});var E=r(27),C=r(3),M=r(8),P=r(21),j=r(4),A=r(12),I=r(36),F=r(37),D="url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Cg transform='rotate(,24,24)'%3E%3Cpolygon style='fill:%23ffffff;' points='16,20 16,12 4,24 16,36 16,28 32,28 32,36 44,24 32,12 32,20 '/%3E%3Cpolygon points='14,22 14,17 7,24 14,31 14,26 34,26 34,31 41,24 34,17 34,22 '/%3E%3C/g%3E%3C/svg%3E\") no-repeat",T="url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Cg transform='rotate(,24,24)'%3E%3Cpath style='fill:%23ffffff;' d='M25.9,4C16.6,4,8.8,11.2,7.4,20.8H6.7H3.3l1.6,2.9l3.8,7.1l1.8,3.3l1.8-3.3l3.8-7.1l1.6-2.9h-3.3h-0.1 c1.3-5.7,6.1-9.9,11.7-9.9c8,0,12.1,4.4,12.1,13.1c0,7.2-5.4,13.1-12.1,13.1h-2v2V42v2h2c10.4,0,18.8-9,18.8-20 C44.7,11.7,37.5,4,25.9,4L25.9,4z'/%3E%3Cpath d='M25.9,6c10.5,0,16.8,6.7,16.8,18c0,9.9-7.5,18-16.8,18v-2.9c7.8,0,14.1-6.8,14.1-15.1c0-5.6-1.8-15.1-14.1-15.1 c-7.4,0-13.4,6.1-14,13.9h2.4l-3.8,7.1l-3.8-7.1h2.5C9.7,13.4,17,6,25.9,6'/%3E%3C/g%3E%3C/svg%3E\") no-repeat",R={SELECTION_CHANGED:"draw:selectionChanged",DRAG_BEGIN:"draw:drag:begin",DRAG_END:"draw:drag:end"},B={SVG_OFFSET:-14,QUICK_CLICK_TIME:500,RIGHT_ANGLE:90,STRAIGHT_ANGLE:180,FORTY_FIVE_ANGLE:45},N=C.create(0,0),V=C.create(0,0),z={fillColor:"white",strokeColor:"black",strokeWidth:2},L=function(){var t=document.getElementById("cursor");null!==t&&(t.style.display="none")},W=function(){var t=document.getElementById("cursor");null!==t&&(t.style.display="block")},X=function(t){t.target.parentNode.style.cursor="default",L()},q=function(t){t.target.parentNode.style.cursor="none",W()},Y=function(t){function e(){return i(this,e),s(this,h(e).apply(this,arguments))}return f(e,t),a(e,[{key:"_mousedownCB",value:function(t){if(p(this._drawCanvas,t.clientX,t.clientY)){this.timer=performance.now(),C.set(N,t.offsetX,t.offsetY),C.transformMat2d(V,N,this._camera.screenToWorldMatrix);var e=this._camera.worldToScreenMatrix,r=this.sortedShapes,n=-1,i=null,o=null;for(n=r.length-1;n>=0;n-=1){var a=this._objects.get(r[n]);if(r[n].selected){i=this._selectedShapes.get(r[n]),o=a;var s=null;if(i&&(s=i.containsPoint(N,V,e,this._drawCtx)).hit){if(i instanceof I.a&&t.altKey&&s.controlIndex canvas")));null===h?(this._parent.addEventListener("mouseout",L),this._parent.addEventListener("mouseover",W)):(h.addEventListener("mouseout",X),h.addEventListener("mouseover",q)),!this._dragInfo&&o.movable&&(this._dragInfo={startLocalPos:i.getPosition()}),this._dragInfo&&(this._dragInfo.shape=i,this._dragInfo.startPos=C.clone(N),this._dragInfo.startWorldPos=C.clone(V),this._dragInfo.objectToWorldMatrix=j.a.clone(i.globalXform),y(t,this._dragInfo),t.stopImmediatePropagation(),this.fire(R.DRAG_BEGIN,{shapes:b(this._selectedShapes)})),t.preventDefault()}}}},{key:"_mouseupCB",value:function(t){if(this._dragInfo&&this._dragInfo.shape){t.stopImmediatePropagation(),t.preventDefault();var e=document.querySelector("".concat("#".concat(this._parent.id," > canvas")));null===e?(this._parent.removeEventListener("mouseout",L),this._parent.removeEventListener("mouseover",W)):(e.removeEventListener("mouseout",X),e.removeEventListener("mouseover",q)),this._dragInfo=null,this.fire(R.DRAG_END,{shapes:b(this._selectedShapes)})}else if(performance.now()-this.timer=0;a-=1)if(o=this._objects.get(n[a]),o.selectable&&n[a].containsPoint(N,V,r,this._drawCtx)){i=n[a];break}if(i&&!i.selected){var s=m(i,n,this._selectedShapes,this._selectStyle,this._xformStyle,o);this.fire(R.SELECTION_CHANGED,s)}}}},{key:"_mousemoveCB",value:function(t){if(p(this._drawCanvas,t.clientX,t.clientY)||this._dragInfo)if(this._dragInfo&&this._dragInfo.shape)O(t,this._parent),y(t,this._dragInfo),v(this._drawCanvas,t,this._dragInfo,this._camera),t.stopImmediatePropagation(),t.preventDefault();else if(!t.buttons&&this._selectedShapes.size){C.set(N,t.offsetX,t.offsetY),C.transformMat2d(V,N,this._camera.screenToWorldMatrix);var e=this._camera.worldToScreenMatrix,r=this.sortedShapes,n=0,i=this._camera.isYFlipped();for(n=r.length-1;n>=0;n-=1)if(r[n].selected){var o=this._objects.get(r[n]),a=this._selectedShapes.get(r[n]),s=null;this._parent.style.cursor="none";for(var c=0;c/g,"".concat(l))))}else s.controlIndex<4?0===s.controlIndex||3===s.controlIndex?x(t,this._parent,"".concat(D.replace(//g,"".concat(-r[n].getRotation()-B.FORTY_FIVE_ANGLE)))):1!==s.controlIndex&&2!==s.controlIndex||x(t,this._parent,"".concat(D.replace(//g,"".concat(-r[n].getRotation()+B.FORTY_FIVE_ANGLE)))):s.controlIndex%2==0?x(t,this._parent,"".concat(D.replace(//g,"".concat(-r[n].getRotation())))):x(t,this._parent,"".concat(D.replace(//g,"".concat(-r[n].getRotation()+B.RIGHT_ANGLE))));else if(a instanceof I.a){this._parent.style.cursor="none";for(var u=0;u=r[n].numVerts?x(t,this._parent,"url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Cpolygon style='fill:%23ffffff;' points='31.2,28 24.8,28 24.8,32.8 20,32.8 20,39.2 24.8,39.2 24.8,44 31.2,44 31.2,39.2 36,39.2 36,32.8 31.2,32.8 '/%3E %3Cpolygon style='fill:%23ffffff' points='12,32 12,4 32.3,24.3 20,24.3 19.7,24.6 '/%3E%3Cpolygon points='13.8,8.2 13.8,27.8 19,22.8 19.2,22.5 28,22.5 '/%3E%3Cpolyline points='29.6,29.6 29.6,34.4 34.4,34.4 34.4,37.6 29.6,37.6 29.6,42.4 26.4,42.4 26.4,37.6 21.6,37.6 21.6,34.4 26.4,34.4 26.4,29.6 29.6,29.6 '/%3E%3C/svg%3E\") no-repeat",-8,-6):t.altKey?x(t,this._parent,"url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Crect style='fill:%23ffffff;' x='20' y='32.8' width='16' height='6.4'/%3E%3Cpolygon style='fill:%23ffffff;' points='12,32 12,4 32.3,24.3 20,24.3 19.7,24.6 '/%3E%3Cpolygon points='13.8,8.2 13.8,27.8 19,22.8 19.2,22.5 28,22.5 '/%3E%3Cpolyline points='34.4,34.4 34.4,37.6 21.6,37.6 21.6,34.4 '/%3E%3C/svg%3E\") no-repeat",-8,-6):x(t,this._parent,"url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Cpath style='fill:%23ffffff;' d='M24,17.5c-3.6,0-6.5,2.9-6.5,6.5s2.9,6.5,6.5,6.5s6.5-2.9,6.5-6.5S27.6,17.5,24,17.5L24,17.5z'/%3E%3Cpath style='fill:%23ffffff;' d='M24,4L4,24l20,20l20-20L24,4z M31.5,31.5h-15v-15h15V31.5z'/%3E%3Cpolygon points='17,34 24,40.5 31,34 '/%3E%3Cpolygon points='31,14 24,7.5 17,14 '/%3E%3Cpolygon points='14,17 7.5,24 14,31 '/%3E%3Cpolygon points='34,31 40.5,24 34,17 '/%3E%3Cpath d='M24,20c2.2,0,4,1.8,4,4s-1.8,4-4,4s-4-1.8-4-4S21.8,20,24,20'/%3E%3C/svg%3E\") no-repeat",B.SVG_OFFSET,B.SVG_OFFSET)}t.stopImmediatePropagation(),t.preventDefault();break}if(r[n].containsPoint(N,V,e,this._drawCtx)){if(o&&o.movable){var h=document.getElementById("cursor");null!==h&&h.parentNode.removeChild(h),this._parent.style.cursor="move";for(var f=0;f=0;n-=1){var i=this._objects.get(r[n]);if(i.selectable&&r[n].containsPoint(N,V,e,this._drawCtx)){if(i.editable&&r[n]instanceof A.a){var o=r[n],a=!1;if(r[n].selected){var s=this._selectedShapes.get(r[n]);s&&(o.restore(),o.removeChildXform(s),a=!(s instanceof F.a))}o.selected=!0,o.save();var c=r[r.length-1].zIndex;o.zIndex=c+1,M.a.copyBasicStyle(this._selectStyle,o);var l=null;a?(i.rotatable||i.scalable)&&(l=new F.a(this._xformStyle||z,i),o.addChildXform(l)):(l=new I.a(o,this._xformStyle),o.addChildXform(l)),this._selectedShapes.set(o,l)}else if(!r[n].selected){var u=m(r[n],r,this._selectedShapes,this._selectStyle,this._xformStyle,i);this.fire(R.SELECTION_CHANGED,u)}break}}n<0&&this._selectedShapes.size?(this._selectedShapes.size&&this.fire(R.SELECTION_CHANGED,{unselectedShapes:b(this._selectedShapes),selectedShapes:[]}),this._dragInfo=null,g(this._selectedShapes)):t.stopImmediatePropagation(),t.preventDefault()}}},{key:"_mouseoverCB",value:function(){}},{key:"_mouseoutCB",value:function(){}},{key:"_init",value:function(t,r){this._activated=r&&r.enableInteractions,l(h(e.prototype),"_init",this).call(this,t,r,this._activated);var n=Object.getOwnPropertyNames(R).map(function(t){return R[t]});this.registerEvents(n),this._dragInfo=null,this._selectedShapes=new Map,this._selectStyle=new M.a(r&&r.selectStyle?r.selectStyle:{fillColor:"orange"}),this._xformStyle=new M.a(r&&r.xformStyle?r.xformStyle:{fillColor:"white",strokeColor:"black",strokeWidth:2}),this.timer=0}},{key:"_renderShapes",value:function(t,e,r){var n=this,i=r.worldToScreenMatrix;e.forEach(function(e){if(e.visible&&(e.render(t,i,n._styleState),e.selected)){var r=n._selectedShapes.get(e);r&&r.render(t,i,n._styleState)}})}},{key:"selectShape",value:function(t){var e=this._objects.get(t);if(e&&e.selectable){var r=m(t,this.sortedShapes,this._selectedShapes,this._selectStyle,this._xformStyle,e);this.fire(R.SELECTION_CHANGED,r)}}},{key:"clearSelection",value:function(){if(this._selectedShapes.size){var t=b(this._selectedShapes);g(this._selectedShapes),this.fire(R.SELECTION_CHANGED,{unselectedShapes:t,selectedShapes:[]}),this._rerenderCb()}}},{key:"addShape",value:function(t){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=t;if(Array.isArray(o)||(o=[t]),l(h(e.prototype),"addShape",this).call(this,o),o.forEach(function(t){var e=r._objects.get(t);e&&(e.selectable=!n||void 0===n.selectable||Boolean(n.selectable),e.movable=!n||void 0===n.movable||Boolean(n.movable),e.rotatable=!n||void 0===n.rotatable||Boolean(n.rotatable),e.scalable=!n||void 0===n.scalable||Boolean(n.scalable),e.uniformScaleOnly=!(!n||void 0===n.uniformScaleOnly)&&Boolean(n.uniformScaleOnly),e.centerScaleOnly=!(!n||void 0===n.centerScaleOnly)&&Boolean(n.centerScaleOnly),e.editable=!n||void 0===n.editable||Boolean(n.editable))}),i){var a={unselectedShapes:b(this._selectedShapes)},s=[];o.forEach(function(t){var e=r._objects.get(t);e.selectable&&(m(t,r.sortedShapes,r._selectedShapes,r._selectStyle,r._xformStyle,e),s.push(t))}),s.length&&(a.selectedShapes=s,this.fire(R.SELECTION_CHANGED,a))}return this}},{key:"deleteShape",value:function(t){var r=t;Array.isArray(r)||(r=[t]);var n=w(this._selectedShapes,r);this.fire(R.SELECTION_CHANGED,{unselectedShapes:n,selectedShapes:b(this._selectedShapes)}),S(),this._parent.style.cursor="default";for(var i=0;i0&&void 0!==arguments[0])||arguments[0])&&this.clearSelection(),this._disableEvents(),this._activated=!1,this}},{key:"selectStyle",set:function(t){M.a.copyBasicStyle(t,this._selectStyle)},get:function(){return this._selectStyle}},{key:"selectedShapes",get:function(){return b(this._selectedShapes)}},{key:"interactionsEnabled",get:function(){return this._activated}}]),e}(P.a);Object.assign(R,P.a.EventConstants),Y.EventConstants=R},function(t,e,r){"use strict";function n(t,e,r,n,i){var o=[0,0],a=[0,0];c.a.svd(o,a,null,r.objectToWorldMatrix);var u=[0,0];s.sub(u,r.startWorldPos,o),l.a.normalize(u,u);var h=o;s.sub(h,i,o),l.a.normalize(h,h);var f=l.a.angle(u,h);r.keys.shiftKey&&(f=Math.round(f/Math.QUATER_PI)*Math.QUATER_PI),e.setRotation(r.startLocalRot+Math.RAD_TO_DEG*f)}function i(t,e,r,i,o){var a=t.parent,u=[0,0],h=[0,0],f=[0,0];if(e.rotate)return void n(t,a,e,r,i,o);var d=e.keys.shiftKey||e.uniformScaleOnly,p=e.keys.altKey||e.centerScaleOnly,_=[0,0];if(c.a.svd(_,null,null,e.objectToWorldMatrix),l.a.sub(h,i,e.startWorldPos),d&&e.controlIndex<4){var v=[e.objectToWorldMatrix[0],e.objectToWorldMatrix[1]],y=[e.objectToWorldMatrix[2],e.objectToWorldMatrix[3]],b=[0,0];e.controlIndex<2&&l.a.negate(v,v),e.controlIndex%2==0&&l.a.negate(y,y),l.a.normalize(v,v),l.a.normalize(y,y),l.a.add(b,v,y),l.a.normalize(b,b);var m=l.a.cross2d(h,b),g=null;0===e.controlIndex||3===e.controlIndex?(g=y,m<0&&(g=v)):(g=v,m<0&&(g=y));var w=l.a.dot(h,g);w=Math.sign(w)*Math.sqrt(2*w*w),l.a.scale(h,b,w),s.addVec2(i,e.startWorldPos,h)}s.copy(u,i),s.transformMat2d(u,u,e.worldToObjectMatrix),l.a.sub(f,u,e.startObjectPos),s.copy(_,e.startLocalPos);var k=0,x=0;if(e.controlIndex<4)k=e.controlIndex<2?-1:1,x=e.controlIndex%2==0?-1:1,p||s.addVec2(_,_,l.a.scale(h,h,.5)),a.setPosition(_);else{var S=e.controlIndex-4,O=[0,0];S%2==0?(l.a.set(O,e.objectToWorldMatrix[0],e.objectToWorldMatrix[1]),x=0,k=S<2?-1:1,d&&(x=k,f[1]=f[0])):(l.a.set(O,e.objectToWorldMatrix[2],e.objectToWorldMatrix[3]),k=0,x=S<2?-1:1,d&&(k=x,f[0]=f[1])),p||(l.a.normalize(O,O),l.a.scale(O,O,l.a.dot(h,O)),s.addVec2(_,_,l.a.scale(O,O,.5))),a.setPosition(_)}p&&(k*=2,x*=2),a.setScale([e.startLocalScale[0]*(1+k*f[0]/e.shapeWidth),e.startLocalScale[1]*(1+x*f[1]/e.shapeHeight)])}function o(t,e,r,n,i){var o=[0,0],a=[0,0];if(c.a.svd(a,null,null,e.objectToWorldMatrix),e.keys.shiftKey){s.sub(o,r,e.startPos);var u=Math.atan2(o[1],o[0]);u=Math.round(u/Math.QUATER_PI)*Math.QUATER_PI;var h=[Math.cos(u),Math.sin(u)];l.a.scale(o,h,l.a.dot(o,h)),l.a.transformMat2(o,o,i.screenToWorldMatrix)}else l.a.sub(o,n,e.startWorldPos);s.addVec2(a,e.startLocalPos,o),t.setPosition(a)}function a(t,e,r,n){var i=t.parent,o=i.numVerts;if(e.controlIndex>=o){var a=Math.min(e.controlIndex-o,o-1),c=a===o-1?0:a+1,u=[0,0],h=[0,0],f=[0,0],d=[0,0],p=i.vertsRef,_=i.globalXform;s.transformMat2d(h,p[a],_),s.transformMat2d(f,p[c],_),s.sub(d,f,h),l.a.scale(d,d,.5),s.addVec2(u,h,d),e.controlIndex=i.insertVert(a+1,u)}else i.setVertPosition(e.controlIndex,n)}e.a=i,e.b=o,e.c=a;var s=r(3),c=r(4),l=r(9)},function(t,e,r){"use strict";function n(){var t=new C.ARRAY_TYPE(4);return C.ARRAY_TYPE!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t}function i(t){var e=new C.ARRAY_TYPE(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function o(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function a(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t}function s(t,e,r,n){var i=new C.ARRAY_TYPE(4);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i}function c(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}function l(t,e){if(t===e){var r=e[1];t[1]=e[2],t[2]=r}else t[0]=e[0],t[1]=e[2],t[2]=e[1],t[3]=e[3];return t}function u(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=r*o-i*n;return a?(a=1/a,t[0]=o*a,t[1]=-n*a,t[2]=-i*a,t[3]=r*a,t):null}function h(t,e){var r=e[0];return t[0]=e[3],t[1]=-e[1],t[2]=-e[2],t[3]=r,t}function f(t){return t[0]*t[3]-t[2]*t[1]}function d(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=r[0],c=r[1],l=r[2],u=r[3];return t[0]=n*s+o*c,t[1]=i*s+a*c,t[2]=n*l+o*u,t[3]=i*l+a*u,t}function p(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c+o*s,t[1]=i*c+a*s,t[2]=n*-s+o*c,t[3]=i*-s+a*c,t}function _(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=r[0],c=r[1];return t[0]=n*s,t[1]=i*s,t[2]=o*c,t[3]=a*c,t}function v(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=-r,t[3]=n,t}function y(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=e[1],t}function b(t){return"mat2("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"}function m(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2))}function g(t,e,r,n){return t[2]=n[2]/n[0],r[0]=n[0],r[1]=n[1],r[3]=n[3]-t[2]*r[1],[t,e,r]}function w(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}function k(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t}function x(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]}function S(t,e){var r=t[0],n=t[1],i=t[2],o=t[3],a=e[0],s=e[1],c=e[2],l=e[3];return Math.abs(r-a)<=C.EPSILON*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(n-s)<=C.EPSILON*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(i-c)<=C.EPSILON*Math.max(1,Math.abs(i),Math.abs(c))&&Math.abs(o-l)<=C.EPSILON*Math.max(1,Math.abs(o),Math.abs(l))}function O(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}function E(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t}Object.defineProperty(e,"__esModule",{value:!0}),e.create=n,e.clone=i,e.copy=o,e.identity=a,e.fromValues=s,e.set=c,e.transpose=l,e.invert=u,e.adjoint=h,e.determinant=f,e.multiply=d,e.rotate=p,e.scale=_,e.fromRotation=v,e.fromScaling=y,e.str=b,e.frob=m,e.LDU=g,e.add=w,e.subtract=k,e.exactEquals=x,e.equals=S,e.multiplyScalar=O,e.multiplyScalarAndAdd=E,r.d(e,"mul",function(){return M}),r.d(e,"sub",function(){return P});var C=r(1),M=d,P=k},function(t,e,r){"use strict";function n(){var t=new E.ARRAY_TYPE(6);return E.ARRAY_TYPE!=Float32Array&&(t[1]=0,t[2]=0,t[4]=0,t[5]=0),t[0]=1,t[3]=1,t}function i(t){var e=new E.ARRAY_TYPE(6);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e}function o(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function a(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function s(t,e,r,n,i,o){var a=new E.ARRAY_TYPE(6);return a[0]=t,a[1]=e,a[2]=r,a[3]=n,a[4]=i,a[5]=o,a}function c(t,e,r,n,i,o,a){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t[4]=o,t[5]=a,t}function l(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=e[4],s=e[5],c=r*o-n*i;return c?(c=1/c,t[0]=o*c,t[1]=-n*c,t[2]=-i*c,t[3]=r*c,t[4]=(i*s-o*a)*c,t[5]=(n*a-r*s)*c,t):null}function u(t){return t[0]*t[3]-t[1]*t[2]}function h(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=e[4],c=e[5],l=r[0],u=r[1],h=r[2],f=r[3],d=r[4],p=r[5];return t[0]=n*l+o*u,t[1]=i*l+a*u,t[2]=n*h+o*f,t[3]=i*h+a*f,t[4]=n*d+o*p+s,t[5]=i*d+a*p+c,t}function f(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=e[4],c=e[5],l=Math.sin(r),u=Math.cos(r);return t[0]=n*u+o*l,t[1]=i*u+a*l,t[2]=n*-l+o*u,t[3]=i*-l+a*u,t[4]=s,t[5]=c,t}function d(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=e[4],c=e[5],l=r[0],u=r[1];return t[0]=n*l,t[1]=i*l,t[2]=o*u,t[3]=a*u,t[4]=s,t[5]=c,t}function p(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=e[4],c=e[5],l=r[0],u=r[1];return t[0]=n,t[1]=i,t[2]=o,t[3]=a,t[4]=n*l+o*u+s,t[5]=i*l+a*u+c,t}function _(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=-r,t[3]=n,t[4]=0,t[5]=0,t}function v(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=e[1],t[4]=0,t[5]=0,t}function y(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=e[0],t[5]=e[1],t}function b(t){return"mat2d("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+")"}function m(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+1)}function g(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t}function w(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t}function k(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t}function x(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t}function S(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]}function O(t,e){var r=t[0],n=t[1],i=t[2],o=t[3],a=t[4],s=t[5],c=e[0],l=e[1],u=e[2],h=e[3],f=e[4],d=e[5];return Math.abs(r-c)<=E.EPSILON*Math.max(1,Math.abs(r),Math.abs(c))&&Math.abs(n-l)<=E.EPSILON*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(i-u)<=E.EPSILON*Math.max(1,Math.abs(i),Math.abs(u))&&Math.abs(o-h)<=E.EPSILON*Math.max(1,Math.abs(o),Math.abs(h))&&Math.abs(a-f)<=E.EPSILON*Math.max(1,Math.abs(a),Math.abs(f))&&Math.abs(s-d)<=E.EPSILON*Math.max(1,Math.abs(s),Math.abs(d))}Object.defineProperty(e,"__esModule",{value:!0}),e.create=n,e.clone=i,e.copy=o,e.identity=a,e.fromValues=s,e.set=c,e.invert=l,e.determinant=u,e.multiply=h,e.rotate=f,e.scale=d,e.translate=p,e.fromRotation=_,e.fromScaling=v,e.fromTranslation=y,e.str=b,e.frob=m,e.add=g,e.subtract=w,e.multiplyScalar=k,e.multiplyScalarAndAdd=x,e.exactEquals=S,e.equals=O,r.d(e,"mul",function(){return C}),r.d(e,"sub",function(){return M});var E=r(1),C=h,M=w},function(t,e,r){"use strict";var n=(r(1),r(15));r(14),n.a,n.a,n.c,n.d,n.h},function(t,e,r){"use strict";function n(){var t=new V.ARRAY_TYPE(2);return V.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0),t}function i(t){var e=new V.ARRAY_TYPE(2);return e[0]=t[0],e[1]=t[1],e}function o(t,e){var r=new V.ARRAY_TYPE(2);return r[0]=t,r[1]=e,r}function a(t,e){return t[0]=e[0],t[1]=e[1],t}function s(t,e,r){return t[0]=e,t[1]=r,t}function c(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t}function l(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t}function u(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t}function h(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t}function f(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t}function d(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t}function p(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t}function _(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t}function v(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t}function y(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t}function b(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t}function m(t,e){var r=e[0]-t[0],n=e[1]-t[1];return Math.sqrt(r*r+n*n)}function g(t,e){var r=e[0]-t[0],n=e[1]-t[1];return r*r+n*n}function w(t){var e=t[0],r=t[1];return Math.sqrt(e*e+r*r)}function k(t){var e=t[0],r=t[1];return e*e+r*r}function x(t,e){return t[0]=-e[0],t[1]=-e[1],t}function S(t,e){return t[0]=1/e[0],t[1]=1/e[1],t}function O(t,e){var r=e[0],n=e[1],i=r*r+n*n;return i>0&&(i=1/Math.sqrt(i),t[0]=e[0]*i,t[1]=e[1]*i),t}function E(t,e){return t[0]*e[0]+t[1]*e[1]}function C(t,e,r){var n=e[0]*r[1]-e[1]*r[0];return t[0]=t[1]=0,t[2]=n,t}function M(t,e,r,n){var i=e[0],o=e[1];return t[0]=i+n*(r[0]-i),t[1]=o+n*(r[1]-o),t}function P(t,e){e=e||1;var r=2*V.RANDOM()*Math.PI;return t[0]=Math.cos(r)*e,t[1]=Math.sin(r)*e,t}function j(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[2]*i,t[1]=r[1]*n+r[3]*i,t}function A(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[2]*i+r[4],t[1]=r[1]*n+r[3]*i+r[5],t}function I(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[3]*i+r[6],t[1]=r[1]*n+r[4]*i+r[7],t}function F(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[4]*i+r[12],t[1]=r[1]*n+r[5]*i+r[13],t}function D(t,e,r,n){var i=e[0]-r[0],o=e[1]-r[1],a=Math.sin(n),s=Math.cos(n);return t[0]=i*s-o*a+r[0],t[1]=i*a+o*s+r[1],t}function T(t,e){var r=t[0],n=t[1],i=e[0],o=e[1],a=r*r+n*n;a>0&&(a=1/Math.sqrt(a));var s=i*i+o*o;s>0&&(s=1/Math.sqrt(s));var c=(r*i+n*o)*a*s;return c>1?0:c<-1?Math.PI:Math.acos(c)}function R(t){return"vec2("+t[0]+", "+t[1]+")"}function B(t,e){return t[0]===e[0]&&t[1]===e[1]}function N(t,e){var r=t[0],n=t[1],i=e[0],o=e[1];return Math.abs(r-i)<=V.EPSILON*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(n-o)<=V.EPSILON*Math.max(1,Math.abs(n),Math.abs(o))}Object.defineProperty(e,"__esModule",{value:!0}),e.create=n,e.clone=i,e.fromValues=o,e.copy=a,e.set=s,e.add=c,e.subtract=l,e.multiply=u,e.divide=h,e.ceil=f,e.floor=d,e.min=p,e.max=_,e.round=v,e.scale=y,e.scaleAndAdd=b,e.distance=m,e.squaredDistance=g,e.length=w,e.squaredLength=k,e.negate=x,e.inverse=S,e.normalize=O,e.dot=E,e.cross=C,e.lerp=M,e.random=P,e.transformMat2=j,e.transformMat2d=A,e.transformMat3=I,e.transformMat4=F,e.rotate=D,e.angle=T,e.str=R,e.exactEquals=B,e.equals=N,r.d(e,"len",function(){return z}),r.d(e,"sub",function(){return L}),r.d(e,"mul",function(){return W}),r.d(e,"div",function(){return X}),r.d(e,"dist",function(){return q}),r.d(e,"sqrDist",function(){return Y}),r.d(e,"sqrLen",function(){return H}),r.d(e,"forEach",function(){return J});var V=r(1),z=w,L=l,W=u,X=h,q=m,Y=g,H=k,J=function(){var t=n();return function(e,r,n,i,o,a){var s=void 0,c=void 0;for(r||(r=2),n||(n=0),c=i?Math.min(i*r+n,e.length):e.length,s=n;s2&&void 0!==arguments[2]&&arguments[2];return i(this,e),n=s(this,l(e).call(this,["changed","changed:xform"])),n._viewport=f.clone(t),n._projectionDimensions=y.d.clone(r),n._yflip=o,n._screenMatrix=v.a.create(),n._screenDirty=!0,n}return u(e,t),a(e,[{key:"isYFlipped",value:function(){return this._yflip}},{key:"viewport",set:function(t){if(!f.equals(t,this._viewport)){var e=f.clone(this._viewport);f.copy(this._viewport,t),this._screenDirty=!0,this._worldToScreenOutdated=!0,this.fire("changed",{attr:"viewport",prevVal:e,currVal:t})}return this},get:function(){return f.clone(this._viewport)}},{key:"viewportRef",get:function(){return this._viewport}},{key:"screenMatrix",get:function(){if(this._screenDirty){var t=[0,0],e=[0,0];f.getCenter(t,this._viewport),f.getExtents(e,this._viewport),v.a.set(this._screenMatrix,e[0],0,0,e[1],t[0],t[1]),this._worldToScreenOutdated=!0,this._screenDirty=!1}return this._screenMatrix}}]),e}(_.a),m=function(t){function e(t,r,n){var o;return i(this,e),o=s(this,l(e).call(this,t,r,n)),o._viewMatrix=v.a.create(),o._viewDirty=!0,o._projMatrix=v.a.create(),o._projDirty=!0,o}return u(e,t),a(e,[{key:"_localXformUpdated",value:function(){this._boundsOutOfDate=!0}},{key:"_globalXformUpdated",value:function(){this._boundsOutOfDate=!0}},{key:"_matricesDirty",value:function(){return this._boundsOutOfDate||this._lxformDirty||this._xformDirty||this._viewDirty||this._projDirty||this._screenDirty}},{key:"projectionDimensions",set:function(t){if(!y.d.equals(t,this._projectionDimensions)){var e=y.d.clone(this._projectionDimensions);f.copy(this._projectionDimensions,t),this._viewDirty=!0,this._projDirty=!0,this.fire("changed",{attr:"projectionDimensions",prevVal:e,currVal:t})}return this},get:function(){return y.d.clone(this._projectionDimensions)}},{key:"projectionDimensionsRef",get:function(){return this._projectionDimensions}},{key:"viewMatrix",get:function(){if(this._viewDirty||this._boundsOutOfDate||this._xformDirty||this._lxformDirty){var t=[0,0],e=[0,0],r=[0,0],n=this.globalXform;v.a.svd(t,e,r,n),v.a.fromTranslation(this._viewMatrix,y.d.negate(t,t)),v.a.rotate(this._viewMatrix,this._viewMatrix,-r[0]),v.a.scale(this._viewMatrix,this._viewMatrix,e),v.a.rotate(this._viewMatrix,this._viewMatrix,-r[1]),this._worldToScreenOutdated=!0,this._viewDirty=!1}return this._viewMatrix}},{key:"projMatrix",get:function(){if(this._projDirty){var t=this._yflip?-1:1;v.a.set(this._projMatrix,2/this._projectionDimensions[0],0,0,2*t/this._projectionDimensions[1],0,0),this._worldToScreenOutdated=!0,this._projDirty=!1}return this._projMatrix}},{key:"worldToScreenMatrix",get:function(){return(!this._worldToScreenMatrix||this._worldToScreenOutdated||this._matricesDirty())&&(this._worldToScreenMatrix||(this._worldToScreenMatrix=v.a.create()),v.a.copy(this._worldToScreenMatrix,this.viewMatrix),v.a.multiply(this._worldToScreenMatrix,this.projMatrix,this._worldToScreenMatrix),v.a.multiply(this._worldToScreenMatrix,this.screenMatrix,this._worldToScreenMatrix),this._worldToScreenOutdated=!1,this._screenToWorldOutdated=!0),this._worldToScreenMatrix}},{key:"screenToWorldMatrix",get:function(){return(!this._screenToWorld||this._screenToWorldOutdated||this._matricesDirty())&&(this._screenToWorld||(this._screenToWorld=v.a.create()),v.a.copy(this._screenToWorld,this.worldToScreenMatrix),v.a.invert(this._screenToWorld,this._screenToWorld),this._screenToWorldOutdated=!1),this._screenToWorld}}]),e}(Object(d.a)(b,Object(p.b)("changed:xform")))},function(t,e,r){var n,i;!function(o,a){n=a,void 0!==(i="function"==typeof n?n.call(e,r,e,t):n)&&(t.exports=i)}(0,function(){function t(t,e){var r=Object.prototype.toString.call(t),n="[object Array]"===r||"[object NodeList]"===r||"[object HTMLCollection]"===r||"[object Object]"===r||"undefined"!=typeof jQuery&&t instanceof jQuery||"undefined"!=typeof Elements&&t instanceof Elements,i=0,o=t.length;if(n)for(;i
',t.appendChild(t.resizeSensor),"static"==a(t,"position")&&(t.style.position="relative");var s,c,l,u,h=t.resizeSensor.childNodes[0],f=h.childNodes[0],d=t.resizeSensor.childNodes[1],p=t.offsetWidth,_=t.offsetHeight,v=function(){f.style.width="100000px",f.style.height="100000px",h.scrollLeft=1e5,h.scrollTop=1e5,d.scrollLeft=1e5,d.scrollTop=1e5};v();var y=function(){c=0,s&&(p=l,_=u,t.resizedAttached&&t.resizedAttached.call())},b=function(){l=t.offsetWidth,u=t.offsetHeight,s=l!=p||u!=_,s&&!c&&(c=e(y)),v()},m=function(t,e,r){t.attachEvent?t.attachEvent("on"+e,r):t.addEventListener(e,r)};m(h,"scroll",b),m(d,"scroll",b)}t(n,function(t){s(t,i)}),this.detach=function(t){r.detach(n,t)}};return r.detach=function(e,r){t(e,function(t){t.resizedAttached&&"function"==typeof r&&(t.resizedAttached.remove(r),t.resizedAttached.length())||t.resizeSensor&&(t.contains(t.resizeSensor)&&t.removeChild(t.resizeSensor),delete t.resizeSensor,delete t.resizedAttached)})},r})},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r0&&c===this._transformedVerts.length-1&&(d.sub(u,this._transformedVerts[0],this._transformedVerts[c]),p.d.scale(u,u,.5),d.addVec2(l,this._transformedVerts[c],u),f.initCenterExtents(o,l,s),f.containsPt(o,t)&&(i.hit=!0,i.controlIndex=this._transformedVerts.length+c))}}return i}},{key:"renderBounds",value:function(t,e,r){this._updateAABox(e),t.save(),t.setTransform(1,0,0,1,0,0),r.setStrokeCtx(t);var n=[0,0],i=[0,0];f.getCenter(n,this._aabox),f.getExtents(i,this._aabox),t.beginPath(),t.rect(n[0]-i[0],n[1]-i[1],2*i[0],2*i[1]),t.stroke(),t.restore()}},{key:"render",value:function(t){var e=this;t.save(),t.setTransform(1,0,0,1,0,0);var r=this._baseVertShape._fullXform,n=this._baseVertShape.vertsRef;this._transformedVerts=new Array(n.length);var i=[0,0],o=[0,0];t.beginPath();var a=0;this._transformedVerts[a]=[0,0],d.transformMat2d(this._transformedVerts[a],n[a],r);var s=Math.max(1.5*t.lineWidth,2.5);for(a=0;a0&&(d.sub(o,this._transformedVerts[0],this._transformedVerts[a]),p.d.scale(o,o,.5),d.addVec2(i,this._transformedVerts[a],o),t.moveTo(i[0]+s,i[1]),t.arc(i[0],i[1],s,0,Math.TWO_PI),t.fillStyle=t.strokeStyle,t.fill()),t.beginPath(),this._transformedVerts.forEach(function(r){t.moveTo(r[0]+e._vertRadius,r[1]),t.arc(r[0],r[1],e._vertRadius,0,Math.TWO_PI)}),this.isFillVisible()&&(this.setFillCtx(t),t.fill()),this.isStrokeVisible()&&(this.setStrokeCtx(t),t.stroke()),t.restore()}}]),e}(_.a)},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r-i&&f<=a&&(d=l*e[1])>-i&&d<=a))&&(u=!0)}return{hit:u,rotate:h}}r.d(e,"a",function(){return x});var v=r(2),y=r(3),b=r(10),m=r(4),g=r(23),w=r(9),k={SIDES:4},x=function(t){function e(t){var r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{scalable:!0,rotatable:!0};return i(this,e),r=s(this,h(e).call(this,t)),r._interactiveBoxSize=8,r._interactiveBoxPadding=10,t&&void 0!==t.vertexSize&&(r._interactiveBoxSize=t.vertexSize),r._scalable=!0,r._rotatable=!0,n&&(void 0!==n.scalable&&(r._scalable=Boolean(n.scalable)),void 0!==n.rotatable&&(r._rotatable=Boolean(n.rotatable))),r}return f(e,t),a(e,[{key:"containsPoint",value:function(t){var e={hit:!1,rotate:!1,controlIndex:-1},r=this.aabox;if((this._rotatable||this._scalable)&&this.visible&&v.containsPt(r,t)){var n=[0,0],i=[0,0];m.a.svd(null,n,i,this._fullXform);var o=m.a.create();n[0]=n[0]<0?-1:1,n[1]=n[1]<0?-1:1,n[0]*n[1]>0&&w.a.negate(i,i),m.a.rotate(o,o,i[1]),m.a.scale(o,o,n),m.a.rotate(o,o,i[0]);for(var a=this._rotatable?this._interactiveBoxPadding:0,s=this._interactiveBoxSize/2,c=this.width/2,l=this.height/2,u=[0,0],h=s+a,f=Math.sqrt(2*h*h),d=0,p=0,b=0;b0&&void 0!==arguments[0]&&arguments[0]||this._geomDirty||this._boundsOutOfDate){var t=this._rotatable?this._interactiveBoxPadding:0,e=t+this._interactiveBoxSize/2;v.initCenterExtents(this._aabox,[0,0],[this.width/2,this.height/2]),v.transformMat2d(this._aabox,this._aabox,this._fullXform),v.expand(this._aabox,this._aabox,[e,e]),this._aaboxUpdated=!0,this._geomDirty=this._boundsOutOfDate=!1}}},{key:"renderBounds",value:function(t,e,r){var n=this.aabox;t.save(),t.setTransform(1,0,0,1,0,0),r.setStrokeCtx(t);var i=[0,0],o=[0,0];v.getCenter(i,n),v.getExtents(o,n),t.beginPath(),t.rect(i[0]-o[0],i[1]-o[1],2*o[0],2*o[1]),t.stroke(),t.restore()}},{key:"render",value:function(t,r,n){if(this.parent&&void 0!==this.parent.width&&"undefined"!==this.parent.height){this._aaboxUpdated=!1,l(h(e.prototype),"render",this).call(this,t,r,n,!1),this._aaboxUpdated||this._updateAABox(!0);var i=[0,0],o=[0,0];m.a.svd(null,i,o,this._fullXform),i[0]=i[0]<0?-1:1,i[1]=i[1]<0?-1:1;var a=this._interactiveBoxSize/2,s=this.width/2,c=this.height/2,u=[s,c];t.save(),t.beginPath(),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,s,-c),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,-s,-c),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,-s,c),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),this._scalable&&(y.set(u,0,c),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,0,-c),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,s,0),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,-s,0),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i)),this.isFillVisible()&&(n.setFillStyle(t,this),t.fill()),this.isStrokeVisible()&&(n.setStrokeStyle(t,this),t.setTransform(1,0,0,1,0,0),t.stroke()),t.restore()}}},{key:"width",get:function(){return this.parent&&"undefined"!==this.parent.width?this.parent.width:0}},{key:"height",get:function(){return this.parent&&"undefined"!==this.parent.height?this.parent.height:0}}]),e}(g.a)},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r=_.MINIMUM_POINTS){t.moveTo(this._verts[0][0],this._verts[0][1]);for(var r=1;rt[F]||t[I]>t[D]}function d(t){return!(isFinite(t[A])&&isFinite(t[I])&&isFinite(t[F])&&isFinite(t[D]))}function p(t,e){var r=t[0],n=t[1],i=t[2],o=t[3],a=e[0],s=e[1],c=e[2],l=e[3];return Math.abs(r-a)<=j.a.EPSILON&&Math.abs(n-s)<=j.a.EPSILON&&Math.abs(i-c)<=j.a.EPSILON&&Math.abs(o-l)<=j.a.EPSILON}function _(t,e){return j.d.set(t,e[F]-e[A],e[D]-e[I])}function v(t,e){return _(t,e),j.d.scale(t,t,.5)}function y(t,e){return v(t,e),t[A]+=e[A],t[I]+=e[I],t}function b(t,e,r){t[A]=e[A]-r[0],t[F]=e[F]+r[0],t[I]=e[I]-r[1],t[D]=e[D]+r[1]}function m(t){return(t[F]-t[A])*(t[D]-t[I])}function g(t,e,r){return i(Math.min(e[A],r[A]),Math.min(e[I],r[I]),Math.max(e[F],r[F]),Math.max(e[D],r[D]))}function w(t,e,r){var n=t;t===e&&(n=i());for(var o=A,c=F;o<=I&&!(e[c]r[c]);o+=1,c+=1)n[o]=Math.max(e[o],r[o]),n[c]=Math.min(e[c],r[c]);return o!==I+1&&s(n),t===e&&a(t,n),t}function k(t,e){return!(t[F]<=e[A]||t[A]>=e[F]||t[D]<=e[I]||t[I]>=e[D])}function x(t,e){return!(e[A]t[F]||e[I]t[D])}function S(t,e){return e[A]>=t[A]&&e[A]<=t[F]&&e[I]>=t[I]&&e[I]<=t[D]}function O(t,e,r){return t!==e&&a(t,e),f(e)?(t[A]=r[A],t[F]=r[A],t[I]=r[I],t[D]=r[I]):(r[A]t[F]&&(t[F]=r[A]),r[I]t[D]&&(t[D]=r[I])),t}function E(t,e,r){t[A]=e[A]+r[0],t[I]=e[I]+r[1],t[F]=e[F]+r[0],t[D]=e[D]+r[1]}function C(t,e,r,n){var o=t;t===e&&(o=i()),s(o);var c=j.d.set(j.d.create(),e[A],e[I]),l=j.d.create();return n(l,c,r),O(o,o,l),c[A]=e[F],n(l,c,r),O(o,o,l),c[I]=e[D],n(l,c,r),O(o,o,l),c[A]=e[A],n(l,c,r),O(o,o,l),t===e&&a(t,o),t}function M(t,e,r){return C(t,e,r,j.d.transformMat2)}function P(t,e,r){return C(t,e,r,j.d.transformMat2d)}Object.defineProperty(e,"__esModule",{value:!0}),r.d(e,"MINX",function(){return A}),r.d(e,"MINY",function(){return I}),r.d(e,"MAXX",function(){return F}),r.d(e,"MAXY",function(){return D}),e.set=n,e.create=i,e.clone=o,e.copy=a,e.initEmpty=s,e.initInfinity=c,e.initSizeFromOrigin=l,e.initSizeFromLocation=u,e.initCenterExtents=h,e.isEmpty=f,e.isInfinite=d,e.equals=p,e.getSize=_,e.getExtents=v,e.getCenter=y,e.expand=b,e.area=m,e.hull=g,e.intersection=w,e.overlaps=k,e.contains=x,e.containsPt=S,e.encapsulatePt=O,e.translate=E,e.transformMat2=M,e.transformMat2d=P;var j=r(0),A=0,I=1,F=2,D=3,T={BOX_SIDES:4}},function(t,e,r){"use strict";function n(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return t[m]=e,t[g]=r,t}function i(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return n(new b.a.ARRAY_TYPE(2),t,e)}function o(t){var e=new b.a.ARRAY_TYPE(2);return e[m]=t[m],e[g]=t[g],e}function a(t,e){return t[m]=e[m],t[g]=e[g],t}function s(t,e){return i(t,e)}function c(t,e,r){return b.d.add(t,e,r)}function l(t,e,r){return b.d.sub(t,e,r)}function u(t,e,r){return b.d.transformMat2(t,e,r)}function h(t,e,r){return b.d.transformMat2d(t,e,r)}function f(t){return"point2d(".concat(t[0]," , ").concat(t[1],")")}function d(t,e){return b.d.distance(t,e)}function p(t,e){return b.d.squaredDistance(t,e)}function _(t,e,r,n){return b.d.lerp(t,e,r,n)}function v(t,e){return b.d.equals(t,e)}function y(t,e){return b.d.exactEquals(t,e)}Object.defineProperty(e,"__esModule",{value:!0}),e.set=n,e.create=i,e.clone=o,e.copy=a,e.initFromValues=s,e.addVec2=c,e.sub=l,e.transformMat2=u,e.transformMat2d=h,e.str=f,e.distance=d,r.d(e,"dist",function(){return w}),e.squaredDistance=p,r.d(e,"sqrDist",function(){return k}),e.lerp=_,e.equals=v,e.exactEquals=y;var b=r(0),m=0,g=1,w=d,k=p},function(t,e,r){"use strict";var n=r(0);n.c.svd=function(t,e,r,n){if(t&&(t[0]=n[4],t[1]=n[5]),e||r){var i=(n[0]+n[3])/2,o=(n[0]-n[3])/2,a=(n[1]+n[2])/2,s=(n[1]-n[2])/2;if(e){var c=Math.sqrt(i*i+s*s),l=Math.sqrt(o*o+a*a);e[0]=c+l,e[1]=c-l}if(r){var u=Math.atan2(a,o),h=Math.atan2(s,i);r[0]=(h-u)/2,r[1]=(h+u)/2}}},e.a=n.c},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){return!e||"object"!==n(e)&&"function"!=typeof e?s(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function s(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function c(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&l(t,e)}function l(t,e){return(l=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}var u=function(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;nr?r:t}function i(t){return t<0?0:t>1?1:t}function o(t,e,r){return t*(1-r)+e*r}Math.QUATER_PI=.25*Math.PI,Math.HALF_PI=.5*Math.PI,Math.HALF_NPI=-.5*Math.PI,Math.TWO_PI=2*Math.PI,Math.NPI=-Math.PI,Math.NQUATER_PI=.25*Math.NPI,Math.NHALF_PI=.5*Math.NPI,Math.NTWO_PI=2*Math.NPI,Math.INV_PI=1/Math.PI,Math.RAD_TO_DEG=180/Math.PI,Math.DEG_TO_RAD=Math.PI/180,Math.EPS=1e-5,Math.clamp=n,Math.clamp01=i,Math.lerp=o,e.a=Math},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r3&&void 0!==arguments[3]?arguments[3]:null,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;this.transformCtx(t,this._fullXform,e),t.beginPath();var o=this._draw(t);(o||void 0===o)&&(this.isFillVisible()&&(null===n||Boolean(n))&&(r.setFillStyle(t,this),t.fill()),this.isStrokeVisible()&&(null===i||Boolean(i))&&(r.setStrokeStyle(t,this),t.setTransform(1,0,0,1,0,0),t.stroke()))}},{key:"setStyle",value:function(t){return y.a.copyBasicStyle(t,this),this}},{key:"toJSON",value:function(){var t=this;return this._stateStack&&this._stateStack.length&&(t=this._stateStack[0]),Object.assign({visible:this.visible,zIndex:t.zIndex},y.a.toJSON(t),_.c.toJSON(this))}},{key:"visible",get:function(){return this._visible&&(this.isFillVisible()||this.isStrokeVisible())}}],[{key:"shapeCompare",value:function(t,e){var r=t.zIndex,n=e.zIndex;if(rn)return 1;var i=d.b.compareFillStyle(t,e);return i||(i=p.b.compareStrokeStyle(t,e)),i}}]),e}(Object(v.a)(g,Object(_.b)("changed:xform"),Object(d.a)("changed:style"),Object(p.a)("changed:style")))},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r=e.length)return 0;var o=0,s=null;return s=t.get(e[r]),s&&(o=a(s[0],e,r+1,n),s[1].forEach(function(t){return t.call(i,n)}),o+=s[1].length),o}function s(t,e){var r=-1,n=t[0],i=t[1];i.length&&e.forEach(function(t){(r=i.indexOf(t))>=0&&i.splice(r,1)}),n.forEach(function(t){s(t,e)})}function c(t){var e=t;if("string"==typeof t)e=[t];else if(!Array.isArray(t))throw new Error("Input must be an array of strings");return e}r.d(e,"a",function(){return l});var l=function(){function t(e){n(this,t),this.initializer(e)}return o(t,[{key:"initializer",value:function(t){this._listeners=new Map,this.registerEvents(t)}},{key:"registerEvents",value:function(t){var e=this;if(t){var r=c(t);if("string"==typeof t)r=[t];else if(!Array.isArray(t))throw new Error("Events must be an array of strings");r.forEach(function(t){for(var r=t.split(":"),n=e._listeners,i=0;it[2]&&(t[2]=e[0],n[2]=r),e[1]t[3]&&(t[3]=e[1],n[3]=r))}function _(t,e,r){var n=e[0]*r[1]-r[0]*e[1];return t[0]+=(e[0]+r[0])*n,t[1]+=(e[1]+r[1])*n,n}function v(t){return Array.isArray(t)||ArrayBuffer&&ArrayBuffer.isView(t)}r.d(e,"a",function(){return S});var y=r(2),b=r(3),m=r(7),g=r(0),w=r(6),k=r(22),x=g.c.create(),S=function(t){function e(t){var r;i(this,e);var n=t.verts||[];if(r=s(this,h(e).call(this,t)),!v(n)||0===n.length||v(n[0])&&n.length<1||!v(n[0])&&(n.length<2||n.length%2!=0))throw new Error("PolyLine shapes must be initialized with an array of 2d points and contain at least 1 points");r._extentIndices=[-1,-1,-1,-1],r._localaabox=y.create(),r._verts=[],r._centroid=[0,0],y.initEmpty(r._aabox);var o=0,a=0;if(v(n[0])){for(a=0;a=this._verts.length)throw new Error("Cannot translate vertex at index ".concat(t,". There are only ").concat(this._verts.length," vertices in the polygon."));if(e[0]||e[1]){var r=b.clone(this._verts[t]),n=b.clone(this._verts[t]);b.addVec2(n,n,e),this._collapseVerts(),this._resetAABox=!0,this._geomDirty=!0,b.copy(n),this.fire("changed:geom",{attr:"verts[".concat(t,"]"),prevVal:r,currVal:n})}return this}},{key:"setVertPosition",value:function(t,e){if(t>=this._verts.length)throw new Error("Cannot translate vertex at index ".concat(t,". There are only ").concat(this._verts.length," vertices in the polygon."));if(!b.equals(e,this._verts[t])){var r=b.clone(this._verts[t]);this._collapseVerts(),b.copy(this._verts[t],e),this._resetAABox=!0,this._geomDirty=!0,this.fire("changed:geom",{attr:"verts[".concat(t,"]"),prevVal:r,currVal:e})}}},{key:"insertVert",value:function(t,e){var r=w.a.min(w.a.max(t,0),this._verts.length);return this._collapseVerts(),t>=this._verts.length?(this._verts.push(b.clone(e)),r=this._verts.length-1):this._verts.splice(t,0,b.clone(e)),this._resetAABox=!0,this._geomDirty=!0,this.fire("changed:geom:addvert",{attr:"verts[".concat(r,"]"),currVal:e}),r}},{key:"appendVert",value:function(t){return this.insertVert(this._verts.length,t)}},{key:"removeVert",value:function(t){if(t>=this._verts.length||t<0)throw new Error("Cannot remove vertex ".concat(t,". Invalid index. There are only ").concat(this._verts.length," vertices in the shape."));var e=this._verts[t];return this._verts.splice(t,1),this._collapseVerts(),this._resetAABox=!0,this._geomDirty=!0,this.fire("changed:geom:removevert",{attr:"verts[".concat(t,"]"),currVal:e}),t}},{key:"_rebuildAABox",value:function(){var t=this;y.initEmpty(this._aabox),this._verts.length<3?this._convexHull=this._verts.map(function(t,e){return e}):this._convexHull=Object(k.a)(this._verts),this._convexHull.forEach(function(e){p(t._aabox,t._verts[e],e,t._extentIndices)});var e=b.create(0,0);y.getCenter(e,this._aabox),this.pivot=e}},{key:"_updateAABox",value:function(){var t=this;if(this._resetAABox&&(this._rebuildAABox(),this._resetAABox=!1),this._boundsOutOfDate||this._geomDirty){y.initEmpty(this._aabox);var e=[0,0],r=this.globalXform;if(this._convexHull.forEach(function(n){y.encapsulatePt(t._aabox,t._aabox,b.transformMat2d(e,t._verts[n],r))}),this._boundsOutOfDate=!1,this._geomDirty){var n=b.create();n[0]=this._verts[this._extentIndices[0]][0]+.5*(this._verts[this._extentIndices[2]][0]-this._verts[this._extentIndices[0]][0]),n[1]=this._verts[this._extentIndices[1]][1]+.5*(this._verts[this._extentIndices[3]][1]-this._verts[this._extentIndices[1]][1]),this.pivot=n,this._geomDirty=!1}}}},{key:"_draw",value:function(t){var e=!1;if(this._verts.length>=2){t.moveTo(this._verts[0][0],this._verts[0][1]);for(var r=1;r0?(n=2*Math.sqrt(r+1),t[3]=.25*n,t[0]=(e[6]-e[9])/n,t[1]=(e[8]-e[2])/n,t[2]=(e[1]-e[4])/n):e[0]>e[5]&&e[0]>e[10]?(n=2*Math.sqrt(1+e[0]-e[5]-e[10]),t[3]=(e[6]-e[9])/n,t[0]=.25*n,t[1]=(e[1]+e[4])/n,t[2]=(e[8]+e[2])/n):e[5]>e[10]?(n=2*Math.sqrt(1+e[5]-e[0]-e[10]),t[3]=(e[8]-e[2])/n,t[0]=(e[1]+e[4])/n,t[1]=.25*n,t[2]=(e[6]+e[9])/n):(n=2*Math.sqrt(1+e[10]-e[0]-e[5]),t[3]=(e[1]-e[4])/n,t[0]=(e[8]+e[2])/n,t[1]=(e[6]+e[9])/n,t[2]=.25*n),t}e.b=n,e.a=i;r(1)},function(t,e,r){"use strict";function n(){var t=new u.ARRAY_TYPE(4);return u.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function i(t,e,r){r*=.5;var n=Math.sin(r);return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=Math.cos(r),t}function o(t,e,r){r*=.5;var n=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c+a*s,t[1]=i*c+o*s,t[2]=o*c-i*s,t[3]=a*c-n*s,t}function a(t,e,r){r*=.5;var n=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c-o*s,t[1]=i*c+a*s,t[2]=o*c+n*s,t[3]=a*c-i*s,t}function s(t,e,r){r*=.5;var n=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c+i*s,t[1]=i*c-n*s,t[2]=o*c+a*s,t[3]=a*c-o*s,t}function c(t,e,r,n){var i=e[0],o=e[1],a=e[2],s=e[3],c=r[0],l=r[1],h=r[2],f=r[3],d=void 0,p=void 0,_=void 0,v=void 0,y=void 0;return p=i*c+o*l+a*h+s*f,p<0&&(p=-p,c=-c,l=-l,h=-h,f=-f),1-p>u.EPSILON?(d=Math.acos(p),_=Math.sin(d),v=Math.sin((1-n)*d)/_,y=Math.sin(n*d)/_):(v=1-n,y=n),t[0]=v*i+y*c,t[1]=v*o+y*l,t[2]=v*a+y*h,t[3]=v*s+y*f,t}function l(t,e){var r=e[0]+e[4]+e[8],n=void 0;if(r>0)n=Math.sqrt(r+1),t[3]=.5*n,n=.5/n,t[0]=(e[5]-e[7])*n,t[1]=(e[6]-e[2])*n,t[2]=(e[1]-e[3])*n;else{var i=0;e[4]>e[0]&&(i=1),e[8]>e[3*i+i]&&(i=2);var o=(i+1)%3,a=(i+2)%3;n=Math.sqrt(e[3*i+i]-e[3*o+o]-e[3*a+a]+1),t[i]=.5*n,n=.5/n,t[3]=(e[3*o+a]-e[3*a+o])*n,t[o]=(e[3*o+i]+e[3*i+o])*n,t[a]=(e[3*a+i]+e[3*i+a])*n}return t}e.b=n,e.e=o,e.f=a,e.g=s,r.d(e,"a",function(){return p}),r.d(e,"c",function(){return _}),r.d(e,"d",function(){return v}),r.d(e,"h",function(){return y});var u=r(1),h=r(13),f=r(16),d=r(17),p=(d.b,d.g,d.c),_=(d.l,d.a,d.k,d.d),v=(d.i,d.h),y=d.m,b=d.j;d.f,d.e,function(){var t=f.a(),e=f.d(1,0,0),r=f.d(0,1,0)}(),function(){var t=n(),e=n()}(),function(){var t=h.a()}()},function(t,e,r){"use strict";function n(){var t=new l.ARRAY_TYPE(3);return l.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function i(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function o(t,e,r){var n=new l.ARRAY_TYPE(3);return n[0]=t,n[1]=e,n[2]=r,n}function a(t,e){var r=e[0],n=e[1],i=e[2],o=r*r+n*n+i*i;return o>0&&(o=1/Math.sqrt(o),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o),t}function s(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function c(t,e,r){var n=e[0],i=e[1],o=e[2],a=r[0],s=r[1],c=r[2];return t[0]=i*c-o*s,t[1]=o*a-n*c,t[2]=n*s-i*a,t}e.a=n,e.d=o,e.f=a,e.c=s,e.b=c,r.d(e,"e",function(){return u});var l=r(1),u=i;!function(){var t=n()}()},function(t,e,r){"use strict";function n(){var t=new y.ARRAY_TYPE(4);return y.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function i(t){var e=new y.ARRAY_TYPE(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function o(t,e,r,n){var i=new y.ARRAY_TYPE(4);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i}function a(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function s(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}function c(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}function l(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}function u(t){var e=t[0],r=t[1],n=t[2],i=t[3];return Math.sqrt(e*e+r*r+n*n+i*i)}function h(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i}function f(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=r*r+n*n+i*i+o*o;return a>0&&(a=1/Math.sqrt(a),t[0]=r*a,t[1]=n*a,t[2]=i*a,t[3]=o*a),t}function d(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function p(t,e,r,n){var i=e[0],o=e[1],a=e[2],s=e[3];return t[0]=i+n*(r[0]-i),t[1]=o+n*(r[1]-o),t[2]=a+n*(r[2]-a),t[3]=s+n*(r[3]-s),t}function _(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]}function v(t,e){var r=t[0],n=t[1],i=t[2],o=t[3],a=e[0],s=e[1],c=e[2],l=e[3];return Math.abs(r-a)<=y.EPSILON*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(n-s)<=y.EPSILON*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(i-c)<=y.EPSILON*Math.max(1,Math.abs(i),Math.abs(c))&&Math.abs(o-l)<=y.EPSILON*Math.max(1,Math.abs(o),Math.abs(l))}e.b=i,e.g=o,e.c=a,e.l=s,e.a=c,e.k=l,e.h=u,e.m=h,e.j=f,e.d=d,e.i=p,e.f=_,e.e=v;var y=r(1);!function(){var t=n()}()},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var r=0;r0}},{key:"isTransparent",value:function(){return this._fillColor.isTransparent()}},{key:"setFillCtx",value:function(t){t.fillStyle=this.fillColor}},{key:"fillColor",set:function(t){return this._fillColor.value=t,this},get:function(){return this._fillColor.value}},{key:"fillOpacity",set:function(t){return this._fillColor.opacity=t,this},get:function(){return this._fillColor.opacity}},{key:"packedFillColor",set:function(t){return this._fillColor.packedValue=t,this},get:function(){return this._fillColor.packedValue}}],[{key:"copyFillStyle",value:function(t,e){void 0===t.packedFillColor?(void 0!==t.fillColor&&(e.fillColor=t.fillColor),void 0!==t.fillOpacity&&(e.fillOpacity=t.fillOpacity)):e.packedFillColor=t.packedFillColor}},{key:"compareFillStyle",value:function(t,e){var r=t.isFillVisible(),n=e.isFillVisible();return r!==n?r-n:t.packedFillColor-e.packedFillColor}},{key:"toJSON",value:function(t){return{fillColor:t.fillColor}}}]),t}()},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){return!e||"object"!==n(e)&&"function"!=typeof e?o(t):e}function o(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function a(t,e,r){return(a="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,r){var n=s(t,e);if(n){var i=Object.getOwnPropertyDescriptor(n,e);return i.get?i.get.call(r):i.value}})(t,e,r||t)}function s(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=c(t)););return t}function c(t){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&u(t,e)}function u(t,e){return(u=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function f(t,e){for(var r=0;r>>24,", ").concat((16711680&t)>>16,", ").concat((65280&t)>>8,", ").concat(p(t),")")}function y(t){if("string"!=typeof t)throw new Error("".concat(t," is not a valid color string"));var e=0,r=null;if(r=t.match(w))e=255,e|=m.a.clamp(Number.parseInt(r[3],10),0,255)<<8,e|=m.a.clamp(Number.parseInt(r[2],10),0,255)<<16,e|=m.a.clamp(Number.parseInt(r[1],10),0,255)<<24;else if(r=t.match(k))e=_(Number.parseFloat(r[4],10)),e|=m.a.clamp(Number.parseInt(r[3],10),0,255)<<8,e|=m.a.clamp(Number.parseInt(r[2],10),0,255)<<16,e|=m.a.clamp(Number.parseInt(r[1],10),0,255)<<24;else if(r=t.match(x))e=255,e|=m.a.clamp(Number.parseInt(r[3],16),0,255)<<8,e|=m.a.clamp(Number.parseInt(r[2],16),0,255)<<16,e|=m.a.clamp(Number.parseInt(r[1],16),0,255)<<24;else{if(!g.has(t))throw new Error("".concat(t," is not a valid color string"));r=g.get(t).match(x),e=255,e|=m.a.clamp(Number.parseInt(r[3],16),0,255)<<8,e|=m.a.clamp(Number.parseInt(r[2],16),0,255)<<16,e|=m.a.clamp(Number.parseInt(r[1],16),0,255)<<24}return e}function b(t,e){return function(r){function n(){return h(this,n),i(this,c(n).apply(this,arguments))}return l(n,r),d(n,[{key:"initializer",value:function(t,e){this._eventHandler=e,a(c(n.prototype),"initializer",this).call(this,t)}},{key:"_checkPackedColorChanged",value:function(r){if(r!==this._color){var n=this._color,i=p(n),o=p(r);this._color=r,this._eventHandler.fire(t,{attr:e,prevVal:v(n),currVal:v(this._color)}),o!==i&&this._eventHandler.fire(t,{attr:"opacity",prevVal:i,currVal:o})}}},{key:"value",set:function(t){var e=y(t);return this._checkPackedColorChanged(e),this},get:function(){return v(this._color)}},{key:"packedValue",set:function(t){var e=0;return e|=t,this._checkPackedColorChanged(e),this},get:function(){return this._color}},{key:"opacity",set:function(e){if("number"!=typeof e)throw new Error("Opacity must be a number between 0-1");var r=255&this._color,n=_(e);return n!==r&&(this._color&=4294967040,this._color|=n,this._eventHandler.fire(t,{attr:"opacity",prevVal:r/255,currVal:n/255})),this},get:function(){return p(this._color)}}]),n}(S)}r.d(e,"b",function(){return S}),e.a=b;var m=r(6),g=new Map([["aliceblue","#F0F8FF"],["antiquewhite","#FAEBD7"],["aqua","#00FFFF"],["aquamarine","#7FFFD4"],["azure","#F0FFFF"],["beige","#F5F5DC"],["bisque","#FFE4C4"],["black","#000000"],["blanchedalmond","#FFEBCD"],["blue","#0000FF"],["blueviolet","#8A2BE2"],["brown","#A52A2A"],["burlywood","#DEB887"],["cadetblue","#5F9EA0"],["chartreuse","#7FFF00"],["chocolate","#D2691E"],["coral","#FF7F50"],["cornflowerblue","#6495ED"],["cornsilk","#FFF8DC"],["crimson","#DC143C"],["cyan","#00FFFF"],["darkblue","#00008B"],["darkcyan","#008B8B"],["darkgoldenrod","#B8860B"],["darkgray","#A9A9A9"],["darkgreen","#006400"],["darkkhaki","#BDB76B"],["darkmagenta","#8B008B"],["darkolivegreen","#556B2F"],["darkorange","#FF8C00"],["darkorchid","#9932CC"],["darkred","#8B0000"],["darksalmon","#E9967A"],["darkseagreen","#8FBC8F"],["darkslateblue","#483D8B"],["darkslategray","#2F4F4F"],["darkturquoise","#00CED1"],["darkviolet","#9400D3"],["deeppink","#FF1493"],["deepskyblue","#00BFFF"],["dimgray","#696969"],["dodgerblue","#1E90FF"],["firebrick","#B22222"],["floralwhite","#FFFAF0"],["forestgreen","#228B22"],["fuchsia","#FF00FF"],["gainsboro","#DCDCDC"],["ghostwhite","#F8F8FF"],["gold","#FFD700"],["goldenrod","#DAA520"],["gray","#808080"],["green","#008000"],["greenyellow","#ADFF2F"],["honeydew","#F0FFF0"],["hotpink","#FF69B4"],["indianred","#CD5C5C"],["indigo","#4B0082"],["ivory","#FFFFF0"],["khaki","#F0E68C"],["lavender","#E6E6FA"],["lavenderblush","#FFF0F5"],["lawngreen","#7CFC00"],["lemonchiffon","#FFFACD"],["lightblue","#ADD8E6"],["lightcoral","#F08080"],["lightcyan","#E0FFFF"],["lightgoldenrodyellow","#FAFAD2"],["lightgray","#D3D3D3"],["lightgreen","#90EE90"],["lightpink","#FFB6C1"],["lightsalmon","#FFA07A"],["lightseagreen","#20B2AA"],["lightskyblue","#87CEFA"],["lightslategray","#778899"],["lightsteelblue","#B0C4DE"],["lightyellow","#FFFFE0"],["lime","#00FF00"],["limegreen","#32CD32"],["linen","#FAF0E6"],["magenta","#FF00FF"],["maroon","#800000"],["mediumaquamarine","#66CDAA"],["mediumblue","#0000CD"],["mediumorchid","#BA55D3"],["mediumpurple","#9370DB"],["mediumseagreen","#3CB371"],["mediumslateblue","#7B68EE"],["mediumspringgreen","#00FA9A"],["mediumturquoise","#48D1CC"],["mediumvioletred","#C71585"],["midnightblue","#191970"],["mintcream","#F5FFFA"],["mistyrose","#FFE4E1"],["moccasin","#FFE4B5"],["navajowhite","#FFDEAD"],["navy","#000080"],["oldlace","#FDF5E6"],["olive","#808000"],["olivedrab","#6B8E23"],["orange","#FFA500"],["orangered","#FF4500"],["orchid","#DA70D6"],["palegoldenrod","#EEE8AA"],["palegreen","#98FB98"],["paleturquoise","#AFEEEE"],["palevioletred","#DB7093"],["papayawhip","#FFEFD5"],["peachpuff","#FFDAB9"],["peru","#CD853F"],["pink","#FFC0CB"],["plum","#DDA0DD"],["powderblue","#B0E0E6"],["purple","#800080"],["rebeccapurple","#663399"],["red","#FF0000"],["rosybrown","#BC8F8F"],["royalblue","#4169E1"],["saddlebrown","#8B4513"],["salmon","#FA8072"],["sandybrown","#F4A460"],["seagreen","#2E8B57"],["seashell","#FFF5EE"],["sienna","#A0522D"],["silver","#C0C0C0"],["skyblue","#87CEEB"],["slateblue","#6A5ACD"],["slategray","#708090"],["snow","#FFFAFA"],["springgreen","#00FF7F"],["steelblue","#4682B4"],["tan","#D2B48C"],["teal","#008080"],["thistle","#D8BFD8"],["tomato","#FF6347"],["turquoise","#40E0D0"],["violet","#EE82EE"],["wheat","#F5DEB3"],["white","#FFFFFF"],["whitesmoke","#F5F5F5"],["yellow","#FFFF00"],["yellowgreen","#9ACD32"]]),w=/^rgb\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)\s*$/i,k=/^rgba\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([0,1](?:\.\d*)?)\s*\)\s*$/i,x=/^#([0-9,a-f,A-F]{2})([0-9,a-f,A-F]{2})([0-9,a-f,A-F]{2})\s*$/i,S=function(){function t(e){h(this,t);for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i0&&this._strokeWidth>0}},{key:"isTransparent",value:function(){return this._strokeColor.isTransparent()}},{key:"setStrokeCtx",value:function(t){t.strokeStyle=this.strokeColor,t.lineWidth=this._strokeWidth,t.lineJoin=this._lineJoin,t.lineCap=this._lineCap,t.setLineDash(this._dashPattern),t.lineDashOffset=this._dashOffset}},{key:"strokeColor",set:function(t){return this._strokeColor.value=t,this},get:function(){return this._strokeColor.value}},{key:"strokeOpacity",set:function(t){this._strokeColor.opacity=t},get:function(){return this._strokeColor.opacity}},{key:"packedStrokeColor",set:function(t){this._strokeColor.packedValue=t},get:function(){return this._strokeColor.packedValue}},{key:"strokeWidth",set:function(t){return a(t),this._strokeWidth=t,this},get:function(){return this._strokeWidth}},{key:"lineJoin",set:function(t){var e=s(t);return this._lineJoin=e,this},get:function(){return _[this._lineJoin]}},{key:"lineCap",set:function(t){var e=c(t);return this._lineCap=e,this},get:function(){return y[this._lineJoin]}},{key:"dashPattern",set:function(t){return l(t),this._dashPattern=t.slice(),this},get:function(){return this._dashPattern.slice()}},{key:"dashOffset",set:function(t){return u(t),this._dashOffset=t,this},get:function(){return this._dashOffset}}],[{key:"copyStrokeStyle",value:function(t,e){void 0===t.packedStrokeColor?(void 0!==t.strokeColor&&(e.strokeColor=t.strokeColor),void 0!==t.strokeOpacity&&(e.strokeOpacity=t.strokeOpacity)):e.packedStrokeColor=t.packedStrokeColor,void 0!==t.strokeWidth&&(e.strokeWidth=t.strokeWidth),void 0!==t.lineJoin&&(e.lineJoin=t.lineJoin),void 0!==t.lineCap&&(e.lineCap=t.lineCap),void 0!==t.dashPattern&&(e.dashPattern=t.dashPattern),void 0!==t.dashOffset&&(e.dashOffset=t.dashOffset)}},{key:"compareStrokeStyle",value:function(t,e){var r=t.isStrokeVisible(),n=e.isStrokeVisible();if(r!==n)return r-n;if(r=t.packedStrokeColor,n=e.packedStrokeColor,r!==n)return r-n;if(r=t.strokeWidth,n=e.strokeWidth,r!==n)return r-n;if(r=t._lineJoin,n=e._lineJoin,r!==n)return r-n;if(r=t._lineCap,n=e._lineCap,r!==n)return r-n;if(r=t._dashPattern,n=e._dashPattern,r.length===n.length&&r.length>0){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:null;this._margins=e&&e.margins?Object.assign({},e.margins):{},E.forEach(function(t){"number"!=typeof r._margins[t]&&(r._margins[t]=0)});var i=d(t),o=i.canvasContainer,a=i.canvas,s=i.canvasContext,c=i.ratio;this._container=o,this._drawCanvas=a,this._drawCtx=s,this._pixelRatio=c,this._parent=t,Object(g.a)(["_resize"],this),this._resize(e),this._resizeSensor=new S.a(t,this._resize),(n||null===n&&e&&e.enableEvents)&&this._enableEvents()}},{key:"_destroyCanvas",value:function(){this._drawCanvas&&this._disableEvents(),this._parent&&(this._parent.removeChild(this._drawCanvas),this._resizeSensor&&this._resizeSensor.detach(this._parent,this._resize)),this._drawCanvas=null,this._drawCtx=null,this._parent=null}},{key:"_init",value:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;this.registerEvents([C.SHAPE_ADD,C.SHAPE_DELETE]),Object(g.a)(["_reorderCb","_rerenderCb"],this),Object(g.a)(["_mousedownCB","_mouseupCB","_mousemoveCB","_clickCB","_dblclickCB","_mouseoverCB","_mouseoutCB"],this),this._renderFrameCb=this.renderAll.bind(this),this._renderRequestTime=0,this._ids={shapeId:1},this._objects=new Map,this._sortedObjs=[],this._reorderedObjIdxs=new Set,this._initCanvas(t,e,r),this._styleState=new M({fillColor:"red"})}},{key:"getContainer",value:function(){return this._parent}},{key:"getCanvasContainer",value:function(){return this._container}},{key:"getCanvas",value:function(){return this._drawCanvas}},{key:"project",value:function(t,e){var r=this._camera.screenToWorldMatrix;return y.transformMat2d(t,e,r)}},{key:"unproject",value:function(t,e){var r=this._camera.worldToScreenMatrix;return y.transformMat2d(t,e,r)}},{key:"hasShape",value:function(t){return this._objects.has(t)}},{key:"addShape",value:function(t){var e=t;Array.isArray(e)||(e=[t]),p(e,this._objects,this._ids,this._reorderCb,this._rerenderCb),this.fire("shape:add",{shape:e});var r={target:e};return this._reorderCb(r),this}},{key:"deleteShape",value:function(t){var e=t;Array.isArray(e)||(e=[t]);for(var r=_(e,this._objects,this._reorderCb,this._rerenderCb),n=-1,i=0;i=0&&this._sortedObjs.splice(n,1),this._reorderedObjIdxs.add(r[i]);return this._rerenderCb(),this.fire("shape:delete",{shape:e}),this}},{key:"deleteAllShapes",value:function(){return this.deleteShape(this.sortedShapes.slice()),this}},{key:"moveShapeToTop",value:function(t){if(this._objects.has(t)){var e=this.sortedShapes,r=e[e.length-1].zIndex;t.zIndex=r+1}}},{key:"moveShapeToBack",value:function(t){if(this._objects.has(t)){var e=this.sortedShapes,r=e[0].zIndex;t.zIndex=r}}},{key:"getShapesAsJSON",value:function(){return this.sortedShapes.map(function(t){return t.toJSON()})}},{key:"_rerenderCb",value:function(){window.requestAnimationFrame(this._renderFrameCb)}},{key:"_reorderCb",value:function(t){var e=this,r=t.target;Array.isArray(r)||(r=[t.target]),r.forEach(function(t){console.assert(t,"A changed event doesn't have an object");var r=e._objects.get(t);console.assert(r,"A changed event target isn't in the list of shapes ".concat(t)),r.shapeIdx<0&&(r.shapeIdx=e._sortedObjs.push(t)-1),e._reorderedObjIdxs.add(r.shapeIdx)}),this._rerenderCb()}},{key:"_renderShapes",value:function(t,e,r){var n=this,i=r.worldToScreenMatrix;e.forEach(function(e){e.visible&&e.render(t,i,n._styleState)})}},{key:"renderAll",value:function(t){if(t){if(t<=this._renderRequestTime)return;this._renderRequestTime=t}else this._renderRequestTime=performance.now();var e=this._drawCtx;if(e.clearRect(0,0,this._drawCanvas.offsetWidth,this._drawCanvas.offsetHeight),this._objects.size){e.save();var r=this.sortedShapes;this._styleState.applyDefaults(e),this._renderShapes(e,r,this._camera),e.restore()}}},{key:"sortedShapes",get:function(){return this._reorderedObjIdxs.size&&(console.assert(this._sortedObjs.length===this._objects.size,"Size mismatch when rendering objets. Something got out of sync - sorted objs length: ".concat(this._sortedObjs.length,", objects length: ").concat(this._objects.size)),this._sortedObjs.sort(b.a.shapeCompare),this._reorderedObjIdxs.clear()),this._sortedObjs}},{key:"margins",get:function(){var t=this,e={};return E.forEach(function(r){e[r]=t._margins[r]}),e},set:function(t){var e=this;E.forEach(function(r){"number"==typeof t[r]&&t[r]!==e._margins[r]&&(e._margins[r]=t.prop)}),this._resize()}},{key:"viewport",get:function(){return this._camera.viewport},set:function(t){this._camera.viewport=t}},{key:"projectionDimensions",get:function(){return this._camera.projectionDimensions},set:function(t){return this._camera.projectionDimensions=t,this}},{key:"cameraPosition",get:function(){return this._camera.getPosition()},set:function(t){return this._camera.setPosition(t),this}}]),e}(k.a);P.EventConstants=C},function(t,e,r){"use strict";function n(t,e,r){return(e[o]-t[o])*(r[a]-t[a])-(r[o]-t[o])*(e[a]-t[a])}function i(t){var e=[],r=t.length;if(r<3){for(var i=0;i0?(o[a+1]=0,o[a+2]=1):(o[a+1]=1,o[a+2]=0);for(var c=3;c=0&&o[a+1]>=0&&n(t[o[a]],t[o[a+1]],t[c])<=0;)a+=1;for(a-=1,o[a]=c;o[s]>=0&&o[s+1]>=0&&n(t[o[s-1]],t[o[s]],t[c])<=0;)s-=1;s+=1,o[s]=c}var l=0;for(l=0;l<=s-a-1;l+=1)e[l]=o[a+l];return o[a+l]!==e[0]&&(e[l]=o[a+l]),e}e.a=i;var o=0,a=1},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r=4.0.0"},repository:{type:"git",url:"git+https://github.com/omnisci/mapd-draw.git"},dependencies:{"css-element-queries":"^0.4.0","gl-matrix":"^2.3.2"},devDependencies:{"@babel/core":"^7.0.0","@babel/plugin-proposal-class-properties":"^7.0.0","@babel/plugin-proposal-decorators":"^7.0.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-function-bind":"^7.0.0","@babel/plugin-proposal-function-sent":"^7.0.0","@babel/plugin-proposal-json-strings":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.0.0","@babel/plugin-proposal-numeric-separator":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-proposal-pipeline-operator":"^7.0.0","@babel/plugin-proposal-throw-expressions":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/plugin-syntax-import-meta":"^7.0.0","@babel/preset-env":"^7.0.0","@babel/register":"^7.0.0","babel-eslint":"^10.0.1","babel-loader":"^8.0.0",chai:"^3.5.0",eslint:"^6.0.0","eslint-config-prettier":"^6.5.0","eslint-plugin-prettier":"^3.1.1","http-server":"^0.11.1","json-loader":"0.5.4",mocha:"^6.2.1","pre-commit":"^1.2.2",prettier:"1.18.2",webpack:"^3.12.0"},scripts:{build:"npm run build:prod; npm run build:dev","build:prod":"npm run webpack","build:dev":"npm run webpack:dev",clean:"bash scripts/clean.sh","lint:fix":"eslint --rule 'prettier/prettier: 0' --fix $(find src -name \"*.js\" ! -name '*.spec.js'); prettier --write $(find src -name \"*.js\" ! -name '*.spec.js')",lint:"eslint $(find src -name \"*.js\" ! -name '*.spec.js')",start:"npm run build; http-server -p 8080 -o;","watch:dev":"node node_modules/webpack/bin/webpack.js --progress --colors --watch --config webpack.dev.config.js",webpack:"node node_modules/webpack/bin/webpack.js","webpack:dev":"node node_modules/webpack/bin/webpack.js --config webpack.dev.config.js",test:"mocha --recursive --require @babel/register"},"pre-commit":["lint","test"]}},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r=0&&i<=t.clientWidth&&(o=r-n.top-t.clientTop)>=0&&o<=t.clientHeight}function _(t,e,r){var n=e.getBoundingClientRect();t[0]=r.clientX-n.left-e.clientLeft,t[1]=r.clientY-n.top-e.clientTop}function v(t,e,r,n){_(N,t,e),C.transformMat2d(V,N,n.screenToWorldMatrix);var i=r.shape;i instanceof F.a?E.a(i,r,N,V,n):i instanceof I.a?E.c(i,r,N,V,n):E.b(i,r,N,V,n)}function y(t,e){e.keys={altKey:t.altKey,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,metaKey:t.metaKey}}function b(t){var e=[];return t.forEach(function(t,r){e.push(r)}),e}function m(t,e,r,n,i,o){var a={unselectedShapes:b(r)};g(r),t.save();var s=e[e.length-1].zIndex;t.zIndex=s+1,M.a.copyBasicStyle(n,t),t.selected=!0;var c=null;return(o.scalable||o.rotatable)&&(c=new F.a(i||z,o),t.addChildXform(c)),r.set(t,c),a.selectedShapes=[t],a}function g(t){t.forEach(function(t,e){e.restore(),e.selected=!1,e.removeChildXform(t)}),t.clear()}function w(t,e){var r=[];return e.forEach(function(e){var n=t.get(e);e.restore(),e.selected=!1,e.removeChildXform(n),t.delete(e),r.push(e)}),r}function k(t,e){var r=document.querySelector("".concat("#".concat(e.id," canvas")));return{x:t.offsetX+r.offsetLeft,y:t.offsetY+r.offsetTop}}function x(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:B.SVG_OFFSET,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:B.SVG_OFFSET,o=document.getElementById("cursor"),a=k(t,e);if(null===o){var s=document.createElement("span");s.setAttribute("id","cursor"),s.setAttribute("style","position: absolute; top: ".concat("".concat(a.y,"px"),"; left: ","".concat(a.x,"px"),"; width: 28px; height: 28px; background: ",r,"; cursor: none; z-index: 10; pointer-events: none; transform: translate(").concat(n,"px, ").concat(i,"px)")),e.appendChild(s)}else o.style.background===r?O(t,e):(o.style.background=r,O(t,e))}function S(){var t=document.getElementById("cursor");null!==t&&t.parentNode.removeChild(t)}function O(t,e){var r=document.getElementById("cursor"),n=k(t,e);null!==r&&(r.style.top="".concat("".concat(n.y,"px")),r.style.left="".concat("".concat(n.x,"px")))}r.d(e,"a",function(){return Y});var E=r(27),C=r(3),M=r(8),P=r(21),j=r(4),A=r(12),I=r(36),F=r(37),D="url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Cg transform='rotate(,24,24)'%3E%3Cpolygon style='fill:%23ffffff;' points='16,20 16,12 4,24 16,36 16,28 32,28 32,36 44,24 32,12 32,20 '/%3E%3Cpolygon points='14,22 14,17 7,24 14,31 14,26 34,26 34,31 41,24 34,17 34,22 '/%3E%3C/g%3E%3C/svg%3E\") no-repeat",T="url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Cg transform='rotate(,24,24)'%3E%3Cpath style='fill:%23ffffff;' d='M25.9,4C16.6,4,8.8,11.2,7.4,20.8H6.7H3.3l1.6,2.9l3.8,7.1l1.8,3.3l1.8-3.3l3.8-7.1l1.6-2.9h-3.3h-0.1 c1.3-5.7,6.1-9.9,11.7-9.9c8,0,12.1,4.4,12.1,13.1c0,7.2-5.4,13.1-12.1,13.1h-2v2V42v2h2c10.4,0,18.8-9,18.8-20 C44.7,11.7,37.5,4,25.9,4L25.9,4z'/%3E%3Cpath d='M25.9,6c10.5,0,16.8,6.7,16.8,18c0,9.9-7.5,18-16.8,18v-2.9c7.8,0,14.1-6.8,14.1-15.1c0-5.6-1.8-15.1-14.1-15.1 c-7.4,0-13.4,6.1-14,13.9h2.4l-3.8,7.1l-3.8-7.1h2.5C9.7,13.4,17,6,25.9,6'/%3E%3C/g%3E%3C/svg%3E\") no-repeat",R={SELECTION_CHANGED:"draw:selectionChanged",DRAG_BEGIN:"draw:drag:begin",DRAG_END:"draw:drag:end"},B={SVG_OFFSET:-14,QUICK_CLICK_TIME:500,RIGHT_ANGLE:90,STRAIGHT_ANGLE:180,FORTY_FIVE_ANGLE:45},N=C.create(0,0),V=C.create(0,0),z={fillColor:"white",strokeColor:"black",strokeWidth:2},L=function(){var t=document.getElementById("cursor");null!==t&&(t.style.display="none")},W=function(){var t=document.getElementById("cursor");null!==t&&(t.style.display="block")},X=function(t){t.target.parentNode.style.cursor="default",L()},q=function(t){t.target.parentNode.style.cursor="none",W()},Y=function(t){function e(){return i(this,e),s(this,h(e).apply(this,arguments))}return f(e,t),a(e,[{key:"_mousedownCB",value:function(t){if(p(this._drawCanvas,t.clientX,t.clientY)){this.timer=performance.now(),C.set(N,t.offsetX,t.offsetY),C.transformMat2d(V,N,this._camera.screenToWorldMatrix);var e=this._camera.worldToScreenMatrix,r=this.sortedShapes,n=-1,i=null,o=null;for(n=r.length-1;n>=0;n-=1){var a=this._objects.get(r[n]);if(r[n].selected){i=this._selectedShapes.get(r[n]),o=a;var s=null;if(i&&(s=i.containsPoint(N,V,e,this._drawCtx)).hit){if(i instanceof I.a&&t.altKey&&s.controlIndex canvas")));null===h?(this._parent.addEventListener("mouseout",L),this._parent.addEventListener("mouseover",W)):(h.addEventListener("mouseout",X),h.addEventListener("mouseover",q)),!this._dragInfo&&o.movable&&(this._dragInfo={startLocalPos:i.getPosition()}),this._dragInfo&&(this._dragInfo.shape=i,this._dragInfo.startPos=C.clone(N),this._dragInfo.startWorldPos=C.clone(V),this._dragInfo.objectToWorldMatrix=j.a.clone(i.globalXform),y(t,this._dragInfo),t.stopImmediatePropagation(),this.fire(R.DRAG_BEGIN,{shapes:b(this._selectedShapes)})),t.preventDefault()}}}},{key:"_mouseupCB",value:function(t){if(this._dragInfo&&this._dragInfo.shape){t.stopImmediatePropagation(),t.preventDefault();var e=document.querySelector("".concat("#".concat(this._parent.id," > canvas")));null===e?(this._parent.removeEventListener("mouseout",L),this._parent.removeEventListener("mouseover",W)):(e.removeEventListener("mouseout",X),e.removeEventListener("mouseover",q)),this._dragInfo=null,this.fire(R.DRAG_END,{shapes:b(this._selectedShapes)})}else if(performance.now()-this.timer=0;a-=1)if(o=this._objects.get(n[a]),o.selectable&&n[a].containsPoint(N,V,r,this._drawCtx)){i=n[a];break}if(i&&!i.selected){var s=m(i,n,this._selectedShapes,this._selectStyle,this._xformStyle,o);this.fire(R.SELECTION_CHANGED,s)}}}},{key:"_mousemoveCB",value:function(t){if(p(this._drawCanvas,t.clientX,t.clientY)||this._dragInfo)if(this._dragInfo&&this._dragInfo.shape)O(t,this._parent),y(t,this._dragInfo),v(this._drawCanvas,t,this._dragInfo,this._camera),t.stopImmediatePropagation(),t.preventDefault();else if(!t.buttons&&this._selectedShapes.size){C.set(N,t.offsetX,t.offsetY),C.transformMat2d(V,N,this._camera.screenToWorldMatrix);var e=this._camera.worldToScreenMatrix,r=this.sortedShapes,n=0,i=this._camera.isYFlipped();for(n=r.length-1;n>=0;n-=1)if(r[n].selected){var o=this._objects.get(r[n]),a=this._selectedShapes.get(r[n]),s=null;this._parent.style.cursor="none";for(var c=0;c/g,"".concat(l))))}else s.controlIndex<4?0===s.controlIndex||3===s.controlIndex?x(t,this._parent,"".concat(D.replace(//g,"".concat(-r[n].getRotation()-B.FORTY_FIVE_ANGLE)))):1!==s.controlIndex&&2!==s.controlIndex||x(t,this._parent,"".concat(D.replace(//g,"".concat(-r[n].getRotation()+B.FORTY_FIVE_ANGLE)))):s.controlIndex%2==0?x(t,this._parent,"".concat(D.replace(//g,"".concat(-r[n].getRotation())))):x(t,this._parent,"".concat(D.replace(//g,"".concat(-r[n].getRotation()+B.RIGHT_ANGLE))));else if(a instanceof I.a){this._parent.style.cursor="none";for(var u=0;u=r[n].numVerts?x(t,this._parent,"url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Cpolygon style='fill:%23ffffff;' points='31.2,28 24.8,28 24.8,32.8 20,32.8 20,39.2 24.8,39.2 24.8,44 31.2,44 31.2,39.2 36,39.2 36,32.8 31.2,32.8 '/%3E %3Cpolygon style='fill:%23ffffff' points='12,32 12,4 32.3,24.3 20,24.3 19.7,24.6 '/%3E%3Cpolygon points='13.8,8.2 13.8,27.8 19,22.8 19.2,22.5 28,22.5 '/%3E%3Cpolyline points='29.6,29.6 29.6,34.4 34.4,34.4 34.4,37.6 29.6,37.6 29.6,42.4 26.4,42.4 26.4,37.6 21.6,37.6 21.6,34.4 26.4,34.4 26.4,29.6 29.6,29.6 '/%3E%3C/svg%3E\") no-repeat",-8,-6):t.altKey?x(t,this._parent,"url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Crect style='fill:%23ffffff;' x='20' y='32.8' width='16' height='6.4'/%3E%3Cpolygon style='fill:%23ffffff;' points='12,32 12,4 32.3,24.3 20,24.3 19.7,24.6 '/%3E%3Cpolygon points='13.8,8.2 13.8,27.8 19,22.8 19.2,22.5 28,22.5 '/%3E%3Cpolyline points='34.4,34.4 34.4,37.6 21.6,37.6 21.6,34.4 '/%3E%3C/svg%3E\") no-repeat",-8,-6):x(t,this._parent,"url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Cpath style='fill:%23ffffff;' d='M24,17.5c-3.6,0-6.5,2.9-6.5,6.5s2.9,6.5,6.5,6.5s6.5-2.9,6.5-6.5S27.6,17.5,24,17.5L24,17.5z'/%3E%3Cpath style='fill:%23ffffff;' d='M24,4L4,24l20,20l20-20L24,4z M31.5,31.5h-15v-15h15V31.5z'/%3E%3Cpolygon points='17,34 24,40.5 31,34 '/%3E%3Cpolygon points='31,14 24,7.5 17,14 '/%3E%3Cpolygon points='14,17 7.5,24 14,31 '/%3E%3Cpolygon points='34,31 40.5,24 34,17 '/%3E%3Cpath d='M24,20c2.2,0,4,1.8,4,4s-1.8,4-4,4s-4-1.8-4-4S21.8,20,24,20'/%3E%3C/svg%3E\") no-repeat",B.SVG_OFFSET,B.SVG_OFFSET)}t.stopImmediatePropagation(),t.preventDefault();break}if(r[n].containsPoint(N,V,e,this._drawCtx)){if(o&&o.movable){var h=document.getElementById("cursor");null!==h&&h.parentNode.removeChild(h),this._parent.style.cursor="move";for(var f=0;f=0;n-=1){var i=this._objects.get(r[n]);if(i.selectable&&r[n].containsPoint(N,V,e,this._drawCtx)){if(i.editable&&r[n]instanceof A.a){var o=r[n],a=!1;if(r[n].selected){var s=this._selectedShapes.get(r[n]);s&&(o.restore(),o.removeChildXform(s),a=!(s instanceof F.a))}o.selected=!0,o.save();var c=r[r.length-1].zIndex;o.zIndex=c+1,M.a.copyBasicStyle(this._selectStyle,o);var l=null;a?(i.rotatable||i.scalable)&&(l=new F.a(this._xformStyle||z,i),o.addChildXform(l)):(l=new I.a(o,this._xformStyle),o.addChildXform(l)),this._selectedShapes.set(o,l)}else if(!r[n].selected){var u=m(r[n],r,this._selectedShapes,this._selectStyle,this._xformStyle,i);this.fire(R.SELECTION_CHANGED,u)}break}}n<0&&this._selectedShapes.size?(this._selectedShapes.size&&this.fire(R.SELECTION_CHANGED,{unselectedShapes:b(this._selectedShapes),selectedShapes:[]}),this._dragInfo=null,g(this._selectedShapes)):t.stopImmediatePropagation(),t.preventDefault()}}},{key:"_mouseoverCB",value:function(){}},{key:"_mouseoutCB",value:function(){}},{key:"_init",value:function(t,r){this._activated=r&&r.enableInteractions,l(h(e.prototype),"_init",this).call(this,t,r,this._activated);var n=Object.getOwnPropertyNames(R).map(function(t){return R[t]});this.registerEvents(n),this._dragInfo=null,this._selectedShapes=new Map,this._selectStyle=new M.a(r&&r.selectStyle?r.selectStyle:{fillColor:"orange"}),this._xformStyle=new M.a(r&&r.xformStyle?r.xformStyle:{fillColor:"white",strokeColor:"black",strokeWidth:2}),this.timer=0}},{key:"_renderShapes",value:function(t,e,r){var n=this,i=r.worldToScreenMatrix;e.forEach(function(e){if(e.visible&&(e.render(t,i,n._styleState),e.selected)){var r=n._selectedShapes.get(e);r&&r.render(t,i,n._styleState)}})}},{key:"selectShape",value:function(t){var e=this._objects.get(t);if(e&&e.selectable){var r=m(t,this.sortedShapes,this._selectedShapes,this._selectStyle,this._xformStyle,e);this.fire(R.SELECTION_CHANGED,r)}}},{key:"clearSelection",value:function(){if(this._selectedShapes.size){var t=b(this._selectedShapes);g(this._selectedShapes),this.fire(R.SELECTION_CHANGED,{unselectedShapes:t,selectedShapes:[]}),this._rerenderCb()}}},{key:"addShape",value:function(t){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=t;if(Array.isArray(o)||(o=[t]),l(h(e.prototype),"addShape",this).call(this,o),o.forEach(function(t){var e=r._objects.get(t);e&&(e.selectable=!n||void 0===n.selectable||Boolean(n.selectable),e.movable=!n||void 0===n.movable||Boolean(n.movable),e.rotatable=!n||void 0===n.rotatable||Boolean(n.rotatable),e.scalable=!n||void 0===n.scalable||Boolean(n.scalable),e.uniformScaleOnly=!(!n||void 0===n.uniformScaleOnly)&&Boolean(n.uniformScaleOnly),e.centerScaleOnly=!(!n||void 0===n.centerScaleOnly)&&Boolean(n.centerScaleOnly),e.editable=!n||void 0===n.editable||Boolean(n.editable))}),i){var a={unselectedShapes:b(this._selectedShapes)},s=[];o.forEach(function(t){var e=r._objects.get(t);e.selectable&&(m(t,r.sortedShapes,r._selectedShapes,r._selectStyle,r._xformStyle,e),s.push(t))}),s.length&&(a.selectedShapes=s,this.fire(R.SELECTION_CHANGED,a))}return this}},{key:"deleteShape",value:function(t){var r=t;Array.isArray(r)||(r=[t]);var n=w(this._selectedShapes,r);this.fire(R.SELECTION_CHANGED,{unselectedShapes:n,selectedShapes:b(this._selectedShapes)}),S(),this._parent.style.cursor="default";for(var i=0;i0&&void 0!==arguments[0])||arguments[0])&&this.clearSelection(),this._disableEvents(),this._activated=!1,this}},{key:"selectStyle",set:function(t){M.a.copyBasicStyle(t,this._selectStyle)},get:function(){return this._selectStyle}},{key:"selectedShapes",get:function(){return b(this._selectedShapes)}},{key:"interactionsEnabled",get:function(){return this._activated}}]),e}(P.a);Object.assign(R,P.a.EventConstants),Y.EventConstants=R},function(t,e,r){"use strict";function n(t,e,r,n,i){var o=[0,0],a=[0,0];c.a.svd(o,a,null,r.objectToWorldMatrix);var u=[0,0];s.sub(u,r.startWorldPos,o),l.a.normalize(u,u);var h=o;s.sub(h,i,o),l.a.normalize(h,h);var f=l.a.angle(u,h);r.keys.shiftKey&&(f=Math.round(f/Math.QUATER_PI)*Math.QUATER_PI),e.setRotation(r.startLocalRot+Math.RAD_TO_DEG*f)}function i(t,e,r,i,o){var a=t.parent,u=[0,0],h=[0,0],f=[0,0];if(e.rotate)return void n(t,a,e,r,i,o);var d=e.keys.shiftKey||e.uniformScaleOnly,p=e.keys.altKey||e.centerScaleOnly,_=[0,0];if(c.a.svd(_,null,null,e.objectToWorldMatrix),l.a.sub(h,i,e.startWorldPos),d&&e.controlIndex<4){var v=[e.objectToWorldMatrix[0],e.objectToWorldMatrix[1]],y=[e.objectToWorldMatrix[2],e.objectToWorldMatrix[3]],b=[0,0];e.controlIndex<2&&l.a.negate(v,v),e.controlIndex%2==0&&l.a.negate(y,y),l.a.normalize(v,v),l.a.normalize(y,y),l.a.add(b,v,y),l.a.normalize(b,b);var m=l.a.cross2d(h,b),g=null;0===e.controlIndex||3===e.controlIndex?(g=y,m<0&&(g=v)):(g=v,m<0&&(g=y));var w=l.a.dot(h,g);w=Math.sign(w)*Math.sqrt(2*w*w),l.a.scale(h,b,w),s.addVec2(i,e.startWorldPos,h)}s.copy(u,i),s.transformMat2d(u,u,e.worldToObjectMatrix),l.a.sub(f,u,e.startObjectPos),s.copy(_,e.startLocalPos);var k=0,x=0;if(e.controlIndex<4)k=e.controlIndex<2?-1:1,x=e.controlIndex%2==0?-1:1,p||s.addVec2(_,_,l.a.scale(h,h,.5)),a.setPosition(_);else{var S=e.controlIndex-4,O=[0,0];S%2==0?(l.a.set(O,e.objectToWorldMatrix[0],e.objectToWorldMatrix[1]),x=0,k=S<2?-1:1,d&&(x=k,f[1]=f[0])):(l.a.set(O,e.objectToWorldMatrix[2],e.objectToWorldMatrix[3]),k=0,x=S<2?-1:1,d&&(k=x,f[0]=f[1])),p||(l.a.normalize(O,O),l.a.scale(O,O,l.a.dot(h,O)),s.addVec2(_,_,l.a.scale(O,O,.5))),a.setPosition(_)}p&&(k*=2,x*=2),a.setScale([e.startLocalScale[0]*(1+k*f[0]/e.shapeWidth),e.startLocalScale[1]*(1+x*f[1]/e.shapeHeight)])}function o(t,e,r,n,i){var o=[0,0],a=[0,0];if(c.a.svd(a,null,null,e.objectToWorldMatrix),e.keys.shiftKey){s.sub(o,r,e.startPos);var u=Math.atan2(o[1],o[0]);u=Math.round(u/Math.QUATER_PI)*Math.QUATER_PI;var h=[Math.cos(u),Math.sin(u)];l.a.scale(o,h,l.a.dot(o,h)),l.a.transformMat2(o,o,i.screenToWorldMatrix)}else l.a.sub(o,n,e.startWorldPos);s.addVec2(a,e.startLocalPos,o),t.setPosition(a)}function a(t,e,r,n){var i=t.parent,o=i.numVerts;if(e.controlIndex>=o){var a=Math.min(e.controlIndex-o,o-1),c=a===o-1?0:a+1,u=[0,0],h=[0,0],f=[0,0],d=[0,0],p=i.vertsRef,_=i.globalXform;s.transformMat2d(h,p[a],_),s.transformMat2d(f,p[c],_),s.sub(d,f,h),l.a.scale(d,d,.5),s.addVec2(u,h,d),e.controlIndex=i.insertVert(a+1,u)}else i.setVertPosition(e.controlIndex,n)}e.a=i,e.b=o,e.c=a;var s=r(3),c=r(4),l=r(9)},function(t,e,r){"use strict";function n(){var t=new C.ARRAY_TYPE(4);return C.ARRAY_TYPE!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t}function i(t){var e=new C.ARRAY_TYPE(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function o(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function a(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t}function s(t,e,r,n){var i=new C.ARRAY_TYPE(4);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i}function c(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}function l(t,e){if(t===e){var r=e[1];t[1]=e[2],t[2]=r}else t[0]=e[0],t[1]=e[2],t[2]=e[1],t[3]=e[3];return t}function u(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=r*o-i*n;return a?(a=1/a,t[0]=o*a,t[1]=-n*a,t[2]=-i*a,t[3]=r*a,t):null}function h(t,e){var r=e[0];return t[0]=e[3],t[1]=-e[1],t[2]=-e[2],t[3]=r,t}function f(t){return t[0]*t[3]-t[2]*t[1]}function d(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=r[0],c=r[1],l=r[2],u=r[3];return t[0]=n*s+o*c,t[1]=i*s+a*c,t[2]=n*l+o*u,t[3]=i*l+a*u,t}function p(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c+o*s,t[1]=i*c+a*s,t[2]=n*-s+o*c,t[3]=i*-s+a*c,t}function _(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=r[0],c=r[1];return t[0]=n*s,t[1]=i*s,t[2]=o*c,t[3]=a*c,t}function v(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=-r,t[3]=n,t}function y(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=e[1],t}function b(t){return"mat2("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"}function m(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2))}function g(t,e,r,n){return t[2]=n[2]/n[0],r[0]=n[0],r[1]=n[1],r[3]=n[3]-t[2]*r[1],[t,e,r]}function w(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}function k(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t}function x(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]}function S(t,e){var r=t[0],n=t[1],i=t[2],o=t[3],a=e[0],s=e[1],c=e[2],l=e[3];return Math.abs(r-a)<=C.EPSILON*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(n-s)<=C.EPSILON*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(i-c)<=C.EPSILON*Math.max(1,Math.abs(i),Math.abs(c))&&Math.abs(o-l)<=C.EPSILON*Math.max(1,Math.abs(o),Math.abs(l))}function O(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}function E(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t}Object.defineProperty(e,"__esModule",{value:!0}),e.create=n,e.clone=i,e.copy=o,e.identity=a,e.fromValues=s,e.set=c,e.transpose=l,e.invert=u,e.adjoint=h,e.determinant=f,e.multiply=d,e.rotate=p,e.scale=_,e.fromRotation=v,e.fromScaling=y,e.str=b,e.frob=m,e.LDU=g,e.add=w,e.subtract=k,e.exactEquals=x,e.equals=S,e.multiplyScalar=O,e.multiplyScalarAndAdd=E,r.d(e,"mul",function(){return M}),r.d(e,"sub",function(){return P});var C=r(1),M=d,P=k},function(t,e,r){"use strict";function n(){var t=new E.ARRAY_TYPE(6);return E.ARRAY_TYPE!=Float32Array&&(t[1]=0,t[2]=0,t[4]=0,t[5]=0),t[0]=1,t[3]=1,t}function i(t){var e=new E.ARRAY_TYPE(6);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e}function o(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function a(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function s(t,e,r,n,i,o){var a=new E.ARRAY_TYPE(6);return a[0]=t,a[1]=e,a[2]=r,a[3]=n,a[4]=i,a[5]=o,a}function c(t,e,r,n,i,o,a){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t[4]=o,t[5]=a,t}function l(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=e[4],s=e[5],c=r*o-n*i;return c?(c=1/c,t[0]=o*c,t[1]=-n*c,t[2]=-i*c,t[3]=r*c,t[4]=(i*s-o*a)*c,t[5]=(n*a-r*s)*c,t):null}function u(t){return t[0]*t[3]-t[1]*t[2]}function h(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=e[4],c=e[5],l=r[0],u=r[1],h=r[2],f=r[3],d=r[4],p=r[5];return t[0]=n*l+o*u,t[1]=i*l+a*u,t[2]=n*h+o*f,t[3]=i*h+a*f,t[4]=n*d+o*p+s,t[5]=i*d+a*p+c,t}function f(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=e[4],c=e[5],l=Math.sin(r),u=Math.cos(r);return t[0]=n*u+o*l,t[1]=i*u+a*l,t[2]=n*-l+o*u,t[3]=i*-l+a*u,t[4]=s,t[5]=c,t}function d(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=e[4],c=e[5],l=r[0],u=r[1];return t[0]=n*l,t[1]=i*l,t[2]=o*u,t[3]=a*u,t[4]=s,t[5]=c,t}function p(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=e[4],c=e[5],l=r[0],u=r[1];return t[0]=n,t[1]=i,t[2]=o,t[3]=a,t[4]=n*l+o*u+s,t[5]=i*l+a*u+c,t}function _(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=-r,t[3]=n,t[4]=0,t[5]=0,t}function v(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=e[1],t[4]=0,t[5]=0,t}function y(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=e[0],t[5]=e[1],t}function b(t){return"mat2d("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+")"}function m(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+1)}function g(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t}function w(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t}function k(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t}function x(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t}function S(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]}function O(t,e){var r=t[0],n=t[1],i=t[2],o=t[3],a=t[4],s=t[5],c=e[0],l=e[1],u=e[2],h=e[3],f=e[4],d=e[5];return Math.abs(r-c)<=E.EPSILON*Math.max(1,Math.abs(r),Math.abs(c))&&Math.abs(n-l)<=E.EPSILON*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(i-u)<=E.EPSILON*Math.max(1,Math.abs(i),Math.abs(u))&&Math.abs(o-h)<=E.EPSILON*Math.max(1,Math.abs(o),Math.abs(h))&&Math.abs(a-f)<=E.EPSILON*Math.max(1,Math.abs(a),Math.abs(f))&&Math.abs(s-d)<=E.EPSILON*Math.max(1,Math.abs(s),Math.abs(d))}Object.defineProperty(e,"__esModule",{value:!0}),e.create=n,e.clone=i,e.copy=o,e.identity=a,e.fromValues=s,e.set=c,e.invert=l,e.determinant=u,e.multiply=h,e.rotate=f,e.scale=d,e.translate=p,e.fromRotation=_,e.fromScaling=v,e.fromTranslation=y,e.str=b,e.frob=m,e.add=g,e.subtract=w,e.multiplyScalar=k,e.multiplyScalarAndAdd=x,e.exactEquals=S,e.equals=O,r.d(e,"mul",function(){return C}),r.d(e,"sub",function(){return M});var E=r(1),C=h,M=w},function(t,e,r){"use strict";var n=(r(1),r(15));r(14),n.a,n.a,n.c,n.d,n.h},function(t,e,r){"use strict";function n(){var t=new V.ARRAY_TYPE(2);return V.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0),t}function i(t){var e=new V.ARRAY_TYPE(2);return e[0]=t[0],e[1]=t[1],e}function o(t,e){var r=new V.ARRAY_TYPE(2);return r[0]=t,r[1]=e,r}function a(t,e){return t[0]=e[0],t[1]=e[1],t}function s(t,e,r){return t[0]=e,t[1]=r,t}function c(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t}function l(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t}function u(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t}function h(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t}function f(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t}function d(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t}function p(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t}function _(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t}function v(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t}function y(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t}function b(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t}function m(t,e){var r=e[0]-t[0],n=e[1]-t[1];return Math.sqrt(r*r+n*n)}function g(t,e){var r=e[0]-t[0],n=e[1]-t[1];return r*r+n*n}function w(t){var e=t[0],r=t[1];return Math.sqrt(e*e+r*r)}function k(t){var e=t[0],r=t[1];return e*e+r*r}function x(t,e){return t[0]=-e[0],t[1]=-e[1],t}function S(t,e){return t[0]=1/e[0],t[1]=1/e[1],t}function O(t,e){var r=e[0],n=e[1],i=r*r+n*n;return i>0&&(i=1/Math.sqrt(i),t[0]=e[0]*i,t[1]=e[1]*i),t}function E(t,e){return t[0]*e[0]+t[1]*e[1]}function C(t,e,r){var n=e[0]*r[1]-e[1]*r[0];return t[0]=t[1]=0,t[2]=n,t}function M(t,e,r,n){var i=e[0],o=e[1];return t[0]=i+n*(r[0]-i),t[1]=o+n*(r[1]-o),t}function P(t,e){e=e||1;var r=2*V.RANDOM()*Math.PI;return t[0]=Math.cos(r)*e,t[1]=Math.sin(r)*e,t}function j(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[2]*i,t[1]=r[1]*n+r[3]*i,t}function A(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[2]*i+r[4],t[1]=r[1]*n+r[3]*i+r[5],t}function I(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[3]*i+r[6],t[1]=r[1]*n+r[4]*i+r[7],t}function F(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[4]*i+r[12],t[1]=r[1]*n+r[5]*i+r[13],t}function D(t,e,r,n){var i=e[0]-r[0],o=e[1]-r[1],a=Math.sin(n),s=Math.cos(n);return t[0]=i*s-o*a+r[0],t[1]=i*a+o*s+r[1],t}function T(t,e){var r=t[0],n=t[1],i=e[0],o=e[1],a=r*r+n*n;a>0&&(a=1/Math.sqrt(a));var s=i*i+o*o;s>0&&(s=1/Math.sqrt(s));var c=(r*i+n*o)*a*s;return c>1?0:c<-1?Math.PI:Math.acos(c)}function R(t){return"vec2("+t[0]+", "+t[1]+")"}function B(t,e){return t[0]===e[0]&&t[1]===e[1]}function N(t,e){var r=t[0],n=t[1],i=e[0],o=e[1];return Math.abs(r-i)<=V.EPSILON*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(n-o)<=V.EPSILON*Math.max(1,Math.abs(n),Math.abs(o))}Object.defineProperty(e,"__esModule",{value:!0}),e.create=n,e.clone=i,e.fromValues=o,e.copy=a,e.set=s,e.add=c,e.subtract=l,e.multiply=u,e.divide=h,e.ceil=f,e.floor=d,e.min=p,e.max=_,e.round=v,e.scale=y,e.scaleAndAdd=b,e.distance=m,e.squaredDistance=g,e.length=w,e.squaredLength=k,e.negate=x,e.inverse=S,e.normalize=O,e.dot=E,e.cross=C,e.lerp=M,e.random=P,e.transformMat2=j,e.transformMat2d=A,e.transformMat3=I,e.transformMat4=F,e.rotate=D,e.angle=T,e.str=R,e.exactEquals=B,e.equals=N,r.d(e,"len",function(){return z}),r.d(e,"sub",function(){return L}),r.d(e,"mul",function(){return W}),r.d(e,"div",function(){return X}),r.d(e,"dist",function(){return q}),r.d(e,"sqrDist",function(){return Y}),r.d(e,"sqrLen",function(){return H}),r.d(e,"forEach",function(){return J});var V=r(1),z=w,L=l,W=u,X=h,q=m,Y=g,H=k,J=function(){var t=n();return function(e,r,n,i,o,a){var s=void 0,c=void 0;for(r||(r=2),n||(n=0),c=i?Math.min(i*r+n,e.length):e.length,s=n;s2&&void 0!==arguments[2]&&arguments[2];return i(this,e),n=s(this,l(e).call(this,["changed","changed:xform"])),n._viewport=f.clone(t),n._projectionDimensions=y.d.clone(r),n._yflip=o,n._screenMatrix=v.a.create(),n._screenDirty=!0,n}return u(e,t),a(e,[{key:"isYFlipped",value:function(){return this._yflip}},{key:"viewport",set:function(t){if(!f.equals(t,this._viewport)){var e=f.clone(this._viewport);f.copy(this._viewport,t),this._screenDirty=!0,this._worldToScreenOutdated=!0,this.fire("changed",{attr:"viewport",prevVal:e,currVal:t})}return this},get:function(){return f.clone(this._viewport)}},{key:"viewportRef",get:function(){return this._viewport}},{key:"screenMatrix",get:function(){if(this._screenDirty){var t=[0,0],e=[0,0];f.getCenter(t,this._viewport),f.getExtents(e,this._viewport),v.a.set(this._screenMatrix,e[0],0,0,e[1],t[0],t[1]),this._worldToScreenOutdated=!0,this._screenDirty=!1}return this._screenMatrix}}]),e}(_.a),m=function(t){function e(t,r,n){var o;return i(this,e),o=s(this,l(e).call(this,t,r,n)),o._viewMatrix=v.a.create(),o._viewDirty=!0,o._projMatrix=v.a.create(),o._projDirty=!0,o}return u(e,t),a(e,[{key:"_localXformUpdated",value:function(){this._boundsOutOfDate=!0}},{key:"_globalXformUpdated",value:function(){this._boundsOutOfDate=!0}},{key:"_matricesDirty",value:function(){return this._boundsOutOfDate||this._lxformDirty||this._xformDirty||this._viewDirty||this._projDirty||this._screenDirty}},{key:"projectionDimensions",set:function(t){if(!y.d.equals(t,this._projectionDimensions)){var e=y.d.clone(this._projectionDimensions);f.copy(this._projectionDimensions,t),this._viewDirty=!0,this._projDirty=!0,this.fire("changed",{attr:"projectionDimensions",prevVal:e,currVal:t})}return this},get:function(){return y.d.clone(this._projectionDimensions)}},{key:"projectionDimensionsRef",get:function(){return this._projectionDimensions}},{key:"viewMatrix",get:function(){if(this._viewDirty||this._boundsOutOfDate||this._xformDirty||this._lxformDirty){var t=[0,0],e=[0,0],r=[0,0],n=this.globalXform;v.a.svd(t,e,r,n),v.a.fromTranslation(this._viewMatrix,y.d.negate(t,t)),v.a.rotate(this._viewMatrix,this._viewMatrix,-r[0]),v.a.scale(this._viewMatrix,this._viewMatrix,e),v.a.rotate(this._viewMatrix,this._viewMatrix,-r[1]),this._worldToScreenOutdated=!0,this._viewDirty=!1}return this._viewMatrix}},{key:"projMatrix",get:function(){if(this._projDirty){var t=this._yflip?-1:1;v.a.set(this._projMatrix,2/this._projectionDimensions[0],0,0,2*t/this._projectionDimensions[1],0,0),this._worldToScreenOutdated=!0,this._projDirty=!1}return this._projMatrix}},{key:"worldToScreenMatrix",get:function(){return(!this._worldToScreenMatrix||this._worldToScreenOutdated||this._matricesDirty())&&(this._worldToScreenMatrix||(this._worldToScreenMatrix=v.a.create()),v.a.copy(this._worldToScreenMatrix,this.viewMatrix),v.a.multiply(this._worldToScreenMatrix,this.projMatrix,this._worldToScreenMatrix),v.a.multiply(this._worldToScreenMatrix,this.screenMatrix,this._worldToScreenMatrix),this._worldToScreenOutdated=!1,this._screenToWorldOutdated=!0),this._worldToScreenMatrix}},{key:"screenToWorldMatrix",get:function(){return(!this._screenToWorld||this._screenToWorldOutdated||this._matricesDirty())&&(this._screenToWorld||(this._screenToWorld=v.a.create()),v.a.copy(this._screenToWorld,this.worldToScreenMatrix),v.a.invert(this._screenToWorld,this._screenToWorld),this._screenToWorldOutdated=!1),this._screenToWorld}}]),e}(Object(d.a)(b,Object(p.b)("changed:xform")))},function(t,e,r){var n,i;!function(o,a){n=a,void 0!==(i="function"==typeof n?n.call(e,r,e,t):n)&&(t.exports=i)}(0,function(){function t(t,e){var r=Object.prototype.toString.call(t),n="[object Array]"===r||"[object NodeList]"===r||"[object HTMLCollection]"===r||"[object Object]"===r||"undefined"!=typeof jQuery&&t instanceof jQuery||"undefined"!=typeof Elements&&t instanceof Elements,i=0,o=t.length;if(n)for(;i
',t.appendChild(t.resizeSensor),"static"==a(t,"position")&&(t.style.position="relative");var s,c,l,u,h=t.resizeSensor.childNodes[0],f=h.childNodes[0],d=t.resizeSensor.childNodes[1],p=t.offsetWidth,_=t.offsetHeight,v=function(){f.style.width="100000px",f.style.height="100000px",h.scrollLeft=1e5,h.scrollTop=1e5,d.scrollLeft=1e5,d.scrollTop=1e5};v();var y=function(){c=0,s&&(p=l,_=u,t.resizedAttached&&t.resizedAttached.call())},b=function(){l=t.offsetWidth,u=t.offsetHeight,s=l!=p||u!=_,s&&!c&&(c=e(y)),v()},m=function(t,e,r){t.attachEvent?t.attachEvent("on"+e,r):t.addEventListener(e,r)};m(h,"scroll",b),m(d,"scroll",b)}t(n,function(t){s(t,i)}),this.detach=function(t){r.detach(n,t)}};return r.detach=function(e,r){t(e,function(t){t.resizedAttached&&"function"==typeof r&&(t.resizedAttached.remove(r),t.resizedAttached.length())||t.resizeSensor&&(t.contains(t.resizeSensor)&&t.removeChild(t.resizeSensor),delete t.resizeSensor,delete t.resizedAttached)})},r})},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r0&&c===this._transformedVerts.length-1&&(d.sub(u,this._transformedVerts[0],this._transformedVerts[c]),p.d.scale(u,u,.5),d.addVec2(l,this._transformedVerts[c],u),f.initCenterExtents(o,l,s),f.containsPt(o,t)&&(i.hit=!0,i.controlIndex=this._transformedVerts.length+c))}}return i}},{key:"renderBounds",value:function(t,e,r){this._updateAABox(e),t.save(),t.setTransform(1,0,0,1,0,0),r.setStrokeCtx(t);var n=[0,0],i=[0,0];f.getCenter(n,this._aabox),f.getExtents(i,this._aabox),t.beginPath(),t.rect(n[0]-i[0],n[1]-i[1],2*i[0],2*i[1]),t.stroke(),t.restore()}},{key:"render",value:function(t){var e=this;t.save(),t.setTransform(1,0,0,1,0,0);var r=this._baseVertShape._fullXform,n=this._baseVertShape.vertsRef;this._transformedVerts=new Array(n.length);var i=[0,0],o=[0,0];t.beginPath();var a=0;this._transformedVerts[a]=[0,0],d.transformMat2d(this._transformedVerts[a],n[a],r);var s=Math.max(1.5*t.lineWidth,2.5);for(a=0;a0&&(d.sub(o,this._transformedVerts[0],this._transformedVerts[a]),p.d.scale(o,o,.5),d.addVec2(i,this._transformedVerts[a],o),t.moveTo(i[0]+s,i[1]),t.arc(i[0],i[1],s,0,Math.TWO_PI),t.fillStyle=t.strokeStyle,t.fill()),t.beginPath(),this._transformedVerts.forEach(function(r){t.moveTo(r[0]+e._vertRadius,r[1]),t.arc(r[0],r[1],e._vertRadius,0,Math.TWO_PI)}),this.isFillVisible()&&(this.setFillCtx(t),t.fill()),this.isStrokeVisible()&&(this.setStrokeCtx(t),t.stroke()),t.restore()}}]),e}(_.a)},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r-i&&f<=a&&(d=l*e[1])>-i&&d<=a))&&(u=!0)}return{hit:u,rotate:h}}r.d(e,"a",function(){return x});var v=r(2),y=r(3),b=r(10),m=r(4),g=r(23),w=r(9),k={SIDES:4},x=function(t){function e(t){var r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{scalable:!0,rotatable:!0};return i(this,e),r=s(this,h(e).call(this,t)),r._interactiveBoxSize=8,r._interactiveBoxPadding=10,t&&void 0!==t.vertexSize&&(r._interactiveBoxSize=t.vertexSize),r._scalable=!0,r._rotatable=!0,n&&(void 0!==n.scalable&&(r._scalable=Boolean(n.scalable)),void 0!==n.rotatable&&(r._rotatable=Boolean(n.rotatable))),r}return f(e,t),a(e,[{key:"containsPoint",value:function(t){var e={hit:!1,rotate:!1,controlIndex:-1},r=this.aabox;if((this._rotatable||this._scalable)&&this.visible&&v.containsPt(r,t)){var n=[0,0],i=[0,0];m.a.svd(null,n,i,this._fullXform);var o=m.a.create();n[0]=n[0]<0?-1:1,n[1]=n[1]<0?-1:1,n[0]*n[1]>0&&w.a.negate(i,i),m.a.rotate(o,o,i[1]),m.a.scale(o,o,n),m.a.rotate(o,o,i[0]);for(var a=this._rotatable?this._interactiveBoxPadding:0,s=this._interactiveBoxSize/2,c=this.width/2,l=this.height/2,u=[0,0],h=s+a,f=Math.sqrt(2*h*h),d=0,p=0,b=0;b0&&void 0!==arguments[0]&&arguments[0]||this._geomDirty||this._boundsOutOfDate){var t=this._rotatable?this._interactiveBoxPadding:0,e=t+this._interactiveBoxSize/2;v.initCenterExtents(this._aabox,[0,0],[this.width/2,this.height/2]),v.transformMat2d(this._aabox,this._aabox,this._fullXform),v.expand(this._aabox,this._aabox,[e,e]),this._aaboxUpdated=!0,this._geomDirty=this._boundsOutOfDate=!1}}},{key:"renderBounds",value:function(t,e,r){var n=this.aabox;t.save(),t.setTransform(1,0,0,1,0,0),r.setStrokeCtx(t);var i=[0,0],o=[0,0];v.getCenter(i,n),v.getExtents(o,n),t.beginPath(),t.rect(i[0]-o[0],i[1]-o[1],2*o[0],2*o[1]),t.stroke(),t.restore()}},{key:"render",value:function(t,r,n){if(this.parent&&void 0!==this.parent.width&&"undefined"!==this.parent.height){this._aaboxUpdated=!1,l(h(e.prototype),"render",this).call(this,t,r,n,!1),this._aaboxUpdated||this._updateAABox(!0);var i=[0,0],o=[0,0];m.a.svd(null,i,o,this._fullXform),i[0]=i[0]<0?-1:1,i[1]=i[1]<0?-1:1;var a=this._interactiveBoxSize/2,s=this.width/2,c=this.height/2,u=[s,c];t.save(),t.beginPath(),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,s,-c),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,-s,-c),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,-s,c),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),this._scalable&&(y.set(u,0,c),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,0,-c),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,s,0),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i),y.set(u,-s,0),p(t,u,this._fullXform,this._interactiveBoxSize,a,o,i)),this.isFillVisible()&&(n.setFillStyle(t,this),t.fill()),this.isStrokeVisible()&&(n.setStrokeStyle(t,this),t.setTransform(1,0,0,1,0,0),t.stroke()),t.restore()}}},{key:"width",get:function(){return this.parent&&"undefined"!==this.parent.width?this.parent.width:0}},{key:"height",get:function(){return this.parent&&"undefined"!==this.parent.height?this.parent.height:0}}]),e}(g.a)},function(t,e,r){"use strict";function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r=_.MINIMUM_POINTS){t.moveTo(this._verts[0][0],this._verts[0][1]);for(var r=1;r