@meshmakers/shared-ui 2.1.17-0 → 3.1.26-0

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 (63) hide show
  1. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +22 -0
  2. package/esm2022/lib/breadcrumb/mat-breadcrumb/mat-breadcrumb.component.mjs +109 -0
  3. package/esm2022/lib/breadcrumb/model/breadcrumb.mjs +2 -0
  4. package/esm2022/lib/breadcrumb/services/breadcrumb.service.mjs +22 -0
  5. package/esm2022/lib/confirmation-dialog/confirmation-dialog.module.mjs +26 -0
  6. package/esm2022/lib/confirmation-dialog/confirmation-window/confirmation-window.component.mjs +75 -0
  7. package/esm2022/lib/confirmation-dialog/services/confirmation.service.mjs +69 -0
  8. package/esm2022/lib/ia-shared-ui/ia-autocomplete-input/ia-autocomplete-input.mjs +295 -0
  9. package/esm2022/lib/ia-shared-ui/ia-entity-select-input/ia-entity-select-input.component.mjs +288 -0
  10. package/esm2022/lib/ia-shared-ui/ia-multiple-entity-select-input/ia-multiple-entity-select-input.component.mjs +311 -0
  11. package/esm2022/lib/ia-shared-ui/ia-notification-bar/ia-notification-bar.component.mjs +39 -0
  12. package/esm2022/lib/ia-shared-ui/ia-shared-ui.module.mjs +74 -0
  13. package/esm2022/lib/ia-shared-ui/message-details/message-details.component.mjs +26 -0
  14. package/esm2022/lib/progress-notifier/progress-notifier.module.mjs +27 -0
  15. package/esm2022/lib/progress-notifier/progress-window/progress-window.component.mjs +35 -0
  16. package/esm2022/lib/progress-notifier/services/progress-notifier.service.mjs +63 -0
  17. package/esm2022/lib/progress-notifier/shared/progressValue.mjs +9 -0
  18. package/esm2022/lib/shared/abstractDetailsComponent.mjs +53 -0
  19. package/esm2022/lib/shared/commonValidators.mjs +36 -0
  20. package/esm2022/public-api.mjs +19 -0
  21. package/fesm2022/meshmakers-shared-ui.mjs +1499 -0
  22. package/fesm2022/meshmakers-shared-ui.mjs.map +1 -0
  23. package/lib/breadcrumb/breadcrumb.module.d.ts +12 -0
  24. package/lib/breadcrumb/mat-breadcrumb/mat-breadcrumb.component.d.ts +21 -0
  25. package/lib/breadcrumb/model/breadcrumb.d.ts +4 -0
  26. package/lib/breadcrumb/services/breadcrumb.service.d.ts +11 -0
  27. package/lib/confirmation-dialog/confirmation-dialog.module.d.ts +2 -3
  28. package/lib/confirmation-dialog/confirmation-window/confirmation-window.component.d.ts +3 -3
  29. package/lib/confirmation-dialog/services/confirmation.service.d.ts +4 -4
  30. package/lib/ia-shared-ui/ia-autocomplete-input/ia-autocomplete-input.d.ts +13 -13
  31. package/lib/ia-shared-ui/ia-entity-select-input/ia-entity-select-input.component.d.ts +12 -12
  32. package/lib/ia-shared-ui/ia-multiple-entity-select-input/ia-multiple-entity-select-input.component.d.ts +16 -16
  33. package/lib/ia-shared-ui/ia-notification-bar/ia-notification-bar.component.d.ts +4 -4
  34. package/lib/ia-shared-ui/message-details/message-details.component.d.ts +2 -2
  35. package/lib/progress-notifier/progress-notifier.module.d.ts +3 -4
  36. package/lib/progress-notifier/progress-window/progress-window.component.d.ts +2 -2
  37. package/lib/progress-notifier/services/progress-notifier.service.d.ts +2 -2
  38. package/lib/shared/abstractDetailsComponent.d.ts +8 -4
  39. package/lib/shared/commonValidators.d.ts +2 -4
  40. package/package.json +8 -14
  41. package/public-api.d.ts +3 -0
  42. package/esm2020/lib/confirmation-dialog/confirmation-dialog.module.mjs +0 -40
  43. package/esm2020/lib/confirmation-dialog/confirmation-window/confirmation-window.component.mjs +0 -69
  44. package/esm2020/lib/confirmation-dialog/services/confirmation.service.mjs +0 -68
  45. package/esm2020/lib/ia-shared-ui/ia-autocomplete-input/ia-autocomplete-input.mjs +0 -276
  46. package/esm2020/lib/ia-shared-ui/ia-entity-select-input/ia-entity-select-input.component.mjs +0 -276
  47. package/esm2020/lib/ia-shared-ui/ia-multiple-entity-select-input/ia-multiple-entity-select-input.component.mjs +0 -300
  48. package/esm2020/lib/ia-shared-ui/ia-notification-bar/ia-notification-bar.component.mjs +0 -36
  49. package/esm2020/lib/ia-shared-ui/ia-shared-ui.module.mjs +0 -88
  50. package/esm2020/lib/ia-shared-ui/message-details/message-details.component.mjs +0 -24
  51. package/esm2020/lib/progress-notifier/progress-notifier.module.mjs +0 -44
  52. package/esm2020/lib/progress-notifier/progress-window/progress-window.component.mjs +0 -34
  53. package/esm2020/lib/progress-notifier/services/progress-notifier.service.mjs +0 -59
  54. package/esm2020/lib/progress-notifier/shared/progressValue.mjs +0 -7
  55. package/esm2020/lib/shared/abstractDetailsComponent.mjs +0 -38
  56. package/esm2020/lib/shared/commonValidators.mjs +0 -36
  57. package/esm2020/public-api.mjs +0 -16
  58. package/fesm2015/meshmakers-shared-ui.mjs +0 -1352
  59. package/fesm2015/meshmakers-shared-ui.mjs.map +0 -1
  60. package/fesm2020/meshmakers-shared-ui.mjs +0 -1329
  61. package/fesm2020/meshmakers-shared-ui.mjs.map +0 -1
  62. /package/{esm2020 → esm2022}/lib/confirmation-dialog/shared/confirmation.mjs +0 -0
  63. /package/{esm2020 → esm2022}/meshmakers-shared-ui.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  import { OnInit } from '@angular/core';
2
- import { Observable } from "rxjs";
3
- import { ProgressValue } from "../shared/progressValue";
2
+ import { Observable } from 'rxjs';
3
+ import { ProgressValue } from '../shared/progressValue';
4
4
  import * as i0 from "@angular/core";
