ngx-material-entity 18.1.0 → 18.2.1
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 +10 -13
- package/components/create-page/create-page.component.d.ts +3 -0
- package/components/edit-page/edit-page.component.d.ts +3 -0
- package/components/input/file/file-default-input/file-default-input.component.d.ts +1 -1
- package/components/input/file/file-image-input/file-image-input.component.d.ts +3 -0
- package/components/input/file/file-input/file-input.component.d.ts +8 -2
- package/components/input/input.component.d.ts +2 -0
- package/components/input/number/number-dropdown-input/number-dropdown-input.component.d.ts +2 -0
- package/components/input/relations/references-many-input/references-many-input.component.d.ts +2 -0
- package/components/input/string/string-dropdown-input/string-dropdown-input.component.d.ts +2 -0
- package/components/input/string/string-password-input/string-password-input.component.d.ts +3 -0
- package/components/tooltip/tooltip.component.d.ts +2 -0
- package/decorators/array/array-decorator-internal.data.d.ts +3 -2
- package/decorators/array/array-decorator.data.d.ts +7 -6
- package/decorators/base/property-decorator.data.d.ts +2 -2
- package/decorators/file/file-decorator-internal.data.d.ts +3 -2
- package/decorators/file/file-decorator.data.d.ts +4 -3
- package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +4 -4
- package/esm2022/components/create-page/create-page.component.mjs +18 -8
- package/esm2022/components/custom-table/custom-table.component.mjs +4 -4
- package/esm2022/components/edit-page/edit-page.component.mjs +18 -8
- package/esm2022/components/form/form.component.mjs +5 -5
- package/esm2022/components/input/array/array-date-input/array-date-input.component.mjs +5 -5
- package/esm2022/components/input/array/array-date-range-input/array-date-range-input.component.mjs +3 -3
- package/esm2022/components/input/array/array-date-time-input/array-date-time-input.component.mjs +3 -3
- package/esm2022/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +8 -6
- package/esm2022/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +8 -6
- package/esm2022/components/input/array/array-table.class.mjs +3 -3
- package/esm2022/components/input/base-input.component.mjs +3 -3
- package/esm2022/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +4 -4
- package/esm2022/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +3 -3
- package/esm2022/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +4 -4
- package/esm2022/components/input/custom/custom.component.mjs +3 -3
- package/esm2022/components/input/date/date-input/date-input.component.mjs +3 -3
- package/esm2022/components/input/date/date-range-input/date-range-input.component.mjs +3 -3
- package/esm2022/components/input/date/date-time-input/date-time-input.component.mjs +3 -3
- package/esm2022/components/input/file/file-default-input/file-default-input.component.mjs +5 -5
- package/esm2022/components/input/file/file-image-input/file-image-input.component.mjs +9 -5
- package/esm2022/components/input/file/file-input/file-input.component.mjs +25 -12
- package/esm2022/components/input/input.component.mjs +23 -12
- package/esm2022/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +10 -6
- package/esm2022/components/input/number/number-input/number-input.component.mjs +3 -3
- package/esm2022/components/input/number/number-slider-input/number-slider-input.component.mjs +4 -4
- package/esm2022/components/input/relations/references-many-input/references-many-input.component.mjs +10 -6
- package/esm2022/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +3 -3
- package/esm2022/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +10 -6
- package/esm2022/components/input/string/string-input/string-input.component.mjs +3 -3
- package/esm2022/components/input/string/string-password-input/string-password-input.component.mjs +11 -6
- package/esm2022/components/input/string/string-textbox-input/string-textbox-input.component.mjs +3 -3
- package/esm2022/components/table/create-dialog/create-entity-dialog.component.mjs +9 -6
- package/esm2022/components/table/display-column-value/base-display-column-value.component.mjs +3 -3
- package/esm2022/components/table/display-column-value/display-column-value.component.mjs +3 -3
- package/esm2022/components/table/edit-dialog/edit-data.builder.mjs +1 -1
- package/esm2022/components/table/edit-dialog/edit-entity-dialog.component.mjs +9 -7
- package/esm2022/components/table/table-data.builder.mjs +3 -1
- package/esm2022/components/table/table-data.mjs +1 -1
- package/esm2022/components/table/table.component.mjs +5 -11
- package/esm2022/components/tooltip/tooltip.component.mjs +9 -5
- package/esm2022/decorators/array/array-decorator-internal.data.mjs +5 -3
- package/esm2022/decorators/array/array-decorator.data.mjs +1 -1
- package/esm2022/decorators/array/array.decorator.mjs +15 -8
- package/esm2022/decorators/base/property-decorator.data.mjs +2 -2
- package/esm2022/decorators/file/file-decorator-internal.data.mjs +4 -3
- package/esm2022/decorators/file/file-decorator.data.mjs +3 -3
- package/esm2022/decorators/file/file.decorator.mjs +7 -4
- package/esm2022/decorators/number/number.decorator.mjs +7 -4
- package/esm2022/decorators/object/object.decorator.mjs +5 -3
- package/esm2022/decorators/string/string-decorator-internal.data.mjs +2 -1
- package/esm2022/decorators/string/string.decorator.mjs +11 -6
- package/esm2022/directives/drag-drop.directive.mjs +3 -3
- package/esm2022/directives/dynamic-style-class.directive.mjs +3 -3
- package/esm2022/directives/included-in.directive.mjs +3 -3
- package/esm2022/directives/number.directive.mjs +3 -3
- package/esm2022/directives/password-match.directive.mjs +3 -3
- package/esm2022/directives/tooltip.directive.mjs +3 -3
- package/esm2022/functions/dropdown-values-to-function.function.mjs +2 -1
- package/esm2022/functions/table-column-value-to-sort-value.function.mjs +9 -5
- package/esm2022/utilities/date.utilities.mjs +1 -1
- package/esm2022/utilities/entity.utilities.mjs +36 -21
- package/esm2022/utilities/file.utilities.mjs +7 -4
- package/esm2022/utilities/validation.utilities.mjs +41 -21
- package/fesm2022/ngx-material-entity.mjs +367 -254
- package/fesm2022/ngx-material-entity.mjs.map +1 -1
- package/package.json +4 -2
- package/utilities/entity.utilities.d.ts +4 -4
package/README.md
CHANGED
|
@@ -65,8 +65,6 @@ NgxMaterialEntity aims to have a fast way to get started with a lot of default o
|
|
|
65
65
|
|
|
66
66
|
# Requirements
|
|
67
67
|
This package relies on the [angular material library](https://material.angular.io/guide/getting-started) to render its components.
|
|
68
|
-
<br>
|
|
69
|
-
It also uses [bootstrap](https://getbootstrap.com/) for responsive design.
|
|
70
68
|
|
|
71
69
|
# Basic Usage
|
|
72
70
|
## Create your entity
|
|
@@ -136,7 +134,7 @@ It is pretty easy to use the input component inside a for-loop that iterates ove
|
|
|
136
134
|
<br>
|
|
137
135
|
We thought this approach a bit further and build a complete CRUD table component with support for:
|
|
138
136
|
- omitting values for creating or updating entities
|
|
139
|
-
- layouting & responsive design
|
|
137
|
+
- layouting & responsive design
|
|
140
138
|
- multi select actions
|
|
141
139
|
- validation
|
|
142
140
|
|
|
@@ -250,7 +248,7 @@ export abstract class PropertyDecoratorConfig {
|
|
|
250
248
|
omitForUpdate?: boolean;
|
|
251
249
|
/**
|
|
252
250
|
* Defines the width of the input property when used inside the default create or edit dialog.
|
|
253
|
-
* Has 3
|
|
251
|
+
* Has 3 values for different breakpoints for simple responsive design based on bootstrap (1-12).
|
|
254
252
|
* The first value sets the columns for the screen size lg, the second for md and the third for sm.
|
|
255
253
|
*
|
|
256
254
|
* @default [6, 6, 12]
|
|
@@ -264,7 +262,6 @@ export abstract class PropertyDecoratorConfig {
|
|
|
264
262
|
position?: Position
|
|
265
263
|
}
|
|
266
264
|
```
|
|
267
|
-
For more information regarding the "defaultWidths" see the bootstrap guide about the [Grid system](https://getbootstrap.com/docs/5.0/layout/grid/).
|
|
268
265
|
|
|
269
266
|
## @string default
|
|
270
267
|
The "default" display of a string value. Inside a single line mat-input.
|
|
@@ -614,11 +611,11 @@ export interface StringChipsArrayDecoratorConfig extends ArrayDecoratorConfig {
|
|
|
614
611
|
displayStyle: 'chips',
|
|
615
612
|
|
|
616
613
|
/**
|
|
617
|
-
* The
|
|
614
|
+
* The icon used to remove an entry from the array.
|
|
618
615
|
*
|
|
619
|
-
* @default
|
|
616
|
+
* @default faCircleMinus
|
|
620
617
|
*/
|
|
621
|
-
deleteIcon?:
|
|
618
|
+
deleteIcon?: IconDefinition,
|
|
622
619
|
/**
|
|
623
620
|
* The minimum required length of the string.
|
|
624
621
|
*/
|
|
@@ -644,11 +641,11 @@ export interface AutocompleteStringChipsArrayDecoratorConfig extends ArrayDecora
|
|
|
644
641
|
displayStyle: 'chips',
|
|
645
642
|
|
|
646
643
|
/**
|
|
647
|
-
* The
|
|
644
|
+
* The icon used to remove an entry from the array.
|
|
648
645
|
*
|
|
649
|
-
* @default
|
|
646
|
+
* @default faCircleMinus
|
|
650
647
|
*/
|
|
651
|
-
deleteIcon?:
|
|
648
|
+
deleteIcon?: IconDefinition,
|
|
652
649
|
/**
|
|
653
650
|
* The autocomplete values.
|
|
654
651
|
*/
|
|
@@ -885,9 +882,9 @@ abstract class FileDecoratorConfig extends PropertyDecoratorConfig {
|
|
|
885
882
|
type!: 'image' | 'other';
|
|
886
883
|
|
|
887
884
|
/**
|
|
888
|
-
* The
|
|
885
|
+
* The icon used to remove a file from the input.
|
|
889
886
|
*
|
|
890
|
-
* @default
|
|
887
|
+
* @default faCircleMinus
|
|
891
888
|
*/
|
|
892
889
|
deleteIcon?: string;
|
|
893
890
|
|
|
@@ -2,6 +2,7 @@ import { Location } from '@angular/common';
|
|
|
2
2
|
import { HttpClient } from '@angular/common/http';
|
|
3
3
|
import { ElementRef, EnvironmentInjector, InjectionToken, OnInit, Renderer2 } from '@angular/core';
|
|
4
4
|
import { MatDialog } from '@angular/material/dialog';
|
|
5
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
5
6
|
import { PageCreateDataInternal } from './page-create-data.builder';
|
|
6
7
|
import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';
|
|
7
8
|
import { NgxGlobalDefaultValues } from '../../global-configuration-values';
|
|
@@ -64,6 +65,8 @@ export declare class NgxMatEntityCreatePageComponent<EntityType extends BaseEnti
|
|
|
64
65
|
private readonly el;
|
|
65
66
|
private readonly renderer;
|
|
66
67
|
protected readonly globalConfig: NgxGlobalDefaultValues;
|
|
68
|
+
faChevronLeft: IconDefinition;
|
|
69
|
+
faWarning: IconDefinition;
|
|
67
70
|
/**
|
|
68
71
|
* Contains HelperMethods around handling Entities and their property-metadata.
|
|
69
72
|
*/
|
|
@@ -3,6 +3,7 @@ import { HttpClient } from '@angular/common/http';
|
|
|
3
3
|
import { ElementRef, EnvironmentInjector, InjectionToken, OnInit, Renderer2 } from '@angular/core';
|
|
4
4
|
import { MatDialog } from '@angular/material/dialog';
|
|
5
5
|
import { ActivatedRoute } from '@angular/router';
|
|
6
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
6
7
|
import { PageEditDataInternal } from './page-edit-data.builder';
|
|
7
8
|
import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';
|
|
8
9
|
import { NgxGlobalDefaultValues } from '../../global-configuration-values';
|
|
@@ -67,6 +68,8 @@ export declare class NgxMatEntityEditPageComponent<EntityType extends BaseEntity
|
|
|
67
68
|
private readonly el;
|
|
68
69
|
private readonly renderer;
|
|
69
70
|
protected readonly globalConfig: NgxGlobalDefaultValues;
|
|
71
|
+
faChevronLeft: IconDefinition;
|
|
72
|
+
faWarning: IconDefinition;
|
|
70
73
|
/**
|
|
71
74
|
* Contains HelperMethods around handling Entities and their property-metadata.
|
|
72
75
|
*/
|
|
@@ -5,7 +5,7 @@ import { FileData } from '../../../../decorators/file/file-decorator.data';
|
|
|
5
5
|
import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export declare class FileDefaultInputComponent<EntityType extends BaseEntityType<EntityType>> extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.FILE_DEFAULT, FileData | FileData[]> implements OnInit {
|
|
8
|
-
refreshFileData(fileData?: FileData | FileData[]):
|
|
8
|
+
refreshFileData(fileData?: FileData | FileData[]): void;
|
|
9
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<FileDefaultInputComponent<any>, never>;
|
|
10
10
|
static ɵcmp: i0.ɵɵComponentDeclaration<FileDefaultInputComponent<any>, "file-default-input", never, {}, {}, never, never, true, never>;
|
|
11
11
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { HttpClient } from '@angular/common/http';
|
|
2
2
|
import { OnInit } from '@angular/core';
|
|
3
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
3
4
|
import { BaseEntityType } from '../../../../classes/entity.model';
|
|
4
5
|
import { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';
|
|
5
6
|
import { FileData } from '../../../../decorators/file/file-decorator.data';
|
|
@@ -7,6 +8,8 @@ import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
|
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
export declare class FileImageInputComponent<EntityType extends BaseEntityType<EntityType>> extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.FILE_IMAGE, FileData | FileData[]> implements OnInit {
|
|
9
10
|
private readonly http;
|
|
11
|
+
faAngleLeft: IconDefinition;
|
|
12
|
+
faAngleRight: IconDefinition;
|
|
10
13
|
get multiPreviewImages(): string[] | undefined;
|
|
11
14
|
set multiPreviewImages(value: string[] | undefined);
|
|
12
15
|
get singlePreviewImage(): string | undefined;
|
|
@@ -2,6 +2,7 @@ import { HttpClient } from '@angular/common/http';
|
|
|
2
2
|
import { EventEmitter, OnInit } from '@angular/core';
|
|
3
3
|
import { NgModel } from '@angular/forms';
|
|
4
4
|
import { MatDialog } from '@angular/material/dialog';
|
|
5
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
5
6
|
import { BaseEntityType } from '../../../../classes/entity.model';
|
|
6
7
|
import { DefaultFileDecoratorConfigInternal, ImageFileDecoratorConfigInternal } from '../../../../decorators/file/file-decorator-internal.data';
|
|
7
8
|
import { FileData } from '../../../../decorators/file/file-decorator.data';
|
|
@@ -10,6 +11,11 @@ import * as i0 from "@angular/core";
|
|
|
10
11
|
export declare class FileInputComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {
|
|
11
12
|
private readonly dialog;
|
|
12
13
|
private readonly http;
|
|
14
|
+
faFileArrowUp: IconDefinition;
|
|
15
|
+
faUpload: IconDefinition;
|
|
16
|
+
faPlusCircle: IconDefinition;
|
|
17
|
+
faFileZipper: IconDefinition;
|
|
18
|
+
faDownload: IconDefinition;
|
|
13
19
|
get filenames(): string[] | undefined;
|
|
14
20
|
set filenames(value: string[] | undefined);
|
|
15
21
|
FileUtilities: typeof FileUtilities;
|
|
@@ -25,8 +31,8 @@ export declare class FileInputComponent<EntityType extends BaseEntityType<Entity
|
|
|
25
31
|
ngOnInit(): void;
|
|
26
32
|
private initMultiFile;
|
|
27
33
|
private initSingleFile;
|
|
28
|
-
setFileFromInput(event: Event):
|
|
29
|
-
setFile(files: File[]):
|
|
34
|
+
setFileFromInput(event: Event): void;
|
|
35
|
+
setFile(files: File[]): void;
|
|
30
36
|
private resetFileInputs;
|
|
31
37
|
private setMultiFile;
|
|
32
38
|
private setSingleFile;
|
|
@@ -5,6 +5,7 @@ import { NgModel } from '@angular/forms';
|
|
|
5
5
|
import { MatDialog } from '@angular/material/dialog';
|
|
6
6
|
import { MatTableDataSource } from '@angular/material/table';
|
|
7
7
|
import { Router } from '@angular/router';
|
|
8
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
8
9
|
import { BaseEntityType } from '../../classes/entity.model';
|
|
9
10
|
import { EditArrayItemDialogDataInternal, EntityArrayDecoratorConfigInternal } from '../../decorators/array/array-decorator-internal.data';
|
|
10
11
|
import { DecoratorTypes } from '../../decorators/base/decorator-types.enum';
|
|
@@ -114,6 +115,7 @@ export declare class NgxMatEntityInputComponent<EntityType extends BaseEntityTyp
|
|
|
114
115
|
protected readonly defaultGetValidationErrorMessage: (model: NgModel) => string;
|
|
115
116
|
protected readonly globalConfig: NgxGlobalDefaultValues;
|
|
116
117
|
private readonly http;
|
|
118
|
+
faSearch: IconDefinition;
|
|
117
119
|
/**
|
|
118
120
|
* The entity on which the property exists. Used in conjunction with the "propertyKey"
|
|
119
121
|
* to determine the property for which the input should be generated.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EnvironmentInjector, OnInit } from '@angular/core';
|
|
2
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
2
3
|
import { BaseEntityType } from '../../../../classes/entity.model';
|
|
3
4
|
import { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';
|
|
4
5
|
import { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';
|
|
@@ -6,6 +7,7 @@ import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
|
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
export declare class NumberDropdownInputComponent<EntityType extends BaseEntityType<EntityType>> extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER_DROPDOWN, number> implements OnInit {
|
|
8
9
|
private readonly injector;
|
|
10
|
+
faSearch: IconDefinition;
|
|
9
11
|
private dropdownValues;
|
|
10
12
|
filteredDropdownValues: DropdownValue<number | undefined>[];
|
|
11
13
|
get currentDropdownValue(): DropdownValue<number | undefined> | undefined;
|
package/components/input/relations/references-many-input/references-many-input.component.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EnvironmentInjector, OnInit } from '@angular/core';
|
|
2
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
2
3
|
import { BaseEntityType } from '../../../../classes/entity.model';
|
|
3
4
|
import { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';
|
|
4
5
|
import { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';
|
|
@@ -9,6 +10,7 @@ import * as i0 from "@angular/core";
|
|
|
9
10
|
export declare class ReferencesManyInputComponent<EntityType extends BaseEntityType<EntityType>> extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.REFERENCES_MANY, string[]> implements OnInit {
|
|
10
11
|
private readonly injector;
|
|
11
12
|
private readonly globalConfig;
|
|
13
|
+
faSearch: IconDefinition;
|
|
12
14
|
private allReferencedEntities;
|
|
13
15
|
private allDropdownValues;
|
|
14
16
|
dropdownValues: DropdownValue<string>[];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EnvironmentInjector, OnInit } from '@angular/core';
|
|
2
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
2
3
|
import { BaseEntityType } from '../../../../classes/entity.model';
|
|
3
4
|
import { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';
|
|
4
5
|
import { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';
|
|
@@ -6,6 +7,7 @@ import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
|
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
export declare class StringDropdownInputComponent<EntityType extends BaseEntityType<EntityType>> extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_DROPDOWN, string> implements OnInit {
|
|
8
9
|
private readonly injector;
|
|
10
|
+
faSearch: IconDefinition;
|
|
9
11
|
private dropdownValues;
|
|
10
12
|
filteredDropdownValues: DropdownValue<string | undefined>[];
|
|
11
13
|
get currentDropdownValue(): DropdownValue<string | undefined> | undefined;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { OnInit } from '@angular/core';
|
|
2
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
2
3
|
import { BaseEntityType } from '../../../../classes/entity.model';
|
|
3
4
|
import { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';
|
|
4
5
|
import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
|
|
@@ -9,6 +10,8 @@ export declare enum PasswordStrength {
|
|
|
9
10
|
STRONG = "strong"
|
|
10
11
|
}
|
|
11
12
|
export declare class StringPasswordInputComponent<EntityType extends BaseEntityType<EntityType>> extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_PASSWORD, string> implements OnInit {
|
|
13
|
+
faEye: IconDefinition;
|
|
14
|
+
faEyeSlash: IconDefinition;
|
|
12
15
|
hide: boolean;
|
|
13
16
|
hideConfirm: boolean;
|
|
14
17
|
confirmRequired: boolean;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
1
2
|
import * as i0 from "@angular/core";
|
|
2
3
|
/**
|
|
3
4
|
* A component that displays an info-symbol and a tooltip when it is hovered/clicked.
|
|
4
5
|
*/
|
|
5
6
|
export declare class TooltipComponent {
|
|
7
|
+
faInfo: IconDefinition;
|
|
6
8
|
/**
|
|
7
9
|
* What to display inside the tooltip.
|
|
8
10
|
*/
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DateFilterFn } from '@angular/material/datepicker';
|
|
2
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
2
3
|
import { AutocompleteStringChipsArrayDecoratorConfig, DateArrayDecoratorConfig, DateRangeArrayDecoratorConfig, DateTimeArrayDecoratorConfig, EditArrayItemDialogData, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from './array-decorator.data';
|
|
3
4
|
import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';
|
|
4
5
|
import { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';
|
|
@@ -104,7 +105,7 @@ export declare class StringChipsArrayDecoratorConfigInternal extends PropertyDec
|
|
|
104
105
|
itemType: DecoratorTypes.STRING;
|
|
105
106
|
allowDuplicates: boolean;
|
|
106
107
|
duplicatesErrorDialog: ConfirmDialogData;
|
|
107
|
-
deleteIcon:
|
|
108
|
+
deleteIcon: IconDefinition;
|
|
108
109
|
minLength?: number;
|
|
109
110
|
maxLength?: number;
|
|
110
111
|
regex?: RegExp;
|
|
@@ -118,7 +119,7 @@ export declare class AutocompleteStringChipsArrayDecoratorConfigInternal extends
|
|
|
118
119
|
itemType: DecoratorTypes.STRING_AUTOCOMPLETE;
|
|
119
120
|
allowDuplicates: boolean;
|
|
120
121
|
duplicatesErrorDialog: ConfirmDialogData;
|
|
121
|
-
deleteIcon:
|
|
122
|
+
deleteIcon: IconDefinition;
|
|
122
123
|
minLength?: number;
|
|
123
124
|
maxLength?: number;
|
|
124
125
|
regex?: RegExp;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DateFilterFn } from '@angular/material/datepicker';
|
|
2
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
2
3
|
import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';
|
|
3
4
|
import { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';
|
|
4
5
|
import { CreateData, DisplayColumn, DynamicStyleClasses } from '../../components/table/table-data';
|
|
@@ -199,10 +200,10 @@ export interface DateRangeArrayDecoratorConfig extends ArrayTableDecoratorConfig
|
|
|
199
200
|
export interface StringChipsArrayDecoratorConfig extends ArrayDecoratorConfig<string[]> {
|
|
200
201
|
itemType: DecoratorTypes.STRING;
|
|
201
202
|
/**
|
|
202
|
-
* The
|
|
203
|
-
* @default
|
|
203
|
+
* The font awesome icon used to remove an entry from the array.
|
|
204
|
+
* @default faCircleMinus
|
|
204
205
|
*/
|
|
205
|
-
deleteIcon?:
|
|
206
|
+
deleteIcon?: IconDefinition;
|
|
206
207
|
/**
|
|
207
208
|
* The minimum required length of the string.
|
|
208
209
|
*/
|
|
@@ -222,10 +223,10 @@ export interface StringChipsArrayDecoratorConfig extends ArrayDecoratorConfig<st
|
|
|
222
223
|
export interface AutocompleteStringChipsArrayDecoratorConfig extends ArrayDecoratorConfig<string[]> {
|
|
223
224
|
itemType: DecoratorTypes.STRING_AUTOCOMPLETE;
|
|
224
225
|
/**
|
|
225
|
-
* The
|
|
226
|
-
* @default
|
|
226
|
+
* The icon used to remove an entry from the array.
|
|
227
|
+
* @default faCircleMinus
|
|
227
228
|
*/
|
|
228
|
-
deleteIcon?:
|
|
229
|
+
deleteIcon?: IconDefinition;
|
|
229
230
|
/**
|
|
230
231
|
* The autocomplete values.
|
|
231
232
|
*/
|
|
@@ -32,7 +32,7 @@ export declare abstract class PropertyDecoratorConfig<ValueType> {
|
|
|
32
32
|
omitForUpdate?: boolean;
|
|
33
33
|
/**
|
|
34
34
|
* Defines the width of the input property when used inside the default create or edit dialog.
|
|
35
|
-
* Has 3
|
|
35
|
+
* Has 3 values for different breakpoints for simple responsive design based on bootstrap (1-12).
|
|
36
36
|
* The first value sets the columns for the screen size lg, the second for md and the third for sm.
|
|
37
37
|
* @default [6, 6, 12]
|
|
38
38
|
*/
|
|
@@ -74,7 +74,7 @@ export interface Position {
|
|
|
74
74
|
*/
|
|
75
75
|
tabName?: string;
|
|
76
76
|
/**
|
|
77
|
-
* Specifies the
|
|
77
|
+
* Specifies the row in which this property is displayed.
|
|
78
78
|
* Ordering is ascending.
|
|
79
79
|
* @default -1 (sets this property after the last row)
|
|
80
80
|
*/
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
1
2
|
import { DefaultFileDecoratorConfig, FileData, ImageFileDecoratorConfig } from './file-decorator.data';
|
|
2
3
|
import { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';
|
|
3
4
|
import { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';
|
|
@@ -63,7 +64,7 @@ export declare class DefaultFileDecoratorConfigInternal extends PropertyDecorato
|
|
|
63
64
|
preview: false;
|
|
64
65
|
multiple: boolean;
|
|
65
66
|
allowedMimeTypes: string[];
|
|
66
|
-
deleteIcon:
|
|
67
|
+
deleteIcon: IconDefinition;
|
|
67
68
|
maxSize: number;
|
|
68
69
|
maxSizeTotal: number;
|
|
69
70
|
mimeTypeErrorDialog: ConfirmDialogData;
|
|
@@ -81,7 +82,7 @@ export declare class ImageFileDecoratorConfigInternal extends PropertyDecoratorC
|
|
|
81
82
|
multiple: boolean;
|
|
82
83
|
preview: boolean;
|
|
83
84
|
previewPlaceholderUrl?: string;
|
|
84
|
-
deleteIcon:
|
|
85
|
+
deleteIcon: IconDefinition;
|
|
85
86
|
maxSize: number;
|
|
86
87
|
maxSizeTotal: number;
|
|
87
88
|
mimeTypeErrorDialog: ConfirmDialogData;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IconDefinition } from '@fortawesome/angular-fontawesome';
|
|
1
2
|
import { FileDataWithFile, FileDataWithUrl } from './file-decorator-internal.data';
|
|
2
3
|
import { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';
|
|
3
4
|
import { PropertyDecoratorConfig } from '../base/property-decorator.data';
|
|
@@ -18,10 +19,10 @@ declare abstract class FileDecoratorConfig extends PropertyDecoratorConfig<FileD
|
|
|
18
19
|
*/
|
|
19
20
|
type: 'image' | 'other';
|
|
20
21
|
/**
|
|
21
|
-
* The
|
|
22
|
-
* @default
|
|
22
|
+
* The icon used to remove a file from the input.
|
|
23
|
+
* @default faCircleMinus
|
|
23
24
|
*/
|
|
24
|
-
deleteIcon?:
|
|
25
|
+
deleteIcon?: IconDefinition;
|
|
25
26
|
/**
|
|
26
27
|
* Whether or not the file should be displayed inside a preview.
|
|
27
28
|
* @default true
|
|
@@ -49,10 +49,10 @@ export class NgxMatEntityConfirmDialogComponent {
|
|
|
49
49
|
cancel() {
|
|
50
50
|
this.dialogRef.close(false);
|
|
51
51
|
}
|
|
52
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.
|
|
53
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.
|
|
52
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: NgxMatEntityConfirmDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: NGX_COMPLETE_GLOBAL_DEFAULT_VALUES }], target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.7", type: NgxMatEntityConfirmDialogComponent, isStandalone: true, selector: "ngx-mat-entity-confirm-dialog", ngImport: i0, template: "@if (data.title) {\n <h2 mat-dialog-title>{{data.title}}</h2>\n}\n\n<mat-dialog-content>\n @for (paragraph of data.text; track $index) {\n <p>{{paragraph}}</p>\n }\n @if (data.requireConfirmation) {\n <div class=\"checkbox-wrapper\">\n <mat-checkbox name=\"confirm\" [(ngModel)]=\"confirm\">\n {{data.confirmationText}}\n </mat-checkbox>\n </div>\n }\n</mat-dialog-content>\n\n<mat-dialog-actions>\n @if (data.type === 'delete') {\n <button type=\"button\" mat-raised-button color=\"warn\" class=\"confirm-button\" [disabled]=\"data.requireConfirmation && !confirm\" (click)=\"confirmAction()\">\n {{data.confirmButtonLabel}}\n </button>\n }\n @if (data.type !== 'delete') {\n <button type=\"button\" mat-raised-button class=\"confirm-button\" [disabled]=\"data.requireConfirmation && !confirm\" (click)=\"confirmAction()\">\n {{data.confirmButtonLabel}}\n </button>\n }\n @if (data.type !== 'info-only') {\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"cancel()\">\n {{data.cancelButtonLabel}}\n </button>\n }\n</mat-dialog-actions>", styles: [".checkbox-wrapper{min-height:50px;display:flex}.checkbox-wrapper>mat-checkbox{align-self:center}\n", "::ng-deep .mdc-dialog .mdc-dialog__content{padding:6px 20px!important}mat-dialog-actions{justify-content:space-between;align-items:center;padding-left:20px;padding-right:20px}.mat-dialog-title{padding:12px 20px;display:flex;justify-content:space-between;align-items:center}.mat-dialog-title div{font-size:var(--mdc-dialog-subhead-size, 14px);font-weight:var(--mdc-dialog-subhead-weight, 500)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] });
|
|
54
54
|
}
|
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: NgxMatEntityConfirmDialogComponent, decorators: [{
|
|
56
56
|
type: Component,
|
|
57
57
|
args: [{ selector: 'ngx-mat-entity-confirm-dialog', standalone: true, imports: [
|
|
58
58
|
CommonModule,
|
|
@@ -68,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
|
68
68
|
type: Inject,
|
|
69
69
|
args: [NGX_COMPLETE_GLOBAL_DEFAULT_VALUES]
|
|
70
70
|
}] }] });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy9jb25maXJtLWRpYWxvZy9jb25maXJtLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzFGLE9BQU8sRUFBRSx3QkFBd0IsRUFBNkIsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsa0NBQWtDLEVBQTBCLE1BQU0sbUNBQW1DLENBQUM7Ozs7OztBQUUvRzs7OztHQUlHO0FBY0gsTUFBTSxPQUFPLGtDQUFrQztJQWF0QjtJQUVBO0lBRUU7SUFmdkI7O09BRUc7SUFDSCxPQUFPLEdBQVksS0FBSyxDQUFDO0lBRXpCOztPQUVHO0lBQ0gsSUFBSSxDQUE2QjtJQUVqQyxZQUNxQixTQUEyRCxFQUUzRCxTQUE0QixFQUUxQixZQUFvQztRQUp0QyxjQUFTLEdBQVQsU0FBUyxDQUFrRDtRQUUzRCxjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQUUxQixpQkFBWSxHQUFaLFlBQVksQ0FBd0I7SUFDeEQsQ0FBQztJQUVKLFFBQVE7UUFDSixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDeEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQzt1R0FyQ1Esa0NBQWtDLDhDQWMvQixlQUFlLGFBRWYsa0NBQWtDOzJGQWhCckMsa0NBQWtDLHlGQzdCL0MsZ3RDQWlDcUIseWlCRFhiLFlBQVksOEJBQ1osZUFBZSx5YkFDZixXQUFXLDhWQUNYLGlCQUFpQixvWUFDakIsZUFBZTs7MkZBR1Ysa0NBQWtDO2tCQWI5QyxTQUFTOytCQUNJLCtCQUErQixjQUc3QixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsaUJBQWlCO3dCQUNqQixlQUFlO3FCQUNsQjs7MEJBZ0JJLE1BQU07MkJBQUMsZUFBZTs7MEJBRXRCLE1BQU07MkJBQUMsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dNb2R1bGUsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IENvbmZpcm1EaWFsb2dEYXRhIH0gZnJvbSAnLi9jb25maXJtLWRpYWxvZy1kYXRhJztcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dEYXRhQnVpbGRlciwgQ29uZmlybURpYWxvZ0RhdGFJbnRlcm5hbCB9IGZyb20gJy4vY29uZmlybS1kaWFsb2ctZGF0YS5idWlsZGVyJztcbmltcG9ydCB7IE5HWF9DT01QTEVURV9HTE9CQUxfREVGQVVMVF9WQUxVRVMsIE5neEdsb2JhbERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi8uLi9nbG9iYWwtY29uZmlndXJhdGlvbi12YWx1ZXMnO1xuXG4vKipcbiAqIFRoZSBEaWFsb2cgdXNlZCB3aGVuZXZlciBjb25maXJtYXRpb24gYnkgdGhlIHVzZXIgaXMgcmVxdWlyZWQgKGUuZy4gV2hlbiB0aGUgdXNlciB0cmllcyB0byBkZWxldGUgYW4gZW50aXR5KS5cbiAqXG4gKiBDYW4gYmUgY3VzdG9taXplZCB3aXRoIHRoZSBNQVRfRElBTE9HX0RBVEEgXCJpbnB1dERhdGFcIi4gQ3VzdG9taXphdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGluIFwiQ29uZmlybURpYWxvZ0RhdGFcIi5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3gtbWF0LWVudGl0eS1jb25maXJtLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jb25maXJtLWRpYWxvZy5jb21wb25lbnQuc2NzcycsICcuLi8uLi9zY3NzL2RpYWxvZy1zdHlsZXMuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIHVzZXIgbmVlZHMgdG8gdGljayBhIGNoZWNrYm94IHRvIGVuYWJsZSB0aGUgY29uZmlybSBidXR0b24uXG4gICAgICovXG4gICAgY29uZmlybTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBvZiB0aGUgZGlhbG9nLlxuICAgICAqL1xuICAgIGRhdGEhOiBDb25maXJtRGlhbG9nRGF0YUludGVybmFsO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Tmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudD4sXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGlucHV0RGF0YTogQ29uZmlybURpYWxvZ0RhdGEsXG4gICAgICAgIEBJbmplY3QoTkdYX0NPTVBMRVRFX0dMT0JBTF9ERUZBVUxUX1ZBTFVFUylcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGdsb2JhbENvbmZpZzogTmd4R2xvYmFsRGVmYXVsdFZhbHVlc1xuICAgICkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQ29uZmlybURpYWxvZ0RhdGFCdWlsZGVyKHRoaXMuZ2xvYmFsQ29uZmlnLCB0aGlzLmlucHV0RGF0YSkuZ2V0UmVzdWx0KCk7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmRpc2FibGVDbG9zZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBkaWFsb2cgd2l0aCB0cnVlIHRvIHNpZ25hbCB0aGF0IHRoZSBhY3Rpb24gc2hvdWxkIGJlIHJ1bi5cbiAgICAgKi9cbiAgICBjb25maXJtQWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGRpYWxvZy5cbiAgICAgKi9cbiAgICBjYW5jZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKTtcbiAgICB9XG59IiwiQGlmIChkYXRhLnRpdGxlKSB7XG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+e3tkYXRhLnRpdGxlfX08L2gyPlxufVxuXG48bWF0LWRpYWxvZy1jb250ZW50PlxuICAgIEBmb3IgKHBhcmFncmFwaCBvZiBkYXRhLnRleHQ7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8cD57e3BhcmFncmFwaH19PC9wPlxuICAgIH1cbiAgICBAaWYgKGRhdGEucmVxdWlyZUNvbmZpcm1hdGlvbikge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtd3JhcHBlclwiPlxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCBuYW1lPVwiY29uZmlybVwiIFsobmdNb2RlbCldPVwiY29uZmlybVwiPlxuICAgICAgICAgICAgICAgIHt7ZGF0YS5jb25maXJtYXRpb25UZXh0fX1cbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICBAaWYgKGRhdGEudHlwZSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJ3YXJuXCIgY2xhc3M9XCJjb25maXJtLWJ1dHRvblwiIFtkaXNhYmxlZF09XCJkYXRhLnJlcXVpcmVDb25maXJtYXRpb24gJiYgIWNvbmZpcm1cIiAoY2xpY2spPVwiY29uZmlybUFjdGlvbigpXCI+XG4gICAgICAgICAgICB7e2RhdGEuY29uZmlybUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoZGF0YS50eXBlICE9PSAnZGVsZXRlJykge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImNvbmZpcm0tYnV0dG9uXCIgW2Rpc2FibGVkXT1cImRhdGEucmVxdWlyZUNvbmZpcm1hdGlvbiAmJiAhY29uZmlybVwiIChjbGljayk9XCJjb25maXJtQWN0aW9uKClcIj5cbiAgICAgICAgICAgIHt7ZGF0YS5jb25maXJtQnV0dG9uTGFiZWx9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgQGlmIChkYXRhLnR5cGUgIT09ICdpbmZvLW9ubHknKSB7XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiIChjbGljayk9XCJjYW5jZWwoKVwiPlxuICAgICAgICAgICAge3tkYXRhLmNhbmNlbEJ1dHRvbkxhYmVsfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgfVxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+Il19
|