@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/drag.js CHANGED
@@ -1,10 +1,4 @@
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
  import usePointer from "./pointer.js";
9
3
  import useRaf from "./raf.js";
10
4
  import inertiaFinalValue from "../utils/math/inertiaFinalValue.js";
@@ -15,13 +9,103 @@ const MODES = {
15
9
  INERTIA: "inertia",
16
10
  STOP: "stop"
17
11
  };
18
- let id = 0;
19
- class Drag extends Service {
20
- constructor(target, options = {}) {
21
- super();
22
- __publicField(this, "id");
23
- __publicField(this, "props", {
24
- target: null,
12
+ let count = 0;
13
+ function createDragService(target, { dampFactor = 0.85, dragTreshold = 10 } = {}) {
14
+ count += 1;
15
+ const id = `drag-${count}`;
16
+ function shouldPreventClick() {
17
+ return Math.abs(props.distance.x) > dragTreshold || Math.abs(props.distance.y) > dragTreshold;
18
+ }
19
+ function start(x, y) {
20
+ props.x = x;
21
+ props.y = y;
22
+ props.origin.x = x;
23
+ props.origin.y = y;
24
+ props.delta.x = 0;
25
+ props.delta.y = 0;
26
+ props.distance.x = 0;
27
+ props.distance.y = 0;
28
+ props.final.x = x;
29
+ props.final.y = y;
30
+ props.mode = MODES.START;
31
+ props.isGrabbing = true;
32
+ trigger(props);
33
+ }
34
+ function drop() {
35
+ props.isGrabbing = false;
36
+ props.mode = MODES.DROP;
37
+ props.hasInertia = true;
38
+ props.final.x = inertiaFinalValue(props.x, props.delta.x, dampFactor);
39
+ props.final.y = inertiaFinalValue(props.y, props.delta.y, dampFactor);
40
+ trigger(props);
41
+ setTimeout(() => {
42
+ const raf = useRaf();
43
+ raf.remove(id);
44
+ raf.add(id, rafHandler);
45
+ }, 0);
46
+ }
47
+ function stop() {
48
+ useRaf().remove(id);
49
+ props.hasInertia = false;
50
+ props.mode = MODES.STOP;
51
+ trigger(props);
52
+ }
53
+ function rafHandler() {
54
+ if (!props.isGrabbing) {
55
+ props.x += props.delta.x;
56
+ props.y += props.delta.y;
57
+ props.distance.x = props.x - props.origin.x;
58
+ props.distance.y = props.y - props.origin.y;
59
+ props.delta.x *= dampFactor;
60
+ props.delta.y *= dampFactor;
61
+ if (props.mode !== MODES.INERTIA) {
62
+ props.mode = MODES.INERTIA;
63
+ }
64
+ trigger(props);
65
+ if (Math.abs(props.delta.x) < 0.1 && Math.abs(props.delta.y) < 0.1) {
66
+ stop();
67
+ }
68
+ }
69
+ }
70
+ function pointerHandler(pointerProps) {
71
+ if (props.isGrabbing) {
72
+ props.x = pointerProps.x;
73
+ props.y = pointerProps.y;
74
+ props.delta.x = pointerProps.delta.x;
75
+ props.delta.y = pointerProps.delta.y;
76
+ props.final.x = pointerProps.x;
77
+ props.final.y = pointerProps.y;
78
+ props.distance.x = props.x - props.origin.x;
79
+ props.distance.y = props.y - props.origin.y;
80
+ if (props.mode !== MODES.DRAG) {
81
+ props.mode = MODES.DRAG;
82
+ }
83
+ trigger(props);
84
+ if (!pointerProps.isDown) {
85
+ drop();
86
+ }
87
+ }
88
+ }
89
+ function handleEvent(event) {
90
+ if (event.type === "dragstart") {
91
+ event.preventDefault();
92
+ return;
93
+ }
94
+ if (event.type === "click") {
95
+ if (shouldPreventClick()) {
96
+ event.stopImmediatePropagation();
97
+ event.stopPropagation();
98
+ event.preventDefault();
99
+ }
100
+ return;
101
+ }
102
+ const x = event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;
103
+ const y = event instanceof MouseEvent ? event.clientY : event.touches[0].clientY;
104
+ start(x, y);
105
+ }
106
+ const { add, remove, has, trigger, props } = useService({
107
+ props: {
108
+ target,
25
109
  mode: void 0,
26
110
  isGrabbing: false,
27
111
  hasInertia: false,
@@ -43,145 +127,38 @@ class Drag extends Service {
43
127
  x: 0,
44
128
  y: 0
45
129
  }
46
- });
47
- __publicField(this, "options", {
48
- dampFactor: 0.85,
49
- dragTreshold: 10
50
- });
51
- id += 1;
52
- this.id = `drag-${id}`;
53
- this.props.target = target;
54
- this.options = { ...this.options, ...options };
55
- this.pointerHandler = this.pointerHandler.bind(this);
56
- this.rafHandler = this.rafHandler.bind(this);
57
- }
58
- init() {
59
- const options = { passive: true };
60
- this.props.target.addEventListener("mousedown", this, options);
61
- this.props.target.addEventListener("touchstart", this, options);
62
- this.props.target.addEventListener("dragstart", this, { capture: true });
63
- this.props.target.addEventListener("click", this, { capture: true });
64
- const pointer = usePointer();
65
- pointer.add(this.id, this.pointerHandler);
66
- return this;
67
- }
68
- kill() {
69
- this.props.target.removeEventListener("mousedown", this);
70
- this.props.target.removeEventListener("touchstart", this);
71
- this.props.target.removeEventListener("dragstart", this);
72
- this.props.target.removeEventListener("click", this);
73
- const pointer = usePointer();
74
- pointer.remove(this.id);
75
- return this;
76
- }
77
- handleEvent(event) {
78
- if (event.type === "dragstart") {
79
- event.preventDefault();
80
- return;
81
- }
82
- if (event.type === "click") {
83
- if (this.__shouldPreventClick) {
84
- event.stopImmediatePropagation();
85
- event.stopPropagation();
86
- event.preventDefault();
87
- }
88
- return;
130
+ },
131
+ init() {
132
+ const options = { passive: true };
133
+ props.target.addEventListener("mousedown", handleEvent, options);
134
+ props.target.addEventListener("touchstart", handleEvent, options);
135
+ props.target.addEventListener("dragstart", handleEvent, { capture: true });
136
+ props.target.addEventListener("click", handleEvent, { capture: true });
137
+ const pointer = usePointer();
138
+ pointer.add(id, pointerHandler);
139
+ },
140
+ kill() {
141
+ props.target.removeEventListener("mousedown", handleEvent);
142
+ props.target.removeEventListener("touchstart", handleEvent);
143
+ props.target.removeEventListener("dragstart", handleEvent);
144
+ props.target.removeEventListener("click", handleEvent);
145
+ const pointer = usePointer();
146
+ pointer.remove(id);
89
147
  }
90
- const x = event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;
91
- const y = event instanceof MouseEvent ? event.clientY : event.touches[0].clientY;
92
- this.start(x, y);
93
- }
94
- start(x, y) {
95
- this.props.x = x;
96
- this.props.y = y;
97
- this.props.origin.x = x;
98
- this.props.origin.y = y;
99
- this.props.delta.x = 0;
100
- this.props.delta.y = 0;
101
- this.props.distance.x = 0;
102
- this.props.distance.y = 0;
103
- this.props.final.x = x;
104
- this.props.final.y = y;
105
- this.props.mode = MODES.START;
106
- this.props.isGrabbing = true;
107
- this.trigger(this.props);
108
- }
109
- drop() {
110
- this.props.isGrabbing = false;
111
- this.props.mode = MODES.DROP;
112
- this.props.hasInertia = true;
113
- this.props.final.x = inertiaFinalValue(this.props.x, this.props.delta.x, this.options.dampFactor);
114
- this.props.final.y = inertiaFinalValue(this.props.y, this.props.delta.y, this.options.dampFactor);
115
- this.trigger(this.props);
116
- setTimeout(() => {
117
- const raf = useRaf();
118
- raf.remove(this.id);
119
- raf.add(this.id, this.rafHandler);
120
- }, 0);
121
- }
122
- stop() {
123
- useRaf().remove(this.id);
124
- this.props.hasInertia = false;
125
- this.props.mode = MODES.STOP;
126
- this.trigger(this.props);
127
- }
128
- rafHandler() {
129
- if (!this.props.isGrabbing) {
130
- this.props.x += this.props.delta.x;
131
- this.props.y += this.props.delta.y;
132
- this.props.distance.x = this.props.x - this.props.origin.x;
133
- this.props.distance.y = this.props.y - this.props.origin.y;
134
- this.props.delta.x *= this.options.dampFactor;
135
- this.props.delta.y *= this.options.dampFactor;
136
- if (this.props.mode !== MODES.INERTIA) {
137
- this.props.mode = MODES.INERTIA;
138
- }
139
- this.trigger(this.props);
140
- if (Math.abs(this.props.delta.x) < 0.1 && Math.abs(this.props.delta.y) < 0.1) {
141
- this.stop();
142
- }
143
- }
144
- }
145
- pointerHandler(props) {
146
- if (this.props.isGrabbing) {
147
- this.props.x = props.x;
148
- this.props.y = props.y;
149
- this.props.delta.x = props.delta.x;
150
- this.props.delta.y = props.delta.y;
151
- this.props.final.x = props.x;
152
- this.props.final.y = props.y;
153
- this.props.distance.x = this.props.x - this.props.origin.x;
154
- this.props.distance.y = this.props.y - this.props.origin.y;
155
- if (this.props.mode !== MODES.DRAG) {
156
- this.props.mode = MODES.DRAG;
157
- }
158
- this.trigger(this.props);
159
- if (!props.isDown) {
160
- this.drop();
161
- }
162
- }
163
- }
164
- updateProps() {
165
- return this.props;
166
- }
167
- get __shouldPreventClick() {
168
- return Math.abs(this.props.distance.x) > this.options.dragTreshold || Math.abs(this.props.distance.y) > this.options.dragTreshold;
169
- }
148
+ });
149
+ return {
150
+ add,
151
+ remove,
152
+ has,
153
+ props: () => props
154
+ };
170
155
  }
171
156
  const instances = /* @__PURE__ */ new WeakMap();
172
157
  function useDrag(target, options) {
173
- let drag = instances.get(target);
174
- if (!drag) {
175
- const instance = new Drag(target, options);
176
- drag = {
177
- add: instance.add.bind(instance),
178
- remove: instance.remove.bind(instance),
179
- has: instance.has.bind(instance),
180
- props: instance.updateProps.bind(instance)
181
- };
182
- instances.set(target, drag);
158
+ if (!instances.has(target)) {
159
+ instances.set(target, createDragService(target, options));
183
160
  }
184
- return drag;
161
+ return instances.get(target);
185
162
  }
186
163
  export {
187
164
  useDrag as default
@@ -28,7 +28,8 @@ __export(services_exports, {
28
28
  usePointer: () => import_pointer.default,
29
29
  useRaf: () => import_raf.default,
30
30
  useResize: () => import_resize.default,
31
- useScroll: () => import_scroll.default
31
+ useScroll: () => import_scroll.default,
32
+ useService: () => import_service.useService
32
33
  });
33
34
  module.exports = __toCommonJS(services_exports);
34
35
  var import_drag = __toESM(require("./drag.cjs"), 1);
@@ -38,4 +39,5 @@ var import_pointer = __toESM(require("./pointer.cjs"), 1);
38
39
  var import_raf = __toESM(require("./raf.cjs"), 1);
39
40
  var import_resize = __toESM(require("./resize.cjs"), 1);
40
41
  var import_scroll = __toESM(require("./scroll.cjs"), 1);
42
+ var import_service = require("./service.cjs");
41
43
  if (module.exports.default) module.exports = module.exports.default;
@@ -5,6 +5,7 @@ export { default as usePointer } from "./pointer.js";
5
5
  export { default as useRaf } from "./raf.js";
6
6
  export { default as useResize } from "./resize.js";
7
7
  export { default as useScroll } from "./scroll.js";
8
+ export { useService } from "./service.js";
8
9
  export type ServiceInterface<T> = {
9
10
  /**
10
11
  * Remove a function from the resize service by its key.
package/services/index.js CHANGED
@@ -5,6 +5,7 @@ import { default as default5 } from "./pointer.js";
5
5
  import { default as default6 } from "./raf.js";
6
6
  import { default as default7 } from "./resize.js";
7
7
  import { default as default8 } from "./scroll.js";
8
+ import { useService } from "./service.js";
8
9
  export {
9
10
  default2 as useDrag,
10
11
  default3 as useKey,
@@ -12,5 +13,6 @@ export {
12
13
  default5 as usePointer,
13
14
  default6 as useRaf,
14
15
  default7 as useResize,
15
- default8 as useScroll
16
+ default8 as useScroll,
17
+ useService
16
18
  };
package/services/key.cjs CHANGED
@@ -4,7 +4,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __defNormalProp = (obj, key2, value) => key2 in obj ? __defProp(obj, key2, { enumerable: true, configurable: true, writable: true, value }) : obj[key2] = value;
8
7
  var __export = (target, all) => {
9
8
  for (var name in all)
10
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -19,10 +18,6 @@ var __copyProps = (to, from, except, desc) => {
19
18
  };
20
19
  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
20
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
- var __publicField = (obj, key2, value) => {
23
- __defNormalProp(obj, typeof key2 !== "symbol" ? key2 + "" : key2, value);
24
- return value;
25
- };
26
21
 
27
22
  // packages/js-toolkit/services/key.js
28
23
  var key_exports = {};
@@ -30,74 +25,64 @@ __export(key_exports, {
30
25
  default: () => useKey
31
26
  });
32
27
  module.exports = __toCommonJS(key_exports);
33
- var import_Service = __toESM(require("./Service.cjs"), 1);
28
+ var import_service = require("./service.cjs");
34
29
  var import_keyCodes = __toESM(require("../utils/keyCodes.cjs"), 1);
35
- var Key = class extends import_Service.default {
36
- constructor() {
37
- super(...arguments);
38
- __publicField(this, "previousEvent");
39
- __publicField(this, "props", {
40
- event: null,
41
- triggered: 0,
42
- isUp: false,
43
- isDown: false,
44
- ENTER: false,
45
- SPACE: false,
46
- TAB: false,
47
- ESC: false,
48
- LEFT: false,
49
- UP: false,
50
- RIGHT: false,
51
- DOWN: false,
52
- direction: "none"
53
- });
54
- }
55
- init() {
56
- document.addEventListener("keydown", this);
57
- document.addEventListener("keyup", this);
58
- }
59
- handleEvent(event) {
60
- this.updateProps(event);
61
- this.trigger(this.props);
62
- }
63
- kill() {
64
- document.removeEventListener("keydown", this);
65
- document.removeEventListener("keyup", this);
66
- }
67
- updateProps(event) {
68
- var _a;
69
- this.props.event = event;
30
+ function getInitialKeyCodes() {
31
+ return Object.fromEntries(Object.keys(import_keyCodes.default).map((key2) => [key2, false]));
32
+ }
33
+ function createKeyService() {
34
+ let previousEvent;
35
+ function updateProps(event) {
36
+ props.event = event;
70
37
  Object.entries(import_keyCodes.default).forEach(([name, code]) => {
71
- this.props[name] = code === event.keyCode;
38
+ props[name] = code === event.keyCode;
72
39
  });
73
- if (!this.previousEvent) {
74
- this.props.triggered = 0;
40
+ if (!previousEvent) {
41
+ props.triggered = 0;
75
42
  }
76
- if (this.props.event.type === "keydown" && ((_a = this.previousEvent) == null ? void 0 : _a.type) === "keydown") {
77
- this.props.triggered += 1;
43
+ if (props.event.type === "keydown" && previousEvent?.type === "keydown") {
44
+ props.triggered += 1;
78
45
  } else {
79
- this.props.triggered = 1;
46
+ props.triggered = 1;
80
47
  }
81
- this.previousEvent = this.props.event;
82
- this.props.direction = this.props.event.type === "keydown" ? "down" : "up";
83
- this.props.isUp = this.props.event.type === "keyup";
84
- this.props.isDown = this.props.event.type === "keydown";
85
- return this.props;
48
+ previousEvent = props.event;
49
+ props.direction = props.event.type === "keydown" ? "down" : "up";
50
+ props.isUp = props.event.type === "keyup";
51
+ props.isDown = props.event.type === "keydown";
52
+ return props;
86
53
  }
87
- };
88
- var instance;
54
+ function onKey(event) {
55
+ trigger(updateProps(event));
56
+ }
57
+ const { add, remove, has, trigger, props } = (0, import_service.useService)({
58
+ props: {
59
+ event: null,
60
+ triggered: 0,
61
+ isUp: false,
62
+ isDown: false,
63
+ direction: "none",
64
+ ...getInitialKeyCodes()
65
+ },
66
+ init() {
67
+ document.addEventListener("keydown", onKey);
68
+ document.addEventListener("keyup", onKey);
69
+ },
70
+ kill() {
71
+ document.removeEventListener("keydown", onKey);
72
+ document.removeEventListener("keyup", onKey);
73
+ }
74
+ });
75
+ return {
76
+ add,
77
+ remove,
78
+ has,
79
+ props: () => props
80
+ };
81
+ }
89
82
  var key;
90
83
  function useKey() {
91
84
  if (!key) {
92
- if (!instance) {
93
- instance = new Key();
94
- }
95
- key = {
96
- add: instance.add.bind(instance),
97
- remove: instance.remove.bind(instance),
98
- has: instance.has.bind(instance),
99
- props: instance.updateProps.bind(instance)
100
- };
85
+ key = createKeyService();
101
86
  }
102
87
  return key;
103
88
  }
package/services/key.d.ts CHANGED
@@ -1,14 +1,6 @@
1
1
  /**
2
2
  * Use the keyboard service.
3
3
  *
4
- * ```js
5
- * import { useKey } from '@studiometa/js-toolkit/services';
6
- * const { add, remove, props } = useKey();
7
- * add(key, (props) => {});
8
- * remove(key);
9
- * props();
10
- * ```
11
- *
12
4
  * @returns {KeyService}
13
5
  */
14
6
  export default function useKey(): KeyService;
package/services/key.js CHANGED
@@ -1,77 +1,61 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key2, value) => key2 in obj ? __defProp(obj, key2, { enumerable: true, configurable: true, writable: true, value }) : obj[key2] = value;
3
- var __publicField = (obj, key2, value) => {
4
- __defNormalProp(obj, typeof key2 !== "symbol" ? key2 + "" : key2, value);
5
- return value;
6
- };
7
- import Service from "./Service.js";
1
+ import { useService } from "./service.js";
8
2
  import keyCodes from "../utils/keyCodes.js";
9
- class Key extends Service {
10
- constructor() {
11
- super(...arguments);
12
- __publicField(this, "previousEvent");
13
- __publicField(this, "props", {
14
- event: null,
15
- triggered: 0,
16
- isUp: false,
17
- isDown: false,
18
- ENTER: false,
19
- SPACE: false,
20
- TAB: false,
21
- ESC: false,
22
- LEFT: false,
23
- UP: false,
24
- RIGHT: false,
25
- DOWN: false,
26
- direction: "none"
27
- });
28
- }
29
- init() {
30
- document.addEventListener("keydown", this);
31
- document.addEventListener("keyup", this);
32
- }
33
- handleEvent(event) {
34
- this.updateProps(event);
35
- this.trigger(this.props);
36
- }
37
- kill() {
38
- document.removeEventListener("keydown", this);
39
- document.removeEventListener("keyup", this);
40
- }
41
- updateProps(event) {
42
- var _a;
43
- this.props.event = event;
3
+ function getInitialKeyCodes() {
4
+ return Object.fromEntries(Object.keys(keyCodes).map((key2) => [key2, false]));
5
+ }
6
+ function createKeyService() {
7
+ let previousEvent;
8
+ function updateProps(event) {
9
+ props.event = event;
44
10
  Object.entries(keyCodes).forEach(([name, code]) => {
45
- this.props[name] = code === event.keyCode;
11
+ props[name] = code === event.keyCode;
46
12
  });
47
- if (!this.previousEvent) {
48
- this.props.triggered = 0;
13
+ if (!previousEvent) {
14
+ props.triggered = 0;
49
15
  }
50
- if (this.props.event.type === "keydown" && ((_a = this.previousEvent) == null ? void 0 : _a.type) === "keydown") {
51
- this.props.triggered += 1;
16
+ if (props.event.type === "keydown" && previousEvent?.type === "keydown") {
17
+ props.triggered += 1;
52
18
  } else {
53
- this.props.triggered = 1;
19
+ props.triggered = 1;
54
20
  }
55
- this.previousEvent = this.props.event;
56
- this.props.direction = this.props.event.type === "keydown" ? "down" : "up";
57
- this.props.isUp = this.props.event.type === "keyup";
58
- this.props.isDown = this.props.event.type === "keydown";
59
- return this.props;
21
+ previousEvent = props.event;
22
+ props.direction = props.event.type === "keydown" ? "down" : "up";
23
+ props.isUp = props.event.type === "keyup";
24
+ props.isDown = props.event.type === "keydown";
25
+ return props;
26
+ }
27
+ function onKey(event) {
28
+ trigger(updateProps(event));
60
29
  }
30
+ const { add, remove, has, trigger, props } = useService({
31
+ props: {
32
+ event: null,
33
+ triggered: 0,
34
+ isUp: false,
35
+ isDown: false,
36
+ direction: "none",
37
+ ...getInitialKeyCodes()
38
+ },
39
+ init() {
40
+ document.addEventListener("keydown", onKey);
41
+ document.addEventListener("keyup", onKey);
42
+ },
43
+ kill() {
44
+ document.removeEventListener("keydown", onKey);
45
+ document.removeEventListener("keyup", onKey);
46
+ }
47
+ });
48
+ return {
49
+ add,
50
+ remove,
51
+ has,
52
+ props: () => props
53
+ };
61
54
  }
62
- let instance;
63
55
  let key;
64
56
  function useKey() {
65
57
  if (!key) {
66
- if (!instance) {
67
- instance = new Key();
68
- }
69
- key = {
70
- add: instance.add.bind(instance),
71
- remove: instance.remove.bind(instance),
72
- has: instance.has.bind(instance),
73
- props: instance.updateProps.bind(instance)
74
- };
58
+ key = createKeyService();
75
59
  }
76
60
  return key;
77
61
  }