diff --git a/node_modules/wrdu-keyboard/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4b7e9446f3580fab3e4feaba097bcdaf98c5833c Binary files /dev/null and b/.DS_Store differ diff --git a/dist/runtime/keyboard.d.ts b/dist/runtime/keyboard.d.ts index aeae40f3d2bc3efd459cce04c29c21c43884154d..6131bab4895ebb3048a5225f366430d23c5f1f13 100644 --- a/dist/runtime/keyboard.d.ts +++ b/dist/runtime/keyboard.d.ts @@ -1,15 +1,16 @@ -import { Key } from './types/keys.js'; -import { type Plugin } from '#app'; +import { Key } from "./types/keys.js"; +import { type Plugin } from "#app"; type Handler = (event: KeyboardEvent) => void; type Config = { once?: boolean; prevent?: boolean; }; -type PublicConfig = Omit; +type PublicConfig = Omit; type New = (keys: Key[], handler: Handler, config?: PublicConfig) => void; export interface Keyboard { init: () => void; stop: () => void; + unregisterAll: () => void; down: New; up: New; prevent: { diff --git a/dist/runtime/keyboard.js b/dist/runtime/keyboard.js index e16f600258cee90d185ffc52777bed95c14bd93e..5ddec447a5dc66ffe063eb9f9dd765c9045bdaf7 100644 --- a/dist/runtime/keyboard.js +++ b/dist/runtime/keyboard.js @@ -1,45 +1,54 @@ import { Key } from "./types/keys.js"; import { defineNuxtPlugin } from "#app"; -const getKeyString = (keys) => keys[0] == Key.All ? keys.sort().join("+") : "All"; +const getKeyString = (keys) => keys.includes(Key.All) ? "All" : keys.sort().join("+"); const handlers = { down: {}, up: {} }; const pressedKeys = /* @__PURE__ */ new Set(); const onKeydown = (event) => { - pressedKeys.add(event.code); + const key = event.code; + pressedKeys.add(key); const pressedArray = Array.from(pressedKeys); - const keyString = getKeyString(pressedArray); - if (handlers.down[keyString]) { - handlers.down[keyString].forEach((eventHandler) => { - if (eventHandler.prevent) { - event.preventDefault(); - } - eventHandler.handler(event); - if (eventHandler.once) { - handlers.down[keyString] = handlers.down[keyString].filter((h) => h !== eventHandler); - } - }); + for (const keyString of [getKeyString(pressedArray), "All"]) { + if (handlers.down[keyString]) { + handlers.down[keyString].forEach((eventHandler) => { + if (eventHandler.prevent) { + event.preventDefault(); + } + eventHandler.handler(event); + if (eventHandler.once) { + handlers.down[keyString] = handlers.down[keyString].filter( + (h) => h !== eventHandler + ); + } + }); + } } }; const onKeyup = (event) => { - pressedKeys.delete(event.code); + const key = event.code; + pressedKeys.delete(key); const releasedArray = Array.from(pressedKeys); - const keyString = getKeyString(releasedArray); - if (handlers.up[keyString]) { - handlers.up[keyString].forEach((eventHandler) => { - if (eventHandler.prevent) { - event.preventDefault(); - } - eventHandler.handler(event); - if (eventHandler.once) { - handlers.up[keyString] = handlers.up[keyString].filter((h) => h !== eventHandler); - } - }); + for (const keyString of [getKeyString(releasedArray), "All"]) { + if (handlers.up[keyString]) { + handlers.up[keyString].forEach((eventHandler) => { + if (eventHandler.prevent) { + event.preventDefault(); + } + eventHandler.handler(event); + if (eventHandler.once) { + handlers.up[keyString] = handlers.up[keyString].filter( + (h) => h !== eventHandler + ); + } + }); + } } }; const init = () => { stop(); + pressedKeys.clear(); window.addEventListener("keydown", onKeydown); window.addEventListener("keyup", onKeyup); }; @@ -47,6 +56,10 @@ const stop = () => { window.removeEventListener("keydown", onKeydown); window.removeEventListener("keyup", onKeyup); }; +const unregisterAll = () => { + handlers.down = {}; + handlers.up = {}; +}; const down = (keys, handler, config = {}) => { if (keys.includes(Key.All)) { keys = [Key.All]; @@ -84,6 +97,7 @@ const keyboard = defineNuxtPlugin((nuxtApp) => { keyboard: { init, stop, + unregisterAll, down: (keys, handler, config = {}) => down(keys, handler, config), up: (keys, handler, config = {}) => up(keys, handler, config), prevent: {