canvas2d-wrapper 1.4.0 → 1.5.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.
@@ -1,15 +1,28 @@
1
- import React, { useState, useCallback } from 'react';
1
+ import React, { useState, useCallback, useEffect } from 'react';
2
2
 
3
+ function _toPrimitive(t, r) {
4
+ if ("object" != typeof t || !t) return t;
5
+ var e = t[Symbol.toPrimitive];
6
+ if (void 0 !== e) {
7
+ var i = e.call(t, r || "default");
8
+ if ("object" != typeof i) return i;
9
+ throw new TypeError("@@toPrimitive must return a primitive value.");
10
+ }
11
+ return ("string" === r ? String : Number)(t);
12
+ }
13
+ function _toPropertyKey(t) {
14
+ var i = _toPrimitive(t, "string");
15
+ return "symbol" == typeof i ? i : String(i);
16
+ }
3
17
  function _defineProperties(target, props) {
4
18
  for (var i = 0; i < props.length; i++) {
5
19
  var descriptor = props[i];
6
20
  descriptor.enumerable = descriptor.enumerable || false;
7
21
  descriptor.configurable = true;
8
22
  if ("value" in descriptor) descriptor.writable = true;
9
- Object.defineProperty(target, descriptor.key, descriptor);
23
+ Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
10
24
  }
11
25
  }
12
-
13
26
  function _createClass(Constructor, protoProps, staticProps) {
14
27
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
15
28
  if (staticProps) _defineProperties(Constructor, staticProps);
@@ -18,56 +31,44 @@ function _createClass(Constructor, protoProps, staticProps) {
18
31
  });
19
32
  return Constructor;
20
33
  }
21
-
22
34
  function _extends() {
23
- _extends = Object.assign || function (target) {
35
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
24
36
  for (var i = 1; i < arguments.length; i++) {
25
37
  var source = arguments[i];
26
-
27
38
  for (var key in source) {
28
39
  if (Object.prototype.hasOwnProperty.call(source, key)) {
29
40
  target[key] = source[key];
30
41
  }
31
42
  }
32
43
  }
33
-
34
44
  return target;
35
45
  };
36
-
37
46
  return _extends.apply(this, arguments);
38
47
  }
39
-
40
48
  function _inheritsLoose(subClass, superClass) {
41
49
  subClass.prototype = Object.create(superClass.prototype);
42
50
  subClass.prototype.constructor = subClass;
43
-
44
51
  _setPrototypeOf(subClass, superClass);
45
52
  }
46
-
47
53
  function _setPrototypeOf(o, p) {
48
- _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
54
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
49
55
  o.__proto__ = p;
50
56
  return o;
51
57
  };
52
-
53
58
  return _setPrototypeOf(o, p);
54
59
  }
55
-
56
60
  function _objectWithoutPropertiesLoose(source, excluded) {
57
61
  if (source == null) return {};
58
62
  var target = {};
59
63
  var sourceKeys = Object.keys(source);
60
64
  var key, i;
61
-
62
65
  for (i = 0; i < sourceKeys.length; i++) {
63
66
  key = sourceKeys[i];
64
67
  if (excluded.indexOf(key) >= 0) continue;
65
68
  target[key] = source[key];
66
69
  }
67
-
68
70
  return target;
69
71
  }
70
-
71
72
  function _unsupportedIterableToArray(o, minLen) {
72
73
  if (!o) return;
73
74
  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
@@ -76,19 +77,14 @@ function _unsupportedIterableToArray(o, minLen) {
76
77
  if (n === "Map" || n === "Set") return Array.from(o);
77
78
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
78
79
  }
79
-
80
80
  function _arrayLikeToArray(arr, len) {
81
81
  if (len == null || len > arr.length) len = arr.length;
82
-
83
82
  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
84
-
85
83
  return arr2;
86
84
  }
87
-
88
85
  function _createForOfIteratorHelperLoose(o, allowArrayLike) {
89
86
  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
90
87
  if (it) return (it = it.call(o)).next.bind(it);
91
-
92
88
  if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
93
89
  if (it) o = it;
94
90
  var i = 0;
@@ -102,7 +98,6 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
102
98
  };
103
99
  };
