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