canvas2d-wrapper 1.10.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import calcTileSize from '../functions/calcTileSize';\r\n\r\nimport inCircle from './inCircle';\r\nimport inPoly from './inPoly';\r\nimport inRect from './inRect';\r\n\r\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\r\n\tconst localTileSize = calcTileSize(tileSize, zoom);\r\n\r\n\tconst validElements = [];\r\n\r\n\tfor (const element of elements) {\r\n\t\tconst x = element.x * localTileSize;\r\n\t\tconst y = element.y * localTileSize;\r\n\r\n\t\tswitch (element.constructorName) {\r\n\t\t\tcase 'Rect':\r\n\t\t\tcase 'CanvasImage':\r\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Circle':\r\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Polygon':\r\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (validElements.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (validElements.length === 1) {\r\n\t\treturn validElements[0];\r\n\t}\r\n\r\n\tvalidElements.sort((a, b) => {\r\n\t\tif (a.zIndex > b.zIndex) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.zIndex < b.zIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (a.id > b.id) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.id < b.id) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t});\r\n\r\n\treturn validElements[validElements.length - 1];\r\n}","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementRightClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nconst LEFT_BUTTON = 1;\r\nlet selectedObject = null;\r\nlet unselectTimeoutId = 0;\r\nconst UNSELECT_TIMEOUT_MS = 300;\r\n\r\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\r\n\tconst newProps = {\r\n\t\t...props,\r\n\t};\r\n\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\r\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\r\n\t\tlet moved = false;\r\n\t\tif (dragObjects) {\r\n\t\t\tif (selectedObject === null) {\r\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\r\n\t\t\t}\r\n\r\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\r\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\r\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\r\n\r\n\t\t\t\tmoved = true;\r\n\r\n\t\t\t\tif (onElementMoved) {\r\n\t\t\t\t\tonElementMoved(\r\n\t\t\t\t\t\tselectedObject,\r\n\t\t\t\t\t\t(event.screenX - props.prevX),\r\n\t\t\t\t\t\t(event.screenY - props.prevY),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onHover) {\r\n\t\t\t\t\tonHover(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!moved) {\r\n\t\t\t// Lock Axis\r\n\t\t\tif (!lockXAxis) {\r\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\r\n\t\t\t}\r\n\r\n\t\t\tif (!lockYAxis) {\r\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\r\n\t\t\tunselectTimeoutId = setTimeout(() => {\r\n\t\t\t\tselectedObject = null;\r\n\t\t\t\tsetProps({\r\n\t\t\t\t\t...newProps,\r\n\t\t\t\t\tprevX: null,\r\n\t\t\t\t\tprevY: null,\r\n\t\t\t\t});\r\n\t\t\t}, UNSELECT_TIMEOUT_MS);\r\n\t\t}\r\n\t} else {\r\n\t\tif (onHover) {\r\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\r\n\t\t}\r\n\r\n\t\tselectedObject = null;\r\n\t}\r\n\r\n\tsetProps({\r\n\t\t...newProps,\r\n\t\tprevX: event.screenX,\r\n\t\tprevY: event.screenY,\r\n\t});\r\n}\r\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\r\n\r\nexport default class LinePath extends ColoredCanvasObject {\r\n\t/**\r\n\t * Represents a Line Path that will be created on the canvas.\r\n\t *\r\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\r\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\r\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\r\n\t * @param {number} \tzIndex \tStack order of the element\r\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\r\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\r\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\r\n\t */\r\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius }) {\r\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false);\r\n\r\n\t\tthis.points = points;\r\n\t\tthis.lineWidth = lineWidth;\r\n\t\tthis.smoothCorners = smoothCorners;\r\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\r\n\t}\r\n\r\n\tget constructorName() {\r\n\t\treturn 'LinePath';\r\n\t}\r\n}\r\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.arc(\r\n\t\tleft + element.x * localTileSize,\r\n\t\ttop + element.y * localTileSize,\r\n\t\telement.radius * localTileSize,\r\n\t\t0,\r\n\t\t2 * Math.PI\r\n\t);\r\n\r\n\tif(element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif(element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderLinePath(\r\n\tcontext,\r\n\telement,\r\n\tleft,\r\n\ttop,\r\n\tlocalTileSize\r\n) {\r\n\tconst defaultLineWidth = context.lineWidth;\r\n\tconst points = element.points.map((p) => ({\r\n\t\tx: left + p.x * localTileSize,\r\n\t\ty: top + p.y * localTileSize,\r\n\t}));\r\n\r\n\tif (points.length < 2) return;\r\n\r\n\tcontext.beginPath();\r\n\tcontext.moveTo(points[0].x, points[0].y);\r\n\r\n\tif (element.smoothCorners) {\r\n\t\tfor (let i = 1; i < points.length - 1; i++) {\r\n\t\t\tconst prev = points[i - 1];\r\n\t\t\tconst curr = points[i];\r\n\t\t\tconst next = points[i + 1];\r\n\r\n\t\t\t// Direction vectors\r\n\t\t\tconst dx1 = curr.x - prev.x;\r\n\t\t\tconst dy1 = curr.y - prev.y;\r\n\t\t\tconst dx2 = next.x - curr.x;\r\n\t\t\tconst dy2 = next.y - curr.y;\r\n\r\n\t\t\t// Lengths\r\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\r\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\r\n\r\n\t\t\t// Offsets for corner rounding\r\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\r\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\r\n\r\n\t\t\tconst cornerStart = {\r\n\t\t\t\tx: curr.x - offset1X,\r\n\t\t\t\ty: curr.y - offset1Y,\r\n\t\t\t};\r\n\t\t\tconst cornerEnd = {\r\n\t\t\t\tx: curr.x + offset2X,\r\n\t\t\t\ty: curr.y + offset2Y,\r\n\t\t\t};\r\n\r\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\r\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\r\n\t\t}\r\n\r\n\t\t// Final segment\r\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\r\n\t} else {\r\n\t\t// Straight line version\r\n\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\r\n\t\t}\r\n\t}\r\n\r\n\tcontext.lineWidth = element.lineWidth;\r\n\tcontext.stroke();\r\n\tcontext.lineWidth = defaultLineWidth;\r\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.moveTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tfor (let i = 0; i < element.points.length; i++) {\r\n\t\tcontext.lineTo(\r\n\t\t\tleft + element.points[i].x * localTileSize,\r\n\t\t\ttop + element.points[i].y * localTileSize,\r\n\t\t);\r\n\t}\r\n\r\n\tcontext.lineTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tif (element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif (element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\r\nimport Circle from '../shapes/Circle';\r\nimport LinePath from '../shapes/LinePath';\r\nimport Polygon from '../shapes/Polygon';\r\nimport Rect from '../shapes/Rect';\r\n\r\nimport calcTileSize from '../functions/calcTileSize';\r\n\r\nimport renderCircle from './renderCircle';\r\nimport renderImage from './renderImage';\r\nimport renderLinePath from './renderLinePath';\r\nimport renderPolygon from './renderPolygon';\r\nimport renderRect from './renderRect';\r\n\r\nconst renderFn = {\r\n\t[(new Circle({})).constructorName]: renderCircle,\r\n\t[(new CanvasImage({})).constructorName]: renderImage,\r\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\r\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\r\n\t[(new Rect({})).constructorName]: renderRect,\r\n};\r\n\r\nexport default function renderCanvas(\r\n\tcontext,\r\n\twidth,\r\n\theight,\r\n\telements,\r\n\ttileSize,\r\n\tstate,\r\n) {\r\n\tconst left = state.left + state.deltaLeft;\r\n\tconst top = state.top + state.deltaTop;\r\n\r\n\tlet prevFillStyle = '';\r\n\tlet prevStrokeStyle = '';\r\n\r\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\r\n\r\n\tcontext.clearRect(0, 0, width, height);\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (\r\n\t\t\telement.fill !== prevFillStyle &&\r\n\t\t\ttypeof element.fill !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.fillStyle = element.fill;\r\n\t\t\tprevFillStyle = element.fill;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\telement.stroke !== prevStrokeStyle &&\r\n\t\t\ttypeof element.stroke !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.strokeStyle = element.stroke;\r\n\t\t\tprevStrokeStyle = element.stroke;\r\n\t\t}\r\n\r\n\t\tconst type = element.constructorName;\r\n\t\tif (renderFn[type]) {\r\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unsupported shape type:' + type);\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\n\r\nimport './index.css';\r\n\r\nimport elementClick from './events/elementClick';\r\nimport elementRightClick from './events/elementRightClick';\r\nimport mouseMove from './events/mouseMove';\r\nimport mouseWheel from './events/mouseWheel';\r\n\r\nimport sortElements from './functions/sortElements';\r\n\r\nimport renderCanvas from './render/renderCanvas';\r\n\r\nconst elements = {};\r\n\r\nexport default function Canvas2D({\r\n\twidth,\r\n\theight,\r\n\ttrackMouseMove = true,\r\n\tminZoom = 1,\r\n\tmaxZoom = 1,\r\n\ttileSize = 1,\r\n\tonClick,\r\n\tonRightClick,\r\n\tonHover,\r\n\tonElementMoved,\r\n\tonWheel,\r\n\tonFrame,\r\n\tlockXAxis = false,\r\n\tlockYAxis = false,\r\n\tsmoothingQuality='medium',\r\n\tdragObjects=false,\r\n\tdeltaLeft=0,\r\n\tdeltaTop=0,\r\n\t...otherProps\r\n}) {\r\n\tif(!elements[otherProps.id]) {\r\n\t\telements[otherProps.id] = [];\r\n\t}\r\n\r\n\t// Hooks\r\n\tconst [state, setState] = useState({});\r\n\tconst canvasRef = useCallback((canvas) => {\r\n\t\tif(canvas !== null) {\r\n\t\t\tconst context = canvas.getContext('2d');\r\n\r\n\t\t\tif(smoothingQuality === false) {\r\n\t\t\t\tcontext.imageSmoothingEnabled = false;\r\n\t\t\t} else {\r\n\t\t\t\tcontext.imageSmoothingEnabled = true;\r\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\r\n\t\t\t}\r\n\r\n\t\t\tsetState({\r\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\r\n\t\t\t\tcanvas,\r\n\t\t\t\tcontext,\r\n\t\t\t\tleft: width/2,\r\n\t\t\t\ttop: height/2,\r\n\t\t\t\twidth,\r\n\t\t\t\theight,\r\n\t\t\t\tzoom: 1,\r\n\t\t\t});\r\n\t\t}\r\n\t}, []);\r\n\r\n\tstate.deltaTop = deltaTop;\r\n\tstate.deltaLeft = deltaLeft;\r\n\r\n\t// Check inputs\r\n\tif(typeof width !== 'number' || typeof height !== 'number') {\r\n\t\tthrow new Error('width/height should be specified and be numbers.');\r\n\t}\r\n\r\n\tif(minZoom > maxZoom) {\r\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\r\n\t}\r\n\r\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\r\n\t\tthrow new Error('onClick should be a function.');\r\n\t}\r\n\r\n\tif(typeof onFrame !== 'function') {\r\n\t\tthrow new Error('onFrame should be a function.');\r\n\t}\r\n\r\n\t// Render\r\n\tlet onMouseMove = null;\r\n\tif(trackMouseMove) {\r\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\r\n\t}\r\n\r\n\tconst onWheelFn = (e) => {\r\n\t\tif(onWheel) {\r\n\t\t\tonWheel(e);\r\n\t\t}\r\n\r\n\t\tif(minZoom !== maxZoom) {\r\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\r\n\t\t}\r\n\t};\r\n\r\n\tlet onClickFn = null;\r\n\tif(onClick) {\r\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\r\n\t}\r\n\r\n\r\n\t// Right click Event\r\n\tuseEffect(() => {\r\n\t\tfunction onRightClickEvent(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\r\n\t\t}\r\n\r\n\t\tif(onRightClick && state.canvas) {\r\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\r\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\r\n\t\t}\r\n\t}, [state.canvas, onRightClick]);\r\n\r\n\t// Canvas render loop\r\n\tuseEffect(() => {\r\n\t\tlet shouldRender = true;\r\n\t\tfunction render() {\r\n\t\t\tif(!shouldRender) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\telements[otherProps.id] = onFrame();\r\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\r\n\r\n\t\t\tif(state.context) {\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.context,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\tsortedElements,\r\n\t\t\t\t\ttileSize,\r\n\t\t\t\t\tstate,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\twindow.requestAnimationFrame(render);\r\n\t\t}\r\n\t\twindow.requestAnimationFrame(render);\r\n\r\n\t\treturn () => { shouldRender = false; };\r\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\r\n\r\n\treturn (\r\n\t\t<canvas\r\n\t\t\tref={canvasRef}\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tonPointerMove={onMouseMove}\r\n\t\t\tonWheel={onWheelFn}\r\n\t\t\tonClick={onClickFn}\r\n\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t{...otherProps}\r\n\t\t/>\r\n\t);\r\n}\r\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","Math","floor","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","lineWidth","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderLinePath","defaultLineWidth","map","p","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","requestAnimationFrame","React","createElement","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAe,SAASA,YAAYA,CAACC,QAAQ,EAAEC,IAAI,EAAE;EACpD,OAAOD,QAAQ,GAAGC,IAAI;AACvB;;ACFe,SAASC,QAAQA,CAACC,OAAO,EAAEC,CAAC,EAAEC,CAAC,EAAEC,IAAI,EAAEC,GAAG,EAAEC,aAAa,EAAE;EACzE,IAAMC,QAAQ,GACb,CAACL,CAAC,GAAGE,IAAI,KAAKF,CAAC,GAAGE,IAAI,CAAC,GACvB,CAACD,CAAC,GAAGE,GAAG,KAAKF,CAAC,GAAGE,GAAG,CACpB;EAED,OAAQE,QAAQ,IAAMN,OAAO,CAACO,MAAM,GAAGF,aAAa,IAAKL,OAAO,CAACO,MAAM,GAAGF,aAAa,CAAE;AAC1F;;ACPe,SAASG,MAAMA,CAACR,OAAO,EAAEC,CAAC,EAAEC,CAAC,EAAEO,MAAM,EAAEC,MAAM,EAAEL,aAAa,EAAE;EAC5E,IAAMM,CAAC,GAAGX,OAAO,CAACY,MAAM,CAACC,MAAM,GAAG,CAAC;EACnC,IAAIC,OAAO,GAAG,KAAK;EAEnB,KAAI,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGf,OAAO,CAACY,MAAM,CAACC,MAAM,EAAEE,CAAC,EAAE,EAAE;IAC9C,IAAMC,EAAE,GAAGhB,OAAO,CAACY,MAAM,CAACG,CAAC,CAAC,CAACd,CAAC,GAAGI,aAAa;IAC9C,IAAMY,EAAE,GAAGjB,OAAO,CAACY,MAAM,CAACG,CAAC,CAAC,CAACb,CAAC,GAAGG,aAAa;IAG9C,IAAGI,MAAM,KAAKO,EAAE,IAAIN,MAAM,KAAKO,EAAE,EAAE;MAClC,OAAO,IAAI;;IAGZ,IAAMC,EAAE,GAAGlB,OAAO,CAACY,MAAM,CAACD,CAAC,CAAC,CAACV,CAAC,GAAGI,aAAa;IAC9C,IAAMc,EAAE,GAAGnB,OAAO,CAACY,MAAM,CAACD,CAAC,CAAC,CAACT,CAAC,GAAGG,aAAa;IAE9C,IAAIY,EAAE,GAAGf,CAAC,KAAOiB,EAAE,GAAGjB,CAAE,EAAE;MACzB,IAAMkB,KAAK,GAAG,CAACX,MAAM,GAAGO,EAAE,KAAKG,EAAE,GAAGF,EAAE,CAAC,GAAG,CAACC,EAAE,GAAGF,EAAE,KAAKN,MAAM,GAAGO,EAAE,CAAC;MAGnE,IAAGG,KAAK,KAAK,CAAC,EAAE;QACf,OAAO,IAAI;;MAIZ,IAAIA,KAAK,GAAG,CAAC,KAAOD,EAAE,GAAGF,EAAG,EAAE;QAC7BH,OAAO,GAAG,CAACA,OAAO;;;;EAKrB,OAAOA,OAAO;AACf;;AChCe,SAASO,MAAMA,CAACrB,OAAO,EAAEC,CAAC,EAAEC,CAAC,EAAEC,IAAI,EAAEC,GAAG,EAAEC,aAAa,EAAE;EACvE,IAAMiB,KAAK,GAAGtB,OAAO,CAACsB,KAAK,GAAGjB,aAAa;EAC3C,IAAMkB,MAAM,GAAGvB,OAAO,CAACuB,MAAM,GAAGlB,aAAa;EAE7C,OAAQJ,CAAC,IAAIE,IAAI,IAAIA,IAAI,IAAKF,CAAC,GAAGqB,KAAM,IAAIpB,CAAC,IAAIE,GAAG,IAAIA,GAAG,IAAKF,CAAC,GAAGqB,MAAO;AAC5E;;ACCe,SAASC,cAAcA,CAACC,CAAC,EAAEC,QAAQ,EAAEvB,IAAI,EAAEC,GAAG,EAAEP,QAAQ,EAAEC,IAAI,EAAE;EAC9E,IAAMO,aAAa,GAAGT,YAAY,CAACC,QAAQ,EAAEC,IAAI,CAAC;EAElD,IAAM6B,aAAa,GAAG,EAAE;EAExB,SAAAC,SAAA,GAAAC,+BAAA,CAAsBH,QAAQ,GAAAI,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;IAAA,IAArB/B,OAAO,GAAA8B,KAAA,CAAAE,KAAA;IACjB,IAAM/B,CAAC,GAAGD,OAAO,CAACC,CAAC,GAAGI,aAAa;IACnC,IAAMH,CAAC,GAAGF,OAAO,CAACE,CAAC,GAAGG,aAAa;IAEnC,QAAQL,OAAO,CAACiC,eAAe;MAC9B,KAAK,MAAM;MACX,KAAK,aAAa;QACjB,IAAIZ,MAAM,CAACrB,OAAO,EAAEC,CAAC,EAAEC,CAAC,EAAEC,IAAI,EAAEC,GAAG,EAAEC,aAAa,CAAC,EAAE;UACpDsB,aAAa,CAACO,IAAI,CAAC;YAClBC,EAAE,EAAEnC,OAAO,CAACmC,EAAE;YACdnC,OAAO,EAAPA,OAAO;YACPoC,aAAa,EAAEX,CAAC;YAChBY,QAAQ,EAAE;cAAEpC,CAAC,EAAED,OAAO,CAACC,CAAC;cAAEC,CAAC,EAAEF,OAAO,CAACE;;WACrC,CAAC;;QAEH;MACD,KAAK,QAAQ;QACZ,IAAIH,QAAQ,CAACC,OAAO,EAAEC,CAAC,EAAEC,CAAC,EAAEC,IAAI,EAAEC,GAAG,EAAEC,aAAa,CAAC,EAAE;UACtDsB,aAAa,CAACO,IAAI,CAAC;YAClBC,EAAE,EAAEnC,OAAO,CAACmC,EAAE;YACdnC,OAAO,EAAPA,OAAO;YACPoC,aAAa,EAAEX,CAAC;YAChBY,QAAQ,EAAE;cAAEpC,CAAC,EAAED,OAAO,CAACC,CAAC;cAAEC,CAAC,EAAEF,OAAO,CAACE;;WACrC,CAAC;;QAEH;MACD,KAAK,SAAS;QACb,IAAIM,MAAM,CAACR,OAAO,EAAEC,CAAC,EAAEC,CAAC,EAAEC,IAAI,EAAEC,GAAG,EAAEC,aAAa,CAAC,EAAE;UACpDsB,aAAa,CAACO,IAAI,CAAC;YAClBC,EAAE,EAAEnC,OAAO,CAACmC,EAAE;YACdnC,OAAO,EAAPA,OAAO;YACPoC,aAAa,EAAEX,CAAC;YAChBY,QAAQ,EAAE;cAAEpC,CAAC,EAAED,OAAO,CAACC,CAAC;cAAEC,CAAC,EAAEF,OAAO,CAACE;;WACrC,CAAC;;QAEH;;;EAIH,IAAIyB,aAAa,CAACd,MAAM,KAAK,CAAC,EAAE;IAC/B,OAAO,IAAI;;EAGZ,IAAIc,aAAa,CAACd,MAAM,KAAK,CAAC,EAAE;IAC/B,OAAOc,aAAa,CAAC,CAAC,CAAC;;EAGxBA,aAAa,CAACW,IAAI,CAAC,UAACC,CAAC,EAAEC,CAAC,EAAK;IAC5B,IAAID,CAAC,CAACE,MAAM,GAAGD,CAAC,CAACC,MAAM,EAAE;MACxB,OAAO,CAAC;;IAGT,IAAIF,CAAC,CAACE,MAAM,GAAGD,CAAC,CAACC,MAAM,EAAE;MACxB,OAAO,CAAC,CAAC;;IAGV,IAAIF,CAAC,CAACJ,EAAE,GAAGK,CAAC,CAACL,EAAE,EAAE;MAChB,OAAO,CAAC;;IAGT,IAAII,CAAC,CAACJ,EAAE,GAAGK,CAAC,CAACL,EAAE,EAAE;MAChB,OAAO,CAAC,CAAC;;IAGV,OAAO,CAAC;GACR,CAAC;EAEF,OAAOR,aAAa,CAACA,aAAa,CAACd,MAAM,GAAG,CAAC,CAAC;AAC/C;;AC7Ee,SAAS6B,YAAYA,CAACjB,CAAC,EAAEC,QAAQ,EAAE7B,QAAQ,EAAE8C,KAAK,EAAE;EAClE,IAAMxC,IAAI,GAAG,CAACwC,KAAK,CAACxC,IAAI,GAAGwC,KAAK,CAACC,SAAS,GAAGnB,CAAC,CAACoB,KAAK,GAAGpB,CAAC,CAACqB,MAAM,CAACC,UAAU;EAC1E,IAAM3C,GAAG,GAAG,CAACuC,KAAK,CAACvC,GAAG,GAAGuC,KAAK,CAACK,QAAQ,GAAGvB,CAAC,CAACwB,KAAK,GAAGxB,CAAC,CAACqB,MAAM,CAACI,SAAS;EAEtE,IAAMC,cAAc,GAAG3B,cAAc,CAACC,CAAC,EAAEC,QAAQ,EAAEvB,IAAI,EAAEC,GAAG,EAAEP,QAAQ,EAAE8C,KAAK,CAAC7C,IAAI,CAAC;EACnF,IAAIqD,cAAc,KAAK,IAAI,EAAE;IAC5B,OAAOA,cAAc;;EAGtB,OAAO;IACNhB,EAAE,EAAE,IAAI;IACRnC,OAAO,EAAE,IAAI;IACboC,aAAa,EAAEX,CAAC;IAChBY,QAAQ,EAAE;MAAEpC,CAAC,EAAEmD,IAAI,CAACC,KAAK,CAAClD,IAAI,GAAGN,QAAQ,GAAG8C,KAAK,CAAC7C,IAAI,CAAC;MAAEI,CAAC,EAAEkD,IAAI,CAACC,KAAK,CAACjD,GAAG,GAAGP,QAAQ,GAAG8C,KAAK,CAAC7C,IAAI;;GAClG;AACF;;ACfe,SAASwD,iBAAiBA,CAAC7B,CAAC,EAAEC,QAAQ,EAAE7B,QAAQ,EAAE8C,KAAK,EAAE;EACvE,IAAMxC,IAAI,GAAG,CAACwC,KAAK,CAACxC,IAAI,GAAGwC,KAAK,CAACC,SAAS,GAAGnB,CAAC,CAACoB,KAAK,GAAGpB,CAAC,CAACqB,MAAM,CAACC,UAAU;EAC1E,IAAM3C,GAAG,GAAG,CAACuC,KAAK,CAACvC,GAAG,GAAGuC,KAAK,CAACK,QAAQ,GAAGvB,CAAC,CAACwB,KAAK,GAAGxB,CAAC,CAACqB,MAAM,CAACI,SAAS;EAEtE,IAAMC,cAAc,GAAG3B,cAAc,CAACC,CAAC,EAAEC,QAAQ,EAAEvB,IAAI,EAAEC,GAAG,EAAEP,QAAQ,EAAE8C,KAAK,CAAC7C,IAAI,CAAC;EACnF,IAAIqD,cAAc,KAAK,IAAI,EAAE;IAC5B,OAAOA,cAAc;;EAGtB,OAAO;IACNhB,EAAE,EAAE,IAAI;IACRnC,OAAO,EAAE,IAAI;IACboC,aAAa,EAAEX,CAAC;IAChBY,QAAQ,EAAE;MAAEpC,CAAC,EAAEmD,IAAI,CAACC,KAAK,CAAClD,IAAI,GAAGN,QAAQ,GAAG8C,KAAK,CAAC7C,IAAI,CAAC;MAAEI,CAAC,EAAEkD,IAAI,CAACC,KAAK,CAACjD,GAAG,GAAGP,QAAQ,GAAG8C,KAAK,CAAC7C,IAAI;;GAClG;AACF;;ACfA,IAAMyD,WAAW,GAAG,CAAC;AACrB,IAAIC,cAAc,GAAG,IAAI;AACzB,IAAIC,iBAAiB,GAAG,CAAC;AACzB,IAAMC,mBAAmB,GAAG,GAAG;AAE/B,AAAe,SAASC,SAASA,CAACC,KAAK,EAAElC,QAAQ,EAAE7B,QAAQ,EAAEgE,KAAK,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,SAAS,EAAEC,WAAW,EAAEC,cAAc,EAAEC,OAAO,EAAE;EACzI,IAAMC,QAAQ,GAAAC,QAAA,KACVR,KAAK,CACR;EAED,IAAM1D,IAAI,GAAG,CAAC0D,KAAK,CAAC1D,IAAI,GAAG0D,KAAK,CAACjB,SAAS,GAAGgB,KAAK,CAACf,KAAK,GAAGe,KAAK,CAACd,MAAM,CAACC,UAAU;EAClF,IAAM3C,GAAG,GAAG,CAACyD,KAAK,CAACzD,GAAG,GAAGyD,KAAK,CAACb,QAAQ,GAAGY,KAAK,CAACX,KAAK,GAAGW,KAAK,CAACd,MAAM,CAACI,SAAS;EAE9E,IAAIU,KAAK,CAACU,WAAW,CAACC,OAAO,KAAKhB,WAAW,IAAI,CAAC,CAACM,KAAK,CAACW,KAAK,EAAE;IAC/D,IAAIC,KAAK,GAAG,KAAK;IACjB,IAAIR,WAAW,EAAE;MAChB,IAAIT,cAAc,KAAK,IAAI,EAAE;QAC5BA,cAAc,GAAGhC,cAAc,CAACoC,KAAK,EAAElC,QAAQ,EAAEvB,IAAI,EAAEC,GAAG,EAAEP,QAAQ,EAAEgE,KAAK,CAAC/D,IAAI,CAAC;;MAGlF,IAAI0D,cAAc,KAAK,IAAI,IAAIA,cAAc,CAACxD,OAAO,CAAC0E,SAAS,EAAE;QAChElB,cAAc,CAACxD,OAAO,CAACC,CAAC,GAAI,CAAC4D,KAAK,CAAC1D,IAAI,GAAG0D,KAAK,CAACjB,SAAS,IAAKgB,KAAK,CAACe,OAAO,GAAGd,KAAK,CAACe,kBAAkB,CAACzE,IAAI,CAAC,GAAGqD,cAAc,CAACxD,OAAO,CAACsB,KAAK,GAAG,CAAC;QAC/IkC,cAAc,CAACxD,OAAO,CAACE,CAAC,GAAI,CAAC2D,KAAK,CAACzD,GAAG,GAAGyD,KAAK,CAACjB,SAAS,IAAKgB,KAAK,CAACiB,OAAO,GAAGhB,KAAK,CAACe,kBAAkB,CAACxE,GAAG,CAAC,GAAGoD,cAAc,CAACxD,OAAO,CAACuB,MAAM,GAAG,CAAC;QAE9IkD,KAAK,GAAG,IAAI;QAEZ,IAAIP,cAAc,EAAE;UACnBA,cAAc,CACbV,cAAc,EACbI,KAAK,CAACkB,OAAO,GAAGjB,KAAK,CAACW,KAAK,EAC3BZ,KAAK,CAACmB,OAAO,GAAGlB,KAAK,CAACmB,KACxB,CAAC;;QAGF,IAAIb,OAAO,EAAE;UACZA,OAAO,CAAC,IAAI,CAAC;;;;IAKhB,IAAI,CAACM,KAAK,EAAE;MAEX,IAAI,CAACV,SAAS,EAAE;QACfK,QAAQ,CAACjE,IAAI,IAAKyD,KAAK,CAACkB,OAAO,GAAGjB,KAAK,CAACW,KAAM;;MAG/C,IAAI,CAACR,SAAS,EAAE;QACfI,QAAQ,CAAChE,GAAG,IAAKwD,KAAK,CAACmB,OAAO,GAAGlB,KAAK,CAACmB,KAAM;;;IAI/C,IAAIpB,KAAK,CAACU,WAAW,CAACW,WAAW,KAAK,OAAO,EAAE;MAC9CxB,iBAAiB,GAAGyB,UAAU,CAAC,YAAM;QACpC1B,cAAc,GAAG,IAAI;QACrBM,QAAQ,CAAAO,QAAA,KACJD,QAAQ;UACXI,KAAK,EAAE,IAAI;UACXQ,KAAK,EAAE;UACP,CAAC;OACF,EAAEtB,mBAAmB,CAAC;;GAExB,MAAM;IACN,IAAIS,OAAO,EAAE;MACZA,OAAO,CAAC3C,cAAc,CAACoC,KAAK,EAAElC,QAAQ,EAAEvB,IAAI,EAAEC,GAAG,EAAEP,QAAQ,EAAEgE,KAAK,CAAC/D,IAAI,CAAC,EAAE;QAAEG,CAAC,EAAEE,IAAI;QAAED,CAAC,EAAEE;OAAK,CAAC;;IAG/FoD,cAAc,GAAG,IAAI;;EAGtBM,QAAQ,CAAAO,QAAA,KACJD,QAAQ;IACXI,KAAK,EAAEZ,KAAK,CAACkB,OAAO;IACpBE,KAAK,EAAEpB,KAAK,CAACmB;IACb,CAAC;AACH;;AC5EA,IAAMI,WAAW,GAAG,IAAI;AAExB,AAAe,SAASC,UAAUA,CAACxB,KAAK,EAAEC,KAAK,EAAEC,QAAQ,EAAEuB,OAAO,EAAEC,OAAO,EAAE;EAC5E,IAAIxF,IAAI,GAAG+D,KAAK,CAAC/D,IAAI;EACrB,IAAG8D,KAAK,CAAC2B,MAAM,GAAG,CAAC,EAAE;IACpBzF,IAAI,IAAIqF,WAAW;GACnB,MAAM;IACNrF,IAAI,IAAIqF,WAAW;;EAGpBrF,IAAI,GAAGsD,IAAI,CAACoC,GAAG,CAAC1F,IAAI,EAAEuF,OAAO,CAAC;EAC9BvF,IAAI,GAAGsD,IAAI,CAACqC,GAAG,CAAC3F,IAAI,EAAEwF,OAAO,CAAC;EAI9BxB,QAAQ,CAAAO,QAAA,KACJR,KAAK;IACR/D,IAAI,EAAJA;IACA,CAAC;AACH;;ACnBe,SAAS4F,YAAYA,CAAChE,QAAQ,EAAE;EAC9CA,QAAQ,CAACY,IAAI,CAAC,UAACC,CAAC,EAAEC,CAAC,EAAK;IACvB,IAAGD,CAAC,CAACE,MAAM,KAAKD,CAAC,CAACC,MAAM,EAAE;MACzB,OAAOF,CAAC,CAACE,MAAM,GAAGD,CAAC,CAACC,MAAM;;IAG3B,IAAGF,CAAC,CAACoD,IAAI,KAAKnD,CAAC,CAACmD,IAAI,EAAE;MACrB,IAAGpD,CAAC,CAACqD,MAAM,KAAKpD,CAAC,CAACoD,MAAM,EAAE;QACzB,OAAO,CAAC;;MAGT,IAAGrD,CAAC,CAACqD,MAAM,GAAGpD,CAAC,CAACoD,MAAM,EAAE;QACvB,OAAO,CAAC;;MAGT,OAAO,CAAC,CAAC;;IAGV,IAAGrD,CAAC,CAACoD,IAAI,GAAGnD,CAAC,CAACmD,IAAI,EAAE;MACnB,OAAO,CAAC;;IAGT,IAAGpD,CAAC,CAACoD,IAAI,GAAGnD,CAAC,CAACmD,IAAI,EAAE;MACnB,OAAO,CAAC,CAAC;;IAGV,OAAO,CAAC;GACR,CAAC;EAEF,OAAOjE,QAAQ;AAChB;;IC9BqBmE,YAAY;EAChC,SAAAA,aAAY1D,EAAE,EAAElC,CAAC,EAAEC,CAAC,EAAEuC,MAAM,EAAEiC,SAAS,EAAE;IACxC,IAAI,CAACvC,EAAE,GAAGA,EAAE;IACZ,IAAI,CAAClC,CAAC,GAAGA,CAAC;IACV,IAAI,CAACC,CAAC,GAAGA,CAAC;IACV,IAAI,CAAC,SAAS,CAAC,GAAGuC,MAAM;IACxB,IAAI,CAACiC,SAAS,GAAGA,SAAS;;EAC1B,OAAAoB,YAAA,CAAAD,YAAA;IAAAE,GAAA;IAAAC,GAAA,EAMD,SAAAA,MAAa;MACZ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B;IAAAC,GAAA,EAND,SAAAA,IAAWxD,MAAM,EAAE;MAClB,IAAI,CAAC,SAAS,CAAC,GAAGA,MAAM;;;IACxBsD,GAAA;IAAAC,GAAA,EAMD,SAAAA,MAAsB;MACrB,OAAO,cAAc;;;AACrB;;ICjBmBE,WAAW,0BAAAC,aAAA;EAc/B,SAAAD,YAAAE,IAAA,EAAiE;IAAA,IAAAC,KAAA;IAAA,IAAnDlE,EAAE,GAAAiE,IAAA,CAAFjE,EAAE;MAAElC,CAAC,GAAAmG,IAAA,CAADnG,CAAC;MAAEC,CAAC,GAAAkG,IAAA,CAADlG,CAAC;MAAEoB,KAAK,GAAA8E,IAAA,CAAL9E,KAAK;MAAEC,MAAM,GAAA6E,IAAA,CAAN7E,MAAM;MAAE+E,GAAG,GAAAF,IAAA,CAAHE,GAAG;MAAE7D,MAAM,GAAA2D,IAAA,CAAN3D,MAAM;MAAEiC,SAAS,GAAA0B,IAAA,CAAT1B,SAAS;IAC5D2B,KAAA,GAAAF,aAAA,CAAAI,IAAA,OAAMpE,EAAE,EAAElC,CAAC,EAAEC,CAAC,EAAEuC,MAAM,EAAEiC,SAAS,CAAC;IAElC2B,KAAA,CAAK/E,KAAK,GAAGA,KAAK;IAClB+E,KAAA,CAAK9E,MAAM,GAAGA,MAAM;IACpB8E,KAAA,CAAKC,GAAG,GAAGA,GAAG;IAAC,OAAAD,KAAA;;EACfG,cAAA,CAAAN,WAAA,EAAAC,aAAA;EAAA,IAAAM,MAAA,GAAAP,WAAA,CAAAQ,SAAA;EAAAD,MAAA,CAEDE,IAAI,GAAJ,SAAAA,IAAIA,CAACC,EAAE,EAAEC,MAAM,EAAEC,OAAO,EAAE;IACzB,IAAI,CAACF,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACG,EAAE,GAAGH,EAAE;IACZ,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,OAAO,GAAGA,OAAO;GACtB;EAAA,OAAAhB,YAAA,CAAAI,WAAA;IAAAH,GAAA;IAAAC,GAAA,EAED,SAAAA,MAAsB;MACrB,OAAO,aAAa;;;AACpB,EA/BuCH,YAAY;;ACFX,IAErBmB,mBAAmB,0BAAAb,aAAA;EACvC,SAAAa,oBAAY7E,EAAE,EAAElC,CAAC,EAAEC,CAAC,EAAEyF,IAAI,EAAEC,MAAM,EAAEnD,MAAM,EAAEiC,SAAS,EAAE;IAAA,IAAA2B,KAAA;IACtDA,KAAA,GAAAF,aAAA,CAAAI,IAAA,OAAMpE,EAAE,EAAElC,CAAC,EAAEC,CAAC,EAAEuC,MAAM,EAAEiC,SAAS,CAAC;IAElC2B,KAAA,CAAKV,IAAI,GAAGA,IAAI;IAChBU,KAAA,CAAKT,MAAM,GAAGA,MAAM;IAAC,OAAAS,KAAA;;EACrBG,cAAA,CAAAQ,mBAAA,EAAAb,aAAA;EAAA,OAAAL,YAAA,CAAAkB,mBAAA;IAAAjB,GAAA;IAAAC,GAAA,EAED,SAAAA,MAAsB;MACrB,OAAO,qBAAqB;;;AAC5B,EAV+CH,YAAY;;ICAxCoB,MAAM,0BAAAC,oBAAA;EAY1B,SAAAD,OAAAb,IAAA,EAAmE;IAAA,IAAAC,KAAA;IAAA,IAArDlE,EAAE,GAAAiE,IAAA,CAAFjE,EAAE;MAAElC,CAAC,GAAAmG,IAAA,CAADnG,CAAC;MAAEC,CAAC,GAAAkG,IAAA,CAADlG,CAAC;MAAEK,MAAM,GAAA6F,IAAA,CAAN7F,MAAM;MAAEoF,IAAI,GAAAS,IAAA,CAAJT,IAAI;MAAEC,MAAM,GAAAQ,IAAA,CAANR,MAAM;MAAEnD,MAAM,GAAA2D,IAAA,CAAN3D,MAAM;MAAEiC,SAAS,GAAA0B,IAAA,CAAT1B,SAAS;IAC9D2B,KAAA,GAAAa,oBAAA,CAAAX,IAAA,OAAMpE,EAAE,EAAElC,CAAC,EAAEC,CAAC,EAAEyF,IAAI,EAAEC,MAAM,EAAEnD,MAAM,EAAEiC,SAAS,CAAC;IAEhD2B,KAAA,CAAK9F,MAAM,GAAGA,MAAM;IAAC,OAAA8F,KAAA;;EACrBG,cAAA,CAAAS,MAAA,EAAAC,oBAAA;EAAA,OAAApB,YAAA,CAAAmB,MAAA;IAAAlB,GAAA;IAAAC,GAAA,EAED,SAAAA,MAAsB;MACrB,OAAO,QAAQ;;;AACf,EApBkCgB,mBAAmB;;ICAlCG,QAAQ,0BAAAD,oBAAA;EAY5B,SAAAC,SAAAf,IAAA,EAA2F;IAAA,IAAAC,KAAA;IAAA,IAA7ElE,EAAE,GAAAiE,IAAA,CAAFjE,EAAE;MAAEiF,SAAS,GAAAhB,IAAA,CAATgB,SAAS;MAAExG,MAAM,GAAAwF,IAAA,CAANxF,MAAM;MAAEgF,MAAM,GAAAQ,IAAA,CAANR,MAAM;MAAEnD,MAAM,GAAA2D,IAAA,CAAN3D,MAAM;MAAE4E,aAAa,GAAAjB,IAAA,CAAbiB,aAAa;MAAEC,mBAAmB,GAAAlB,IAAA,CAAnBkB,mBAAmB;IACtFjB,KAAA,GAAAa,oBAAA,CAAAX,IAAA,OAAMpE,EAAE,EAAEvB,MAAM,CAAC,CAAC,CAAC,CAACX,CAAC,EAAEW,MAAM,CAAC,CAAC,CAAC,CAACV,CAAC,EAAE,MAAM,EAAE0F,MAAM,EAAEnD,MAAM,EAAE,KAAK,CAAC;IAElE4D,KAAA,CAAKzF,MAAM,GAAGA,MAAM;IACpByF,KAAA,CAAKe,SAAS,GAAGA,SAAS;IAC1Bf,KAAA,CAAKgB,aAAa,GAAGA,aAAa;IAClChB,KAAA,CAAKiB,mBAAmB,GAAGA,mBAAmB;IAAC,OAAAjB,KAAA;;EAC/CG,cAAA,CAAAW,QAAA,EAAAD,oBAAA;EAAA,OAAApB,YAAA,CAAAqB,QAAA;IAAApB,GAAA;IAAAC,GAAA,EAED,SAAAA,MAAsB;MACrB,OAAO,UAAU;;;AACjB,EAvBoCgB,mBAAmB;;ICApCO,OAAO,0BAAAL,oBAAA;EAU3B,SAAAK,QAAAnB,IAAA,EAA6D;IAAA,IAAAC,KAAA;IAAA,IAA/ClE,EAAE,GAAAiE,IAAA,CAAFjE,EAAE;MAAEvB,MAAM,GAAAwF,IAAA,CAANxF,MAAM;MAAE+E,IAAI,GAAAS,IAAA,CAAJT,IAAI;MAAEC,MAAM,GAAAQ,IAAA,CAANR,MAAM;MAAEnD,MAAM,GAAA2D,IAAA,CAAN3D,MAAM;MAAEiC,SAAS,GAAA0B,IAAA,CAAT1B,SAAS;IACxD2B,KAAA,GAAAa,oBAAA,CAAAX,IAAA,OAAMpE,EAAE,EAAEvB,MAAM,CAAC,CAAC,CAAC,CAACX,CAAC,EAAEW,MAAM,CAAC,CAAC,CAAC,CAACV,CAAC,EAAEyF,IAAI,EAAEC,MAAM,EAAEnD,MAAM,EAAEiC,SAAS,CAAC;IAEpE2B,KAAA,CAAKzF,MAAM,GAAGA,MAAM;IAAC,OAAAyF,KAAA;;EACrBG,cAAA,CAAAe,OAAA,EAAAL,oBAAA;EAAA,OAAApB,YAAA,CAAAyB,OAAA;IAAAxB,GAAA;IAAAC,GAAA,EAED,SAAAA,MAAsB;MACrB,OAAO,SAAS;;;AAChB,EAlBmCgB,mBAAmB;;ICAnCQ,IAAI,0BAAAN,oBAAA;EAaxB,SAAAM,KAAApB,IAAA,EAA0E;IAAA,IAAAC,KAAA;IAAA,IAA5DlE,EAAE,GAAAiE,IAAA,CAAFjE,EAAE;MAAElC,CAAC,GAAAmG,IAAA,CAADnG,CAAC;MAAEC,CAAC,GAAAkG,IAAA,CAADlG,CAAC;MAAEoB,KAAK,GAAA8E,IAAA,CAAL9E,KAAK;MAAEC,MAAM,GAAA6E,IAAA,CAAN7E,MAAM;MAAEoE,IAAI,GAAAS,IAAA,CAAJT,IAAI;MAAEC,MAAM,GAAAQ,IAAA,CAANR,MAAM;MAAEnD,MAAM,GAAA2D,IAAA,CAAN3D,MAAM;MAAEiC,SAAS,GAAA0B,IAAA,CAAT1B,SAAS;IACrE2B,KAAA,GAAAa,oBAAA,CAAAX,IAAA,OAAMpE,EAAE,EAAElC,CAAC,EAAEC,CAAC,EAAEyF,IAAI,EAAEC,MAAM,EAAEnD,MAAM,EAAEiC,SAAS,CAAC;IAEhD2B,KAAA,CAAK/E,KAAK,GAAGA,KAAK;IAClB+E,KAAA,CAAK9E,MAAM,GAAGA,MAAM;IAAC,OAAA8E,KAAA;;EACrBG,cAAA,CAAAgB,IAAA,EAAAN,oBAAA;EAAA,OAAApB,YAAA,CAAA0B,IAAA;IAAAzB,GAAA;IAAAC,GAAA,EAED,SAAAA,MAAsB;MACrB,OAAO,MAAM;;;AACb,EAtBgCgB,mBAAmB;;ACFtC,SAASS,YAAYA,CAACC,OAAO,EAAE1H,OAAO,EAAEG,IAAI,EAAEC,GAAG,EAAEC,aAAa,EAAE;EAChFqH,OAAO,CAACC,SAAS,EAAE;EAEnBD,OAAO,CAACE,GAAG,CACVzH,IAAI,GAAGH,OAAO,CAACC,CAAC,GAAGI,aAAa,EAChCD,GAAG,GAAGJ,OAAO,CAACE,CAAC,GAAGG,aAAa,EAC/BL,OAAO,CAACO,MAAM,GAAGF,aAAa,EAC9B,CAAC,EACD,CAAC,GAAG+C,IAAI,CAACyE,EACV,CAAC;EAED,IAAG7H,OAAO,CAAC2F,IAAI,EAAE;IAChB+B,OAAO,CAAC/B,IAAI,EAAE;;EAEf,IAAG3F,OAAO,CAAC4F,MAAM,EAAE;IAClB8B,OAAO,CAAC9B,MAAM,EAAE;;AAElB;;ACjBAkC,MAAM,CAACC,mBAAmB,GAAG,EAAE;AAC/BD,MAAM,CAACC,mBAAmB,CAACC,QAAQ,GAAG,EAAE;AAExC,AAAe,SAASC,WAAWA,CAACP,OAAO,EAAE1H,OAAO,EAAEG,IAAI,EAAEC,GAAG,EAAEC,aAAa,EAAE;EAC/E,IAAG,CAAC0H,mBAAmB,CAACC,QAAQ,CAAChI,OAAO,CAACsG,GAAG,CAAC,EAAE;IAC9CyB,mBAAmB,CAACC,QAAQ,CAAChI,OAAO,CAACsG,GAAG,CAAC,GAAG,IAAI4B,KAAK,EAAE;IACvDH,mBAAmB,CAACC,QAAQ,CAAChI,OAAO,CAACsG,GAAG,CAAC,CAACA,GAAG,GAAGtG,OAAO,CAACsG,GAAG;;EAG5D,IAAG,CAACtG,OAAO,CAAC4G,EAAE,EAAE;IACfc,OAAO,CAACS,SAAS,CAChBJ,mBAAmB,CAACC,QAAQ,CAAChI,OAAO,CAACsG,GAAG,CAAC,EACzCnG,IAAI,GAAGH,OAAO,CAACC,CAAC,GAAGI,aAAa,EAChCD,GAAG,GAAGJ,OAAO,CAACE,CAAC,GAAGG,aAAa,EAC/BL,OAAO,CAACsB,KAAK,GAAGjB,aAAa,EAC7BL,OAAO,CAACuB,MAAM,GAAGlB,aAClB,CAAC;GACD,MAAM;IACNqH,OAAO,CAACS,SAAS,CAChBJ,mBAAmB,CAACC,QAAQ,CAAChI,OAAO,CAACsG,GAAG,CAAC,EACzCtG,OAAO,CAAC4G,EAAE,EACV5G,OAAO,CAAC+G,EAAE,EACV/G,OAAO,CAAC6G,MAAM,EACd7G,OAAO,CAAC8G,OAAO,EACf3G,IAAI,GAAGH,OAAO,CAACC,CAAC,GAAGI,aAAa,EAChCD,GAAG,GAAGJ,OAAO,CAACE,CAAC,GAAGG,aAAa,EAC/BL,OAAO,CAACsB,KAAK,GAAGjB,aAAa,EAC7BL,OAAO,CAACuB,MAAM,GAAGlB,aAClB,CAAC;;AAEH;;AC9Be,SAAS+H,cAAcA,CACrCV,OAAO,EACP1H,OAAO,EACPG,IAAI,EACJC,GAAG,EACHC,aAAa,EACZ;EACD,IAAMgI,gBAAgB,GAAGX,OAAO,CAACN,SAAS;EAC1C,IAAMxG,MAAM,GAAGZ,OAAO,CAACY,MAAM,CAAC0H,GAAG,CAAC,UAACC,CAAC;IAAA,OAAM;MACzCtI,CAAC,EAAEE,IAAI,GAAGoI,CAAC,CAACtI,CAAC,GAAGI,aAAa;MAC7BH,CAAC,EAAEE,GAAG,GAAGmI,CAAC,CAACrI,CAAC,GAAGG;KACf;GAAC,CAAC;EAEH,IAAIO,MAAM,CAACC,MAAM,GAAG,CAAC,EAAE;EAEvB6G,OAAO,CAACC,SAAS,EAAE;EACnBD,OAAO,CAACc,MAAM,CAAC5H,MAAM,CAAC,CAAC,CAAC,CAACX,CAAC,EAAEW,MAAM,CAAC,CAAC,CAAC,CAACV,CAAC,CAAC;EAExC,IAAIF,OAAO,CAACqH,aAAa,EAAE;IAC1B,KAAK,IAAItG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,MAAM,CAACC,MAAM,GAAG,CAAC,EAAEE,CAAC,EAAE,EAAE;MAC3C,IAAM0H,IAAI,GAAG7H,MAAM,CAACG,CAAC,GAAG,CAAC,CAAC;MAC1B,IAAM2H,IAAI,GAAG9H,MAAM,CAACG,CAAC,CAAC;MACtB,IAAM4H,IAAI,GAAG/H,MAAM,CAACG,CAAC,GAAG,CAAC,CAAC;MAG1B,IAAM6H,GAAG,GAAGF,IAAI,CAACzI,CAAC,GAAGwI,IAAI,CAACxI,CAAC;MAC3B,IAAM4I,GAAG,GAAGH,IAAI,CAACxI,CAAC,GAAGuI,IAAI,CAACvI,CAAC;MAC3B,IAAM4I,GAAG,GAAGH,IAAI,CAAC1I,CAAC,GAAGyI,IAAI,CAACzI,CAAC;MAC3B,IAAM8I,GAAG,GAAGJ,IAAI,CAACzI,CAAC,GAAGwI,IAAI,CAACxI,CAAC;MAG3B,IAAM8I,IAAI,GAAG5F,IAAI,CAAC6F,KAAK,CAACL,GAAG,EAAEC,GAAG,CAAC;MACjC,IAAMK,IAAI,GAAG9F,IAAI,CAAC6F,KAAK,CAACH,GAAG,EAAEC,GAAG,CAAC;MAGjC,IAAMI,QAAQ,GAAIP,GAAG,GAAGI,IAAI,GAAIhJ,OAAO,CAACsH,mBAAmB;MAC3D,IAAM8B,QAAQ,GAAIP,GAAG,GAAGG,IAAI,GAAIhJ,OAAO,CAACsH,mBAAmB;MAC3D,IAAM+B,QAAQ,GAAIP,GAAG,GAAGI,IAAI,GAAIlJ,OAAO,CAACsH,mBAAmB;MAC3D,IAAMgC,QAAQ,GAAIP,GAAG,GAAGG,IAAI,GAAIlJ,OAAO,CAACsH,mBAAmB;MAE3D,IAAMiC,WAAW,GAAG;QACnBtJ,CAAC,EAAEyI,IAAI,CAACzI,CAAC,GAAGkJ,QAAQ;QACpBjJ,CAAC,EAAEwI,IAAI,CAACxI,CAAC,GAAGkJ;OACZ;MACD,IAAMI,SAAS,GAAG;QACjBvJ,CAAC,EAAEyI,IAAI,CAACzI,CAAC,GAAGoJ,QAAQ;QACpBnJ,CAAC,EAAEwI,IAAI,CAACxI,CAAC,GAAGoJ;OACZ;MAED5B,OAAO,CAAC+B,MAAM,CAACF,WAAW,CAACtJ,CAAC,EAAEsJ,WAAW,CAACrJ,CAAC,CAAC;MAC5CwH,OAAO,CAACgC,gBAAgB,CAAChB,IAAI,CAACzI,CAAC,EAAEyI,IAAI,CAACxI,CAAC,EAAEsJ,SAAS,CAACvJ,CAAC,EAAEuJ,SAAS,CAACtJ,CAAC,CAAC;;IAInEwH,OAAO,CAAC+B,MAAM,CAAC7I,MAAM,CAACA,MAAM,CAACC,MAAM,GAAG,CAAC,CAAC,CAACZ,CAAC,EAAEW,MAAM,CAACA,MAAM,CAACC,MAAM,GAAG,CAAC,CAAC,CAACX,CAAC,CAAC;GACxE,MAAM;IAEN,KAAK,IAAIa,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGH,MAAM,CAACC,MAAM,EAAEE,EAAC,EAAE,EAAE;MACvC2G,OAAO,CAAC+B,MAAM,CAAC7I,MAAM,CAACG,EAAC,CAAC,CAACd,CAAC,EAAEW,MAAM,CAACG,EAAC,CAAC,CAACb,CAAC,CAAC;;;EAI1CwH,OAAO,CAACN,SAAS,GAAGpH,OAAO,CAACoH,SAAS;EACrCM,OAAO,CAAC9B,MAAM,EAAE;EAChB8B,OAAO,CAACN,SAAS,GAAGiB,gBAAgB;AACrC;;ACjEe,SAASsB,aAAaA,CAACjC,OAAO,EAAE1H,OAAO,EAAEG,IAAI,EAAEC,GAAG,EAAEC,aAAa,EAAE;EACjFqH,OAAO,CAACC,SAAS,EAAE;EAEnBD,OAAO,CAACc,MAAM,CACbrI,IAAI,GAAGH,OAAO,CAACY,MAAM,CAAC,CAAC,CAAC,CAACX,CAAC,GAAGI,aAAa,EAC1CD,GAAG,GAAGJ,OAAO,CAACY,MAAM,CAAC,CAAC,CAAC,CAACV,CAAC,GAAGG,aAC7B,CAAC;EAED,KAAK,IAAIU,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGf,OAAO,CAACY,MAAM,CAACC,MAAM,EAAEE,CAAC,EAAE,EAAE;IAC/C2G,OAAO,CAAC+B,MAAM,CACbtJ,IAAI,GAAGH,OAAO,CAACY,MAAM,CAACG,CAAC,CAAC,CAACd,CAAC,GAAGI,aAAa,EAC1CD,GAAG,GAAGJ,OAAO,CAACY,MAAM,CAACG,CAAC,CAAC,CAACb,CAAC,GAAGG,aAC7B,CAAC;;EAGFqH,OAAO,CAAC+B,MAAM,CACbtJ,IAAI,GAAGH,OAAO,CAACY,MAAM,CAAC,CAAC,CAAC,CAACX,CAAC,GAAGI,aAAa,EAC1CD,GAAG,GAAGJ,OAAO,CAACY,MAAM,CAAC,CAAC,CAAC,CAACV,CAAC,GAAGG,aAC7B,CAAC;EAED,IAAIL,OAAO,CAAC2F,IAAI,EAAE;IACjB+B,OAAO,CAAC/B,IAAI,EAAE;;EAEf,IAAI3F,OAAO,CAAC4F,MAAM,EAAE;IACnB8B,OAAO,CAAC9B,MAAM,EAAE;;AAElB;;AC1Be,SAASgE,UAAUA,CAAClC,OAAO,EAAE1H,OAAO,EAAEG,IAAI,EAAEC,GAAG,EAAEC,aAAa,EAAE;EAC9E,IAAGL,OAAO,CAAC2F,IAAI,EAAE;IAChB+B,OAAO,CAACmC,QAAQ,CACf1J,IAAI,GAAGH,OAAO,CAACC,CAAC,GAAGI,aAAa,EAChCD,GAAG,GAAGJ,OAAO,CAACE,CAAC,GAAGG,aAAa,EAC/BL,OAAO,CAACsB,KAAK,GAAGjB,aAAa,EAC7BL,OAAO,CAACuB,MAAM,GAAGlB,aAClB,CAAC;;EAGF,IAAGL,OAAO,CAAC4F,MAAM,EAAE;IAClB8B,OAAO,CAACoC,UAAU,CACjB3J,IAAI,GAAGH,OAAO,CAACC,CAAC,GAAGI,aAAa,EAChCD,GAAG,GAAGJ,OAAO,CAACE,CAAC,GAAGG,aAAa,EAC/BL,OAAO,CAACsB,KAAK,GAAGjB,aAAa,EAC7BL,OAAO,CAACuB,MAAM,GAAGlB,aAClB,CAAC;;AAEH;;;AClBA,AAcA,IAAM0J,QAAQ,IAAAC,SAAA,OAAAA,SAAA,CACX,IAAI/C,MAAM,CAAC,EAAE,CAAC,CAAEhF,eAAe,IAAGwF,YAAY,EAAAuC,SAAA,CAC9C,IAAI9D,WAAW,CAAC,EAAE,CAAC,CAAEjE,eAAe,IAAGgG,WAAW,EAAA+B,SAAA,CAClD,IAAI7C,QAAQ,CAAC;EAAEvG,MAAM,EAAE,CAAC,EAAE;AAAE,CAAC,CAAC,CAAEqB,eAAe,IAAGmG,cAAc,EAAA4B,SAAA,CAChE,IAAIzC,OAAO,CAAC;EAAE3G,MAAM,EAAE,CAAC,EAAE;AAAE,CAAC,CAAC,CAAEqB,eAAe,IAAG0H,aAAa,EAAAK,SAAA,CAC9D,IAAIxC,IAAI,CAAC,EAAE,CAAC,CAAEvF,eAAe,IAAG2H,UAAU,EAAAI,SAAA,CAC5C;AAED,AAAe,SAASC,YAAYA,CACnCvC,OAAO,EACPpG,KAAK,EACLC,MAAM,EACNG,QAAQ,EACR7B,QAAQ,EACR8C,KAAK,EACJ;EACD,IAAMxC,IAAI,GAAGwC,KAAK,CAACxC,IAAI,GAAGwC,KAAK,CAACC,SAAS;EACzC,IAAMxC,GAAG,GAAGuC,KAAK,CAACvC,GAAG,GAAGuC,KAAK,CAACK,QAAQ;EAEtC,IAAIkH,aAAa,GAAG,EAAE;EACtB,IAAIC,eAAe,GAAG,EAAE;EAExB,IAAM9J,aAAa,GAAGT,YAAY,CAACC,QAAQ,EAAE8C,KAAK,CAAC7C,IAAI,CAAC;EAExD4H,OAAO,CAAC0C,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE9I,KAAK,EAAEC,MAAM,CAAC;EAEtC,SAAAK,SAAA,GAAAC,+BAAA,CAAsBH,QAAQ,GAAAI,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;IAAA,IAArB/B,OAAO,GAAA8B,KAAA,CAAAE,KAAA;IACjB,IACChC,OAAO,CAAC2F,IAAI,KAAKuE,aAAa,IAC9B,OAAOlK,OAAO,CAAC2F,IAAI,KAAK,WAAW,EAClC;MACD+B,OAAO,CAAC2C,SAAS,GAAGrK,OAAO,CAAC2F,IAAI;MAChCuE,aAAa,GAAGlK,OAAO,CAAC2F,IAAI;;IAG7B,IACC3F,OAAO,CAAC4F,MAAM,KAAKuE,eAAe,IAClC,OAAOnK,OAAO,CAAC4F,MAAM,KAAK,WAAW,EACpC;MACD8B,OAAO,CAAC4C,WAAW,GAAGtK,OAAO,CAAC4F,MAAM;MACpCuE,eAAe,GAAGnK,OAAO,CAAC4F,MAAM;;IAGjC,IAAM2E,IAAI,GAAGvK,OAAO,CAACiC,eAAe;IACpC,IAAI8H,QAAQ,CAACQ,IAAI,CAAC,EAAE;MACnBR,QAAQ,CAACQ,IAAI,CAAC,CAAC7C,OAAO,EAAE1H,OAAO,EAAEG,IAAI,EAAEC,GAAG,EAAEC,aAAa,CAAC;KAC1D,MAAM;MACN,MAAM,IAAImK,KAAK,CAAC,yBAAyB,GAAGD,IAAI,CAAC;;;AAGpD;;;AChEA,AAaA,IAAM7I,QAAQ,GAAG,EAAE;AAEnB,AAAe,SAAS+I,QAAQA,CAAArE,IAAA,EAoB7B;EAAA,IAnBF9E,KAAK,GAAA8E,IAAA,CAAL9E,KAAK;IACLC,MAAM,GAAA6E,IAAA,CAAN7E,MAAM;IAAAmJ,mBAAA,GAAAtE,IAAA,CACNuE,cAAc;IAAdA,cAAc,GAAAD,mBAAA,cAAG,IAAI,GAAAA,mBAAA;IAAAE,YAAA,GAAAxE,IAAA,CACrBf,OAAO;IAAPA,OAAO,GAAAuF,YAAA,cAAG,CAAC,GAAAA,YAAA;IAAAC,YAAA,GAAAzE,IAAA,CACXd,OAAO;IAAPA,OAAO,GAAAuF,YAAA,cAAG,CAAC,GAAAA,YAAA;IAAAC,aAAA,GAAA1E,IAAA,CACXvG,QAAQ;IAARA,QAAQ,GAAAiL,aAAA,cAAG,CAAC,GAAAA,aAAA;IACZC,OAAO,GAAA3E,IAAA,CAAP2E,OAAO;IACPC,YAAY,GAAA5E,IAAA,CAAZ4E,YAAY;IACZ7G,OAAO,GAAAiC,IAAA,CAAPjC,OAAO;IACPD,cAAc,GAAAkC,IAAA,CAAdlC,cAAc;IACd+G,OAAO,GAAA7E,IAAA,CAAP6E,OAAO;IACPC,OAAO,GAAA9E,IAAA,CAAP8E,OAAO;IAAAC,cAAA,GAAA/E,IAAA,CACPrC,SAAS;IAATA,SAAS,GAAAoH,cAAA,cAAG,KAAK,GAAAA,cAAA;IAAAC,cAAA,GAAAhF,IAAA,CACjBpC,SAAS;IAATA,SAAS,GAAAoH,cAAA,cAAG,KAAK,GAAAA,cAAA;IAAAC,qBAAA,GAAAjF,IAAA,CACjBkF,gBAAgB;IAAhBA,gBAAgB,GAAAD,qBAAA,cAAC,QAAQ,GAAAA,qBAAA;IAAAE,gBAAA,GAAAnF,IAAA,CACzBnC,WAAW;IAAXA,WAAW,GAAAsH,gBAAA,cAAC,KAAK,GAAAA,gBAAA;IAAAC,cAAA,GAAApF,IAAA,CACjBxD,SAAS;IAATA,SAAS,GAAA4I,cAAA,cAAC,CAAC,GAAAA,cAAA;IAAAC,aAAA,GAAArF,IAAA,CACXpD,QAAQ;IAARA,QAAQ,GAAAyI,aAAA,cAAC,CAAC,GAAAA,aAAA;IACPC,UAAU,GAAAC,6BAAA,CAAAvF,IAAA,EAAAwF,SAAA;EAEb,IAAG,CAAClK,QAAQ,CAACgK,UAAU,CAACvJ,EAAE,CAAC,EAAE;IAC5BT,QAAQ,CAACgK,UAAU,CAACvJ,EAAE,CAAC,GAAG,EAAE;;EAI7B,IAAA0J,SAAA,GAA0BC,cAAQ,CAAC,EAAE,CAAC;IAA/BnJ,KAAK,GAAAkJ,SAAA;IAAEE,QAAQ,GAAAF,SAAA;EACtB,IAAMG,SAAS,GAAGC,iBAAW,CAAC,UAACC,MAAM,EAAK;IACzC,IAAGA,MAAM,KAAK,IAAI,EAAE;MACnB,IAAMxE,OAAO,GAAGwE,MAAM,CAACC,UAAU,CAAC,IAAI,CAAC;MAEvC,IAAGb,gBAAgB,KAAK,KAAK,EAAE;QAC9B5D,OAAO,CAAC0E,qBAAqB,GAAG,KAAK;OACrC,MAAM;QACN1E,OAAO,CAAC0E,qBAAqB,GAAG,IAAI;QACpC1E,OAAO,CAAC2E,qBAAqB,GAAGf,gBAAgB;;MAGjDS,QAAQ,CAAC;QACRnH,kBAAkB,EAAEsH,MAAM,CAACI,qBAAqB,EAAE;QAClDJ,MAAM,EAANA,MAAM;QACNxE,OAAO,EAAPA,OAAO;QACPvH,IAAI,EAAEmB,KAAK,GAAC,CAAC;QACblB,GAAG,EAAEmB,MAAM,GAAC,CAAC;QACbD,KAAK,EAALA,KAAK;QACLC,MAAM,EAANA,MAAM;QACNzB,IAAI,EAAE;OACN,CAAC;;GAEH,EAAE,EAAE,CAAC;EAEN6C,KAAK,CAACK,QAAQ,GAAGA,QAAQ;EACzBL,KAAK,CAACC,SAAS,GAAGA,SAAS;EAG3B,IAAG,OAAOtB,KAAK,KAAK,QAAQ,IAAI,OAAOC,MAAM,KAAK,QAAQ,EAAE;IAC3D,MAAM,IAAIiJ,KAAK,CAAC,kDAAkD,CAAC;;EAGpE,IAAGnF,OAAO,GAAGC,OAAO,EAAE;IACrB,MAAM,IAAIkF,KAAK,CAAC,uCAAuC,CAAC;;EAGzD,IAAG,OAAOO,OAAO,KAAK,UAAU,IAAI,OAAOA,OAAO,KAAK,WAAW,EAAE;IACnE,MAAM,IAAIP,KAAK,CAAC,+BAA+B,CAAC;;EAGjD,IAAG,OAAOU,OAAO,KAAK,UAAU,EAAE;IACjC,MAAM,IAAIV,KAAK,CAAC,+BAA+B,CAAC;;EAIjD,IAAI+B,WAAW,GAAG,IAAI;EACtB,IAAG5B,cAAc,EAAE;IAClB4B,WAAW,GAAG,SAAdA,WAAWA,CAAI9K,CAAC;MAAA,OAAKkC,SAAS,CAAClC,CAAC,EAAEC,QAAQ,CAACgK,UAAU,CAACvJ,EAAE,CAAC,EAAEtC,QAAQ,EAAE8C,KAAK,EAAEoJ,QAAQ,EAAEhI,SAAS,EAAEC,SAAS,EAAEC,WAAW,EAAEC,cAAc,EAAEC,OAAO,CAAC;;;EAGlJ,IAAMqI,SAAS,GAAG,SAAZA,SAASA,CAAI/K,CAAC,EAAK;IACxB,IAAGwJ,OAAO,EAAE;MACXA,OAAO,CAACxJ,CAAC,CAAC;;IAGX,IAAG4D,OAAO,KAAKC,OAAO,EAAE;MACvBF,UAAU,CAAC3D,CAAC,EAAEkB,KAAK,EAAEoJ,QAAQ,EAAE1G,OAAO,EAAEC,OAAO,CAAC;;GAEjD;EAED,IAAImH,SAAS,GAAG,IAAI;EACpB,IAAG1B,OAAO,EAAE;IACX0B,SAAS,GAAG,SAAZA,SAASA,CAAIhL,CAAC;MAAA,OAAKsJ,OAAO,CAACrI,YAAY,CAACjB,CAAC,EAAEC,QAAQ,CAACgK,UAAU,CAACvJ,EAAE,CAAC,EAAEtC,QAAQ,EAAE8C,KAAK,CAAC,CAAC;;;EAKtF+J,eAAS,CAAC,YAAM;IACf,SAASC,iBAAiBA,CAAClL,CAAC,EAAE;MAC7BA,CAAC,CAACmL,cAAc,EAAE;MAClB5B,YAAY,CAAC1H,iBAAiB,CAAC7B,CAAC,EAAEC,QAAQ,CAACgK,UAAU,CAACvJ,EAAE,CAAC,EAAEtC,QAAQ,EAAE8C,KAAK,CAAC,CAAC;;IAG7E,IAAGqI,YAAY,IAAIrI,KAAK,CAACuJ,MAAM,EAAE;MAChCvJ,KAAK,CAACuJ,MAAM,CAACW,gBAAgB,CAAC,aAAa,EAAEF,iBAAiB,CAAC;MAC/D,OAAO,YAAM;QAAEhK,KAAK,CAACuJ,MAAM,CAACY,mBAAmB,CAAC,aAAa,EAAEH,iBAAiB,CAAC;OAAG;;GAErF,EAAE,CAAChK,KAAK,CAACuJ,MAAM,EAAElB,YAAY,CAAC,CAAC;EAGhC0B,eAAS,CAAC,YAAM;IACf,IAAIK,YAAY,GAAG,IAAI;IACvB,SAASC,MAAMA,GAAG;MACjB,IAAG,CAACD,YAAY,EAAE;QACjB;;MAGDrL,QAAQ,CAACgK,UAAU,CAACvJ,EAAE,CAAC,GAAG+I,OAAO,EAAE;MACnC,IAAM+B,cAAc,GAAGvH,YAAY,CAAChE,QAAQ,CAACgK,UAAU,CAACvJ,EAAE,CAAC,CAAC;MAE5D,IAAGQ,KAAK,CAAC+E,OAAO,EAAE;QACjBuC,YAAY,CACXtH,KAAK,CAAC+E,OAAO,EACbpG,KAAK,EACLC,MAAM,EACN0L,cAAc,EACdpN,QAAQ,EACR8C,KACD,CAAC;;MAGFmF,MAAM,CAACoF,qBAAqB,CAACF,MAAM,CAAC;;IAErClF,MAAM,CAACoF,qBAAqB,CAACF,MAAM,CAAC;IAEpC,OAAO,YAAM;MAAED,YAAY,GAAG,KAAK;KAAG;GACtC,EAAE,CAACpK,KAAK,CAACxC,IAAI,EAAEwC,KAAK,CAACvC,GAAG,EAAEuC,KAAK,CAACC,SAAS,EAAED,KAAK,CAACK,QAAQ,EAAEL,KAAK,CAAC7C,IAAI,EAAE6C,KAAK,CAAC+E,OAAO,EAAEwD,OAAO,CAAC,CAAC;EAEhG,oBACCiC,cAAA,CAAAC,aAAA,WAAA/I,QAAA;IACCgJ,GAAG,EAAErB,SAAU;IACf1K,KAAK,EAAEA,KAAM;IACbC,MAAM,EAAEA,MAAO;IACf+L,aAAa,EAAEf,WAAY;IAC3BtB,OAAO,EAAEuB,SAAU;IACnBzB,OAAO,EAAE0B,SAAU;IACnBc,SAAS,EAAC;KACN7B,UAAU,CACd,CAAC;AAEJ;;AClKe,SAAS8B,aAAaA,CAACC,MAAM,EAAE;EAC7C,SAAA7L,SAAA,GAAAC,+BAAA,CAAmB4L,MAAM,GAAA3L,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;IAAA,IAAjB2L,KAAK,GAAA5L,KAAA,CAAAE,KAAA;IACd+F,mBAAmB,CAACC,QAAQ,CAAC0F,KAAK,CAAC,GAAG,IAAIxF,KAAK,EAAE;IACjDH,mBAAmB,CAACC,QAAQ,CAAC0F,KAAK,CAAC,CAACpH,GAAG,GAAGoH,KAAK;;AAEjD;;ACHA,IAAIC,UAAU,GAAG,CAAC;AAClB,IAAMC,cAAc,GAAG,EAAE;AACzB,AAAe,SAASC,UAAUA,GAAG;EACpC,IAAAhC,SAAA,GAA8BC,cAAQ,EAAE;IAAjCgC,OAAO,GAAAjC,SAAA;IAAEkC,UAAU,GAAAlC,SAAA;EAE1Ba,eAAS,CAAC,YAAM;IACfsB,aAAa,CAACL,UAAU,CAAC;IACzBA,UAAU,GAAGM,WAAW,CAAC;MAAA,OACxBF,UAAU,CAACG,SAAS,CAACC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;OACrCP,cAAc,CAAC;GACjB,EAAE,EAAE,CAAC;EAEN,OAAOE,OAAO;AACf;;ACbe,SAASM,WAAWA,GAAG;EACrC,IAAAvC,SAAA,GAAgCC,cAAQ,CAAC,EAAE,CAAC;IAArCuC,QAAQ,GAAAxC,SAAA;IAAEyC,WAAW,GAAAzC,SAAA;EAE5Ba,eAAS,CAAC,YAAM;IACf,IAAM6B,OAAO,GAAG,SAAVA,OAAOA,CAAI9M,CAAC,EAAK;MACtB4M,QAAQ,CAAC5M,CAAC,CAACsE,GAAG,CAAC,GAAG,IAAI;MACtBuI,WAAW,CAACE,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAACL,QAAQ,CAAC,CAAC,CAAC;KACjD;IACDM,QAAQ,CAAC9B,gBAAgB,CAAC,SAAS,EAAE0B,OAAO,CAAC;IAE7C,IAAMK,KAAK,GAAG,SAARA,KAAKA,CAAInN,CAAC,EAAK;MACpB4M,QAAQ,CAAC5M,CAAC,CAACsE,GAAG,CAAC,GAAG,KAAK;MACvBuI,WAAW,CAACE,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAACL,QAAQ,CAAC,CAAC,CAAC;KACjD;IACDM,QAAQ,CAAC9B,gBAAgB,CAAC,OAAO,EAAE+B,KAAK,CAAC;IAGzC,OAAO,YAAM;MACZD,QAAQ,CAAC7B,mBAAmB,CAAC,SAAS,EAAEyB,OAAO,CAAC;MAChDI,QAAQ,CAAC7B,mBAAmB,CAAC,OAAO,EAAE8B,KAAK,CAAC;KAC5C;GACD,EAAE,EAAE,CAAC;EAEN,OAAOP,QAAQ;AAChB;;ACxBe,SAASQ,gBAAgBA,CAACC,YAAY,EAAS;EAAA,IAArBA,YAAY;IAAZA,YAAY,GAAG,IAAI;;EAC3D,IAAAjD,SAAA,GAGIC,cAAQ,CAAC;MAAE7L,CAAC,EAAE,IAAI;MAAEC,CAAC,EAAE;KAAM,CAAC;IAFjC6O,aAAa,GAAAlD,SAAA;IACbmD,gBAAgB,GAAAnD,SAAA;EAGjBa,eAAS,CAAC,YAAM;IACf,IAAMuC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAGC,EAAE,EAAI;MACjC,IAAIjP,CAAC,EAAEC,CAAC;MACR,IAAIgP,EAAE,CAACC,OAAO,EAAE;QACf,IAAMC,KAAK,GAAGF,EAAE,CAACC,OAAO,CAAC,CAAC,CAAC;QAAC,IAAA/I,IAAA,GACnB,CAACgJ,KAAK,CAACzK,OAAO,EAAEyK,KAAK,CAACvK,OAAO,CAAC;QAAtC5E,CAAC,GAAAmG,IAAA;QAAElG,CAAC,GAAAkG,IAAA;OACL,MAAM;QAAA,IAAAiJ,KAAA,GACG,CAACH,EAAE,CAACvK,OAAO,EAAEuK,EAAE,CAACrK,OAAO,CAAC;QAAhC5E,CAAC,GAAAoP,KAAA;QAAEnP,CAAC,GAAAmP,KAAA;;MAENL,gBAAgB,CAAC;QAAE/O,CAAC,EAADA,CAAC;QAAEC,CAAC,EAADA;OAAG,CAAC;KAC1B;IACD4H,MAAM,CAAC+E,gBAAgB,CAAC,WAAW,EAAEoC,mBAAmB,CAAC;IAEzD,IAAIH,YAAY,EAAE;MACjBhH,MAAM,CAAC+E,gBAAgB,CAAC,WAAW,EAAEoC,mBAAmB,CAAC;;IAG1D,OAAO,YAAM;MACZnH,MAAM,CAACgF,mBAAmB,CAAC,WAAW,EAAEmC,mBAAmB,CAAC;MAE5D,IAAIH,YAAY,EAAE;QACjBhH,MAAM,CAACgF,mBAAmB,CAAC,WAAW,EAAEmC,mBAAmB,CAAC;;KAE7D;GACD,EAAE,CAACH,YAAY,CAAC,CAAC;EAElB,OAAOC,aAAa;AACrB;;ACjCA,SAASO,mBAAmBA,GAAG;EAC9B,IAAAC,qBAAA,GAAqDZ,QAAQ,CAACa,eAAe;IAAxDlO,KAAK,GAAAiO,qBAAA,CAAlBE,WAAW;IAAuBlO,MAAM,GAAAgO,qBAAA,CAApBG,YAAY;EACxC,OAAO;IACNpO,KAAK,EAALA,KAAK;IACLC,MAAM,EAANA;GACA;AACF;AAEA,AAAe,SAASoO,mBAAmBA,GAAG;EAC7C,IAAA9D,SAAA,GAAgDC,cAAQ,CAACwD,mBAAmB,EAAE,CAAC;IAAxEM,gBAAgB,GAAA/D,SAAA;IAAEgE,mBAAmB,GAAAhE,SAAA;EAE5Ca,eAAS,CAAC,YAAM;IACf,SAASoD,YAAYA,GAAG;MACvBD,mBAAmB,CAACP,mBAAmB,EAAE,CAAC;;IAG3CxH,MAAM,CAAC+E,gBAAgB,CAAC,QAAQ,EAAEiD,YAAY,CAAC;IAC/C,OAAO;MAAA,OAAMhI,MAAM,CAACgF,mBAAmB,CAAC,QAAQ,EAAEgD,YAAY,CAAC;;GAC/D,EAAE,EAAE,CAAC;EAEN,OAAOF,gBAAgB;AACxB;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import inCircle from \"./inCircle\";\r\n\r\nexport default function onLinePath(element, left, top, localTileSize) {\r\n\tconst radius = element.lineWidth;\r\n\r\n\t// Starting point in Circle\r\n\tif (inCircle(\r\n\t\t{ radius }, \r\n\t\telement.points[0].x * localTileSize,\r\n\t\telement.points[0].y * localTileSize,\r\n\t\tleft,\r\n\t\ttop,\r\n\t\tlocalTileSize\r\n\t)) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// Ending point in Circle\r\n\tif (inCircle(\r\n\t\t{ radius }, \r\n\t\telement.points[element.points.length - 1].x * localTileSize,\r\n\t\telement.points[element.points.length - 1].y * localTileSize,\r\n\t\tleft,\r\n\t\ttop,\r\n\t\tlocalTileSize\r\n\t)) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\r\n\t// Line collision\r\n\tfor (let i = 1; i < element.points.length; i++) {\r\n\t\tconst from = {\r\n\t\t\tx: element.points[i - 1].x * localTileSize,\r\n\t\t\ty: element.points[i - 1].y * localTileSize\r\n\t\t};\r\n\r\n\t\tconst to = {\r\n\t\t\tx: element.points[i].x * localTileSize,\r\n\t\t\ty: element.points[i].y * localTileSize\r\n\t\t};\r\n\r\n\t\t// Line length\r\n\t\tconst diffX = from.x - to.x;\r\n\t\tconst diffY = from.y - to.y;\r\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\r\n\r\n\t\t// Dot product of the line and Circle\r\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\r\n\t\t\r\n\t\t// Closest point on the line\r\n\t\tconst point = {\r\n\t\t\tx: from.x + (dot * (to.x - from.x)),\r\n\t\t\ty: from.y + (dot * (to.y - from.y)),\r\n\t\t};\r\n\r\n\t\tif (inCircle(\r\n\t\t\t{ radius }, \r\n\t\t\tpoint.x,\r\n\t\t\tpoint.y,\r\n\t\t\tleft,\r\n\t\t\ttop,\r\n\t\t\tlocalTileSize\r\n\t\t)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t// Curves collision\r\n\t// TODO, since not needed for now\r\n\r\n\treturn false;\r\n}\r\n","import calcTileSize from '../functions/calcTileSize';\r\n\r\nimport inCircle from './inCircle';\r\nimport inPoly from './inPoly';\r\nimport inRect from './inRect';\r\nimport onLinePath from './onLinePath';\r\n\r\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\r\n\tconst localTileSize = calcTileSize(tileSize, zoom);\r\n\r\n\tconst validElements = [];\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (!element.hasCollisions) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tconst x = element.x * localTileSize;\r\n\t\tconst y = element.y * localTileSize;\r\n\r\n\t\tswitch (element.constructorName) {\r\n\t\t\tcase 'Rect':\r\n\t\t\tcase 'CanvasImage':\r\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Circle':\r\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Polygon':\r\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'LinePath': \r\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (validElements.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (validElements.length === 1) {\r\n\t\treturn validElements[0];\r\n\t}\r\n\r\n\tvalidElements.sort((a, b) => {\r\n\t\tif (a.zIndex > b.zIndex) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.zIndex < b.zIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (a.id > b.id) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.id < b.id) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t});\r\n\r\n\treturn validElements[validElements.length - 1];\r\n}","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementRightClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nconst LEFT_BUTTON = 1;\r\nlet selectedObject = null;\r\nlet unselectTimeoutId = 0;\r\nconst UNSELECT_TIMEOUT_MS = 300;\r\n\r\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\r\n\tconst newProps = {\r\n\t\t...props,\r\n\t};\r\n\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\r\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\r\n\t\tlet moved = false;\r\n\t\tif (dragObjects) {\r\n\t\t\tif (selectedObject === null) {\r\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\r\n\t\t\t}\r\n\r\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\r\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\r\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\r\n\r\n\t\t\t\tmoved = true;\r\n\r\n\t\t\t\tif (onElementMoved) {\r\n\t\t\t\t\tonElementMoved(\r\n\t\t\t\t\t\tselectedObject,\r\n\t\t\t\t\t\t(event.screenX - props.prevX),\r\n\t\t\t\t\t\t(event.screenY - props.prevY),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onHover) {\r\n\t\t\t\t\tonHover(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!moved) {\r\n\t\t\t// Lock Axis\r\n\t\t\tif (!lockXAxis) {\r\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\r\n\t\t\t}\r\n\r\n\t\t\tif (!lockYAxis) {\r\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\r\n\t\t\tunselectTimeoutId = setTimeout(() => {\r\n\t\t\t\tselectedObject = null;\r\n\t\t\t\tsetProps({\r\n\t\t\t\t\t...newProps,\r\n\t\t\t\t\tprevX: null,\r\n\t\t\t\t\tprevY: null,\r\n\t\t\t\t});\r\n\t\t\t}, UNSELECT_TIMEOUT_MS);\r\n\t\t}\r\n\t} else {\r\n\t\tif (onHover) {\r\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\r\n\t\t}\r\n\r\n\t\tselectedObject = null;\r\n\t}\r\n\r\n\tsetProps({\r\n\t\t...newProps,\r\n\t\tprevX: event.screenX,\r\n\t\tprevY: event.screenY,\r\n\t});\r\n}\r\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\r\n\tconst elementsX = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.x * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.x * tileSize];\r\n\t}).flat();\r\n\tconst minX = Math.min(...elementsX);\r\n\tconst maxX = Math.max(...elementsX);\r\n\twidth = Math.max(2 * maxX, -2 * minX, width);\r\n\r\n\tconst elementsY = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.y * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.y * tileSize];\r\n\t}).flat();\r\n\tconst minY = Math.min(...elementsY);\r\n\tconst maxY = Math.max(...elementsY);\r\n\theight = Math.max(2 * maxY, -2 * minY, height);\r\n\r\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\r\n\r\n\treturn ratio;\r\n}\r\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable, hasCollisions) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t\tthis.hasCollisions = hasCollisions;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\r\n\r\nexport default class LinePath extends ColoredCanvasObject {\r\n\t/**\r\n\t * Represents a Line Path that will be created on the canvas.\r\n\t *\r\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\r\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\r\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\r\n\t * @param {number} \tzIndex \tStack order of the element\r\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\r\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\r\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\r\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\r\n\t */\r\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\r\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\r\n\r\n\t\tthis.points = points;\r\n\t\tthis.lineWidth = lineWidth;\r\n\t\tthis.smoothCorners = smoothCorners;\r\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\r\n\t}\r\n\r\n\tget constructorName() {\r\n\t\treturn 'LinePath';\r\n\t}\r\n}\r\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.arc(\r\n\t\tleft + element.x * localTileSize,\r\n\t\ttop + element.y * localTileSize,\r\n\t\telement.radius * localTileSize,\r\n\t\t0,\r\n\t\t2 * Math.PI\r\n\t);\r\n\r\n\tif(element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif(element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderLinePath(\r\n\tcontext,\r\n\telement,\r\n\tleft,\r\n\ttop,\r\n\tlocalTileSize\r\n) {\r\n\tconst defaultLineWidth = context.lineWidth;\r\n\tconst points = element.points.map((p) => ({\r\n\t\tx: left + p.x * localTileSize,\r\n\t\ty: top + p.y * localTileSize,\r\n\t}));\r\n\r\n\tif (points.length < 2) return;\r\n\r\n\tcontext.beginPath();\r\n\tcontext.moveTo(points[0].x, points[0].y);\r\n\r\n\tif (element.smoothCorners) {\r\n\t\tfor (let i = 1; i < points.length - 1; i++) {\r\n\t\t\tconst prev = points[i - 1];\r\n\t\t\tconst curr = points[i];\r\n\t\t\tconst next = points[i + 1];\r\n\r\n\t\t\t// Direction vectors\r\n\t\t\tconst dx1 = curr.x - prev.x;\r\n\t\t\tconst dy1 = curr.y - prev.y;\r\n\t\t\tconst dx2 = next.x - curr.x;\r\n\t\t\tconst dy2 = next.y - curr.y;\r\n\r\n\t\t\t// Lengths\r\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\r\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\r\n\r\n\t\t\t// Offsets for corner rounding\r\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\r\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\r\n\r\n\t\t\tconst cornerStart = {\r\n\t\t\t\tx: curr.x - offset1X,\r\n\t\t\t\ty: curr.y - offset1Y,\r\n\t\t\t};\r\n\t\t\tconst cornerEnd = {\r\n\t\t\t\tx: curr.x + offset2X,\r\n\t\t\t\ty: curr.y + offset2Y,\r\n\t\t\t};\r\n\r\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\r\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\r\n\t\t}\r\n\r\n\t\t// Final segment\r\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\r\n\t} else {\r\n\t\t// Straight line version\r\n\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\r\n\t\t}\r\n\t}\r\n\r\n\tcontext.lineWidth = element.lineWidth * localTileSize;\r\n\tcontext.stroke();\r\n\tcontext.lineWidth = defaultLineWidth;\r\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.moveTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tfor (let i = 0; i < element.points.length; i++) {\r\n\t\tcontext.lineTo(\r\n\t\t\tleft + element.points[i].x * localTileSize,\r\n\t\t\ttop + element.points[i].y * localTileSize,\r\n\t\t);\r\n\t}\r\n\r\n\tcontext.lineTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tif (element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif (element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\r\nimport Circle from '../shapes/Circle';\r\nimport LinePath from '../shapes/LinePath';\r\nimport Polygon from '../shapes/Polygon';\r\nimport Rect from '../shapes/Rect';\r\n\r\nimport calcTileSize from '../functions/calcTileSize';\r\n\r\nimport renderCircle from './renderCircle';\r\nimport renderImage from './renderImage';\r\nimport renderLinePath from './renderLinePath';\r\nimport renderPolygon from './renderPolygon';\r\nimport renderRect from './renderRect';\r\n\r\nconst renderFn = {\r\n\t[(new Circle({})).constructorName]: renderCircle,\r\n\t[(new CanvasImage({})).constructorName]: renderImage,\r\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\r\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\r\n\t[(new Rect({})).constructorName]: renderRect,\r\n};\r\n\r\nexport default function renderCanvas(\r\n\tcontext,\r\n\twidth,\r\n\theight,\r\n\telements,\r\n\ttileSize,\r\n\tstate,\r\n) {\r\n\tconst left = state.left + state.deltaLeft;\r\n\tconst top = state.top + state.deltaTop;\r\n\r\n\tlet prevFillStyle = '';\r\n\tlet prevStrokeStyle = '';\r\n\r\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\r\n\r\n\tcontext.clearRect(0, 0, width, height);\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (\r\n\t\t\telement.fill !== prevFillStyle &&\r\n\t\t\ttypeof element.fill !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.fillStyle = element.fill;\r\n\t\t\tprevFillStyle = element.fill;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\telement.stroke !== prevStrokeStyle &&\r\n\t\t\ttypeof element.stroke !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.strokeStyle = element.stroke;\r\n\t\t\tprevStrokeStyle = element.stroke;\r\n\t\t}\r\n\r\n\t\tconst type = element.constructorName;\r\n\t\tif (renderFn[type]) {\r\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unsupported shape type:' + type);\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\n\r\nimport './index.css';\r\n\r\nimport elementClick from './events/elementClick';\r\nimport elementRightClick from './events/elementRightClick';\r\nimport mouseMove from './events/mouseMove';\r\nimport mouseWheel from './events/mouseWheel';\r\n\r\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\r\nimport sortElements from './functions/sortElements';\r\n\r\nimport renderCanvas from './render/renderCanvas';\r\n\r\nconst elements = {};\r\n\r\nexport default function Canvas2D({\r\n\twidth,\r\n\theight,\r\n\ttrackMouseMove = true,\r\n\tminZoom = 1,\r\n\tmaxZoom = 1,\r\n\ttileSize = 1,\r\n\tonClick,\r\n\tonRightClick,\r\n\tonHover,\r\n\tonElementMoved,\r\n\tonWheel,\r\n\tonFrame,\r\n\tlockXAxis = false,\r\n\tlockYAxis = false,\r\n\tsmoothingQuality = 'medium',\r\n\tdragObjects = false,\r\n\tdeltaLeft = 0,\r\n\tdeltaTop = 0,\r\n\tshowMinimap = false,\r\n\tminimapWidth = 240,\r\n\tminimapHeight = 120,\r\n\tminimapFilter = (e) => true,\r\n\t...otherProps\r\n}) {\r\n\tif (!elements[otherProps.id]) {\r\n\t\telements[otherProps.id] = [];\r\n\t}\r\n\r\n\t// Hooks\r\n\tconst [state, setState] = useState({});\r\n\tconst canvasRef = useCallback((canvas) => {\r\n\t\tif (canvas !== null) {\r\n\t\t\tconst context = canvas.getContext('2d');\r\n\r\n\t\t\tif (smoothingQuality === false) {\r\n\t\t\t\tcontext.imageSmoothingEnabled = false;\r\n\t\t\t} else {\r\n\t\t\t\tcontext.imageSmoothingEnabled = true;\r\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\r\n\t\t\t}\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\r\n\t\t\t\tcanvas,\r\n\t\t\t\tcontext,\r\n\t\t\t\tleft: width / 2,\r\n\t\t\t\ttop: height / 2,\r\n\t\t\t\twidth,\r\n\t\t\t\theight,\r\n\t\t\t\tzoom: 1,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\r\n\t\tif (minimapCanvas !== null) {\r\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\r\n\t\t\t\tminimapCanvas,\r\n\t\t\t\tminimapContext,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tstate.deltaTop = deltaTop;\r\n\tstate.deltaLeft = deltaLeft;\r\n\r\n\t// Check inputs\r\n\tif (typeof width !== 'number' || typeof height !== 'number') {\r\n\t\tthrow new Error('width/height should be specified and be numbers.');\r\n\t}\r\n\r\n\tif (minZoom > maxZoom) {\r\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\r\n\t}\r\n\r\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\r\n\t\tthrow new Error('onClick should be a function.');\r\n\t}\r\n\r\n\tif (typeof onFrame !== 'function') {\r\n\t\tthrow new Error('onFrame should be a function.');\r\n\t}\r\n\r\n\t// Render\r\n\tlet onMouseMove = null;\r\n\tif (trackMouseMove) {\r\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\r\n\t}\r\n\r\n\tconst onWheelFn = (e) => {\r\n\t\tif (onWheel) {\r\n\t\t\tonWheel(e);\r\n\t\t}\r\n\r\n\t\tif (minZoom !== maxZoom) {\r\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\r\n\t\t}\r\n\t};\r\n\r\n\tlet onClickFn = null;\r\n\tif (onClick) {\r\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\r\n\t}\r\n\r\n\r\n\t// Right click Event\r\n\tuseEffect(() => {\r\n\t\tfunction onRightClickEvent(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\r\n\t\t}\r\n\r\n\t\tif (onRightClick && state.canvas) {\r\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\r\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\r\n\t\t}\r\n\t}, [state.canvas, onRightClick]);\r\n\r\n\t// Canvas render loop\r\n\tuseEffect(() => {\r\n\t\tlet shouldRender = true;\r\n\t\tfunction render() {\r\n\t\t\tif (!shouldRender) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\telements[otherProps.id] = onFrame();\r\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\r\n\r\n\t\t\tif (state.context) {\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.context,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\tsortedElements,\r\n\t\t\t\t\ttileSize,\r\n\t\t\t\t\tstate,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (showMinimap && state.minimapContext) {\r\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\r\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);\r\n\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.minimapContext,\r\n\t\t\t\t\tminimapWidth,\r\n\t\t\t\t\tminimapHeight,\r\n\t\t\t\t\tfilteredElementsList,\r\n\t\t\t\t\ttileSize / ratio,\r\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\twindow.requestAnimationFrame(render);\r\n\t\t}\r\n\t\twindow.requestAnimationFrame(render);\r\n\r\n\t\treturn () => { shouldRender = false; };\r\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<canvas\r\n\t\t\t\tref={canvasRef}\r\n\t\t\t\twidth={width}\r\n\t\t\t\theight={height}\r\n\t\t\t\tonPointerMove={onMouseMove}\r\n\t\t\t\tonWheel={onWheelFn}\r\n\t\t\t\tonClick={onClickFn}\r\n\t\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t\t{...otherProps}\r\n\t\t\t/>\r\n\r\n\t\t\t{showMinimap && <canvas\r\n\t\t\t\tref={canvasMapRef}\r\n\t\t\t\twidth={minimapWidth}\r\n\t\t\t\theight={minimapHeight}\r\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\r\n\t\t\t/>}\r\n\t\t</>\r\n\t);\r\n}\r\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","onLinePath","lineWidth","from","to","diffX","diffY","Math","sqrt","dot","pow","point","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","hasCollisions","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","floor","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
@@ -120,11 +120,52 @@ function inRect(element, x, y, left, top, localTileSize) {
120
120
  return x <= left && left <= x + width && y <= top && top <= y + height;
121
121
  }
122
122
 
123
+ function onLinePath(element, left, top, localTileSize) {
124
+ var radius = element.lineWidth;
125
+ if (inCircle({
126
+ radius: radius
127
+ }, element.points[0].x * localTileSize, element.points[0].y * localTileSize, left, top, localTileSize)) {
128
+ return true;
129
+ }
130
+ if (inCircle({
131
+ radius: radius
132
+ }, element.points[element.points.length - 1].x * localTileSize, element.points[element.points.length - 1].y * localTileSize, left, top, localTileSize)) {
133
+ return true;
134
+ }
135
+ for (var i = 1; i < element.points.length; i++) {
136
+ var from = {
137
+ x: element.points[i - 1].x * localTileSize,
138
+ y: element.points[i - 1].y * localTileSize
139
+ };
140
+ var to = {
141
+ x: element.points[i].x * localTileSize,
142
+ y: element.points[i].y * localTileSize
143
+ };
144
+ var diffX = from.x - to.x;
145
+ var diffY = from.y - to.y;
146
+ var length = Math.sqrt(diffX * diffX + diffY * diffY);
147
+ var dot = ((left - from.x) * (to.x - from.x) + (top - from.y) * (to.y - from.y)) / Math.pow(length, 2);
148
+ var point = {
149
+ x: from.x + dot * (to.x - from.x),
150
+ y: from.y + dot * (to.y - from.y)
151
+ };
152
+ if (inCircle({
153
+ radius: radius
154
+ }, point.x, point.y, left, top, localTileSize)) {
155
+ return true;
156
+ }
157
+ }
158
+ return false;
159
+ }
160
+
123
161
  function collideElement(e, elements, left, top, tileSize, zoom) {
124
162
  var localTileSize = calcTileSize(tileSize, zoom);
125
163
  var validElements = [];
126
164
  for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
127
165
  var element = _step.value;
166
+ if (!element.hasCollisions) {
167
+ continue;
168
+ }
128
169
  var x = element.x * localTileSize;
129
170
  var y = element.y * localTileSize;
130
171
  switch (element.constructorName) {
@@ -168,6 +209,19 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
168
209
  });
169
210
  }
170
211
  break;
212
+ case 'LinePath':
213
+ if (onLinePath(element, left, top, localTileSize)) {
214
+ validElements.push({
215
+ id: element.id,
216
+ element: element,
217
+ originalEvent: e,
218
+ posOnMap: {
219
+ x: element.x,
220
+ y: element.y
221
+ }
222
+ });
223
+ }
224
+ break;
171
225
  }
172
226
  }
173
227
  if (validElements.length === 0) {
@@ -303,6 +357,33 @@ function mouseWheel(event, props, setProps, minZoom, maxZoom) {
303
357
  }));
304
358
  }