104
100
  }
105
-
106
101
  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
107
102
  }
108
103
 
@@ -118,31 +113,24 @@ function inCircle(element, x, y, left, top, localTileSize) {
118
113
  function inPoly(element, x, y, mouseX, mouseY, localTileSize) {
119
114
  var j = element.points.length - 1;
120
115
  var counter = false;
121
-
122
116
  for (var i = 0; i < element.points.length; i++) {
123
117
  var iX = element.points[i].x * localTileSize;
124
118
  var iY = element.points[i].y * localTileSize;
125
-
126
119
  if (mouseX === iX && mouseY === iY) {
127
120
  return true;
128
121
  }
129
-
130
122
  var jX = element.points[j].x * localTileSize;
131
123
  var jY = element.points[j].y * localTileSize;
132
-
133
124
  if (iY > y !== jY > y) {
134
125
  var slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);
135
-
136
126
  if (slope === 0) {
137
127
  return true;
138
128
  }
139
-
140
129
  if (slope < 0 !== jY < iY) {
141
130
  counter = !counter;
142
131
  }
143
132
  }
144
133
  }
145
-
146
134
  return counter;
147
135
  }
148
136
 
@@ -154,12 +142,10 @@ function inRect(element, x, y, left, top, localTileSize) {
154
142
 
155
143
  function collideElement(e, elements, left, top, tileSize, zoom) {
156
144
  var localTileSize = calcTileSize(tileSize, zoom);
157
-
158
145
  for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
159
146
  var element = _step.value;
160
147
  var x = element.x * localTileSize;
161
148
  var y = element.y * localTileSize;
162
-
163
149
  switch (element.constructorName) {
164
150
  case 'Rect':
165
151
  case 'CanvasImage':
@@ -170,9 +156,7 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
170
156
  originalEvent: e
171
157
  };
172
158
  }
173
-
174
159
  break;
175
-
176
160
  case 'Circle':
177
161
  if (inCircle(element, x, y, left, top, localTileSize)) {
178
162
  return {
@@ -181,9 +165,7 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
181
165
  originalEvent: e
182
166
  };
183
167
  }
184
-
185
168
  break;
186
-
187
169
  case 'Polygon':
188
170
  if (inPoly(element, x, y, left, top, localTileSize)) {
189
171
  return {
@@ -192,11 +174,9 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
192
174
  originalEvent: e
193
175
  };
194
176
  }
195
-
196
177
  break;
197
178
  }
198
179
  }
199
-
200
180
  return null;
201
181
  }
202
182
 
@@ -204,11 +184,9 @@ function elementClick(e, elements, tileSize, state) {
204
184
  var left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;
205
185
  var top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;
206
186
  var clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);
207
-
208
187
  if (clickedElement !== null) {
209
188
  return clickedElement;
210
189
  }
