@trudb/tru-common-lib 0.1.698 → 0.1.699

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,73 @@
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
18
  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
- });
19
+ 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"]');
20
+ let firstFocusableElement = this.focusableElements[0];
21
+ let lastFocusableElement = this.focusableElements[this.focusableElements.length - 1];
26
22
  if (this.active)
27
23
  this.el.nativeElement.classList.remove('desktop-window-disabled');
28
24
  else
29
25
  this.el.nativeElement.classList.add('desktop-window-disabled');
30
26
  this.cdRef.detectChanges();
27
+ firstFocusableElement.focus();
31
28
  };
32
29
  onKeydown(event) {
33
30
  if (!this.active) {
34
31
  event.preventDefault();
35
32
  }
33
+ else {
34
+ if (!this.el.nativeElement.contains(event.target)) {
35
+ let firstFocusableElement = this.focusableElements[0];
36
+ firstFocusableElement.focus();
37
+ }
38
+ }
36
39
  }
37
40
  onFocusIn(event) {
38
41
  if (!this.active) {
39
42
  event.preventDefault();
40
43
  }
44
+ else {
45
+ if (!this.el.nativeElement.contains(event.target)) {
46
+ let firstFocusableElement = this.focusableElements[0];
47
+ firstFocusableElement.focus();
48
+ }
49
+ }
41
50
  }
42
51
  ngOnChanges(changes) {
43
52
  this.updateState();
44
53
  this.windowEventHandler.activeStateChanged(this.active);
45
54
  }
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 });
55
+ 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 });
56
+ 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
57
  }