305
359
 
360
+ function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {
361
+ var elementsX = elements.map(function (e) {
362
+ if (Array.isArray(e.points)) {
363
+ return e.points.map(function (p) {
364
+ return p.x * tileSize;
365
+ });
366
+ }
367
+ return [e.x * tileSize];
368
+ }).flat();
369
+ var minX = Math.min.apply(Math, elementsX);
370
+ var maxX = Math.max.apply(Math, elementsX);
371
+ width = Math.max(2 * maxX, -2 * minX, width);
372
+ var elementsY = elements.map(function (e) {
373
+ if (Array.isArray(e.points)) {
374
+ return e.points.map(function (p) {
375
+ return p.y * tileSize;
376
+ });
377
+ }
378
+ return [e.y * tileSize];
379
+ }).flat();
380
+ var minY = Math.min.apply(Math, elementsY);
381
+ var maxY = Math.max.apply(Math, elementsY);
382
+ height = Math.max(2 * maxY, -2 * minY, height);
383
+ var ratio = Math.max(width / minimapWidth, height / minimapHeight);
384
+ return ratio;
385
+ }
386
+
306
387
  function sortElements(elements) {
307
388
  elements.sort(function (a, b) {
308
389
  if (a.zIndex !== b.zIndex) {
@@ -329,12 +410,13 @@ function sortElements(elements) {
329
410
  }
330
411
 
331
412
  var CanvasObject = /*#__PURE__*/function () {
332
- function CanvasObject(id, x, y, zIndex, draggable) {
413
+ function CanvasObject(id, x, y, zIndex, draggable, hasCollisions) {
333
414
  this.id = id;
334
415
  this.x = x;
335
416
  this.y = y;
336
417
  this['z-index'] = zIndex;
337
418
  this.draggable = draggable;
419
+ this.hasCollisions = hasCollisions;
338
420
  }
339
421
  return _createClass(CanvasObject, [{
340
422
  key: "zIndex",
@@ -362,8 +444,9 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
362
444
  height = _ref.height,
363
445
  src = _ref.src,
364
446
  zIndex = _ref.zIndex,
365
- draggable = _ref.draggable;
366
- _this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
447
+ draggable = _ref.draggable,
448
+ hasCollisions = _ref.hasCollisions;
449
+ _this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
367
450
  _this.width = width;
368
451
  _this.height = height;
369
452
  _this.src = src;
@@ -386,9 +469,9 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
386
469
  }(CanvasObject);
387
470
 
388
471
  var ColoredCanvasObject = /*#__PURE__*/function (_CanvasObject) {
389
- function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable) {
472
+ function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {
390
473
  var _this;
391
- _this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
474
+ _this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
392
475
  _this.fill = fill;
393
476
  _this.stroke = stroke;
394
477
  return _this;
@@ -412,8 +495,9 @@ var Circle = /*#__PURE__*/function (_ColoredCanvasObject) {
412
495
  fill = _ref.fill,
413
496
  stroke = _ref.stroke,
414
497
  zIndex = _ref.zIndex,
415
- draggable = _ref.draggable;
416
- _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
498
+ draggable = _ref.draggable,
499
+ hasCollisions = _ref.hasCollisions;
500
+ _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
417
501
  _this.radius = radius;
418
502
  return _this;
419
503
  }
@@ -435,8 +519,9 @@ var LinePath = /*#__PURE__*/function (_ColoredCanvasObject) {
435
519
  stroke = _ref.stroke,
436
520
  zIndex = _ref.zIndex,
437
521
  smoothCorners = _ref.smoothCorners,
438
- smoothCornersRadius = _ref.smoothCornersRadius;
439
- _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, 'none', stroke, zIndex, false) || this;
522
+ smoothCornersRadius = _ref.smoothCornersRadius,
523
+ hasCollisions = _ref.hasCollisions;
524
+ _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions) || this;
440
525
  _this.points = points;
441
526
  _this.lineWidth = lineWidth;
442
527
  _this.smoothCorners = smoothCorners;
@@ -460,8 +545,9 @@ var Polygon = /*#__PURE__*/function (_ColoredCanvasObject) {
460
545
  fill = _ref.fill,
461
546
  stroke = _ref.stroke,
462
547
  zIndex = _ref.zIndex,
463
- draggable = _ref.draggable;
464
- _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable) || this;
548
+ draggable = _ref.draggable,
549
+ hasCollisions = _ref.hasCollisions;
550
+ _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions) || this;
465
551
  _this.points = points;
466
552
  return _this;
467
553
  }
@@ -485,8 +571,9 @@ var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
485
571
  fill = _ref.fill,
486
572
  stroke = _ref.stroke,
487
573
  zIndex = _ref.zIndex,
488
- draggable = _ref.draggable;
489
- _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
574
+ draggable = _ref.draggable,
575
+ hasCollisions = _ref.hasCollisions;
576
+ _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
490
577
  _this.width = width;
491
578
  _this.height = height;
492
579
  return _this;
@@ -568,7 +655,7 @@ function renderLinePath(context, element, left, top, localTileSize) {
568
655
  context.lineTo(points[_i].x, points[_i].y);
569
656
  }
570
657
  }
571
- context.lineWidth = element.lineWidth;
658
+ context.lineWidth = element.lineWidth * localTileSize;
572
659
  context.stroke();
573
660
  context.lineWidth = defaultLineWidth;
574
661
  }
@@ -629,7 +716,7 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
629
716
  }
630
717
  }
631
718
 
632
- var _excluded = ["width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
719
+ var _excluded = ["width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop", "showMinimap", "minimapWidth", "minimapHeight", "minimapFilter"];
633
720
  var elements = {};
634
721
  function Canvas2D(_ref) {
635
722
  var width = _ref.width,
@@ -660,6 +747,16 @@ function Canvas2D(_ref) {
660
747
  deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
661
748
  _ref$deltaTop = _ref.deltaTop,
662
749
  deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
750
+ _ref$showMinimap = _ref.showMinimap,
751
+ showMinimap = _ref$showMinimap === void 0 ? false : _ref$showMinimap,
752
+ _ref$minimapWidth = _ref.minimapWidth,
753
+ minimapWidth = _ref$minimapWidth === void 0 ? 240 : _ref$minimapWidth,
754
+ _ref$minimapHeight = _ref.minimapHeight,
755
+ minimapHeight = _ref$minimapHeight === void 0 ? 120 : _ref$minimapHeight,
756
+ _ref$minimapFilter = _ref.minimapFilter,
757
+ minimapFilter = _ref$minimapFilter === void 0 ? function (e) {
758
+ return true;
759
+ } : _ref$minimapFilter,
663
760
  otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
664
761
  if (!elements[otherProps.id]) {
665
762
  elements[otherProps.id] = [];
@@ -676,15 +773,29 @@ function Canvas2D(_ref) {
676
773
  context.imageSmoothingEnabled = true;
677
774
  context.imageSmoothingQuality = smoothingQuality;
678
775
  }
679
- setState({
680
- boundingClientRect: canvas.getBoundingClientRect(),
681
- canvas: canvas,
682
- context: context,
683
- left: width / 2,
684
- top: height / 2,
685
- width: width,
686
- height: height,
687
- zoom: 1
776
+ setState(function (s) {
777
+ return _extends({}, s, {
778
+ boundingClientRect: canvas.getBoundingClientRect(),
779
+ canvas: canvas,
780
+ context: context,
781
+ left: width / 2,
782
+ top: height / 2,
783
+ width: width,
784
+ height: height,
785
+ zoom: 1
786
+ });
787
+ });
788
+ }
789
+ }, []);
790
+ var canvasMapRef = useCallback(function (minimapCanvas) {
791
+ if (minimapCanvas !== null) {
792
+ var minimapContext = minimapCanvas.getContext('2d');
793
+ setState(function (s) {
794
+ return _extends({}, s, {
795
+ boundingClientRect: minimapCanvas.getBoundingClientRect(),
796
+ minimapCanvas: minimapCanvas,
797
+ minimapContext: minimapContext
798
+ });
688
799
  });
689
800
  }
690
801
  }, []);
@@ -745,6 +856,17 @@ function Canvas2D(_ref) {
745
856
  if (state.context) {
746
857
  renderCanvas(state.context, width, height, sortedElements, tileSize, state);
747
858
  }
859
+ if (showMinimap && state.minimapContext) {
860
+ var filteredElementsList = sortedElements.filter(minimapFilter);
861
+ var ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);
862
+ renderCanvas(state.minimapContext, minimapWidth, minimapHeight, filteredElementsList, tileSize / ratio, {
863
+ left: minimapWidth / 2,
864
+ top: minimapHeight / 2,
865
+ deltaLeft: 0,
866
+ deltaTop: 0,
867
+ zoom: 1
868
+ });
869
+ }
748
870
  window.requestAnimationFrame(render);
749
871
  }
750
872
  window.requestAnimationFrame(render);
@@ -752,7 +874,7 @@ function Canvas2D(_ref) {
752
874
  shouldRender = false;
753
875
  };
754
876
  }, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);
755
- return /*#__PURE__*/React.createElement("canvas", _extends({
877
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("canvas", _extends({
756
878
  ref: canvasRef,
757
879
  width: width,
758
880
  height: height,
@@ -760,7 +882,12 @@ function Canvas2D(_ref) {
760
882
  onWheel: onWheelFn,
761
883
  onClick: onClickFn,
762
884
  className: "canvas2d-wrapper"
763
- }, otherProps));
885
+ }, otherProps)), showMinimap && /*#__PURE__*/React.createElement("canvas", {
886
+ ref: canvasMapRef,
887
+ width: minimapWidth,
888
+ height: minimapHeight,
889
+ className: "canvas2d-wrapper-minimap"
890
+ }));
764
891
  }
765
892
 
766
893
  function preloadImages(images) {