@solid-primitives/keyboard 1.0.2 → 1.0.4
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/dist/index.cjs +35 -59
- package/dist/index.js +9 -12
- package/dist/server.cjs +38 -40
- package/dist/server.js +33 -14
- package/package.json +39 -32
package/dist/index.cjs
CHANGED
|
@@ -1,73 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var eventListener = require('@solid-primitives/event-listener');
|
|
6
|
+
var rootless = require('@solid-primitives/rootless');
|
|
7
|
+
var utils = require('@solid-primitives/utils');
|
|
8
|
+
var solidJs = require('solid-js');
|
|
19
9
|
|
|
20
10
|
// src/index.ts
|
|
21
|
-
var src_exports = {};
|
|
22
|
-
__export(src_exports, {
|
|
23
|
-
createKeyHold: () => createKeyHold,
|
|
24
|
-
createShortcut: () => createShortcut,
|
|
25
|
-
useCurrentlyHeldKey: () => useCurrentlyHeldKey,
|
|
26
|
-
useKeyDownList: () => useKeyDownList,
|
|
27
|
-
useKeyDownSequence: () => useKeyDownSequence
|
|
28
|
-
});
|
|
29
|
-
module.exports = __toCommonJS(src_exports);
|
|
30
|
-
var import_event_listener = require("@solid-primitives/event-listener");
|
|
31
|
-
var import_rootless = require("@solid-primitives/rootless");
|
|
32
|
-
var import_utils = require("@solid-primitives/utils");
|
|
33
|
-
var import_solid_js = require("solid-js");
|
|
34
11
|
function equalsKeyHoldSequence(sequence, model) {
|
|
35
12
|
for (let i = sequence.length - 1; i >= 0; i--) {
|
|
36
13
|
const _model = model.slice(0, i + 1);
|
|
37
|
-
if (!
|
|
14
|
+
if (!utils.arrayEquals(sequence[i], _model))
|
|
38
15
|
return false;
|
|
39
16
|
}
|
|
40
17
|
return true;
|
|
41
18
|
}
|
|
42
|
-
var useKeyDownList = /* @__PURE__ */
|
|
43
|
-
const [pressedKeys, setPressedKeys] =
|
|
44
|
-
const [event, setEvent] =
|
|
19
|
+
var useKeyDownList = /* @__PURE__ */ rootless.createSharedRoot(() => {
|
|
20
|
+
const [pressedKeys, setPressedKeys] = solidJs.createSignal([]);
|
|
21
|
+
const [event, setEvent] = solidJs.createSignal(null);
|
|
45
22
|
const reset = () => setPressedKeys([]);
|
|
46
|
-
|
|
23
|
+
eventListener.makeEventListener(window, "keydown", (e) => {
|
|
47
24
|
if (e.repeat)
|
|
48
25
|
return;
|
|
49
26
|
const key = e.key.toUpperCase();
|
|
50
27
|
if (pressedKeys().includes(key))
|
|
51
28
|
return;
|
|
52
|
-
|
|
29
|
+
solidJs.batch(() => {
|
|
53
30
|
setEvent(e);
|
|
54
31
|
setPressedKeys((prev) => [...prev, key]);
|
|
55
32
|
});
|
|
56
33
|
});
|
|
57
|
-
|
|
34
|
+
eventListener.makeEventListener(window, "keyup", (e) => {
|
|
58
35
|
const key = e.key.toUpperCase();
|
|
59
36
|
setPressedKeys((prev) => prev.filter((_key) => _key !== key));
|
|
60
37
|
});
|
|
61
|
-
|
|
62
|
-
|
|
38
|
+
eventListener.makeEventListener(window, "blur", reset);
|
|
39
|
+
eventListener.makeEventListener(window, "contextmenu", (e) => {
|
|
63
40
|
e.defaultPrevented || reset();
|
|
64
41
|
});
|
|
65
42
|
return [pressedKeys, { event }];
|
|
66
43
|
});
|
|
67
|
-
var useCurrentlyHeldKey = /* @__PURE__ */
|
|
44
|
+
var useCurrentlyHeldKey = /* @__PURE__ */ rootless.createSharedRoot(() => {
|
|
68
45
|
const [keys] = useKeyDownList();
|
|
69
|
-
let prevKeys =
|
|
70
|
-
return
|
|
46
|
+
let prevKeys = solidJs.untrack(keys);
|
|
47
|
+
return solidJs.createMemo(() => {
|
|
71
48
|
const _keys = keys();
|
|
72
49
|
const prev = prevKeys;
|
|
73
50
|
prevKeys = _keys;
|
|
@@ -76,9 +53,9 @@ var useCurrentlyHeldKey = /* @__PURE__ */ (0, import_rootless.createSharedRoot)(
|
|
|
76
53
|
return null;
|
|
77
54
|
});
|
|
78
55
|
});
|
|
79
|
-
var useKeyDownSequence = /* @__PURE__ */
|
|
56
|
+
var useKeyDownSequence = /* @__PURE__ */ rootless.createSharedRoot(() => {
|
|
80
57
|
const [keys] = useKeyDownList();
|
|
81
|
-
return
|
|
58
|
+
return solidJs.createMemo((prev) => {
|
|
82
59
|
if (keys().length === 0)
|
|
83
60
|
return [];
|
|
84
61
|
return [...prev, keys()];
|
|
@@ -89,7 +66,7 @@ function createKeyHold(key, options = {}) {
|
|
|
89
66
|
const { preventDefault = true } = options;
|
|
90
67
|
const [, { event }] = useKeyDownList();
|
|
91
68
|
const heldKey = useCurrentlyHeldKey();
|
|
92
|
-
return
|
|
69
|
+
return solidJs.createMemo(() => {
|
|
93
70
|
if (heldKey() === key) {
|
|
94
71
|
preventDefault && event().preventDefault();
|
|
95
72
|
return true;
|
|
@@ -98,8 +75,9 @@ function createKeyHold(key, options = {}) {
|
|
|
98
75
|
});
|
|
99
76
|
}
|
|
100
77
|
function createShortcut(keys, callback, options = {}) {
|
|
101
|
-
if (!keys.length)
|
|
78
|
+
if (!keys.length) {
|
|
102
79
|
return;
|
|
80
|
+
}
|
|
103
81
|
keys = keys.map((key) => key.toUpperCase());
|
|
104
82
|
const { preventDefault = true, requireReset = false } = options;
|
|
105
83
|
const [, { event }] = useKeyDownList();
|
|
@@ -129,26 +107,24 @@ function createShortcut(keys, callback, options = {}) {
|
|
|
129
107
|
if (!last)
|
|
130
108
|
return;
|
|
131
109
|
if (preventDefault && last.length < keys.length) {
|
|
132
|
-
if (
|
|
110
|
+
if (utils.arrayEquals(last, keys.slice(0, keys.length - 1))) {
|
|
133
111
|
event().preventDefault();
|
|
134
112
|
}
|
|
135
113
|
return;
|
|
136
114
|
}
|
|
137
|
-
if (
|
|
115
|
+
if (utils.arrayEquals(last, keys)) {
|
|
138
116
|
const prev = sequence2.at(-2);
|
|
139
|
-
if (!prev ||
|
|
117
|
+
if (!prev || utils.arrayEquals(prev, keys.slice(0, keys.length - 1))) {
|
|
140
118
|
preventDefault && event().preventDefault();
|
|
141
119
|
callback();
|
|
142
120
|
}
|
|
143
121
|
}
|
|
144
122
|
};
|
|
145
|
-
|
|
123
|
+
solidJs.createEffect(solidJs.on(sequence, requireReset ? handleSequenceWithReset : handleSequenceWithoutReset));
|
|
146
124
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
useKeyDownSequence
|
|
154
|
-
});
|
|
125
|
+
|
|
126
|
+
exports.createKeyHold = createKeyHold;
|
|
127
|
+
exports.createShortcut = createShortcut;
|
|
128
|
+
exports.useCurrentlyHeldKey = useCurrentlyHeldKey;
|
|
129
|
+
exports.useKeyDownList = useKeyDownList;
|
|
130
|
+
exports.useKeyDownSequence = useKeyDownSequence;
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { makeEventListener } from '@solid-primitives/event-listener';
|
|
2
|
+
import { createSharedRoot } from '@solid-primitives/rootless';
|
|
3
|
+
import { arrayEquals } from '@solid-primitives/utils';
|
|
4
|
+
import { createSignal, batch, untrack, createMemo, createEffect, on } from 'solid-js';
|
|
5
|
+
|
|
1
6
|
// src/index.ts
|
|
2
|
-
import { makeEventListener } from "@solid-primitives/event-listener";
|
|
3
|
-
import { createSharedRoot } from "@solid-primitives/rootless";
|
|
4
|
-
import { arrayEquals } from "@solid-primitives/utils";
|
|
5
|
-
import { batch, createEffect, createMemo, createSignal, on, untrack } from "solid-js";
|
|
6
7
|
function equalsKeyHoldSequence(sequence, model) {
|
|
7
8
|
for (let i = sequence.length - 1; i >= 0; i--) {
|
|
8
9
|
const _model = model.slice(0, i + 1);
|
|
@@ -70,8 +71,9 @@ function createKeyHold(key, options = {}) {
|
|
|
70
71
|
});
|
|
71
72
|
}
|
|
72
73
|
function createShortcut(keys, callback, options = {}) {
|
|
73
|
-
if (!keys.length)
|
|
74
|
+
if (!keys.length) {
|
|
74
75
|
return;
|
|
76
|
+
}
|
|
75
77
|
keys = keys.map((key) => key.toUpperCase());
|
|
76
78
|
const { preventDefault = true, requireReset = false } = options;
|
|
77
79
|
const [, { event }] = useKeyDownList();
|
|
@@ -116,10 +118,5 @@ function createShortcut(keys, callback, options = {}) {
|
|
|
116
118
|
};
|
|
117
119
|
createEffect(on(sequence, requireReset ? handleSequenceWithReset : handleSequenceWithoutReset));
|
|
118
120
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
createShortcut,
|
|
122
|
-
useCurrentlyHeldKey,
|
|
123
|
-
useKeyDownList,
|
|
124
|
-
useKeyDownSequence
|
|
125
|
-
};
|
|
121
|
+
|
|
122
|
+
export { createKeyHold, createShortcut, useCurrentlyHeldKey, useKeyDownList, useKeyDownSequence };
|
package/dist/server.cjs
CHANGED
|
@@ -1,43 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
require('@solid-primitives/event-listener');
|
|
6
|
+
var rootless = require('@solid-primitives/rootless');
|
|
7
|
+
require('@solid-primitives/utils');
|
|
8
|
+
require('solid-js');
|
|
19
9
|
|
|
20
|
-
// src/
|
|
21
|
-
var
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
10
|
+
// src/index.ts
|
|
11
|
+
var useKeyDownList = /* @__PURE__ */ rootless.createSharedRoot(() => {
|
|
12
|
+
{
|
|
13
|
+
return [() => [], { event: () => null }];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
var useCurrentlyHeldKey = /* @__PURE__ */ rootless.createSharedRoot(() => {
|
|
17
|
+
{
|
|
18
|
+
return () => null;
|
|
19
|
+
}
|
|
28
20
|
});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
var useKeyDownSequence = () => () => [];
|
|
34
|
-
var createKeyHold = () => () => false;
|
|
35
|
-
var createShortcut = import_utils.noop;
|
|
36
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
37
|
-
0 && (module.exports = {
|
|
38
|
-
createKeyHold,
|
|
39
|
-
createShortcut,
|
|
40
|
-
useCurrentlyHeldKey,
|
|
41
|
-
useKeyDownList,
|
|
42
|
-
useKeyDownSequence
|
|
21
|
+
var useKeyDownSequence = /* @__PURE__ */ rootless.createSharedRoot(() => {
|
|
22
|
+
{
|
|
23
|
+
return () => [];
|
|
24
|
+
}
|
|
43
25
|
});
|
|
26
|
+
function createKeyHold(key, options = {}) {
|
|
27
|
+
{
|
|
28
|
+
return () => false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function createShortcut(keys, callback, options = {}) {
|
|
32
|
+
{
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
exports.createKeyHold = createKeyHold;
|
|
38
|
+
exports.createShortcut = createShortcut;
|
|
39
|
+
exports.useCurrentlyHeldKey = useCurrentlyHeldKey;
|
|
40
|
+
exports.useKeyDownList = useKeyDownList;
|
|
41
|
+
exports.useKeyDownSequence = useKeyDownSequence;
|
package/dist/server.js
CHANGED
|
@@ -1,14 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import '@solid-primitives/event-listener';
|
|
2
|
+
import { createSharedRoot } from '@solid-primitives/rootless';
|
|
3
|
+
import '@solid-primitives/utils';
|
|
4
|
+
import 'solid-js';
|
|
5
|
+
|
|
6
|
+
// src/index.ts
|
|
7
|
+
var useKeyDownList = /* @__PURE__ */ createSharedRoot(() => {
|
|
8
|
+
{
|
|
9
|
+
return [() => [], { event: () => null }];
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var useCurrentlyHeldKey = /* @__PURE__ */ createSharedRoot(() => {
|
|
13
|
+
{
|
|
14
|
+
return () => null;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
var useKeyDownSequence = /* @__PURE__ */ createSharedRoot(() => {
|
|
18
|
+
{
|
|
19
|
+
return () => [];
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
function createKeyHold(key, options = {}) {
|
|
23
|
+
{
|
|
24
|
+
return () => false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function createShortcut(keys, callback, options = {}) {
|
|
28
|
+
{
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { createKeyHold, createShortcut, useCurrentlyHeldKey, useKeyDownList, useKeyDownSequence };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solid-primitives/keyboard",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "A library of reactive promitives helping handling user's keyboard input.",
|
|
5
5
|
"author": "Damian Tarnwski <gthetarnav@gmail.com>",
|
|
6
6
|
"contributors": [],
|
|
@@ -25,13 +25,39 @@
|
|
|
25
25
|
],
|
|
26
26
|
"category": "Inputs"
|
|
27
27
|
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"solid",
|
|
30
|
+
"primitives",
|
|
31
|
+
"keyboard",
|
|
32
|
+
"keystroke",
|
|
33
|
+
"hotkey"
|
|
34
|
+
],
|
|
28
35
|
"private": false,
|
|
29
36
|
"sideEffects": false,
|
|
37
|
+
"files": [
|
|
38
|
+
"dist"
|
|
39
|
+
],
|
|
30
40
|
"type": "module",
|
|
31
41
|
"main": "./dist/server.cjs",
|
|
32
|
-
"module": "./dist/
|
|
42
|
+
"module": "./dist/server.js",
|
|
33
43
|
"types": "./dist/index.d.ts",
|
|
44
|
+
"browser": {
|
|
45
|
+
"./dist/server.cjs": "./dist/index.cjs",
|
|
46
|
+
"./dist/server.js": "./dist/index.js"
|
|
47
|
+
},
|
|
34
48
|
"exports": {
|
|
49
|
+
"worker": {
|
|
50
|
+
"import": "./dist/server.js",
|
|
51
|
+
"require": "./dist/server.cjs"
|
|
52
|
+
},
|
|
53
|
+
"browser": {
|
|
54
|
+
"import": "./dist/index.js",
|
|
55
|
+
"require": "./dist/index.cjs"
|
|
56
|
+
},
|
|
57
|
+
"deno": {
|
|
58
|
+
"import": "./dist/server.js",
|
|
59
|
+
"require": "./dist/server.cjs"
|
|
60
|
+
},
|
|
35
61
|
"node": {
|
|
36
62
|
"import": "./dist/server.js",
|
|
37
63
|
"require": "./dist/server.cjs"
|
|
@@ -39,40 +65,21 @@
|
|
|
39
65
|
"import": "./dist/index.js",
|
|
40
66
|
"require": "./dist/index.cjs"
|
|
41
67
|
},
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"primitives",
|
|
48
|
-
"keyboard",
|
|
49
|
-
"keystroke",
|
|
50
|
-
"hotkey"
|
|
51
|
-
],
|
|
68
|
+
"dependencies": {
|
|
69
|
+
"@solid-primitives/event-listener": "^2.2.4",
|
|
70
|
+
"@solid-primitives/rootless": "^1.2.1",
|
|
71
|
+
"@solid-primitives/utils": "^4.0.0"
|
|
72
|
+
},
|
|
52
73
|
"devDependencies": {
|
|
53
|
-
"
|
|
54
|
-
"prettier": "^2.7.1",
|
|
55
|
-
"solid-js": "^1.5.1",
|
|
56
|
-
"tslib": "^2.4.0",
|
|
57
|
-
"tsup": "^6.2.2",
|
|
58
|
-
"typescript": "^4.7.4",
|
|
59
|
-
"unocss": "^0.44.7",
|
|
60
|
-
"vite": "^3.0.7",
|
|
61
|
-
"vite-plugin-solid": "^2.3.0",
|
|
62
|
-
"vitest": "^0.20.3"
|
|
74
|
+
"solid-js": "^1.6.0"
|
|
63
75
|
},
|
|
64
76
|
"peerDependencies": {
|
|
65
|
-
"solid-js": "^1.
|
|
66
|
-
},
|
|
67
|
-
"dependencies": {
|
|
68
|
-
"@solid-primitives/event-listener": "^2.2.2",
|
|
69
|
-
"@solid-primitives/rootless": "^1.1.3",
|
|
70
|
-
"@solid-primitives/utils": "^3.0.2"
|
|
77
|
+
"solid-js": "^1.6.0"
|
|
71
78
|
},
|
|
72
79
|
"scripts": {
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"test": "
|
|
80
|
+
"dev": "vite serve dev",
|
|
81
|
+
"build": "jiti ../../scripts/build.ts --ssr",
|
|
82
|
+
"test": "vitest -c ../../configs/vitest.config.ts",
|
|
83
|
+
"test:ssr": "pnpm run test --mode ssr"
|
|
77
84
|
}
|
|
78
85
|
}
|