canvas2d-wrapper 1.5.1 → 1.6.1

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/README.md CHANGED
@@ -18,80 +18,103 @@ npm install --save canvas2d-wrapper
18
18
  ## Usage
19
19
 
20
20
  ```jsx
21
- import React from 'react'
22
-
23
- import { Canvas2D, CanvasImage, Circle, Polygon, Rect } from 'canvas2d-wrapper'
24
- import 'canvas2d-wrapper/dist/index.css'
25
-
26
- const App = () => {
27
- const elements = [];
28
- for(let i = 0; i < 998; i++) {
29
- let object = null;
30
- if(Math.random() > 0.5) {
31
- object = new Rect({
32
- id: i,
33
- x: 50 - Math.round(Math.random() * 100),
34
- y: 50 - Math.round(Math.random() * 100),
35
- width: 1,
36
- height: 1,
37
- fill: (Math.random() > 0.5) ? 'black' : undefined,
38
- stroke: (Math.random() > 0.5) ? 'black' : undefined
39
- });
40
- } else {
41
- object = new Circle({
42
- id: i,
43
- x: 50 - Math.round(Math.random() * 100),
44
- y: 50 - Math.round(Math.random() * 100),
45
- radius: 0.5,
46
- fill: (Math.random() > 0.5) ? 'black' : undefined,
47
- stroke: (Math.random() > 0.5) ? 'black' : undefined
48
- });
49
- }
50
-
51
- if(!object.fill && !object.stroke) {
52
- object.fill = 'green';
53
- }
54
-
55
- elements.push(object);
21
+ import React from 'react';
22
+
23
+ /* eslint-disable no-console */
24
+ /* eslint-disable no-magic-numbers */
25
+
26
+ import { Canvas2D, CanvasImage, Circle, Polygon, Rect } from 'canvas2d-wrapper';
27
+ import 'canvas2d-wrapper/dist/index.css';
28
+
29
+ const elements = [];
30
+ for(let i = 0; i < 998; i++) {
31
+ let object = null;
32
+ if(Math.random() > 0.5) {
33
+ object = new Rect({
34
+ id: i,
35
+ x: 500 - Math.round(Math.random() * 1000),
36
+ y: 500 - Math.round(Math.random() * 1000),
37
+ width: 32,
38
+ height: 32,
39
+ fill: (Math.random() > 0.5) ? 'black' : undefined,
40
+ stroke: (Math.random() > 0.5) ? 'black' : undefined,
41
+ draggable: true
42
+ });
43
+ } else {
44
+ object = new Circle({
45
+ id: i,
46
+ x: 500 - Math.round(Math.random() * 1000),
47
+ y: 500 - Math.round(Math.random() * 1000),
48
+ radius: 16,
49
+ fill: (Math.random() > 0.5) ? 'black' : undefined,
50
+ stroke: (Math.random() > 0.5) ? 'black' : undefined
51
+ });
56
52
  }
57
53
 
58
- const points = [];
59
- for(let i = 0; i < 5; i++) {
60
- points.push({
61
- x: 50 - Math.round(Math.random() * 100),
62
- y: 50 - Math.round(Math.random() * 100),
63
- });
54
+ if(!object.fill && !object.stroke) {
55
+ object.fill = 'green';
64
56
  }
65
57
 
66
- const polygon = new Polygon({
67
- id: 'poly',
68
- points,
69
- stroke: 'red',
70
- });
71
- elements.push(polygon);
58
+ elements.push(object);
59
+ }
72
60
 
73
- const polygon2 = new Polygon({
74
- id: 'poly',
75
- points,
76
- fill: 'orange',
77
- zIndex: -1,
61
+ const points = [];
62
+ for(let i = 0; i < 5; i++) {
63
+ points.push({
64
+ x: 500 - Math.round(Math.random() * 1000),
65
+ y: 500 - Math.round(Math.random() * 1000),
78
66
  });
79
- elements.push(polygon2);
67
+ }
68
+
69
+ const polygon = new Polygon({
70
+ id: 'poly',
71
+ points,
72
+ stroke: 'red',
73
+ });
74
+ elements.push(polygon);
80
75
 
76
+ const polygon2 = new Polygon({
77
+ id: 'poly',
78
+ points,
79
+ fill: 'orange',
80
+ zIndex: -1,
81
+ });
82
+ elements.push(polygon2);
83
+
84
+
85
+ const App = () => {
81
86
  return (
82
- <Canvas2D
83
- elements={elements}
87
+ <Canvas2D
88
+ id="MyCanvas"
84
89
  width={1200}
85
90
  height={700}
86
91
  minZoom={0.25}
87
92
  maxZoom={4}
88
- tileSize={32}
93
+ tileSize={1}
94
+ deltaLeft={100}
95
+ deltaTop={100}
89
96
  onClick={(e) => {
90
97
  console.log('Click event:', e);
91
98
  }}
99
+ onRightClick={(e) => {
100
+ console.log('Right click event:', e);
101
+ }}
102
+ onHover={(e) => {
103
+ console.log('Hover event:', e);
104
+ }}
105
+ onElementMoved={(elt, x, y) => {
106
+ console.log('Moved element:', elt, x, y);
107
+ }}
108
+ onWheel={(e) => {
109
+ console.log('Wheel event:', e);
110
+ }}
111
+ onFrame={(e) => {
112
+ return elements;
113
+ }}
114
+ dragObjects={true}
92
115
  />
93
116
  );
94
- }
117
+ };
95
118
 
96
119
  export default App;
97
120
  ```
