@trudb/tru-common-lib 0.1.698 → 0.1.700

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.
@@ -1,64 +1,71 @@
1
1
  import { Directive, HostListener, Input } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- import * as i1 from "../../services/tru-window-event-handler";
3
+ import * as i1 from "../../../../services/tru-util";
4
+ import * as i2 from "../../services/tru-window-event-handler";
4
5
  export class TruDesktopWindowStateMonitor {
5
6
  el;
6
7
  cdRef;
8
+ util;
7
9
  windowEventHandler;
8
10
  active = true;
9
- constructor(el, cdRef, windowEventHandler) {
11
+ focusableElements = [];
12
+ constructor(el, cdRef, util, windowEventHandler) {
10
13
  this.el = el;
11
14
  this.cdRef = cdRef;
15
+ this.util = util;
12
16
  this.windowEventHandler = windowEventHandler;
13
17
  }
14
- updateState = () => {
15
- var controls = this.el.nativeElement.querySelectorAll('a,input,select,textarea,button,mat-select,mat-tab,.mdc-tab');
16
- controls.forEach((control) => {
17
- if (this.active) {
18
- control.tabIndex = 0;
19
- control.disabled = false;
20
- }
21
- else {
22
- control.tabIndex = -1;
23
- control.disabled = true;
24
- }
25
- });
18
+ setWindowState = () => {
26
19
  if (this.active)
27
20
  this.el.nativeElement.classList.remove('desktop-window-disabled');
28
21
  else
29
22
  this.el.nativeElement.classList.add('desktop-window-disabled');
23
+ };
24
+ handleEventBoundries = (target) => {
25
+ this.focusableElements = 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
+ let firstFocusableElement = this.focusableElements[0];
27
+ let lastFocusableElement = this.focusableElements[this.focusableElements.length - 1];
28
+ if (target !== null && !this.el.nativeElement.contains(target)) {
29
+ firstFocusableElement.focus();
30
+ }
30
31
  this.cdRef.detectChanges();
31
32
  };
32
33
  onKeydown(event) {
33
34
  if (!this.active) {
34
35
  event.preventDefault();
35
36
  }
37
+ else {
38
+ this.handleEventBoundries(event.target);
39
+ }
36
40
  }
37
41
  onFocusIn(event) {
38
42
  if (!this.active) {
39
43
  event.preventDefault();
40
44
  }
45
+ else {
46
+ this.handleEventBoundries(event.target);
47
+ }
41
48
  }
42
49
  ngOnChanges(changes) {
43
- this.updateState();
50
+ this.setWindowState();
44
51
  this.windowEventHandler.activeStateChanged(this.active);
45
52
  }
46
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.TruWindowEventHandler }], target: i0.ɵɵFactoryTarget.Directive });
47
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: TruDesktopWindowStateMonitor, selector: "[truDesktopWindowStateMonitor]", inputs: { active: ["truDesktopWindowStateMonitor", "active"] }, host: { listeners: { "keydown.tab": "onKeydown($event)", "focusin": "onFocusIn($event)" } }, usesOnChanges: true, ngImport: i0 });
53
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.TruUtil }, { token: i2.TruWindowEventHandler }], target: i0.ɵɵFactoryTarget.Directive });
54
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: TruDesktopWindowStateMonitor, selector: "[truDesktopWindowStateMonitor]", inputs: { active: ["truDesktopWindowStateMonitor", "active"] }, host: { listeners: { "document:keydown.tab": "onKeydown($event)", "document:focusin": "onFocusIn($event)" } }, usesOnChanges: true, ngImport: i0 });
48
55
  }
