@trudb/tru-common-lib 0.1.701 → 0.1.703
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/desktop/directives/window-state-monitor/tru-desktop-window-state-monitor.mjs +51 -39
- package/fesm2022/trudb-tru-common-lib.mjs +48 -35
- package/fesm2022/trudb-tru-common-lib.mjs.map +1 -1
- package/lib/components/desktop/directives/window-state-monitor/tru-desktop-window-state-monitor.d.ts +7 -5
- package/package.json +1 -1
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import { Directive,
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "
|
|
4
|
-
import * as i2 from "../../services/tru-window-event-handler";
|
|
3
|
+
import * as i1 from "../../services/tru-window-event-handler";
|
|
5
4
|
export class TruDesktopWindowStateMonitor {
|
|
6
5
|
el;
|
|
7
|
-
|
|
8
|
-
util;
|
|
6
|
+
renderer;
|
|
9
7
|
windowEventHandler;
|
|
10
8
|
active = true;
|
|
9
|
+
tabListener;
|
|
10
|
+
focusListener;
|
|
11
11
|
focusableElements = [];
|
|
12
|
-
constructor(el,
|
|
12
|
+
constructor(el, renderer, windowEventHandler) {
|
|
13
13
|
this.el = el;
|
|
14
|
-
this.
|
|
15
|
-
this.util = util;
|
|
14
|
+
this.renderer = renderer;
|
|
16
15
|
this.windowEventHandler = windowEventHandler;
|
|
17
16
|
}
|
|
18
17
|
setWindowState = () => {
|
|
@@ -24,32 +23,39 @@ export class TruDesktopWindowStateMonitor {
|
|
|
24
23
|
getFocusableChildElements = () => {
|
|
25
24
|
return this.el.nativeElement.querySelectorAll('a[href],input,select,textarea,button,mat-select,mat-tab,.mdc-tab,.ag-header-cell,.ag-cell,[tabindex]:not([tabindex="-1"]');
|
|
26
25
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (event.
|
|
38
|
-
if (
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
lastFocusableElement.focus();
|
|
42
|
-
}
|
|
26
|
+
focusAppropriateElement = (event) => {
|
|
27
|
+
let target = event.target;
|
|
28
|
+
this.focusableElements = this.getFocusableChildElements();
|
|
29
|
+
let firstFocusableElement = this.focusableElements[0];
|
|
30
|
+
let lastFocusableElement = this.focusableElements[this.focusableElements.length - 1];
|
|
31
|
+
if (target !== null && !this.el.nativeElement.contains(target)) {
|
|
32
|
+
firstFocusableElement.focus();
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
if (event.key === 'Tab') {
|
|
36
|
+
if (event.shiftKey) {
|
|
37
|
+
if (document.activeElement === firstFocusableElement) {
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
lastFocusableElement.focus();
|
|
43
40
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
if (document.activeElement === lastFocusableElement) {
|
|
44
|
+
event.preventDefault();
|
|
45
|
+
firstFocusableElement.focus();
|
|
49
46
|
}
|
|
50
47
|
}
|
|
51
48
|
}
|
|
52
49
|
}
|
|
50
|
+
};
|
|
51
|
+
onKeydown(event) {
|
|
52
|
+
if (event.key === 'Tab')
|
|
53
|
+
if (this.active) {
|
|
54
|
+
this.focusAppropriateElement(event);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
}
|
|
53
59
|
}
|
|
54
60
|
onFocusIn(event) {
|
|
55
61
|
if (this.active) {
|
|
@@ -63,24 +69,30 @@ export class TruDesktopWindowStateMonitor {
|
|
|
63
69
|
}
|
|
64
70
|
ngOnChanges(changes) {
|
|
65
71
|
this.setWindowState();
|
|
72
|
+
if (this.active) {
|
|
73
|
+
this.tabListener = this.renderer.listen('document', 'keydown', this.onKeydown.bind(this));
|
|
74
|
+
this.focusListener = this.renderer.listen('document', 'focusin', this.onFocusIn.bind(this));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this.tabListener();
|
|
78
|
+
this.focusListener();
|
|
79
|
+
}
|
|
66
80
|
this.windowEventHandler.activeStateChanged(this.active);
|
|
67
81
|
}
|
|
68
|
-
|
|
69
|
-
|
|
82
|
+
ngOnDestroy() {
|
|
83
|
+
this.tabListener();
|
|
84
|
+
this.focusListener();
|
|
85
|
+
}
|
|
86
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.TruWindowEventHandler }], target: i0.ɵɵFactoryTarget.Directive });
|
|
87
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: TruDesktopWindowStateMonitor, selector: "[truDesktopWindowStateMonitor]", inputs: { active: ["truDesktopWindowStateMonitor", "active"] }, usesOnChanges: true, ngImport: i0 });
|
|
70
88
|
}
|
|
71
89
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, decorators: [{
|
|
72
90
|
type: Directive,
|
|
73
91
|
args: [{
|
|
74
92
|
selector: '[truDesktopWindowStateMonitor]'
|
|
75
93
|
}]
|
|
76
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.
|
|
94
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.TruWindowEventHandler }], propDecorators: { active: [{
|
|
77
95
|
type: Input,
|
|
78
96
|
args: ['truDesktopWindowStateMonitor']
|
|
79
|
-
}], onKeydown: [{
|
|
80
|
-
type: HostListener,
|
|
81
|
-
args: ['document:keydown.tab', ['$event']]
|
|
82
|
-
}], onFocusIn: [{
|
|
83
|
-
type: HostListener,
|
|
84
|
-
args: ['document:focusin', ['$event']]
|
|
85
97
|
}] } });
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3Atd2luZG93LXN0YXRlLW1vbml0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZGVza3RvcC9kaXJlY3RpdmVzL3dpbmRvdy1zdGF0ZS1tb25pdG9yL3RydS1kZXNrdG9wLXdpbmRvdy1zdGF0ZS1tb25pdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUE0QixLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDOzs7QUFPeEgsTUFBTSxPQUFPLDRCQUE0QjtJQVE3QjtJQUNBO0lBQ0E7SUFUNkIsTUFBTSxHQUFZLElBQUksQ0FBQztJQUV0RCxXQUFXLENBQWM7SUFDekIsYUFBYSxDQUFjO0lBQzNCLGlCQUFpQixHQUF1QixFQUFFLENBQUM7SUFFbkQsWUFDVSxFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsa0JBQXlDO1FBRnpDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBdUI7SUFBSSxDQUFDO0lBRWhELGNBQWMsR0FBRyxHQUFHLEVBQUU7UUFDNUIsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQzs7WUFFbEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQTtJQUVPLHlCQUF5QixHQUFHLEdBQUcsRUFBRTtRQUN2QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLDBIQUEwSCxDQUFDLENBQUM7SUFDNUssQ0FBQyxDQUFBO0lBRU8s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RUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQzt1R0FsRlUsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7OzJGQUE1Qiw0QkFBNEI7a0JBSHhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztpQkFDM0M7MklBRXdDLE1BQU07c0JBQTVDLEtBQUs7dUJBQUMsOEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS13aW5kb3ctZXZlbnQtaGFuZGxlcic7XHJcbmltcG9ydCB7IFRydVV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90cnUtdXRpbCc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1t0cnVEZXNrdG9wV2luZG93U3RhdGVNb25pdG9yXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRydURlc2t0b3BXaW5kb3dTdGF0ZU1vbml0b3Ige1xyXG4gIEBJbnB1dCgndHJ1RGVza3RvcFdpbmRvd1N0YXRlTW9uaXRvcicpIGFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgdGFiTGlzdGVuZXIhOiAoKSA9PiB2b2lkO1xyXG4gIHByaXZhdGUgZm9jdXNMaXN0ZW5lciE6ICgpID0+IHZvaWQ7XHJcbiAgcHJpdmF0ZSBmb2N1c2FibGVFbGVtZW50czogQXJyYXk8SFRNTEVsZW1lbnQ+ID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgd2luZG93RXZlbnRIYW5kbGVyOiBUcnVXaW5kb3dFdmVudEhhbmRsZXIpIHsgfVxyXG5cclxuICBwcml2YXRlIHNldFdpbmRvd1N0YXRlID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlKVxyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZGVza3RvcC13aW5kb3ctZGlzYWJsZWQnKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Rlc2t0b3Atd2luZG93LWRpc2FibGVkJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZvY3VzYWJsZUNoaWxkRWxlbWVudHMgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2FbaHJlZl0saW5wdXQsc2VsZWN0LHRleHRhcmVhLGJ1dHRvbixtYXQtc2VsZWN0LG1hdC10YWIsLm1kYy10YWIsLmFnLWhlYWRlci1jZWxsLC5hZy1jZWxsLFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzQXBwcm9wcmlhdGVFbGVtZW50ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICBsZXQgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgdGhpcy5mb2N1c2FibGVFbGVtZW50cyA9IHRoaXMuZ2V0Rm9jdXNhYmxlQ2hpbGRFbGVtZW50cygpO1xyXG4gICAgbGV0IGZpcnN0Rm9jdXNhYmxlRWxlbWVudCA9IHRoaXMuZm9jdXNhYmxlRWxlbWVudHNbMF07XHJcbiAgICBsZXQgbGFzdEZvY3VzYWJsZUVsZW1lbnQgPSB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzW3RoaXMuZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMV07XHJcbiAgICBpZiAodGFyZ2V0ICE9PSBudWxsICYmICF0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICBmaXJzdEZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZmlyc3RGb2N1c2FibGVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGxhc3RGb2N1c2FibGVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsYXN0Rm9jdXNhYmxlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBmaXJzdEZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpXHJcbiAgICBpZiAodGhpcy5hY3RpdmUpIHtcclxuICAgICAgdGhpcy5mb2N1c0FwcHJvcHJpYXRlRWxlbWVudChldmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Gb2N1c0luKGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmUpIHtcclxuICAgICAgbGV0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgdGhpcy5mb2N1c2FibGVFbGVtZW50cyA9IHRoaXMuZ2V0Rm9jdXNhYmxlQ2hpbGRFbGVtZW50cygpO1xyXG4gICAgICBsZXQgZmlyc3RGb2N1c2FibGVFbGVtZW50ID0gdGhpcy5mb2N1c2FibGVFbGVtZW50c1swXTtcclxuICAgICAgaWYgKHRhcmdldCAhPT0gbnVsbCAmJiAhdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcclxuICAgICAgICBmaXJzdEZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRXaW5kb3dTdGF0ZSgpO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlKSB7XHJcbiAgICAgIHRoaXMudGFiTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAna2V5ZG93bicsIHRoaXMub25LZXlkb3duLmJpbmQodGhpcykpO1xyXG4gICAgICB0aGlzLmZvY3VzTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnZm9jdXNpbicsIHRoaXMub25Gb2N1c0luLmJpbmQodGhpcykpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50YWJMaXN0ZW5lcigpO1xyXG4gICAgICB0aGlzLmZvY3VzTGlzdGVuZXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMud2luZG93RXZlbnRIYW5kbGVyLmFjdGl2ZVN0YXRlQ2hhbmdlZCh0aGlzLmFjdGl2ZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudGFiTGlzdGVuZXIoKTtcclxuICAgIHRoaXMuZm9jdXNMaXN0ZW5lcigpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -8246,15 +8246,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
8246
8246
|
|
|
8247
8247
|
class TruDesktopWindowStateMonitor {
|
|
8248
8248
|
el;
|
|
8249
|
-
|
|
8250
|
-
util;
|
|
8249
|
+
renderer;
|
|
8251
8250
|
windowEventHandler;
|
|
8252
8251
|
active = true;
|
|
8252
|
+
tabListener;
|
|
8253
|
+
focusListener;
|
|
8253
8254
|
focusableElements = [];
|
|
8254
|
-
constructor(el,
|
|
8255
|
+
constructor(el, renderer, windowEventHandler) {
|
|
8255
8256
|
this.el = el;
|
|
8256
|
-
this.
|
|
8257
|
-
this.util = util;
|
|
8257
|
+
this.renderer = renderer;
|
|
8258
8258
|
this.windowEventHandler = windowEventHandler;
|
|
8259
8259
|
}
|
|
8260
8260
|
setWindowState = () => {
|
|
@@ -8266,32 +8266,39 @@ class TruDesktopWindowStateMonitor {
|
|
|
8266
8266
|
getFocusableChildElements = () => {
|
|
8267
8267
|
return this.el.nativeElement.querySelectorAll('a[href],input,select,textarea,button,mat-select,mat-tab,.mdc-tab,.ag-header-cell,.ag-cell,[tabindex]:not([tabindex="-1"]');
|
|
8268
8268
|
};
|
|
8269
|
-
|
|
8270
|
-
|
|
8271
|
-
|
|
8272
|
-
|
|
8273
|
-
|
|
8274
|
-
|
|
8275
|
-
|
|
8276
|
-
|
|
8277
|
-
|
|
8278
|
-
|
|
8279
|
-
if (event.
|
|
8280
|
-
if (
|
|
8281
|
-
|
|
8282
|
-
|
|
8283
|
-
lastFocusableElement.focus();
|
|
8284
|
-
}
|
|
8269
|
+
focusAppropriateElement = (event) => {
|
|
8270
|
+
let target = event.target;
|
|
8271
|
+
this.focusableElements = this.getFocusableChildElements();
|
|
8272
|
+
let firstFocusableElement = this.focusableElements[0];
|
|
8273
|
+
let lastFocusableElement = this.focusableElements[this.focusableElements.length - 1];
|
|
8274
|
+
if (target !== null && !this.el.nativeElement.contains(target)) {
|
|
8275
|
+
firstFocusableElement.focus();
|
|
8276
|
+
}
|
|
8277
|
+
else {
|
|
8278
|
+
if (event.key === 'Tab') {
|
|
8279
|
+
if (event.shiftKey) {
|
|
8280
|
+
if (document.activeElement === firstFocusableElement) {
|
|
8281
|
+
event.preventDefault();
|
|
8282
|
+
lastFocusableElement.focus();
|
|
8285
8283
|
}
|
|
8286
|
-
|
|
8287
|
-
|
|
8288
|
-
|
|
8289
|
-
|
|
8290
|
-
|
|
8284
|
+
}
|
|
8285
|
+
else {
|
|
8286
|
+
if (document.activeElement === lastFocusableElement) {
|
|
8287
|
+
event.preventDefault();
|
|
8288
|
+
firstFocusableElement.focus();
|
|
8291
8289
|
}
|
|
8292
8290
|
}
|
|
8293
8291
|
}
|
|
8294
8292
|
}
|
|
8293
|
+
};
|
|
8294
|
+
onKeydown(event) {
|
|
8295
|
+
if (event.key === 'Tab')
|
|
8296
|
+
if (this.active) {
|
|
8297
|
+
this.focusAppropriateElement(event);
|
|
8298
|
+
}
|
|
8299
|
+
else {
|
|
8300
|
+
event.preventDefault();
|
|
8301
|
+
}
|
|
8295
8302
|
}
|
|
8296
8303
|
onFocusIn(event) {
|
|
8297
8304
|
if (this.active) {
|
|
@@ -8305,25 +8312,31 @@ class TruDesktopWindowStateMonitor {
|
|
|
8305
8312
|
}
|
|
8306
8313
|
ngOnChanges(changes) {
|
|
8307
8314
|
this.setWindowState();
|
|
8315
|
+
if (this.active) {
|
|
8316
|
+
this.tabListener = this.renderer.listen('document', 'keydown', this.onKeydown.bind(this));
|
|
8317
|
+
this.focusListener = this.renderer.listen('document', 'focusin', this.onFocusIn.bind(this));
|
|
8318
|
+
}
|
|
8319
|
+
else {
|
|
8320
|
+
this.tabListener();
|
|
8321
|
+
this.focusListener();
|
|
8322
|
+
}
|
|
8308
8323
|
this.windowEventHandler.activeStateChanged(this.active);
|
|
8309
8324
|
}
|
|
8310
|
-
|
|
8311
|
-
|
|
8325
|
+
ngOnDestroy() {
|
|
8326
|
+
this.tabListener();
|
|
8327
|
+
this.focusListener();
|
|
8328
|
+
}
|
|
8329
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: TruWindowEventHandler }], target: i0.ɵɵFactoryTarget.Directive });
|
|
8330
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: TruDesktopWindowStateMonitor, selector: "[truDesktopWindowStateMonitor]", inputs: { active: ["truDesktopWindowStateMonitor", "active"] }, usesOnChanges: true, ngImport: i0 });
|
|
8312
8331
|
}
|
|
8313
8332
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, decorators: [{
|
|
8314
8333
|
type: Directive,
|
|
8315
8334
|
args: [{
|
|
8316
8335
|
selector: '[truDesktopWindowStateMonitor]'
|
|
8317
8336
|
}]
|
|
8318
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.
|
|
8337
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: TruWindowEventHandler }], propDecorators: { active: [{
|
|
8319
8338
|
type: Input,
|
|
8320
8339
|
args: ['truDesktopWindowStateMonitor']
|
|
8321
|
-
}], onKeydown: [{
|
|
8322
|
-
type: HostListener,
|
|
8323
|
-
args: ['document:keydown.tab', ['$event']]
|
|
8324
|
-
}], onFocusIn: [{
|
|
8325
|
-
type: HostListener,
|
|
8326
|
-
args: ['document:focusin', ['$event']]
|
|
8327
8340
|
}] } });
|
|
8328
8341
|
|
|
8329
8342
|
class TruDesktopWindow {
|