UNPKG

ng-hotkeys

Version:

ng-hotkeys for Angular 14+

93 lines 8.29 kB
import { Component, Input } from "@angular/core"; import { NgHotkeysService } from './ng-hotkeys.service'; import * as i0 from "@angular/core"; import * as i1 from "./ng-hotkeys.service"; /** * A component to bind global shortcuts, can be used multiple times across the app * will remove registered shortcuts when element is removed from DOM. */ export class NgHotkeysComponent { /** * @ignore * @param {NgHotkeysService} keyboard */ constructor(keyboard) { this.keyboard = keyboard; /** * A list of shortcuts. */ this.shortcuts = []; /** * @ignore * list of registered keyboard shortcuts * used for clean up on NgDestroy. */ this.clearIds = []; /** * @ignore */ this._disabled = false; } /** * Disable all shortcuts for this component. */ set disabled(value) { this._disabled = value; if (this.clearIds) { this.keyboard.remove(this.clearIds); this.clearIds = []; } if (value) { return; } this.clearIds = this.keyboard.add(this.shortcuts); } /** * @ignore */ ngOnInit() { } /** * Select a key to listen to, will emit when the selected key is pressed. */ select(key) { return this.keyboard.select(key); } /** * @ignore */ ngAfterViewInit() { } /** * @ignore */ ngOnChanges(changes) { if (!changes.shortcuts || !changes.shortcuts.currentValue) { return; } if (this.clearIds) { this.keyboard.remove(this.clearIds); } if (!this._disabled) { setTimeout(() => (this.clearIds = this.keyboard.add(changes.shortcuts.currentValue))); } } /** * @ignore */ ngOnDestroy() { this.keyboard.remove(this.clearIds); } } NgHotkeysComponent.ɵfac = function NgHotkeysComponent_Factory(t) { return new (t || NgHotkeysComponent)(i0.ɵɵdirectiveInject(i1.NgHotkeysService)); }; NgHotkeysComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NgHotkeysComponent, selectors: [["ng-hot-keys"]], inputs: { shortcuts: "shortcuts", disabled: "disabled" }, features: [i0.ɵɵNgOnChangesFeature], decls: 0, vars: 0, template: function NgHotkeysComponent_Template(rf, ctx) { }, encapsulation: 2 }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NgHotkeysComponent, [{ type: Component, args: [{ selector: "ng-hot-keys", template: "" }] }], function () { return [{ type: i1.NgHotkeysService }]; }, { shortcuts: [{ type: Input }], disabled: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctaG90a2V5cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1ob3RrZXlzL3NyYy9saWIvbmctaG90a2V5cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBS1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUl4RDs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sa0JBQWtCO0lBZ0MzQjs7O09BR0c7SUFDSCxZQUFvQixRQUEwQjtRQUExQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQW5DOUM7O1dBRUc7UUFDTSxjQUFTLEdBQW9DLEVBQUUsQ0FBQztRQUV6RDs7OztXQUlHO1FBQ0ssYUFBUSxHQUFhLEVBQUUsQ0FBQztRQUVoQzs7V0FFRztRQUNLLGNBQVMsR0FBRyxLQUFLLENBQUM7SUFvQnVCLENBQUM7SUFuQmxEOztPQUVHO0lBQ0gsSUFBYSxRQUFRLENBQUMsS0FBSztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLEtBQUssRUFBRTtZQUNQLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFRRDs7T0FFRztJQUNILFFBQVEsS0FBSSxDQUFDO0lBRWI7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsS0FBVSxDQUFDO0lBRTFCOztPQUVHO0lBQ0gsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7WUFDdkQsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6RjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7b0ZBM0VRLGtCQUFrQjtxRUFBbEIsa0JBQWtCO3VGQUFsQixrQkFBa0I7Y0FKOUIsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixRQUFRLEVBQUUsRUFBRTthQUNmO21FQUtZLFNBQVM7a0JBQWpCLEtBQUs7WUFnQk8sUUFBUTtrQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTmdIb3RrZXlzU2VydmljZSB9IGZyb20gJy4vbmctaG90a2V5cy5zZXJ2aWNlJztcbmltcG9ydCB7IFNob3J0Y3V0SW5wdXQsIFNob3J0Y3V0RXZlbnRPdXRwdXQgfSBmcm9tIFwiLi9uZy1ob3RrZXlzLmludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRvIGJpbmQgZ2xvYmFsIHNob3J0Y3V0cywgY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMgYWNyb3NzIHRoZSBhcHBcbiAqIHdpbGwgcmVtb3ZlIHJlZ2lzdGVyZWQgc2hvcnRjdXRzIHdoZW4gZWxlbWVudCBpcyByZW1vdmVkIGZyb20gRE9NLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJuZy1ob3Qta2V5c1wiLFxuICAgIHRlbXBsYXRlOiBcIlwiXG59KVxuZXhwb3J0IGNsYXNzIE5nSG90a2V5c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBzaG9ydGN1dHMuXG4gICAgICovXG4gICAgQElucHV0KCkgc2hvcnRjdXRzOiBTaG9ydGN1dElucHV0W10gfCBTaG9ydGN1dElucHV0ID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICogbGlzdCBvZiByZWdpc3RlcmVkIGtleWJvYXJkIHNob3J0Y3V0c1xuICAgICAqIHVzZWQgZm9yIGNsZWFuIHVwIG9uIE5nRGVzdHJveS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNsZWFySWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBhbGwgc2hvcnRjdXRzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJJZHMpIHtcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmQucmVtb3ZlKHRoaXMuY2xlYXJJZHMpO1xuICAgICAgICAgICAgdGhpcy5jbGVhcklkcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJJZHMgPSB0aGlzLmtleWJvYXJkLmFkZCh0aGlzLnNob3J0Y3V0cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBwYXJhbSB7TmdIb3RrZXlzU2VydmljZX0ga2V5Ym9hcmRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGtleWJvYXJkOiBOZ0hvdGtleXNTZXJ2aWNlKSB7fVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge31cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBhIGtleSB0byBsaXN0ZW4gdG8sIHdpbGwgZW1pdCB3aGVuIHRoZSBzZWxlY3RlZCBrZXkgaXMgcHJlc3NlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxTaG9ydGN1dEV2ZW50T3V0cHV0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmtleWJvYXJkLnNlbGVjdChrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7fVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjaGFuZ2VzLnNob3J0Y3V0cyB8fCAhY2hhbmdlcy5zaG9ydGN1dHMuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2xlYXJJZHMpIHtcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmQucmVtb3ZlKHRoaXMuY2xlYXJJZHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuY2xlYXJJZHMgPSB0aGlzLmtleWJvYXJkLmFkZChjaGFuZ2VzLnNob3J0Y3V0cy5jdXJyZW50VmFsdWUpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmQucmVtb3ZlKHRoaXMuY2xlYXJJZHMpO1xuICAgIH1cbn1cbiJdfQ==