UNPKG

ng-hotkeys

Version:

ng-hotkeys for Angular 14+

89 lines 8.61 kB
import { Directive, ElementRef, Input } from "@angular/core"; import { AllowIn } from "./ng-hotkeys.interfaces"; import { NgHotkeysService } from "./ng-hotkeys.service"; import * as i0 from "@angular/core"; import * as i1 from "./ng-hotkeys.service"; /** * A directive to be used with "focusable" elements, like: * textarea, input, select. */ export class NgHotkeysDirective { /** * @ignore * @param {NgHotkeysService} keyboard * @param {ElementRef} el */ constructor(keyboard, el) { this.keyboard = keyboard; this.el = el; /** * @ignore * @type {boolean} * @private */ this._disabled = false; } /** * whether to disable the shortcuts for this directive * @param value */ set disabled(value) { this._disabled = value; if (this.clearIds) { this.keyboard.remove(this.clearIds); } setTimeout(() => { if (value === false && this.ngHotKeys) { this.clearIds = this.keyboard.add(this.transformInput(this.ngHotKeys)); } }); } /** * @ignore * @param {Shortcut[]} shortcuts * @returns {any} */ transformInput(shortcuts) { return shortcuts.map(shortcut => ({ ...shortcut, target: this.el.nativeElement, allowIn: [AllowIn.Select, AllowIn.Input, AllowIn.Textarea] })); } /** * @ignore */ ngOnDestroy() { if (!this.clearIds) { return; } this.keyboard.remove(this.clearIds); } /** * @ignore * @param {SimpleChanges} changes */ ngOnChanges(changes) { const { ngKeyboardShortcuts } = changes; if (this.clearIds) { this.keyboard.remove(this.clearIds); } if (!ngKeyboardShortcuts || !ngKeyboardShortcuts.currentValue) { return; } this.clearIds = this.keyboard.add(this.transformInput(ngKeyboardShortcuts.currentValue)); } } NgHotkeysDirective.ɵfac = function NgHotkeysDirective_Factory(t) { return new (t || NgHotkeysDirective)(i0.ɵɵdirectiveInject(i1.NgHotkeysService), i0.ɵɵdirectiveInject(i0.ElementRef)); }; NgHotkeysDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: NgHotkeysDirective, selectors: [["", "ngHotKeys", ""]], inputs: { ngHotKeys: "ngHotKeys", disabled: "disabled" }, features: [i0.ɵɵNgOnChangesFeature] }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NgHotkeysDirective, [{ type: Directive, args: [{ selector: "[ngHotKeys]" }] }], function () { return [{ type: i1.NgHotkeysService }, { type: i0.ElementRef }]; }, { ngHotKeys: [{ type: Input }], disabled: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctaG90a2V5cy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1ob3RrZXlzL3NyYy9saWIvbmctaG90a2V5cy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUF1QyxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsT0FBTyxFQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUV4RDs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBa0MzQjs7OztPQUlHO0lBQ0gsWUFBb0IsUUFBMEIsRUFBVSxFQUFjO1FBQWxELGFBQVEsR0FBUixRQUFRLENBQWtCO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQTdCdEU7Ozs7V0FJRztRQUNLLGNBQVMsR0FBRyxLQUFLLENBQUM7SUF3QitDLENBQUM7SUF0QjFFOzs7T0FHRztJQUNILElBQWEsUUFBUSxDQUFDLEtBQUs7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDMUU7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUVOLENBQUM7SUFTRDs7OztPQUlHO0lBQ0ssY0FBYyxDQUFDLFNBQXFCO1FBQ3hDLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUIsR0FBRyxRQUFRO1lBQ1gsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYTtZQUM3QixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUM3RCxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixNQUFNLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFO1lBQzNELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7O29GQTdFUSxrQkFBa0I7cUVBQWxCLGtCQUFrQjt1RkFBbEIsa0JBQWtCO2NBSDlCLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUUsYUFBYTthQUMxQjs0RkFVWSxTQUFTO2tCQUFqQixLQUFLO1lBWU8sUUFBUTtrQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFsbG93SW4sIFNob3J0Y3V0IH0gZnJvbSBcIi4vbmctaG90a2V5cy5pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBOZ0hvdGtleXNTZXJ2aWNlIH0gZnJvbSBcIi4vbmctaG90a2V5cy5zZXJ2aWNlXCI7XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gYmUgdXNlZCB3aXRoIFwiZm9jdXNhYmxlXCIgZWxlbWVudHMsIGxpa2U6XG4gKiB0ZXh0YXJlYSwgaW5wdXQsIHNlbGVjdC5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IFwiW25nSG90S2V5c11cIlxufSlcbmV4cG9ydCBjbGFzcyBOZ0hvdGtleXNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gICAgLyoqXG4gICAgICogY2xlYXJJZCB0byByZW1vdmUgc2hvcnRjdXRzLlxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYXJJZHM7XG4gICAgLyoqXG4gICAgICogU2hvcnRjdXQgaW5wdXRzIGZvciB0aGUgZGlyZWN0aXZlLlxuICAgICAqIHdpbGwgb25seSB3b3JrIHdoZW4gdGhlIGVsZW1lbnQgaXMgaW4gZm9jdXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBuZ0hvdEtleXM6IFNob3J0Y3V0W107XG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgc2hvcnRjdXRzIGZvciB0aGlzIGRpcmVjdGl2ZVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jbGVhcklkcykge1xuICAgICAgICAgICAgdGhpcy5rZXlib2FyZC5yZW1vdmUodGhpcy5jbGVhcklkcyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGZhbHNlICYmIHRoaXMubmdIb3RLZXlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcklkcyA9IHRoaXMua2V5Ym9hcmQuYWRkKHRoaXMudHJhbnNmb3JtSW5wdXQodGhpcy5uZ0hvdEtleXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAcGFyYW0ge05nSG90a2V5c1NlcnZpY2V9IGtleWJvYXJkXG4gICAgICogQHBhcmFtIHtFbGVtZW50UmVmfSBlbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUga2V5Ym9hcmQ6IE5nSG90a2V5c1NlcnZpY2UsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICogQHBhcmFtIHtTaG9ydGN1dFtdfSBzaG9ydGN1dHNcbiAgICAgKiBAcmV0dXJucyB7YW55fVxuICAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtSW5wdXQoc2hvcnRjdXRzOiBTaG9ydGN1dFtdKSB7XG4gICAgICAgIHJldHVybiBzaG9ydGN1dHMubWFwKHNob3J0Y3V0ID0+ICh7XG4gICAgICAgICAgICAuLi5zaG9ydGN1dCxcbiAgICAgICAgICAgIHRhcmdldDogdGhpcy5lbC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgYWxsb3dJbjogW0FsbG93SW4uU2VsZWN0LCBBbGxvd0luLklucHV0LCBBbGxvd0luLlRleHRhcmVhXVxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xlYXJJZHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmtleWJvYXJkLnJlbW92ZSh0aGlzLmNsZWFySWRzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICogQHBhcmFtIHtTaW1wbGVDaGFuZ2VzfSBjaGFuZ2VzXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCB7IG5nS2V5Ym9hcmRTaG9ydGN1dHMgfSA9IGNoYW5nZXM7XG4gICAgICAgIGlmICh0aGlzLmNsZWFySWRzKSB7XG4gICAgICAgICAgICB0aGlzLmtleWJvYXJkLnJlbW92ZSh0aGlzLmNsZWFySWRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5nS2V5Ym9hcmRTaG9ydGN1dHMgfHwgIW5nS2V5Ym9hcmRTaG9ydGN1dHMuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhcklkcyA9IHRoaXMua2V5Ym9hcmQuYWRkKHRoaXMudHJhbnNmb3JtSW5wdXQobmdLZXlib2FyZFNob3J0Y3V0cy5jdXJyZW50VmFsdWUpKTtcbiAgICB9XG59XG4iXX0=