@trudb/tru-common-lib 0.0.310 → 0.0.313

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.
Files changed (27) hide show
  1. package/esm2020/lib/base-classes/tru-edit-control-config-base.mjs +1 -1
  2. package/esm2020/lib/components/login/classes/tru-auth-config.mjs +8 -0
  3. package/esm2020/lib/components/login/classes/tru-auth-jwt-strategy.mjs +39 -0
  4. package/esm2020/lib/components/login/classes/tru-auth-login-request.mjs +3 -0
  5. package/esm2020/lib/components/login/classes/tru-auth-token.mjs +6 -0
  6. package/esm2020/lib/components/login/services/tru-auth-cache.mjs +19 -0
  7. package/esm2020/lib/components/login/services/tru-auth-interceptor.mjs +39 -0
  8. package/esm2020/lib/components/login/services/tru-auth.mjs +66 -0
  9. package/esm2020/lib/components/login/tru-login-module.mjs +20 -0
  10. package/esm2020/lib/components/login/tru-login.mjs +54 -0
  11. package/esm2020/public-api.mjs +4 -1
  12. package/fesm2015/trudb-tru-common-lib.mjs +415 -15
  13. package/fesm2015/trudb-tru-common-lib.mjs.map +1 -1
  14. package/fesm2020/trudb-tru-common-lib.mjs +411 -15
  15. package/fesm2020/trudb-tru-common-lib.mjs.map +1 -1
  16. package/lib/base-classes/tru-edit-control-config-base.d.ts +0 -1
  17. package/lib/components/login/classes/tru-auth-config.d.ts +16 -0
  18. package/lib/components/login/classes/tru-auth-jwt-strategy.d.ts +13 -0
  19. package/lib/components/login/classes/tru-auth-login-request.d.ts +4 -0
  20. package/lib/components/login/classes/tru-auth-token.d.ts +4 -0
  21. package/lib/components/login/services/tru-auth-cache.d.ts +11 -0
  22. package/lib/components/login/services/tru-auth-interceptor.d.ts +14 -0
  23. package/lib/components/login/services/tru-auth.d.ts +26 -0
  24. package/lib/components/login/tru-login-module.d.ts +10 -0
  25. package/lib/components/login/tru-login.d.ts +19 -0
  26. package/package.json +1 -1
  27. package/public-api.d.ts +3 -0
@@ -1,15 +1,15 @@
1
1
  import { EntityAspect, BinaryPredicate, AndOrPredicate, breeze, MetadataStore, DataService, EntityManager, EntityQuery, FetchStrategy, EntityState } from 'breeze-client';
2
2
  import * as i0 from '@angular/core';
3
- import { Directive, Input, Component, NgModule, Injectable, Inject, HostListener, EventEmitter, ViewEncapsulation, Output, APP_INITIALIZER } from '@angular/core';
3
+ import { Directive, Input, Component, NgModule, Injectable, Inject, HostListener, EventEmitter, ViewEncapsulation, Output, APP_INITIALIZER, InjectionToken } from '@angular/core';
4
4
  import * as i1$3 from '@angular/common';
5
5
  import { CommonModule } from '@angular/common';
