redhotmagma-visualization 1.41.0 → 1.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/AlignTargetProvider.js +50 -79
  2. package/CommonUtils/Deferred.js +11 -38
  3. package/CommonUtils/Observable.js +29 -48
  4. package/CommonUtils/PropertyObserver.js +10 -17
  5. package/CommonUtils/SyncCurrentFunction.js +33 -42
  6. package/CommonUtils/SyncObservableEvent.js +2 -6
  7. package/CommonUtils/pointerEvent.js +50 -98
  8. package/Constants.js +6 -6
  9. package/DevApp.js +187 -309
  10. package/ExposedModules.js +2 -9
  11. package/FallbackVisualization.js +4 -10
  12. package/PrintingEffects/ColorEmbossingEffect.js +15 -26
  13. package/PrintingEffects/DomingEffect.js +29 -52
  14. package/PrintingEffects/EmbossingEffect.js +17 -29
  15. package/PrintingEffects/EmbroideryEffect.js +251 -362
  16. package/PrintingEffects/EngravingEffect.js +17 -29
  17. package/PrintingEffects/PrintingEffects.js +44 -73
  18. package/PrintingEffects/PrintingEffectsUtils.js +1 -7
  19. package/React/ReactBase.js +15 -47
  20. package/Three/Controls/OrbitControls.js +105 -126
  21. package/Three/Exporters/glTFExporter.js +2 -6
  22. package/Three/Loaders/ColladaLoader.js +202 -550
  23. package/Three/Loaders/MTLLoader.js +33 -64
  24. package/Three/Loaders/OBJLoader.js +48 -80
  25. package/Three/Three2D.js +750 -1014
  26. package/Three/Three2DLayers.js +217 -341
  27. package/Three/Three3D.js +530 -800
  28. package/Three/Three3DScene.js +484 -780
  29. package/Three/ThreeBase.js +145 -230
  30. package/Utils/DesignArea/getDesignAreaCanvasSize.js +3 -11
  31. package/Utils/TextureBuilder/createTextureBuilder.js +133 -193
  32. package/Utils/TextureBuilder/textureBuilderFunctions.js +11 -27
  33. package/Utils/alignToElement.js +13 -24
  34. package/Utils/canvasBlur.js +27 -45
  35. package/Utils/createAlphaMapFromAlphaChannel.js +11 -21
  36. package/Utils/createBakedShadow.js +38 -42
  37. package/Utils/createCache.js +0 -4
  38. package/Utils/createCanvas.js +3 -9
  39. package/Utils/createImageRepository.js +63 -87
  40. package/Utils/disposeMaterial.js +4 -14
  41. package/Utils/getImageSize.js +1 -2
  42. package/Utils/imagePreloader.js +36 -48
  43. package/Utils/initTextureCanvas.js +6 -18
  44. package/Utils/isMobileDevice.js +3 -7
  45. package/Utils/optimizeTextureImage.js +13 -29
  46. package/Utils/rememberCameraViewOffset.js +8 -11
  47. package/Utils/removeObject.js +0 -4
  48. package/Utils/restrictCameraMovement.js +2 -12
  49. package/Utils/setLightShadow.js +3 -5
  50. package/Utils/setOrthographicCameraSize.js +0 -1
  51. package/Utils/updateFitSizeToElement.js +4 -9
  52. package/VisualizationContainer.js +37 -90
  53. package/VisualizationInterface.js +32 -67
  54. package/VisualizationProvider.js +5 -15
  55. package/index.js +2 -9
  56. package/package.json +6 -7
  57. package/scripts/cpPublicLocal.js +7 -2
  58. package/src/CommonUtils/Observable.js +1 -0
  59. package/src/CommonUtils/pointerEvent.js +17 -0
  60. package/src/Constants.js +2 -0
  61. package/src/DevApp.js +1 -2
  62. package/src/Three/Three2D.js +105 -1
  63. package/src/Three/ThreeBase.js +31 -3
  64. package/src/Utils/TextureBuilder/createTextureBuilder.js +12 -3
  65. package/src/VisualizationContainer.js +8 -2
  66. package/src/index.js +2 -3
  67. package/visualizationAdapterCreator.js +6 -23