211
-
212
190
  return {
213
191
  id: null,
214
192
  element: null,
@@ -220,11 +198,9 @@ function elementRightClick(e, elements, tileSize, state) {
220
198
  var left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;
221
199
  var top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;
222
200
  var clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);
223
-
224
201
  if (clickedElement !== null) {
225
202
  return clickedElement;
226
203
  }
227
-
228
204
  return {
229
205
  id: null,
230
206
  element: null,
@@ -235,78 +211,66 @@ function elementRightClick(e, elements, tileSize, state) {
235
211
  var LEFT_BUTTON = 1;
236
212
  var selectedObject = null;
237
213
  var unselectTimeoutId = 0;
214
+ var UNSELECT_TIMEOUT_MS = 300;
238
215
  function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {
239
216
  var newProps = _extends({}, props);
240
-
241
217
  var left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;
242
218
  var top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;
243
-
244
219
  if (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {
245
220
  var moved = false;
246
-
247
221
  if (dragObjects) {
248
222
  if (selectedObject === null) {
249
223
  selectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);
250
224
  }
251
-
252
225
  if (selectedObject !== null && selectedObject.element.draggable) {
253
226
  selectedObject.element.x = -props.left - props.deltaLeft + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;
254
227
  selectedObject.element.y = -props.top - props.deltaLeft + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;
255
228
  moved = true;
256
-
257
229
  if (onElementMoved) {
258
230
  onElementMoved(selectedObject, event.screenX - props.prevX, event.screenY - props.prevY);
259
231
  }
260
-
261
232
  if (onHover) {
262
233
  onHover(null);
263
234
  }
264
235
  }
265
236
  }
266
-
267
237
  if (!moved) {
268
238
  if (!lockXAxis) {
269
239
  newProps.left += event.screenX - props.prevX;
270
240
  }
271
-
272
241
  if (!lockYAxis) {
273
242
  newProps.top += event.screenY - props.prevY;
274
243
  }
275
244
  }
276
-
277
245
  if (event.nativeEvent.pointerType !== 'mouse') {
278
246
  unselectTimeoutId = setTimeout(function () {
279
- console.log('unselect');
280
247
  selectedObject = null;
281
248
  setProps(_extends({}, newProps, {
282
249
  prevX: null,
283
250
  prevY: null
284
251
  }));
285
- }, 300);
252
+ }, UNSELECT_TIMEOUT_MS);
286
253
  }
287
254
  } else {
288
255
  if (onHover) {
289
256
  onHover(collideElement(event, elements, left, top, tileSize, props.zoom));
290
257
  }
291
-
292
258
  selectedObject = null;
293
259
  }
294
-
295
260
  setProps(_extends({}, newProps, {
296
261
  prevX: event.screenX,
297
262
  prevY: event.screenY
298
263
  }));
299
264
  }
300
265
 
266
+ var WHEEL_DELTA = 0.05;
301
267
  function mouseWheel(event, props, setProps, minZoom, maxZoom) {
302
268
  var zoom = props.zoom;
303
-
304
269
  if (event.deltaY < 0) {
305
- zoom += 0.05;
270
+ zoom += WHEEL_DELTA;
306
271
  } else {
307
- zoom -= 0.05;
272
+ zoom -= WHEEL_DELTA;
308
273
  }
309
-
310
274
  zoom = Math.max(zoom, minZoom);
311
275
  zoom = Math.min(zoom, maxZoom);
312
276
  setProps(_extends({}, props, {
@@ -319,23 +283,18 @@ function sortElements(elements) {
319
283
  if (a.zIndex !== b.zIndex) {
320
284
  return a.zIndex - b.zIndex;
321
285
  }
322
-
323
286
  if (a.fill === b.fill) {
324
287
  if (a.stroke === b.stroke) {
325
288
  return 0;
326
289
  }
327
-
328
290
  if (a.stroke < b.stroke) {
329
291
  return 1;
330
292
  }
331
-
332
293
  return -1;
333
294
  }
334
-
335
295
  if (a.fill < b.fill) {
336
296
  return 1;
337
297
  }
338
-
339
298
  return -1;
340
299
  });
341
300
  return elements;
@@ -349,7 +308,6 @@ var CanvasObject = /*#__PURE__*/function () {
349
308
  this['z-index'] = zIndex;
350
309
  this.draggable = draggable;
351
310
  }
352
-
353
311
  _createClass(CanvasObject, [{
354
312
  key: "zIndex",
355
313
  get: function get() {
@@ -364,167 +322,142 @@ var CanvasObject = /*#__PURE__*/function () {
364
322
  return 'CanvasObject';
365
323
  }
366
324
  }]);
367
-
368
325
  return CanvasObject;
369
326
  }();
370
327
 
371
328
  var ColoredCanvasObject = /*#__PURE__*/function (_CanvasObject) {
372
329
  _inheritsLoose(ColoredCanvasObject, _CanvasObject);
373
-
374
330
  function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable) {
375
331
  var _this;
376
-
377
332
  _this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
378
333
  _this.fill = fill;
379
334
  _this.stroke = stroke;
380
335
  return _this;
381
336
  }
382
-
383
337
  _createClass(ColoredCanvasObject, [{
384
338
  key: "constructorName",
385
339
  get: function get() {
386
340
  return 'ColoredCanvasObject';
387
341
  }
388
342
  }]);
389
-
390
343
  return ColoredCanvasObject;
391
344
  }(CanvasObject);
392
345
 
393
346
  var Circle = /*#__PURE__*/function (_ColoredCanvasObject) {
394
347
  _inheritsLoose(Circle, _ColoredCanvasObject);
395
-
396
348
  function Circle(_ref) {
397
349
  var _this;
398
-
399
350
  var id = _ref.id,
400
- x = _ref.x,
401
- y = _ref.y,
402
- radius = _ref.radius,
403
- fill = _ref.fill,
404
- stroke = _ref.stroke,
405
- zIndex = _ref.zIndex,
406
- draggable = _ref.draggable;
351
+ x = _ref.x,
352
+ y = _ref.y,
353
+ radius = _ref.radius,
354
+ fill = _ref.fill,
355
+ stroke = _ref.stroke,
356
+ zIndex = _ref.zIndex,
357
+ draggable = _ref.draggable;
407
358
  _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
408
359
  _this.radius = radius;
409
360
  return _this;
410
361
  }
411
-
412
362
  _createClass(Circle, [{
413
363
  key: "constructorName",
414
364
  get: function get() {
415
365
  return 'Circle';
416
366
  }
417
367
  }]);
418
-
419
368
  return Circle;
420
369
  }(ColoredCanvasObject);
421
370
 
422
371
  var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
423
372
  _inheritsLoose(CanvasImage, _CanvasObject);
424
-
425
373
  function CanvasImage(_ref) {
426
374
  var _this;
427
-
428
375
  var id = _ref.id,
429
- x = _ref.x,
430
- y = _ref.y,
431
- width = _ref.width,
432
- height = _ref.height,
433
- src = _ref.src,
434
- zIndex = _ref.zIndex,
435
- draggable = _ref.draggable;
376
+ x = _ref.x,
377
+ y = _ref.y,
378
+ width = _ref.width,
379
+ height = _ref.height,
380
+ src = _ref.src,
381
+ zIndex = _ref.zIndex,
382
+ draggable = _ref.draggable;
436
383
  _this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
437
384
  _this.width = width;
438
385
  _this.height = height;
439
386
  _this.src = src;
440
387
  return _this;
441
388
  }
442
-
443
389
  var _proto = CanvasImage.prototype;
444
-
445
390
  _proto.crop = function crop(x, y, width, height) {
446
391
  this.sx = sx;
447
392
  this.sy = sx;
448
393
  this.swidth = swidth;
449
394
  this.sheight = sheight;
450
395
  };
451
-
452
396
  _createClass(CanvasImage, [{
453
397
  key: "constructorName",
454
398
  get: function get() {
455
399
  return 'CanvasImage';
456
400
  }
457
401
  }]);
458
-
459
402
  return CanvasImage;
460
403
  }(CanvasObject);
461
404
 
462
405
  var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
463
406
  _inheritsLoose(Rect, _ColoredCanvasObject);
464
-
465
407
  function Rect(_ref) {
466
408
  var _this;
467
-
468
409
  var id = _ref.id,
469
- x = _ref.x,
470
- y = _ref.y,
471
- width = _ref.width,
472
- height = _ref.height,
473
- fill = _ref.fill,
474
- stroke = _ref.stroke,
475
- zIndex = _ref.zIndex,
476
- draggable = _ref.draggable;
410
+ x = _ref.x,
411
+ y = _ref.y,
412
+ width = _ref.width,
413
+ height = _ref.height,
414
+ fill = _ref.fill,
415
+ stroke = _ref.stroke,
416
+ zIndex = _ref.zIndex,
417
+ draggable = _ref.draggable;
477
418
  _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
478
419
  _this.width = width;
479
420
  _this.height = height;
480
421
  return _this;
481
422
  }
482
-
483
423
  _createClass(Rect, [{
484
424
  key: "constructorName",
485
425
  get: function get() {
486
426
  return 'Rect';
487
427
  }
488
428
  }]);
489
-
490
429
  return Rect;
491
430
  }(ColoredCanvasObject);
492
431
 
493
432
  var Polygon = /*#__PURE__*/function (_ColoredCanvasObject) {
494
433
  _inheritsLoose(Polygon, _ColoredCanvasObject);
495
-
496
434
  function Polygon(_ref) {
497
435
  var _this;
498
-
499
436
  var id = _ref.id,
500
- points = _ref.points,
501
- fill = _ref.fill,
502
- stroke = _ref.stroke,
503
- zIndex = _ref.zIndex,
504
- draggable = _ref.draggable;
437
+ points = _ref.points,
438
+ fill = _ref.fill,
439
+ stroke = _ref.stroke,
440
+ zIndex = _ref.zIndex,
441
+ draggable = _ref.draggable;
505
442
  _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable) || this;
506
443
  _this.points = points;
507
444
  return _this;
508
445
  }
509
-
510
446
  _createClass(Polygon, [{
511
447
  key: "constructorName",
512
448
  get: function get() {
513
449
  return 'Polygon';
514
450
  }
515
451
  }]);
516
-
517
452
  return Polygon;
518
453
  }(ColoredCanvasObject);