6
- import * as i2 from '@angular/forms';
7
- import { FormsModule } from '@angular/forms';
8
- import { Subject, BehaviorSubject, defer, from, of, skip, forkJoin } from 'rxjs';
6
+ import * as i7 from '@angular/forms';
7
+ import { FormsModule, FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms';
8
+ import { Subject, BehaviorSubject, defer, from, of, skip, forkJoin, throwError } from 'rxjs';
9
9
  import * as _ from 'underscore';
10
10
  import moment from 'moment/moment';
11
11
  import * as i1 from '@angular/material/dialog';
12
- import { MAT_DIALOG_DATA } from '@angular/material/dialog';
12
+ import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
13
13
  import * as i1$2 from '@angular/common/http';
14
14
  import { HttpClientModule } from '@angular/common/http';
15
15
  import * as i3 from '@angular/material/checkbox';
@@ -17,18 +17,60 @@ import { MatCheckboxModule } from '@angular/material/checkbox';
17
17
  import * as i1$1 from 'ngx-toastr';
18
18
  import * as i6 from 'ag-grid-angular';
19
19
  import { AgGridModule } from 'ag-grid-angular';
20
- import * as i2$1 from '@angular/material/icon';
20
+ import * as i2 from '@angular/material/icon';
21
21
  import { MatIconModule } from '@angular/material/icon';
22
22
  import * as i3$1 from '@angular/material/form-field';
23
23
  import * as i1$4 from '@angular/material/select';
24
24
  import { MatSelectModule } from '@angular/material/select';
25
25
  import * as i5 from '@angular/material/core';
26
- import { MatOptionModule } from '@angular/material/core';
26
+ import { MatOptionModule, MatNativeDateModule, MatRippleModule } from '@angular/material/core';
27
+ import * as i3$2 from '@angular/material/button';
27
28
  import { MatButtonModule } from '@angular/material/button';
29
+ import * as i5$1 from '@angular/material/input';
28
30
  import { MatInputModule } from '@angular/material/input';
29
- import * as i1$5 from '@angular/platform-browser';
31
+ import * as i1$6 from '@angular/platform-browser';
30
32
  import { BrowserModule } from '@angular/platform-browser';
31
33
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
34
+ import { tap, map, catchError } from 'rxjs/operators';
35
+ import * as i1$5 from '@angular/router';
36
+ import * as i4 from '@angular/material/card';
37
+ import { MatCardModule } from '@angular/material/card';
38
+ import { A11yModule } from '@angular/cdk/a11y';
39
+ import { CdkAccordionModule } from '@angular/cdk/accordion';
40
+ import { ClipboardModule } from '@angular/cdk/clipboard';
41
+ import { DragDropModule } from '@angular/cdk/drag-drop';
42
+ import { PortalModule } from '@angular/cdk/portal';
43
+ import { ScrollingModule } from '@angular/cdk/scrolling';
44
+ import { CdkStepperModule } from '@angular/cdk/stepper';
45
+ import { CdkTableModule } from '@angular/cdk/table';
46
+ import { CdkTreeModule } from '@angular/cdk/tree';
47
+ import { MatAutocompleteModule } from '@angular/material/autocomplete';
48
+ import { MatBadgeModule } from '@angular/material/badge';
49
+ import { MatBottomSheetModule } from '@angular/material/bottom-sheet';
50
+ import { MatButtonToggleModule } from '@angular/material/button-toggle';
51
+ import { MatChipsModule } from '@angular/material/chips';
52
+ import { MatStepperModule } from '@angular/material/stepper';
53
+ import { MatDatepickerModule } from '@angular/material/datepicker';
54
+ import { MatDividerModule } from '@angular/material/divider';
55
+ import { MatExpansionModule } from '@angular/material/expansion';
56
+ import { MatGridListModule } from '@angular/material/grid-list';
57
+ import { MatListModule } from '@angular/material/list';
58
+ import { MatMenuModule } from '@angular/material/menu';
59
+ import { MatPaginatorModule } from '@angular/material/paginator';
60
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
61
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
62
+ import { MatRadioModule } from '@angular/material/radio';
63
+ import { MatSidenavModule } from '@angular/material/sidenav';
64
+ import { MatSliderModule } from '@angular/material/slider';
65
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
66
+ import { MatSnackBarModule } from '@angular/material/snack-bar';
67
+ import { MatSortModule } from '@angular/material/sort';
68
+ import { MatTableModule } from '@angular/material/table';
69
+ import { MatTabsModule } from '@angular/material/tabs';
70
+ import { MatToolbarModule } from '@angular/material/toolbar';
71
+ import { MatTooltipModule } from '@angular/material/tooltip';
72
+ import { MatTreeModule } from '@angular/material/tree';
73
+ import { OverlayModule } from '@angular/cdk/overlay';
32
74
 
33
75
  class TruComponentConfigBase {
34
76
  constructor() { }
@@ -1132,7 +1174,7 @@ class TruExportDialog {
1132
1174
  ngOnInit() { }
1133
1175
  }
1134
1176
  TruExportDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruExportDialog, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
1135
- TruExportDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: TruExportDialog, selector: "tru-export-dialog", host: { listeners: { "document:keypress": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<h1 mat-dialog-title>\r\n {{title}}\r\n</h1>\r\n\r\n<div mat-dialog-content>\r\n <table>\r\n <tbody>\r\n <tr>\r\n <td class=\"export-dialog-checkbox-container\" title=\"To support importing the export file: use names instead of labels.\">\r\n <mat-checkbox \r\n [(ngModel)]=\"options.useNames\"\r\n (change)=\"onFormatForImportChecked()\"\r\n [labelPosition]=\"'after'\">\r\n Format for import\r\n </mat-checkbox>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td class=\"export-dialog-checkbox-container\" title=\"Export only the rows in the grid. When unchecked, exports the results of a new search without limiting result count as is a normal search.\">\r\n <mat-checkbox \r\n [(ngModel)]=\"options.useGrid\"\r\n [labelPosition]=\"'after'\">\r\n Export grid rows\r\n </mat-checkbox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<div mat-dialog-actions>\r\n <button mat-button (click)=\"onDismiss()\">No</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"onConfirm()\">Yes</button>\r\n</div>\r\n", styles: [".mat-mdc-dialog-content{overflow:hidden}.export-dialog-checkbox-container{padding-bottom:5px;display:inline-block}\n"], dependencies: [{ kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
1177
+ TruExportDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: TruExportDialog, selector: "tru-export-dialog", host: { listeners: { "document:keypress": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<h1 mat-dialog-title>\r\n {{title}}\r\n</h1>\r\n\r\n<div mat-dialog-content>\r\n <table>\r\n <tbody>\r\n <tr>\r\n <td class=\"export-dialog-checkbox-container\" title=\"To support importing the export file: use names instead of labels.\">\r\n <mat-checkbox \r\n [(ngModel)]=\"options.useNames\"\r\n (change)=\"onFormatForImportChecked()\"\r\n [labelPosition]=\"'after'\">\r\n Format for import\r\n </mat-checkbox>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td class=\"export-dialog-checkbox-container\" title=\"Export only the rows in the grid. When unchecked, exports the results of a new search without limiting result count as is a normal search.\">\r\n <mat-checkbox \r\n [(ngModel)]=\"options.useGrid\"\r\n [labelPosition]=\"'after'\">\r\n Export grid rows\r\n </mat-checkbox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<div mat-dialog-actions>\r\n <button mat-button (click)=\"onDismiss()\">No</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"onConfirm()\">Yes</button>\r\n</div>\r\n", styles: [".mat-mdc-dialog-content{overflow:hidden}.export-dialog-checkbox-container{padding-bottom:5px;display:inline-block}\n"], dependencies: [{ kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
1136
1178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruExportDialog, decorators: [{
1137
1179
  type: Component,
1138
1180
  args: [{ selector: 'tru-export-dialog', template: "<h1 mat-dialog-title>\r\n {{title}}\r\n</h1>\r\n\r\n<div mat-dialog-content>\r\n <table>\r\n <tbody>\r\n <tr>\r\n <td class=\"export-dialog-checkbox-container\" title=\"To support importing the export file: use names instead of labels.\">\r\n <mat-checkbox \r\n [(ngModel)]=\"options.useNames\"\r\n (change)=\"onFormatForImportChecked()\"\r\n [labelPosition]=\"'after'\">\r\n Format for import\r\n </mat-checkbox>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td class=\"export-dialog-checkbox-container\" title=\"Export only the rows in the grid. When unchecked, exports the results of a new search without limiting result count as is a normal search.\">\r\n <mat-checkbox \r\n [(ngModel)]=\"options.useGrid\"\r\n [labelPosition]=\"'after'\">\r\n Export grid rows\r\n </mat-checkbox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<div mat-dialog-actions>\r\n <button mat-button (click)=\"onDismiss()\">No</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"onConfirm()\">Yes</button>\r\n</div>\r\n", styles: [".mat-mdc-dialog-content{overflow:hidden}.export-dialog-checkbox-container{padding-bottom:5px;display:inline-block}\n"] }]
@@ -1648,7 +1690,7 @@ class TruToolbarButton {
1648
1690
  }
1649
1691
  }
1650
1692
  TruToolbarButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruToolbarButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
1651
- TruToolbarButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: TruToolbarButton, selector: "tru-toolbar-button", inputs: { config: "config", icon: "icon", text: "text", disabled: "disabled", tooltip: "tooltip", type: "type" }, outputs: { onClick: "onClick" }, ngImport: i0, template: "<button\r\n class=\"toolbar-btn toolbar-btn-default\"\r\n title=\"{{ tooltip }}\"\r\n tabindex=\"-1\"\r\n [attr.disabled]=\"disabled ? '' : null\"\r\n (click)=\"onClick.emit($event)\"\r\n type=\"{{type}}\">\r\n <span class=\"toolbar-btn-icon\" *ngIf=\"icon\"><mat-icon [svgIcon]=\"icon\"></mat-icon></span>\r\n <span class=\"toolbar-btn-text\" *ngIf=\"text\">{{text}}</span>\r\n</button>\r\n", styles: [".toolbar{height:25px}.toolbar .toolbar-btn{height:26px}.toolbar .mat-mdc-form-field{display:block;height:25px;width:auto}.toolbar .mat-mdc-text-field-wrapper{margin-top:1px;height:23px}.toolbar .mat-mdc-form-field-infix{padding:0;border-top:0;width:auto;height:25px}.mat-mdc-option{height:25px;font-size:14px}.toolbar .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix .toolbar .mat-mdc-select-arrow-wrapper{padding:0!important}.toolbar .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding:0!important}.toolbar .mat-mdc-select-arrow{padding-left:5px}.toolbar .mat-mdc-select-value-text{font-size:14px}.toolbar-group,.toolbar-group-vertical{position:relative;display:flex;vertical-align:middle;height:25px}.toolbar-group>.toolbar-btn,.toolbar-group-vertical>.toolbar-btn{position:relative;float:left}.toolbar-group>.toolbar-btn:hover,.toolbar-group-vertical>.toolbar-btn:hover,.toolbar-group>.toolbar-btn:focus,.toolbar-group-vertical>.toolbar-btn:focus,.toolbar-group>.toolbar-btn:active,.toolbar-group-vertical>.toolbar-btn:active,.toolbar-group>.toolbar-btn.active,.toolbar-group-vertical>.toolbar-btn.active{z-index:2}.toolbar-group .toolbar-btn+.toolbar-btn,.toolbar-group .toolbar-btn+.toolbar-group,.toolbar-group .toolbar-group+.toolbar-btn,.toolbar-group .toolbar-group+.toolbar-group{margin-left:-1px}.toolbar-group>.toolbar-btn:not(:first-child):not(:last-child){border-radius:0}.toolbar-group>.toolbar-btn:first-child{margin-left:0}.toolbar-group>.toolbar-btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.toolbar-group>.toolbar-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.toolbar-group>.toolbar-btn{padding:1px 5px;font-size:12px;line-height:1;border-radius:0}.toolbar-group .btn_iconOnly{padding:0;margin:0}.toolbar-group .btn_iconOnly i{vertical-align:15%}.toolbar-group div{padding:0;margin:0}.toolbar-group button{padding:0!important}.toolbar-group span,.toolbar-group i{padding:0;margin:0}.toolbar-group button{vertical-align:top}::ng-deep .toolbar .mat-mdc-option{min-height:unset;height:35px}\n", ".toolbar-btn{margin:0;text-transform:none;font-family:inherit;display:inline-block;padding:6px 12px;font-size:14px;font-weight:400;line-height:1;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;border-radius:0;-webkit-user-select:none;-o-user-select:none;user-select:none;-webkit-appearance:button}.toolbar-btn.disabled,.toolbar-btn[disabled],fieldset[disabled] .btn{cursor:default;opacity:.3;filter:alpha(opacity=65);box-shadow:none;pointer-events:none}.toolbar-btn.disabled:hover,.toolbar-btn[disabled]:hover,fieldset[disabled] .btn:hover{cursor:default;opacity:.3;filter:alpha(opacity=65);box-shadow:none;background-color:#f8f8f8;border-color:transparent;pointer-events:none}.toolbar-btn:hover,.toolbar-btn:focus{color:#333;text-decoration:none}.toolbar-btn-default{color:#333;background-color:transparent;border-color:transparent}.toolbar-btn-default:hover,.toolbar-btn-default:focus,.toolbar-btn-default:active,.toolbar-btn-default.active{color:#333;background-color:#ebebeb;border-color:transparent}.toolbar-btn-text{padding:5px!important}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None });
1693
+ TruToolbarButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: TruToolbarButton, selector: "tru-toolbar-button", inputs: { config: "config", icon: "icon", text: "text", disabled: "disabled", tooltip: "tooltip", type: "type" }, outputs: { onClick: "onClick" }, ngImport: i0, template: "<button\r\n class=\"toolbar-btn toolbar-btn-default\"\r\n title=\"{{ tooltip }}\"\r\n tabindex=\"-1\"\r\n [attr.disabled]=\"disabled ? '' : null\"\r\n (click)=\"onClick.emit($event)\"\r\n type=\"{{type}}\">\r\n <span class=\"toolbar-btn-icon\" *ngIf=\"icon\"><mat-icon [svgIcon]=\"icon\"></mat-icon></span>\r\n <span class=\"toolbar-btn-text\" *ngIf=\"text\">{{text}}</span>\r\n</button>\r\n", styles: [".toolbar{height:25px}.toolbar .toolbar-btn{height:26px}.toolbar .mat-mdc-form-field{display:block;height:25px;width:auto}.toolbar .mat-mdc-text-field-wrapper{margin-top:1px;height:23px}.toolbar .mat-mdc-form-field-infix{padding:0;border-top:0;width:auto;height:25px}.mat-mdc-option{height:25px;font-size:14px}.toolbar .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix .toolbar .mat-mdc-select-arrow-wrapper{padding:0!important}.toolbar .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding:0!important}.toolbar .mat-mdc-select-arrow{padding-left:5px}.toolbar .mat-mdc-select-value-text{font-size:14px}.toolbar-group,.toolbar-group-vertical{position:relative;display:flex;vertical-align:middle;height:25px}.toolbar-group>.toolbar-btn,.toolbar-group-vertical>.toolbar-btn{position:relative;float:left}.toolbar-group>.toolbar-btn:hover,.toolbar-group-vertical>.toolbar-btn:hover,.toolbar-group>.toolbar-btn:focus,.toolbar-group-vertical>.toolbar-btn:focus,.toolbar-group>.toolbar-btn:active,.toolbar-group-vertical>.toolbar-btn:active,.toolbar-group>.toolbar-btn.active,.toolbar-group-vertical>.toolbar-btn.active{z-index:2}.toolbar-group .toolbar-btn+.toolbar-btn,.toolbar-group .toolbar-btn+.toolbar-group,.toolbar-group .toolbar-group+.toolbar-btn,.toolbar-group .toolbar-group+.toolbar-group{margin-left:-1px}.toolbar-group>.toolbar-btn:not(:first-child):not(:last-child){border-radius:0}.toolbar-group>.toolbar-btn:first-child{margin-left:0}.toolbar-group>.toolbar-btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.toolbar-group>.toolbar-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.toolbar-group>.toolbar-btn{padding:1px 5px;font-size:12px;line-height:1;border-radius:0}.toolbar-group .btn_iconOnly{padding:0;margin:0}.toolbar-group .btn_iconOnly i{vertical-align:15%}.toolbar-group div{padding:0;margin:0}.toolbar-group button{padding:0!important}.toolbar-group span,.toolbar-group i{padding:0;margin:0}.toolbar-group button{vertical-align:top}::ng-deep .toolbar .mat-mdc-option{min-height:unset;height:35px}\n", ".toolbar-btn{margin:0;text-transform:none;font-family:inherit;display:inline-block;padding:6px 12px;font-size:14px;font-weight:400;line-height:1;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;border-radius:0;-webkit-user-select:none;-o-user-select:none;user-select:none;-webkit-appearance:button}.toolbar-btn.disabled,.toolbar-btn[disabled],fieldset[disabled] .btn{cursor:default;opacity:.3;filter:alpha(opacity=65);box-shadow:none;pointer-events:none}.toolbar-btn.disabled:hover,.toolbar-btn[disabled]:hover,fieldset[disabled] .btn:hover{cursor:default;opacity:.3;filter:alpha(opacity=65);box-shadow:none;background-color:#f8f8f8;border-color:transparent;pointer-events:none}.toolbar-btn:hover,.toolbar-btn:focus{color:#333;text-decoration:none}.toolbar-btn-default{color:#333;background-color:transparent;border-color:transparent}.toolbar-btn-default:hover,.toolbar-btn-default:focus,.toolbar-btn-default:active,.toolbar-btn-default.active{color:#333;background-color:#ebebeb;border-color:transparent}.toolbar-btn-text{padding:5px!important}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None });
1652
1694
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruToolbarButton, decorators: [{
1653
1695
  type: Component,
1654
1696
  args: [{ selector: 'tru-toolbar-button', encapsulation: ViewEncapsulation.None, template: "<button\r\n class=\"toolbar-btn toolbar-btn-default\"\r\n title=\"{{ tooltip }}\"\r\n tabindex=\"-1\"\r\n [attr.disabled]=\"disabled ? '' : null\"\r\n (click)=\"onClick.emit($event)\"\r\n type=\"{{type}}\">\r\n <span class=\"toolbar-btn-icon\" *ngIf=\"icon\"><mat-icon [svgIcon]=\"icon\"></mat-icon></span>\r\n <span class=\"toolbar-btn-text\" *ngIf=\"text\">{{text}}</span>\r\n</button>\r\n", styles: [".toolbar{height:25px}.toolbar .toolbar-btn{height:26px}.toolbar .mat-mdc-form-field{display:block;height:25px;width:auto}.toolbar .mat-mdc-text-field-wrapper{margin-top:1px;height:23px}.toolbar .mat-mdc-form-field-infix{padding:0;border-top:0;width:auto;height:25px}.mat-mdc-option{height:25px;font-size:14px}.toolbar .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix .toolbar .mat-mdc-select-arrow-wrapper{padding:0!important}.toolbar .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding:0!important}.toolbar .mat-mdc-select-arrow{padding-left:5px}.toolbar .mat-mdc-select-value-text{font-size:14px}.toolbar-group,.toolbar-group-vertical{position:relative;display:flex;vertical-align:middle;height:25px}.toolbar-group>.toolbar-btn,.toolbar-group-vertical>.toolbar-btn{position:relative;float:left}.toolbar-group>.toolbar-btn:hover,.toolbar-group-vertical>.toolbar-btn:hover,.toolbar-group>.toolbar-btn:focus,.toolbar-group-vertical>.toolbar-btn:focus,.toolbar-group>.toolbar-btn:active,.toolbar-group-vertical>.toolbar-btn:active,.toolbar-group>.toolbar-btn.active,.toolbar-group-vertical>.toolbar-btn.active{z-index:2}.toolbar-group .toolbar-btn+.toolbar-btn,.toolbar-group .toolbar-btn+.toolbar-group,.toolbar-group .toolbar-group+.toolbar-btn,.toolbar-group .toolbar-group+.toolbar-group{margin-left:-1px}.toolbar-group>.toolbar-btn:not(:first-child):not(:last-child){border-radius:0}.toolbar-group>.toolbar-btn:first-child{margin-left:0}.toolbar-group>.toolbar-btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.toolbar-group>.toolbar-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.toolbar-group>.toolbar-btn{padding:1px 5px;font-size:12px;line-height:1;border-radius:0}.toolbar-group .btn_iconOnly{padding:0;margin:0}.toolbar-group .btn_iconOnly i{vertical-align:15%}.toolbar-group div{padding:0;margin:0}.toolbar-group button{padding:0!important}.toolbar-group span,.toolbar-group i{padding:0;margin:0}.toolbar-group button{vertical-align:top}::ng-deep .toolbar .mat-mdc-option{min-height:unset;height:35px}\n", ".toolbar-btn{margin:0;text-transform:none;font-family:inherit;display:inline-block;padding:6px 12px;font-size:14px;font-weight:400;line-height:1;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;border-radius:0;-webkit-user-select:none;-o-user-select:none;user-select:none;-webkit-appearance:button}.toolbar-btn.disabled,.toolbar-btn[disabled],fieldset[disabled] .btn{cursor:default;opacity:.3;filter:alpha(opacity=65);box-shadow:none;pointer-events:none}.toolbar-btn.disabled:hover,.toolbar-btn[disabled]:hover,fieldset[disabled] .btn:hover{cursor:default;opacity:.3;filter:alpha(opacity=65);box-shadow:none;background-color:#f8f8f8;border-color:transparent;pointer-events:none}.toolbar-btn:hover,.toolbar-btn:focus{color:#333;text-decoration:none}.toolbar-btn-default{color:#333;background-color:transparent;border-color:transparent}.toolbar-btn-default:hover,.toolbar-btn-default:focus,.toolbar-btn-default:active,.toolbar-btn-default.active{color:#333;background-color:#ebebeb;border-color:transparent}.toolbar-btn-text{padding:5px!important}\n"] }]
@@ -1784,7 +1826,7 @@ class TruToolbarDropdown {
1784
1826
  }
1785
1827
  }
1786
1828
  TruToolbarDropdown.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruToolbarDropdown, deps: [], target: i0.ɵɵFactoryTarget.Component });
1787
- TruToolbarDropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: TruToolbarDropdown, selector: "tru-toolbar-dropdown", inputs: { config: "config", options: "options", selectedOption: "selectedOption", disabled: "disabled" }, outputs: { selectedOptionChange: "selectedOptionChange", selectionChange: "selectionChange" }, ngImport: i0, template: "<mat-form-field>\r\n <mat-select [(ngModel)]=\"selectedOption\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n tru-mat-select-panel>\r\n <mat-option *ngFor=\"let option of options\" [value]=\"option\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>\r\n\r\n", styles: [".toolbar{height:25px}.toolbar .toolbar-btn{height:26px}.toolbar .mat-mdc-form-field{display:block;height:25px;width:auto}.toolbar .mat-mdc-text-field-wrapper{margin-top:1px;height:23px}.toolbar .mat-mdc-form-field-infix{padding:0;border-top:0;width:auto;height:25px}.mat-mdc-option{height:25px;font-size:14px}.toolbar .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix .toolbar .mat-mdc-select-arrow-wrapper{padding:0!important}.toolbar .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding:0!important}.toolbar .mat-mdc-select-arrow{padding-left:5px}.toolbar .mat-mdc-select-value-text{font-size:14px}.toolbar-group,.toolbar-group-vertical{position:relative;display:flex;vertical-align:middle;height:25px}.toolbar-group>.toolbar-btn,.toolbar-group-vertical>.toolbar-btn{position:relative;float:left}.toolbar-group>.toolbar-btn:hover,.toolbar-group-vertical>.toolbar-btn:hover,.toolbar-group>.toolbar-btn:focus,.toolbar-group-vertical>.toolbar-btn:focus,.toolbar-group>.toolbar-btn:active,.toolbar-group-vertical>.toolbar-btn:active,.toolbar-group>.toolbar-btn.active,.toolbar-group-vertical>.toolbar-btn.active{z-index:2}.toolbar-group .toolbar-btn+.toolbar-btn,.toolbar-group .toolbar-btn+.toolbar-group,.toolbar-group .toolbar-group+.toolbar-btn,.toolbar-group .toolbar-group+.toolbar-group{margin-left:-1px}.toolbar-group>.toolbar-btn:not(:first-child):not(:last-child){border-radius:0}.toolbar-group>.toolbar-btn:first-child{margin-left:0}.toolbar-group>.toolbar-btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.toolbar-group>.toolbar-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.toolbar-group>.toolbar-btn{padding:1px 5px;font-size:12px;line-height:1;border-radius:0}.toolbar-group .btn_iconOnly{padding:0;margin:0}.toolbar-group .btn_iconOnly i{vertical-align:15%}.toolbar-group div{padding:0;margin:0}.toolbar-group button{padding:0!important}.toolbar-group span,.toolbar-group i{padding:0;margin:0}.toolbar-group button{vertical-align:top}::ng-deep .toolbar .mat-mdc-option{min-height:unset;height:35px}\n", ".toolbar .mat-mdc-select{width:auto;min-width:90px;padding-top:0!important;font-family:Calibri,Helvetica,Arial,sans-serif!important;background-color:#ebebeb;height:24px;margin-left:2px;margin-right:2px;padding-left:8px;padding-right:3px}.toolbar .mdc-line-ripple{display:none}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i1$4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: TruMatSelectPanel, selector: "[tru-mat-select-panel]" }], encapsulation: i0.ViewEncapsulation.None });
1829
+ TruToolbarDropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: TruToolbarDropdown, selector: "tru-toolbar-dropdown", inputs: { config: "config", options: "options", selectedOption: "selectedOption", disabled: "disabled" }, outputs: { selectedOptionChange: "selectedOptionChange", selectionChange: "selectionChange" }, ngImport: i0, template: "<mat-form-field>\r\n <mat-select [(ngModel)]=\"selectedOption\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n tru-mat-select-panel>\r\n <mat-option *ngFor=\"let option of options\" [value]=\"option\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>\r\n\r\n", styles: [".toolbar{height:25px}.toolbar .toolbar-btn{height:26px}.toolbar .mat-mdc-form-field{display:block;height:25px;width:auto}.toolbar .mat-mdc-text-field-wrapper{margin-top:1px;height:23px}.toolbar .mat-mdc-form-field-infix{padding:0;border-top:0;width:auto;height:25px}.mat-mdc-option{height:25px;font-size:14px}.toolbar .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix .toolbar .mat-mdc-select-arrow-wrapper{padding:0!important}.toolbar .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding:0!important}.toolbar .mat-mdc-select-arrow{padding-left:5px}.toolbar .mat-mdc-select-value-text{font-size:14px}.toolbar-group,.toolbar-group-vertical{position:relative;display:flex;vertical-align:middle;height:25px}.toolbar-group>.toolbar-btn,.toolbar-group-vertical>.toolbar-btn{position:relative;float:left}.toolbar-group>.toolbar-btn:hover,.toolbar-group-vertical>.toolbar-btn:hover,.toolbar-group>.toolbar-btn:focus,.toolbar-group-vertical>.toolbar-btn:focus,.toolbar-group>.toolbar-btn:active,.toolbar-group-vertical>.toolbar-btn:active,.toolbar-group>.toolbar-btn.active,.toolbar-group-vertical>.toolbar-btn.active{z-index:2}.toolbar-group .toolbar-btn+.toolbar-btn,.toolbar-group .toolbar-btn+.toolbar-group,.toolbar-group .toolbar-group+.toolbar-btn,.toolbar-group .toolbar-group+.toolbar-group{margin-left:-1px}.toolbar-group>.toolbar-btn:not(:first-child):not(:last-child){border-radius:0}.toolbar-group>.toolbar-btn:first-child{margin-left:0}.toolbar-group>.toolbar-btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.toolbar-group>.toolbar-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.toolbar-group>.toolbar-btn{padding:1px 5px;font-size:12px;line-height:1;border-radius:0}.toolbar-group .btn_iconOnly{padding:0;margin:0}.toolbar-group .btn_iconOnly i{vertical-align:15%}.toolbar-group div{padding:0;margin:0}.toolbar-group button{padding:0!important}.toolbar-group span,.toolbar-group i{padding:0;margin:0}.toolbar-group button{vertical-align:top}::ng-deep .toolbar .mat-mdc-option{min-height:unset;height:35px}\n", ".toolbar .mat-mdc-select{width:auto;min-width:90px;padding-top:0!important;font-family:Calibri,Helvetica,Arial,sans-serif!important;background-color:#ebebeb;height:24px;margin-left:2px;margin-right:2px;padding-left:8px;padding-right:3px}.toolbar .mdc-line-ripple{display:none}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i1$4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: TruMatSelectPanel, selector: "[tru-mat-select-panel]" }], encapsulation: i0.ViewEncapsulation.None });
1788
1830
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruToolbarDropdown, decorators: [{
1789
1831
  type: Component,
1790
1832
  args: [{ selector: 'tru-toolbar-dropdown', encapsulation: ViewEncapsulation.None, template: "<mat-form-field>\r\n <mat-select [(ngModel)]=\"selectedOption\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n tru-mat-select-panel>\r\n <mat-option *ngFor=\"let option of options\" [value]=\"option\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>\r\n\r\n", styles: [".toolbar{height:25px}.toolbar .toolbar-btn{height:26px}.toolbar .mat-mdc-form-field{display:block;height:25px;width:auto}.toolbar .mat-mdc-text-field-wrapper{margin-top:1px;height:23px}.toolbar .mat-mdc-form-field-infix{padding:0;border-top:0;width:auto;height:25px}.mat-mdc-option{height:25px;font-size:14px}.toolbar .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix .toolbar .mat-mdc-select-arrow-wrapper{padding:0!important}.toolbar .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding:0!important}.toolbar .mat-mdc-select-arrow{padding-left:5px}.toolbar .mat-mdc-select-value-text{font-size:14px}.toolbar-group,.toolbar-group-vertical{position:relative;display:flex;vertical-align:middle;height:25px}.toolbar-group>.toolbar-btn,.toolbar-group-vertical>.toolbar-btn{position:relative;float:left}.toolbar-group>.toolbar-btn:hover,.toolbar-group-vertical>.toolbar-btn:hover,.toolbar-group>.toolbar-btn:focus,.toolbar-group-vertical>.toolbar-btn:focus,.toolbar-group>.toolbar-btn:active,.toolbar-group-vertical>.toolbar-btn:active,.toolbar-group>.toolbar-btn.active,.toolbar-group-vertical>.toolbar-btn.active{z-index:2}.toolbar-group .toolbar-btn+.toolbar-btn,.toolbar-group .toolbar-btn+.toolbar-group,.toolbar-group .toolbar-group+.toolbar-btn,.toolbar-group .toolbar-group+.toolbar-group{margin-left:-1px}.toolbar-group>.toolbar-btn:not(:first-child):not(:last-child){border-radius:0}.toolbar-group>.toolbar-btn:first-child{margin-left:0}.toolbar-group>.toolbar-btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.toolbar-group>.toolbar-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.toolbar-group>.toolbar-btn{padding:1px 5px;font-size:12px;line-height:1;border-radius:0}.toolbar-group .btn_iconOnly{padding:0;margin:0}.toolbar-group .btn_iconOnly i{vertical-align:15%}.toolbar-group div{padding:0;margin:0}.toolbar-group button{padding:0!important}.toolbar-group span,.toolbar-group i{padding:0;margin:0}.toolbar-group button{vertical-align:top}::ng-deep .toolbar .mat-mdc-option{min-height:unset;height:35px}\n", ".toolbar .mat-mdc-select{width:auto;min-width:90px;padding-top:0!important;font-family:Calibri,Helvetica,Arial,sans-serif!important;background-color:#ebebeb;height:24px;margin-left:2px;margin-right:2px;padding-left:8px;padding-right:3px}.toolbar .mdc-line-ripple{display:none}\n"] }]
@@ -2666,7 +2708,7 @@ class TruDesktopTaskbar {
2666
2708
  }
2667
2709
  }
2668
2710
  TruDesktopTaskbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruDesktopTaskbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
2669
- TruDesktopTaskbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: TruDesktopTaskbar, selector: "tru-desktop-taskbar", inputs: { windows: "windows", desktopCtrl: "desktopCtrl" }, ngImport: i0, template: "<div class=\"desktop-taskbar-container\">\r\n <div class=\"desktop-taskbar-list\">\r\n <ul>\r\n <li class=\"am-fade-and-scale desktop-text\"\r\n *ngFor=\"let window of windows\"\r\n (click)=\"updateWindowState(window)\">\r\n <div class=\"desktop-relative desktop-taskbar-list-item\" [ngClass]=\"{'desktop-active-taskbar-list-item': window.active, 'desktop-minimized-taskbar-list-item': window.minimized, 'desktop-taskbar-list-item-recover': window.outOfBounds}\">\r\n <div class=\"desktop-taskbar-list-item-title\">\r\n <span>{{window.title}}</span>\r\n </div>\r\n <mat-icon [svgIcon]=\"'tru-toolbar-close-icon'\" class=\"desktop-taskbar-list-item-close-icon\" [ngClass]=\"{'desktop-taskbar-list-item-close-minimized': window.minimized}\" (click)=\"close($event, window)\"></mat-icon>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"desktop-taskbar-hide\">\r\n <div class=\"desktop-taskbar-hide-button\" (click)=\"hideShowAll()\">\r\n\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".desktop-taskbar-container{position:absolute!important;left:0;right:0;bottom:0;height:40px;background:#f8f8f8;border:1px solid #6b6b6b}.desktop-taskbar-launch-menu{position:absolute!important;top:0;left:0;bottom:0;width:50px;background:#f8f8f8;border-right:1px solid #e7e7e7}.desktop-taskbar-launch-button{height:35px;width:43px;background-clip:padding-box;border-radius:6px;border:1px solid #dfdfdf;margin:2px;padding-top:1px;padding-left:5px}.desktop-taskbar-launch-button:active{margin-top:3px;margin-left:3px;outline:0;box-shadow:0 0 10px #0057ff}.desktop-taskbar-list{position:absolute!important;inset:0 16px 0 0;background:#f8f8f8}.desktop-taskbar-list-offset{left:50px}.desktop-taskbar-list ul{padding:3px;margin:0}.desktop-taskbar-list ul>li{display:inline-block;list-style:none;width:165px;height:33px}.desktop-taskbar-list ul>li>div{background-clip:padding-box;border-radius:0;border:1px solid #dfdfdf;line-height:30px;margin-top:1px;margin-left:7px;overflow:hidden}.desktop-taskbar-list ul>li>div:active{top:1px;left:1px}.desktop-taskbar-list li span{position:relative;left:5px;margin-left:5px;text-overflow:ellipsis;font-size:12px;font-weight:700}.desktop-taskbar-list-item-recover{background:maroon!important;color:#fff!important}.desktop-taskbar-list-item-title{width:135px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;cursor:default}.desktop-taskbar-list-item-close{position:absolute;z-index:1;top:11px;right:5px;font-size:9px;color:#333;cursor:pointer}.desktop-taskbar-list-item-close-minimized{color:#bababa}.desktop-taskbar-list-item-close:active{top:10px;right:6px}.desktop-taskbar-list-item-close:hover{color:maroon}.desktop-taskbar-list-item{background-color:#f8f8f8;position:relative}.desktop-taskbar-list-item-close-icon{position:absolute;right:2px;top:5px;height:16px}.desktop-active-taskbar-list-item{outline:0;border:1px solid #6b6b6b!important;box-shadow:inset 0 1px 1px #00000013;color:#333}.desktop-minimized-taskbar-list-item{color:#bababa}.desktop-taskbar-hide{position:absolute!important;top:0;right:0;bottom:0;width:16px;background:#f8f8f8}.desktop-taskbar-hide-button{height:35px;width:12px;background-clip:padding-box;border-radius:0;border:1px solid #dfdfdf;margin:2px}.desktop-taskbar-hide-button:active{margin-top:3px;margin-left:3px;outline:0;box-shadow:0 0 10px #0057ff}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
2711
+ TruDesktopTaskbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: TruDesktopTaskbar, selector: "tru-desktop-taskbar", inputs: { windows: "windows", desktopCtrl: "desktopCtrl" }, ngImport: i0, template: "<div class=\"desktop-taskbar-container\">\r\n <div class=\"desktop-taskbar-list\">\r\n <ul>\r\n <li class=\"am-fade-and-scale desktop-text\"\r\n *ngFor=\"let window of windows\"\r\n (click)=\"updateWindowState(window)\">\r\n <div class=\"desktop-relative desktop-taskbar-list-item\" [ngClass]=\"{'desktop-active-taskbar-list-item': window.active, 'desktop-minimized-taskbar-list-item': window.minimized, 'desktop-taskbar-list-item-recover': window.outOfBounds}\">\r\n <div class=\"desktop-taskbar-list-item-title\">\r\n <span>{{window.title}}</span>\r\n </div>\r\n <mat-icon [svgIcon]=\"'tru-toolbar-close-icon'\" class=\"desktop-taskbar-list-item-close-icon\" [ngClass]=\"{'desktop-taskbar-list-item-close-minimized': window.minimized}\" (click)=\"close($event, window)\"></mat-icon>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"desktop-taskbar-hide\">\r\n <div class=\"desktop-taskbar-hide-button\" (click)=\"hideShowAll()\">\r\n\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".desktop-taskbar-container{position:absolute!important;left:0;right:0;bottom:0;height:40px;background:#f8f8f8;border:1px solid #6b6b6b}.desktop-taskbar-launch-menu{position:absolute!important;top:0;left:0;bottom:0;width:50px;background:#f8f8f8;border-right:1px solid #e7e7e7}.desktop-taskbar-launch-button{height:35px;width:43px;background-clip:padding-box;border-radius:6px;border:1px solid #dfdfdf;margin:2px;padding-top:1px;padding-left:5px}.desktop-taskbar-launch-button:active{margin-top:3px;margin-left:3px;outline:0;box-shadow:0 0 10px #0057ff}.desktop-taskbar-list{position:absolute!important;inset:0 16px 0 0;background:#f8f8f8}.desktop-taskbar-list-offset{left:50px}.desktop-taskbar-list ul{padding:3px;margin:0}.desktop-taskbar-list ul>li{display:inline-block;list-style:none;width:165px;height:33px}.desktop-taskbar-list ul>li>div{background-clip:padding-box;border-radius:0;border:1px solid #dfdfdf;line-height:30px;margin-top:1px;margin-left:7px;overflow:hidden}.desktop-taskbar-list ul>li>div:active{top:1px;left:1px}.desktop-taskbar-list li span{position:relative;left:5px;margin-left:5px;text-overflow:ellipsis;font-size:12px;font-weight:700}.desktop-taskbar-list-item-recover{background:maroon!important;color:#fff!important}.desktop-taskbar-list-item-title{width:135px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;cursor:default}.desktop-taskbar-list-item-close{position:absolute;z-index:1;top:11px;right:5px;font-size:9px;color:#333;cursor:pointer}.desktop-taskbar-list-item-close-minimized{color:#bababa}.desktop-taskbar-list-item-close:active{top:10px;right:6px}.desktop-taskbar-list-item-close:hover{color:maroon}.desktop-taskbar-list-item{background-color:#f8f8f8;position:relative}.desktop-taskbar-list-item-close-icon{position:absolute;right:2px;top:5px;height:16px}.desktop-active-taskbar-list-item{outline:0;border:1px solid #6b6b6b!important;box-shadow:inset 0 1px 1px #00000013;color:#333}.desktop-minimized-taskbar-list-item{color:#bababa}.desktop-taskbar-hide{position:absolute!important;top:0;right:0;bottom:0;width:16px;background:#f8f8f8}.desktop-taskbar-hide-button{height:35px;width:12px;background-clip:padding-box;border-radius:0;border:1px solid #dfdfdf;margin:2px}.desktop-taskbar-hide-button:active{margin-top:3px;margin-left:3px;outline:0;box-shadow:0 0 10px #0057ff}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
2670
2712
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruDesktopTaskbar, decorators: [{
2671
2713
  type: Component,
2672
2714
  args: [{ selector: 'tru-desktop-taskbar', template: "<div class=\"desktop-taskbar-container\">\r\n <div class=\"desktop-taskbar-list\">\r\n <ul>\r\n <li class=\"am-fade-and-scale desktop-text\"\r\n *ngFor=\"let window of windows\"\r\n (click)=\"updateWindowState(window)\">\r\n <div class=\"desktop-relative desktop-taskbar-list-item\" [ngClass]=\"{'desktop-active-taskbar-list-item': window.active, 'desktop-minimized-taskbar-list-item': window.minimized, 'desktop-taskbar-list-item-recover': window.outOfBounds}\">\r\n <div class=\"desktop-taskbar-list-item-title\">\r\n <span>{{window.title}}</span>\r\n </div>\r\n <mat-icon [svgIcon]=\"'tru-toolbar-close-icon'\" class=\"desktop-taskbar-list-item-close-icon\" [ngClass]=\"{'desktop-taskbar-list-item-close-minimized': window.minimized}\" (click)=\"close($event, window)\"></mat-icon>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"desktop-taskbar-hide\">\r\n <div class=\"desktop-taskbar-hide-button\" (click)=\"hideShowAll()\">\r\n\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".desktop-taskbar-container{position:absolute!important;left:0;right:0;bottom:0;height:40px;background:#f8f8f8;border:1px solid #6b6b6b}.desktop-taskbar-launch-menu{position:absolute!important;top:0;left:0;bottom:0;width:50px;background:#f8f8f8;border-right:1px solid #e7e7e7}.desktop-taskbar-launch-button{height:35px;width:43px;background-clip:padding-box;border-radius:6px;border:1px solid #dfdfdf;margin:2px;padding-top:1px;padding-left:5px}.desktop-taskbar-launch-button:active{margin-top:3px;margin-left:3px;outline:0;box-shadow:0 0 10px #0057ff}.desktop-taskbar-list{position:absolute!important;inset:0 16px 0 0;background:#f8f8f8}.desktop-taskbar-list-offset{left:50px}.desktop-taskbar-list ul{padding:3px;margin:0}.desktop-taskbar-list ul>li{display:inline-block;list-style:none;width:165px;height:33px}.desktop-taskbar-list ul>li>div{background-clip:padding-box;border-radius:0;border:1px solid #dfdfdf;line-height:30px;margin-top:1px;margin-left:7px;overflow:hidden}.desktop-taskbar-list ul>li>div:active{top:1px;left:1px}.desktop-taskbar-list li span{position:relative;left:5px;margin-left:5px;text-overflow:ellipsis;font-size:12px;font-weight:700}.desktop-taskbar-list-item-recover{background:maroon!important;color:#fff!important}.desktop-taskbar-list-item-title{width:135px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;cursor:default}.desktop-taskbar-list-item-close{position:absolute;z-index:1;top:11px;right:5px;font-size:9px;color:#333;cursor:pointer}.desktop-taskbar-list-item-close-minimized{color:#bababa}.desktop-taskbar-list-item-close:active{top:10px;right:6px}.desktop-taskbar-list-item-close:hover{color:maroon}.desktop-taskbar-list-item{background-color:#f8f8f8;position:relative}.desktop-taskbar-list-item-close-icon{position:absolute;right:2px;top:5px;height:16px}.desktop-active-taskbar-list-item{outline:0;border:1px solid #6b6b6b!important;box-shadow:inset 0 1px 1px #00000013;color:#333}.desktop-minimized-taskbar-list-item{color:#bababa}.desktop-taskbar-hide{position:absolute!important;top:0;right:0;bottom:0;width:16px;background:#f8f8f8}.desktop-taskbar-hide-button{height:35px;width:12px;background-clip:padding-box;border-radius:0;border:1px solid #dfdfdf;margin:2px}.desktop-taskbar-hide-button:active{margin-top:3px;margin-left:3px;outline:0;box-shadow:0 0 10px #0057ff}\n"] }]
@@ -4408,6 +4450,364 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImpor
4408
4450
  }]
4409
4451
  }] });
4410
4452
 
4453
+ const TRU_AUTH_CONFIG = {
4454
+ baseUrl: "https://localhost:44303",
4455
+ authUrl: "/api/auth",
4456
+ auth: "token",
4457
+ };
4458
+ const TRU_AUTH_STRATEGY = new InjectionToken("AuthStrategy");
4459
+
4460
+ class TruAuthCache {
4461
+ constructor() {
4462
+ this.prunables = [];
4463
+ }
4464
+ registerPrunable(prunable) {
4465
+ this.prunables.push(prunable);
4466
+ }
4467
+ pruneAll() {
4468
+ this.prunables.forEach((p) => p.pruneCache());
4469
+ }
4470
+ }
4471
+ TruAuthCache.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruAuthCache, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4472
+ TruAuthCache.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruAuthCache });
4473
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruAuthCache, decorators: [{
4474
+ type: Injectable
4475
+ }] });
4476
+
4477
+ class TruAuth {
4478
+ constructor(router, http, cache, auth) {
4479
+ this.router = router;
4480
+ this.http = http;
4481
+ this.cache = cache;
4482
+ this.auth = auth;
4483
+ this.loggedIn = new BehaviorSubject(false);
4484
+ this.baseUrl = "https://localhost:44303"; //this.environmentService.getValue('apiUrl');
4485
+ }
4486
+ login(loginRequest) {
4487
+ return this.http
4488
+ //.post<any>(this.baseUrl + "/auth/Login", loginRequest)
4489
+ .post(`${this.baseUrl}${TRU_AUTH_CONFIG.authUrl}/login`, loginRequest)
4490
+ .pipe(tap((data) => {
4491
+ this.auth.doLoginUser(data);
4492
+ this.loggedIn.next(true);
4493
+ }));
4494
+ }
4495
+ logout() {
4496
+ this.doLogoutUser();
4497
+ }
4498
+ isLoggedIn$() {
4499
+ return this.auth.getCurrentUser().pipe(map(() => true),
4500
+ //map((user) => !!user),
4501
+ catchError(() => of(false)));
4502
+ }
4503
+ get isLoggedIn() {
4504
+ if (!this.loggedIn.value) {
4505
+ this.loggedIn.next(this.auth.isLoggedIn());
4506
+ }
4507
+ return this.loggedIn.asObservable();
4508
+ }
4509
+ getCurrentUser$() {
4510
+ return this.auth.getCurrentUser();
4511
+ }
4512
+ doLogoutAndRedirectToLogin() {
4513
+ this.doLogoutUser();
4514
+ this.router.navigate([""]);
4515
+ }
4516
+ doLogoutUser() {
4517
+ this.cache.pruneAll();
4518
+ this.auth.doLogoutUser();
4519
+ }
4520
+ }
4521
+ TruAuth.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruAuth, deps: [{ token: i1$5.Router }, { token: i1$2.HttpClient }, { token: TruAuthCache }, { token: TRU_AUTH_STRATEGY }], target: i0.ɵɵFactoryTarget.Injectable });
4522
+ TruAuth.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruAuth, providedIn: "root" });
4523
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruAuth, decorators: [{
4524
+ type: Injectable,
4525
+ args: [{
4526
+ providedIn: "root",
4527
+ }]
4528
+ }], ctorParameters: function () {
4529
+ return [{ type: i1$5.Router }, { type: i1$2.HttpClient }, { type: TruAuthCache }, { type: undefined, decorators: [{
4530
+ type: Inject,
4531
+ args: [TRU_AUTH_STRATEGY]
4532
+ }] }];
4533
+ } });
4534
+
4535
+ class TruLogin {
4536
+ constructor(auth) {
4537
+ this.auth = auth;
4538
+ this.loginForm = new FormGroup({
4539
+ username: new FormControl('', Validators.required),
4540
+ password: new FormControl('', Validators.required)
4541
+ });
4542
+ this.loginError = "";
4543
+ }
4544
+ get f() {
4545
+ return this.loginForm.controls;
4546
+ }
4547
+ onSubmit() {
4548
+ //create a new login request
4549
+ const loginRequest = {
4550
+ username: this.f.username.value,
4551
+ password: this.f.password.value
4552
+ };
4553
+ if (loginRequest.username && loginRequest.password) {
4554
+ this.auth
4555
+ .login(loginRequest)
4556
+ .subscribe((user) => [
4557
+ //this.router.navigate(...) where to?
4558
+ ]
4559
+ //if there is a login error
4560
+ , (error) => {
4561
+ if (error.status === 401) {
4562
+ this.loginError = "Incorrect username and/or password";
4563
+ }
4564
+ else {
4565
+ this.loginError = "Invalid Login - Error: " + error.status;
4566
+ }
4567
+ //if
4568
+ });
4569
+ }
4570
+ }
4571
+ }
4572
+ TruLogin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruLogin, deps: [{ token: TruAuth }], target: i0.ɵɵFactoryTarget.Component });
4573
+ TruLogin.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: TruLogin, selector: "tru-login", ngImport: i0, template: "<div class=\"wrapper\">\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"onSubmit()\">\r\n <mat-card class=\"animate-login\">\r\n <mat-card-header>\r\n <mat-card-title> loginFormTitle </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <mat-form-field>\r\n <mat-label>Username</mat-label>\r\n <input matInput formControlName=\"username\" placeholder=\"Username\">\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Password</mat-label>\r\n <input matInput type=\"password\" formControlName=\"password\" placeholder=\"Password\">\r\n </mat-form-field>\r\n <div *ngIf=\"loginError\" class=\"animate-login-error animated rubberBand\">\r\n <p style=\"color: red; font-weight: bold;\"> {{ loginError }}</p>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-raised-button color=\"primary\" type=\"submit\">Login</button>\r\n </mat-card-actions>\r\n </mat-card>\r\n </form>\r\n</div>\r\n", styles: [".login-container{display:flex;justify-content:center;align-items:center;height:100vh;margin:0;padding:0}.login-input{margin-bottom:20px}.animate-login{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;margin-top:50px}mat-card{max-width:300px;width:100%;max-height:300px;padding:20px}.form-group{width:100%;max-width:400px;margin-bottom:20px}.wrapper{display:flex;justify-content:center;align-items:center;height:100vh}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i4.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i5$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
4574
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruLogin, decorators: [{
4575
+ type: Component,
4576
+ args: [{ selector: 'tru-login', template: "<div class=\"wrapper\">\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"onSubmit()\">\r\n <mat-card class=\"animate-login\">\r\n <mat-card-header>\r\n <mat-card-title> loginFormTitle </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <mat-form-field>\r\n <mat-label>Username</mat-label>\r\n <input matInput formControlName=\"username\" placeholder=\"Username\">\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Password</mat-label>\r\n <input matInput type=\"password\" formControlName=\"password\" placeholder=\"Password\">\r\n </mat-form-field>\r\n <div *ngIf=\"loginError\" class=\"animate-login-error animated rubberBand\">\r\n <p style=\"color: red; font-weight: bold;\"> {{ loginError }}</p>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-raised-button color=\"primary\" type=\"submit\">Login</button>\r\n </mat-card-actions>\r\n </mat-card>\r\n </form>\r\n</div>\r\n", styles: [".login-container{display:flex;justify-content:center;align-items:center;height:100vh;margin:0;padding:0}.login-input{margin-bottom:20px}.animate-login{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;margin-top:50px}mat-card{max-width:300px;width:100%;max-height:300px;padding:20px}.form-group{width:100%;max-width:400px;margin-bottom:20px}.wrapper{display:flex;justify-content:center;align-items:center;height:100vh}\n"] }]
4577
+ }], ctorParameters: function () { return [{ type: TruAuth }]; } });
4578
+
4579
+ class MaterialModule {
4580
+ }
4581
+ MaterialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
4582
+ MaterialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.1", ngImport: i0, type: MaterialModule, exports: [A11yModule,
4583
+ CdkAccordionModule,
4584
+ ClipboardModule,
4585
+ CdkStepperModule,
4586
+ CdkTableModule,
4587
+ CdkTreeModule,
4588
+ DragDropModule,
4589
+ MatAutocompleteModule,
4590
+ MatBadgeModule,
4591
+ MatBottomSheetModule,
4592
+ MatButtonModule,
4593
+ MatButtonToggleModule,
4594
+ MatCardModule,
4595
+ MatCheckboxModule,
4596
+ MatChipsModule,
4597
+ MatStepperModule,
4598
+ MatDatepickerModule,
4599
+ MatDialogModule,
4600
+ MatDividerModule,
4601
+ MatExpansionModule,
4602
+ MatGridListModule,
4603
+ MatIconModule,
4604
+ MatInputModule,
4605
+ MatListModule,
4606
+ MatMenuModule,
4607
+ MatNativeDateModule,
4608
+ MatPaginatorModule,
4609
+ MatProgressBarModule,
4610
+ MatProgressSpinnerModule,
4611
+ MatRadioModule,
4612
+ MatRippleModule,
4613
+ MatSelectModule,
4614
+ MatSidenavModule,
4615
+ MatSliderModule,
4616
+ MatSlideToggleModule,
4617
+ MatSnackBarModule,
4618
+ MatSortModule,
4619
+ MatTableModule,
4620
+ MatTabsModule,
4621
+ MatToolbarModule,
4622
+ MatTooltipModule,
4623
+ MatTreeModule,
4624
+ OverlayModule,
4625
+ PortalModule,
4626
+ ScrollingModule] });
4627
+ MaterialModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: MaterialModule, imports: [A11yModule,
4628
+ CdkAccordionModule,
4629
+ ClipboardModule,
4630
+ CdkStepperModule,
4631
+ CdkTableModule,
4632
+ CdkTreeModule,
4633
+ DragDropModule,
4634
+ MatAutocompleteModule,
4635
+ MatBadgeModule,
4636
+ MatBottomSheetModule,
4637
+ MatButtonModule,
4638
+ MatButtonToggleModule,
4639
+ MatCardModule,
4640
+ MatCheckboxModule,
4641
+ MatChipsModule,
4642
+ MatStepperModule,
4643
+ MatDatepickerModule,
4644
+ MatDialogModule,
4645
+ MatDividerModule,
4646
+ MatExpansionModule,
4647
+ MatGridListModule,
4648
+ MatIconModule,
4649
+ MatInputModule,
4650
+ MatListModule,
4651
+ MatMenuModule,
4652
+ MatNativeDateModule,
4653
+ MatPaginatorModule,
4654
+ MatProgressBarModule,
4655
+ MatProgressSpinnerModule,
4656
+ MatRadioModule,
4657
+ MatRippleModule,
4658
+ MatSelectModule,
4659
+ MatSidenavModule,
4660
+ MatSliderModule,
4661
+ MatSlideToggleModule,
4662
+ MatSnackBarModule,
4663
+ MatSortModule,
4664
+ MatTableModule,
4665
+ MatTabsModule,
4666
+ MatToolbarModule,
4667
+ MatTooltipModule,
4668
+ MatTreeModule,
4669
+ OverlayModule,
4670
+ PortalModule,
4671
+ ScrollingModule] });
4672
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: MaterialModule, decorators: [{
4673
+ type: NgModule,
4674
+ args: [{
4675
+ exports: [
4676
+ A11yModule,
4677
+ CdkAccordionModule,
4678
+ ClipboardModule,
4679
+ CdkStepperModule,
4680
+ CdkTableModule,
4681
+ CdkTreeModule,
4682
+ DragDropModule,
4683
+ MatAutocompleteModule,
4684
+ MatBadgeModule,
4685
+ MatBottomSheetModule,
4686
+ MatButtonModule,
4687
+ MatButtonToggleModule,
4688
+ MatCardModule,
4689
+ MatCheckboxModule,
4690
+ MatChipsModule,
4691
+ MatStepperModule,
4692
+ MatDatepickerModule,
4693
+ MatDialogModule,
4694
+ MatDividerModule,
4695
+ MatExpansionModule,
4696
+ MatGridListModule,
4697
+ MatIconModule,
4698
+ MatInputModule,
4699
+ MatListModule,
4700
+ MatMenuModule,
4701
+ MatNativeDateModule,
4702
+ MatPaginatorModule,
4703
+ MatProgressBarModule,
4704
+ MatProgressSpinnerModule,
4705
+ MatRadioModule,
4706
+ MatRippleModule,
4707
+ MatSelectModule,
4708
+ MatSidenavModule,
4709
+ MatSliderModule,
4710
+ MatSlideToggleModule,
4711
+ MatSnackBarModule,
4712
+ MatSortModule,
4713
+ MatTableModule,
4714
+ MatTabsModule,
4715
+ MatToolbarModule,
4716
+ MatTooltipModule,
4717
+ MatTreeModule,
4718
+ OverlayModule,
4719
+ PortalModule,
4720
+ ScrollingModule,
4721
+ ]
4722
+ }]
4723
+ }] });
4724
+
4725
+ class TruLoginModule {
4726
+ }
4727
+ TruLoginModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruLoginModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
4728
+ TruLoginModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.1", ngImport: i0, type: TruLoginModule, declarations: [TruLogin], imports: [CommonModule, MaterialModule, FormsModule, ReactiveFormsModule], exports: [TruLogin] });
4729
+ TruLoginModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruLoginModule, imports: [CommonModule, MaterialModule, FormsModule, ReactiveFormsModule] });
4730
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruLoginModule, decorators: [{
4731
+ type: NgModule,
4732
+ args: [{
4733
+ declarations: [TruLogin],
4734
+ imports: [CommonModule, MaterialModule, FormsModule, ReactiveFormsModule,],
4735
+ exports: [TruLogin]
4736
+ }]
4737
+ }] });
4738
+
4739
+ class TruAuthJwtStrategy {
4740
+ constructor() {
4741
+ this.JWT_TOKEN = "JWT_TOKEN";
4742
+ }
4743
+ doLoginUser(token) {
4744
+ localStorage.setItem(this.JWT_TOKEN, token.jwt);
4745
+ }
4746
+ doLogoutUser() {
4747
+ localStorage.removeItem(this.JWT_TOKEN);
4748
+ }
4749
+ getCurrentUser() {
4750
+ //todo check v6 for how this should be done
4751
+ return of(undefined);
4752
+ }
4753
+ isLoggedIn() {
4754
+ return !!this.getJwtToken();
4755
+ }
4756
+ getJwtToken() {
4757
+ return localStorage.getItem(this.JWT_TOKEN);
4758
+ }
4759
+ getToken() {
4760
+ var token = localStorage.getItem(this.JWT_TOKEN);
4761
+ if (token && token !== "undefined") {
4762
+ const encodedPayload = token.split(".")[1];
4763
+ const payloadStr = window.atob(encodedPayload);
4764
+ var payload = JSON.parse(payloadStr);
4765
+ var exp = payload["exp"];
4766
+ var d = new Date();
4767
+ var epoch = Math.round(d.getTime() / 1000);
4768
+ if (exp < epoch) {
4769
+ localStorage.removeItem(this.JWT_TOKEN);
4770
+ return null;
4771
+ }
4772
+ }
4773
+ return token;
4774
+ }
4775
+ }
4776
+
4777
+ // import { ConfigService } from "../config.service";
4778
+ class TruAuthInterceptor {
4779
+ constructor(auth, jwt) {
4780
+ this.auth = auth;
4781
+ this.jwt = jwt;
4782
+ }
4783
+ intercept(request, next) {
4784
+ if (TRU_AUTH_CONFIG.auth === "token" && this.jwt && this.jwt.getToken()) {
4785
+ request = this.addToken(request, String(this.jwt.getToken()));
4786
+ }
4787
+ return next.handle(request).pipe(catchError((error) => {
4788
+ if (error.status === 401) {
4789
+ this.auth.doLogoutAndRedirectToLogin();
4790
+ }
4791
+ return throwError(error);
4792
+ }));
4793
+ }
4794
+ addToken(request, token) {
4795
+ return request.clone({
4796
+ setHeaders: { Authorization: `Bearer ${token}` },
4797
+ });
4798
+ }
4799
+ }
4800
+ TruAuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruAuthInterceptor, deps: [{ token: TruAuth }, { token: TRU_AUTH_STRATEGY }], target: i0.ɵɵFactoryTarget.Injectable });
4801
+ TruAuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruAuthInterceptor });
4802
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruAuthInterceptor, decorators: [{
4803
+ type: Injectable
4804
+ }], ctorParameters: function () {
4805
+ return [{ type: TruAuth }, { type: TruAuthJwtStrategy, decorators: [{
4806
+ type: Inject,
4807
+ args: [TRU_AUTH_STRATEGY]
4808
+ }] }];
4809
+ } });
4810
+
4411
4811
  class TruSearchPanelPositionManager {
4412
4812
  constructor(el, renderer) {
4413
4813
  this.el = el;
@@ -4923,7 +5323,7 @@ class TruSearchIconModule {
4923
5323
  iconRegistry.addSvgIconLiteral("contains-operator-icon", sanitizer.bypassSecurityTrustHtml(CONTAINS_ICON));
4924
5324
  }
4925
5325
  }
4926
- TruSearchIconModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruSearchIconModule, deps: [{ token: i1$5.DomSanitizer }, { token: i2$1.MatIconRegistry }], target: i0.ɵɵFactoryTarget.NgModule });
5326
+ TruSearchIconModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruSearchIconModule, deps: [{ token: i1$6.DomSanitizer }, { token: i2.MatIconRegistry }], target: i0.ɵɵFactoryTarget.NgModule });
4927
5327
  TruSearchIconModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.1", ngImport: i0, type: TruSearchIconModule, imports: [CommonModule, FormsModule] });