49
56
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, decorators: [{
50
57
  type: Directive,
51
58
  args: [{
52
59
  selector: '[truDesktopWindowStateMonitor]'
53
60
  }]
54
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.TruWindowEventHandler }], propDecorators: { active: [{
61
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.TruUtil }, { type: i2.TruWindowEventHandler }], propDecorators: { active: [{
55
62
  type: Input,
56
63
  args: ['truDesktopWindowStateMonitor']
57
64
  }], onKeydown: [{
58
65
  type: HostListener,
59
- args: ['keydown.tab', ['$event']]
66
+ args: ['document:keydown.tab', ['$event']]
60
67
  }], onFocusIn: [{
61
68
  type: HostListener,
62
- args: ['focusin', ['$event']]
69
+ args: ['document:focusin', ['$event']]
63
70
  }] } });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3Atd2luZG93LXN0YXRlLW1vbml0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZGVza3RvcC9kaXJlY3RpdmVzL3dpbmRvdy1zdGF0ZS1tb25pdG9yL3RydS1kZXNrdG9wLXdpbmRvdy1zdGF0ZS1tb25pdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7QUFNN0csTUFBTSxPQUFPLDRCQUE0QjtJQUk3QjtJQUNBO0lBQ0E7SUFMNkIsTUFBTSxHQUFZLElBQUksQ0FBQztJQUU5RCxZQUNVLEVBQWMsRUFDZCxLQUF3QixFQUN4QixrQkFBeUM7UUFGekMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBdUI7SUFBSSxDQUFDO0lBRWhELFdBQVcsR0FBRyxHQUFHLEVBQUU7UUFDekIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUNwSCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixPQUFPLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQzs7WUFFbEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQyxDQUFBO0lBR0QsU0FBUyxDQUFDLEtBQW9CO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxDQUFDLEtBQWlCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7dUdBM0NVLDRCQUE0QjsyRkFBNUIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQUh4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQ0FBZ0M7aUJBQzNDO21KQUV3QyxNQUFNO3NCQUE1QyxLQUFLO3VCQUFDLDhCQUE4QjtnQkEwQnJDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUXZDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS13aW5kb3ctZXZlbnQtaGFuZGxlcic7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1t0cnVEZXNrdG9wV2luZG93U3RhdGVNb25pdG9yXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRydURlc2t0b3BXaW5kb3dTdGF0ZU1vbml0b3Ige1xyXG4gIEBJbnB1dCgndHJ1RGVza3RvcFdpbmRvd1N0YXRlTW9uaXRvcicpIGFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSB3aW5kb3dFdmVudEhhbmRsZXI6IFRydVdpbmRvd0V2ZW50SGFuZGxlcikgeyB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU3RhdGUgPSAoKSA9PiB7XHJcbiAgICB2YXIgY29udHJvbHMgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYSxpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uLG1hdC1zZWxlY3QsbWF0LXRhYiwubWRjLXRhYicpO1xyXG4gICAgY29udHJvbHMuZm9yRWFjaCgoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xyXG4gICAgICAgIGNvbnRyb2wudGFiSW5kZXggPSAwO1xyXG4gICAgICAgIGNvbnRyb2wuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb250cm9sLnRhYkluZGV4ID0gLTE7XHJcbiAgICAgICAgY29udHJvbC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlKVxyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZGVza3RvcC13aW5kb3ctZGlzYWJsZWQnKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Rlc2t0b3Atd2luZG93LWRpc2FibGVkJyk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24udGFiJywgWyckZXZlbnQnXSlcclxuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5hY3RpdmUpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzaW4nLCBbJyRldmVudCddKVxyXG4gIG9uRm9jdXNJbihldmVudDogRm9jdXNFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSgpO1xyXG4gICAgdGhpcy53aW5kb3dFdmVudEhhbmRsZXIuYWN0aXZlU3RhdGVDaGFuZ2VkKHRoaXMuYWN0aXZlKTtcclxuICB9XHJcbn1cclxuIl19
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3Atd2luZG93LXN0YXRlLW1vbml0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZGVza3RvcC9kaXJlY3RpdmVzL3dpbmRvdy1zdGF0ZS1tb25pdG9yL3RydS1kZXNrdG9wLXdpbmRvdy1zdGF0ZS1tb25pdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7O0FBTzdHLE1BQU0sT0FBTyw0QkFBNEI7SUFNN0I7SUFDQTtJQUNBO0lBQ0E7SUFSNkIsTUFBTSxHQUFZLElBQUksQ0FBQztJQUV0RCxpQkFBaUIsR0FBdUIsRUFBRSxDQUFDO0lBRW5ELFlBQ1UsRUFBYyxFQUNkLEtBQXdCLEVBQ3hCLElBQWEsRUFDYixrQkFBeUM7UUFIekMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQVM7UUFDYix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO0lBQUksQ0FBQztJQUVoRCxjQUFjLEdBQUcsR0FBRyxFQUFFO1FBQzVCLElBQUksSUFBSSxDQUFDLE1BQU07WUFDYixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7O1lBRWxFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUE7SUFFTyxvQkFBb0IsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRTtRQUM1RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsMEhBQTBILENBQUMsQ0FBQztRQUU1TCxJQUFJLHFCQUFxQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBS3JGLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQy9ELHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUMsQ0FBQTtJQUdELFNBQVMsQ0FBQyxLQUFvQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsTUFBcUIsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxDQUFDLEtBQWlCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLENBQUE7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQzt1R0F0RFUsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7OzJGQUE1Qiw0QkFBNEI7a0JBSHhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztpQkFDM0M7eUtBRXdDLE1BQU07c0JBQTVDLEtBQUs7dUJBQUMsOEJBQThCO2dCQWlDckMsU0FBUztzQkFEUixZQUFZO3VCQUFDLHNCQUFzQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVVoRCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS13aW5kb3ctZXZlbnQtaGFuZGxlcic7XHJcbmltcG9ydCB7IFRydVV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90cnUtdXRpbCc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1t0cnVEZXNrdG9wV2luZG93U3RhdGVNb25pdG9yXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRydURlc2t0b3BXaW5kb3dTdGF0ZU1vbml0b3Ige1xyXG4gIEBJbnB1dCgndHJ1RGVza3RvcFdpbmRvd1N0YXRlTW9uaXRvcicpIGFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgZm9jdXNhYmxlRWxlbWVudHM6IEFycmF5PEhUTUxFbGVtZW50PiA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgdXRpbDogVHJ1VXRpbCxcclxuICAgIHByaXZhdGUgd2luZG93RXZlbnRIYW5kbGVyOiBUcnVXaW5kb3dFdmVudEhhbmRsZXIpIHsgfVxyXG5cclxuICBwcml2YXRlIHNldFdpbmRvd1N0YXRlID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlKVxyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZGVza3RvcC13aW5kb3ctZGlzYWJsZWQnKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Rlc2t0b3Atd2luZG93LWRpc2FibGVkJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUV2ZW50Qm91bmRyaWVzID0gKHRhcmdldDogSFRNTEVsZW1lbnQgfCBudWxsKSA9PiB7XHJcbiAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2FbaHJlZl0saW5wdXQsc2VsZWN0LHRleHRhcmVhLGJ1dHRvbixtYXQtc2VsZWN0LG1hdC10YWIsLm1kYy10YWIsLmFnLWhlYWRlci1jZWxsLC5hZy1jZWxsLFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdJyk7XHJcblxyXG4gICAgbGV0IGZpcnN0Rm9jdXNhYmxlRWxlbWVudCA9IHRoaXMuZm9jdXNhYmxlRWxlbWVudHNbMF07XHJcbiAgICBsZXQgbGFzdEZvY3VzYWJsZUVsZW1lbnQgPSB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzW3RoaXMuZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMV07XHJcblxyXG5cclxuXHJcblxyXG4gICAgaWYgKHRhcmdldCAhPT0gbnVsbCAmJiAhdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcclxuICAgICAgZmlyc3RGb2N1c2FibGVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24udGFiJywgWyckZXZlbnQnXSlcclxuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5hY3RpdmUpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXZlbnRCb3VuZHJpZXMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmZvY3VzaW4nLCBbJyRldmVudCddKVxyXG4gIG9uRm9jdXNJbihldmVudDogRm9jdXNFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oYW5kbGVFdmVudEJvdW5kcmllcyhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFdpbmRvd1N0YXRlKCk7XHJcbiAgICB0aGlzLndpbmRvd0V2ZW50SGFuZGxlci5hY3RpdmVTdGF0ZUNoYW5nZWQodGhpcy5hY3RpdmUpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -8247,62 +8247,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
8247
8247
  class TruDesktopWindowStateMonitor {
8248
8248
  el;
8249
8249
  cdRef;
8250
+ util;
8250
8251
  windowEventHandler;
8251
8252
  active = true;
8252
- constructor(el, cdRef, windowEventHandler) {
8253
+ focusableElements = [];
8254
+ constructor(el, cdRef, util, windowEventHandler) {
8253
8255
  this.el = el;
8254
8256
  this.cdRef = cdRef;
8257
+ this.util = util;
8255
8258
  this.windowEventHandler = windowEventHandler;
8256
8259
  }
8257
- updateState = () => {
8258
- var controls = this.el.nativeElement.querySelectorAll('a,input,select,textarea,button,mat-select,mat-tab,.mdc-tab');
8259
- controls.forEach((control) => {
8260
- if (this.active) {
8261
- control.tabIndex = 0;
8262
- control.disabled = false;
8263
- }
8264
- else {
8265
- control.tabIndex = -1;
8266
- control.disabled = true;
8267
- }
8268
- });
8260
+ setWindowState = () => {
8269
8261
  if (this.active)
8270
8262
  this.el.nativeElement.classList.remove('desktop-window-disabled');
8271
8263
  else
8272
8264
  this.el.nativeElement.classList.add('desktop-window-disabled');
8265
+ };
8266
+ handleEventBoundries = (target) => {
8267
+ this.focusableElements = 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
+ let firstFocusableElement = this.focusableElements[0];
8269
+ let lastFocusableElement = this.focusableElements[this.focusableElements.length - 1];
8270
+ if (target !== null && !this.el.nativeElement.contains(target)) {
8271
+ firstFocusableElement.focus();
8272
+ }
8273
8273
  this.cdRef.detectChanges();
8274
8274
  };
8275
8275
  onKeydown(event) {
8276
8276
  if (!this.active) {
8277
8277
  event.preventDefault();
8278
8278
  }
8279
+ else {
8280
+ this.handleEventBoundries(event.target);
8281
+ }
8279
8282
  }
8280
8283
  onFocusIn(event) {
8281
8284
  if (!this.active) {
8282
8285
  event.preventDefault();
8283
8286
  }
8287
+ else {
8288
+ this.handleEventBoundries(event.target);
8289
+ }
8284
8290
  }
8285
8291
  ngOnChanges(changes) {
8286
- this.updateState();
8292
+ this.setWindowState();
8287
8293
  this.windowEventHandler.activeStateChanged(this.active);
8288
8294
  }
8289
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: TruWindowEventHandler }], target: i0.ɵɵFactoryTarget.Directive });
8290
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: TruDesktopWindowStateMonitor, selector: "[truDesktopWindowStateMonitor]", inputs: { active: ["truDesktopWindowStateMonitor", "active"] }, host: { listeners: { "keydown.tab": "onKeydown($event)", "focusin": "onFocusIn($event)" } }, usesOnChanges: true, ngImport: i0 });
8295
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: TruUtil }, { token: TruWindowEventHandler }], target: i0.ɵɵFactoryTarget.Directive });
8296
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: TruDesktopWindowStateMonitor, selector: "[truDesktopWindowStateMonitor]", inputs: { active: ["truDesktopWindowStateMonitor", "active"] }, host: { listeners: { "document:keydown.tab": "onKeydown($event)", "document:focusin": "onFocusIn($event)" } }, usesOnChanges: true, ngImport: i0 });
8291
8297
  }
8292
8298
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, decorators: [{
8293
8299
  type: Directive,
8294
8300
  args: [{
8295
8301
  selector: '[truDesktopWindowStateMonitor]'
8296
8302
  }]
8297
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: TruWindowEventHandler }], propDecorators: { active: [{
8303
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: TruUtil }, { type: TruWindowEventHandler }], propDecorators: { active: [{
8298
8304
  type: Input,
8299
8305
  args: ['truDesktopWindowStateMonitor']
8300
8306
  }], onKeydown: [{
8301
8307
  type: HostListener,
8302
- args: ['keydown.tab', ['$event']]
8308
+ args: ['document:keydown.tab', ['$event']]
8303
8309
  }], onFocusIn: [{
8304
8310
  type: HostListener,
8305
- args: ['focusin', ['$event']]
8311
+ args: ['document:focusin', ['$event']]
8306
8312
  }] } });
8307
8313
 
8308
8314
  class TruDesktopWindow {