@@ -1,58 +1,49 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.syncCurrent = syncCurrent;
7
-
8
8
  var _Deferred = require("./Deferred");
9
-
9
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
10
10
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
11
-
12
11
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
13
-
14
12
  function syncCurrent(cb) {
15
13
  var current;
16
- return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
14
+ return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
17
15
  var prev,
18
- deferredSync,
19
- _args = arguments;
20
- return regeneratorRuntime.wrap(function _callee$(_context) {
21
- while (1) {
22
- switch (_context.prev = _context.next) {
23
- case 0:
24
- prev = current;
25
- deferredSync = new _Deferred.Deferred();
26
- current = {
27
- started: false,
28
- promise: deferredSync.promise
29
- };
30
- _context.t0 = prev && prev.started;
31
-
32
- if (!_context.t0) {
33
- _context.next = 7;
34
- break;
35
- }
36
-
16
+ deferredSync,
17
+ _args = arguments;
18
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
19
+ while (1) switch (_context.prev = _context.next) {
20
+ case 0:
21
+ prev = current;
22
+ deferredSync = new _Deferred.Deferred();
23
+ current = {
24
+ started: false,
25
+ promise: deferredSync.promise
26
+ };
27
+ _context.t0 = prev && prev.started;
28
+ if (!_context.t0) {
37
29
  _context.next = 7;
38
- return prev.promise;
39
-
40
- case 7:
41
- current.started = true;
42
- _context.prev = 8;
43
- _context.next = 11;
44
- return cb.apply(void 0, _args);
45
-
46
- case 11:
47
- _context.prev = 11;
48
- // always resolve to ensure the next update runs
49
- deferredSync.resolve();
50
- return _context.finish(11);
51
-
52
- case 14:
53
- case "end":
54
- return _context.stop();
55
- }
30
+ break;
31
+ }
32
+ _context.next = 7;
33
+ return prev.promise;
34
+ case 7:
35
+ current.started = true;
36
+ _context.prev = 8;
37
+ _context.next = 11;
38
+ return cb.apply(void 0, _args);
39
+ case 11:
40
+ _context.prev = 11;
41
+ // always resolve to ensure the next update runs
42
+ deferredSync.resolve();
43
+ return _context.finish(11);
44
+ case 14:
45
+ case "end":
46
+ return _context.stop();
56
47
  }
57
48
  }, _callee, null, [[8,, 11, 14]]);
58
49
  }));
@@ -4,16 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.syncObservableEvent = void 0;
7
-
8
- var syncObservableEvent = function syncObservableEvent(observable, eventName) {
7
+ var syncObservableEvent = exports.syncObservableEvent = function syncObservableEvent(observable, eventName) {
9
8
  return new Promise(function (resolve) {
10
9
  var resolveAndCleanUp = function resolveAndCleanUp() {
11
10
  resolve();
12
11
  observable.off(eventName, resolveAndCleanUp);
13
12
  };
14
-
15
13
  observable.on(eventName, resolveAndCleanUp);
16
14
  });
17
- };
18
-
19
- exports.syncObservableEvent = syncObservableEvent;
15
+ };
@@ -3,17 +3,15 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createZoomHandler = exports.createPinchZoomListener = exports.createMouseWheelEventListener = exports.createPointerMoveEventListener = exports.createPointerEventListener = exports.createPointerHitListener = exports.createPositionChangeChecker = exports.getPointFromPointerEvent = void 0;
7
-
6
+ exports.getPointFromPointerEvent = exports.createZoomHandler = exports.createPositionChangeChecker = exports.createPointerMoveEventListener = exports.createPointerHitListener = exports.createPointerEventListener = exports.createPinchZoomListener = exports.createMouseWheelEventListener = exports.createMouseMoveListener = void 0;
8
7
  /**
9
8
  * @param {MouseEvent|TouchEvent} evt
10
9
  * @param {HTMLElement} relativeTo
11
10
  * @returns {{x: number, y: number}}
12
11
  */
