diff --git a/src/lib/misc/hidden-action/hidden-action.component.html b/src/lib/misc/hidden-action/hidden-action.component.html
index a101778..6aa8b5c 100644
--- a/src/lib/misc/hidden-action/hidden-action.component.html
+++ b/src/lib/misc/hidden-action/hidden-action.component.html
@@ -1,3 +1,3 @@
-
+
diff --git a/src/lib/misc/hidden-action/hidden-action.component.ts b/src/lib/misc/hidden-action/hidden-action.component.ts
index 6d8a68c..76eaba4 100644
--- a/src/lib/misc/hidden-action/hidden-action.component.ts
+++ b/src/lib/misc/hidden-action/hidden-action.component.ts
@@ -1,4 +1,5 @@
-import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
+import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
+import { BehaviorSubject } from 'rxjs';
@Component({
selector: 'iqser-hidden-action',
@@ -9,18 +10,38 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from
export class HiddenActionComponent {
@Input() requiredClicks = 4;
@Output() readonly action = new EventEmitter();
- private _clickCount = 0;
- private _clickCountTimeout?: ReturnType
;
+ #dPressed = new BehaviorSubject(false);
+ #clickCount = 0;
+ #clickCountTimeout?: ReturnType;
- countActions(): void {
- this._clickCount += 1;
- if (this._clickCount === this.requiredClicks) {
- this._clickCount = 0;
+ @HostListener('window:keydown.D', ['$event'])
+ onKeydownD() {
+ this.#dPressed.next(true);
+ }
+
+ @HostListener('window:keyup.D', ['$event'])
+ onKeyupD() {
+ this.#dPressed.next(false);
+ }
+
+ countActions($event: MouseEvent): void {
+ if (!this.#dPressed.value) {
+ this.#clickCount = 0;
+ clearTimeout(this.#clickCountTimeout);
+ return;
+ }
+
+ $event.stopPropagation();
+ $event.preventDefault();
+
+ this.#clickCount += 1;
+ if (this.#clickCount === this.requiredClicks) {
+ this.#clickCount = 0;
this.action.emit();
}
- clearTimeout(this._clickCountTimeout);
- this._clickCountTimeout = setTimeout(() => {
- this._clickCount = 0;
+ clearTimeout(this.#clickCountTimeout);
+ this.#clickCountTimeout = setTimeout(() => {
+ this.#clickCount = 0;
}, 1000);
}
}