@testgorilla/tgo-ui 0.0.3 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,6 +4,7 @@
4
4
  * Button
5
5
  * Table
6
6
  * Paginator
7
+ * NavBar
7
8
 
8
9
  ## Storybook Development Server
9
10
 
@@ -32,7 +33,7 @@ We are using playwright on top of storybook to capture the visual differences. C
32
33
  In order to update the existing snapshots, we need to use DOCKER to update, since updating from mac or windows has its own effect on the rendering, we might want to use the following way to update the snapshots to be consistant with CI.
33
34
 
34
35
  ```
35
- docker run --rm --network host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.22.0-focal /bin/bash
36
+ docker run --rm --network host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:latest /bin/bash
36
37
  npm install
37
38
  npx playwright test e2e/common.spec.ts --update-snapshots
38
39
  ```
@@ -40,7 +41,7 @@ npx playwright test e2e/common.spec.ts --update-snapshots
40
41
  In order to execute the visual tests, we need to use same docker so that the screenshots are aligned with the same OS.
41
42
 
42
43
  ```
43
- docker run --rm --network host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.22.0-focal /bin/bash
44
+ docker run --rm --network host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:latest /bin/bash
44
45
  npm install
45
46
  npx playwright test e2e/common.spec.ts
46
47
  ```
@@ -0,0 +1,59 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class FieldComponent {
3
+ /**
4
+ * Form field label
5
+ *
6
+ * @type {string}
7
+ * @memberof FieldComponent
8
+ */
9
+ label: string;
10
+ /**
11
+ * Preffix icon (before input text)
12
+ *
13
+ * @type {string}
14
+ * @memberof FieldComponent
15
+ */
16
+ preffixIcon: string;
17
+ /**
18
+ * Suffix icon (after input text)
19
+ *
20
+ * @type {string}
21
+ * @memberof FieldComponent
22
+ */
23
+ suffixIcon: string;
24
+ /**
25
+ * Preffix icon (before input text)
26
+ *
27
+ * @type {string}
28
+ * @memberof FieldComponent
29
+ */
30
+ hint: string;
31
+ /**
32
+ * Input placeholder
33
+ *
34
+ * @type {string}
35
+ * @memberof FieldComponent
36
+ */
37
+ placeholder: string;
38
+ value: string;
39
+ isDisabled: boolean;
40
+ /**
41
+ * @ignore
42
+ */
43
+ onChange: (_: any) => void;
44
+ /**
45
+ * @ignore
46
+ */
47
+ onTouch: () => void;
48
+ constructor();
49
+ /**
50
+ * @ignore
51
+ */
52
+ onInput(event: any): void;
53
+ writeValue(value: any): void;
54
+ registerOnChange(fn: any): void;
55
+ registerOnTouched(fn: any): void;
56
+ setDisabledState(isDisabled: boolean): void;
57
+ static ɵfac: i0.ɵɵFactoryDeclaration<FieldComponent, never>;
58
+ static ɵcmp: i0.ɵɵComponentDeclaration<FieldComponent, "ui-field", never, { "label": "label"; "preffixIcon": "preffixIcon"; "suffixIcon": "suffixIcon"; "hint": "hint"; "placeholder": "placeholder"; }, {}, never, never>;
59
+ }
@@ -0,0 +1,11 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./field.component";
3
+ import * as i2 from "@angular/common";
4
+ import * as i3 from "@angular/material/form-field";
5
+ import * as i4 from "@angular/material/input";
6
+ import * as i5 from "@angular/material/icon";
7
+ export declare class FieldComponentModule {
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<FieldComponentModule, never>;
9
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FieldComponentModule, [typeof i1.FieldComponent], [typeof i2.CommonModule, typeof i3.MatFormFieldModule, typeof i4.MatInputModule, typeof i5.MatIconModule], [typeof i1.FieldComponent]>;
10
+ static ɵinj: i0.ɵɵInjectorDeclaration<FieldComponentModule>;
11
+ }
@@ -0,0 +1,35 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { IRoute } from './navbar.types';
3
+ import * as i0 from "@angular/core";
4
+ export declare class NavbarComponent {
5
+ /**
6
+ * Routes object
7
+ *
8
+ * @type {IRoute}
9
+ * @memberof NavbarComponent
10
+ * @ignore
11
+ */
12
+ routes: IRoute[];
13
+ /**
14
+ * Actived route id
15
+ *
16
+ * @type {string}
17
+ * @memberof NavbarComponent
18
+ */
19
+ activedRoute: string;
20
+ /**
21
+ * User first name and last name initials
22
+ *
23
+ * @type {string}
24
+ * @memberof NavbarComponent
25
+ */
26
+ userInitials: string;
27
+ /**
28
+ * @ignore
29
+ */
30
+ navigateEvent: EventEmitter<string>;
31
+ constructor();
32
+ navigate(routeId: string): void;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavbarComponent, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<NavbarComponent, "ui-navbar", never, { "routes": "routes"; "activedRoute": "activedRoute"; "userInitials": "userInitials"; }, { "navigateEvent": "navigateEvent"; }, never, never>;
35
+ }
@@ -0,0 +1,12 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./navbar.component";
3
+ import * as i2 from "@angular/common";
4
+ import * as i3 from "@angular/material/toolbar";
5
+ import * as i4 from "@angular/material/icon";
6
+ import * as i5 from "@angular/material/button";
7
+ import * as i6 from "@angular/material/core";
8
+ export declare class NavbarComponentModule {
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavbarComponentModule, never>;
10
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NavbarComponentModule, [typeof i1.NavbarComponent], [typeof i2.CommonModule, typeof i3.MatToolbarModule, typeof i4.MatIconModule, typeof i5.MatButtonModule, typeof i6.MatRippleModule], [typeof i1.NavbarComponent]>;
11
+ static ɵinj: i0.ɵɵInjectorDeclaration<NavbarComponentModule>;
12
+ }
@@ -0,0 +1,4 @@
1
+ export interface IRoute {
2
+ id: string;
3
+ title: string;
4
+ }
@@ -2,10 +2,16 @@ import { EventEmitter, OnInit } from '@angular/core';
2
2
  import { MatSort, Sort } from '@angular/material/sort';
3
3
  import { MatTableDataSource } from '@angular/material/table';
4
4
  import { DataPropertyGetterPipe } from '../../shared/pipes/dataPropertyGetter';
5
- import { DataType, DateFormat, IDataSource, ITableColumn } from './table.types';
5
+ import { DataType, DateFormat, IDataSource, IStatusOptions, ITableColumn } from './table.types';
6
6
  import * as i0 from "@angular/core";
