@studiometa/js-toolkit 2.2.2 → 2.4.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.
- package/Base/index.cjs +29 -37
- package/Base/index.d.ts +0 -8
- package/Base/index.js +18 -26
- package/Base/managers/EventsManager.cjs +35 -36
- package/Base/managers/EventsManager.js +35 -36
- package/Base/managers/OptionsManager.cjs +19 -13
- package/Base/managers/OptionsManager.js +19 -13
- package/Base/managers/RefsManager.cjs +8 -5
- package/Base/managers/RefsManager.js +8 -5
- package/Base/managers/ResponsiveOptionsManager.cjs +4 -1
- package/Base/managers/ResponsiveOptionsManager.js +4 -1
- package/Base/managers/ServicesManager.cjs +9 -7
- package/Base/managers/ServicesManager.js +9 -7
- package/Base/utils.cjs +22 -4
- package/Base/utils.d.ts +25 -8
- package/Base/utils.js +22 -4
- package/README.md +3 -3
- package/decorators/withBreakpointManager.cjs +15 -5
- package/decorators/withBreakpointManager.js +15 -5
- package/decorators/withBreakpointObserver.cjs +8 -2
- package/decorators/withBreakpointObserver.js +8 -2
- package/decorators/withVue2.cjs +10 -3
- package/decorators/withVue2.js +10 -3
- package/helpers/getDirectChildren.cjs +46 -0
- package/helpers/getDirectChildren.d.ts +24 -0
- package/helpers/getDirectChildren.js +24 -0
- package/helpers/importOnInteraction.cjs +2 -1
- package/helpers/importOnInteraction.js +2 -1
- package/helpers/importWhenVisible.cjs +2 -1
- package/helpers/importWhenVisible.js +2 -1
- package/helpers/index.cjs +2 -0
- package/helpers/index.d.ts +1 -0
- package/helpers/index.js +1 -0
- package/helpers/utils.cjs +3 -2
- package/helpers/utils.js +3 -2
- package/package.json +4 -1
- package/services/drag.cjs +126 -148
- package/services/drag.d.ts +10 -10
- package/services/drag.js +125 -148
- package/services/index.cjs +3 -1
- package/services/index.d.ts +1 -0
- package/services/index.js +3 -1
- package/services/key.cjs +48 -63
- package/services/key.d.ts +0 -8
- package/services/key.js +47 -63
- package/services/load.cjs +24 -40
- package/services/load.d.ts +0 -8
- package/services/load.js +23 -37
- package/services/pointer.cjs +73 -103
- package/services/pointer.d.ts +1 -9
- package/services/pointer.js +72 -100
- package/services/raf.cjs +38 -58
- package/services/raf.d.ts +0 -8
- package/services/raf.js +37 -55
- package/services/resize.cjs +59 -68
- package/services/resize.d.ts +0 -7
- package/services/resize.js +58 -68
- package/services/scroll.cjs +49 -71
- package/services/scroll.js +48 -71
- package/services/service.cjs +68 -0
- package/services/service.d.ts +18 -0
- package/services/service.js +46 -0
- package/utils/css/animate.cjs +31 -96
- package/utils/css/animate.d.ts +4 -16
- package/utils/css/animate.js +28 -93
- package/utils/css/classes.cjs +2 -1
- package/utils/css/classes.js +2 -1
- package/utils/css/styles.cjs +2 -5
- package/utils/css/styles.js +1 -1
- package/utils/css/transform.cjs +13 -16
- package/utils/css/transform.js +1 -1
- package/utils/css/transition.cjs +5 -3
- package/utils/css/transition.js +5 -3
- package/utils/focusTrap.cjs +2 -1
- package/utils/focusTrap.js +2 -1
- package/utils/{isFunction.cjs → has.cjs} +7 -7
- package/utils/has.d.ts +6 -0
- package/utils/has.js +6 -0
- package/utils/history.cjs +5 -7
- package/utils/history.js +4 -3
- package/utils/index.cjs +6 -5
- package/utils/index.d.ts +4 -2
- package/utils/index.js +6 -5
- package/utils/{object/isObject.cjs → is.cjs} +20 -8
- package/utils/is.d.ts +8 -0
- package/utils/is.js +18 -0
- package/utils/math/inertiaFinalValue.cjs +5 -3
- package/utils/math/inertiaFinalValue.js +2 -3
- package/utils/nextFrame.cjs +5 -3
- package/utils/nextFrame.js +5 -3
- package/utils/nextMicrotask.cjs +2 -1
- package/utils/nextMicrotask.js +2 -1
- package/utils/nextTick.cjs +2 -1
- package/utils/nextTick.js +2 -1
- package/utils/{isDefined.cjs → noop.cjs} +10 -7
- package/utils/noop.d.ts +12 -0
- package/utils/noop.js +9 -0
- package/utils/object/autoBind.cjs +3 -2
- package/utils/object/autoBind.js +3 -2
- package/utils/object/getAllProperties.cjs +2 -1
- package/utils/object/getAllProperties.js +2 -1
- package/utils/object/index.cjs +1 -3
- package/utils/object/index.d.ts +0 -1
- package/utils/object/index.js +1 -3
- package/utils/tween.cjs +114 -0
- package/utils/tween.d.ts +25 -0
- package/utils/tween.js +89 -0
- package/services/Service.cjs +0 -76
- package/services/Service.d.ts +0 -76
- package/services/Service.js +0 -55
- package/utils/isDefined.d.ts +0 -7
- package/utils/isDefined.js +0 -6
- package/utils/isFunction.d.ts +0 -7
- package/utils/isFunction.js +0 -6
- package/utils/object/isObject.d.ts +0 -7
- package/utils/object/isObject.js +0 -6
package/services/drag.d.ts
CHANGED
|
@@ -20,52 +20,52 @@ export type PointerServiceProps = import('./pointer.js').PointerServiceProps;
|
|
|
20
20
|
export type DragLifecycle = 'start' | 'drag' | 'drop' | 'inertia' | 'stop';
|
|
21
21
|
export type DragServiceProps = {
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
23
|
+
* The current mode of the dragging logic.
|
|
24
24
|
*/
|
|
25
25
|
mode: DragLifecycle;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* The target element of the drag.
|
|
28
28
|
*/
|
|
29
29
|
target: HTMLElement;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Whether the user is currently grabbing the targeted element or not.
|
|
32
32
|
*/
|
|
33
33
|
isGrabbing: boolean;
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
35
|
+
* Whether the drag currently has inertia or not.
|
|
36
36
|
*/
|
|
37
37
|
hasInertia: boolean;
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
39
|
+
* The current horizontal position in the viewport.
|
|
40
40
|
*/
|
|
41
41
|
x: number;
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
43
|
+
* The current vertical position in the viewport.
|
|
44
44
|
*/
|
|
45
45
|
y: number;
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
47
|
+
* The delta between the current position and the last.
|
|
48
48
|
*/
|
|
49
49
|
delta: {
|
|
50
50
|
x: number;
|
|
51
51
|
y: number;
|
|
52
52
|
};
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
54
|
+
* The initial position where the dragging started.
|
|
55
55
|
*/
|
|
56
56
|
origin: {
|
|
57
57
|
x: number;
|
|
58
58
|
y: number;
|
|
59
59
|
};
|
|
60
60
|
/**
|
|
61
|
-
*
|
|
61
|
+
* The distance from the current position to the origin.
|
|
62
62
|
*/
|
|
63
63
|
distance: {
|
|
64
64
|
x: number;
|
|
65
65
|
y: number;
|
|
66
66
|
};
|
|
67
67
|
/**
|
|
68
|
-
*
|
|
68
|
+
* The final position that will be reached at the end of the inertia.
|
|
69
69
|
*/
|
|
70
70
|
final: {
|
|
71
71
|
x: number;
|
package/services/drag.js
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
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
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
174
|
-
|
|
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
|
|
161
|
+
return instances.get(target);
|
|
185
162
|
}
|
|
186
163
|
export {
|
|
187
164
|
useDrag as default
|
package/services/index.cjs
CHANGED
|
@@ -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;
|
package/services/index.d.ts
CHANGED
|
@@ -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
|
|
28
|
+
var import_service = require("./service.cjs");
|
|
34
29
|
var import_keyCodes = __toESM(require("../utils/keyCodes.cjs"), 1);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
38
|
+
props[name] = code === event.keyCode;
|
|
72
39
|
});
|
|
73
|
-
if (!
|
|
74
|
-
|
|
40
|
+
if (!previousEvent) {
|
|
41
|
+
props.triggered = 0;
|
|
75
42
|
}
|
|
76
|
-
if (
|
|
77
|
-
|
|
43
|
+
if (props.event.type === "keydown" && (previousEvent == null ? void 0 : previousEvent.type) === "keydown") {
|
|
44
|
+
props.triggered += 1;
|
|
78
45
|
} else {
|
|
79
|
-
|
|
46
|
+
props.triggered = 1;
|
|
80
47
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
11
|
+
props[name] = code === event.keyCode;
|
|
46
12
|
});
|
|
47
|
-
if (!
|
|
48
|
-
|
|
13
|
+
if (!previousEvent) {
|
|
14
|
+
props.triggered = 0;
|
|
49
15
|
}
|
|
50
|
-
if (
|
|
51
|
-
|
|
16
|
+
if (props.event.type === "keydown" && (previousEvent == null ? void 0 : previousEvent.type) === "keydown") {
|
|
17
|
+
props.triggered += 1;
|
|
52
18
|
} else {
|
|
53
|
-
|
|
19
|
+
props.triggered = 1;
|
|
54
20
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return
|
|
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
|
-
|
|
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
|
}
|