package/dist/index.js CHANGED
@@ -256,7 +256,10 @@ function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYA
256
256
  }
257
257
  } else {
258
258
  if (onHover) {
259
- onHover(collideElement(event, elements, left, top, tileSize, props.zoom));
259
+ onHover(collideElement(event, elements, left, top, tileSize, props.zoom), {
260
+ x: left,
261
+ y: top
262
+ });
260
263
  }
261
264
  selectedObject = null;
262
265
  }
@@ -534,14 +537,10 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
534
537
  }
535
538
  }
536
539
 
537
- var _excluded = ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
538
- function onRightClickEvent(e) {
539
- e.preventDefault();
540
- onRightClick(elementRightClick(e, elements, tileSize, state));
541
- }
540
+ var _excluded = ["width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
541
+ var elements = [];
542
542
  function Canvas2D(_ref) {
543
- var elements = _ref.elements,
544
- width = _ref.width,
543
+ var width = _ref.width,
545
544
  height = _ref.height,
546
545
  _ref$trackMouseMove = _ref.trackMouseMove,
547
546
  trackMouseMove = _ref$trackMouseMove === void 0 ? true : _ref$trackMouseMove,
@@ -596,9 +595,6 @@ function Canvas2D(_ref) {
596
595
  }, []);
597
596
  state.deltaTop = deltaTop;
598
597
  state.deltaLeft = deltaLeft;
599
- if (typeof elements !== 'object' || !Array.isArray(elements)) {
600
- throw new Error('Invalid elements, should be an array !');
601
- }
602
598
  if (typeof width !== 'number' || typeof height !== 'number') {
603
599
  throw new Error('width/height should be specified and be numbers.');
604
600
  }
@@ -608,7 +604,9 @@ function Canvas2D(_ref) {
608
604
  if (typeof onClick !== 'function' && typeof onClick !== 'undefined') {
609
605
  throw new Error('onClick should be a function.');
610
606
  }
611
- var sortedElements = sortElements(elements);
607
+ if (typeof onFrame !== 'function') {
608
+ throw new Error('onFrame should be a function.');
609
+ }
612
610
  var onMouseMove = null;
613
611
  if (trackMouseMove) {
614
612
  onMouseMove = function onMouseMove(e) {
@@ -630,23 +628,29 @@ function Canvas2D(_ref) {
630
628
  };
631
629
  }
632
630
  React.useEffect(function () {
631
+ function onRightClickEvent(e) {
632
+ e.preventDefault();
633
+ onRightClick(elementRightClick(e, elements, tileSize, state));
634
+ }
633
635
  if (onRightClick && state.canvas) {
634
636
  state.canvas.addEventListener('contextmenu', onRightClickEvent);
635
- return state.canvas.removeEventListener('contextmenu', onRightClickEvent);
637
+ return function () {
638
+ state.canvas.removeEventListener('contextmenu', onRightClickEvent);
639
+ };
636
640
  }
637
641
  }, [state.canvas, onRightClick]);
638
642
  React.useEffect(function () {
639
643
  var shouldRender = true;
640
644
  function render() {
641
- if (onFrame) {
642
- onFrame();
645
+ if (!shouldRender) {
646
+ return;
643
647
  }
648
+ elements = onFrame();
649
+ var sortedElements = sortElements(elements);
644
650
  if (state.context) {
645
651
  renderCanvas(state.context, width, height, sortedElements, tileSize, state);
646
652
  }
647
- if (shouldRender) {
648
- window.requestAnimationFrame(render);
649
- }
653
+ window.requestAnimationFrame(render);
650
654
  }
651
655
  window.requestAnimationFrame(render);
652
656
  return function () {
@@ -673,6 +677,7 @@ function preloadImages(images) {
673
677
  }
674
678
 
675
679
  var intervalId = 0;
680
+ var FRAME_INTERVAL = 15;
676
681
  function useGamepad() {
677
682
  var _useState = React.useState(),
678
683
  gamepad = _useState[0],
@@ -681,7 +686,7 @@ function useGamepad() {
681
686
  clearInterval(intervalId);
682
687
  intervalId = setInterval(function () {
683
688
  return setGamepad(navigator.getGamepads()[0]);
684
- }, 15);
689
+ }, FRAME_INTERVAL);
685
690
  }, []);
686
691
  return gamepad;
687
692
  }
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/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.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';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nexport default function elementRightClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\t// Lock Axis\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif(event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom));\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\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\treturn -1;\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 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 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(x, y, width, height) {\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 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","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","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\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 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","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nfunction onRightClickEvent(e) {\n\te.preventDefault();\n\tonRightClick(elementRightClick(e, elements, tileSize, state));\n}\n\nexport default function Canvas2D({\n\telements,\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcanvas,\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif(typeof elements !== 'object' || !Array.isArray(elements)) {\n\t\tthrow new Error('Invalid elements, should be an array !');\n\t}\n\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\t// Sort elements\n\tconst sortedElements = sortElements(elements);\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif(onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif(minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tif(onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn state.canvas.removeEventListener('contextmenu', onRightClickEvent);\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif(onFrame) {\n\t\t\t\tonFrame();\n\t\t\t}\n\n\t\t\tif(state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif(shouldRender) {\n\t\t\t\twindow.requestAnimationFrame(render);\n\t\t\t}\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.context, onFrame]);\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonPointerMove={onMouseMove}\n\t\t\tonWheel={onWheelFn}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n}\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';\r\n\r\nlet intervalId = 0;\r\nexport default function useGamepad() {\r\n\tconst [gamepad, setGamepad] = useState();\r\n\r\n\tuseEffect(() => {\r\n\t\tclearInterval(intervalId);\r\n\t\tintervalId = setInterval(() =>\r\n\t\t\tsetGamepad(navigator.getGamepads()[0])\r\n\t\t, 15);\r\n\t}, []);\r\n\r\n\treturn gamepad;\r\n}","import { useEffect, useState } from 'react';\r\n\r\nexport default function useKeyboard() {\r\n\tconst [keyboard, setKeyboard] = useState({});\r\n\r\n\tuseEffect(() => {\r\n\t\tdocument.addEventListener('keydown', (e) => {\r\n\t\t\tkeyboard[e.key] = true;\r\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\r\n\t\t});\r\n\t\tdocument.addEventListener('keyup', (e) => {\r\n\t\t\tkeyboard[e.key] = false;\r\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\r\n\t\t});\r\n\t}, []);\r\n\r\n\treturn keyboard;\r\n}","import { useEffect, useState } from 'react';\r\n\r\nexport default function useMousePosition(includeTouch = true) {\r\n\tconst [\r\n\t\tmousePosition,\r\n\t\tsetMousePosition\r\n\t] = useState({ x: null, y: null });\r\n\r\n\tuseEffect(() => {\r\n\t\tconst updateMousePosition = ev => {\r\n\t\t\tlet x, y;\r\n\t\t\tif (ev.touches) {\r\n\t\t\t\tconst touch = ev.touches[0];\r\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\r\n\t\t\t} else {\r\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\r\n\t\t\t}\r\n\t\t\tsetMousePosition({ x, y });\r\n\t\t};\r\n\t\twindow.addEventListener('mousemove', updateMousePosition);\r\n\r\n\t\tif (includeTouch) {\r\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\r\n\r\n\t\t\tif (includeTouch) {\r\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\r\n\t\t\t}\r\n\t\t};\r\n\t}, [includeTouch]);\r\n\r\n\treturn mousePosition;\r\n}","import { useState, useEffect } from 'react';\r\n\r\nfunction getWindowDimensions() {\r\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\r\n\treturn {\r\n\t\twidth,\r\n\t\theight,\r\n\t};\r\n}\r\n\r\nexport default function useWindowDimensions() {\r\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\r\n\r\n\tuseEffect(() => {\r\n\t\tfunction handleResize() {\r\n\t\t\tsetWindowDimensions(getWindowDimensions());\r\n\t\t}\r\n\r\n\t\twindow.addEventListener('resize', handleResize);\r\n\t\treturn () => window.removeEventListener('resize', handleResize);\r\n\t}, []);\r\n\r\n\treturn windowDimensions;\r\n}\r\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","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","id","originalEvent","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","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","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","_createClass","key","get","set","ColoredCanvasObject","_CanvasObject","_inheritsLoose","_this","call","Circle","_ColoredCanvasObject","_ref","CanvasImage","src","_proto","prototype","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","_renderFn","renderPolygon","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","onRightClickEvent","preventDefault","onRightClick","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","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","Array","isArray","sortedElements","onMouseMove","onWheelFn","onClickFn","useEffect","addEventListener","removeEventListener","shouldRender","render","requestAnimationFrame","React","createElement","ref","onPointerMove","className","preloadImages","images","image","intervalId","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","document","JSON","parse","stringify","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
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/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.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';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nexport default function elementRightClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\t// Lock Axis\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif(event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\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\treturn -1;\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 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 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(x, y, width, height) {\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 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","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","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\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 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","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nlet elements = [];\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcanvas,\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\tif(typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif(onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif(minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements, tileSize, state));\n\t\t}\n\n\t\tif(onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif(!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements = onFrame();\n\t\t\tconst sortedElements = sortElements(elements);\n\n\t\t\tif(state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.context, onFrame]);\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonPointerMove={onMouseMove}\n\t\t\tonWheel={onWheelFn}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n}\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\tdocument.addEventListener('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('keyup', (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\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","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","id","originalEvent","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","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","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","_createClass","key","get","set","ColoredCanvasObject","_CanvasObject","_inheritsLoose","_this","call","Circle","_ColoredCanvasObject","_ref","CanvasImage","src","_proto","prototype","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","_renderFn","renderPolygon","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","document","JSON","parse","stringify","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
@@ -253,7 +253,10 @@ function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYA
253
253
  }
254
254
  } else {
255
255
  if (onHover) {
256
- onHover(collideElement(event, elements, left, top, tileSize, props.zoom));
256
+ onHover(collideElement(event, elements, left, top, tileSize, props.zoom), {
257
+ x: left,
258
+ y: top
259
+ });
257
260
  }
258
261
  selectedObject = null;
259
262
  }
@@ -531,14 +534,10 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
531
534
  }
532
535
  }
533
536
 
534
- var _excluded = ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
535
- function onRightClickEvent(e) {
536
- e.preventDefault();
537
- onRightClick(elementRightClick(e, elements, tileSize, state));
538
- }
537
+ var _excluded = ["width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
538
+ var elements = [];
539
539
  function Canvas2D(_ref) {
540
- var elements = _ref.elements,
541
- width = _ref.width,
540
+ var width = _ref.width,
542
541
  height = _ref.height,
543
542
  _ref$trackMouseMove = _ref.trackMouseMove,
544
543
  trackMouseMove = _ref$trackMouseMove === void 0 ? true : _ref$trackMouseMove,
@@ -593,9 +592,6 @@ function Canvas2D(_ref) {
593
592
  }, []);
594
593
  state.deltaTop = deltaTop;
595
594
  state.deltaLeft = deltaLeft;
596
- if (typeof elements !== 'object' || !Array.isArray(elements)) {
597
- throw new Error('Invalid elements, should be an array !');
598
- }
599
595
  if (typeof width !== 'number' || typeof height !== 'number') {
600
596
  throw new Error('width/height should be specified and be numbers.');
601
597
  }
@@ -605,7 +601,9 @@ function Canvas2D(_ref) {
605
601
  if (typeof onClick !== 'function' && typeof onClick !== 'undefined') {
606
602
  throw new Error('onClick should be a function.');
607
603
  }
608
- var sortedElements = sortElements(elements);
604
+ if (typeof onFrame !== 'function') {
605
+ throw new Error('onFrame should be a function.');
606
+ }
609
607
  var onMouseMove = null;
610
608
  if (trackMouseMove) {
611
609
  onMouseMove = function onMouseMove(e) {
@@ -627,23 +625,29 @@ function Canvas2D(_ref) {
627
625
  };
628
626
  }
629
627
  useEffect(function () {
628
+ function onRightClickEvent(e) {
629
+ e.preventDefault();
630
+ onRightClick(elementRightClick(e, elements, tileSize, state));
631
+ }
630
632
  if (onRightClick && state.canvas) {
631
633
  state.canvas.addEventListener('contextmenu', onRightClickEvent);
632
- return state.canvas.removeEventListener('contextmenu', onRightClickEvent);
634
+ return function () {
635
+ state.canvas.removeEventListener('contextmenu', onRightClickEvent);
636
+ };
633
637
  }
634
638
  }, [state.canvas, onRightClick]);
635
639
  useEffect(function () {
636
640
  var shouldRender = true;
637
641
  function render() {
638
- if (onFrame) {
639
- onFrame();
642
+ if (!shouldRender) {
643
+ return;
640
644
  }
645
+ elements = onFrame();
646
+ var sortedElements = sortElements(elements);
641
647
  if (state.context) {
642
648
  renderCanvas(state.context, width, height, sortedElements, tileSize, state);
643
649
  }
644
- if (shouldRender) {
645
- window.requestAnimationFrame(render);
646
- }
650
+ window.requestAnimationFrame(render);
647
651
  }
648
652
  window.requestAnimationFrame(render);
649
653
  return function () {
@@ -670,6 +674,7 @@ function preloadImages(images) {
670
674
  }
671
675
 
672
676
  var intervalId = 0;
677
+ var FRAME_INTERVAL = 15;
673
678
  function useGamepad() {
674
679
  var _useState = useState(),
675
680
  gamepad = _useState[0],
@@ -678,7 +683,7 @@ function useGamepad() {
678
683
  clearInterval(intervalId);
679
684
  intervalId = setInterval(function () {
680
685
  return setGamepad(navigator.getGamepads()[0]);
681
- }, 15);
686
+ }, FRAME_INTERVAL);
682
687
  }, []);
683
688
  return gamepad;
684
689
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.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/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.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';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nexport default function elementRightClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\t// Lock Axis\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif(event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom));\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\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\treturn -1;\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 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 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(x, y, width, height) {\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 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","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","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\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 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","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nfunction onRightClickEvent(e) {\n\te.preventDefault();\n\tonRightClick(elementRightClick(e, elements, tileSize, state));\n}\n\nexport default function Canvas2D({\n\telements,\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcanvas,\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif(typeof elements !== 'object' || !Array.isArray(elements)) {\n\t\tthrow new Error('Invalid elements, should be an array !');\n\t}\n\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\t// Sort elements\n\tconst sortedElements = sortElements(elements);\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif(onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif(minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tif(onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn state.canvas.removeEventListener('contextmenu', onRightClickEvent);\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif(onFrame) {\n\t\t\t\tonFrame();\n\t\t\t}\n\n\t\t\tif(state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif(shouldRender) {\n\t\t\t\twindow.requestAnimationFrame(render);\n\t\t\t}\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.context, onFrame]);\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonPointerMove={onMouseMove}\n\t\t\tonWheel={onWheelFn}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n}\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';\r\n\r\nlet intervalId = 0;\r\nexport default function useGamepad() {\r\n\tconst [gamepad, setGamepad] = useState();\r\n\r\n\tuseEffect(() => {\r\n\t\tclearInterval(intervalId);\r\n\t\tintervalId = setInterval(() =>\r\n\t\t\tsetGamepad(navigator.getGamepads()[0])\r\n\t\t, 15);\r\n\t}, []);\r\n\r\n\treturn gamepad;\r\n}","import { useEffect, useState } from 'react';\r\n\r\nexport default function useKeyboard() {\r\n\tconst [keyboard, setKeyboard] = useState({});\r\n\r\n\tuseEffect(() => {\r\n\t\tdocument.addEventListener('keydown', (e) => {\r\n\t\t\tkeyboard[e.key] = true;\r\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\r\n\t\t});\r\n\t\tdocument.addEventListener('keyup', (e) => {\r\n\t\t\tkeyboard[e.key] = false;\r\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\r\n\t\t});\r\n\t}, []);\r\n\r\n\treturn keyboard;\r\n}","import { useEffect, useState } from 'react';\r\n\r\nexport default function useMousePosition(includeTouch = true) {\r\n\tconst [\r\n\t\tmousePosition,\r\n\t\tsetMousePosition\r\n\t] = useState({ x: null, y: null });\r\n\r\n\tuseEffect(() => {\r\n\t\tconst updateMousePosition = ev => {\r\n\t\t\tlet x, y;\r\n\t\t\tif (ev.touches) {\r\n\t\t\t\tconst touch = ev.touches[0];\r\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\r\n\t\t\t} else {\r\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\r\n\t\t\t}\r\n\t\t\tsetMousePosition({ x, y });\r\n\t\t};\r\n\t\twindow.addEventListener('mousemove', updateMousePosition);\r\n\r\n\t\tif (includeTouch) {\r\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\r\n\r\n\t\t\tif (includeTouch) {\r\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\r\n\t\t\t}\r\n\t\t};\r\n\t}, [includeTouch]);\r\n\r\n\treturn mousePosition;\r\n}","import { useState, useEffect } from 'react';\r\n\r\nfunction getWindowDimensions() {\r\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\r\n\treturn {\r\n\t\twidth,\r\n\t\theight,\r\n\t};\r\n}\r\n\r\nexport default function useWindowDimensions() {\r\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\r\n\r\n\tuseEffect(() => {\r\n\t\tfunction handleResize() {\r\n\t\t\tsetWindowDimensions(getWindowDimensions());\r\n\t\t}\r\n\r\n\t\twindow.addEventListener('resize', handleResize);\r\n\t\treturn () => window.removeEventListener('resize', handleResize);\r\n\t}, []);\r\n\r\n\treturn windowDimensions;\r\n}\r\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","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","id","originalEvent","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","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","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","_createClass","key","get","set","ColoredCanvasObject","_CanvasObject","_inheritsLoose","_this","call","Circle","_ColoredCanvasObject","_ref","CanvasImage","src","_proto","prototype","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","_renderFn","renderPolygon","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","onRightClickEvent","preventDefault","onRightClick","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","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","Array","isArray","sortedElements","onMouseMove","onWheelFn","onClickFn","useEffect","addEventListener","removeEventListener","shouldRender","render","requestAnimationFrame","React","createElement","ref","onPointerMove","className","preloadImages","images","image","intervalId","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","document","JSON","parse","stringify","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.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/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.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';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nexport default function elementRightClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\t// Lock Axis\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif(event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\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\treturn -1;\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 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 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(x, y, width, height) {\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 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","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","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\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 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","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nlet elements = [];\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcanvas,\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\tif(typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif(onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif(minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements, tileSize, state));\n\t\t}\n\n\t\tif(onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif(!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements = onFrame();\n\t\t\tconst sortedElements = sortElements(elements);\n\n\t\t\tif(state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.context, onFrame]);\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonPointerMove={onMouseMove}\n\t\t\tonWheel={onWheelFn}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n}\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\tdocument.addEventListener('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('keyup', (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\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","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","id","originalEvent","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","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","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","_createClass","key","get","set","ColoredCanvasObject","_CanvasObject","_inheritsLoose","_this","call","Circle","_ColoredCanvasObject","_ref","CanvasImage","src","_proto","prototype","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","_renderFn","renderPolygon","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","document","JSON","parse","stringify","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "canvas2d-wrapper",
3
- "version": "1.5.1",
3
+ "version": "1.6.1",
4
4
  "description": "A React Wrapper to use HTML5 canvas with mouse move and zoom abilities.",
5
5
  "author": "Elanis",
6
6
  "license": "MIT",
@@ -27,21 +27,21 @@
27
27
  "react": "^17.0.0 || ^18.0.0"
28
28
  },
29
29
  "devDependencies": {
30
- "@testing-library/jest-dom": "^6.1.5",
30
+ "@testing-library/jest-dom": "^6.2.0",
31
31
  "@testing-library/react": "^14.1.2",
32
- "@testing-library/user-event": "^14.4.3",
33
- "canvas": "^2.10.2",
34
- "cross-env": "^7.0.2",
35
- "eslint": "^8.55.0",
36
- "gh-pages": "^6.1.0",
37
- "microbundle-crl": "^0.13.10",
32
+ "@testing-library/user-event": "^14.5.2",
33
+ "canvas": "^2.11.2",
34
+ "cross-env": "^7.0.3",
35
+ "eslint": "^8.56.0",
36
+ "gh-pages": "^6.1.1",
37
+ "microbundle-crl": "^0.13.11",
38
38
  "npm-run-all": "^4.1.5",
39
39
  "postcss-flexbugs-fixes": "^5.0.2",
40
40
  "postcss-normalize": "^10.0.1",
41
- "postcss-preset-env": "^9.0.0",
41
+ "postcss-preset-env": "^9.3.0",
42
42
  "react": "^18.2.0",
43
43
  "react-dom": "^18.2.0",
44
- "react-scripts": "^5.0.0"
44
+ "react-scripts": "^5.0.1"
45
45
  },
46
46
  "files": [
47
47
  "dist"