@studiometa/js-toolkit 2.2.1 → 2.3.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 (131) hide show
  1. package/Base/index.cjs +60 -69
  2. package/Base/index.d.ts +0 -8
  3. package/Base/index.js +67 -82
  4. package/Base/managers/AbstractManager.cjs +5 -10
  5. package/Base/managers/AbstractManager.js +5 -11
  6. package/Base/managers/ChildrenManager.cjs +2 -11
  7. package/Base/managers/ChildrenManager.js +2 -12
  8. package/Base/managers/EventsManager.cjs +61 -67
  9. package/Base/managers/EventsManager.js +61 -68
  10. package/Base/managers/OptionsManager.cjs +26 -27
  11. package/Base/managers/OptionsManager.js +26 -28
  12. package/Base/managers/RefsManager.cjs +9 -7
  13. package/Base/managers/RefsManager.js +9 -7
  14. package/Base/managers/ResponsiveOptionsManager.cjs +4 -1
  15. package/Base/managers/ResponsiveOptionsManager.js +4 -1
  16. package/Base/managers/ServicesManager.cjs +10 -16
  17. package/Base/managers/ServicesManager.js +10 -17
  18. package/Base/utils.cjs +22 -4
  19. package/Base/utils.d.ts +25 -8
  20. package/Base/utils.js +22 -4
  21. package/decorators/withBreakpointManager.cjs +15 -5
  22. package/decorators/withBreakpointManager.js +15 -5
  23. package/decorators/withBreakpointObserver.cjs +19 -18
  24. package/decorators/withBreakpointObserver.js +19 -19
  25. package/decorators/withDrag.cjs +6 -11
  26. package/decorators/withDrag.js +6 -12
  27. package/decorators/withExtraConfig.cjs +3 -8
  28. package/decorators/withExtraConfig.js +3 -9
  29. package/decorators/withFreezedOptions.cjs +1 -9
  30. package/decorators/withFreezedOptions.js +1 -10
  31. package/decorators/withIntersectionObserver.cjs +11 -16
  32. package/decorators/withIntersectionObserver.js +11 -17
  33. package/decorators/withMountWhenInView.cjs +12 -17
  34. package/decorators/withMountWhenInView.js +12 -18
  35. package/decorators/withScrolledInView.cjs +30 -35
  36. package/decorators/withScrolledInView.js +30 -36
  37. package/decorators/withVue2.cjs +20 -18
  38. package/decorators/withVue2.js +20 -19
  39. package/helpers/getInstanceFromElement.cjs +1 -2
  40. package/helpers/getInstanceFromElement.js +1 -2
  41. package/helpers/importOnInteraction.cjs +3 -2
  42. package/helpers/importOnInteraction.js +3 -2
  43. package/helpers/importWhenIdle.cjs +2 -3
  44. package/helpers/importWhenIdle.js +2 -3
  45. package/helpers/importWhenVisible.cjs +3 -2
  46. package/helpers/importWhenVisible.js +3 -2
  47. package/helpers/utils.cjs +3 -2
  48. package/helpers/utils.js +3 -2
  49. package/package.json +4 -1
  50. package/services/drag.cjs +126 -148
  51. package/services/drag.d.ts +10 -10
  52. package/services/drag.js +125 -148
  53. package/services/index.cjs +3 -1
  54. package/services/index.d.ts +1 -0
  55. package/services/index.js +3 -1
  56. package/services/key.cjs +48 -63
  57. package/services/key.d.ts +0 -8
  58. package/services/key.js +47 -63
  59. package/services/load.cjs +24 -40
  60. package/services/load.d.ts +0 -8
  61. package/services/load.js +23 -37
  62. package/services/pointer.cjs +72 -103
  63. package/services/pointer.d.ts +1 -9
  64. package/services/pointer.js +71 -100
  65. package/services/raf.cjs +38 -58
  66. package/services/raf.d.ts +0 -8
  67. package/services/raf.js +37 -55
  68. package/services/resize.cjs +59 -68
  69. package/services/resize.d.ts +0 -7
  70. package/services/resize.js +58 -68
  71. package/services/scroll.cjs +49 -71
  72. package/services/scroll.js +48 -71
  73. package/services/service.cjs +68 -0
  74. package/services/service.d.ts +18 -0
  75. package/services/service.js +46 -0
  76. package/utils/css/animate.cjs +33 -102
  77. package/utils/css/animate.d.ts +4 -13
  78. package/utils/css/animate.js +31 -100
  79. package/utils/css/classes.cjs +2 -1
  80. package/utils/css/classes.js +2 -1
  81. package/utils/css/matrix.cjs +1 -2
  82. package/utils/css/matrix.js +1 -2
  83. package/utils/css/styles.cjs +2 -5
  84. package/utils/css/styles.js +1 -1
  85. package/utils/css/transform.cjs +14 -18
  86. package/utils/css/transform.js +2 -3
  87. package/utils/css/transition.cjs +7 -10
  88. package/utils/css/transition.js +7 -11
  89. package/utils/focusTrap.cjs +2 -1
  90. package/utils/focusTrap.js +2 -1
  91. package/utils/{isFunction.cjs → has.cjs} +7 -7
  92. package/utils/has.d.ts +6 -0
  93. package/utils/has.js +6 -0
  94. package/utils/history.cjs +5 -7
  95. package/utils/history.js +4 -3
  96. package/utils/index.cjs +6 -5
  97. package/utils/index.d.ts +4 -2
  98. package/utils/index.js +6 -5
  99. package/utils/{object/isObject.cjs → is.cjs} +20 -8
  100. package/utils/is.d.ts +8 -0
  101. package/utils/is.js +18 -0
  102. package/utils/math/inertiaFinalValue.cjs +5 -3
  103. package/utils/math/inertiaFinalValue.js +2 -3
  104. package/utils/nextFrame.cjs +5 -3
  105. package/utils/nextFrame.js +5 -3
  106. package/utils/nextMicrotask.cjs +2 -1
  107. package/utils/nextMicrotask.js +2 -1
  108. package/utils/nextTick.cjs +2 -1
  109. package/utils/nextTick.js +2 -1
  110. package/utils/{isDefined.cjs → noop.cjs} +10 -7
  111. package/utils/noop.d.ts +12 -0
  112. package/utils/noop.js +9 -0
  113. package/utils/object/autoBind.cjs +3 -2
  114. package/utils/object/autoBind.js +3 -2
  115. package/utils/object/getAllProperties.cjs +2 -1
  116. package/utils/object/getAllProperties.js +2 -1
  117. package/utils/object/index.cjs +1 -3
  118. package/utils/object/index.d.ts +0 -1
  119. package/utils/object/index.js +1 -3
  120. package/utils/tween.cjs +113 -0
  121. package/utils/tween.d.ts +25 -0
  122. package/utils/tween.js +88 -0
  123. package/services/Service.cjs +0 -76
  124. package/services/Service.d.ts +0 -76
  125. package/services/Service.js +0 -55
  126. package/utils/isDefined.d.ts +0 -7
  127. package/utils/isDefined.js +0 -6
  128. package/utils/isFunction.d.ts +0 -7
  129. package/utils/isFunction.js +0 -6
  130. package/utils/object/isObject.d.ts +0 -7
  131. package/utils/object/isObject.js +0 -6