5
5
  export interface ProgressWindowData {
6
6
  title: string;
@@ -1,7 +1,7 @@
1
- import { MatDialog } from "@angular/material/dialog";
1
+ import { MatDialog } from '@angular/material/dialog';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class ProgressNotifierService {
4
- private dialog;
4
+ private readonly dialog;
5
5
  private readonly _currentProgressValue;
6
6
  private currentDialogRef;
7
7
  constructor(dialog: MatDialog);
@@ -1,9 +1,13 @@
1
- import { FormGroup } from "@angular/forms";
1
+ import { FormGroup } from '@angular/forms';
2
2
  export declare abstract class AbstractDetailsComponent<TEntity> {
3
- loading: boolean;
4
- protected entity: TEntity | null;
3
+ private _loading;
4
+ private readonly _ownerForm;
5
+ private _entity;
5
6
  protected constructor(formGroup: FormGroup);
6
- private _ownerForm;
7
+ get loading(): boolean;
8
+ set loading(value: boolean);
9
+ get entity(): TEntity | null;
10
+ set entity(value: TEntity | null);
7
11
  get ownerForm(): FormGroup;
8
12
  get isLoaded(): boolean;
9
13
  hasError: (controlName: string, errorName: string) => boolean;
@@ -1,7 +1,5 @@
1
- import { ValidatorFn } from "@angular/forms";
2
- export declare interface CompareValueFn<TValue> {
3
- (value: TValue): boolean;
4
- }
1
+ import { ValidatorFn } from '@angular/forms';
2
+ export type CompareValueFn<TValue> = (value: TValue) => boolean;
5
3
  export declare class CommonValidators {
6
4
  static phoneNumber(): ValidatorFn;
7
5
  static httpUri(): ValidatorFn;
package/package.json CHANGED
@@ -1,19 +1,15 @@
1
1
  {
2
2
  "name": "@meshmakers/shared-ui",
3
- "version": "2.1.17-0",
3
+ "version": "3.1.26-0",
4
4
  "peerDependencies": {
5
- "@angular/common": "^15.2.0",
6
- "@angular/core": "^15.2.0"
5
+ "@angular/common": "^17.3.4",
6
+ "@angular/core": "^17.3.4"
7
7
  },
8
8
  "dependencies": {
9
- "tslib": "^2.3.0"
9
+ "tslib": "^2.6.2"
10
10
  },
11
11
  "sideEffects": false,
12
- "module": "fesm2015/meshmakers-shared-ui.mjs",
13
- "es2020": "fesm2020/meshmakers-shared-ui.mjs",
14
- "esm2020": "esm2020/meshmakers-shared-ui.mjs",
15
- "fesm2020": "fesm2020/meshmakers-shared-ui.mjs",
16
- "fesm2015": "fesm2015/meshmakers-shared-ui.mjs",
12
+ "module": "fesm2022/meshmakers-shared-ui.mjs",
17
13
  "typings": "index.d.ts",
18
14
  "exports": {
19
15
  "./package.json": {
@@ -21,11 +17,9 @@
21
17
  },
22
18
  ".": {
23
19
  "types": "./index.d.ts",
24
- "esm2020": "./esm2020/meshmakers-shared-ui.mjs",
25
- "es2020": "./fesm2020/meshmakers-shared-ui.mjs",
26
- "es2015": "./fesm2015/meshmakers-shared-ui.mjs",
27
- "node": "./fesm2015/meshmakers-shared-ui.mjs",
28
- "default": "./fesm2020/meshmakers-shared-ui.mjs"
20
+ "esm2022": "./esm2022/meshmakers-shared-ui.mjs",
21
+ "esm": "./esm2022/meshmakers-shared-ui.mjs",
22
+ "default": "./fesm2022/meshmakers-shared-ui.mjs"
29
23
  }
30
24
  }
31
25
  }
package/public-api.d.ts CHANGED
@@ -10,3 +10,6 @@ export * from './lib/confirmation-dialog/services/confirmation.service';
10
10
  export * from './lib/confirmation-dialog/shared/confirmation';
11
11
  export * from './lib/shared/commonValidators';
12
12
  export * from './lib/shared/abstractDetailsComponent';
13
+ export * from './lib/breadcrumb/breadcrumb.module';
14
+ export * from './lib/breadcrumb/mat-breadcrumb/mat-breadcrumb.component';
15
+ export * from './lib/breadcrumb/services/breadcrumb.service';
@@ -1,40 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { ConfirmationWindowComponent } from './confirmation-window/confirmation-window.component';
4
- import { ConfirmationService } from "./services/confirmation.service";
5
- import { MatDialogModule } from "@angular/material/dialog";
6
- import { FlexLayoutModule } from "@angular/flex-layout";
7
- import { MatButtonModule } from "@angular/material/button";
8
- import * as i0 from "@angular/core";
9
- export class ConfirmationDialogModule {
10
- static forRoot() {
11
- return {
12
- ngModule: ConfirmationDialogModule,
13
- providers: [
14
- ConfirmationService
15
- ]
16
- };
17
- }
18
- }
19
- ConfirmationDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
- ConfirmationDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationDialogModule, declarations: [ConfirmationWindowComponent], imports: [CommonModule,
21
- MatDialogModule,
22
- FlexLayoutModule,
23
- MatButtonModule] });
24
- ConfirmationDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationDialogModule, imports: [CommonModule,
25
- MatDialogModule,
26
- FlexLayoutModule,
27
- MatButtonModule] });
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationDialogModule, decorators: [{
29
- type: NgModule,
30
- args: [{
31
- declarations: [ConfirmationWindowComponent],
32
- imports: [
33
- CommonModule,
34
- MatDialogModule,
35
- FlexLayoutModule,
36
- MatButtonModule,
37
- ]
38
- }]
39
- }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybWF0aW9uLWRpYWxvZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC11aS9zcmMvbGliL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQ2hHLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7O0FBWXpELE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsUUFBUSxFQUFFLHdCQUF3QjtZQUNsQyxTQUFTLEVBQUU7Z0JBQ1QsbUJBQW1CO2FBQ3BCO1NBQ0YsQ0FBQTtJQUNILENBQUM7O3FIQVJVLHdCQUF3QjtzSEFBeEIsd0JBQXdCLGlCQVJwQiwyQkFBMkIsYUFFeEMsWUFBWTtRQUNaLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsZUFBZTtzSEFHTix3QkFBd0IsWUFOakMsWUFBWTtRQUNaLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsZUFBZTsyRkFHTix3QkFBd0I7a0JBVHBDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsMkJBQTJCLENBQUM7b0JBQzNDLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixlQUFlO3FCQUNoQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NvbmZpcm1hdGlvbldpbmRvd0NvbXBvbmVudH0gZnJvbSAnLi9jb25maXJtYXRpb24td2luZG93L2NvbmZpcm1hdGlvbi13aW5kb3cuY29tcG9uZW50JztcbmltcG9ydCB7Q29uZmlybWF0aW9uU2VydmljZX0gZnJvbSBcIi4vc2VydmljZXMvY29uZmlybWF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7TWF0RGlhbG9nTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge0ZsZXhMYXlvdXRNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9mbGV4LWxheW91dFwiO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcblxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtDb25maXJtYXRpb25XaW5kb3dDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICBGbGV4TGF5b3V0TW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb25maXJtYXRpb25EaWFsb2dNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPENvbmZpcm1hdGlvbkRpYWxvZ01vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQ29uZmlybWF0aW9uRGlhbG9nTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIENvbmZpcm1hdGlvblNlcnZpY2VcbiAgICAgIF1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,69 +0,0 @@
1
- import { Component, Inject } from '@angular/core';
2
- import { MAT_DIALOG_DATA } from "@angular/material/dialog";
3
- import { ButtonTypes, DialogType } from "../shared/confirmation";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/material/dialog";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "@angular/flex-layout/flex";
8
- import * as i4 from "@angular/material/button";
9
- export class ConfirmationWindowComponent {
10
- constructor(dialogRef, data) {
11
- this.dialogRef = dialogRef;
12
- this.data = data;
13
- this.button2Text = null;
14
- this.button2Result = null;
15
- this.button3Text = null;
16
- this.button3Result = null;
17
- if (data.dialogType === DialogType.OkCancel) {
18
- this.button1Text = "OK";
19
- this.button1Result = ButtonTypes.Ok;
20
- this.button2Text = "Cancel";
21
- this.button2Result = ButtonTypes.Cancel;
22
- }
23
- else if (data.dialogType === DialogType.YesNoCancel) {
24
- this.button1Text = "Yes";
25
- this.button1Result = ButtonTypes.Yes;
26
- this.button2Text = "No";
27
- this.button2Result = ButtonTypes.No;
28
- this.button3Text = "Cancel";
29
- this.button3Result = ButtonTypes.Cancel;
30
- }
31
- else if (data.dialogType === DialogType.Ok) {
32
- this.button1Text = "OK";
33
- this.button1Result = ButtonTypes.Ok;
34
- }
35
- else {
36
- this.button1Text = "Yes";
37
- this.button1Result = ButtonTypes.Yes;
38
- this.button2Text = "No";
39
- this.button2Result = ButtonTypes.No;
40
- }
41
- }
42
- ngOnInit() {
43
- }
44
- onButton1() {
45
- this.dialogRef.close({
46
- result: this.button1Result
47
- });
48
- }
49
- onButton2() {
50
- this.dialogRef.close({
51
- result: this.button2Result
52
- });
53
- }
54
- onButton3() {
55
- this.dialogRef.close({
56
- result: this.button3Result
57
- });
58
- }
59
- }
60
- ConfirmationWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationWindowComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
61
- ConfirmationWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: ConfirmationWindowComponent, selector: "lib-shared-ui-confirmation-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>{{data.message}}</div>\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\n <button (click)=\"onButton1()\" color=\"primary\" mat-button>{{button1Text}}</button>\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-button>{{button2Text}}</button>\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-button>{{button3Text}}</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationWindowComponent, decorators: [{
63
- type: Component,
64
- args: [{ selector: 'lib-shared-ui-confirmation-window', template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>{{data.message}}</div>\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\n <button (click)=\"onButton1()\" color=\"primary\" mat-button>{{button1Text}}</button>\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-button>{{button2Text}}</button>\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-button>{{button3Text}}</button>\n</div>\n" }]
65
- }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
66
- type: Inject,
67
- args: [MAT_DIALOG_DATA]
68
- }] }]; } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybWF0aW9uLXdpbmRvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC11aS9zcmMvbGliL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLXdpbmRvdy9jb25maXJtYXRpb24td2luZG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lc2htYWtlcnMvc2hhcmVkLXVpL3NyYy9saWIvY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24td2luZG93L2NvbmZpcm1hdGlvbi13aW5kb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBZSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxXQUFXLEVBQW9ELFVBQVUsRUFBQyxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFPakgsTUFBTSxPQUFPLDJCQUEyQjtJQVN0QyxZQUFvQixTQUFvRCxFQUFrQyxJQUE0QjtRQUFsSCxjQUFTLEdBQVQsU0FBUyxDQUEyQztRQUFrQyxTQUFJLEdBQUosSUFBSSxDQUF3QjtRQUVwSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7WUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1NBRXpDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7U0FDekM7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUM7U0FDckM7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUM7U0FDckM7SUFFSCxDQUFDO0lBRUQsUUFBUTtJQUVSLENBQUM7SUFFRCxTQUFTO1FBRVAsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQTJCO1lBQzdDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYTtTQUMzQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUEyQjtZQUM3QyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBMkI7WUFDN0MsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7O3dIQTlEVSwyQkFBMkIsOENBUzRDLGVBQWU7NEdBVHRGLDJCQUEyQix5RUNUeEMsdWFBT0E7MkZERWEsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLG1DQUFtQzs7MEJBYThCLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge0J1dHRvblR5cGVzLCBDb25maXJtYXRpb25XaW5kb3dEYXRhLCBDb25maXJtYXRpb25XaW5kb3dSZXN1bHQsIERpYWxvZ1R5cGV9IGZyb20gXCIuLi9zaGFyZWQvY29uZmlybWF0aW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zaGFyZWQtdWktY29uZmlybWF0aW9uLXdpbmRvdycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maXJtYXRpb24td2luZG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29uZmlybWF0aW9uLXdpbmRvdy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlybWF0aW9uV2luZG93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBidXR0b24xVGV4dDogc3RyaW5nO1xuICBidXR0b24xUmVzdWx0OiBCdXR0b25UeXBlcztcbiAgYnV0dG9uMlRleHQ6IHN0cmluZyB8IG51bGw7XG4gIGJ1dHRvbjJSZXN1bHQ6IEJ1dHRvblR5cGVzIHwgbnVsbDtcbiAgYnV0dG9uM1RleHQ6IHN0cmluZyB8IG51bGw7XG4gIGJ1dHRvbjNSZXN1bHQ6IEJ1dHRvblR5cGVzIHwgbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPENvbmZpcm1hdGlvbldpbmRvd0NvbXBvbmVudD4sIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogQ29uZmlybWF0aW9uV2luZG93RGF0YSkge1xuXG4gICAgdGhpcy5idXR0b24yVGV4dCA9IG51bGw7XG4gICAgdGhpcy5idXR0b24yUmVzdWx0ID0gbnVsbDtcbiAgICB0aGlzLmJ1dHRvbjNUZXh0ID0gbnVsbDtcbiAgICB0aGlzLmJ1dHRvbjNSZXN1bHQgPSBudWxsO1xuXG4gICAgaWYgKGRhdGEuZGlhbG9nVHlwZSA9PT0gRGlhbG9nVHlwZS5Pa0NhbmNlbCkge1xuICAgICAgdGhpcy5idXR0b24xVGV4dCA9IFwiT0tcIjtcbiAgICAgIHRoaXMuYnV0dG9uMVJlc3VsdCA9IEJ1dHRvblR5cGVzLk9rO1xuICAgICAgdGhpcy5idXR0b24yVGV4dCA9IFwiQ2FuY2VsXCI7XG4gICAgICB0aGlzLmJ1dHRvbjJSZXN1bHQgPSBCdXR0b25UeXBlcy5DYW5jZWw7XG5cbiAgICB9IGVsc2UgaWYgKGRhdGEuZGlhbG9nVHlwZSA9PT0gRGlhbG9nVHlwZS5ZZXNOb0NhbmNlbCkge1xuICAgICAgdGhpcy5idXR0b24xVGV4dCA9IFwiWWVzXCI7XG4gICAgICB0aGlzLmJ1dHRvbjFSZXN1bHQgPSBCdXR0b25UeXBlcy5ZZXM7XG4gICAgICB0aGlzLmJ1dHRvbjJUZXh0ID0gXCJOb1wiO1xuICAgICAgdGhpcy5idXR0b24yUmVzdWx0ID0gQnV0dG9uVHlwZXMuTm87XG4gICAgICB0aGlzLmJ1dHRvbjNUZXh0ID0gXCJDYW5jZWxcIjtcbiAgICAgIHRoaXMuYnV0dG9uM1Jlc3VsdCA9IEJ1dHRvblR5cGVzLkNhbmNlbDtcbiAgICB9IGVsc2UgaWYgKGRhdGEuZGlhbG9nVHlwZSA9PT0gRGlhbG9nVHlwZS5Paykge1xuICAgICAgdGhpcy5idXR0b24xVGV4dCA9IFwiT0tcIjtcbiAgICAgIHRoaXMuYnV0dG9uMVJlc3VsdCA9IEJ1dHRvblR5cGVzLk9rO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1dHRvbjFUZXh0ID0gXCJZZXNcIjtcbiAgICAgIHRoaXMuYnV0dG9uMVJlc3VsdCA9IEJ1dHRvblR5cGVzLlllcztcbiAgICAgIHRoaXMuYnV0dG9uMlRleHQgPSBcIk5vXCI7XG4gICAgICB0aGlzLmJ1dHRvbjJSZXN1bHQgPSBCdXR0b25UeXBlcy5ObztcbiAgICB9XG5cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gIH1cblxuICBvbkJ1dHRvbjEoKSB7XG5cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSg8Q29uZmlybWF0aW9uV2luZG93UmVzdWx0PntcbiAgICAgIHJlc3VsdDogdGhpcy5idXR0b24xUmVzdWx0XG4gICAgfSk7XG4gIH1cblxuICBvbkJ1dHRvbjIoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoPENvbmZpcm1hdGlvbldpbmRvd1Jlc3VsdD57XG4gICAgICByZXN1bHQ6IHRoaXMuYnV0dG9uMlJlc3VsdFxuICAgIH0pO1xuICB9XG5cbiAgb25CdXR0b24zKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKDxDb25maXJtYXRpb25XaW5kb3dSZXN1bHQ+e1xuICAgICAgcmVzdWx0OiB0aGlzLmJ1dHRvbjNSZXN1bHRcbiAgICB9KTtcbiAgfVxufVxuIiwiPGgxIG1hdC1kaWFsb2ctdGl0bGU+e3tkYXRhLnRpdGxlfX08L2gxPlxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+e3tkYXRhLm1lc3NhZ2V9fTwvZGl2PlxuPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCIgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8YnV0dG9uIChjbGljayk9XCJvbkJ1dHRvbjEoKVwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1idXR0b24+e3tidXR0b24xVGV4dH19PC9idXR0b24+XG4gIDxidXR0b24gKGNsaWNrKT1cIm9uQnV0dG9uMigpXCIgKm5nSWY9XCJidXR0b24yVGV4dFwiIG1hdC1idXR0b24+e3tidXR0b24yVGV4dH19PC9idXR0b24+XG4gIDxidXR0b24gKGNsaWNrKT1cIm9uQnV0dG9uMygpXCIgKm5nSWY9XCJidXR0b24zVGV4dFwiIG1hdC1idXR0b24+e3tidXR0b24zVGV4dH19PC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
@@ -1,68 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { ConfirmationWindowComponent } from "../confirmation-window/confirmation-window.component";
3
- import { map } from "rxjs/operators";
4
- import { ButtonTypes, DialogType } from "../shared/confirmation";
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/material/dialog";
7
- export class ConfirmationService {
8
- constructor(dialog) {
9
- this.dialog = dialog;
10
- }
11
- showYesNoConfirmationDialog(title, message) {
12
- const dialogRef = this.dialog.open(ConfirmationWindowComponent, {
13
- width: '50vw',
14
- maxWidth: '50vw',
15
- data: {
16
- title: title,
17
- message: message,
18
- dialogType: DialogType.YesNo
19
- }
20
- });
21
- return dialogRef.afterClosed().pipe(map(value => value?.result == ButtonTypes.Yes));
22
- }
23
- showYesNoCancelConfirmationDialog(title, message) {
24
- const dialogRef = this.dialog.open(ConfirmationWindowComponent, {
25
- width: '50vw',
26
- maxWidth: '50vw',
27
- data: {
28
- title: title,
29
- message: message,
30
- dialogType: DialogType.YesNoCancel
31
- }
32
- });
33
- return dialogRef.afterClosed();
34
- }
35
- showOkCancelConfirmationDialog(title, message) {
36
- const dialogRef = this.dialog.open(ConfirmationWindowComponent, {
37
- width: '50vw',
38
- maxWidth: '50vw',
39
- data: {
40
- title: title,
41
- message: message,
42
- dialogType: DialogType.OkCancel
43
- }
44
- });
45
- return dialogRef.afterClosed().pipe(map(value => value?.result == ButtonTypes.Ok));
46
- }
47
- showOkDialog(title, message) {
48
- const dialogRef = this.dialog.open(ConfirmationWindowComponent, {
49
- width: '50vw',
50
- maxWidth: '50vw',
51
- data: {
52
- title: title,
53
- message: message,
54
- dialogType: DialogType.Ok
55
- }
56
- });
57
- return dialogRef.afterClosed().pipe(map(value => value?.result == ButtonTypes.Ok));
58
- }
59
- }
60
- ConfirmationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
61
- ConfirmationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationService, providedIn: 'root' });
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationService, decorators: [{
63
- type: Injectable,
64
- args: [{
65
- providedIn: 'root'
66
- }]
67
- }], ctorParameters: function () { return [{ type: i1.MatDialog }]; } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybWF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC11aS9zcmMvbGliL2NvbmZpcm1hdGlvbi1kaWFsb2cvc2VydmljZXMvY29uZmlybWF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd6QyxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUNqRyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkMsT0FBTyxFQUFDLFdBQVcsRUFBb0QsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7OztBQUtqSCxNQUFNLE9BQU8sbUJBQW1CO0lBRTlCLFlBQW9CLE1BQWlCO1FBQWpCLFdBQU0sR0FBTixNQUFNLENBQVc7SUFDckMsQ0FBQztJQUVELDJCQUEyQixDQUFDLEtBQWEsRUFBRSxPQUFlO1FBRXhELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFnRiwyQkFBMkIsRUFBRTtZQUM3SSxLQUFLLEVBQUUsTUFBTTtZQUNiLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLElBQUksRUFBMEI7Z0JBQzVCLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixVQUFVLEVBQUUsVUFBVSxDQUFDLEtBQUs7YUFDN0I7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsaUNBQWlDLENBQUMsS0FBYSxFQUFFLE9BQWU7UUFFOUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdGLDJCQUEyQixFQUFFO1lBQzdJLEtBQUssRUFBRSxNQUFNO1lBQ2IsUUFBUSxFQUFFLE1BQU07WUFDaEIsSUFBSSxFQUEwQjtnQkFDNUIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLFVBQVUsRUFBRSxVQUFVLENBQUMsV0FBVzthQUNuQztTQUNGLENBQUMsQ0FBQztRQUVILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxLQUFhLEVBQUUsT0FBZTtRQUUzRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBZ0YsMkJBQTJCLEVBQUU7WUFDN0ksS0FBSyxFQUFFLE1BQU07WUFDYixRQUFRLEVBQUUsTUFBTTtZQUNoQixJQUFJLEVBQTBCO2dCQUM1QixLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsT0FBTztnQkFDaEIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRO2FBQ2hDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhLEVBQUUsT0FBZTtRQUV6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBZ0YsMkJBQTJCLEVBQUU7WUFDN0ksS0FBSyxFQUFFLE1BQU07WUFDYixRQUFRLEVBQUUsTUFBTTtZQUNoQixJQUFJLEVBQTBCO2dCQUM1QixLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsT0FBTztnQkFDaEIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFO2FBQzFCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQzs7Z0hBL0RVLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHtDb25maXJtYXRpb25XaW5kb3dDb21wb25lbnR9IGZyb20gXCIuLi9jb25maXJtYXRpb24td2luZG93L2NvbmZpcm1hdGlvbi13aW5kb3cuY29tcG9uZW50XCI7XG5pbXBvcnQge21hcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge0J1dHRvblR5cGVzLCBDb25maXJtYXRpb25XaW5kb3dEYXRhLCBDb25maXJtYXRpb25XaW5kb3dSZXN1bHQsIERpYWxvZ1R5cGV9IGZyb20gXCIuLi9zaGFyZWQvY29uZmlybWF0aW9uXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpcm1hdGlvblNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2cpIHtcbiAgfVxuXG4gIHNob3dZZXNOb0NvbmZpcm1hdGlvbkRpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcblxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW48Q29uZmlybWF0aW9uV2luZG93Q29tcG9uZW50LCBDb25maXJtYXRpb25XaW5kb3dEYXRhLCBDb25maXJtYXRpb25XaW5kb3dSZXN1bHQ+KENvbmZpcm1hdGlvbldpbmRvd0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc1MHZ3JyxcbiAgICAgIG1heFdpZHRoOiAnNTB2dycsXG4gICAgICBkYXRhOiA8Q29uZmlybWF0aW9uV2luZG93RGF0YT57XG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgZGlhbG9nVHlwZTogRGlhbG9nVHlwZS5ZZXNOb1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnBpcGUobWFwKHZhbHVlID0+IHZhbHVlPy5yZXN1bHQgPT0gQnV0dG9uVHlwZXMuWWVzKSk7XG4gIH1cblxuICBzaG93WWVzTm9DYW5jZWxDb25maXJtYXRpb25EaWFsb2codGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxDb25maXJtYXRpb25XaW5kb3dSZXN1bHQgfCB1bmRlZmluZWQ+IHtcblxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW48Q29uZmlybWF0aW9uV2luZG93Q29tcG9uZW50LCBDb25maXJtYXRpb25XaW5kb3dEYXRhLCBDb25maXJtYXRpb25XaW5kb3dSZXN1bHQ+KENvbmZpcm1hdGlvbldpbmRvd0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc1MHZ3JyxcbiAgICAgIG1heFdpZHRoOiAnNTB2dycsXG4gICAgICBkYXRhOiA8Q29uZmlybWF0aW9uV2luZG93RGF0YT57XG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgZGlhbG9nVHlwZTogRGlhbG9nVHlwZS5ZZXNOb0NhbmNlbFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpO1xuICB9XG5cbiAgc2hvd09rQ2FuY2VsQ29uZmlybWF0aW9uRGlhbG9nKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxDb25maXJtYXRpb25XaW5kb3dDb21wb25lbnQsIENvbmZpcm1hdGlvbldpbmRvd0RhdGEsIENvbmZpcm1hdGlvbldpbmRvd1Jlc3VsdD4oQ29uZmlybWF0aW9uV2luZG93Q29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzUwdncnLFxuICAgICAgbWF4V2lkdGg6ICc1MHZ3JyxcbiAgICAgIGRhdGE6IDxDb25maXJtYXRpb25XaW5kb3dEYXRhPntcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICBkaWFsb2dUeXBlOiBEaWFsb2dUeXBlLk9rQ2FuY2VsXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkucGlwZShtYXAodmFsdWUgPT4gdmFsdWU/LnJlc3VsdCA9PSBCdXR0b25UeXBlcy5PaykpO1xuICB9XG5cbiAgc2hvd09rRGlhbG9nKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxDb25maXJtYXRpb25XaW5kb3dDb21wb25lbnQsIENvbmZpcm1hdGlvbldpbmRvd0RhdGEsIENvbmZpcm1hdGlvbldpbmRvd1Jlc3VsdD4oQ29uZmlybWF0aW9uV2luZG93Q29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzUwdncnLFxuICAgICAgbWF4V2lkdGg6ICc1MHZ3JyxcbiAgICAgIGRhdGE6IDxDb25maXJtYXRpb25XaW5kb3dEYXRhPntcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICBkaWFsb2dUeXBlOiBEaWFsb2dUeXBlLk9rXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkucGlwZShtYXAodmFsdWUgPT4gdmFsdWU/LnJlc3VsdCA9PSBCdXR0b25UeXBlcy5PaykpO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,276 +0,0 @@
1
- import { Component, EventEmitter, forwardRef, HostBinding, Input, ViewChild } from '@angular/core';
2
- import { MatFormFieldControl } from "@angular/material/form-field";
3
- import { FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl } from "@angular/forms";
4
- import { coerceBooleanProperty } from "@angular/cdk/coercion";
5
- import { debounceTime, filter, map, switchMap, tap } from "rxjs/operators";
6
- import { of, Subject } from "rxjs";
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/cdk/a11y";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "@angular/material/autocomplete";
11
- import * as i4 from "@angular/material/core";
12
- import * as i5 from "@angular/material/input";
13
- import * as i6 from "@angular/material/progress-spinner";
14
- import * as i7 from "@angular/forms";
15
- export class IaAutocompleteInput {
16
- constructor(elRef, injector, fm) {
17
- this.elRef = elRef;
18
- this.injector = injector;
19
- this.fm = fm;
20
- this.filteredStrings = [];
21
- this.stateChanges = new Subject();
22
- this.id = `ia-autocomplete-${IaAutocompleteInput.nextId++}`;
23
- this.valueChange = new EventEmitter();
24
- this.describedBy = '';
25
- this._disabled = false;
26
- this._required = false;
27
- this._propagateChange = (_) => {
28
- };
29
- this._onTouched = () => {
30
- };
31
- this.ngControl = null;
32
- this.errorState = false;
33
- this._selectedString = null;
34
- this.inputField = null;
35
- this._dataSource = null;
36
- this._placeholder = "";
37
- this._prefix = "";
38
- this.searchFormControl = new FormControl();
39
- this.isLoading = false;
40
- this._disabled = false;
41
- this.focused = false;
42
- fm.monitor(elRef.nativeElement, true).subscribe(origin => {
43
- this.focused = !!origin;
44
- this.stateChanges.next();
45
- });
46
- }
47
- get dataSource() {
48
- return this._dataSource;
49
- }
50
- set dataSource(value) {
51
- this._dataSource = value;
52
- }
53
- get disabled() {
54
- return this._disabled;
55
- }
56
- set disabled(dis) {
57
- this._disabled = coerceBooleanProperty(dis);
58
- this._disabled ? this.searchFormControl.disable() : this.searchFormControl.enable();
59
- this.stateChanges.next();
60
- }
61
- get placeholder() {
62
- return this._placeholder;
63
- }
64
- set placeholder(plh) {
65
- this._placeholder = plh;
66
- this.stateChanges.next();
67
- }
68
- get required() {
69
- return this._required;
70
- }
71
- set required(req) {
72
- this._required = coerceBooleanProperty(req);
73
- if (this.inputField) {
74
- this.inputField.required = this._required;
75
- }
76
- this.stateChanges.next();
77
- }
78
- get prefix() {
79
- return this._prefix;
80
- }
81
- set prefix(value) {
82
- if (value !== this._prefix) {
83
- this._prefix = value;
84
- }
85
- }
86
- get value() {
87
- return this._selectedString;
88
- }
89
- set value(value) {
90
- if (value !== this._selectedString) {
91
- this._selectedString = value;
92
- this.searchFormControl.setValue(value);
93
- this.valueChange.emit(value);
94
- this._propagateChange(this._selectedString);
95
- this.stateChanges.next();
96
- }
97
- }
98
- get empty() {
99
- let n = this.searchFormControl.value;
100
- return !n;
101
- }
102
- get shouldLabelFloat() {
103
- return this.focused || !this.empty;
104
- }
105
- ngOnInit() {
106
- this.ngControl = this.injector.get(NgControl, null);
107
- if (this.ngControl != null) {
108
- this.ngControl.valueAccessor = this;
109
- }
110
- // If prefix defined, usually this is used for a code scanner.
111
- // The goal is to select the entity in direct way.
112
- if (this._prefix) {
113
- this.searchFormControl
114
- .valueChanges
115
- .pipe(debounceTime(300), filter(value => typeof value === 'string'), filter(value => value.startsWith(this._prefix)), tap(() => this.value = null), tap(() => this.isLoading = true), map(value => this._dataSource?.onPreprocessSearchString(value) ?? ""), switchMap(value => this._dataSource?.onFilter(value) ?? of(null)))
116
- .subscribe(resultSet => {
117
- if (resultSet && resultSet.list) {
118
- if (resultSet.list.length === 1) {
119
- this.value = resultSet.list[0];
120
- }
121
- else {
122
- this.filteredStrings = resultSet.list;
123
- this.searchFormControl.patchValue(resultSet.searchTerm, { emitEvent: false });
124
- }
125
- }
126
- this.isLoading = false;
127
- });
128
- }
129
- // This is the search functionality when search by human.
130
- this.searchFormControl
131
- .valueChanges
132
- .pipe(debounceTime(300), tap(_ => {
133
- this.filteredStrings = [];
134
- }), filter(value => value != null && value.toString().length >= 1), tap(() => this.isLoading = true), map(value => this._dataSource?.onPreprocessSearchString(value)), tap(value => this.value = value), switchMap(value => this._dataSource?.onFilter(value) ?? of(null)))
135
- .subscribe(resultSet => {
136
- if (resultSet && resultSet.list) {
137
- this.filteredStrings = resultSet.list;
138
- this.searchFormControl.patchValue(resultSet.searchTerm, { emitEvent: false });
139
- }
140
- this.isLoading = false;
141
- });
142
- }
143
- ngOnDestroy() {
144
- this.stateChanges.complete();
145
- this.fm.stopMonitoring(this.elRef.nativeElement);
146
- }
147
- ngDoCheck() {
148
- if (this.ngControl) {
149
- this.errorState = (this.ngControl.invalid && this.ngControl.touched) ?? false;
150
- this.stateChanges.next();
151
- }
152
- }
153
- clear() {
154
- this.filteredStrings = [];
155
- this.searchFormControl.reset(null);
156
- }
157
- focus() {
158
- this.elRef.nativeElement.querySelector('input').focus();
159
- }
160
- onOptionSelected(event) {
161
- this.value = event.option.value;
162
- this.filteredStrings = [];
163
- }
164
- onOptionActivated(event) {
165
- this.activatedValue = event.option?.value;
166
- }
167
- onAutoCompleteClosed() {
168
- if (this.activatedValue) {
169
- this.value = this.activatedValue;
170
- this.activatedValue = null;
171
- }
172
- }
173
- reset() {
174
- this.value = null;
175
- }
176
- onFocusOut() {
177
- if (this.filteredStrings.length === 1) {
178
- this.activatedValue = this.filteredStrings[0];
179
- this.value = this.filteredStrings[0];
180
- }
181
- }
182
- onTouched() {
183
- this._onTouched();
184
- this.stateChanges.next();
185
- }
186
- registerOnChange(fn) {
187
- this._propagateChange = fn;
188
- }
189
- registerOnTouched(fn) {
190
- this.onTouched = fn;
191
- }
192
- writeValue(obj) {
193
- this.clear();
194
- this.value = obj;
195
- }
196
- setDisabledState(isDisabled) {
197
- this.disabled = isDisabled;
198
- }
199
- onContainerClick(event) {
200
- if (event.target.tagName.toLowerCase() != 'input') {
201
- this.focus();
202
- }
203
- }
204
- setDescribedByIds(ids) {
205
- this.describedBy = ids.join(' ');
206
- }
207
- validate(control) {
208
- const selection = control.value;
209
- if (typeof selection === 'string' && selection.length < 1) {
210
- return { incorrect: true };
211
- }
212
- return null;
213
- }
214
- }
215
- IaAutocompleteInput.nextId = 0;
216
- IaAutocompleteInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaAutocompleteInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
217
- IaAutocompleteInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: IaAutocompleteInput, selector: "ia-autocomplete", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
218
- {
219
- provide: NG_VALUE_ACCESSOR,
220
- useExisting: forwardRef(() => IaAutocompleteInput),
221
- multi: true
222
- },
223
- {
224
- provide: MatFormFieldControl,
225
- useExisting: IaAutocompleteInput
226
- },
227
- {
228
- provide: NG_VALIDATORS,
229
- useExisting: forwardRef(() => IaAutocompleteInput),
230
- multi: true
231
- }
232
- ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\"\n (closed)=\"onAutoCompleteClosed()\" (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let str of filteredStrings\" [value]=\"str\">\n {{str}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i5.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: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaAutocompleteInput, decorators: [{
234
- type: Component,
235
- args: [{ selector: 'ia-autocomplete', host: {
236
- '[id]': 'id',
237
- '[attr.aria-describedby]': 'describedBy'
238
- }, providers: [
239
- {
240
- provide: NG_VALUE_ACCESSOR,
241
- useExisting: forwardRef(() => IaAutocompleteInput),
242
- multi: true
243
- },
244
- {
245
- provide: MatFormFieldControl,
246
- useExisting: IaAutocompleteInput
247
- },
248
- {
249
- provide: NG_VALIDATORS,
250
- useExisting: forwardRef(() => IaAutocompleteInput),
251
- multi: true
252
- }
253
- ], template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\"\n (closed)=\"onAutoCompleteClosed()\" (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let str of filteredStrings\" [value]=\"str\">\n {{str}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"] }]
254
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i1.FocusMonitor }]; }, propDecorators: { id: [{
255
- type: HostBinding
256
- }], inputField: [{
257
- type: ViewChild,
258
- args: ['input']
259
- }], describedBy: [{
260
- type: HostBinding,
261
- args: ['attr.aria-describedby']
262
- }], dataSource: [{
263
- type: Input
264
- }], disabled: [{
265
- type: Input
266
- }], placeholder: [{
267
- type: Input
268
- }], required: [{
269
- type: Input
270
- }], prefix: [{
271
- type: Input
272
- }], shouldLabelFloat: [{
273
- type: HostBinding,
274
- args: ['class.floating']
275
- }] } });
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWEtYXV0b2NvbXBsZXRlLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtdWkvc3JjL2xpYi9pYS1zaGFyZWQtdWkvaWEtYXV0b2NvbXBsZXRlLWlucHV0L2lhLWF1dG9jb21wbGV0ZS1pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lc2htYWtlcnMvc2hhcmVkLXVpL3NyYy9saWIvaWEtc2hhcmVkLXVpL2lhLWF1dG9jb21wbGV0ZS1pbnB1dC9pYS1hdXRvY29tcGxldGUtaW5wdXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUVYLEtBQUssRUFHTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUdMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLFNBQVMsRUFHVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHekUsT0FBTyxFQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQTZCakMsTUFBTSxPQUFPLG1CQUFtQjtJQWtCOUIsWUFBbUIsS0FBaUIsRUFBVSxRQUFrQixFQUFVLEVBQWdCO1FBQXZFLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQVpuRixvQkFBZSxHQUFhLEVB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QUNqQzt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO21KQWE4QixFQUFFO3NCQUFoQyxXQUFXO2dCQUdnQixVQUFVO3NCQUFyQyxTQUFTO3VCQUFDLE9BQU87Z0JBQzRCLFdBQVc7c0JBQXhELFdBQVc7dUJBQUMsdUJBQXVCO2dCQTZCekIsVUFBVTtzQkFEcEIsS0FBSztnQkFRSyxRQUFRO3NCQURsQixLQUFLO2dCQWNLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBYUssUUFBUTtzQkFEbEIsS0FBSztnQkFnQkssTUFBTTtzQkFEaEIsS0FBSztnQkErQkssZ0JBQWdCO3NCQUQxQixXQUFXO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXRGb3JtRmllbGRDb250cm9sfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZFwiO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBOZ0NvbnRyb2wsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlQWN0aXZhdGVkRXZlbnQsIE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnR9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGVcIjtcbmltcG9ydCB7TWF0SW5wdXR9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dFwiO1xuaW1wb3J0IHtvZiwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7Rm9jdXNNb25pdG9yfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2ExMXlcIjtcbmltcG9ydCB7QXV0b0NvbXBsZXRlRGF0YVNvdXJjZX0gZnJvbSBcIkBtZXNobWFrZXJzL3NoYXJlZC1zZXJ2aWNlc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpYS1hdXRvY29tcGxldGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vaWEtYXV0b2NvbXBsZXRlLWlucHV0Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pYS1hdXRvY29tcGxldGUtaW5wdXQuY3NzJ10sXG4gIGhvc3Q6IHtcbiAgICAnW2lkXSc6ICdpZCcsXG4gICAgJ1thdHRyLmFyaWEtZGVzY3JpYmVkYnldJzogJ2Rlc2NyaWJlZEJ5J1xuICB9LFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElhQXV0b2NvbXBsZXRlSW5wdXQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsXG4gICAgICB1c2VFeGlzdGluZzogSWFBdXRvY29tcGxldGVJbnB1dFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElhQXV0b2NvbXBsZXRlSW5wdXQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgSWFBdXRvY29tcGxldGVJbnB1dCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBEb0NoZWNrLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTWF0Rm9ybUZpZWxkQ29udHJvbDxhbnk+LCBWYWxpZGF0b3Ige1xuXG5cbiAgcHJpdmF0ZSBzdGF0aWMgbmV4dElkID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IHNlYXJjaEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgcHVibGljIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgcHVibGljIGZpbHRlcmVkU3RyaW5nczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sIHwgbnVsbDtcbiAgcHVibGljIGVycm9yU3RhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBmb2N1c2VkOiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgQEhvc3RCaW5kaW5nKCkgcHVibGljIHJlYWRvbmx5IGlkID0gYGlhLWF1dG9jb21wbGV0ZS0ke0lhQXV0b2NvbXBsZXRlSW5wdXQubmV4dElkKyt9YDtcbiAgcHVibGljIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwcml2YXRlIF9zZWxlY3RlZFN0cmluZzogc3RyaW5nIHwgbnVsbDtcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBwcml2YXRlIGlucHV0RmllbGQ6IE1hdElucHV0IHwgbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKSBwcml2YXRlIGRlc2NyaWJlZEJ5ID0gJyc7XG4gIHByaXZhdGUgYWN0aXZhdGVkVmFsdWU6IGFueTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLCBwcml2YXRlIGZtOiBGb2N1c01vbml0b3IpIHtcbiAgICB0aGlzLm5nQ29udHJvbCA9IG51bGw7XG4gICAgdGhpcy5lcnJvclN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fc2VsZWN0ZWRTdHJpbmcgPSBudWxsO1xuICAgIHRoaXMuaW5wdXRGaWVsZCA9IG51bGw7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBcIlwiO1xuICAgIHRoaXMuX3ByZWZpeCA9IFwiXCI7XG5cbiAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgIGZtLm1vbml0b3IoZWxSZWYubmF0aXZlRWxlbWVudCwgdHJ1ZSkuc3Vic2NyaWJlKG9yaWdpbiA9PiB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSAhIW9yaWdpbjtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2RhdGFTb3VyY2U6IEF1dG9Db21wbGV0ZURhdGFTb3VyY2UgfCBudWxsO1xuXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpOiBBdXRvQ29tcGxldGVEYXRhU291cmNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2U7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEF1dG9Db21wbGV0ZURhdGFTb3VyY2UgfCBudWxsKSB7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQoZGlzKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoZGlzKTtcbiAgICB0aGlzLl9kaXNhYmxlZCA/IHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wuZGlzYWJsZSgpIDogdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHBsaDogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGg7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVxdWlyZWQocmVxKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcbiAgICBpZiAodGhpcy5pbnB1dEZpZWxkKSB7XG4gICAgICB0aGlzLmlucHV0RmllbGQucmVxdWlyZWQgPSB0aGlzLl9yZXF1aXJlZDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlZml4OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4O1xuICB9XG5cbiAgcHVibGljIHNldCBwcmVmaXgodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fcHJlZml4KSB7XG4gICAgICB0aGlzLl9wcmVmaXggPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkU3RyaW5nO1xuICB9XG5cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9zZWxlY3RlZFN0cmluZykge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRTdHJpbmcgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSh0aGlzLl9zZWxlY3RlZFN0cmluZyk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBlbXB0eSgpIHtcbiAgICBsZXQgbiA9IHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wudmFsdWU7XG4gICAgcmV0dXJuICFuO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mbG9hdGluZycpXG4gIHB1YmxpYyBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5uZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICAvLyBJZiBwcmVmaXggZGVmaW5lZCwgdXN1YWxseSB0aGlzIGlzIHVzZWQgZm9yIGEgY29kZSBzY2FubmVyLlxuICAgIC8vIFRoZSBnb2FsIGlzIHRvIHNlbGVjdCB0aGUgZW50aXR5IGluIGRpcmVjdCB3YXkuXG4gICAgaWYgKHRoaXMuX3ByZWZpeCkge1xuICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbFxuICAgICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSxcbiAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdmFsdWUuc3RhcnRzV2l0aCh0aGlzLl9wcmVmaXgpKSxcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy52YWx1ZSA9IG51bGwpLFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmlzTG9hZGluZyA9IHRydWUpLFxuICAgICAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLl9kYXRhU291cmNlPy5vblByZXByb2Nlc3NTZWFyY2hTdHJpbmcodmFsdWUpID8/IFwiXCIpLFxuICAgICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB0aGlzLl9kYXRhU291cmNlPy5vbkZpbHRlcih2YWx1ZSkgPz8gb2YobnVsbCkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShyZXN1bHRTZXQgPT4ge1xuXG4gICAgICAgICAgaWYgKHJlc3VsdFNldCAmJiByZXN1bHRTZXQubGlzdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdFNldC5saXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gcmVzdWx0U2V0Lmxpc3RbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IHJlc3VsdFNldC5saXN0O1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnBhdGNoVmFsdWUocmVzdWx0U2V0LnNlYXJjaFRlcm0sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgd2hlbiBzZWFyY2ggYnkgaHVtYW4uXG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbFxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICB0YXAoXyA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9IG51bGwgJiYgdmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPj0gMSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmlzTG9hZGluZyA9IHRydWUpLFxuICAgICAgICBtYXAodmFsdWUgPT4gdGhpcy5fZGF0YVNvdXJjZT8ub25QcmVwcm9jZXNzU2VhcmNoU3RyaW5nKHZhbHVlKSksXG4gICAgICAgIHRhcCh2YWx1ZSA9PiB0aGlzLnZhbHVlID0gdmFsdWUpLFxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdGhpcy5fZGF0YVNvdXJjZT8ub25GaWx0ZXIodmFsdWUhKSA/PyBvZihudWxsKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0U2V0ID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0U2V0ICYmIHJlc3VsdFNldC5saXN0KSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IHJlc3VsdFNldC5saXN0O1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHJlc3VsdFNldC5zZWFyY2hUZXJtLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICB0aGlzLmVycm9yU3RhdGUgPSAodGhpcy5uZ0NvbnRyb2wuaW52YWxpZCAmJiB0aGlzLm5nQ29udHJvbC50b3VjaGVkKSA/PyBmYWxzZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5maWx0ZXJlZFN0cmluZ3MgPSBbXTtcbiAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnJlc2V0KG51bGwpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKCkge1xuICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgb25PcHRpb25TZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xuICAgIHRoaXMudmFsdWUgPSBldmVudC5vcHRpb24udmFsdWU7XG4gICAgdGhpcy5maWx0ZXJlZFN0cmluZ3MgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBvbk9wdGlvbkFjdGl2YXRlZChldmVudDogTWF0QXV0b2NvbXBsZXRlQWN0aXZhdGVkRXZlbnQpIHtcbiAgICB0aGlzLmFjdGl2YXRlZFZhbHVlID0gZXZlbnQub3B0aW9uPy52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBvbkF1dG9Db21wbGV0ZUNsb3NlZCgpIHtcblxuICAgIGlmICh0aGlzLmFjdGl2YXRlZFZhbHVlKSB7XG5cbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmFjdGl2YXRlZFZhbHVlO1xuICAgICAgdGhpcy5hY3RpdmF0ZWRWYWx1ZSA9IG51bGw7XG5cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1c091dCgpIHtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkU3RyaW5ncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkVmFsdWUgPSB0aGlzLmZpbHRlcmVkU3RyaW5nc1swXTtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmZpbHRlcmVkU3RyaW5nc1swXTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Ub3VjaGVkKCkge1xuXG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy52YWx1ZSA9IG9iajtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNvbnRhaW5lckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCkudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICdpbnB1dCcpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdGlvbjogYW55ID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodHlwZW9mIHNlbGVjdGlvbiA9PT0gJ3N0cmluZycgJiYgKDxzdHJpbmc+c2VsZWN0aW9uKS5sZW5ndGggPCAxKSB7XG4gICAgICByZXR1cm4ge2luY29ycmVjdDogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xuICB9O1xuXG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHtcbiAgfTtcbn1cbiIsIjxpbnB1dCAjaW5wdXQgKGJsdXIpPVwib25Ub3VjaGVkKClcIiAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaEZvcm1Db250cm9sXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBtYXRJbnB1dD5cbjxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbG9zZWQpPVwib25BdXRvQ29tcGxldGVDbG9zZWQoKVwiIChvcHRpb25BY3RpdmF0ZWQpPVwib25PcHRpb25BY3RpdmF0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwib25PcHRpb25TZWxlY3RlZCgkZXZlbnQpXCI+XG4gIDxtYXQtb3B0aW9uICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJpcy1sb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuICA8L21hdC1vcHRpb24+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN0ciBvZiBmaWx0ZXJlZFN0cmluZ3NcIiBbdmFsdWVdPVwic3RyXCI+XG4gICAgICB7e3N0cn19XG4gICAgPC9tYXQtb3B0aW9uPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbWF0LWF1dG9jb21wbGV0ZT5cbiJdfQ==