ng-hotkeys
Version:
ng-hotkeys for Angular 14+
89 lines • 8.61 kB
JavaScript
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=