49
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, decorators: [{
50
59
  type: Directive,
51
60
  args: [{
52
61
  selector: '[truDesktopWindowStateMonitor]'
53
62
  }]
54
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.TruWindowEventHandler }], propDecorators: { active: [{
63
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.TruUtil }, { type: i2.TruWindowEventHandler }], propDecorators: { active: [{
55
64
  type: Input,
56
65
  args: ['truDesktopWindowStateMonitor']
57
66
  }], onKeydown: [{
58
67
  type: HostListener,
59
- args: ['keydown.tab', ['$event']]
68
+ args: ['document:keydown.tab', ['$event']]
60
69
  }], onFocusIn: [{
61
70
  type: HostListener,
62
- args: ['focusin', ['$event']]
71
+ args: ['document:focusin', ['$event']]
63
72
  }] } });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3Atd2luZG93LXN0YXRlLW1vbml0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZGVza3RvcC9kaXJlY3RpdmVzL3dpbmRvdy1zdGF0ZS1tb25pdG9yL3RydS1kZXNrdG9wLXdpbmRvdy1zdGF0ZS1tb25pdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7QUFNN0csTUFBTSxPQUFPLDRCQUE0QjtJQUk3QjtJQUNBO0lBQ0E7SUFMNkIsTUFBTSxHQUFZLElBQUksQ0FBQztJQUU5RCxZQUNVLEVBQWMsRUFDZCxLQUF3QixFQUN4QixrQkFBeUM7UUFGekMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBdUI7SUFBSSxDQUFDO0lBRWhELFdBQVcsR0FBRyxHQUFHLEVBQUU7UUFDekIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUNwSCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixPQUFPLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQzs7WUFFbEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQyxDQUFBO0lBR0QsU0FBUyxDQUFDLEtBQW9CO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxDQUFDLEtBQWlCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7dUdBM0NVLDRCQUE0QjsyRkFBNUIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQUh4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQ0FBZ0M7aUJBQzNDO21KQUV3QyxNQUFNO3NCQUE1QyxLQUFLO3VCQUFDLDhCQUE4QjtnQkEwQnJDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUXZDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS13aW5kb3ctZXZlbnQtaGFuZGxlcic7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1t0cnVEZXNrdG9wV2luZG93U3RhdGVNb25pdG9yXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRydURlc2t0b3BXaW5kb3dTdGF0ZU1vbml0b3Ige1xyXG4gIEBJbnB1dCgndHJ1RGVza3RvcFdpbmRvd1N0YXRlTW9uaXRvcicpIGFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSB3aW5kb3dFdmVudEhhbmRsZXI6IFRydVdpbmRvd0V2ZW50SGFuZGxlcikgeyB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU3RhdGUgPSAoKSA9PiB7XHJcbiAgICB2YXIgY29udHJvbHMgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYSxpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uLG1hdC1zZWxlY3QsbWF0LXRhYiwubWRjLXRhYicpO1xyXG4gICAgY29udHJvbHMuZm9yRWFjaCgoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xyXG4gICAgICAgIGNvbnRyb2wudGFiSW5kZXggPSAwO1xyXG4gICAgICAgIGNvbnRyb2wuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb250cm9sLnRhYkluZGV4ID0gLTE7XHJcbiAgICAgICAgY29udHJvbC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlKVxyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZGVza3RvcC13aW5kb3ctZGlzYWJsZWQnKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Rlc2t0b3Atd2luZG93LWRpc2FibGVkJyk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24udGFiJywgWyckZXZlbnQnXSlcclxuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5hY3RpdmUpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzaW4nLCBbJyRldmVudCddKVxyXG4gIG9uRm9jdXNJbihldmVudDogRm9jdXNFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSgpO1xyXG4gICAgdGhpcy53aW5kb3dFdmVudEhhbmRsZXIuYWN0aXZlU3RhdGVDaGFuZ2VkKHRoaXMuYWN0aXZlKTtcclxuICB9XHJcbn1cclxuIl19
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3Atd2luZG93LXN0YXRlLW1vbml0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZGVza3RvcC9kaXJlY3RpdmVzL3dpbmRvdy1zdGF0ZS1tb25pdG9yL3RydS1kZXNrdG9wLXdpbmRvdy1zdGF0ZS1tb25pdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7O0FBTzdHLE1BQU0sT0FBTyw0QkFBNEI7SUFNN0I7SUFDQTtJQUNBO0lBQ0E7SUFSNkIsTUFBTSxHQUFZLElBQUksQ0FBQztJQUV0RCxpQkFBaUIsR0FBdUIsRUFBRSxDQUFDO0lBRW5ELFlBQ1UsRUFBYyxFQUNkLEtBQXdCLEVBQ3hCLElBQWEsRUFDYixrQkFBeUM7UUFIekMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQVM7UUFDYix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO0lBQUksQ0FBQztJQUdoRCxXQUFXLEdBQUcsR0FBRyxFQUFFO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQywwSEFBMEgsQ0FBQyxDQUFDO1FBRTVMLElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFHckYsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQzs7WUFFbEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEMsQ0FBQyxDQUFBO0lBR0QsU0FBUyxDQUFDLEtBQW9CO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsQ0FBQyxLQUFpQjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQzt1R0F0RFUsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7OzJGQUE1Qiw0QkFBNEI7a0JBSHhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztpQkFDM0M7eUtBRXdDLE1BQU07c0JBQTVDLEtBQUs7dUJBQUMsOEJBQThCO2dCQTJCckMsU0FBUztzQkFEUixZQUFZO3VCQUFDLHNCQUFzQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWFoRCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS13aW5kb3ctZXZlbnQtaGFuZGxlcic7XHJcbmltcG9ydCB7IFRydVV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90cnUtdXRpbCc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1t0cnVEZXNrdG9wV2luZG93U3RhdGVNb25pdG9yXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRydURlc2t0b3BXaW5kb3dTdGF0ZU1vbml0b3Ige1xyXG4gIEBJbnB1dCgndHJ1RGVza3RvcFdpbmRvd1N0YXRlTW9uaXRvcicpIGFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgZm9jdXNhYmxlRWxlbWVudHM6IEFycmF5PEhUTUxFbGVtZW50PiA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgdXRpbDogVHJ1VXRpbCxcclxuICAgIHByaXZhdGUgd2luZG93RXZlbnRIYW5kbGVyOiBUcnVXaW5kb3dFdmVudEhhbmRsZXIpIHsgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZSA9ICgpID0+IHtcclxuICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudHMgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYVtocmVmXSxpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uLG1hdC1zZWxlY3QsbWF0LXRhYiwubWRjLXRhYiwuYWctaGVhZGVyLWNlbGwsLmFnLWNlbGwsW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0nKTtcclxuXHJcbiAgICBsZXQgZmlyc3RGb2N1c2FibGVFbGVtZW50ID0gdGhpcy5mb2N1c2FibGVFbGVtZW50c1swXTtcclxuICAgIGxldCBsYXN0Rm9jdXNhYmxlRWxlbWVudCA9IHRoaXMuZm9jdXNhYmxlRWxlbWVudHNbdGhpcy5mb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxXTtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZlKVxyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZGVza3RvcC13aW5kb3ctZGlzYWJsZWQnKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Rlc2t0b3Atd2luZG93LWRpc2FibGVkJyk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGZpcnN0Rm9jdXNhYmxlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi50YWInLCBbJyRldmVudCddKVxyXG4gIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xyXG4gICAgICAgIGxldCBmaXJzdEZvY3VzYWJsZUVsZW1lbnQgPSB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzWzBdO1xyXG4gICAgICAgIGZpcnN0Rm9jdXNhYmxlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpmb2N1c2luJywgWyckZXZlbnQnXSlcclxuICBvbkZvY3VzSW4oZXZlbnQ6IEZvY3VzRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5hY3RpdmUpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgICBsZXQgZmlyc3RGb2N1c2FibGVFbGVtZW50ID0gdGhpcy5mb2N1c2FibGVFbGVtZW50c1swXTtcclxuICAgICAgICBmaXJzdEZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSgpO1xyXG4gICAgdGhpcy53aW5kb3dFdmVudEhhbmRsZXIuYWN0aXZlU3RhdGVDaGFuZ2VkKHRoaXMuYWN0aXZlKTtcclxuICB9XHJcbn1cclxuIl19
@@ -8247,62 +8247,70 @@ 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
8260
  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