519
454
 
520
455
  function renderCircle(context, element, left, top, localTileSize) {
521
456
  context.beginPath();
522
457
  context.arc(left + element.x * localTileSize, top + element.y * localTileSize, element.radius * localTileSize, 0, 2 * Math.PI);
523
-
524
458
  if (element.fill) {
525
459
  context.fill();
526
460
  }
527
-
528
461
  if (element.stroke) {
529
462
  context.stroke();
530
463
  }
@@ -537,7 +470,6 @@ function renderImage(context, element, left, top, localTileSize) {
537
470
  __canvas2dWrapper__.imgCache[element.src] = new Image();
538
471
  __canvas2dWrapper__.imgCache[element.src].src = element.src;
539
472
  }
540
-
541
473
  if (!element.sx) {
542
474
  context.drawImage(__canvas2dWrapper__.imgCache[element.src], left + element.x * localTileSize, top + element.y * localTileSize, element.width * localTileSize, element.height * localTileSize);
543
475
  } else {
@@ -549,7 +481,6 @@ function renderRect(context, element, left, top, localTileSize) {
549
481
  if (element.fill) {
550
482
  context.fillRect(left + element.x * localTileSize, top + element.y * localTileSize, element.width * localTileSize, element.height * localTileSize);
551
483
  }
552
-
553
484
  if (element.stroke) {
554
485
  context.strokeRect(left + element.x * localTileSize, top + element.y * localTileSize, element.width * localTileSize, element.height * localTileSize);
555
486
  }
@@ -558,17 +489,13 @@ function renderRect(context, element, left, top, localTileSize) {
558
489
  function renderRect$1(context, element, left, top, localTileSize) {
559
490
  context.beginPath();
560
491
  context.moveTo(left + element.points[0].x * localTileSize, top + element.points[0].y * localTileSize);
561
-
562
492
  for (var i = 0; i < element.points.length; i++) {
563
493
  context.lineTo(left + element.points[i].x * localTileSize, top + element.points[i].y * localTileSize);
564
494
  }
565
-
566
495
  context.lineTo(left + element.points[0].x * localTileSize, top + element.points[0].y * localTileSize);
567
-
568
496
  if (element.fill) {
569
497
  context.fill();
570
498
  }
571
-
572
499
  if (element.stroke) {
573
500
  context.stroke();
574
501
  }
@@ -585,22 +512,17 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
585
512
  var prevStrokeStyle = '';
586
513
  var localTileSize = calcTileSize(tileSize, state.zoom);
587
514
  context.clearRect(0, 0, width, height);
588
-
589
515
  for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
590
516
  var element = _step.value;
591
-
592
517
  if (element.fill !== prevFillStyle && typeof element.fill !== 'undefined') {
593
518
  context.fillStyle = element.fill;
594
519
  prevFillStyle = element.fill;
595
520
  }
596
-
597
521
  if (element.stroke !== prevStrokeStyle && typeof element.stroke !== 'undefined') {
598
522
  context.strokeStyle = element.stroke;
599
523
  prevStrokeStyle = element.stroke;
600
524
  }
601
-
602
525
  var type = element.constructorName;
603
-
604
526
  if (renderFn[type]) {
605
527
  renderFn[type](context, element, left, top, localTileSize);
606
528
  } else {
@@ -609,54 +531,54 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
609
531
  }
610
532
  }
611
533
 
612
- var _excluded = ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
613
- var prevEvent;
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
+ }
614
539
  function Canvas2D(_ref) {
615
540
  var elements = _ref.elements,
616
- width = _ref.width,
617
- height = _ref.height,
618
- _ref$trackMouseMove = _ref.trackMouseMove,
619
- trackMouseMove = _ref$trackMouseMove === void 0 ? true : _ref$trackMouseMove,
620
- _ref$minZoom = _ref.minZoom,
621
- minZoom = _ref$minZoom === void 0 ? 1 : _ref$minZoom,
622
- _ref$maxZoom = _ref.maxZoom,
623
- maxZoom = _ref$maxZoom === void 0 ? 1 : _ref$maxZoom,
624
- _ref$tileSize = _ref.tileSize,
625
- tileSize = _ref$tileSize === void 0 ? 1 : _ref$tileSize,
626
- onClick = _ref.onClick,
627
- onRightClick = _ref.onRightClick,
628
- onHover = _ref.onHover,
629
- onElementMoved = _ref.onElementMoved,
630
- onWheel = _ref.onWheel,
631
- _ref$lockXAxis = _ref.lockXAxis,
632
- lockXAxis = _ref$lockXAxis === void 0 ? false : _ref$lockXAxis,
633
- _ref$lockYAxis = _ref.lockYAxis,
634
- lockYAxis = _ref$lockYAxis === void 0 ? false : _ref$lockYAxis,
635
- _ref$smoothingQuality = _ref.smoothingQuality,
636
- smoothingQuality = _ref$smoothingQuality === void 0 ? 'medium' : _ref$smoothingQuality,
637
- _ref$dragObjects = _ref.dragObjects,
638
- dragObjects = _ref$dragObjects === void 0 ? false : _ref$dragObjects,
639
- _ref$deltaLeft = _ref.deltaLeft,
640
- deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
641
- _ref$deltaTop = _ref.deltaTop,
642
- deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
643
- otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
644
-
541
+ width = _ref.width,
542
+ height = _ref.height,
543
+ _ref$trackMouseMove = _ref.trackMouseMove,
544
+ trackMouseMove = _ref$trackMouseMove === void 0 ? true : _ref$trackMouseMove,
545
+ _ref$minZoom = _ref.minZoom,
546
+ minZoom = _ref$minZoom === void 0 ? 1 : _ref$minZoom,
547
+ _ref$maxZoom = _ref.maxZoom,
548
+ maxZoom = _ref$maxZoom === void 0 ? 1 : _ref$maxZoom,
549
+ _ref$tileSize = _ref.tileSize,
550
+ tileSize = _ref$tileSize === void 0 ? 1 : _ref$tileSize,
551
+ onClick = _ref.onClick,
552
+ onRightClick = _ref.onRightClick,
553
+ onHover = _ref.onHover,
554
+ onElementMoved = _ref.onElementMoved,
555
+ onWheel = _ref.onWheel,
556
+ onFrame = _ref.onFrame,
557
+ _ref$lockXAxis = _ref.lockXAxis,
558
+ lockXAxis = _ref$lockXAxis === void 0 ? false : _ref$lockXAxis,
559
+ _ref$lockYAxis = _ref.lockYAxis,
560
+ lockYAxis = _ref$lockYAxis === void 0 ? false : _ref$lockYAxis,
561
+ _ref$smoothingQuality = _ref.smoothingQuality,
562
+ smoothingQuality = _ref$smoothingQuality === void 0 ? 'medium' : _ref$smoothingQuality,
563
+ _ref$dragObjects = _ref.dragObjects,
564
+ dragObjects = _ref$dragObjects === void 0 ? false : _ref$dragObjects,
565
+ _ref$deltaLeft = _ref.deltaLeft,
566
+ deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
567
+ _ref$deltaTop = _ref.deltaTop,
568
+ deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
569
+ otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
645
570
  var _useState = useState({}),
646
- state = _useState[0],
647
- setState = _useState[1];
648
-
571
+ state = _useState[0],
572
+ setState = _useState[1];
649
573
  var canvasRef = useCallback(function (canvas) {
650
574
  if (canvas !== null) {
651
575
  var context = canvas.getContext('2d');
652
-
653
576
  if (smoothingQuality === false) {
654
577
  context.imageSmoothingEnabled = false;
655
578
  } else {
656
579
  context.imageSmoothingEnabled = true;
657
580
  context.imageSmoothingQuality = smoothingQuality;
658
581
  }
659
-
660
582
  setState({
661
583
  boundingClientRect: canvas.getBoundingClientRect(),
662
584
  canvas: canvas,
@@ -671,69 +593,63 @@ function Canvas2D(_ref) {
671
593
  }, []);
672
594
  state.deltaTop = deltaTop;
673
595
  state.deltaLeft = deltaLeft;
674
-
675
596
  if (typeof elements !== 'object' || !Array.isArray(elements)) {
676
597
  throw new Error('Invalid elements, should be an array !');
677
598
  }
678
-
679
599
  if (typeof width !== 'number' || typeof height !== 'number') {
680
600
  throw new Error('width/height should be specified and be numbers.');
681
601
  }
682
-
683
602
  if (minZoom > maxZoom) {
684
603
  throw new Error('minZoom should be lower than maxZoom.');
685
604
  }
686
-
687
605
  if (typeof onClick !== 'function' && typeof onClick !== 'undefined') {
688
606
  throw new Error('onClick should be a function.');
689
607
  }
690
-
691
608
  var sortedElements = sortElements(elements);
692
609
  var onMouseMove = null;
693
-
694
610
  if (trackMouseMove) {
695
611
  onMouseMove = function onMouseMove(e) {
696
612
  return mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);
697
613
  };
698
614
  }
699
-
700
615
  var onWheelFn = function onWheelFn(e) {
701
616
  if (onWheel) {
702
617
  onWheel(e);
703
618
  }
704
-
705
619
  if (minZoom !== maxZoom) {
706
620
  mouseWheel(e, state, setState, minZoom, maxZoom);
707
621
  }
708
622
  };
709
-
710
623
  var onClickFn = null;
711
-
712
624
  if (onClick) {
713
625
  onClickFn = function onClickFn(e) {
714
626
  return onClick(elementClick(e, elements, tileSize, state));
715
627
  };
716
628
  }
717
-
718
- if (onRightClick && state.canvas) {
719
- if (prevEvent) {
720
- state.canvas.removeEventListener('contextmenu', prevEvent);
629
+ useEffect(function () {
630
+ if (onRightClick && state.canvas) {
631
+ state.canvas.addEventListener('contextmenu', onRightClickEvent);
632
+ return state.canvas.removeEventListener('contextmenu', onRightClickEvent);
721
633
  }
722
-
723
- prevEvent = function prevEvent(e) {
724
- e.preventDefault();
725
- onRightClick(elementRightClick(e, elements, tileSize, state));
634
+ }, [state.canvas, onRightClick]);
635
+ useEffect(function () {
636
+ var shouldRender = true;
637
+ function render() {
638
+ if (onFrame) {
639
+ onFrame();
640
+ }
641
+ if (state.context) {
642
+ renderCanvas(state.context, width, height, sortedElements, tileSize, state);
643
+ }
644
+ if (shouldRender) {
645
+ window.requestAnimationFrame(render);
646
+ }
647
+ }
648
+ window.requestAnimationFrame(render);
649
+ return function () {
650
+ shouldRender = false;
726
651
  };
727
-
728
- state.canvas.addEventListener('contextmenu', prevEvent);
729
- }
730
-
731
- if (state.context) {
732
- window.requestAnimationFrame(function () {
733
- renderCanvas(state.context, width, height, sortedElements, tileSize, state);
734
- });
735
- }
736
-
652
+ }, [state.context, onFrame]);
737
653
  return /*#__PURE__*/React.createElement("canvas", _extends({
738
654
  ref: canvasRef,
739
655
  width: width,
@@ -753,5 +669,103 @@ function preloadImages(images) {
753
669
  }
754
670
  }
755
671
 
756
- export { Canvas2D, CanvasImage, Circle, Polygon, Rect, preloadImages };
672
+ var intervalId = 0;
673
+ function useGamepad() {
674
+ var _useState = useState(),
675
+ gamepad = _useState[0],
676
+ setGamepad = _useState[1];
677
+ useEffect(function () {
678
+ clearInterval(intervalId);
679
+ intervalId = setInterval(function () {
680
+ return setGamepad(navigator.getGamepads()[0]);
681
+ }, 15);
682
+ }, []);
683
+ return gamepad;
684
+ }
685
+
686
+ function useKeyboard() {
687
+ var _useState = useState({}),
688
+ keyboard = _useState[0],
689
+ setKeyboard = _useState[1];
690
+ useEffect(function () {
691
+ document.addEventListener('keydown', function (e) {
692
+ keyboard[e.key] = true;
693
+ setKeyboard(JSON.parse(JSON.stringify(keyboard)));
694
+ });
695
+ document.addEventListener('keyup', function (e) {
696
+ keyboard[e.key] = false;
697
+ setKeyboard(JSON.parse(JSON.stringify(keyboard)));
698
+ });
699
+ }, []);
700
+ return keyboard;
701
+ }
702
+
703
+ function useMousePosition(includeTouch) {
704
+ if (includeTouch === void 0) {
705
+ includeTouch = true;
706
+ }
707
+ var _useState = useState({
708
+ x: null,
709
+ y: null
710
+ }),
711
+ mousePosition = _useState[0],
712
+ setMousePosition = _useState[1];
713
+ useEffect(function () {
714
+ var updateMousePosition = function updateMousePosition(ev) {
715
+ var x, y;
716
+ if (ev.touches) {
717
+ var touch = ev.touches[0];
718
+ var _ref = [touch.clientX, touch.clientY];
719
+ x = _ref[0];
720
+ y = _ref[1];
721
+ } else {
722
+ var _ref2 = [ev.clientX, ev.clientY];
723
+ x = _ref2[0];
724
+ y = _ref2[1];
725
+ }
726
+ setMousePosition({
727
+ x: x,
728
+ y: y
729
+ });
730
+ };
731
+ window.addEventListener('mousemove', updateMousePosition);
732
+ if (includeTouch) {
733
+ window.addEventListener('touchmove', updateMousePosition);
734
+ }
735
+ return function () {
736
+ window.removeEventListener('mousemove', updateMousePosition);
737
+ if (includeTouch) {
738
+ window.removeEventListener('touchmove', updateMousePosition);
739
+ }
740
+ };
741
+ }, [includeTouch]);
742
+ return mousePosition;
743
+ }
744
+
745
+ function getWindowDimensions() {
746
+ var _document$documentEle = document.documentElement,
747
+ width = _document$documentEle.clientWidth,
748
+ height = _document$documentEle.clientHeight;
749
+ return {
750
+ width: width,
751
+ height: height
752
+ };
753
+ }
754
+ function useWindowDimensions() {
755
+ var _useState = useState(getWindowDimensions()),
756
+ windowDimensions = _useState[0],
757
+ setWindowDimensions = _useState[1];
758
+ useEffect(function () {
759
+ function handleResize() {
760
+ setWindowDimensions(getWindowDimensions());
761
+ }
762
+ window.addEventListener('resize', handleResize);
763
+ return function () {
764
+ return window.removeEventListener('resize', handleResize);
765
+ };
766
+ }, []);
767
+ return windowDimensions;
768
+ }
769
+
770
+ export { Canvas2D, CanvasImage, Circle, Polygon, Rect, preloadImages, useGamepad, useKeyboard, useMousePosition, useWindowDimensions };
757
771
  //# sourceMappingURL=index.modern.js.map