package/services/load.cjs CHANGED
@@ -1,10 +1,7 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
5
  var __export = (target, all) => {
9
6
  for (var name in all)
10
7
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -17,12 +14,7 @@ var __copyProps = (to, from, except, desc) => {
17
14
  }
18
15
  return to;
19
16
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
21
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
- var __publicField = (obj, key, value) => {
23
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
24
- return value;
25
- };
26
18
 
27
19
  // packages/js-toolkit/services/load.js
28
20
  var load_exports = {};
@@ -30,42 +22,34 @@ __export(load_exports, {
30
22
  default: () => useLoad
31
23
  });
32
24
  module.exports = __toCommonJS(load_exports);
33
- var import_Service = __toESM(require("./Service.cjs"), 1);
34
- var Load = class extends import_Service.default {
35
- constructor() {
36
- super(...arguments);
37
- __publicField(this, "props", {
38
- time: window.performance.now()
39
- });
40
- }
41
- init() {
42
- window.addEventListener("load", this);
43
- }
44
- handleEvent() {
45
- this.updateProps();
46
- this.trigger(this.props);
47
- }
48
- kill() {
49
- window.removeEventListener("load", this);
50
- }
51
- updateProps() {
52
- this.props.time = window.performance.now();
53
- return this.props;
25
+ var import_service = require("./service.cjs");
26
+ function createLoadService() {
27
+ function onLoad() {
28
+ props.time = window.performance.now();
29
+ trigger(props);
54
30
  }
55
- };
56
- var instance;
31
+ const { add, remove, has, props, trigger } = (0, import_service.useService)({
32
+ props: {
33
+ time: performance.now()
34
+ },
35
+ init() {
36
+ window.addEventListener("load", onLoad);
37
+ },
38
+ kill() {
39
+ window.removeEventListener("load", onLoad);
40
+ }
41
+ });
42
+ return {
43
+ add,
44
+ remove,
45
+ has,
46
+ props: () => props
47
+ };
48
+ }
57
49
  var load;
58
50
  function useLoad() {
59
51
  if (!load) {
60
- if (!instance) {
61
- instance = new Load();
62
- }
63
- load = {
64
- add: instance.add.bind(instance),
65
- remove: instance.remove.bind(instance),
66
- has: instance.has.bind(instance),
67
- props: instance.updateProps.bind(instance)
68
- };
52
+ load = createLoadService();
69
53
  }
70
54
  return load;
71
55
  }
@@ -1,14 +1,6 @@
1
1
  /**
2
2
  * Use the load service.
3
3
  *
4
- * ```js
5
- * import { useLoad } from '@studiometa/js/services';
6
- * const { add, remove, props } = useRag();
7
- * add(id, (props) => {});
8
- * remove(id);
9
- * props();
10
- * ```
11
- *
12
4
  * @returns {LoadService}
13
5
  */
14
6
  export default function useLoad(): LoadService;
package/services/load.js CHANGED
@@ -1,45 +1,31 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => {
4
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
- return value;
6
- };
7
- import Service from "./Service.js";
8
- class Load extends Service {
9
- constructor() {
10
- super(...arguments);
11
- __publicField(this, "props", {
12
- time: window.performance.now()
13
- });
14
- }
15
- init() {
16
- window.addEventListener("load", this);
17
- }
18
- handleEvent() {
19
- this.updateProps();
20
- this.trigger(this.props);
21
- }
22
- kill() {
23
- window.removeEventListener("load", this);
24
- }
25
- updateProps() {
26
- this.props.time = window.performance.now();
27
- return this.props;
1
+ import { useService } from "./service.js";
2
+ function createLoadService() {
3
+ function onLoad() {
4
+ props.time = window.performance.now();
5
+ trigger(props);
28
6
  }
7
+ const { add, remove, has, props, trigger } = useService({
8
+ props: {
9
+ time: performance.now()
10
+ },
11
+ init() {
12
+ window.addEventListener("load", onLoad);
13
+ },
14
+ kill() {
15
+ window.removeEventListener("load", onLoad);
16
+ }
17
+ });
18
+ return {
19
+ add,
20
+ remove,
21
+ has,
22
+ props: () => props
23
+ };
29
24
  }
30
- let instance;
31
25
  let load;
32
26
  function useLoad() {
33
27
  if (!load) {
34
- if (!instance) {
35
- instance = new Load();
36
- }
37
- load = {
38
- add: instance.add.bind(instance),
39
- remove: instance.remove.bind(instance),
40
- has: instance.has.bind(instance),
41
- props: instance.updateProps.bind(instance)
42
- };
28
+ load = createLoadService();
43
29
  }
44
30
  return load;
45
31
  }
@@ -1,10 +1,7 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
5
  var __export = (target, all) => {
9
6
  for (var name in all)
10
7
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -17,12 +14,7 @@ var __copyProps = (to, from, except, desc) => {
17
14
  }
18
15
  return to;
19
16
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
21
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
- var __publicField = (obj, key, value) => {
23
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
24
- return value;
25
- };
26
18
 
27
19
  // packages/js-toolkit/services/pointer.js
28
20
  var pointer_exports = {};
@@ -30,14 +22,57 @@ __export(pointer_exports, {
30
22
  default: () => usePointer
31
23
  });
32
24
  module.exports = __toCommonJS(pointer_exports);
33
- var import_Service = __toESM(require("./Service.cjs"), 1);
25
+ var import_service = require("./service.cjs");
34
26
  function isTouchEvent(event) {
35
27
  return typeof TouchEvent !== "undefined" && event instanceof TouchEvent;
36
28
  }
37
- var Pointer = class extends import_Service.default {
38
- constructor() {
39
- super(...arguments);
40
- __publicField(this, "props", {
29
+ var events = ["mousemove", "touchmove", "mousedown", "touchstart", "mouseup", "touchend"];
30
+ function createPointerService() {
31
+ function updateProps(event) {
32
+ props.event = event;
33
+ const yLast = props.y;
34
+ const xLast = props.x;
35
+ const y = isTouchEvent(event) ? event.touches[0]?.clientY : event.clientY;
36
+ if (y !== props.y) {
37
+ props.y = y;
38
+ }
39
+ const x = isTouchEvent(event) ? event.touches[0]?.clientX : event.clientX;
40
+ if (x !== props.x) {
41
+ props.x = x;
42
+ }
43
+ props.changed.x = props.x !== xLast;
44
+ props.changed.y = props.y !== yLast;
45
+ props.last.x = xLast;
46
+ props.last.y = yLast;
47
+ props.delta.x = props.x - xLast;
48
+ props.delta.y = props.y - yLast;
49
+ props.max.x = window.innerWidth;
50
+ props.max.y = window.innerHeight;
51
+ props.progress.x = props.x / props.max.x;
52
+ props.progress.y = props.y / props.max.y;
53
+ return props;
54
+ }
55
+ function handleEvent(event) {
56
+ switch (event.type) {
57
+ case "mouseenter":
58
+ case "mousemove":
59
+ case "touchmove":
60
+ trigger(updateProps(event));
61
+ break;
62
+ case "mousedown":
63
+ case "touchstart":
64
+ props.isDown = true;
65
+ trigger(props);
66
+ break;
67
+ case "mouseup":
68
+ case "touchend":
69
+ props.isDown = false;
70
+ trigger(props);
71
+ break;
72
+ }
73
+ }
74
+ const { add, remove, has, trigger, props } = (0, import_service.useService)({
75
+ props: {
41
76
  event: null,
42
77
  isDown: false,
43
78
  x: window.innerWidth / 2,
@@ -62,100 +97,34 @@ var Pointer = class extends import_Service.default {
62
97
  x: window.innerWidth,
63
98
  y: window.innerHeight
64
99
  }
65
- });
66
- __publicField(this, "hasRaf", false);
67
- }
68
- init() {
69
- document.documentElement.addEventListener("mouseenter", this, {
70
- once: true,
71
- capture: true
72
- });
73
- const options = { passive: true, capture: true };
74
- document.addEventListener("mousemove", this, options);
75
- document.addEventListener("touchmove", this, options);
76
- document.addEventListener("mousedown", this, options);
77
- document.addEventListener("touchstart", this, options);
78
- document.addEventListener("mouseup", this, options);
79
- document.addEventListener("touchend", this, options);
80
- return this;
81
- }
82
- handleEvent(event) {
83
- switch (event.type) {
84
- case "mouseenter":
85
- case "mousemove":
86
- case "touchmove":
87
- this.handler(event);
88
- break;
89
- case "mousedown":
90
- case "touchstart":
91
- this.downHandler();
92
- break;
93
- case "mouseup":
94
- case "touchend":
95
- this.upHandler();
96
- break;
97
- }
98
- }
99
- kill() {
100
- document.removeEventListener("mousemove", this);
101
- document.removeEventListener("touchmove", this);
102
- document.removeEventListener("mousedown", this);
103
- document.removeEventListener("touchstart", this);
104
- document.removeEventListener("mouseup", this);
105
- document.removeEventListener("touchend", this);
106
- return this;
107
- }
108
- handler(event) {
109
- this.updateProps(event);
110
- this.trigger(this.props);
111
- }
112
- downHandler() {
113
- this.props.isDown = true;
114
- this.trigger(this.props);
115
- }
116
- upHandler() {
117
- this.props.isDown = false;
118
- this.trigger(this.props);
119
- }
120
- updateProps(event) {
121
- var _a, _b;
122
- this.props.event = event;
123
- const yLast = this.props.y;
124
- const xLast = this.props.x;
125
- const y = isTouchEvent(event) ? (_a = event.touches[0]) == null ? void 0 : _a.clientY : event.clientY;
126
- if (y !== this.props.y) {
127
- this.props.y = y;
100
+ },
101
+ init() {
102
+ document.documentElement.addEventListener("mouseenter", handleEvent, {
103
+ once: true,
104
+ capture: true
105
+ });
106
+ const options = { passive: true, capture: true };
107
+ events.forEach((event) => {
108
+ document.addEventListener(event, handleEvent, options);
109
+ });
110
+ },
111
+ kill() {
112
+ events.forEach((event) => {
113
+ document.removeEventListener(event, handleEvent);
114
+ });
128
115
  }
129
- const x = isTouchEvent(event) ? (_b = event.touches[0]) == null ? void 0 : _b.clientX : event.clientX;
130
- if (x !== this.props.x) {
131
- this.props.x = x;
132
- }
133
- this.props.changed.x = this.props.x !== xLast;
134
- this.props.changed.y = this.props.y !== yLast;
135
- this.props.last.x = xLast;
136
- this.props.last.y = yLast;
137
- this.props.delta.x = this.props.x - xLast;
138
- this.props.delta.y = this.props.y - yLast;
139
- this.props.max.x = window.innerWidth;
140
- this.props.max.y = window.innerHeight;
141
- this.props.progress.x = this.props.x / this.props.max.x;
142
- this.props.progress.y = this.props.y / this.props.max.y;
143
- return this.props;
144
- }
145
- };
146
- var instance;
116
+ });
117
+ return {
118
+ add,
119
+ remove,
120
+ has,
121
+ props: () => props
122
+ };
123
+ }
147
124
  var pointer;
148
125
  function usePointer() {
149
126
  if (!pointer) {
150
- if (!instance) {
151
- instance = new Pointer();
152
- }
153
- pointer = {
154
- add: instance.add.bind(instance),
155
- remove: instance.remove.bind(instance),
156
- has: instance.has.bind(instance),
157
- props: instance.updateProps.bind(instance)
158
- };
127
+ pointer = createPointerService();
159
128
  }
160
129
  return pointer;
161
130
  }
@@ -1,13 +1,5 @@
1
1
  /**
2
- * Use the pointer.
3
- *
4
- * ```js
5
- * import usePointer from '@studiometa/js-toolkit/services';
6
- * const { add, remove, props } = usePointer();
7
- * add('id', () => {});
8
- * remove('id');
9
- * props();
10
- * ```
2
+ * Use the pointer service.
11
3
  *
12
4
  * @todo Add element as parameter to get the pointer position relatively from.
13
5
  * @returns {PointerService}
@@ -1,17 +1,54 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => {
4
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
- return value;
6
- };
7
- import Service from "./Service.js";
1
+ import { useService } from "./service.js";
8
2
  function isTouchEvent(event) {
9
3
  return typeof TouchEvent !== "undefined" && event instanceof TouchEvent;
10
4
  }
11
- class Pointer extends Service {
12
- constructor() {
13
- super(...arguments);
14
- __publicField(this, "props", {
5
+ const events = ["mousemove", "touchmove", "mousedown", "touchstart", "mouseup", "touchend"];
6
+ function createPointerService() {
7
+ function updateProps(event) {
8
+ props.event = event;
9
+ const yLast = props.y;
10
+ const xLast = props.x;
11
+ const y = isTouchEvent(event) ? event.touches[0]?.clientY : event.clientY;
12
+ if (y !== props.y) {
13
+ props.y = y;
14
+ }
15
+ const x = isTouchEvent(event) ? event.touches[0]?.clientX : event.clientX;
16
+ if (x !== props.x) {
17
+ props.x = x;
18
+ }
19
+ props.changed.x = props.x !== xLast;
20
+ props.changed.y = props.y !== yLast;
21
+ props.last.x = xLast;
22
+ props.last.y = yLast;
23
+ props.delta.x = props.x - xLast;
24
+ props.delta.y = props.y - yLast;
25
+ props.max.x = window.innerWidth;
26
+ props.max.y = window.innerHeight;
27
+ props.progress.x = props.x / props.max.x;
28
+ props.progress.y = props.y / props.max.y;
29
+ return props;
30
+ }
31
+ function handleEvent(event) {
32
+ switch (event.type) {
33
+ case "mouseenter":
34
+ case "mousemove":
35
+ case "touchmove":
36
+ trigger(updateProps(event));
37
+ break;
38
+ case "mousedown":
39
+ case "touchstart":
40
+ props.isDown = true;
41
+ trigger(props);
42
+ break;
43
+ case "mouseup":
44
+ case "touchend":
45
+ props.isDown = false;
46
+ trigger(props);
47
+ break;
48
+ }
49
+ }
50
+ const { add, remove, has, trigger, props } = useService({
51
+ props: {
15
52
  event: null,
16
53
  isDown: false,
17
54
  x: window.innerWidth / 2,
@@ -36,100 +73,34 @@ class Pointer extends Service {
36
73
  x: window.innerWidth,
37
74
  y: window.innerHeight
38
75
  }
39
- });
40
- __publicField(this, "hasRaf", false);
41
- }
42
- init() {
43
- document.documentElement.addEventListener("mouseenter", this, {
44
- once: true,
45
- capture: true
46
- });
47
- const options = { passive: true, capture: true };
48
- document.addEventListener("mousemove", this, options);
49
- document.addEventListener("touchmove", this, options);
50
- document.addEventListener("mousedown", this, options);
51
- document.addEventListener("touchstart", this, options);
52
- document.addEventListener("mouseup", this, options);
53
- document.addEventListener("touchend", this, options);
54
- return this;
55
- }
56
- handleEvent(event) {
57
- switch (event.type) {
58
- case "mouseenter":
59
- case "mousemove":
60
- case "touchmove":
61
- this.handler(event);
62
- break;
63
- case "mousedown":
64
- case "touchstart":
65
- this.downHandler();
66
- break;
67
- case "mouseup":
68
- case "touchend":
69
- this.upHandler();
70
- break;
76
+ },
77
+ init() {
78
+ document.documentElement.addEventListener("mouseenter", handleEvent, {
79
+ once: true,
80
+ capture: true
81
+ });
82
+ const options = { passive: true, capture: true };
83
+ events.forEach((event) => {
84
+ document.addEventListener(event, handleEvent, options);
85
+ });
86
+ },
87
+ kill() {
88
+ events.forEach((event) => {
89
+ document.removeEventListener(event, handleEvent);
90
+ });
71
91
  }
72
- }
73
- kill() {
74
- document.removeEventListener("mousemove", this);
75
- document.removeEventListener("touchmove", this);
76
- document.removeEventListener("mousedown", this);
77
- document.removeEventListener("touchstart", this);
78
- document.removeEventListener("mouseup", this);
79
- document.removeEventListener("touchend", this);
80
- return this;
81
- }
82
- handler(event) {
83
- this.updateProps(event);
84
- this.trigger(this.props);
85
- }
86
- downHandler() {
87
- this.props.isDown = true;
88
- this.trigger(this.props);
89
- }
90
- upHandler() {
91
- this.props.isDown = false;
92
- this.trigger(this.props);
93
- }
94
- updateProps(event) {
95
- var _a, _b;
96
- this.props.event = event;
97
- const yLast = this.props.y;
98
- const xLast = this.props.x;
99
- const y = isTouchEvent(event) ? (_a = event.touches[0]) == null ? void 0 : _a.clientY : event.clientY;
100
- if (y !== this.props.y) {
101
- this.props.y = y;
102
- }
103
- const x = isTouchEvent(event) ? (_b = event.touches[0]) == null ? void 0 : _b.clientX : event.clientX;
104
- if (x !== this.props.x) {
105
- this.props.x = x;
106
- }
107
- this.props.changed.x = this.props.x !== xLast;
108
- this.props.changed.y = this.props.y !== yLast;
109
- this.props.last.x = xLast;
110
- this.props.last.y = yLast;
111
- this.props.delta.x = this.props.x - xLast;
112
- this.props.delta.y = this.props.y - yLast;
113
- this.props.max.x = window.innerWidth;
114
- this.props.max.y = window.innerHeight;
115
- this.props.progress.x = this.props.x / this.props.max.x;
116
- this.props.progress.y = this.props.y / this.props.max.y;
117
- return this.props;
118
- }
92
+ });
93
+ return {
94
+ add,
95
+ remove,
96
+ has,
97
+ props: () => props
98
+ };
119
99
  }
120
- let instance;
121
100
  let pointer;
122
101
  function usePointer() {
123
102
  if (!pointer) {
124
- if (!instance) {
125
- instance = new Pointer();
126
- }
127
- pointer = {
128
- add: instance.add.bind(instance),
129
- remove: instance.remove.bind(instance),
130
- has: instance.has.bind(instance),
131
- props: instance.updateProps.bind(instance)
132
- };
103
+ pointer = createPointerService();
133
104
  }
134
105
  return pointer;
135
106
  }