UNPKG

@studiometa/js-toolkit

Version:

A set of useful little bits of JavaScript to boost your project! 🚀

49 lines (48 loc) • 1.33 kB
import { AbstractService } from "./AbstractService.js"; import { keyCodes } from "../utils/keyCodes.js"; function getInitialKeyCodes() { return Object.fromEntries(Object.keys(keyCodes).map((key) => [key, false])); } class KeyService extends AbstractService { static config = [[() => document, [["keydown"], ["keyup"]]]]; previousEvent = null; props = { event: null, triggered: 0, isUp: false, isDown: false, direction: "none", ...getInitialKeyCodes() }; updateProps(event) { const { props } = this; props.event = event; for (const [name, code] of Object.entries(keyCodes)) { props[name] = code === event.keyCode; } if (!this.previousEvent) { props.triggered = 0; } if (props.event.type === "keydown" && this.previousEvent?.type === "keydown") { props.triggered += 1; } else { props.triggered = 1; } this.previousEvent = props.event; props.direction = props.event.type === "keydown" ? "down" : "up"; props.isUp = props.event.type === "keyup"; props.isDown = props.event.type === "keydown"; return props; } handleEvent(event) { this.trigger(this.updateProps(event)); } } function useKey() { return KeyService.getInstance(); } export { KeyService, useKey }; //# sourceMappingURL=KeyService.js.map