UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

95 lines 7.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KeyEvent = void 0; class KeyEvent { /** * Creates a new keyboard event * @param event The data for the event to create * @param heldKeys The keys that are also held currently */ constructor(event, heldKeys) { /** The keys that were held down when this event was fired */ this.held = []; this.type = event.type; this.key = event.key; this.original = event.original; if (heldKeys) this.setHeldKeys(heldKeys); } /** * Sets the keys that are also held while this event was created * @param keys The keys that are held, overrides the previous keys */ setHeldKeys(keys) { this.held = [...keys]; this.ctrl = !!this.held.find(k => k.name == "ctrl"); this.shift = !!this.held.find(k => k.name == "shift"); this.alt = !!this.held.find(k => k.name == "alt"); this.meta = !!this.held.find(k => k.name == "meta"); // Make sure the key type is consistent with the held keys if (this.type == "down") { // Change type to repeat if the key was already held if (this.held.find(k => k.id == this.key.id)) this.type = "repeat"; } else if (this.type == "up") { // Remove the key from held if type is false this.held = this.held.filter(k => k.id != this.key.id); } } /** * Checks whether this event is equal to the given description * @param keys The keys to check for * @param type The event type to check for, defaults to "down" */ is(keys, type = "down") { // Check whether the event type corresponds if (type && (type instanceof Array ? !type.includes(this.type) : type != this.type)) return false; // Make sure nothing more than the specified keys was pressed if (!(keys instanceof Array)) keys = [keys]; if (keys.length != this.held.length + (this.type == "repeat" ? 0 : 1)) return false; return this.includes(keys); } /** * Checks whether this event includes the pressed sequence (more keys may be held) * @param keys The keys to check for * @param type The event type to check for, defaults to "down" */ matches(keys, type = "down") { // Check whether the event type corresponds if (type && (type instanceof Array ? !type.includes(this.type) : type != this.type)) return false; // Make sure that the specified event is included if (!(keys instanceof Array)) keys = [keys]; const sequenceIncludesEvent = keys.find(key => this.key.id == key || this.key.name == key); if (!sequenceIncludesEvent) return false; return this.includes(keys); } /** * Determines whether the held keys include all the specified key(s) * @param keys The key(s) to check * @returns Whether it is included */ includes(keys) { if (!(keys instanceof Array)) keys = [keys]; const all = [...this.held, this.key]; const unmatched = keys.filter(key => !all.find(held => held.id == key || held.name == key)); return unmatched.length == 0; } /** * Checks whether any of the modifier keys were held */ hasModifiers() { return this.alt || this.ctrl || this.meta || this.shift; } } exports.KeyEvent = KeyEvent; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2V5RXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2V5SGFuZGxlci9LZXlFdmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSxNQUFhLFFBQVE7SUFxQmpCOzs7O09BSUc7SUFDSCxZQUFtQixLQUFxQixFQUFFLFFBQWlCO1FBekIzRCw2REFBNkQ7UUFDdEQsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQXlCckIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFFL0IsSUFBSSxRQUFRO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVyxDQUFDLElBQVk7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksR0FBRyxD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