4928
5328
  TruSearchIconModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruSearchIconModule, imports: [CommonModule, FormsModule] });
4929
5329
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TruSearchIconModule, decorators: [{
@@ -4933,7 +5333,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImpor
4933
5333
  declarations: [],
4934
5334
  exports: []
4935
5335
  }]
4936
- }], ctorParameters: function () { return [{ type: i1$5.DomSanitizer }, { type: i2$1.MatIconRegistry }]; } });
5336
+ }], ctorParameters: function () { return [{ type: i1$6.DomSanitizer }, { type: i2.MatIconRegistry }]; } });
4937
5337
 
4938
5338
  class TruCommonModule {
4939
5339
  }
@@ -4957,5 +5357,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImpor
4957
5357
  * Generated bundle index. Do not edit.
4958
5358
  */
4959
5359
 
4960
- export { DetailViewModule, TruAppEnvironment, TruBreezeContext, TruBreezeContextFactory, TruBreezeMetadataProvider, TruChoice, TruColumn, TruColumnModule, TruCommonModule, TruComponentConfigBase, TruComponentLookup, TruConfirmDialog, TruConfirmDialogConfig, TruConfirmDialogModule, TruContextFilter, TruContextFilterChoice, TruContextFilters, TruControlComponentConfigBase, TruDataContext, TruDataGrid, TruDataGridModule, TruDataGridTypes, TruDesktop, TruDesktopManager, TruDesktopModule, TruDetailViewBase, TruEditControlConfigBase, TruEntityAccessor, TruEntityBase, TruExportDialog, TruExportDialogConfig, TruExportDialogModule, TruForm, TruFormModule, TruFormulaEval, TruGroupBox, TruGroupBoxModule, TruPredicate, TruPredicateMap, TruPropertyConfigBase, TruPropertyConfigCloudFile, TruPropertyConfigDate, TruPropertyConfigDecimal, TruPropertyConfigFile, TruPropertyConfigForeignKey, TruPropertyConfigInteger, TruPropertyConfigPassword, TruPropertyConfigPercentage, TruPropertyConfigScientific, TruPropertyConfigText, TruPropertyConfigTextChoices, TruPropertyConfigUsaAddress, TruPropertyConfigZipCode, TruQueryPredicateManager, TruRow, TruRowModule, TruSearchConfigBase, TruSearchControlBase, TruSearchControlConfigBase, TruSearchControlRangeBase, TruSearchIconModule, TruSearchPanelPositionManager, TruSearchPanelPositionManagerModule, TruSearchViewBase, TruSearchViewBaseModule, TruSearchViewControlEventHandler, TruSearchViewEventHandler, TruSort, TruTableConfigBase, TruTableRegistry, TruTextManager, TruToolbar, TruToolbarButton, TruToolbarButtonModule, TruToolbarContextFilter, TruToolbarContextFilterModule, TruToolbarDropdown, TruToolbarDropdownModule, TruToolbarMenu, TruToolbarMenuModule, TruToolbarModule, TruToolbarSeparator, TruToolbarSeparatorModule, TruToolbarText, TruToolbarTextModule, TruUiNotification, TruUser, TruUtil, TruWindowActionEventHandler, TruWindowAddViewEventArgs, TruWindowEventArgs, TruWindowEventHandler };
5360
+ export { DetailViewModule, TruAppEnvironment, TruAuthInterceptor, TruBreezeContext, TruBreezeContextFactory, TruBreezeMetadataProvider, TruChoice, TruColumn, TruColumnModule, TruCommonModule, TruComponentConfigBase, TruComponentLookup, TruConfirmDialog, TruConfirmDialogConfig, TruConfirmDialogModule, TruContextFilter, TruContextFilterChoice, TruContextFilters, TruControlComponentConfigBase, TruDataContext, TruDataGrid, TruDataGridModule, TruDataGridTypes, TruDesktop, TruDesktopManager, TruDesktopModule, TruDetailViewBase, TruEditControlConfigBase, TruEntityAccessor, TruEntityBase, TruExportDialog, TruExportDialogConfig, TruExportDialogModule, TruForm, TruFormModule, TruFormulaEval, TruGroupBox, TruGroupBoxModule, TruLogin, TruLoginModule, TruPredicate, TruPredicateMap, TruPropertyConfigBase, TruPropertyConfigCloudFile, TruPropertyConfigDate, TruPropertyConfigDecimal, TruPropertyConfigFile, TruPropertyConfigForeignKey, TruPropertyConfigInteger, TruPropertyConfigPassword, TruPropertyConfigPercentage, TruPropertyConfigScientific, TruPropertyConfigText, TruPropertyConfigTextChoices, TruPropertyConfigUsaAddress, TruPropertyConfigZipCode, TruQueryPredicateManager, TruRow, TruRowModule, TruSearchConfigBase, TruSearchControlBase, TruSearchControlConfigBase, TruSearchControlRangeBase, TruSearchIconModule, TruSearchPanelPositionManager, TruSearchPanelPositionManagerModule, TruSearchViewBase, TruSearchViewBaseModule, TruSearchViewControlEventHandler, TruSearchViewEventHandler, TruSort, TruTableConfigBase, TruTableRegistry, TruTextManager, TruToolbar, TruToolbarButton, TruToolbarButtonModule, TruToolbarContextFilter, TruToolbarContextFilterModule, TruToolbarDropdown, TruToolbarDropdownModule, TruToolbarMenu, TruToolbarMenuModule, TruToolbarModule, TruToolbarSeparator, TruToolbarSeparatorModule, TruToolbarText, TruToolbarTextModule, TruUiNotification, TruUser, TruUtil, TruWindowActionEventHandler, TruWindowAddViewEventArgs, TruWindowEventArgs, TruWindowEventHandler };
4961
5361
  //# sourceMappingURL=trudb-tru-common-lib.mjs.map