7
7
  export declare class TableComponent<T extends IDataSource> implements OnInit {
8
8
  private dataPropertyGetterPipe;
9
+ /**
10
+ * @ignore
11
+ */
12
+ readonly timeAgoOptions: {
13
+ addSuffix: boolean;
14
+ };
9
15
  /**
10
16
  * @ignore
11
17
  */
@@ -39,20 +45,23 @@ export declare class TableComponent<T extends IDataSource> implements OnInit {
39
45
  * @type {ITableColumn}
40
46
  * @memberof TableComponent
41
47
  */
42
- tableColumns: ITableColumn[];
48
+ tableColumns: ITableColumn<T>[];
43
49
  /**
50
+ * @type {IStatusOptions}
51
+ * @memberof TableComponent
44
52
  * @ignore
45
53
  */
46
- onSortEvent: EventEmitter<Sort>;
54
+ statusOptions: IStatusOptions;
47
55
  /**
48
56
  * @ignore
49
57
  */
50
- onRowClickEvent: EventEmitter<any>;
58
+ onSortEvent: EventEmitter<Sort>;
51
59
  /**
52
60
  * @ignore
53
61
  */
62
+ onRowClickEvent: EventEmitter<any>;
54
63
  ngOnInit(): void;
55
- constructor(dataPropertyGetterPipe: DataPropertyGetterPipe<T>);
64
+ constructor(dataPropertyGetterPipe: DataPropertyGetterPipe);
56
65
  onSort(sortParams: Sort): void;
57
66
  onRowClick(rowParams: any): void;
58
67
  /**
@@ -60,5 +69,5 @@ export declare class TableComponent<T extends IDataSource> implements OnInit {
60
69
  */
61
70
  private setTableDataSource;
62
71
  static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent<any>, never>;
63
- static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "ui-table", never, { "tableData": "tableData"; "tableColumns": "tableColumns"; }, { "onSortEvent": "onSortEvent"; "onRowClickEvent": "onRowClickEvent"; }, never, never>;
72
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "ui-table", never, { "tableData": "tableData"; "tableColumns": "tableColumns"; "statusOptions": "statusOptions"; }, { "onSortEvent": "onSortEvent"; "onRowClickEvent": "onRowClickEvent"; }, never, never>;
64
73
  }
@@ -1,13 +1,22 @@
1
1
  export declare type IDataSource = {
2
2
  [key: string]: any;
3
3
  };
4
- export interface ITableColumn {
4
+ export interface ITableColumn<T> {
5
5
  name: string;
6
- dataKey: string;
6
+ dataKey?: string;
7
+ dataFunction?: (v: T) => string;
7
8
  sortable?: boolean;
8
9
  dataType?: DataType;
9
10
  dateFormat?: DateFormat;
10
11
  }
12
+ export interface IStatusOptions {
13
+ [key: string]: IStatusOptionItem;
14
+ }
15
+ export interface IStatusOptionItem {
16
+ title: string;
17
+ color: string;
18
+ backgroundColor: string;
19
+ }
11
20
  export declare enum DataType {
12
21
  Date = "date",
13
22
  String = "string",
@@ -0,0 +1,81 @@
1
+ import { Component, forwardRef, Input } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/form-field";
5
+ import * as i2 from "@angular/material/icon";
6
+ import * as i3 from "@angular/common";
7
+ import * as i4 from "@angular/material/input";
8
+ export class FieldComponent {
9
+ constructor() {
10
+ /**
11
+ * Input placeholder
12
+ *
13
+ * @type {string}
14
+ * @memberof FieldComponent
15
+ */
16
+ this.placeholder = '';
17
+ this.value = '';
18
+ /**
19
+ * @ignore
20
+ */
21
+ this.onChange = (_) => { };
22
+ /**
23
+ * @ignore
24
+ */
25
+ this.onTouch = () => { };
26
+ }
27
+ /**
28
+ * @ignore
29
+ */
30
+ onInput(event) {
31
+ this.value = event.target.value;
32
+ this.onTouch();
33
+ this.onChange(this.value);
34
+ }
35
+ writeValue(value) {
36
+ if (value) {
37
+ this.value = value || '';
38
+ }
39
+ else {
40
+ this.value = '';
41
+ }
42
+ }
43
+ registerOnChange(fn) {
44
+ this.onChange = fn;
45
+ }
46
+ registerOnTouched(fn) {
47
+ this.onTouch = fn;
48
+ }
49
+ setDisabledState(isDisabled) {
50
+ this.isDisabled = isDisabled;
51
+ }
52
+ }
53
+ FieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
54
+ FieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: FieldComponent, selector: "ui-field", inputs: { label: "label", preffixIcon: "preffixIcon", suffixIcon: "suffixIcon", hint: "hint", placeholder: "placeholder" }, providers: [
55
+ {
56
+ provide: NG_VALUE_ACCESSOR,
57
+ useExisting: forwardRef(() => FieldComponent),
58
+ multi: true,
59
+ },
60
+ ], ngImport: i0, template: "<div class=\"column\">\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\n <mat-form-field appearance=\"outline\">\n <mat-icon matPrefix *ngIf=\"preffixIcon\">{{ preffixIcon }}</mat-icon>\n <input matInput [placeholder]=\"placeholder\" [value]=\"value\" [disabled]=\"isDisabled\" (input)=\"onInput($event)\">\n <mat-icon matSuffix *ngIf=\"suffixIcon\">{{ suffixIcon }}</mat-icon>\n <mat-hint *ngIf=\"hint\">{{ hint }}</mat-hint>\n </mat-form-field>\n</div>", styles: ["mat-label{font-weight:600;color:#000}.mat-form-field{margin-top:0}.mat-form-field .mat-input-element{height:19px}.mat-form-field .mat-input-element,.mat-form-field .mat-icon{position:relative;bottom:3px}.column{display:flex;flex-direction:column}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i1.MatPrefix, selector: "[matPrefix]" }, { type: i4.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"] }, { type: i1.MatSuffix, selector: "[matSuffix]" }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }] });
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FieldComponent, decorators: [{
62
+ type: Component,
63
+ args: [{ selector: 'ui-field', providers: [
64
+ {
65
+ provide: NG_VALUE_ACCESSOR,
66
+ useExisting: forwardRef(() => FieldComponent),
67
+ multi: true,
68
+ },
69
+ ], template: "<div class=\"column\">\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\n <mat-form-field appearance=\"outline\">\n <mat-icon matPrefix *ngIf=\"preffixIcon\">{{ preffixIcon }}</mat-icon>\n <input matInput [placeholder]=\"placeholder\" [value]=\"value\" [disabled]=\"isDisabled\" (input)=\"onInput($event)\">\n <mat-icon matSuffix *ngIf=\"suffixIcon\">{{ suffixIcon }}</mat-icon>\n <mat-hint *ngIf=\"hint\">{{ hint }}</mat-hint>\n </mat-form-field>\n</div>", styles: ["mat-label{font-weight:600;color:#000}.mat-form-field{margin-top:0}.mat-form-field .mat-input-element{height:19px}.mat-form-field .mat-input-element,.mat-form-field .mat-icon{position:relative;bottom:3px}.column{display:flex;flex-direction:column}\n"] }]
70
+ }], ctorParameters: function () { return []; }, propDecorators: { label: [{
71
+ type: Input
72
+ }], preffixIcon: [{
73
+ type: Input
74
+ }], suffixIcon: [{
75
+ type: Input
76
+ }], hint: [{
77
+ type: Input
78
+ }], placeholder: [{
79
+ type: Input
80
+ }] } });
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZmllbGQvZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZmllbGQvZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFjbkQsTUFBTSxPQUFPLGNBQWM7SUFxRHpCO1FBcEJBOzs7OztXQUtHO1FBQ00sZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFMUIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUdYOztXQUVHO1FBQ0gsYUFBUSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDMUI7O1dBRUc7UUFDSCxZQUFPLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRUosQ0FBQztJQUVoQjs7T0FFRztJQUNILE9BQU8sQ0FBQyxLQUFVO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDOzs0R0FsRlUsY0FBYztnR0FBZCxjQUFjLCtKQVJkO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQzdDLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiwwQkNiSCw0ZEFRTTs0RkRPTyxjQUFjO2tCQVoxQixTQUFTOytCQUNFLFVBQVUsYUFHVDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUM7NEJBQzdDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzBFQVNRLEtBQUs7c0JBQWIsS0FBSztnQkFRRyxXQUFXO3NCQUFuQixLQUFLO2dCQVFHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBUUcsSUFBSTtzQkFBWixLQUFLO2dCQVFHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndWktZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWVsZC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZpZWxkQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIEZvcm0gZmllbGQgbGFiZWxcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlcm9mIEZpZWxkQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmVmZml4IGljb24gKGJlZm9yZSBpbnB1dCB0ZXh0KVxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgRmllbGRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHByZWZmaXhJY29uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN1ZmZpeCBpY29uIChhZnRlciBpbnB1dCB0ZXh0KVxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgRmllbGRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHN1ZmZpeEljb246IHN0cmluZztcblxuICAvKipcbiAgICogUHJlZmZpeCBpY29uIChiZWZvcmUgaW5wdXQgdGV4dClcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlcm9mIEZpZWxkQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBoaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElucHV0IHBsYWNlaG9sZGVyXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJvZiBGaWVsZENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcblxuICB2YWx1ZSA9ICcnO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25JbnB1dChldmVudDogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWUgfHwgJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9tYXQtbGFiZWw+XG4gIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgIDxtYXQtaWNvbiBtYXRQcmVmaXggKm5nSWY9XCJwcmVmZml4SWNvblwiPnt7IHByZWZmaXhJY29uIH19PC9tYXQtaWNvbj5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW3ZhbHVlXT1cInZhbHVlXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCI+XG4gICAgPG1hdC1pY29uIG1hdFN1ZmZpeCAqbmdJZj1cInN1ZmZpeEljb25cIj57eyBzdWZmaXhJY29uIH19PC9tYXQtaWNvbj5cbiAgICA8bWF0LWhpbnQgKm5nSWY9XCJoaW50XCI+e3sgaGludCB9fTwvbWF0LWhpbnQ+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj4iXX0=
@@ -0,0 +1,22 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { MatFormFieldModule } from '@angular/material/form-field';
4
+ import { MatIconModule } from '@angular/material/icon';
5
+ import { MatInputModule } from '@angular/material/input';
6
+ import { FieldComponent } from './field.component';
7
+ import * as i0 from "@angular/core";
8
+ export class FieldComponentModule {
9
+ }
10
+ FieldComponentModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FieldComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ FieldComponentModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FieldComponentModule, declarations: [FieldComponent], imports: [CommonModule, MatFormFieldModule, MatInputModule, MatIconModule], exports: [FieldComponent] });
12
+ FieldComponentModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FieldComponentModule, providers: [], imports: [[CommonModule, MatFormFieldModule, MatInputModule, MatIconModule]] });
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FieldComponentModule, decorators: [{
14
+ type: NgModule,
15
+ args: [{
16
+ declarations: [FieldComponent],
17
+ imports: [CommonModule, MatFormFieldModule, MatInputModule, MatIconModule],
18
+ exports: [FieldComponent],
19
+ providers: [],
20
+ }]
21
+ }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuY29tcG9uZW50Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2ZpZWxkL2ZpZWxkLmNvbXBvbmVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBUW5ELE1BQU0sT0FBTyxvQkFBb0I7O2tIQUFwQixvQkFBb0I7bUhBQXBCLG9CQUFvQixpQkFMaEIsY0FBYyxhQUNuQixZQUFZLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGFBQWEsYUFDL0QsY0FBYzttSEFHYixvQkFBb0IsYUFGcEIsRUFBRSxZQUZKLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUM7NEZBSS9ELG9CQUFvQjtrQkFOaEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQzlCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDO29CQUMxRSxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQ3pCLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0ZpZWxkQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0SWNvbk1vZHVsZV0sXG4gIGV4cG9ydHM6IFtGaWVsZENvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQ29tcG9uZW50TW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,56 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/toolbar";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "@angular/material/core";
6
+ export class NavbarComponent {
7
+ constructor() {
8
+ // TODO: Some properties and methods are ignored on purpose because of a current issue with compodoc and angular 13
9
+ // https://github.com/storybookjs/storybook/issues/16865
10
+ // https://github.com/storybookjs/storybook/issues/17004
11
+ /**
12
+ * Routes object
13
+ *
14
+ * @type {IRoute}
15
+ * @memberof NavbarComponent
16
+ * @ignore
17
+ */
18
+ this.routes = [];
19
+ /**
20
+ * Actived route id
21
+ *
22
+ * @type {string}
23
+ * @memberof NavbarComponent
24
+ */
25
+ this.activedRoute = '';
26
+ /**
27
+ * User first name and last name initials
28
+ *
29
+ * @type {string}
30
+ * @memberof NavbarComponent
31
+ */
32
+ this.userInitials = '';
33
+ /**
34
+ * @ignore
35
+ */
36
+ this.navigateEvent = new EventEmitter();
37
+ }
38
+ navigate(routeId) {
39
+ this.navigateEvent.emit(`/${routeId}`);
40
+ }
41
+ }
42
+ NavbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
43
+ NavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NavbarComponent, selector: "ui-navbar", inputs: { routes: "routes", activedRoute: "activedRoute", userInitials: "userInitials" }, outputs: { navigateEvent: "navigateEvent" }, ngImport: i0, template: "<mat-toolbar>\n <div class=\"custom-toolbar row\">\n <div class=\"init-gradient\"></div>\n <div class=\"content row\">\n <img class=\"logo\" src=\"/images/testgorilla.svg\" (click)=\"navigate('')\">\n <div class=\"navigation row\">\n <a *ngFor=\"let route of routes\" (click)=\"navigate(route.id)\" [ngClass]=\"{'active': activedRoute === route.id}\">\n <span>{{ route.title }}</span>\n </a>\n </div>\n <div class=\"actions\">\n <!-- <button mat-icon-button>\n <mat-icon>help_outline</mat-icon>\n </button> -->\n <div class=\"profile-circle\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\">\n {{ userInitials }}\n </div>\n </div>\n </div>\n <div class=\"final-gradient\"></div>\n </div>\n</mat-toolbar>\n", styles: [".mat-toolbar{height:80px!important}.mat-toolbar .custom-toolbar{width:100%;height:100%}.mat-toolbar .custom-toolbar .init-gradient{width:160px;height:100%;background:linear-gradient(270deg,rgb(233,240,241) 0%,rgba(233,240,241,0) 100%)}.mat-toolbar .custom-toolbar .content{background-color:#e9f0f1;width:100%}.mat-toolbar .custom-toolbar .content .logo{width:140px;margin-left:28px;cursor:pointer}.mat-toolbar .custom-toolbar .content .navigation{height:100%;margin-left:70px}.mat-toolbar .custom-toolbar .content .navigation a{display:flex;align-items:center;height:100%;width:161px;background:#fff;cursor:pointer}.mat-toolbar .custom-toolbar .content .navigation a.active{box-shadow:inset 0 5px 0 -1px #46a997}.mat-toolbar .custom-toolbar .content .navigation a span{width:100%;text-align:center;font-weight:400;font-size:16px}.mat-toolbar .custom-toolbar .content .actions{width:100%;display:flex;align-items:center;justify-content:flex-end}.mat-toolbar .custom-toolbar .content .actions .profile-circle{cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;width:32px;height:32px;background:#D4E0E4;border-radius:128px;font-weight:600;font-size:14px;text-align:center;margin-left:32px}.mat-toolbar .custom-toolbar .final-gradient{width:160px;height:100%;background:linear-gradient(90deg,rgb(233,240,241) 0%,rgba(233,240,241,0) 100%)}.row{display:flex;flex-direction:row}\n"], components: [{ type: i1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NavbarComponent, decorators: [{
45
+ type: Component,
46
+ args: [{ selector: 'ui-navbar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<mat-toolbar>\n <div class=\"custom-toolbar row\">\n <div class=\"init-gradient\"></div>\n <div class=\"content row\">\n <img class=\"logo\" src=\"/images/testgorilla.svg\" (click)=\"navigate('')\">\n <div class=\"navigation row\">\n <a *ngFor=\"let route of routes\" (click)=\"navigate(route.id)\" [ngClass]=\"{'active': activedRoute === route.id}\">\n <span>{{ route.title }}</span>\n </a>\n </div>\n <div class=\"actions\">\n <!-- <button mat-icon-button>\n <mat-icon>help_outline</mat-icon>\n </button> -->\n <div class=\"profile-circle\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\">\n {{ userInitials }}\n </div>\n </div>\n </div>\n <div class=\"final-gradient\"></div>\n </div>\n</mat-toolbar>\n", styles: [".mat-toolbar{height:80px!important}.mat-toolbar .custom-toolbar{width:100%;height:100%}.mat-toolbar .custom-toolbar .init-gradient{width:160px;height:100%;background:linear-gradient(270deg,rgb(233,240,241) 0%,rgba(233,240,241,0) 100%)}.mat-toolbar .custom-toolbar .content{background-color:#e9f0f1;width:100%}.mat-toolbar .custom-toolbar .content .logo{width:140px;margin-left:28px;cursor:pointer}.mat-toolbar .custom-toolbar .content .navigation{height:100%;margin-left:70px}.mat-toolbar .custom-toolbar .content .navigation a{display:flex;align-items:center;height:100%;width:161px;background:#fff;cursor:pointer}.mat-toolbar .custom-toolbar .content .navigation a.active{box-shadow:inset 0 5px 0 -1px #46a997}.mat-toolbar .custom-toolbar .content .navigation a span{width:100%;text-align:center;font-weight:400;font-size:16px}.mat-toolbar .custom-toolbar .content .actions{width:100%;display:flex;align-items:center;justify-content:flex-end}.mat-toolbar .custom-toolbar .content .actions .profile-circle{cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;width:32px;height:32px;background:#D4E0E4;border-radius:128px;font-weight:600;font-size:14px;text-align:center;margin-left:32px}.mat-toolbar .custom-toolbar .final-gradient{width:160px;height:100%;background:linear-gradient(90deg,rgb(233,240,241) 0%,rgba(233,240,241,0) 100%)}.row{display:flex;flex-direction:row}\n"] }]
47
+ }], ctorParameters: function () { return []; }, propDecorators: { routes: [{
48
+ type: Input
49
+ }], activedRoute: [{
50
+ type: Input
51
+ }], userInitials: [{
52
+ type: Input
53
+ }], navigateEvent: [{
54
+ type: Output
55
+ }] } });
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL25hdmJhci9uYXZiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbmF2YmFyL25hdmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQVVuSCxNQUFNLE9BQU8sZUFBZTtJQW1DMUI7UUFsQ0EsbUhBQW1IO1FBQ25ILHdEQUF3RDtRQUN4RCx3REFBd0Q7UUFFeEQ7Ozs7OztXQU1HO1FBQ00sV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUUvQjs7Ozs7V0FLRztRQUNNLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRTNCOzs7OztXQUtHO1FBQ00saUJBQVksR0FBRyxFQUFFLENBQUM7UUFFM0I7O1dBRUc7UUFDTyxrQkFBYSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTVELENBQUM7SUFFaEIsUUFBUSxDQUFDLE9BQWU7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7OzZHQXZDVSxlQUFlO2lHQUFmLGVBQWUsd0xDVjVCLG84QkFzQkE7NEZEWmEsZUFBZTtrQkFQM0IsU0FBUzsrQkFDRSxXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7MEVBYzVCLE1BQU07c0JBQWQsS0FBSztnQkFRRyxZQUFZO3NCQUFwQixLQUFLO2dCQVFHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0ksYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElSb3V0ZSB9IGZyb20gJy4vbmF2YmFyLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndWktbmF2YmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25hdmJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25hdmJhci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgTmF2YmFyQ29tcG9uZW50IHtcbiAgLy8gVE9ETzogU29tZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGFyZSBpZ25vcmVkIG9uIHB1cnBvc2UgYmVjYXVzZSBvZiBhIGN1cnJlbnQgaXNzdWUgd2l0aCBjb21wb2RvYyBhbmQgYW5ndWxhciAxM1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Rvcnlib29ranMvc3Rvcnlib29rL2lzc3Vlcy8xNjg2NVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Rvcnlib29ranMvc3Rvcnlib29rL2lzc3Vlcy8xNzAwNFxuXG4gIC8qKlxuICAgKiBSb3V0ZXMgb2JqZWN0XG4gICAqXG4gICAqIEB0eXBlIHtJUm91dGV9XG4gICAqIEBtZW1iZXJvZiBOYXZiYXJDb21wb25lbnRcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQElucHV0KCkgcm91dGVzOiBJUm91dGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBY3RpdmVkIHJvdXRlIGlkXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJvZiBOYXZiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGFjdGl2ZWRSb3V0ZSA9ICcnO1xuXG4gIC8qKlxuICAgKiBVc2VyIGZpcnN0IG5hbWUgYW5kIGxhc3QgbmFtZSBpbml0aWFsc1xuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgTmF2YmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSB1c2VySW5pdGlhbHMgPSAnJztcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQE91dHB1dCgpIG5hdmlnYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5hdmlnYXRlKHJvdXRlSWQ6IHN0cmluZykge1xuICAgIHRoaXMubmF2aWdhdGVFdmVudC5lbWl0KGAvJHtyb3V0ZUlkfWApO1xuICB9XG59XG4iLCI8bWF0LXRvb2xiYXI+XG4gICAgPGRpdiBjbGFzcz1cImN1c3RvbS10b29sYmFyIHJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5pdC1ncmFkaWVudFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudCByb3dcIj5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJsb2dvXCIgc3JjPVwiL2ltYWdlcy90ZXN0Z29yaWxsYS5zdmdcIiAoY2xpY2spPVwibmF2aWdhdGUoJycpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2aWdhdGlvbiByb3dcIj5cbiAgICAgICAgICAgICAgICA8YSAqbmdGb3I9XCJsZXQgcm91dGUgb2Ygcm91dGVzXCIgKGNsaWNrKT1cIm5hdmlnYXRlKHJvdXRlLmlkKVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlZFJvdXRlID09PSByb3V0ZS5pZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcm91dGUudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5oZWxwX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1jaXJjbGVcIiBtYXRSaXBwbGUgW21hdFJpcHBsZVVuYm91bmRlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdXNlckluaXRpYWxzIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaW5hbC1ncmFkaWVudFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuPC9tYXQtdG9vbGJhcj5cbiJdfQ==
@@ -0,0 +1,23 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { NavbarComponent } from './navbar.component';
4
+ import { MatToolbarModule } from '@angular/material/toolbar';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import { MatButtonModule } from '@angular/material/button';
7
+ import { MatRippleModule } from '@angular/material/core';
8
+ import * as i0 from "@angular/core";
9
+ export class NavbarComponentModule {
10
+ }
11
+ NavbarComponentModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NavbarComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
+ NavbarComponentModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NavbarComponentModule, declarations: [NavbarComponent], imports: [CommonModule, MatToolbarModule, MatIconModule, MatButtonModule, MatRippleModule], exports: [NavbarComponent] });
13
+ NavbarComponentModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NavbarComponentModule, providers: [], imports: [[CommonModule, MatToolbarModule, MatIconModule, MatButtonModule, MatRippleModule]] });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NavbarComponentModule, decorators: [{
15
+ type: NgModule,
16
+ args: [{
17
+ declarations: [NavbarComponent],
18
+ imports: [CommonModule, MatToolbarModule, MatIconModule, MatButtonModule, MatRippleModule],
19
+ exports: [NavbarComponent],
20
+ providers: [],
21
+ }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLmNvbXBvbmVudC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9uYXZiYXIvbmF2YmFyLmNvbXBvbmVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQVF6RCxNQUFNLE9BQU8scUJBQXFCOzttSEFBckIscUJBQXFCO29IQUFyQixxQkFBcUIsaUJBTGpCLGVBQWUsYUFDcEIsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxhQUMvRSxlQUFlO29IQUdkLHFCQUFxQixhQUZyQixFQUFFLFlBRkosQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUM7NEZBSS9FLHFCQUFxQjtrQkFOakMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBQy9CLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQztvQkFDMUYsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUMxQixTQUFTLEVBQUUsRUFBRTtpQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2YmFyQ29tcG9uZW50IH0gZnJvbSAnLi9uYXZiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFRvb2xiYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sYmFyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRSaXBwbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbTmF2YmFyQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0VG9vbGJhck1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRSaXBwbGVNb2R1bGVdLFxuICBleHBvcnRzOiBbTmF2YmFyQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF2YmFyQ29tcG9uZW50TW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbmF2YmFyL25hdmJhci50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJUm91dGUge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufVxuIl19
@@ -14,6 +14,12 @@ export class TableComponent {
14
14
  // TODO: Some properties and methods are ignored on purpose because of a current issue with compodoc and angular 13
15
15
  // https://github.com/storybookjs/storybook/issues/16865
16
16
  // https://github.com/storybookjs/storybook/issues/17004
17
+ /**
18
+ * @ignore
19
+ */
20
+ this.timeAgoOptions = {
21
+ addSuffix: true,
22
+ };
17
23
  /**
18
24
  * @ignore
19
25
  */
@@ -37,6 +43,12 @@ export class TableComponent {
37
43
  * @memberof TableComponent
38
44
  */
39
45
  this.tableColumns = [];
46
+ /**
47
+ * @type {IStatusOptions}
48
+ * @memberof TableComponent
49
+ * @ignore
50
+ */
51
+ this.statusOptions = {};
40
52
  /**
41
53
  * @ignore
42
54
  */
@@ -57,16 +69,13 @@ export class TableComponent {
57
69
  this.setTableDataSource(data);
58
70
  }
59
71
  }
60
- /**
61
- * @ignore
62
- */
63
72
  ngOnInit() {
64
73
  this.displayedColumns = this.tableColumns.map((tableColumn) => tableColumn.name);
65
74
  }
66
75
  onSort(sortParams) {
67
- const column = this.tableColumns.find((column) => column.name === sortParams.active);
68
- if (column?.dataKey) {
69
- sortParams.active = column?.dataKey;
76
+ const columnSort = this.tableColumns.find((column) => column.name === sortParams.active);
77
+ if (columnSort?.dataKey) {
78
+ sortParams.active = columnSort?.dataKey;
70
79
  }
71
80
  this.onSortEvent.emit(sortParams);
72
81
  }
@@ -83,10 +92,10 @@ export class TableComponent {
83
92
  }
84
93
  }
85
94
  TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: TableComponent, deps: [{ token: i1.DataPropertyGetterPipe }], target: i0.ɵɵFactoryTarget.Component });
86
- TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: TableComponent, selector: "ui-table", inputs: { tableData: "tableData", tableColumns: "tableColumns" }, outputs: { onSortEvent: "onSortEvent", onRowClickEvent: "onRowClickEvent" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<table mat-table [dataSource]=\"dataSource\" matSort (matSortChange)=\"onSort($event)\">\n <ng-container *ngFor=\"let tableColumn of tableColumns\" [matColumnDef]=\"tableColumn.name\">\n <ng-container *ngIf=\"tableColumn.sortable; else notSortable\">\n <th mat-header-cell *matHeaderCellDef=\"let element\" [mat-sort-header]=\"tableColumn.dataKey\" arrowPosition=\"after\">\n {{tableColumn.name | uppercase}}\n </th>\n </ng-container>\n <ng-template #notSortable>\n <th mat-header-cell *matHeaderCellDef>\n {{tableColumn.name | uppercase}}\n </th>\n </ng-template>\n <td mat-cell *matCellDef=\"let element\" (click)=\"onRowClick(element)\">\n <ng-container [ngSwitch]=\"tableColumn.dataType\">\n <ng-container *ngSwitchCase=\"DataType.String\">\n {{element | dataPropertyGetter: tableColumn.dataKey}}\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Date\">\n <span *ngIf=\"tableColumn.dateFormat === DateFormat.Short\">{{(element | dataPropertyGetter:\n tableColumn.dataKey) | dfnsParseIso | dfnsFormat: 'dd MMM yyyy'}}</span>\n <span *ngIf=\"tableColumn.dateFormat === DateFormat.TimeAgo\">{{(element | dataPropertyGetter:\n tableColumn.dataKey) | dfnsParseIso | dfnsFormatDistanceToNow}}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Label\">\n <span class=\"label\" [ngClass]=\"(element | dataPropertyGetter: tableColumn.dataKey)\">\n {{(element | dataPropertyGetter: tableColumn.dataKey)}}\n </span>\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Percentage\">\n {{element | dataPropertyGetter: tableColumn.dataKey}}%\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{element | dataPropertyGetter: tableColumn.dataKey}}\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n", styles: ["table{width:100%;overflow:hidden;border-radius:8px 8px 0 0}table .mat-header-cell{font-weight:700;color:#000;background:rgba(233,240,241,.5)}table td,table th,table .mat-row{border:none}table ::ng-deep .mat-sort-header-arrow{color:#276678}table .label{padding:0 8px;width:-moz-fit-content;width:fit-content;font-weight:600;font-size:10px;border-radius:4px;background-color:#e9f0f1;color:#000}table .label.active{background-color:#46a997;color:#fff}\n"], components: [{ type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i3.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i2.MatCellDef, selector: "[matCellDef]" }, { type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }], pipes: { "uppercase": i4.UpperCasePipe, "dataPropertyGetter": i1.DataPropertyGetterPipe, "dfnsFormat": i5.FormatPipe, "dfnsParseIso": i5.ParseIsoPipe, "dfnsFormatDistanceToNow": i5.FormatDistanceToNowPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
95
+ TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: TableComponent, selector: "ui-table", inputs: { tableData: "tableData", tableColumns: "tableColumns", statusOptions: "statusOptions" }, outputs: { onSortEvent: "onSortEvent", onRowClickEvent: "onRowClickEvent" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<table mat-table [dataSource]=\"dataSource\" matSort (matSortChange)=\"onSort($event)\">\n <ng-container *ngFor=\"let tableColumn of tableColumns\" [matColumnDef]=\"tableColumn.name\">\n <ng-container *ngIf=\"tableColumn.sortable; else notSortable\">\n <th mat-header-cell *matHeaderCellDef=\"let element\" [mat-sort-header]=\"tableColumn.dataKey || ''\"\n arrowPosition=\"after\">\n {{tableColumn.name | uppercase}}\n </th>\n </ng-container>\n <ng-template #notSortable>\n <th mat-header-cell *matHeaderCellDef>\n {{tableColumn.name | uppercase}}\n </th>\n </ng-template>\n <td mat-cell *matCellDef=\"let element\" (click)=\"onRowClick(element)\">\n <ng-container [ngSwitch]=\"tableColumn.dataType\">\n <ng-container *ngSwitchCase=\"DataType.String\">\n {{element | dataPropertyGetter: tableColumn.dataKey}}\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Date\">\n <span *ngIf=\"tableColumn.dateFormat === DateFormat.Short\">{{(element | dataPropertyGetter:\n tableColumn.dataKey) | dfnsParseIso | dfnsFormat: 'dd MMM yyyy'}}</span>\n <span *ngIf=\"tableColumn.dateFormat === DateFormat.TimeAgo\">{{(element | dataPropertyGetter:\n tableColumn.dataKey) | dfnsParseIso | dfnsFormatDistanceToNow: timeAgoOptions}}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Percentage\">\n {{element | dataPropertyGetter: tableColumn.dataKey}}%\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Label\">\n <ng-container\n *ngTemplateOutlet=\"label; context: {label: statusOptions[element | dataPropertyGetter: tableColumn.dataKey]}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{element | dataPropertyGetter: tableColumn.dataKey}}\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n\n<ng-template #label let-label=\"label\">\n <span class=\"label\" [ngStyle]=\"{'background-color': label?.backgroundColor, 'color': label?.color}\">\n {{ label?.title }}\n </span>\n</ng-template>\n", styles: ["table{width:100%;overflow:hidden;border-radius:8px 8px 0 0}table .mat-header-cell{font-weight:700;color:#000;background:rgba(233,240,241,.5)}table td,table th,table .mat-row{border:none}table ::ng-deep .mat-sort-header-arrow{color:#276678}table .label.active{background-color:#46a997;color:#fff}table .label{padding:0 8px;width:-moz-fit-content;width:fit-content;font-weight:600;font-size:10px;border-radius:4px;background-color:#e9f0f1;color:#000}\n"], components: [{ type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i3.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i2.MatCellDef, selector: "[matCellDef]" }, { type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "uppercase": i4.UpperCasePipe, "dataPropertyGetter": i1.DataPropertyGetterPipe, "dfnsFormat": i5.FormatPipe, "dfnsParseIso": i5.ParseIsoPipe, "dfnsFormatDistanceToNow": i5.FormatDistanceToNowPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
87
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: TableComponent, decorators: [{
88
97
  type: Component,
89
- args: [{ selector: 'ui-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table mat-table [dataSource]=\"dataSource\" matSort (matSortChange)=\"onSort($event)\">\n <ng-container *ngFor=\"let tableColumn of tableColumns\" [matColumnDef]=\"tableColumn.name\">\n <ng-container *ngIf=\"tableColumn.sortable; else notSortable\">\n <th mat-header-cell *matHeaderCellDef=\"let element\" [mat-sort-header]=\"tableColumn.dataKey\" arrowPosition=\"after\">\n {{tableColumn.name | uppercase}}\n </th>\n </ng-container>\n <ng-template #notSortable>\n <th mat-header-cell *matHeaderCellDef>\n {{tableColumn.name | uppercase}}\n </th>\n </ng-template>\n <td mat-cell *matCellDef=\"let element\" (click)=\"onRowClick(element)\">\n <ng-container [ngSwitch]=\"tableColumn.dataType\">\n <ng-container *ngSwitchCase=\"DataType.String\">\n {{element | dataPropertyGetter: tableColumn.dataKey}}\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Date\">\n <span *ngIf=\"tableColumn.dateFormat === DateFormat.Short\">{{(element | dataPropertyGetter:\n tableColumn.dataKey) | dfnsParseIso | dfnsFormat: 'dd MMM yyyy'}}</span>\n <span *ngIf=\"tableColumn.dateFormat === DateFormat.TimeAgo\">{{(element | dataPropertyGetter:\n tableColumn.dataKey) | dfnsParseIso | dfnsFormatDistanceToNow}}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Label\">\n <span class=\"label\" [ngClass]=\"(element | dataPropertyGetter: tableColumn.dataKey)\">\n {{(element | dataPropertyGetter: tableColumn.dataKey)}}\n </span>\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Percentage\">\n {{element | dataPropertyGetter: tableColumn.dataKey}}%\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{element | dataPropertyGetter: tableColumn.dataKey}}\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n", styles: ["table{width:100%;overflow:hidden;border-radius:8px 8px 0 0}table .mat-header-cell{font-weight:700;color:#000;background:rgba(233,240,241,.5)}table td,table th,table .mat-row{border:none}table ::ng-deep .mat-sort-header-arrow{color:#276678}table .label{padding:0 8px;width:-moz-fit-content;width:fit-content;font-weight:600;font-size:10px;border-radius:4px;background-color:#e9f0f1;color:#000}table .label.active{background-color:#46a997;color:#fff}\n"] }]
98
+ args: [{ selector: 'ui-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table mat-table [dataSource]=\"dataSource\" matSort (matSortChange)=\"onSort($event)\">\n <ng-container *ngFor=\"let tableColumn of tableColumns\" [matColumnDef]=\"tableColumn.name\">\n <ng-container *ngIf=\"tableColumn.sortable; else notSortable\">\n <th mat-header-cell *matHeaderCellDef=\"let element\" [mat-sort-header]=\"tableColumn.dataKey || ''\"\n arrowPosition=\"after\">\n {{tableColumn.name | uppercase}}\n </th>\n </ng-container>\n <ng-template #notSortable>\n <th mat-header-cell *matHeaderCellDef>\n {{tableColumn.name | uppercase}}\n </th>\n </ng-template>\n <td mat-cell *matCellDef=\"let element\" (click)=\"onRowClick(element)\">\n <ng-container [ngSwitch]=\"tableColumn.dataType\">\n <ng-container *ngSwitchCase=\"DataType.String\">\n {{element | dataPropertyGetter: tableColumn.dataKey}}\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Date\">\n <span *ngIf=\"tableColumn.dateFormat === DateFormat.Short\">{{(element | dataPropertyGetter:\n tableColumn.dataKey) | dfnsParseIso | dfnsFormat: 'dd MMM yyyy'}}</span>\n <span *ngIf=\"tableColumn.dateFormat === DateFormat.TimeAgo\">{{(element | dataPropertyGetter:\n tableColumn.dataKey) | dfnsParseIso | dfnsFormatDistanceToNow: timeAgoOptions}}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Percentage\">\n {{element | dataPropertyGetter: tableColumn.dataKey}}%\n </ng-container>\n <ng-container *ngSwitchCase=\"DataType.Label\">\n <ng-container\n *ngTemplateOutlet=\"label; context: {label: statusOptions[element | dataPropertyGetter: tableColumn.dataKey]}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{element | dataPropertyGetter: tableColumn.dataKey}}\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n\n<ng-template #label let-label=\"label\">\n <span class=\"label\" [ngStyle]=\"{'background-color': label?.backgroundColor, 'color': label?.color}\">\n {{ label?.title }}\n </span>\n</ng-template>\n", styles: ["table{width:100%;overflow:hidden;border-radius:8px 8px 0 0}table .mat-header-cell{font-weight:700;color:#000;background:rgba(233,240,241,.5)}table td,table th,table .mat-row{border:none}table ::ng-deep .mat-sort-header-arrow{color:#276678}table .label.active{background-color:#46a997;color:#fff}table .label{padding:0 8px;width:-moz-fit-content;width:fit-content;font-weight:600;font-size:10px;border-radius:4px;background-color:#e9f0f1;color:#000}\n"] }]
90
99
  }], ctorParameters: function () { return [{ type: i1.DataPropertyGetterPipe }]; }, propDecorators: { sort: [{
91
100
  type: ViewChild,
92
101
  args: [MatSort, { static: true }]
@@ -94,9 +103,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
94
103
  type: Input
95
104
  }], tableColumns: [{
96
105
  type: Input
106
+ }], statusOptions: [{
107
+ type: Input
97
108
  }], onSortEvent: [{
98
109
  type: Output
99
110
  }], onRowClickEvent: [{
100
111
  type: Output
101
112
  }] } });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLE9BQU8sRUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUE2QixNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVFoRixNQUFNLE9BQU8sY0FBYztJQW1FekIsWUFBb0Isc0JBQWlEO1FBQWpELDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBMkI7UUFsRXJFLG1IQUFtSDtRQUNuSCx3REFBd0Q7UUFDeEQsd0RBQXdEO1FBRXhEOztXQUVHO1FBQ0gsZUFBVSxHQUFHLElBQUksa0JBQWtCLENBQU0sRUFBRSxDQUFDLENBQUM7UUFFN0M7O1dBRUc7UUFDSCxxQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFFaEM7O1dBRUc7UUFDSCxhQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXBCOztXQUVHO1FBQ0gsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQW1CeEI7Ozs7O1dBS0c7UUFDTSxpQkFBWSxHQUFtQixFQUFFLENBQUM7UUFFM0M7O1dBRUc7UUFDTyxnQkFBVyxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXJFOztXQUVHO1FBQ08sb0JBQWUsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQVNDLENBQUM7SUFyQ3pFOzs7OztPQUtHO0lBQ0gsSUFBYSxTQUFTLENBQUMsSUFBZ0I7UUFDckMsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFvQkQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBeUIsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFJRCxNQUFNLENBQUMsVUFBZ0I7UUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFvQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRyxJQUFJLE1BQU0sRUFBRSxPQUFPLEVBQUU7WUFDbkIsVUFBVSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsT0FBTyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxTQUFjO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLElBQVM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixDQUFNLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25DLENBQUM7OzRHQXhGVSxjQUFjO2dHQUFkLGNBQWMscU9BNEJkLE9BQU8sOERDeENwQixva0VBd0NBOzRGRDVCYSxjQUFjO2tCQU4xQixTQUFTOytCQUNFLFVBQVUsbUJBR0gsdUJBQXVCLENBQUMsTUFBTTs2R0E4QlQsSUFBSTtzQkFBekMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVF2QixTQUFTO3NCQUFyQixLQUFLO2dCQVlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0ksV0FBVztzQkFBcEIsTUFBTTtnQkFLRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U29ydCwgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgRGF0YVByb3BlcnR5R2V0dGVyUGlwZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9waXBlcy9kYXRhUHJvcGVydHlHZXR0ZXInO1xuaW1wb3J0IHsgRGF0YVR5cGUsIERhdGVGb3JtYXQsIElEYXRhU291cmNlLCBJVGFibGVDb2x1bW4gfSBmcm9tICcuL3RhYmxlLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndWktdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCBleHRlbmRzIElEYXRhU291cmNlPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIFRPRE86IFNvbWUgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBhcmUgaWdub3JlZCBvbiBwdXJwb3NlIGJlY2F1c2Ugb2YgYSBjdXJyZW50IGlzc3VlIHdpdGggY29tcG9kb2MgYW5kIGFuZ3VsYXIgMTNcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N0b3J5Ym9va2pzL3N0b3J5Ym9vay9pc3N1ZXMvMTY4NjVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N0b3J5Ym9va2pzL3N0b3J5Ym9vay9pc3N1ZXMvMTcwMDRcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55PihbXSk7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIERhdGFUeXBlID0gRGF0YVR5cGU7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIERhdGVGb3JtYXQgPSBEYXRlRm9ybWF0O1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiB0cnVlIH0pIHNvcnQhOiBNYXRTb3J0O1xuXG4gIC8qKlxuICAgKiBEYXRhIHRvIGJlIHJlbmRlcmVkXG4gICAqXG4gICAqIEB0eXBlIHtJRGF0YVNvdXJjZX1cbiAgICogQG1lbWJlcm9mIFRhYmxlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBzZXQgdGFibGVEYXRhKGRhdGE6IFRbXSB8IG51bGwpIHtcbiAgICBpZiAoZGF0YT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldFRhYmxlRGF0YVNvdXJjZShkYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGF0YSBzdHJ1Y3R1cmUgdG8gc2VsZWN0IHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIHJlbmRlcmVkIGFuZCB0aGVpciBjYXBhYmlsaXRpZXNcbiAgICpcbiAgICogQHR5cGUge0lUYWJsZUNvbHVtbn1cbiAgICogQG1lbWJlcm9mIFRhYmxlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSB0YWJsZUNvbHVtbnM6IElUYWJsZUNvbHVtbltdID0gW107XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBPdXRwdXQoKSBvblNvcnRFdmVudDogRXZlbnRFbWl0dGVyPFNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0PigpO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBAT3V0cHV0KCkgb25Sb3dDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLnRhYmxlQ29sdW1ucy5tYXAoKHRhYmxlQ29sdW1uOiBJVGFibGVDb2x1bW4pID0+IHRhYmxlQ29sdW1uLm5hbWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhUHJvcGVydHlHZXR0ZXJQaXBlOiBEYXRhUHJvcGVydHlHZXR0ZXJQaXBlPFQ+KSB7fVxuXG4gIG9uU29ydChzb3J0UGFyYW1zOiBTb3J0KSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy50YWJsZUNvbHVtbnMuZmluZCgoY29sdW1uOiBJVGFibGVDb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBzb3J0UGFyYW1zLmFjdGl2ZSk7XG4gICAgaWYgKGNvbHVtbj8uZGF0YUtleSkge1xuICAgICAgc29ydFBhcmFtcy5hY3RpdmUgPSBjb2x1bW4/LmRhdGFLZXk7XG4gICAgfVxuICAgIHRoaXMub25Tb3J0RXZlbnQuZW1pdChzb3J0UGFyYW1zKTtcbiAgfVxuXG4gIG9uUm93Q2xpY2socm93UGFyYW1zOiBhbnkpIHtcbiAgICB0aGlzLm9uUm93Q2xpY2tFdmVudC5lbWl0KHJvd1BhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRUYWJsZURhdGFTb3VyY2UoZGF0YTogVFtdKSB7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KGRhdGEpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0aW5nRGF0YUFjY2Vzc29yID0gKGl0ZW0sIHByb3BlcnR5KSA9PiB0aGlzLmRhdGFQcm9wZXJ0eUdldHRlclBpcGUudHJhbnNmb3JtKGl0ZW0sIHByb3BlcnR5KTtcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgfVxufVxuIiwiPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgbWF0U29ydCAobWF0U29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWJsZUNvbHVtbiBvZiB0YWJsZUNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cInRhYmxlQ29sdW1uLm5hbWVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGVDb2x1bW4uc29ydGFibGU7IGVsc2Ugbm90U29ydGFibGVcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFttYXQtc29ydC1oZWFkZXJdPVwidGFibGVDb2x1bW4uZGF0YUtleVwiIGFycm93UG9zaXRpb249XCJhZnRlclwiPlxuICAgICAgICB7e3RhYmxlQ29sdW1uLm5hbWUgfCB1cHBlcmNhc2V9fVxuICAgICAgPC90aD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI25vdFNvcnRhYmxlPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAge3t0YWJsZUNvbHVtbi5uYW1lIHwgdXBwZXJjYXNlfX1cbiAgICAgIDwvdGg+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIChjbGljayk9XCJvblJvd0NsaWNrKGVsZW1lbnQpXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0YWJsZUNvbHVtbi5kYXRhVHlwZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJEYXRhVHlwZS5TdHJpbmdcIj5cbiAgICAgICAgICB7e2VsZW1lbnQgfCBkYXRhUHJvcGVydHlHZXR0ZXI6IHRhYmxlQ29sdW1uLmRhdGFLZXl9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiRGF0YVR5cGUuRGF0ZVwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFibGVDb2x1bW4uZGF0ZUZvcm1hdCA9PT0gRGF0ZUZvcm1hdC5TaG9ydFwiPnt7KGVsZW1lbnQgfCBkYXRhUHJvcGVydHlHZXR0ZXI6XG4gICAgICAgICAgICB0YWJsZUNvbHVtbi5kYXRhS2V5KSB8IGRmbnNQYXJzZUlzbyB8IGRmbnNGb3JtYXQ6ICdkZCBNTU0geXl5eSd9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYmxlQ29sdW1uLmRhdGVGb3JtYXQgPT09IERhdGVGb3JtYXQuVGltZUFnb1wiPnt7KGVsZW1lbnQgfCBkYXRhUHJvcGVydHlHZXR0ZXI6XG4gICAgICAgICAgICB0YWJsZUNvbHVtbi5kYXRhS2V5KSB8IGRmbnNQYXJzZUlzbyB8IGRmbnNGb3JtYXREaXN0YW5jZVRvTm93fX08L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJEYXRhVHlwZS5MYWJlbFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBbbmdDbGFzc109XCIoZWxlbWVudCB8IGRhdGFQcm9wZXJ0eUdldHRlcjogdGFibGVDb2x1bW4uZGF0YUtleSlcIj5cbiAgICAgICAgICAgIHt7KGVsZW1lbnQgfCBkYXRhUHJvcGVydHlHZXR0ZXI6IHRhYmxlQ29sdW1uLmRhdGFLZXkpfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJEYXRhVHlwZS5QZXJjZW50YWdlXCI+XG4gICAgICAgICAge3tlbGVtZW50IHwgZGF0YVByb3BlcnR5R2V0dGVyOiB0YWJsZUNvbHVtbi5kYXRhS2V5fX0lXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAge3tlbGVtZW50IHwgZGF0YVByb3BlcnR5R2V0dGVyOiB0YWJsZUNvbHVtbi5kYXRhS2V5fX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCI+PC90cj5cbjwvdGFibGU+XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLE9BQU8sRUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUE2QyxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVFoRyxNQUFNLE9BQU8sY0FBYztJQThFekIsWUFBb0Isc0JBQThDO1FBQTlDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUE3RWxFLG1IQUFtSDtRQUNuSCx3REFBd0Q7UUFDeEQsd0RBQXdEO1FBRXhEOztXQUVHO1FBQ00sbUJBQWMsR0FBRztZQUN4QixTQUFTLEVBQUUsSUFBSTtTQUNoQixDQUFDO1FBRUY7O1dBRUc7UUFDSCxlQUFVLEdBQUcsSUFBSSxrQkFBa0IsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUU3Qzs7V0FFRztRQUNILHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUVoQzs7V0FFRztRQUNILGFBQVEsR0FBRyxRQUFRLENBQUM7UUFFcEI7O1dBRUc7UUFDSCxlQUFVLEdBQUcsVUFBVSxDQUFDO1FBbUJ4Qjs7Ozs7V0FLRztRQUNNLGlCQUFZLEdBQXNCLEVBQUUsQ0FBQztRQUU5Qzs7OztXQUlHO1FBQ00sa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBRTVDOztXQUVHO1FBQ08sZ0JBQVcsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVyRTs7V0FFRztRQUNPLG9CQUFlLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFNRixDQUFDO0lBekN0RTs7Ozs7T0FLRztJQUNILElBQWEsU0FBUyxDQUFDLElBQWdCO1FBQ3JDLElBQUksSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUNoQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBMkJELFFBQVE7UUFDTixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUE0QixFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUlELE1BQU0sQ0FBQyxVQUFnQjtRQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQXVCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFHLElBQUksVUFBVSxFQUFFLE9BQU8sRUFBRTtZQUN2QixVQUFVLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRSxPQUFPLENBQUM7U0FDekM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQWM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsSUFBUztRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksa0JBQWtCLENBQU0sSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2hILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkMsQ0FBQzs7NEdBbkdVLGNBQWM7Z0dBQWQsY0FBYyxxUUFtQ2QsT0FBTyw4REMvQ3BCLG95RUErQ0E7NEZEbkNhLGNBQWM7a0JBTjFCLFNBQVM7K0JBQ0UsVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNOzZHQXFDVCxJQUFJO3NCQUF6QyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBUXZCLFNBQVM7c0JBQXJCLEtBQUs7Z0JBWUcsWUFBWTtzQkFBcEIsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtJLFdBQVc7c0JBQXBCLE1BQU07Z0JBS0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IERhdGFQcm9wZXJ0eUdldHRlclBpcGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGlwZXMvZGF0YVByb3BlcnR5R2V0dGVyJztcbmltcG9ydCB7IERhdGFUeXBlLCBEYXRlRm9ybWF0LCBJRGF0YVNvdXJjZSwgSVN0YXR1c09wdGlvbnMsIElUYWJsZUNvbHVtbiB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1aS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUIGV4dGVuZHMgSURhdGFTb3VyY2U+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gVE9ETzogU29tZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGFyZSBpZ25vcmVkIG9uIHB1cnBvc2UgYmVjYXVzZSBvZiBhIGN1cnJlbnQgaXNzdWUgd2l0aCBjb21wb2RvYyBhbmQgYW5ndWxhciAxM1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Rvcnlib29ranMvc3Rvcnlib29rL2lzc3Vlcy8xNjg2NVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3Rvcnlib29ranMvc3Rvcnlib29rL2lzc3Vlcy8xNzAwNFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZWFkb25seSB0aW1lQWdvT3B0aW9ucyA9IHtcbiAgICBhZGRTdWZmaXg6IHRydWUsXG4gIH07XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4oW10pO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBEYXRhVHlwZSA9IERhdGFUeXBlO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBEYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdDtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KSBzb3J0ITogTWF0U29ydDtcblxuICAvKipcbiAgICogRGF0YSB0byBiZSByZW5kZXJlZFxuICAgKlxuICAgKiBAdHlwZSB7SURhdGFTb3VyY2V9XG4gICAqIEBtZW1iZXJvZiBUYWJsZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgc2V0IHRhYmxlRGF0YShkYXRhOiBUW10gfCBudWxsKSB7XG4gICAgaWYgKGRhdGE/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5zZXRUYWJsZURhdGFTb3VyY2UoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERhdGEgc3RydWN0dXJlIHRvIHNlbGVjdCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSByZW5kZXJlZCBhbmQgdGhlaXIgY2FwYWJpbGl0aWVzXG4gICAqXG4gICAqIEB0eXBlIHtJVGFibGVDb2x1bW59XG4gICAqIEBtZW1iZXJvZiBUYWJsZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgdGFibGVDb2x1bW5zOiBJVGFibGVDb2x1bW48VD5bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7SVN0YXR1c09wdGlvbnN9XG4gICAqIEBtZW1iZXJvZiBUYWJsZUNvbXBvbmVudFxuICAgKiBAaWdub3JlXG4gICAqL1xuICBASW5wdXQoKSBzdGF0dXNPcHRpb25zOiBJU3RhdHVzT3B0aW9ucyA9IHt9O1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBAT3V0cHV0KCkgb25Tb3J0RXZlbnQ6IEV2ZW50RW1pdHRlcjxTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydD4oKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQE91dHB1dCgpIG9uUm93Q2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLnRhYmxlQ29sdW1ucy5tYXAoKHRhYmxlQ29sdW1uOiBJVGFibGVDb2x1bW48VD4pID0+IHRhYmxlQ29sdW1uLm5hbWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhUHJvcGVydHlHZXR0ZXJQaXBlOiBEYXRhUHJvcGVydHlHZXR0ZXJQaXBlKSB7fVxuXG4gIG9uU29ydChzb3J0UGFyYW1zOiBTb3J0KSB7XG4gICAgY29uc3QgY29sdW1uU29ydCA9IHRoaXMudGFibGVDb2x1bW5zLmZpbmQoKGNvbHVtbjogSVRhYmxlQ29sdW1uPFQ+KSA9PiBjb2x1bW4ubmFtZSA9PT0gc29ydFBhcmFtcy5hY3RpdmUpO1xuICAgIGlmIChjb2x1bW5Tb3J0Py5kYXRhS2V5KSB7XG4gICAgICBzb3J0UGFyYW1zLmFjdGl2ZSA9IGNvbHVtblNvcnQ/LmRhdGFLZXk7XG4gICAgfVxuICAgIHRoaXMub25Tb3J0RXZlbnQuZW1pdChzb3J0UGFyYW1zKTtcbiAgfVxuXG4gIG9uUm93Q2xpY2socm93UGFyYW1zOiBhbnkpIHtcbiAgICB0aGlzLm9uUm93Q2xpY2tFdmVudC5lbWl0KHJvd1BhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRUYWJsZURhdGFTb3VyY2UoZGF0YTogVFtdKSB7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KGRhdGEpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0aW5nRGF0YUFjY2Vzc29yID0gKGl0ZW0sIHByb3BlcnR5KSA9PiB0aGlzLmRhdGFQcm9wZXJ0eUdldHRlclBpcGUudHJhbnNmb3JtKGl0ZW0sIHByb3BlcnR5KTtcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgfVxufVxuIiwiPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgbWF0U29ydCAobWF0U29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWJsZUNvbHVtbiBvZiB0YWJsZUNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cInRhYmxlQ29sdW1uLm5hbWVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGVDb2x1bW4uc29ydGFibGU7IGVsc2Ugbm90U29ydGFibGVcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFttYXQtc29ydC1oZWFkZXJdPVwidGFibGVDb2x1bW4uZGF0YUtleSB8fCAnJ1wiXG4gICAgICAgIGFycm93UG9zaXRpb249XCJhZnRlclwiPlxuICAgICAgICB7e3RhYmxlQ29sdW1uLm5hbWUgfCB1cHBlcmNhc2V9fVxuICAgICAgPC90aD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI25vdFNvcnRhYmxlPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAge3t0YWJsZUNvbHVtbi5uYW1lIHwgdXBwZXJjYXNlfX1cbiAgICAgIDwvdGg+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIChjbGljayk9XCJvblJvd0NsaWNrKGVsZW1lbnQpXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0YWJsZUNvbHVtbi5kYXRhVHlwZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJEYXRhVHlwZS5TdHJpbmdcIj5cbiAgICAgICAgICB7e2VsZW1lbnQgfCBkYXRhUHJvcGVydHlHZXR0ZXI6IHRhYmxlQ29sdW1uLmRhdGFLZXl9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiRGF0YVR5cGUuRGF0ZVwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFibGVDb2x1bW4uZGF0ZUZvcm1hdCA9PT0gRGF0ZUZvcm1hdC5TaG9ydFwiPnt7KGVsZW1lbnQgfCBkYXRhUHJvcGVydHlHZXR0ZXI6XG4gICAgICAgICAgICB0YWJsZUNvbHVtbi5kYXRhS2V5KSB8IGRmbnNQYXJzZUlzbyB8IGRmbnNGb3JtYXQ6ICdkZCBNTU0geXl5eSd9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYmxlQ29sdW1uLmRhdGVGb3JtYXQgPT09IERhdGVGb3JtYXQuVGltZUFnb1wiPnt7KGVsZW1lbnQgfCBkYXRhUHJvcGVydHlHZXR0ZXI6XG4gICAgICAgICAgICB0YWJsZUNvbHVtbi5kYXRhS2V5KSB8IGRmbnNQYXJzZUlzbyB8IGRmbnNGb3JtYXREaXN0YW5jZVRvTm93OiB0aW1lQWdvT3B0aW9uc319PC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiRGF0YVR5cGUuUGVyY2VudGFnZVwiPlxuICAgICAgICAgIHt7ZWxlbWVudCB8IGRhdGFQcm9wZXJ0eUdldHRlcjogdGFibGVDb2x1bW4uZGF0YUtleX19JVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiRGF0YVR5cGUuTGFiZWxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxhYmVsOyBjb250ZXh0OiB7bGFiZWw6IHN0YXR1c09wdGlvbnNbZWxlbWVudCB8IGRhdGFQcm9wZXJ0eUdldHRlcjogdGFibGVDb2x1bW4uZGF0YUtleV19XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAge3tlbGVtZW50IHwgZGF0YVByb3BlcnR5R2V0dGVyOiB0YWJsZUNvbHVtbi5kYXRhS2V5fX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCI+PC90cj5cbjwvdGFibGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGFiZWwgbGV0LWxhYmVsPVwibGFiZWxcIj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGxhYmVsPy5iYWNrZ3JvdW5kQ29sb3IsICdjb2xvcic6IGxhYmVsPy5jb2xvcn1cIj5cbiAgICB7eyBsYWJlbD8udGl0bGUgfX1cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==