13
- var getPointFromPointerEvent = function getPointFromPointerEvent(evt, relativeTo) {
12
+ var getPointFromPointerEvent = exports.getPointFromPointerEvent = function getPointFromPointerEvent(evt, relativeTo) {
14
13
  var x, y;
15
14
  var touches = evt.changedTouches && evt.changedTouches.length > 0 && evt.changedTouches || evt.touches;
16
-
17
15
  if (touches && touches.length > 0) {
18
16
  x = touches[0].clientX;
19
17
  y = touches[0].clientY;
@@ -21,21 +19,19 @@ var getPointFromPointerEvent = function getPointFromPointerEvent(evt, relativeTo
21
19
  x = evt.clientX;
22
20
  y = evt.clientY;
23
21
  }
24
-
25
22
  if (relativeTo) {
26
23
  var _relativeTo$getBoundi = relativeTo.getBoundingClientRect(),
27
- top = _relativeTo$getBoundi.top,
28
- left = _relativeTo$getBoundi.left;
29
-
24
+ top = _relativeTo$getBoundi.top,
25
+ left = _relativeTo$getBoundi.left;
30
26
  x -= left;
31
27
  y -= top;
32
28
  }
33
-
34
29
  return {
35
30
  x: x,
36
31
  y: y
37
32
  };
38
33
  };
34
+
39
35
  /**
40
36
  * Creates and stores the print of the event position for later comparison.
41
37
  * It can be used to create a position change checker function, in order to solve the problem
@@ -43,20 +39,16 @@ var getPointFromPointerEvent = function getPointFromPointerEvent(evt, relativeTo
43
39
  * @param evt
44
40
  * @returns {function(*=): boolean}
45
41
  */
46
-
47
-
48
- exports.getPointFromPointerEvent = getPointFromPointerEvent;
49
-
50
- var createPositionChangeChecker = function createPositionChangeChecker(evt) {
42
+ var createPositionChangeChecker = exports.createPositionChangeChecker = function createPositionChangeChecker(evt) {
51
43
  var getPositionPrint = function getPositionPrint(evt) {
52
44
  return "" + evt.pageX + "-" + evt.pageY;
53
45
  };
54
-
55
46
  var initialPrint = getPositionPrint(evt);
56
47
  return function (evt) {
57
48
  return initialPrint !== getPositionPrint(evt);
58
49
  };
59
50
  };
51
+
60
52
  /**
61
53
  * Creates a "hit" event listener.
62
54
  * It detects a single tap (or click) - if the pointer was released without moving.
@@ -64,29 +56,23 @@ var createPositionChangeChecker = function createPositionChangeChecker(evt) {
64
56
  * @param {function} fn The event handler function
65
57
  * @returns {function()} A function to be called to remove the event listeners
66
58
  */
67
-
68
-
69
- exports.createPositionChangeChecker = createPositionChangeChecker;
70
-
71
- var createPointerHitListener = function createPointerHitListener(element, fn) {
59
+ var createPointerHitListener = exports.createPointerHitListener = function createPointerHitListener(element, fn) {
72
60
  var moved = false;
73
- var checkPositionChange = false; // preventing the emulated mouse events after touchend
74
- // see https://developer.mozilla.org/en-US/docs/Web/API/Touch_events/Supporting_both_TouchEvent_and_MouseEvent
61
+ var checkPositionChange = false;
75
62
 
63
+ // preventing the emulated mouse events after touchend
64
+ // see https://developer.mozilla.org/en-US/docs/Web/API/Touch_events/Supporting_both_TouchEvent_and_MouseEvent
76
65
  var preventEmulatedEvents = function preventEmulatedEvents(cb) {
77
66
  return function (evt) {
78
67
  if (!moved && evt.type === "touchend") {
79
68
  evt.preventDefault();
80
69
  }
81
-
82
70
  cb(evt);
83
71
  };
84
72
  };
85
-
86
73
  var startHandler = function startHandler(evt) {
87
74
  moved = false;
88
75
  var isTouch = (evt.changedTouches || evt.touches || []).length > 0;
89
-
90
76
  if (isTouch) {
91
77
  // in case of touch events we can skip the check, the events are fired correctly
92
78
  checkPositionChange = false;
@@ -98,7 +84,6 @@ var createPointerHitListener = function createPointerHitListener(element, fn) {
98
84
  element.addEventListener("mouseup", endHandler);
99
85
  }
100
86
  };
101
-
102
87
  var moveHandler = function moveHandler(evt) {
103
88
  if (checkPositionChange) {
104
89
  moved = checkPositionChange(evt);
@@ -106,7 +91,6 @@ var createPointerHitListener = function createPointerHitListener(element, fn) {
106
91
  moved = true;
107
92
  }
108
93
  };
109
-
110
94
  var endHandler = preventEmulatedEvents(function () {
111
95
  !moved && fn.apply(void 0, arguments);
112
96
  element.removeEventListener("touchmove", moveHandler, true);
@@ -121,6 +105,7 @@ var createPointerHitListener = function createPointerHitListener(element, fn) {
121
105
  element.removeEventListener("touchstart", startHandler);
122
106
  };
123
107
  };
108
+
124
109
  /**
125
110
  * Creates a general pointer event listener (for mouse and touch events)
126
111
  * @param element
@@ -128,13 +113,8 @@ var createPointerHitListener = function createPointerHitListener(element, fn) {
128
113
  * @param {function} fn The event handler function
129
114
  * @returns {function()} A function to be called to remove the event listeners
130
115
  */
131
-
132
-
133
- exports.createPointerHitListener = createPointerHitListener;
134
-
135
- var createPointerEventListener = function createPointerEventListener(element, name, fn) {
116
+ var createPointerEventListener = exports.createPointerEventListener = function createPointerEventListener(element, name, fn) {
136
117
  var touchName, mouseName;
137
-
138
118
  switch (name) {
139
119
  case "start":
140
120
  {
@@ -142,14 +122,12 @@ var createPointerEventListener = function createPointerEventListener(element, na
142
122
  mouseName = "mousedown";
143
123
  break;
144
124
  }
145
-
146
125
  case "move":
147
126
  {
148
127
  touchName = "touchmove";
149
128
  mouseName = "mousemove";
150
129
  break;
151
130
  }
152
-
153
131
  case "end":
154
132
  {
155
133
  touchName = "touchend";
@@ -157,39 +135,30 @@ var createPointerEventListener = function createPointerEventListener(element, na
157
135
  break;
158
136
  }
159
137
  }
160
-
161
138
  var tolerance = 1; // ms
162
-
163
139
  var timeStamp = 0;
164
-
165
140
  var touchHandler = function touchHandler(evt) {
166
141
  timeStamp = evt.timeStamp;
167
-
168
142
  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
169
143
  args[_key - 1] = arguments[_key];
170
144
  }
171
-
172
145
  fn.apply(void 0, [evt].concat(args));
173
146
  };
174
-
175
147
  var mouseHandler = function mouseHandler(evt) {
176
148
  if (evt.timeStamp - timeStamp < tolerance) {
177
149
  // eslint-disable-next-line no-console
178
150
  console.log("Skipped double event handling.");
179
151
  return;
180
- } // for 'start' we call the function only if the element is is the target (or contained by the target)
152
+ }
153
+ // for 'start' we call the function only if the element is is the target (or contained by the target)
181
154
  // for others it has to be called in every case
182
-
183
-
184
155
  if (name !== "start" || evt.target === element || evt.target.contains(element)) {
185
156
  for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
186
157
  args[_key2 - 1] = arguments[_key2];
187
158
  }
188
-
189
159
  fn.apply(void 0, [evt].concat(args));
190
160
  }
191
161
  };
192
-
193
162
  element.addEventListener(touchName, touchHandler);
194
163
  window.addEventListener(mouseName, mouseHandler);
195
164
  return function () {
@@ -197,6 +166,26 @@ var createPointerEventListener = function createPointerEventListener(element, na
197
166
  window.removeEventListener(mouseName, mouseHandler);
198
167
  };
199
168
  };
169
+ var createMouseMoveListener = exports.createMouseMoveListener = function createMouseMoveListener(element, _ref) {
170
+ var onEnter = _ref.onEnter,
171
+ onMove = _ref.onMove,
172
+ onLeave = _ref.onLeave;
173
+ var enterHandler = function enterHandler() {
174
+ onEnter && onEnter.apply(void 0, arguments);
175
+ onMove && element.addEventListener("mousemove", onMove);
176
+ };
177
+ var leaveHandler = function leaveHandler() {
178
+ onLeave && onLeave.apply(void 0, arguments);
179
+ onMove && element.removeEventListener("mousemove", onMove);
180
+ };
181
+ element.addEventListener("mouseenter", enterHandler);
182
+ element.addEventListener("mouseleave", leaveHandler);
183
+ return function () {
184
+ element.removeEventListener("mouseenter", enterHandler);
185
+ element.removeEventListener("mouseleave", leaveHandler);
186
+ };
187
+ };
188
+
200
189
  /**
201
190
  * Helper function to get the distance of two points
202
191
  * @param {number} x1
@@ -205,72 +194,59 @@ var createPointerEventListener = function createPointerEventListener(element, na
205
194
  * @param {number} y2
206
195
  * @return {number}
207
196
  */
208
-
209
-
210
- exports.createPointerEventListener = createPointerEventListener;
211
-
212
197
  var getTwoPointsDistance = function getTwoPointsDistance(x1, x2, y1, y2) {
213
198
  return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
214
199
  };
200
+
215
201
  /**
216
202
  * Returns the distance between the first two touch points
217
203
  * @param {array} touches The touches list from the touch event
218
204
  * @return {null|number} The distance
219
205
  */
220
-
221
-
222
- var getTouchDistance = function getTouchDistance(_ref) {
223
- var touches = _ref.touches;
224
-
206
+ var getTouchDistance = function getTouchDistance(_ref2) {
207
+ var touches = _ref2.touches;
225
208
  if (!touches || touches.length < 2) {
226
209
  return null;
227
210
  }
228
-
229
211
  return getTwoPointsDistance(touches[0].clientX, touches[1].clientX, touches[0].clientY, touches[1].clientY);
230
212
  };
213
+
231
214
  /**
232
215
  * Creates a pointer move event listener (for mouse and touch events)
233
216
  * @param element
234
217
  * @param {function} fn The event handler function
235
218
  * @returns {function()} A function to be called to remove the event listeners
236
219
  */
237
-
238
-
239
- var createPointerMoveEventListener = function createPointerMoveEventListener(element, fn) {
220
+ var createPointerMoveEventListener = exports.createPointerMoveEventListener = function createPointerMoveEventListener(element, fn) {
240
221
  var moveListener = null;
241
-
242
222
  var removeMoveListener = function removeMoveListener() {
243
223
  if (moveListener) {
244
224
  moveListener();
245
225
  moveListener = null;
246
226
  }
247
227
  };
248
-
249
228
  var getPointFromMultipleTouchEvent = function getPointFromMultipleTouchEvent(evt, prevPosition) {
250
229
  if (!prevPosition || !evt.touches || evt.touches.length < 2) {
251
230
  return getPointFromPointerEvent(evt);
252
231
  }
253
-
254
232
  var x = null;
255
233
  var y = null;
256
234
  var distance = null;
257
-
258
235
  for (var i = 0; i < evt.touches.length; i++) {
259
- var newDistance = getTwoPointsDistance(evt.touches[i].clientX, prevPosition.x, evt.touches[i].clientY, prevPosition.y); // Get the closest touch event to the previous one
236
+ var newDistance = getTwoPointsDistance(evt.touches[i].clientX, prevPosition.x, evt.touches[i].clientY, prevPosition.y);
260
237
 
238
+ // Get the closest touch event to the previous one
261
239
  if (distance === null || newDistance < distance) {
262
240
  distance = newDistance;
263
241
  x = evt.touches[i].clientX;
264
242
  y = evt.touches[i].clientY;
265
243
  }
266
244
  }
267
-
268
245
  return {
269
246
  x: x,
270
247
  y: y
271
248
  };
272
249
  };
273
-
274
250
  var startListener = createPointerEventListener(element, "start", function (evt) {
275
251
  var prevPosition = getPointFromMultipleTouchEvent(evt);
276
252
  var prevZoomDistance = getTouchDistance(evt);
@@ -285,11 +261,9 @@ var createPointerMoveEventListener = function createPointerMoveEventListener(ele
285
261
  };
286
262
  prevPosition = currentPosition;
287
263
  prevZoomDistance = currentZoomDistance;
288
-
289
264
  for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
290
265
  args[_key3 - 1] = arguments[_key3];
291
266
  }
292
-
293
267
  fn.apply(void 0, [evt, change].concat(args));
294
268
  });
295
269
  });
@@ -302,30 +276,26 @@ var createPointerMoveEventListener = function createPointerMoveEventListener(ele
302
276
  removeMoveListener();
303
277
  };
304
278
  };
279
+
305
280
  /**
306
281
  * Creates a mouse wheel event listener
307
282
  * @param {HTMLElement} element
308
283
  * @param {function} fn The event handler function
309
284
  * @returns {function} A function to be called to remove the event listener
310
285
  */
311
-
312
-
313
- exports.createPointerMoveEventListener = createPointerMoveEventListener;
314
-
315
- var createMouseWheelEventListener = function createMouseWheelEventListener(element, fn) {
286
+ var createMouseWheelEventListener = exports.createMouseWheelEventListener = function createMouseWheelEventListener(element, fn) {
316
287
  var handler = function handler(evt) {
317
288
  for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
318
289
  args[_key4 - 1] = arguments[_key4];
319
290
  }
320
-
321
291
  fn.apply(void 0, [evt].concat(args));
322
292
  };
323
-
324
293
  element.addEventListener("wheel", handler);
325
294
  return function () {
326
295
  element.removeEventListener("wheel", handler);
327
296
  };
328
297
  };
298
+
329
299
  /**
330
300
  * Creates a "pinch zoom" listener using touch events
331
301
  * @param {HTMLElement} element
@@ -333,32 +303,23 @@ var createMouseWheelEventListener = function createMouseWheelEventListener(eleme
333
303
  * @param {number} sensitivity The min distance to call the wrapped event handler
334
304
  * @return {function} A function to be called to remove the event listener
335
305
  */
336
-
337
-
338
- exports.createMouseWheelEventListener = createMouseWheelEventListener;
339
-
340
- var createPinchZoomListener = function createPinchZoomListener(element, fn) {
306
+ var createPinchZoomListener = exports.createPinchZoomListener = function createPinchZoomListener(element, fn) {
341
307
  var sensitivity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;
342
308
  var prevDistance;
343
-
344
309
  var startHandler = function startHandler(evt) {
345
310
  if (evt.touches.length < 2) {
346
311
  return;
347
312
  }
348
-
349
313
  element.addEventListener("touchmove", moveHandler);
350
314
  element.addEventListener("touchend", endHandler);
351
315
  prevDistance = getTouchDistance(evt);
352
316
  };
353
-
354
317
  var moveHandler = function moveHandler(evt) {
355
318
  if (evt.touches.length < 2) {
356
319
  cleanUpListeners();
357
320
  return;
358
321
  }
359
-
360
322
  var distance = getTouchDistance(evt);
361
-
362
323
  if (Math.abs(distance - prevDistance) > sensitivity) {
363
324
  fn(evt, {
364
325
  prevDistance: prevDistance,
@@ -367,30 +328,23 @@ var createPinchZoomListener = function createPinchZoomListener(element, fn) {
367
328
  prevDistance = distance;
368
329
  }
369
330
  };
370
-
371
331
  var endHandler = function endHandler() {
372
332
  return element.removeEventListener("touchmove", moveHandler);
373
333
  };
374
-
375
334
  element.addEventListener("touchstart", startHandler);
376
-
377
335
  var cleanUpListeners = function cleanUpListeners() {
378
336
  element.removeEventListener("touchstart", startHandler);
379
337
  };
380
-
381
338
  return cleanUpListeners;
382
339
  };
340
+
383
341
  /**
384
342
  * Creates a general zoom handler that includes mouse wheel and the two finger pinch as well
385
343
  * @param {HTMLElement} element
386
344
  * @param {function} fn The event handler function
387
345
  * @return {function} A function to be called to remove the event listeners
388
346
  */
389
-
390
-
391
- exports.createPinchZoomListener = createPinchZoomListener;
392
-
393
- var createZoomHandler = function createZoomHandler(element, fn) {
347
+ var createZoomHandler = exports.createZoomHandler = function createZoomHandler(element, fn) {
394
348
  var cleanUpMouseWheelListener = createMouseWheelEventListener(element, function (evt) {
395
349
  var eventDelta = evt.deltaY || evt.detail;
396
350
  var direction = eventDelta > 0 ? "out" : "in";
@@ -400,7 +354,7 @@ var createZoomHandler = function createZoomHandler(element, fn) {
400
354
  });
401
355
  var cleanUpPinchZoomListener = createPinchZoomListener(element, function (evt, data) {
402
356
  var distance = data.distance,
403
- prevDistance = data.prevDistance;
357
+ prevDistance = data.prevDistance;
404
358
  var direction = distance / prevDistance < 1 ? "out" : "in";
405
359
  fn(evt, {
406
360
  direction: direction
@@ -410,6 +364,4 @@ var createZoomHandler = function createZoomHandler(element, fn) {
410
364
  cleanUpMouseWheelListener();
411
365
  cleanUpPinchZoomListener();
412
366
  };
413
- };
414
-
415
- exports.createZoomHandler = createZoomHandler;
367
+ };
package/Constants.js CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Numeric = exports.EventTypes = void 0;
7
- var EventTypes = {
7
+ var EventTypes = exports.EventTypes = {
8
8
  Intersection: "Visualization/Intersection",
9
9
  ClickAway: "Visualization/ClickAway",
10
10
  ModelLoaded: "Visualization/ModelLoaded",
@@ -14,10 +14,10 @@ var EventTypes = {
14
14
  LoadStart: "Visualization/LoadStart",
15
15
  LoadFinished: "Visualization/LoadFinished",
16
16
  LoadError: "Visualization/LoadError",
17
- Zoomed: "Visualization/Zoomed"
17
+ Zoomed: "Visualization/Zoomed",
18
+ HoverIn: "Visualization/HoverIn",
19
+ HoverOut: "Visualization/HoverOut"
18
20
  };
19
- exports.EventTypes = EventTypes;
20
- var Numeric = {
21
+ var Numeric = exports.Numeric = {
21
22
  TwoPI: 2 * Math.PI
22
- };
23
- exports.Numeric = Numeric;
23
+ };