- });
8261
+ 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"]');
8262
+ let firstFocusableElement = this.focusableElements[0];
8263
+ let lastFocusableElement = this.focusableElements[this.focusableElements.length - 1];
8269
8264
  if (this.active)
8270
8265
  this.el.nativeElement.classList.remove('desktop-window-disabled');
8271
8266
  else
8272
8267
  this.el.nativeElement.classList.add('desktop-window-disabled');
8273
8268
  this.cdRef.detectChanges();
8269
+ firstFocusableElement.focus();
8274
8270
  };
8275
8271
  onKeydown(event) {
8276
8272
  if (!this.active) {
8277
8273
  event.preventDefault();
8278
8274
  }
8275
+ else {
8276
+ if (!this.el.nativeElement.contains(event.target)) {
8277
+ let firstFocusableElement = this.focusableElements[0];
8278
+ firstFocusableElement.focus();
8279
+ }
8280
+ }
8279
8281
  }
8280
8282
  onFocusIn(event) {
8281
8283
  if (!this.active) {
8282
8284
  event.preventDefault();
8283
8285
  }
8286
+ else {
8287
+ if (!this.el.nativeElement.contains(event.target)) {
8288
+ let firstFocusableElement = this.focusableElements[0];
8289
+ firstFocusableElement.focus();
8290
+ }
8291
+ }
8284
8292
  }
8285
8293
  ngOnChanges(changes) {
8286
8294
  this.updateState();
8287
8295
  this.windowEventHandler.activeStateChanged(this.active);
8288
8296
  }
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 });
8297
+ 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 });
8298
+ 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
8299
  }
8292
8300
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindowStateMonitor, decorators: [{
8293
8301
  type: Directive,
8294
8302
  args: [{
8295
8303
  selector: '[truDesktopWindowStateMonitor]'
8296
8304
  }]
8297
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: TruWindowEventHandler }], propDecorators: { active: [{
8305
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: TruUtil }, { type: TruWindowEventHandler }], propDecorators: { active: [{
8298
8306
  type: Input,
8299
8307
  args: ['truDesktopWindowStateMonitor']
8300
8308
  }], onKeydown: [{
8301
8309
  type: HostListener,
8302
- args: ['keydown.tab', ['$event']]
8310
+ args: ['document:keydown.tab', ['$event']]
8303
8311
  }], onFocusIn: [{
8304
8312
  type: HostListener,
8305
- args: ['focusin', ['$event']]
8313
+ args: ['document:focusin', ['$event']]
8306
8314
  }] } });
8307
8315
 
8308
8316
  class TruDesktopWindow {