codefoxcore 0.0.5 → 0.0.7
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/esm2022/lib/providers.mjs +14 -1
- package/esm2022/lib/services/dialog.service.mjs +18 -4
- package/esm2022/lib/tokens/dialog.token.mjs +7 -2
- package/fesm2022/codefoxcore.mjs +34 -3
- package/fesm2022/codefoxcore.mjs.map +1 -1
- package/lib/providers.d.ts +3 -0
- package/lib/services/dialog.service.d.ts +3 -0
- package/lib/tokens/dialog.token.d.ts +2 -1
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { HTTP_INTERCEPTORS } from "@angular/common/http";
|
|
2
2
|
import { makeEnvironmentProviders } from "@angular/core";
|
|
3
3
|
import { TokenInterceptor } from "./interceptors/token.interceptor";
|
|
4
|
+
import { OPENED_DIALOG_BODY_CLASS, PREDEFINED_DIALOGS } from "./tokens";
|
|
4
5
|
export function provideTokenInterceptor() {
|
|
5
6
|
return makeEnvironmentProviders([{
|
|
6
7
|
provide: HTTP_INTERCEPTORS,
|
|
@@ -8,4 +9,16 @@ export function provideTokenInterceptor() {
|
|
|
8
9
|
multi: true
|
|
9
10
|
}]);
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
+
export function providePredefinedDialogs(predefinedDialogs) {
|
|
13
|
+
return makeEnvironmentProviders([{
|
|
14
|
+
provide: PREDEFINED_DIALOGS,
|
|
15
|
+
useValue: predefinedDialogs
|
|
16
|
+
}]);
|
|
17
|
+
}
|
|
18
|
+
export function provideOpenedDialogBodyClass(openedDialogBodyClass) {
|
|
19
|
+
return makeEnvironmentProviders([{
|
|
20
|
+
provide: OPENED_DIALOG_BODY_CLASS,
|
|
21
|
+
useValue: openedDialogBodyClass
|
|
22
|
+
}]);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29kZWZveGNvcmUvc3JjL2xpYi9wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUF3Qix3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHeEUsTUFBTSxVQUFVLHVCQUF1QjtJQUNuQyxPQUFPLHdCQUF3QixDQUFDLENBQUM7WUFDN0IsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLEtBQUssRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLGlCQUFvQztJQUN6RSxPQUFPLHdCQUF3QixDQUFDLENBQUM7WUFDN0IsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixRQUFRLEVBQUUsaUJBQWlCO1NBQzlCLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxxQkFBb0M7SUFDN0UsT0FBTyx3QkFBd0IsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sRUFBRSx3QkFBd0I7WUFDakMsUUFBUSxFQUFFLHFCQUFxQjtTQUNsQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIVFRQX0lOVEVSQ0VQVE9SUyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVG9rZW5JbnRlcmNlcHRvciB9IGZyb20gXCIuL2ludGVyY2VwdG9ycy90b2tlbi5pbnRlcmNlcHRvclwiO1xyXG5pbXBvcnQgeyBPUEVORURfRElBTE9HX0JPRFlfQ0xBU1MsIFBSRURFRklORURfRElBTE9HUyB9IGZyb20gXCIuL3Rva2Vuc1wiO1xyXG5pbXBvcnQgeyBQcmVkZWZpbmVkRGlhbG9ncyB9IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVG9rZW5JbnRlcmNlcHRvcigpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XHJcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFt7XHJcbiAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXHJcbiAgICAgICAgdXNlQ2xhc3M6IFRva2VuSW50ZXJjZXB0b3IsXHJcbiAgICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1dKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVQcmVkZWZpbmVkRGlhbG9ncyhwcmVkZWZpbmVkRGlhbG9nczogUHJlZGVmaW5lZERpYWxvZ3MpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XHJcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFt7XHJcbiAgICAgICAgcHJvdmlkZTogUFJFREVGSU5FRF9ESUFMT0dTLFxyXG4gICAgICAgIHVzZVZhbHVlOiBwcmVkZWZpbmVkRGlhbG9nc1xyXG4gICAgfV0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU9wZW5lZERpYWxvZ0JvZHlDbGFzcyhvcGVuZWREaWFsb2dCb2R5Q2xhc3M6IHN0cmluZyB8IG51bGwpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XHJcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFt7XHJcbiAgICAgICAgcHJvdmlkZTogT1BFTkVEX0RJQUxPR19CT0RZX0NMQVNTLFxyXG4gICAgICAgIHVzZVZhbHVlOiBvcGVuZWREaWFsb2dCb2R5Q2xhc3NcclxuICAgIH1dKTtcclxufVxyXG4iXX0=
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { isPlatformBrowser } from '@angular/common';
|
|
2
2
|
import { ApplicationRef, createComponent, inject, Injectable, Injector, PLATFORM_ID } from '@angular/core';
|
|
3
3
|
import { Title } from '@angular/platform-browser';
|
|
4
|
-
import { filter } from 'rxjs';
|
|
4
|
+
import { filter, Subject } from 'rxjs';
|
|
5
5
|
import { DialogConfig, DialogInjector, DialogRef } from '../classes';
|
|
6
|
-
import { ALERT_CONFIGURATIONS,
|
|
6
|
+
import { ALERT_CONFIGURATIONS, PREDEFINED_DIALOGS, CONFIRM_CONFIGURATIONS, OPENED_DIALOG_BODY_CLASS } from '../tokens';
|
|
7
7
|
import { MessageService } from '../services';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export class DialogService {
|
|
@@ -11,10 +11,12 @@ export class DialogService {
|
|
|
11
11
|
this.injector = inject(Injector);
|
|
12
12
|
this.predefinedConfirmConfigurations = inject(CONFIRM_CONFIGURATIONS);
|
|
13
13
|
this.predefinedAlertConfigurations = inject(ALERT_CONFIGURATIONS);
|
|
14
|
-
this.predefinedDialogs = inject(
|
|
14
|
+
this.predefinedDialogs = inject(PREDEFINED_DIALOGS);
|
|
15
|
+
this.openedDialogBodyClass = inject(OPENED_DIALOG_BODY_CLASS);
|
|
15
16
|
this.title = inject(Title);
|
|
16
17
|
this.messageService = inject(MessageService);
|
|
17
18
|
this.dialogs = new Map();
|
|
19
|
+
this.dialogCountChanged = new Subject();
|
|
18
20
|
this.openIndex = 1;
|
|
19
21
|
this.platformId = inject(PLATFORM_ID);
|
|
20
22
|
if (isPlatformBrowser(this.platformId)) {
|
|
@@ -37,6 +39,16 @@ export class DialogService {
|
|
|
37
39
|
}
|
|
38
40
|
});
|
|
39
41
|
}
|
|
42
|
+
this.dialogCountChanged.subscribe((size) => {
|
|
43
|
+
if (isPlatformBrowser(this.platformId) && this.openedDialogBodyClass !== null) {
|
|
44
|
+
if (size === 0) {
|
|
45
|
+
document.body.classList.remove(this.openedDialogBodyClass);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
document.body.classList.add(this.openedDialogBodyClass);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
40
52
|
}
|
|
41
53
|
async openPredefined(name, dialogConfiguration = {}) {
|
|
42
54
|
if (this.predefinedDialogs[name] === undefined) {
|
|
@@ -183,6 +195,7 @@ export class DialogService {
|
|
|
183
195
|
container: dialogContainer,
|
|
184
196
|
openIndex: this.openIndex
|
|
185
197
|
});
|
|
198
|
+
this.dialogCountChanged.next(this.dialogs.size);
|
|
186
199
|
this.openIndex++;
|
|
187
200
|
return dialogRef;
|
|
188
201
|
}
|
|
@@ -201,6 +214,7 @@ export class DialogService {
|
|
|
201
214
|
}
|
|
202
215
|
dialogComponentRefContainer.componentRef.destroy();
|
|
203
216
|
this.dialogs.delete(dialogRef);
|
|
217
|
+
this.dialogCountChanged.next(this.dialogs.size);
|
|
204
218
|
if (this.dialogs.size === 0) {
|
|
205
219
|
this.openIndex = 1;
|
|
206
220
|
}
|
|
@@ -321,4 +335,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
321
335
|
providedIn: 'root'
|
|
322
336
|
}]
|
|
323
337
|
}], ctorParameters: function () { return []; } });
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2RlZm94Y29yZS9zcmMvbGliL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxjQUFjLEVBRWQsZUFBZSxFQUVmLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUNSLFdBQVcsRUFFZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUs3QyxNQUFNLE9BQU8sYUFBYTtJQWN0QjtRQVpLLGFBQVEsR0FBYSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsb0NBQStCLEdBQTBDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hHLGtDQUE2QixHQUF3QyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNsRyxzQkFBaUIsR0FBc0IsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFN0UsVUFBSyxHQUFVLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixtQkFBYyxHQUFtQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFeEQsWUFBTyxHQUFnRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pFLGNBQVMsR0FBVyxDQUFD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Q0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQzsrR0E1WFcsYUFBYTttSEFBYixhQUFhLGNBRlYsTUFBTTs7NEZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgICBBcHBsaWNhdGlvblJlZixcclxuICAgIENvbXBvbmVudFJlZixcclxuICAgIGNyZWF0ZUNvbXBvbmVudCxcclxuICAgIEVtYmVkZGVkVmlld1JlZixcclxuICAgIGluamVjdCxcclxuICAgIEluamVjdGFibGUsXHJcbiAgICBJbmplY3RvcixcclxuICAgIFBMQVRGT1JNX0lELFxyXG4gICAgVHlwZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBbGVydENvbmZpZ3VyYXRpb24sIERpYWxvZ0NvbmZpZ3VyYXRpb24sIENvbmZpcm1Db25maWd1cmF0aW9uLCBMb2FkaW5nQ29uZmlndXJhdGlvbiwgTW9kYWxXaXRoQnV0dG9uc0NvbmZpZ3VyYXRpb24sIFByZWRlZmluZWREaWFsb2dzLCBEaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRGlhbG9nQ29uZmlnLCBEaWFsb2dJbmplY3RvciwgRGlhbG9nUmVmIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFMRVJUX0NPTkZJR1VSQVRJT05TLCBDRl9QUkVERUZJTkVEX0RJQUxPR1MsIENPTkZJUk1fQ09ORklHVVJBVElPTlMgfSBmcm9tICcuLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nU2VydmljZSB7XHJcblxyXG5cdHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcclxuXHRwcml2YXRlIHByZWRlZmluZWRDb25maXJtQ29uZmlndXJhdGlvbnM6IHtba2V5OiBzdHJpbmddOiBDb25maXJtQ29uZmlndXJhdGlvbn0gPSBpbmplY3QoQ09ORklSTV9DT05GSUdVUkFUSU9OUyk7XHJcblx0cHJpdmF0ZSBwcmVkZWZpbmVkQWxlcnRDb25maWd1cmF0aW9uczoge1trZXk6IHN0cmluZ106IEFsZXJ0Q29uZmlndXJhdGlvbn0gPSBpbmplY3QoQUxFUlRfQ09ORklHVVJBVElPTlMpO1xyXG5cdHByaXZhdGUgcHJlZGVmaW5lZERpYWxvZ3M6IFByZWRlZmluZWREaWFsb2dzID0gaW5qZWN0KENGX1BSRURFRklORURfRElBTE9HUyk7XHJcblxyXG5cdHRpdGxlOiBUaXRsZSA9IGluamVjdChUaXRsZSk7XHJcblx0bWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VTZXJ2aWNlKTtcclxuXHJcblx0ZGlhbG9nczogTWFwPERpYWxvZ1JlZiwgRGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyPiA9IG5ldyBNYXAoKTtcclxuXHRvcGVuSW5kZXg6IG51bWJlciA9IDE7XHJcblx0cGxhdGZvcm1JZDogT2JqZWN0ID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuXHRcdGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCAoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xyXG5cdFx0XHRcdGlmIChrZXlib2FyZEV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnZXNjYXBlJykge1xyXG5cdFx0XHRcdFx0bGV0IGxhc3RPcGVuSW5kZXg6IG51bWJlciA9IDA7XHJcblx0XHRcdFx0XHRsZXQgbGFzdE9wZW5lZERpYWxvZ1JlZjogRGlhbG9nUmVmIHwgbnVsbCA9IG51bGw7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IFtkaWFsb2dSZWYsIGNmRGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyXSBvZiB0aGlzLmRpYWxvZ3MuZW50cmllcygpKSB7XHJcblx0XHRcdFx0XHRcdGlmIChjZkRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lci5vcGVuSW5kZXggPiBsYXN0T3BlbkluZGV4KSB7XHJcblx0XHRcdFx0XHRcdFx0bGFzdE9wZW5JbmRleCA9IGNmRGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyLm9wZW5JbmRleDtcclxuXHRcdFx0XHRcdFx0XHRsYXN0T3BlbmVkRGlhbG9nUmVmID0gZGlhbG9nUmVmO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHJcblx0XHRcdFx0XHRpZiAobGFzdE9wZW5lZERpYWxvZ1JlZiAhPT0gbnVsbCAmJiBsYXN0T3BlbmVkRGlhbG9nUmVmLmRpYWxvZ0NvbmZpZyAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRpZiAobGFzdE9wZW5lZERpYWxvZ1JlZi5kaWFsb2dDb25maWcuaWdub3JlS2V5VXAgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcclxuXHRcdFx0XHRcdFx0bGFzdE9wZW5lZERpYWxvZ1JlZi5jbG9zZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuUHJlZGVmaW5lZDxUID0gYW55PihuYW1lOiBzdHJpbmcsIGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSk6IFByb21pc2U8RGlhbG9nUmVmPFQ+PiB7XHJcblx0XHRpZiAodGhpcy5wcmVkZWZpbmVkRGlhbG9nc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRocm93IEVycm9yKCdEaWFsb2cgd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgbm90IGZvdW5kIScpO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcHJlZGVmaW5lZERpYWxvZyA9IHRoaXMucHJlZGVmaW5lZERpYWxvZ3NbbmFtZV07XHJcblx0XHRpZiAodHlwZW9mIHByZWRlZmluZWREaWFsb2cgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMub3BlbkltcG9ydChwcmVkZWZpbmVkRGlhbG9nLCBkaWFsb2dDb25maWd1cmF0aW9uKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLm9wZW5JbXBvcnQocHJlZGVmaW5lZERpYWxvZy5jb21wb25lbnQsIHsuLi5wcmVkZWZpbmVkRGlhbG9nLmNvbmZpZ3VyYXRpb24sIC4uLmRpYWxvZ0NvbmZpZ3VyYXRpb259KTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIG9wZW5JbXBvcnQ8VCA9IGFueT4oY29tcG9uZW50OiAoKSA9PiBQcm9taXNlPFR5cGU8YW55Pj4sIGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSk6IFByb21pc2U8RGlhbG9nUmVmPFQ+PiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuXHRcdFx0cmVzb2x2ZSh0aGlzLm9wZW48VD4oYXdhaXQgY29tcG9uZW50KCksIGRpYWxvZ0NvbmZpZ3VyYXRpb24pKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcbiAgICBvcGVuPFQgPSBhbnk+KGNvbXBvbmVudDogVHlwZTxhbnk+LCBkaWFsb2dDb25maWd1cmF0aW9uOiBEaWFsb2dDb25maWd1cmF0aW9uID0ge30pOiBEaWFsb2dSZWY8VD4ge1xyXG5cclxuXHRcdGZvciAobGV0IGRpYWxvZyBvZiB0aGlzLmRpYWxvZ3MuZW50cmllcygpKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQoZGlhbG9nQ29uZmlndXJhdGlvbi5zaW5nbGUgJiYgZGlhbG9nWzFdLmNvbXBvbmVudFJlZi5jb21wb25lbnRUeXBlLm5hbWUgPT09IGNvbXBvbmVudC5uYW1lKSB8fFxyXG5cdFx0XHRcdChkaWFsb2dbMF0uZGlhbG9nQ29uZmlnICE9PSBudWxsICYmIGRpYWxvZ1swXS5kaWFsb2dDb25maWcuc2luZ2xlICYmIGRpYWxvZ1sxXS5jb21wb25lbnRSZWYuY29tcG9uZW50VHlwZS5uYW1lID09PSBjb21wb25lbnQubmFtZSlcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cmV0dXJuIGRpYWxvZ1swXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IERpYWxvZ0NvbmZpZyA9IHRoaXMuY3JlYXRlRGlhbG9nQ29uZmlnKGRpYWxvZ0NvbmZpZ3VyYXRpb24pO1xyXG5cclxuXHRcdGlmICghZGlhbG9nQ29uZmlnLmtlZXBBY3RpdmVFbGVtZW50KSB7XHJcblx0XHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuXHRcdFx0XHRkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IERpYWxvZ1JlZjxUPiA9IHRoaXMuYXBwZW5kVG9Cb2R5KGNvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcclxuXHRcdGRpYWxvZ1JlZi5tZXNzYWdlU2VydmljZSA9IHRoaXMubWVzc2FnZVNlcnZpY2U7XHJcblx0XHRkaWFsb2dSZWYuZGlhbG9nQ29uZmlnID0gZGlhbG9nQ29uZmlnO1xyXG5cclxuXHRcdHRoaXMuY2hhbmdlQW5kU3RvcmVUaXRsZShkaWFsb2dSZWYpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nUmVmO1xyXG4gICAgfVxyXG5cclxuXHRjaGFuZ2VBbmRTdG9yZVRpdGxlKGRpYWxvZ1JlZjogRGlhbG9nUmVmKTogdm9pZCB7XHJcblx0XHRkaWFsb2dSZWYuc2F2ZWRUaXRsZSA9IHRoaXMudGl0bGUuZ2V0VGl0bGUoKTtcclxuXHRcdGlmIChkaWFsb2dSZWYuZGlhbG9nQ29uZmlnICE9PSBudWxsICYmIGRpYWxvZ1JlZi5kaWFsb2dDb25maWcudGl0bGUgIT09IG51bGwpIHtcclxuXHRcdFx0dGhpcy50aXRsZS5zZXRUaXRsZShkaWFsb2dSZWYuZGlhbG9nQ29uZmlnLnRpdGxlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgY3JlYXRlRGlhbG9nQ29uZmlnKGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24pOiBEaWFsb2dDb25maWcge1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0gbmV3IERpYWxvZ0NvbmZpZygpO1xyXG4gICAgICAgIGlmIChkaWFsb2dDb25maWd1cmF0aW9uLnNob3dDbG9zZUljb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkaWFsb2dDb25maWcuc2hvd0Nsb3NlSWNvbiA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uc2hvd0Nsb3NlSWNvbjtcclxuICAgICAgICB9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5iZWZvcmVDbG9zZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5iZWZvcmVDbG9zZSA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uYmVmb3JlQ2xvc2U7XHJcbiAgICAgICAgfVxyXG5cdFx0aWYgKGRpYWxvZ0NvbmZpZ3VyYXRpb24uaWdub3JlS2V5VXAgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkaWFsb2dDb25maWcuaWdub3JlS2V5VXAgPSBkaWFsb2dDb25maWd1cmF0aW9uLmlnbm9yZUtleVVwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5kYXRhICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEgPSBkaWFsb2dDb25maWd1cmF0aW9uLmRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaWFsb2dDb25maWd1cmF0aW9uLm5vUGFkZGluZyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5ub1BhZGRpbmcgPSBkaWFsb2dDb25maWd1cmF0aW9uLm5vUGFkZGluZztcclxuICAgICAgICB9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5rZWVwQWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy5rZWVwQWN0aXZlRWxlbWVudCA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24ua2VlcEFjdGl2ZUVsZW1lbnQ7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5jb250YWluZXJDbGFzc2VzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLmNvbnRhaW5lckNsYXNzZXMgPSBkaWFsb2dDb25maWd1cmF0aW9uLmNvbnRhaW5lckNsYXNzZXM7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5kaWFsb2dDbGFzc2VzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLmRpYWxvZ0NsYXNzZXMgPSBkaWFsb2dDb25maWd1cmF0aW9uLmRpYWxvZ0NsYXNzZXM7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi50aXRsZSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy50aXRsZSA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24udGl0bGU7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5jb250ZW50RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy5jb250ZW50RWxlbWVudCA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uY29udGVudEVsZW1lbnQ7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5zaW5nbGUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRkaWFsb2dDb25maWcuc2luZ2xlID0gZGlhbG9nQ29uZmlndXJhdGlvbi5zaW5nbGU7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy53aWR0aCA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24ud2lkdGg7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRkaWFsb2dDb25maWcuaGVpZ2h0ID0gZGlhbG9nQ29uZmlndXJhdGlvbi5oZWlnaHQ7XHJcblx0XHR9XHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZ0NvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBhcHBlbmRUb0JvZHkoY29tcG9uZW50OiBUeXBlPGFueT4sIGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnKTogRGlhbG9nUmVmIHtcclxuXHJcblx0XHRjb25zdCBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmID0gdGhpcy5pbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpO1xyXG5cclxuICAgICAgICAvLyBDUkVBVEUgSU5KRUNUSU9OIFRPS0VOU1xyXG4gICAgICAgIGNvbnN0IHRva2VuczogV2Vha01hcDxhbnksIGFueT4gPSBuZXcgV2Vha01hcCgpO1xyXG5cclxuICAgICAgICAvLyBDUkVBVEUgRElBTE9HIENPTkZJR1VSQVRJT04gQ0xBU1NcclxuICAgICAgICB0b2tlbnMuc2V0KERpYWxvZ0NvbmZpZywgZGlhbG9nQ29uZmlnKTtcclxuXHJcbiAgICAgICAgLy8gQ1JFQVRFIERJQUxPRyBSRUZFUkVOQ0UgQ0xBU1NcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IERpYWxvZ1JlZiA9IG5ldyBEaWFsb2dSZWYoKTtcclxuICAgICAgICB0b2tlbnMuc2V0KERpYWxvZ1JlZiwgZGlhbG9nUmVmKTtcclxuXHJcbiAgICAgICAgLy8gTElTVEVOIE9OIERJQUxPRyBDTE9TRVxyXG4gICAgICAgIGNvbnN0IGNsb3NlU3ViOiBTdWJzY3JpcHRpb24gPSBkaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZyb21Cb2R5KGRpYWxvZ1JlZik7XHJcbiAgICAgICAgICAgIGNsb3NlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIENSRUFURSBDT01QT05FTlQgUkVGXHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiA9IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcclxuXHRcdFx0ZW52aXJvbm1lbnRJbmplY3RvcjogYXBwUmVmLmluamVjdG9yLFxyXG5cdFx0XHRlbGVtZW50SW5qZWN0b3I6IG5ldyBEaWFsb2dJbmplY3Rvcih0aGlzLmluamVjdG9yLCB0b2tlbnMpXHJcblx0XHR9KTtcclxuXHJcbiAgICAgICAgLy8gQVRUQUNIIFZJRVcgVE8gQU5HVUxBUlxyXG4gICAgICAgIGFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XHJcblxyXG4gICAgICAgIC8vIENSRUFURSBESUFMT0cgQ09OVEFJTkVSIEVMRU1FTlRcclxuICAgICAgICBjb25zdCBkaWFsb2dDb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgZGlhbG9nQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2NmLWRpYWxvZy1jb250YWluZXInKTtcclxuXHRcdGlmIChkaWFsb2dDb25maWcuY29udGFpbmVyQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGRpYWxvZ0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKC4uLmRpYWxvZ0NvbmZpZy5jb250YWluZXJDbGFzc2VzKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBUFBFTkQgRE9NIEVMRU1FTlQgVE8gRElBTE9HXHJcblx0XHRjb25zdCBjaGlsZERvbUVsZW0gPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcblx0XHRjaGlsZERvbUVsZW0uY2xhc3NMaXN0LmFkZCgnY2YtZGlhbG9nJyk7XHJcblx0XHRcclxuXHRcdGlmIChkaWFsb2dDb25maWcud2lkdGggIT09IG51bGwpIHtcclxuXHRcdFx0Y2hpbGREb21FbGVtLnN0eWxlLndpZHRoID0gZGlhbG9nQ29uZmlnLndpZHRoO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGRpYWxvZ0NvbmZpZy5oZWlnaHQgIT09IG51bGwpIHtcclxuXHRcdFx0Y2hpbGREb21FbGVtLnN0eWxlLmhlaWdodCA9IGRpYWxvZ0NvbmZpZy5oZWlnaHQ7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlnLm5vUGFkZGluZykge1xyXG4gICAgICAgICAgICBjaGlsZERvbUVsZW0uY2xhc3NMaXN0LmFkZCgnbm8tcGFkZGluZycpO1xyXG4gICAgICAgIH1cclxuXHRcdGlmIChkaWFsb2dDb25maWcuZGlhbG9nQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGNoaWxkRG9tRWxlbS5jbGFzc0xpc3QuYWRkKC4uLmRpYWxvZ0NvbmZpZy5kaWFsb2dDbGFzc2VzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZGlhbG9nQ29uZmlnLmNvbnRlbnRFbGVtZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdGNoaWxkRG9tRWxlbS5hcHBlbmRDaGlsZChkaWFsb2dDb25maWcuY29udGVudEVsZW1lbnQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRpYWxvZ0NvbnRhaW5lci5hcHBlbmRDaGlsZChjaGlsZERvbUVsZW0pO1xyXG5cclxuICAgICAgICAvLyBDTE9TRUFCTEU/IEFQUEVORCBCVVRUT05cclxuICAgICAgICBpZiAoZGlhbG9nQ29uZmlnLnNob3dDbG9zZUljb24pIHtcclxuICAgICAgICAgICAgY29uc3QgY2xvc2VFbGVtZW50OiBIVE1MRGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICBjbG9zZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5bJ2NmLWRpYWxvZy1jbG9zZScsICdyZW1peGljb24nLCAnY2xvc2UtbGluZSddKTtcclxuICAgICAgICAgICAgY2xvc2VFbGVtZW50Lm9uY2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY2hpbGREb21FbGVtLmFwcGVuZENoaWxkKGNsb3NlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBUFBFTkQgRElBTE9HIENPTlRBSU5FUiBUTyBCT0RZXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaWFsb2dDb250YWluZXIpO1xyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ3Muc2V0KGRpYWxvZ1JlZiwge1xyXG4gICAgICAgICAgICBjb21wb25lbnRSZWYsXHJcbiAgICAgICAgICAgIGNvbnRhaW5lcjogZGlhbG9nQ29udGFpbmVyLFxyXG5cdFx0XHRvcGVuSW5kZXg6IHRoaXMub3BlbkluZGV4IFxyXG4gICAgICAgIH0pO1xyXG5cclxuXHRcdHRoaXMub3BlbkluZGV4Kys7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRnJvbUJvZHkoZGlhbG9nUmVmOiBEaWFsb2dSZWYpOiB2b2lkIHtcclxuXHJcblx0XHRjb25zdCBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmID0gdGhpcy5pbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpO1xyXG5cclxuICAgICAgICBpZiAoIWRpYWxvZ1JlZiB8fCAhdGhpcy5kaWFsb2dzLmhhcyhkaWFsb2dSZWYpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyOiBEaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIgfCB1bmRlZmluZWQgPSB0aGlzLmRpYWxvZ3MuZ2V0KGRpYWxvZ1JlZik7XHJcbiAgICAgICAgaWYgKGRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lciA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHRcdFxyXG4gICAgICAgIGFwcFJlZi5kZXRhY2hWaWV3KGRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lci5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG5cclxuICAgICAgICBpZiAoZGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyLmNvbnRhaW5lciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIuY29udGFpbmVyLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ3MuZGVsZXRlKGRpYWxvZ1JlZik7XHJcblxyXG5cdFx0aWYgKHRoaXMuZGlhbG9ncy5zaXplID09PSAwKSB7XHJcblx0XHRcdHRoaXMub3BlbkluZGV4ID0gMTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZXN0b3JlIHRpdGxlXHJcblx0XHRpZiAodGhpcy5kaWFsb2dzLnNpemUgPT09IDApIHtcclxuXHRcdFx0dGhpcy50aXRsZS5zZXRUaXRsZShkaWFsb2dSZWYuc2F2ZWRUaXRsZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgbGF0ZXN0T3BlbmVkRGlhbG9nUmVmOiBEaWFsb2dSZWYgfCBudWxsID0gbnVsbDtcclxuXHRcdFx0dGhpcy5kaWFsb2dzLmZvckVhY2goKF8sIGRpYWxvZ1JlZjogRGlhbG9nUmVmKSA9PiB7XHJcblx0XHRcdFx0aWYgKGxhdGVzdE9wZW5lZERpYWxvZ1JlZiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0bGF0ZXN0T3BlbmVkRGlhbG9nUmVmID0gZGlhbG9nUmVmO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAobGF0ZXN0T3BlbmVkRGlhbG9nUmVmLm9wZW5lZCA8IGRpYWxvZ1JlZi5vcGVuZWQpIHtcclxuXHRcdFx0XHRcdFx0bGF0ZXN0T3BlbmVkRGlhbG9nUmVmID0gZGlhbG9nUmVmO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGlmIChsYXRlc3RPcGVuZWREaWFsb2dSZWYgIT09IG51bGwpIHtcclxuXHRcdFx0XHQvL3RoaXMudGl0bGUuc2V0VGl0bGUobGF0ZXN0T3BlbmVkRGlhbG9nUmVmLnNhdmVkVGl0bGUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMudGl0bGUuc2V0VGl0bGUoZGlhbG9nUmVmLnNhdmVkVGl0bGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcbiAgICB9XHJcblxyXG5cdGNvbmZpcm0oXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24gPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdGNvbnN0IHByZWRlZmluZWRDb25maXJtQ29uZmlndXJhdGlvbjogQ29uZmlybUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSB0aGlzLnByZWRlZmluZWRDb25maXJtQ29uZmlndXJhdGlvbnNbY29uZmlndXJhdGlvbl07XHJcblx0XHRcdGlmIChwcmVkZWZpbmVkQ29uZmlybUNvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJlZGVmaW5lZCBjb25maXJtIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kIGZvcjogJyArIGNvbmZpZ3VyYXRpb24pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbmZpZ3VyYXRpb24gPSBwcmVkZWZpbmVkQ29uZmlybUNvbmZpZ3VyYXRpb247XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHR0aGlzLm9wZW4oY29tcG9uZW50LCB7XHJcblx0XHRcdFx0Li4uZGlhbG9nQ29uZmlndXJhdGlvbixcclxuXHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRjb25maWd1cmF0aW9uXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRpZ25vcmVLZXlVcDogdHJ1ZSxcclxuXHRcdFx0XHRzaG93Q2xvc2VJY29uOiBmYWxzZVxyXG5cdFx0XHR9KS5vbkNsb3NlLnBpcGUoZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpKS5zdWJzY3JpYmUoKGFjY2VwdGVkOiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0aWYgKGFjY2VwdGVkKSB7XHJcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZWplY3QodHJ1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcbiAgICBhc3luYyBjb25maXJtQXN5bmMoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybShjb25maWd1cmF0aW9uLCBkaWFsb2dDb25maWd1cmF0aW9uLCBjb21wb25lbnQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cdFxyXG5cdGNvbmZpcm1BY2NlcHQoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuXHRcdFx0dGhpcy5jb25maXJtKGNvbmZpZ3VyYXRpb24sIGRpYWxvZ0NvbmZpZ3VyYXRpb24sIGNvbXBvbmVudCkudGhlbigoKSA9PiByZXNvbHZlKHRydWUpKS5jYXRjaCgoKSA9PiB7fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0XHJcblx0Y29uZmlybURlY2xpbmUoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuXHRcdFx0dGhpcy5jb25maXJtKGNvbmZpZ3VyYXRpb24sIGRpYWxvZ0NvbmZpZ3VyYXRpb24sIGNvbXBvbmVudCkudGhlbigoKSA9PiB7fSkuY2F0Y2goKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHNob3dMb2FkaW5nKFxyXG5cdFx0Y29uZmlndXJhdGlvbjogTG9hZGluZ0NvbmZpZ3VyYXRpb24sXHJcblx0XHRkaWFsb2dDb25maWd1cmF0aW9uOiBEaWFsb2dDb25maWd1cmF0aW9uID0ge30sXHJcblx0XHRjb21wb25lbnQ6IFR5cGU8YW55PlxyXG5cdCk6IERpYWxvZ1JlZiB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHQuLi5kaWFsb2dDb25maWd1cmF0aW9uLFxyXG5cdFx0XHRzaG93Q2xvc2VJY29uOiBmYWxzZSxcclxuXHRcdFx0aWdub3JlS2V5VXA6IHRydWUsXHJcblx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRjb25maWd1cmF0aW9uXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0c2hvd0FsZXJ0KFxyXG5cdFx0Y29uZmlndXJhdGlvbjogQWxlcnRDb25maWd1cmF0aW9uIHwgc3RyaW5nLFxyXG5cdFx0ZGlhbG9nQ29uZmlndXJhdGlvbjogRGlhbG9nQ29uZmlndXJhdGlvbiA9IHt9LFxyXG5cdFx0Y29tcG9uZW50OiBUeXBlPGFueT5cclxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGlmICh0eXBlb2YgY29uZmlndXJhdGlvbiA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0Y29uc3QgcHJlZGVmaW5lZEFsZXJ0Q29uZmlndXJhdGlvbjogQWxlcnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gdGhpcy5wcmVkZWZpbmVkQWxlcnRDb25maWd1cmF0aW9uc1tjb25maWd1cmF0aW9uXTtcclxuXHRcdFx0aWYgKHByZWRlZmluZWRBbGVydENvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJlZGVmaW5lZCBhbGVydCBjb25maWd1cmF0aW9uIG5vdCBmb3VuZCBmb3I6ICcgKyBjb25maWd1cmF0aW9uKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25maWd1cmF0aW9uID0gcHJlZGVmaW5lZEFsZXJ0Q29uZmlndXJhdGlvbjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHRcdC4uLmRpYWxvZ0NvbmZpZ3VyYXRpb24sXHJcblx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0Y29uZmlndXJhdGlvblxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0aWdub3JlS2V5VXA6IHRydWUsXHJcblx0XHRcdFx0c2hvd0Nsb3NlSWNvbjogZmFsc2VcclxuXHRcdFx0fSkub25DbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHNob3dNb2RhbFdpdGhCdXR0b25zKFxyXG5cdFx0Y29uZmlndXJhdGlvbjogTW9kYWxXaXRoQnV0dG9uc0NvbmZpZ3VyYXRpb24sXHJcblx0XHRkaWFsb2dDb25maWd1cmF0aW9uOiBEaWFsb2dDb25maWd1cmF0aW9uID0ge30sXHJcblx0XHRjb21wb25lbnQ6IFR5cGU8YW55PlxyXG5cdCk6IERpYWxvZ1JlZiB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHQuLi5kaWFsb2dDb25maWd1cmF0aW9uLFxyXG5cdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0Y29uZmlndXJhdGlvblxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2RlZm94Y29yZS9zcmMvbGliL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxjQUFjLEVBRWQsZUFBZSxFQUVmLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUNSLFdBQVcsRUFFZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdkgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFLN0MsTUFBTSxPQUFPLGFBQWE7SUFnQnRCO1FBZEssYUFBUSxHQUFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxvQ0FBK0IsR0FBMEMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDeEcsa0NBQTZCLEdBQXdDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2xHLHNCQUFpQixHQUFzQixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRSwwQkFBcUIsR0FBa0IsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFaEYsVUFBSyxHQUFVLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixtQkFBYyxHQUFtQixNQUFNLENBQUMsY0FB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QW1DLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2SCxJQUFJLDRCQUE0QixLQUFLLFNBQVMsRUFBRTtnQkFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsR0FBRyxhQUFhLENBQUMsQ0FBQzthQUNsRjtZQUNELGFBQWEsR0FBRyw0QkFBNEIsQ0FBQztTQUM3QztRQUNELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUMzQixHQUFHLG1CQUFtQjtnQkFDdEIsSUFBSSxFQUFFO29CQUNMLGFBQWE7aUJBQ2I7Z0JBQ0QsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGFBQWEsRUFBRSxLQUFLO2FBQ3BCLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDekIsT0FBTyxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUNuQixhQUE0QyxFQUM1QyxzQkFBMkMsRUFBRSxFQUM3QyxTQUFvQjtRQUVwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNCLEdBQUcsbUJBQW1CO1lBQ3RCLElBQUksRUFBRTtnQkFDTCxhQUFhO2FBQ2I7U0FDRCxDQUFDLENBQUM7SUFDSixDQUFDOytHQXpZVyxhQUFhO21IQUFiLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICAgIEFwcGxpY2F0aW9uUmVmLFxyXG4gICAgQ29tcG9uZW50UmVmLFxyXG4gICAgY3JlYXRlQ29tcG9uZW50LFxyXG4gICAgRW1iZWRkZWRWaWV3UmVmLFxyXG4gICAgaW5qZWN0LFxyXG4gICAgSW5qZWN0YWJsZSxcclxuICAgIEluamVjdG9yLFxyXG4gICAgUExBVEZPUk1fSUQsXHJcbiAgICBUeXBlXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IGZpbHRlciwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFsZXJ0Q29uZmlndXJhdGlvbiwgRGlhbG9nQ29uZmlndXJhdGlvbiwgQ29uZmlybUNvbmZpZ3VyYXRpb24sIExvYWRpbmdDb25maWd1cmF0aW9uLCBNb2RhbFdpdGhCdXR0b25zQ29uZmlndXJhdGlvbiwgUHJlZGVmaW5lZERpYWxvZ3MsIERpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBEaWFsb2dDb25maWcsIERpYWxvZ0luamVjdG9yLCBEaWFsb2dSZWYgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQUxFUlRfQ09ORklHVVJBVElPTlMsIFBSRURFRklORURfRElBTE9HUywgQ09ORklSTV9DT05GSUdVUkFUSU9OUywgT1BFTkVEX0RJQUxPR19CT0RZX0NMQVNTIH0gZnJvbSAnLi4vdG9rZW5zJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2Uge1xyXG5cclxuXHRwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XHJcblx0cHJpdmF0ZSBwcmVkZWZpbmVkQ29uZmlybUNvbmZpZ3VyYXRpb25zOiB7W2tleTogc3RyaW5nXTogQ29uZmlybUNvbmZpZ3VyYXRpb259ID0gaW5qZWN0KENPTkZJUk1fQ09ORklHVVJBVElPTlMpO1xyXG5cdHByaXZhdGUgcHJlZGVmaW5lZEFsZXJ0Q29uZmlndXJhdGlvbnM6IHtba2V5OiBzdHJpbmddOiBBbGVydENvbmZpZ3VyYXRpb259ID0gaW5qZWN0KEFMRVJUX0NPTkZJR1VSQVRJT05TKTtcclxuXHRwcml2YXRlIHByZWRlZmluZWREaWFsb2dzOiBQcmVkZWZpbmVkRGlhbG9ncyA9IGluamVjdChQUkVERUZJTkVEX0RJQUxPR1MpO1xyXG5cdHByaXZhdGUgb3BlbmVkRGlhbG9nQm9keUNsYXNzOiBzdHJpbmcgfCBudWxsID0gaW5qZWN0KE9QRU5FRF9ESUFMT0dfQk9EWV9DTEFTUyk7XHJcblxyXG5cdHRpdGxlOiBUaXRsZSA9IGluamVjdChUaXRsZSk7XHJcblx0bWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VTZXJ2aWNlKTtcclxuXHJcblx0ZGlhbG9nczogTWFwPERpYWxvZ1JlZiwgRGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyPiA9IG5ldyBNYXAoKTtcclxuXHRkaWFsb2dDb3VudENoYW5nZWQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KCk7XHJcblx0b3BlbkluZGV4OiBudW1iZXIgPSAxO1xyXG5cdHBsYXRmb3JtSWQ6IE9iamVjdCA9IGluamVjdChQTEFURk9STV9JRCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcblx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuXHRcdFx0XHRpZiAoa2V5Ym9hcmRFdmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2VzY2FwZScpIHtcclxuXHRcdFx0XHRcdGxldCBsYXN0T3BlbkluZGV4OiBudW1iZXIgPSAwO1xyXG5cdFx0XHRcdFx0bGV0IGxhc3RPcGVuZWREaWFsb2dSZWY6IERpYWxvZ1JlZiB8IG51bGwgPSBudWxsO1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBbZGlhbG9nUmVmLCBjZkRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lcl0gb2YgdGhpcy5kaWFsb2dzLmVudHJpZXMoKSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoY2ZEaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIub3BlbkluZGV4ID4gbGFzdE9wZW5JbmRleCkge1xyXG5cdFx0XHRcdFx0XHRcdGxhc3RPcGVuSW5kZXggPSBjZkRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lci5vcGVuSW5kZXg7XHJcblx0XHRcdFx0XHRcdFx0bGFzdE9wZW5lZERpYWxvZ1JlZiA9IGRpYWxvZ1JlZjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFxyXG5cdFx0XHRcdFx0aWYgKGxhc3RPcGVuZWREaWFsb2dSZWYgIT09IG51bGwgJiYgbGFzdE9wZW5lZERpYWxvZ1JlZi5kaWFsb2dDb25maWcgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGxhc3RPcGVuZWREaWFsb2dSZWYuZGlhbG9nQ29uZmlnLmlnbm9yZUtleVVwIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHJcblx0XHRcdFx0XHRcdGxhc3RPcGVuZWREaWFsb2dSZWYuY2xvc2UoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5kaWFsb2dDb3VudENoYW5nZWQuc3Vic2NyaWJlKChzaXplOiBudW1iZXIpID0+IHtcclxuXHRcdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgJiYgdGhpcy5vcGVuZWREaWFsb2dCb2R5Q2xhc3MgIT09IG51bGwpIHtcclxuXHRcdFx0XHRpZiAoc2l6ZSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3BlbmVkRGlhbG9nQm9keUNsYXNzKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKHRoaXMub3BlbmVkRGlhbG9nQm9keUNsYXNzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0gXHJcblxyXG5cdGFzeW5jIG9wZW5QcmVkZWZpbmVkPFQgPSBhbnk+KG5hbWU6IHN0cmluZywgZGlhbG9nQ29uZmlndXJhdGlvbjogRGlhbG9nQ29uZmlndXJhdGlvbiA9IHt9KTogUHJvbWlzZTxEaWFsb2dSZWY8VD4+IHtcclxuXHRcdGlmICh0aGlzLnByZWRlZmluZWREaWFsb2dzW25hbWVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhyb3cgRXJyb3IoJ0RpYWxvZyB3aXRoIG5hbWUgXCInICsgbmFtZSArICdcIiBub3QgZm91bmQhJyk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBwcmVkZWZpbmVkRGlhbG9nID0gdGhpcy5wcmVkZWZpbmVkRGlhbG9nc1tuYW1lXTtcclxuXHRcdGlmICh0eXBlb2YgcHJlZGVmaW5lZERpYWxvZyA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5vcGVuSW1wb3J0KHByZWRlZmluZWREaWFsb2csIGRpYWxvZ0NvbmZpZ3VyYXRpb24pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMub3BlbkltcG9ydChwcmVkZWZpbmVkRGlhbG9nLmNvbXBvbmVudCwgey4uLnByZWRlZmluZWREaWFsb2cuY29uZmlndXJhdGlvbiwgLi4uZGlhbG9nQ29uZmlndXJhdGlvbn0pO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgb3BlbkltcG9ydDxUID0gYW55Pihjb21wb25lbnQ6ICgpID0+IFByb21pc2U8VHlwZTxhbnk+PiwgZGlhbG9nQ29uZmlndXJhdGlvbjogRGlhbG9nQ29uZmlndXJhdGlvbiA9IHt9KTogUHJvbWlzZTxEaWFsb2dSZWY8VD4+IHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG5cdFx0XHRyZXNvbHZlKHRoaXMub3BlbjxUPihhd2FpdCBjb21wb25lbnQoKSwgZGlhbG9nQ29uZmlndXJhdGlvbikpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuICAgIG9wZW48VCA9IGFueT4oY29tcG9uZW50OiBUeXBlPGFueT4sIGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSk6IERpYWxvZ1JlZjxUPiB7XHJcblxyXG5cdFx0Zm9yIChsZXQgZGlhbG9nIG9mIHRoaXMuZGlhbG9ncy5lbnRyaWVzKCkpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdChkaWFsb2dDb25maWd1cmF0aW9uLnNpbmdsZSAmJiBkaWFsb2dbMV0uY29tcG9uZW50UmVmLmNvbXBvbmVudFR5cGUubmFtZSA9PT0gY29tcG9uZW50Lm5hbWUpIHx8XHJcblx0XHRcdFx0KGRpYWxvZ1swXS5kaWFsb2dDb25maWcgIT09IG51bGwgJiYgZGlhbG9nWzBdLmRpYWxvZ0NvbmZpZy5zaW5nbGUgJiYgZGlhbG9nWzFdLmNvbXBvbmVudFJlZi5jb21wb25lbnRUeXBlLm5hbWUgPT09IGNvbXBvbmVudC5uYW1lKVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRyZXR1cm4gZGlhbG9nWzBdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0gdGhpcy5jcmVhdGVEaWFsb2dDb25maWcoZGlhbG9nQ29uZmlndXJhdGlvbik7XHJcblxyXG5cdFx0aWYgKCFkaWFsb2dDb25maWcua2VlcEFjdGl2ZUVsZW1lbnQpIHtcclxuXHRcdFx0aWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG5cdFx0XHRcdGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogRGlhbG9nUmVmPFQ+ID0gdGhpcy5hcHBlbmRUb0JvZHkoY29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xyXG5cdFx0ZGlhbG9nUmVmLm1lc3NhZ2VTZXJ2aWNlID0gdGhpcy5tZXNzYWdlU2VydmljZTtcclxuXHRcdGRpYWxvZ1JlZi5kaWFsb2dDb25maWcgPSBkaWFsb2dDb25maWc7XHJcblxyXG5cdFx0dGhpcy5jaGFuZ2VBbmRTdG9yZVRpdGxlKGRpYWxvZ1JlZik7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgICB9XHJcblxyXG5cdGNoYW5nZUFuZFN0b3JlVGl0bGUoZGlhbG9nUmVmOiBEaWFsb2dSZWYpOiB2b2lkIHtcclxuXHRcdGRpYWxvZ1JlZi5zYXZlZFRpdGxlID0gdGhpcy50aXRsZS5nZXRUaXRsZSgpO1xyXG5cdFx0aWYgKGRpYWxvZ1JlZi5kaWFsb2dDb25maWcgIT09IG51bGwgJiYgZGlhbG9nUmVmLmRpYWxvZ0NvbmZpZy50aXRsZSAhPT0gbnVsbCkge1xyXG5cdFx0XHR0aGlzLnRpdGxlLnNldFRpdGxlKGRpYWxvZ1JlZi5kaWFsb2dDb25maWcudGl0bGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbiAgICBjcmVhdGVEaWFsb2dDb25maWcoZGlhbG9nQ29uZmlndXJhdGlvbjogRGlhbG9nQ29uZmlndXJhdGlvbik6IERpYWxvZ0NvbmZpZyB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcgPSBuZXcgRGlhbG9nQ29uZmlnKCk7XHJcbiAgICAgICAgaWYgKGRpYWxvZ0NvbmZpZ3VyYXRpb24uc2hvd0Nsb3NlSWNvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5zaG93Q2xvc2VJY29uID0gZGlhbG9nQ29uZmlndXJhdGlvbi5zaG93Q2xvc2VJY29uO1xyXG4gICAgICAgIH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmJlZm9yZUNsb3NlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmJlZm9yZUNsb3NlID0gZGlhbG9nQ29uZmlndXJhdGlvbi5iZWZvcmVDbG9zZTtcclxuICAgICAgICB9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5pZ25vcmVLZXlVcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5pZ25vcmVLZXlVcCA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uaWdub3JlS2V5VXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YSA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRpYWxvZ0NvbmZpZ3VyYXRpb24ubm9QYWRkaW5nICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLm5vUGFkZGluZyA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24ubm9QYWRkaW5nO1xyXG4gICAgICAgIH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmtlZXBBY3RpdmVFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLmtlZXBBY3RpdmVFbGVtZW50ID0gZGlhbG9nQ29uZmlndXJhdGlvbi5rZWVwQWN0aXZlRWxlbWVudDtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmNvbnRhaW5lckNsYXNzZXMgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRkaWFsb2dDb25maWcuY29udGFpbmVyQ2xhc3NlcyA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uY29udGFpbmVyQ2xhc3NlcztcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmRpYWxvZ0NsYXNzZXMgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRkaWFsb2dDb25maWcuZGlhbG9nQ2xhc3NlcyA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uZGlhbG9nQ2xhc3NlcztcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLnRpdGxlID0gZGlhbG9nQ29uZmlndXJhdGlvbi50aXRsZTtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmNvbnRlbnRFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLmNvbnRlbnRFbGVtZW50ID0gZGlhbG9nQ29uZmlndXJhdGlvbi5jb250ZW50RWxlbWVudDtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLnNpbmdsZSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy5zaW5nbGUgPSBkaWFsb2dDb25maWd1cmF0aW9uLnNpbmdsZTtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLndpZHRoICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLndpZHRoID0gZGlhbG9nQ29uZmlndXJhdGlvbi53aWR0aDtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy5oZWlnaHQgPSBkaWFsb2dDb25maWd1cmF0aW9uLmhlaWdodDtcclxuXHRcdH1cclxuICAgICAgICByZXR1cm4gZGlhbG9nQ29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGVuZFRvQm9keShjb21wb25lbnQ6IFR5cGU8YW55PiwgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcpOiBEaWFsb2dSZWYge1xyXG5cclxuXHRcdGNvbnN0IGFwcFJlZjogQXBwbGljYXRpb25SZWYgPSB0aGlzLmluamVjdG9yLmdldChBcHBsaWNhdGlvblJlZik7XHJcblxyXG4gICAgICAgIC8vIENSRUFURSBJTkpFQ1RJT04gVE9LRU5TXHJcbiAgICAgICAgY29uc3QgdG9rZW5zOiBXZWFrTWFwPGFueSwgYW55PiA9IG5ldyBXZWFrTWFwKCk7XHJcblxyXG4gICAgICAgIC8vIENSRUFURSBESUFMT0cgQ09ORklHVVJBVElPTiBDTEFTU1xyXG4gICAgICAgIHRva2Vucy5zZXQoRGlhbG9nQ29uZmlnLCBkaWFsb2dDb25maWcpO1xyXG5cclxuICAgICAgICAvLyBDUkVBVEUgRElBTE9HIFJFRkVSRU5DRSBDTEFTU1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogRGlhbG9nUmVmID0gbmV3IERpYWxvZ1JlZigpO1xyXG4gICAgICAgIHRva2Vucy5zZXQoRGlhbG9nUmVmLCBkaWFsb2dSZWYpO1xyXG5cclxuICAgICAgICAvLyBMSVNURU4gT04gRElBTE9HIENMT1NFXHJcbiAgICAgICAgY29uc3QgY2xvc2VTdWI6IFN1YnNjcmlwdGlvbiA9IGRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbUJvZHkoZGlhbG9nUmVmKTtcclxuICAgICAgICAgICAgY2xvc2VTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQ1JFQVRFIENPTVBPTkVOVCBSRUZcclxuICAgICAgICBjb25zdCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+ID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xyXG5cdFx0XHRlbnZpcm9ubWVudEluamVjdG9yOiBhcHBSZWYuaW5qZWN0b3IsXHJcblx0XHRcdGVsZW1lbnRJbmplY3RvcjogbmV3IERpYWxvZ0luamVjdG9yKHRoaXMuaW5qZWN0b3IsIHRva2VucylcclxuXHRcdH0pO1xyXG5cclxuICAgICAgICAvLyBBVFRBQ0ggVklFVyBUTyBBTkdVTEFSXHJcbiAgICAgICAgYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuXHJcbiAgICAgICAgLy8gQ1JFQVRFIERJQUxPRyBDT05UQUlORVIgRUxFTUVOVFxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBkaWFsb2dDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnY2YtZGlhbG9nLWNvbnRhaW5lcicpO1xyXG5cdFx0aWYgKGRpYWxvZ0NvbmZpZy5jb250YWluZXJDbGFzc2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0ZGlhbG9nQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoLi4uZGlhbG9nQ29uZmlnLmNvbnRhaW5lckNsYXNzZXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFQUEVORCBET00gRUxFTUVOVCBUTyBESUFMT0dcclxuXHRcdGNvbnN0IGNoaWxkRG9tRWxlbSA9IChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcclxuXHRcdGNoaWxkRG9tRWxlbS5jbGFzc0xpc3QuYWRkKCdjZi1kaWFsb2cnKTtcclxuXHRcdFxyXG5cdFx0aWYgKGRpYWxvZ0NvbmZpZy53aWR0aCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjaGlsZERvbUVsZW0uc3R5bGUud2lkdGggPSBkaWFsb2dDb25maWcud2lkdGg7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlnLmhlaWdodCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjaGlsZERvbUVsZW0uc3R5bGUuaGVpZ2h0ID0gZGlhbG9nQ29uZmlnLmhlaWdodDtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWcubm9QYWRkaW5nKSB7XHJcbiAgICAgICAgICAgIGNoaWxkRG9tRWxlbS5jbGFzc0xpc3QuYWRkKCduby1wYWRkaW5nJyk7XHJcbiAgICAgICAgfVxyXG5cdFx0aWYgKGRpYWxvZ0NvbmZpZy5kaWFsb2dDbGFzc2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Y2hpbGREb21FbGVtLmNsYXNzTGlzdC5hZGQoLi4uZGlhbG9nQ29uZmlnLmRpYWxvZ0NsYXNzZXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChkaWFsb2dDb25maWcuY29udGVudEVsZW1lbnQgIT09IG51bGwpIHtcclxuXHRcdFx0Y2hpbGREb21FbGVtLmFwcGVuZENoaWxkKGRpYWxvZ0NvbmZpZy5jb250ZW50RWxlbWVudCk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGlhbG9nQ29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkRG9tRWxlbSk7XHJcblxyXG4gICAgICAgIC8vIENMT1NFQUJMRT8gQVBQRU5EIEJVVFRPTlxyXG4gICAgICAgIGlmIChkaWFsb2dDb25maWcuc2hvd0Nsb3NlSWNvbikge1xyXG4gICAgICAgICAgICBjb25zdCBjbG9zZUVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgIGNsb3NlRWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLlsnY2YtZGlhbG9nLWNsb3NlJywgJ3JlbWl4aWNvbicsICdjbG9zZS1saW5lJ10pO1xyXG4gICAgICAgICAgICBjbG9zZUVsZW1lbnQub25jbGljayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjaGlsZERvbUVsZW0uYXBwZW5kQ2hpbGQoY2xvc2VFbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFQUEVORCBESUFMT0cgQ09OVEFJTkVSIFRPIEJPRFlcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpYWxvZ0NvbnRhaW5lcik7XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9ncy5zZXQoZGlhbG9nUmVmLCB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZixcclxuICAgICAgICAgICAgY29udGFpbmVyOiBkaWFsb2dDb250YWluZXIsXHJcblx0XHRcdG9wZW5JbmRleDogdGhpcy5vcGVuSW5kZXggXHJcbiAgICAgICAgfSk7XHJcblx0XHR0aGlzLmRpYWxvZ0NvdW50Q2hhbmdlZC5uZXh0KHRoaXMuZGlhbG9ncy5zaXplKTtcclxuXHJcblx0XHR0aGlzLm9wZW5JbmRleCsrO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nUmVmO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZyb21Cb2R5KGRpYWxvZ1JlZjogRGlhbG9nUmVmKTogdm9pZCB7XHJcblxyXG5cdFx0Y29uc3QgYXBwUmVmOiBBcHBsaWNhdGlvblJlZiA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcGxpY2F0aW9uUmVmKTtcclxuXHJcbiAgICAgICAgaWYgKCFkaWFsb2dSZWYgfHwgIXRoaXMuZGlhbG9ncy5oYXMoZGlhbG9nUmVmKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lcjogRGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyIHwgdW5kZWZpbmVkID0gdGhpcy5kaWFsb2dzLmdldChkaWFsb2dSZWYpO1xyXG4gICAgICAgIGlmIChkaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblx0XHRcclxuICAgICAgICBhcHBSZWYuZGV0YWNoVmlldyhkaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuXHJcbiAgICAgICAgaWYgKGRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lci5jb250YWluZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyLmNvbnRhaW5lci5yZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dzLmRlbGV0ZShkaWFsb2dSZWYpO1xyXG5cdFx0dGhpcy5kaWFsb2dDb3VudENoYW5nZWQubmV4dCh0aGlzLmRpYWxvZ3Muc2l6ZSk7XHJcblxyXG5cdFx0aWYgKHRoaXMuZGlhbG9ncy5zaXplID09PSAwKSB7XHJcblx0XHRcdHRoaXMub3BlbkluZGV4ID0gMTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZXN0b3JlIHRpdGxlXHJcblx0XHRpZiAodGhpcy5kaWFsb2dzLnNpemUgPT09IDApIHtcclxuXHRcdFx0dGhpcy50aXRsZS5zZXRUaXRsZShkaWFsb2dSZWYuc2F2ZWRUaXRsZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgbGF0ZXN0T3BlbmVkRGlhbG9nUmVmOiBEaWFsb2dSZWYgfCBudWxsID0gbnVsbDtcclxuXHRcdFx0dGhpcy5kaWFsb2dzLmZvckVhY2goKF8sIGRpYWxvZ1JlZjogRGlhbG9nUmVmKSA9PiB7XHJcblx0XHRcdFx0aWYgKGxhdGVzdE9wZW5lZERpYWxvZ1JlZiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0bGF0ZXN0T3BlbmVkRGlhbG9nUmVmID0gZGlhbG9nUmVmO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAobGF0ZXN0T3BlbmVkRGlhbG9nUmVmLm9wZW5lZCA8IGRpYWxvZ1JlZi5vcGVuZWQpIHtcclxuXHRcdFx0XHRcdFx0bGF0ZXN0T3BlbmVkRGlhbG9nUmVmID0gZGlhbG9nUmVmO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGlmIChsYXRlc3RPcGVuZWREaWFsb2dSZWYgIT09IG51bGwpIHtcclxuXHRcdFx0XHQvL3RoaXMudGl0bGUuc2V0VGl0bGUobGF0ZXN0T3BlbmVkRGlhbG9nUmVmLnNhdmVkVGl0bGUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMudGl0bGUuc2V0VGl0bGUoZGlhbG9nUmVmLnNhdmVkVGl0bGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcbiAgICB9XHJcblxyXG5cdGNvbmZpcm0oXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24gPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdGNvbnN0IHByZWRlZmluZWRDb25maXJtQ29uZmlndXJhdGlvbjogQ29uZmlybUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSB0aGlzLnByZWRlZmluZWRDb25maXJtQ29uZmlndXJhdGlvbnNbY29uZmlndXJhdGlvbl07XHJcblx0XHRcdGlmIChwcmVkZWZpbmVkQ29uZmlybUNvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJlZGVmaW5lZCBjb25maXJtIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kIGZvcjogJyArIGNvbmZpZ3VyYXRpb24pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbmZpZ3VyYXRpb24gPSBwcmVkZWZpbmVkQ29uZmlybUNvbmZpZ3VyYXRpb247XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHR0aGlzLm9wZW4oY29tcG9uZW50LCB7XHJcblx0XHRcdFx0Li4uZGlhbG9nQ29uZmlndXJhdGlvbixcclxuXHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRjb25maWd1cmF0aW9uXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRpZ25vcmVLZXlVcDogdHJ1ZSxcclxuXHRcdFx0XHRzaG93Q2xvc2VJY29uOiBmYWxzZVxyXG5cdFx0XHR9KS5vbkNsb3NlLnBpcGUoZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpKS5zdWJzY3JpYmUoKGFjY2VwdGVkOiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0aWYgKGFjY2VwdGVkKSB7XHJcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZWplY3QodHJ1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcbiAgICBhc3luYyBjb25maXJtQXN5bmMoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybShjb25maWd1cmF0aW9uLCBkaWFsb2dDb25maWd1cmF0aW9uLCBjb21wb25lbnQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cdFxyXG5cdGNvbmZpcm1BY2NlcHQoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuXHRcdFx0dGhpcy5jb25maXJtKGNvbmZpZ3VyYXRpb24sIGRpYWxvZ0NvbmZpZ3VyYXRpb24sIGNvbXBvbmVudCkudGhlbigoKSA9PiByZXNvbHZlKHRydWUpKS5jYXRjaCgoKSA9PiB7fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0XHJcblx0Y29uZmlybURlY2xpbmUoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuXHRcdFx0dGhpcy5jb25maXJtKGNvbmZpZ3VyYXRpb24sIGRpYWxvZ0NvbmZpZ3VyYXRpb24sIGNvbXBvbmVudCkudGhlbigoKSA9PiB7fSkuY2F0Y2goKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHNob3dMb2FkaW5nKFxyXG5cdFx0Y29uZmlndXJhdGlvbjogTG9hZGluZ0NvbmZpZ3VyYXRpb24sXHJcblx0XHRkaWFsb2dDb25maWd1cmF0aW9uOiBEaWFsb2dDb25maWd1cmF0aW9uID0ge30sXHJcblx0XHRjb21wb25lbnQ6IFR5cGU8YW55PlxyXG5cdCk6IERpYWxvZ1JlZiB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHQuLi5kaWFsb2dDb25maWd1cmF0aW9uLFxyXG5cdFx0XHRzaG93Q2xvc2VJY29uOiBmYWxzZSxcclxuXHRcdFx0aWdub3JlS2V5VXA6IHRydWUsXHJcblx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRjb25maWd1cmF0aW9uXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0c2hvd0FsZXJ0KFxyXG5cdFx0Y29uZmlndXJhdGlvbjogQWxlcnRDb25maWd1cmF0aW9uIHwgc3RyaW5nLFxyXG5cdFx0ZGlhbG9nQ29uZmlndXJhdGlvbjogRGlhbG9nQ29uZmlndXJhdGlvbiA9IHt9LFxyXG5cdFx0Y29tcG9uZW50OiBUeXBlPGFueT5cclxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGlmICh0eXBlb2YgY29uZmlndXJhdGlvbiA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0Y29uc3QgcHJlZGVmaW5lZEFsZXJ0Q29uZmlndXJhdGlvbjogQWxlcnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gdGhpcy5wcmVkZWZpbmVkQWxlcnRDb25maWd1cmF0aW9uc1tjb25maWd1cmF0aW9uXTtcclxuXHRcdFx0aWYgKHByZWRlZmluZWRBbGVydENvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJlZGVmaW5lZCBhbGVydCBjb25maWd1cmF0aW9uIG5vdCBmb3VuZCBmb3I6ICcgKyBjb25maWd1cmF0aW9uKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25maWd1cmF0aW9uID0gcHJlZGVmaW5lZEFsZXJ0Q29uZmlndXJhdGlvbjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHRcdC4uLmRpYWxvZ0NvbmZpZ3VyYXRpb24sXHJcblx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0Y29uZmlndXJhdGlvblxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0aWdub3JlS2V5VXA6IHRydWUsXHJcblx0XHRcdFx0c2hvd0Nsb3NlSWNvbjogZmFsc2VcclxuXHRcdFx0fSkub25DbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHNob3dNb2RhbFdpdGhCdXR0b25zKFxyXG5cdFx0Y29uZmlndXJhdGlvbjogTW9kYWxXaXRoQnV0dG9uc0NvbmZpZ3VyYXRpb24sXHJcblx0XHRkaWFsb2dDb25maWd1cmF0aW9uOiBEaWFsb2dDb25maWd1cmF0aW9uID0ge30sXHJcblx0XHRjb21wb25lbnQ6IFR5cGU8YW55PlxyXG5cdCk6IERpYWxvZ1JlZiB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHQuLi5kaWFsb2dDb25maWd1cmF0aW9uLFxyXG5cdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0Y29uZmlndXJhdGlvblxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { InjectionToken } from "@angular/core";
|
|
2
|
-
export const
|
|
2
|
+
export const PREDEFINED_DIALOGS = new InjectionToken('Predefined dialogs', {
|
|
3
3
|
factory: () => {
|
|
4
4
|
return {};
|
|
5
5
|
}
|
|
6
6
|
});
|
|
7
|
-
|
|
7
|
+
export const OPENED_DIALOG_BODY_CLASS = new InjectionToken('Opened dialog body class', {
|
|
8
|
+
factory: () => {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29kZWZveGNvcmUvc3JjL2xpYi90b2tlbnMvZGlhbG9nLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNDLElBQUksY0FBYyxDQUFDLG9CQUFvQixFQUFFO0lBQzFHLE9BQU8sRUFBRSxHQUFzQixFQUFFO1FBQzdCLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFrQyxJQUFJLGNBQWMsQ0FBQywwQkFBMEIsRUFBRTtJQUNsSCxPQUFPLEVBQUUsR0FBa0IsRUFBRTtRQUN6QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBQcmVkZWZpbmVkRGlhbG9ncyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgUFJFREVGSU5FRF9ESUFMT0dTOiBJbmplY3Rpb25Ub2tlbjxQcmVkZWZpbmVkRGlhbG9ncz4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ1ByZWRlZmluZWQgZGlhbG9ncycsIHtcclxuICAgIGZhY3Rvcnk6ICgpOiBQcmVkZWZpbmVkRGlhbG9ncyA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBjb25zdCBPUEVORURfRElBTE9HX0JPRFlfQ0xBU1M6IEluamVjdGlvblRva2VuPHN0cmluZyB8IG51bGw+ID0gbmV3IEluamVjdGlvblRva2VuKCdPcGVuZWQgZGlhbG9nIGJvZHkgY2xhc3MnLCB7XHJcbiAgICBmYWN0b3J5OiAoKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn0pO1xyXG4iXX0=
|
package/fesm2022/codefoxcore.mjs
CHANGED
|
@@ -131,11 +131,16 @@ const ALERT_CONFIGURATIONS = new InjectionToken('Alert configurations predefined
|
|
|
131
131
|
}
|
|
132
132
|
});
|
|
133
133
|
|
|
134
|
-
const
|
|
134
|
+
const PREDEFINED_DIALOGS = new InjectionToken('Predefined dialogs', {
|
|
135
135
|
factory: () => {
|
|
136
136
|
return {};
|
|
137
137
|
}
|
|
138
138
|
});
|
|
139
|
+
const OPENED_DIALOG_BODY_CLASS = new InjectionToken('Opened dialog body class', {
|
|
140
|
+
factory: () => {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
139
144
|
|
|
140
145
|
const CONFIRM_CONFIGURATIONS = new InjectionToken('Confirm configurations predefined', {
|
|
141
146
|
factory: () => {
|
|
@@ -216,10 +221,12 @@ class DialogService {
|
|
|
216
221
|
this.injector = inject(Injector);
|
|
217
222
|
this.predefinedConfirmConfigurations = inject(CONFIRM_CONFIGURATIONS);
|
|
218
223
|
this.predefinedAlertConfigurations = inject(ALERT_CONFIGURATIONS);
|
|
219
|
-
this.predefinedDialogs = inject(
|
|
224
|
+
this.predefinedDialogs = inject(PREDEFINED_DIALOGS);
|
|
225
|
+
this.openedDialogBodyClass = inject(OPENED_DIALOG_BODY_CLASS);
|
|
220
226
|
this.title = inject(Title);
|
|
221
227
|
this.messageService = inject(MessageService);
|
|
222
228
|
this.dialogs = new Map();
|
|
229
|
+
this.dialogCountChanged = new Subject();
|
|
223
230
|
this.openIndex = 1;
|
|
224
231
|
this.platformId = inject(PLATFORM_ID);
|
|
225
232
|
if (isPlatformBrowser(this.platformId)) {
|
|
@@ -242,6 +249,16 @@ class DialogService {
|
|
|
242
249
|
}
|
|
243
250
|
});
|
|
244
251
|
}
|
|
252
|
+
this.dialogCountChanged.subscribe((size) => {
|
|
253
|
+
if (isPlatformBrowser(this.platformId) && this.openedDialogBodyClass !== null) {
|
|
254
|
+
if (size === 0) {
|
|
255
|
+
document.body.classList.remove(this.openedDialogBodyClass);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
document.body.classList.add(this.openedDialogBodyClass);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
});
|
|
245
262
|
}
|
|
246
263
|
async openPredefined(name, dialogConfiguration = {}) {
|
|
247
264
|
if (this.predefinedDialogs[name] === undefined) {
|
|
@@ -388,6 +405,7 @@ class DialogService {
|
|
|
388
405
|
container: dialogContainer,
|
|
389
406
|
openIndex: this.openIndex
|
|
390
407
|
});
|
|
408
|
+
this.dialogCountChanged.next(this.dialogs.size);
|
|
391
409
|
this.openIndex++;
|
|
392
410
|
return dialogRef;
|
|
393
411
|
}
|
|
@@ -406,6 +424,7 @@ class DialogService {
|
|
|
406
424
|
}
|
|
407
425
|
dialogComponentRefContainer.componentRef.destroy();
|
|
408
426
|
this.dialogs.delete(dialogRef);
|
|
427
|
+
this.dialogCountChanged.next(this.dialogs.size);
|
|
409
428
|
if (this.dialogs.size === 0) {
|
|
410
429
|
this.openIndex = 1;
|
|
411
430
|
}
|
|
@@ -1206,10 +1225,22 @@ function provideTokenInterceptor() {
|
|
|
1206
1225
|
multi: true
|
|
1207
1226
|
}]);
|
|
1208
1227
|
}
|
|
1228
|
+
function providePredefinedDialogs(predefinedDialogs) {
|
|
1229
|
+
return makeEnvironmentProviders([{
|
|
1230
|
+
provide: PREDEFINED_DIALOGS,
|
|
1231
|
+
useValue: predefinedDialogs
|
|
1232
|
+
}]);
|
|
1233
|
+
}
|
|
1234
|
+
function provideOpenedDialogBodyClass(openedDialogBodyClass) {
|
|
1235
|
+
return makeEnvironmentProviders([{
|
|
1236
|
+
provide: OPENED_DIALOG_BODY_CLASS,
|
|
1237
|
+
useValue: openedDialogBodyClass
|
|
1238
|
+
}]);
|
|
1239
|
+
}
|
|
1209
1240
|
|
|
1210
1241
|
/**
|
|
1211
1242
|
* Generated bundle index. Do not edit.
|
|
1212
1243
|
*/
|
|
1213
1244
|
|
|
1214
|
-
export { ALERT_CONFIGURATIONS, ALERT_DEFAULT_BUTTON_CONFIGURATION, AcceptValidationMode, ApiService,
|
|
1245
|
+
export { ALERT_CONFIGURATIONS, ALERT_DEFAULT_BUTTON_CONFIGURATION, AcceptValidationMode, ApiService, CONFIRM_CONFIGURATIONS, CookieService, DialogConfig, DialogInjector, DialogRef, DialogService, InterceptorType, LOG_LEVEL, LogLevel, LoggerService, MESSAGE_DEFAULT_CONFIGURATION, MessagePosition, MessageService, MessageSeverity, OPENED_DIALOG_BODY_CLASS, PREDEFINED_DIALOGS, Precheck, TokenInterceptor, TokenService, TokenServiceMode, isBrowser, localStorage, provideOpenedDialogBodyClass, providePredefinedDialogs, provideTokenInterceptor, sessionStorage };
|
|
1215
1246
|
//# sourceMappingURL=codefoxcore.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codefoxcore.mjs","sources":["../../../projects/codefoxcore/src/lib/classes/dialog.ref.class.ts","../../../projects/codefoxcore/src/lib/classes/dialog.config.class.ts","../../../projects/codefoxcore/src/lib/classes/dialog.injector.class.ts","../../../projects/codefoxcore/src/lib/tokens/alert.token.ts","../../../projects/codefoxcore/src/lib/tokens/dialog.token.ts","../../../projects/codefoxcore/src/lib/tokens/confirm.token.ts","../../../projects/codefoxcore/src/lib/interfaces.ts","../../../projects/codefoxcore/src/lib/tokens/message.token.ts","../../../projects/codefoxcore/src/lib/tokens/loglevel.token.ts","../../../projects/codefoxcore/src/lib/services/dialog.service.ts","../../../projects/codefoxcore/src/lib/services/message.service.ts","../../../projects/codefoxcore/src/lib/services/logger.service.ts","../../../projects/codefoxcore/src/lib/services/api.service.ts","../../../projects/codefoxcore/src/lib/helpers.ts","../../../projects/codefoxcore/src/lib/services/cookie.service.ts","../../../projects/codefoxcore/src/lib/services/token.service.ts","../../../projects/codefoxcore/src/lib/services/interceptors.service.ts","../../../projects/codefoxcore/src/lib/interceptors/base.interceptor.ts","../../../projects/codefoxcore/src/lib/interceptors/token.interceptor.ts","../../../projects/codefoxcore/src/lib/providers.ts","../../../projects/codefoxcore/src/codefoxcore.ts"],"sourcesContent":["import { filter, Observable, Subject, takeUntil } from \"rxjs\";\r\nimport { CfDialogCloseParams } from \"../interfaces\";\r\nimport { MessageService } from \"../services\";\r\nimport { DialogConfig } from \"../classes\";\r\n\r\nexport class DialogRef<T = any> {\r\n\tmessageService: MessageService | null = null;\r\n dialogConfig: DialogConfig | null = null;\r\n\tprivate readonly _onClose: Subject<any> = new Subject<any>();\r\n onClose: Observable<T | undefined> = this._onClose.asObservable();\r\n onCloseValue: Observable<T> = this._onClose.pipe(filter(result => result !== undefined && result !== null));\r\n onCloseOnValue: (value: any) => Observable<any> = (value: any) => this._onClose.pipe(filter(result => result === value));\r\n private readonly _onMessage: Subject<any> = new Subject<any>();\r\n\tonMessage: Observable<any> = this._onMessage.asObservable();\r\n private readonly _onDestroy = new Subject<any>();\r\n onDestroy: Observable<any> = this._onDestroy.asObservable();\r\n\tsavedTitle: string = '';\r\n\ttitle: string | null = null;\r\n\topened: Date = new Date();\r\n\tprivate doClose(result?: any, params: CfDialogCloseParams = {}): void {\r\n\t\tif (params.message !== undefined && this.messageService !== null) {\r\n\t\t\tthis.messageService.show(params.message.title, params.message.message, params.message);\r\n\t\t}\r\n\t\tthis._onClose.next(result); \r\n\t}\r\n close(result?: any, params: CfDialogCloseParams = {}): void { \r\n\t\tif (this.dialogConfig === null || this.dialogConfig.beforeClose === null) {\r\n\t\t\tthis.doClose(result, params);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tif (this.dialogConfig.beforeClose instanceof Promise) {\r\n\t\t\tthis.dialogConfig.beforeClose.then((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t}).catch(() => {});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.dialogConfig.beforeClose instanceof Observable) {\r\n\t\t\tthis.dialogConfig.beforeClose.pipe(takeUntil(this._onClose)).subscribe((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tconst beforeCloseResult: boolean | Observable<boolean> | Promise<boolean> = this.dialogConfig.beforeClose();\r\n\r\n\t\tif (beforeCloseResult instanceof Promise) {\r\n\t\t\tbeforeCloseResult.then((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t}).catch(() => {});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (beforeCloseResult instanceof Observable) {\r\n\t\t\tbeforeCloseResult.pipe(takeUntil(this._onClose)).subscribe((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (beforeCloseResult) {\r\n\t\t\tthis.doClose(result, params);\r\n\t\t}\r\n\t}\r\n forceClose(result?: any): void {\r\n this.doClose(result);\r\n }\r\n\tmessage(message: any): void { this._onMessage.next(message); }\r\n destroy(): void { this._onDestroy.next(undefined); }\r\n}\r\n","import { ResolveData } from \"@angular/router\";\r\nimport { Observable } from \"rxjs\";\r\nimport { DialogConfiguration } from \"../interfaces\";\r\n\r\nexport class DialogConfig implements DialogConfiguration {\r\n showCloseIcon: boolean = true;\r\n\tbeforeClose: null | (() => boolean | Observable<boolean> | Promise<boolean>) | Observable<boolean> | Promise<boolean> = null;\r\n\tignoreKeyUp: boolean = false;\r\n data: {[key: (string | number)]: any} = {};\r\n noPadding: boolean = false;\r\n\tkeepActiveElement: boolean = false;\r\n\tcontainerClasses: string[] = [];\r\n\tdialogClasses: string[] = [];\r\n resolve: ResolveData = {};\r\n\ttitle: string | null = null;\r\n contentElement: Element | null = null;\r\n single: boolean = false;\r\n width: string | null = null;\r\n\theight: string | null = null;\r\n getData(key: string | number, defaultOnUndefined: any = null): any {\r\n return this.data[key] !== undefined ? this.data[key] : defaultOnUndefined;\r\n }\r\n}\r\n","import { InjectionToken, Injector, Type } from \"@angular/core\";\r\n\r\nexport class DialogInjector implements Injector {\r\n constructor(private _parentInjector: Injector, private _additionalTokens: WeakMap<any, any>) { }\r\n get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: {}): T;\r\n get(token: any, notFoundValue?: any): any;\r\n get(token: any, notFoundValue?: any, _?: any): any {\r\n const value = this._additionalTokens.get(token);\r\n if (value) { return value; }\r\n return this._parentInjector.get<any>(token, notFoundValue);\r\n }\r\n}","import { InjectionToken } from \"@angular/core\";\r\nimport { AlertButtonConfiguration, AlertConfiguration } from \"../interfaces\";\r\n\r\nexport const ALERT_DEFAULT_BUTTON_CONFIGURATION: InjectionToken<AlertButtonConfiguration> = new InjectionToken('Alert default button', {\r\n\tfactory: (): AlertButtonConfiguration => {\r\n\t\treturn {\r\n\t\t\tlabel: 'alert.ok',\r\n\t\t\tseverity: 'success',\r\n\t\t\tcallback: ({ dialogRef }) => {\r\n\t\t\t\tdialogRef.close();\r\n\t\t\t},\r\n\t\t\tfocus: true,\r\n\t\t\ttranslateLabel: true\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport const ALERT_CONFIGURATIONS: InjectionToken<{[key: string]: AlertConfiguration}> = new InjectionToken('Alert configurations predefined', {\r\n factory: (): {[key: string]: AlertConfiguration} => {\r\n return {};\r\n }\r\n});\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { PredefinedDialogs } from \"../interfaces\";\r\n\r\nexport const CF_PREDEFINED_DIALOGS: InjectionToken<PredefinedDialogs> = new InjectionToken('Predefined dialogs', {\r\n factory: () => {\r\n return {};\r\n }\r\n});\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { ConfirmConfiguration } from \"../interfaces\";\r\n\r\nexport const CONFIRM_CONFIGURATIONS: InjectionToken<{[key: string]: ConfirmConfiguration}> = new InjectionToken('Confirm configurations predefined', {\r\n factory: (): {[key: string]: ConfirmConfiguration} => {\r\n return {};\r\n }\r\n});\r\n","import { ComponentRef, Type } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { DialogRef } from \"./classes/dialog.ref.class\";\r\n\r\nexport interface DialogComponentRefContainer {\r\n componentRef: ComponentRef<any>;\r\n container: HTMLDivElement;\r\n\topenIndex: number;\r\n}\r\n\r\nexport type PredefinedDialogs = {[key: string]: (() => Promise<Type<any>>) | {component: () => Promise<Type<any>>, configuration: DialogConfiguration}};\r\n\r\nexport interface DialogConfiguration {\r\n showCloseIcon?: boolean;\r\n\tbeforeClose?: CfDialogConfigurationBeforeClose;\r\n\tignoreKeyUp?: boolean;\r\n data?: any;\r\n noPadding?: boolean;\r\n\tkeepActiveElement?: boolean;\r\n\tcontainerClasses?: string[];\r\n\tdialogClasses?: string[];\r\n\ttitle?: string | null;\r\n contentElement?: Element | null;\r\n single?: boolean;\r\n width?: string | null;\r\n\theight?: string | null;\r\n}\r\n\r\nexport type CfDialogConfigurationBeforeClose = null | (() => boolean | Observable<boolean> | Promise<boolean>) | Observable<boolean> | Promise<boolean>;\r\n\r\nexport interface ConfirmConfiguration {\r\n title: string;\r\n text: string;\r\n acceptText: string;\r\n declineText: string;\r\n\thideDeclineButton?: boolean;\r\n switchButtonColors?: boolean;\r\n acceptTimeout?: number;\r\n acceptValidationText?: string;\r\n acceptValidationMode?: AcceptValidationMode;\r\n acceptValidationLabel?: string;\r\n}\r\n\r\nexport interface AlertConfiguration {\r\n title: string;\r\n text: string;\r\n\tshowCloseIcon?: boolean;\r\n\tbutton?: Partial<AlertButtonConfiguration>;\r\n}\r\n\r\nexport enum AcceptValidationMode {\r\n PATTERN = 'PATTERN',\r\n TEXT = 'TEXT'\r\n}\r\n\r\nexport interface AlertButtonConfiguration {\r\n\tlabel: string;\r\n\tseverity: string;\r\n\tcallback: (params: {dialogRef: DialogRef}) => void;\r\n\ttranslateLabel: boolean;\r\n\tfocus: boolean;\r\n}\r\n\r\nexport interface CfDialogCloseParams {\r\n message?: MessagePartial;\r\n}\r\n\r\nexport interface MessagePartial extends Partial<MessageConfiguration> {\r\n title: string;\r\n message: string;\r\n}\r\n\r\nexport interface MessageConfiguration {\r\n closeable: boolean;\r\n position: MessagePosition;\r\n lifetime: number | null;\r\n severity: MessageSeverity;\r\n\tkeepOnHover: boolean;\r\n}\r\nexport enum MessagePosition {\r\n TOP = 'top',\r\n BOTTOM = 'bottom'\r\n}\r\n\r\nexport enum MessageSeverity {\r\n SUCCESS = 'success',\r\n WARNING = 'warning',\r\n DANGER = 'danger',\r\n INFO = 'info'\r\n}\r\n\r\nexport interface LoadingConfiguration {\r\n title: string;\r\n text: string;\r\n\tloadingIcon?: string;\r\n iconSize?: number;\r\n}\r\n\r\nexport interface ModalWithButtonsConfiguration {\r\n title: string;\r\n text: string;\r\n\tshowCloseIcon?: boolean;\r\n\tbuttons: ButtonConfiguration[];\r\n}\r\n\r\nexport interface ButtonConfiguration {\r\n\tlabel: string;\r\n\tseverity: string;\r\n\tcallback?: (params: {dialogRef: DialogRef}) => void;\r\n\trouterLink?: any;\r\n\tfocus?: boolean;\r\n\tpermission?: string | string[];\r\n\ttranslateLabel?: boolean;\r\n}\r\n\r\nexport interface Message extends MessageConfiguration {\r\n title: string;\r\n message: string;\r\n}\r\n\r\nexport enum LogLevel {\r\n All = 0,\r\n Debug = 1,\r\n Info = 2,\r\n Warn = 3,\r\n Error = 4,\r\n Fatal = 5,\r\n Off = 6\r\n}\r\n\r\nexport enum TokenServiceMode {\r\n LOCALSTORAGE = 0,\r\n SESSIONSTORAGE = 1,\r\n COOKIE = 2\r\n}\r\n\r\nexport enum InterceptorType {\r\n ALL = 'ALL',\r\n ERROR = 'ERROR',\r\n LOADER = 'LOADER',\r\n MOCK = 'MOCK',\r\n TOKEN = 'TOKEN',\r\n PRECHECK = 'PRECHECK',\r\n LOCK = 'LOCK',\r\n\tREQUESTID = 'REQUESTID'\r\n}\r\n\r\nexport enum Precheck {\r\n ERROR = \"ERROR\",\r\n WARNING = \"WARNING\"\r\n}\r\n\r\nexport type PrecheckNullable = Precheck | null;\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { MessageConfiguration, MessagePosition, MessageSeverity } from \"../interfaces\";\r\n\r\nexport const MESSAGE_DEFAULT_CONFIGURATION: InjectionToken<MessageConfiguration> = new InjectionToken('Message default configuration', {\r\n\tfactory: (): MessageConfiguration => {\r\n\t\treturn {\r\n\t\t\tcloseable: true,\r\n\t\t\tlifetime: 3000,\r\n\t\t\tposition: MessagePosition.TOP,\r\n\t\t\tseverity: MessageSeverity.SUCCESS,\r\n\t\t\tkeepOnHover: false\r\n\t\t};\r\n\t}\r\n});\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { LogLevel } from \"../interfaces\";\r\n\r\nexport const LOG_LEVEL: InjectionToken<LogLevel> = new InjectionToken('Log level', {\r\n factory: (): LogLevel => {\r\n return LogLevel.All;\r\n }\r\n});\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n EmbeddedViewRef,\r\n inject,\r\n Injectable,\r\n Injector,\r\n PLATFORM_ID,\r\n Type\r\n} from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { AlertConfiguration, DialogConfiguration, ConfirmConfiguration, LoadingConfiguration, ModalWithButtonsConfiguration, PredefinedDialogs, DialogComponentRefContainer } from '../interfaces';\r\nimport { DialogConfig, DialogInjector, DialogRef } from '../classes';\r\nimport { ALERT_CONFIGURATIONS, CF_PREDEFINED_DIALOGS, CONFIRM_CONFIGURATIONS } from '../tokens';\r\nimport { MessageService } from '../services';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n\r\n\tprivate injector: Injector = inject(Injector);\r\n\tprivate predefinedConfirmConfigurations: {[key: string]: ConfirmConfiguration} = inject(CONFIRM_CONFIGURATIONS);\r\n\tprivate predefinedAlertConfigurations: {[key: string]: AlertConfiguration} = inject(ALERT_CONFIGURATIONS);\r\n\tprivate predefinedDialogs: PredefinedDialogs = inject(CF_PREDEFINED_DIALOGS);\r\n\r\n\ttitle: Title = inject(Title);\r\n\tmessageService: MessageService = inject(MessageService);\r\n\r\n\tdialogs: Map<DialogRef, DialogComponentRefContainer> = new Map();\r\n\topenIndex: number = 1;\r\n\tplatformId: Object = inject(PLATFORM_ID);\r\n\r\n constructor() {\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tdocument.addEventListener(\"keyup\", (keyboardEvent: KeyboardEvent) => {\r\n\t\t\t\tif (keyboardEvent.key.toLowerCase() === 'escape') {\r\n\t\t\t\t\tlet lastOpenIndex: number = 0;\r\n\t\t\t\t\tlet lastOpenedDialogRef: DialogRef | null = null;\r\n\t\t\t\t\tfor (const [dialogRef, cfDialogComponentRefContainer] of this.dialogs.entries()) {\r\n\t\t\t\t\t\tif (cfDialogComponentRefContainer.openIndex > lastOpenIndex) {\r\n\t\t\t\t\t\t\tlastOpenIndex = cfDialogComponentRefContainer.openIndex;\r\n\t\t\t\t\t\t\tlastOpenedDialogRef = dialogRef;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\tif (lastOpenedDialogRef !== null && lastOpenedDialogRef.dialogConfig !== null) {\r\n\t\t\t\t\t\tif (lastOpenedDialogRef.dialogConfig.ignoreKeyUp || document.activeElement instanceof HTMLInputElement || document.activeElement instanceof HTMLTextAreaElement) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\t\tlastOpenedDialogRef.close();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tasync openPredefined<T = any>(name: string, dialogConfiguration: DialogConfiguration = {}): Promise<DialogRef<T>> {\r\n\t\tif (this.predefinedDialogs[name] === undefined) {\r\n\t\t\tthrow Error('Dialog with name \"' + name + '\" not found!');\r\n\t\t}\r\n\t\tconst predefinedDialog = this.predefinedDialogs[name];\r\n\t\tif (typeof predefinedDialog === 'function') {\r\n\t\t\treturn this.openImport(predefinedDialog, dialogConfiguration);\r\n\t\t}\r\n\t\treturn this.openImport(predefinedDialog.component, {...predefinedDialog.configuration, ...dialogConfiguration});\r\n\t}\r\n\r\n\tasync openImport<T = any>(component: () => Promise<Type<any>>, dialogConfiguration: DialogConfiguration = {}): Promise<DialogRef<T>> {\r\n\t\treturn new Promise(async (resolve) => {\r\n\t\t\tresolve(this.open<T>(await component(), dialogConfiguration));\r\n\t\t});\r\n\t}\r\n\r\n open<T = any>(component: Type<any>, dialogConfiguration: DialogConfiguration = {}): DialogRef<T> {\r\n\r\n\t\tfor (let dialog of this.dialogs.entries()) {\r\n\t\t\tif (\r\n\t\t\t\t(dialogConfiguration.single && dialog[1].componentRef.componentType.name === component.name) ||\r\n\t\t\t\t(dialog[0].dialogConfig !== null && dialog[0].dialogConfig.single && dialog[1].componentRef.componentType.name === component.name)\r\n\t\t\t) {\r\n\t\t\t\treturn dialog[0];\r\n\t\t\t}\r\n\t\t}\r\n\r\n const dialogConfig: DialogConfig = this.createDialogConfig(dialogConfiguration);\r\n\r\n\t\tif (!dialogConfig.keepActiveElement) {\r\n\t\t\tif (document.activeElement instanceof HTMLElement) {\r\n\t\t\t\tdocument.activeElement.blur();\r\n\t\t\t}\r\n\t\t}\r\n\r\n const dialogRef: DialogRef<T> = this.appendToBody(component, dialogConfig);\r\n\t\tdialogRef.messageService = this.messageService;\r\n\t\tdialogRef.dialogConfig = dialogConfig;\r\n\r\n\t\tthis.changeAndStoreTitle(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n\tchangeAndStoreTitle(dialogRef: DialogRef): void {\r\n\t\tdialogRef.savedTitle = this.title.getTitle();\r\n\t\tif (dialogRef.dialogConfig !== null && dialogRef.dialogConfig.title !== null) {\r\n\t\t\tthis.title.setTitle(dialogRef.dialogConfig.title);\r\n\t\t}\r\n\t}\r\n\r\n createDialogConfig(dialogConfiguration: DialogConfiguration): DialogConfig {\r\n const dialogConfig: DialogConfig = new DialogConfig();\r\n if (dialogConfiguration.showCloseIcon !== undefined) {\r\n dialogConfig.showCloseIcon = dialogConfiguration.showCloseIcon;\r\n }\r\n\t\tif (dialogConfiguration.beforeClose !== undefined) {\r\n dialogConfig.beforeClose = dialogConfiguration.beforeClose;\r\n }\r\n\t\tif (dialogConfiguration.ignoreKeyUp !== undefined) {\r\n dialogConfig.ignoreKeyUp = dialogConfiguration.ignoreKeyUp;\r\n }\r\n if (dialogConfiguration.data !== undefined) {\r\n dialogConfig.data = dialogConfiguration.data;\r\n }\r\n if (dialogConfiguration.noPadding !== undefined) {\r\n dialogConfig.noPadding = dialogConfiguration.noPadding;\r\n }\r\n\t\tif (dialogConfiguration.keepActiveElement !== undefined) {\r\n\t\t\tdialogConfig.keepActiveElement = dialogConfiguration.keepActiveElement;\r\n\t\t}\r\n\t\tif (dialogConfiguration.containerClasses !== undefined) {\r\n\t\t\tdialogConfig.containerClasses = dialogConfiguration.containerClasses;\r\n\t\t}\r\n\t\tif (dialogConfiguration.dialogClasses !== undefined) {\r\n\t\t\tdialogConfig.dialogClasses = dialogConfiguration.dialogClasses;\r\n\t\t}\r\n\t\tif (dialogConfiguration.title !== undefined) {\r\n\t\t\tdialogConfig.title = dialogConfiguration.title;\r\n\t\t}\r\n\t\tif (dialogConfiguration.contentElement !== undefined) {\r\n\t\t\tdialogConfig.contentElement = dialogConfiguration.contentElement;\r\n\t\t}\r\n\t\tif (dialogConfiguration.single !== undefined) {\r\n\t\t\tdialogConfig.single = dialogConfiguration.single;\r\n\t\t}\r\n\t\tif (dialogConfiguration.width !== undefined) {\r\n\t\t\tdialogConfig.width = dialogConfiguration.width;\r\n\t\t}\r\n\t\tif (dialogConfiguration.height !== undefined) {\r\n\t\t\tdialogConfig.height = dialogConfiguration.height;\r\n\t\t}\r\n return dialogConfig;\r\n }\r\n\r\n appendToBody(component: Type<any>, dialogConfig: DialogConfig): DialogRef {\r\n\r\n\t\tconst appRef: ApplicationRef = this.injector.get(ApplicationRef);\r\n\r\n // CREATE INJECTION TOKENS\r\n const tokens: WeakMap<any, any> = new WeakMap();\r\n\r\n // CREATE DIALOG CONFIGURATION CLASS\r\n tokens.set(DialogConfig, dialogConfig);\r\n\r\n // CREATE DIALOG REFERENCE CLASS\r\n const dialogRef: DialogRef = new DialogRef();\r\n tokens.set(DialogRef, dialogRef);\r\n\r\n // LISTEN ON DIALOG CLOSE\r\n const closeSub: Subscription = dialogRef.onClose.subscribe(() => {\r\n this.removeFromBody(dialogRef);\r\n closeSub.unsubscribe();\r\n });\r\n\r\n // CREATE COMPONENT REF\r\n const componentRef: ComponentRef<any> = createComponent(component, {\r\n\t\t\tenvironmentInjector: appRef.injector,\r\n\t\t\telementInjector: new DialogInjector(this.injector, tokens)\r\n\t\t});\r\n\r\n // ATTACH VIEW TO ANGULAR\r\n appRef.attachView(componentRef.hostView);\r\n\r\n // CREATE DIALOG CONTAINER ELEMENT\r\n const dialogContainer: HTMLDivElement = document.createElement('div');\r\n dialogContainer.classList.add('cf-dialog-container');\r\n\t\tif (dialogConfig.containerClasses.length > 0) {\r\n\t\t\tdialogContainer.classList.add(...dialogConfig.containerClasses);\r\n\t\t}\r\n\r\n\t\t// APPEND DOM ELEMENT TO DIALOG\r\n\t\tconst childDomElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\r\n\t\tchildDomElem.classList.add('cf-dialog');\r\n\t\t\r\n\t\tif (dialogConfig.width !== null) {\r\n\t\t\tchildDomElem.style.width = dialogConfig.width;\r\n\t\t}\r\n\t\tif (dialogConfig.height !== null) {\r\n\t\t\tchildDomElem.style.height = dialogConfig.height;\r\n\t\t}\r\n\t\tif (dialogConfig.noPadding) {\r\n childDomElem.classList.add('no-padding');\r\n }\r\n\t\tif (dialogConfig.dialogClasses.length > 0) {\r\n\t\t\tchildDomElem.classList.add(...dialogConfig.dialogClasses);\r\n\t\t}\r\n\r\n\t\tif (dialogConfig.contentElement !== null) {\r\n\t\t\tchildDomElem.appendChild(dialogConfig.contentElement);\r\n\t\t}\r\n\r\n\t\tdialogContainer.appendChild(childDomElem);\r\n\r\n // CLOSEABLE? APPEND BUTTON\r\n if (dialogConfig.showCloseIcon) {\r\n const closeElement: HTMLDivElement = document.createElement('div');\r\n closeElement.classList.add(...['cf-dialog-close', 'remixicon', 'close-line']);\r\n closeElement.onclick = () => {\r\n dialogRef.close();\r\n };\r\n childDomElem.appendChild(closeElement);\r\n }\r\n\r\n // APPEND DIALOG CONTAINER TO BODY\r\n document.body.appendChild(dialogContainer);\r\n\r\n this.dialogs.set(dialogRef, {\r\n componentRef,\r\n container: dialogContainer,\r\n\t\t\topenIndex: this.openIndex \r\n });\r\n\r\n\t\tthis.openIndex++;\r\n\r\n return dialogRef;\r\n }\r\n\r\n removeFromBody(dialogRef: DialogRef): void {\r\n\r\n\t\tconst appRef: ApplicationRef = this.injector.get(ApplicationRef);\r\n\r\n if (!dialogRef || !this.dialogs.has(dialogRef)) {\r\n return;\r\n }\r\n const dialogComponentRefContainer: DialogComponentRefContainer | undefined = this.dialogs.get(dialogRef);\r\n if (dialogComponentRefContainer == undefined) {\r\n return;\r\n }\r\n\t\t\r\n appRef.detachView(dialogComponentRefContainer.componentRef.hostView);\r\n\r\n if (dialogComponentRefContainer.container !== null) {\r\n dialogComponentRefContainer.container.remove();\r\n }\r\n dialogComponentRefContainer.componentRef.destroy();\r\n this.dialogs.delete(dialogRef);\r\n\r\n\t\tif (this.dialogs.size === 0) {\r\n\t\t\tthis.openIndex = 1;\r\n\t\t}\r\n\r\n\t\t// Restore title\r\n\t\tif (this.dialogs.size === 0) {\r\n\t\t\tthis.title.setTitle(dialogRef.savedTitle);\r\n\t\t} else {\r\n\t\t\tlet latestOpenedDialogRef: DialogRef | null = null;\r\n\t\t\tthis.dialogs.forEach((_, dialogRef: DialogRef) => {\r\n\t\t\t\tif (latestOpenedDialogRef === null) {\r\n\t\t\t\t\tlatestOpenedDialogRef = dialogRef;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (latestOpenedDialogRef.opened < dialogRef.opened) {\r\n\t\t\t\t\t\tlatestOpenedDialogRef = dialogRef;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (latestOpenedDialogRef !== null) {\r\n\t\t\t\t//this.title.setTitle(latestOpenedDialogRef.savedTitle);\r\n\t\t\t} else {\r\n\t\t\t\tthis.title.setTitle(dialogRef.savedTitle);\r\n\t\t\t}\r\n\t\t}\r\n }\r\n\r\n\tconfirm(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): Promise<boolean> {\r\n\t\tif (typeof configuration === 'string') {\r\n\t\t\tconst predefinedConfirmConfiguration: ConfirmConfiguration | undefined = this.predefinedConfirmConfigurations[configuration];\r\n\t\t\tif (predefinedConfirmConfiguration === undefined) {\r\n\t\t\t\tthrow new Error('Predefined confirm configuration not found for: ' + configuration);\r\n\t\t\t}\r\n\t\t\tconfiguration = predefinedConfirmConfiguration;\r\n\t\t}\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.open(component, {\r\n\t\t\t\t...dialogConfiguration,\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tconfiguration\r\n\t\t\t\t},\r\n\t\t\t\tignoreKeyUp: true,\r\n\t\t\t\tshowCloseIcon: false\r\n\t\t\t}).onClose.pipe(filter(value => value !== undefined)).subscribe((accepted: boolean) => {\r\n\t\t\t\tif (accepted) {\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treject(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n async confirmAsync(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): Promise<boolean> {\r\n return await new Promise((resolve) => {\r\n this.confirm(configuration, dialogConfiguration, component).then(() => {\r\n resolve(true);\r\n }).catch(() => {\r\n resolve(false);\r\n });\r\n });\r\n }\r\n\t\r\n\tconfirmAccept(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): Promise<boolean> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tthis.confirm(configuration, dialogConfiguration, component).then(() => resolve(true)).catch(() => {});\r\n\t\t});\r\n\t}\r\n\t\r\n\tconfirmDecline(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): Promise<boolean> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tthis.confirm(configuration, dialogConfiguration, component).then(() => {}).catch(() => resolve(true));\r\n\t\t});\r\n\t}\r\n\r\n\tshowLoading(\r\n\t\tconfiguration: LoadingConfiguration,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): DialogRef {\r\n\t\treturn this.open(component, {\r\n\t\t\t...dialogConfiguration,\r\n\t\t\tshowCloseIcon: false,\r\n\t\t\tignoreKeyUp: true,\r\n\t\t\tdata: {\r\n\t\t\t\tconfiguration\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tshowAlert(\r\n\t\tconfiguration: AlertConfiguration | string,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): Promise<void> {\r\n\t\tif (typeof configuration === 'string') {\r\n\t\t\tconst predefinedAlertConfiguration: AlertConfiguration | undefined = this.predefinedAlertConfigurations[configuration];\r\n\t\t\tif (predefinedAlertConfiguration === undefined) {\r\n\t\t\t\tthrow new Error('Predefined alert configuration not found for: ' + configuration);\r\n\t\t\t}\r\n\t\t\tconfiguration = predefinedAlertConfiguration;\r\n\t\t}\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\treturn this.open(component, {\r\n\t\t\t\t...dialogConfiguration,\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tconfiguration\r\n\t\t\t\t},\r\n\t\t\t\tignoreKeyUp: true,\r\n\t\t\t\tshowCloseIcon: false\r\n\t\t\t}).onClose.subscribe(() => {\r\n\t\t\t\tresolve();\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tshowModalWithButtons(\r\n\t\tconfiguration: ModalWithButtonsConfiguration,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): DialogRef {\r\n\t\treturn this.open(component, {\r\n\t\t\t...dialogConfiguration,\r\n\t\t\tdata: {\r\n\t\t\t\tconfiguration\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Subject, Subscription, timer } from 'rxjs';\r\nimport { Message, MessageConfiguration, MessageSeverity } from '../interfaces';\r\nimport { MESSAGE_DEFAULT_CONFIGURATION } from '../tokens';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class MessageService {\r\n\r\n /**\r\n * Default configuration\r\n * \r\n * Can be changed if you overwrite it or use the `MESSAGE_DEFAULT_CONFIGURATION` InjectionToken\r\n */\r\n public defaultConfiguration: MessageConfiguration = inject(MESSAGE_DEFAULT_CONFIGURATION);\r\n \r\n /**\r\n * Message subject\r\n */\r\n private messageSubject: Subject<Message> = new Subject();\r\n\r\n /**\r\n * Show\r\n * \r\n * Displays message with the given configuration\r\n * \r\n * @param messageConfiguration `Partial<MessageConfiguration>`\r\n */\r\n public show(title: string, message: string, configuration?: Partial<MessageConfiguration>): void {\r\n this.messageSubject.next({\r\n\t\t\t...this.defaultConfiguration,\r\n ...configuration,\r\n\t\t\ttitle,\r\n\t\t\tmessage\r\n });\r\n }\r\n\r\n /**\r\n * Show success message\r\n * \r\n * Display a message with default success severity\r\n * \r\n * @param title `string`, required\r\n * @param message `string`, required\r\n * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n */\r\n\tpublic showSuccessMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.SUCCESS\r\n\t\t});\r\n\t}\r\n\r\n /**\r\n * Show danger message\r\n * \r\n * Display a message with default danger severity\r\n * \r\n * @param title `string`, required\r\n * @param message `string`, required\r\n * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n */\r\n\tpublic showDangerMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.DANGER,\r\n\t\t\tkeepOnHover: true\r\n\t\t});\r\n\t}\r\n\r\n /**\r\n * Show warning message\r\n * \r\n * Display a message with default warning severity\r\n * \r\n * @param title `string`, required\r\n * @param message `string`, required\r\n * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n */\r\n\tpublic showWarningMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.WARNING\r\n\t\t});\r\n\t}\r\n\r\n /**\r\n * Show info message\r\n * \r\n * Display a message with default info severity\r\n * \r\n * @param title `string`, required\r\n * @param message `string`, required\r\n * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n */\r\n\tpublic showInfoMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.INFO\r\n\t\t});\r\n\t}\r\n\r\n private showMessage(message: Message): void {\r\n let container: HTMLElement | null = document.getElementById('cf-toasts-' + message.position + '-container');\r\n if (container === null) {\r\n container = document.createElement('div');\r\n container.id = 'cf-toasts-' + message.position + '-container';\r\n document.body.appendChild(container);\r\n }\r\n\r\n const div: HTMLElement = this.createMessageHtmlElement(message);\r\n\r\n container.appendChild(div);\r\n\r\n if (message.lifetime !== null) {\r\n\r\n\t\t\tlet disposeTimerSubscription: Subscription | null = timer(message.lifetime + 500).subscribe(() => {\r\n\t\t\t\tthis.hideMessage(div);\r\n\t\t\t});\r\n\r\n\t\t\tif (message.keepOnHover) {\r\n\t\t\t\tdiv.addEventListener('mouseenter', () => {\r\n\t\t\t\t\tif (disposeTimerSubscription !== null) {\r\n\t\t\t\t\t\tdisposeTimerSubscription.unsubscribe();\r\n\t\t\t\t\t\tdisposeTimerSubscription = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n }\r\n }\r\n\r\n private createMessageHtmlElement(message: Message): HTMLElement {\r\n const div: HTMLElement = document.createElement('div');\r\n div.classList.add('cf-toast', 'cf-' + message.severity + '-toast');\r\n const titleDiv: HTMLElement = document.createElement('div');\r\n titleDiv.classList.add('cf-toast-title');\r\n titleDiv.innerText = message.title;\r\n const messageDiv: HTMLElement = document.createElement('div');\r\n messageDiv.classList.add('cf-toast-message');\r\n messageDiv.innerText = message.message;\r\n div.appendChild(titleDiv);\r\n div.appendChild(messageDiv);\r\n if (message.closeable) {\r\n const closeIcon: HTMLElement = document.createElement('i');\r\n closeIcon.classList.add('close-icon', 'remixicon', 'close-line');\r\n closeIcon.onclick = () => {\r\n this.hideMessage(div, true);\r\n };\r\n div.appendChild(closeIcon);\r\n }\r\n return div;\r\n }\r\n\r\n private hideMessage(messageElement: HTMLElement, forceClose: boolean = false): void {\r\n messageElement.classList.add('hidden-toast');\r\n\r\n let remainOpen = false;\r\n messageElement.addEventListener('mouseenter', (() => {\r\n remainOpen = true;\r\n }));\r\n\r\n timer(500).subscribe(() => {\r\n if (remainOpen && !forceClose) {\r\n messageElement.classList.remove('hidden-toast');\r\n return;\r\n }\r\n messageElement.removeEventListener('mouseenter', (() => {}));\r\n messageElement.remove();\r\n });\r\n }\r\n\r\n constructor() {\r\n this.messageSubject.subscribe((message: Message) => {\r\n this.showMessage(message);\r\n });\r\n }\r\n\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { LogLevel } from '../interfaces';\r\nimport { LOG_LEVEL } from '../tokens';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class LoggerService {\r\n\r\n\tprivate _logLevel: LogLevel | null = inject(LOG_LEVEL);\r\n\r\n\tprivate logLevelColors: string[] = [\r\n\t\t'',\r\n\t\t'background-color: #D2BDF3; padding: 5px 10px;',\r\n\t\t'background-color: #A2DDFF; padding: 5px 10px;',\r\n\t\t'background-color: #FFD5C5; padding: 5px 10px;',\r\n\t\t'background-color: #EA4331; color: #FFFFFF; padding: 5px 10px;',\r\n\t\t'background-color: #F71900; color: #FFFFFF; padding: 5px 10px;',\r\n\t\t''\r\n\t];\r\n\r\n\tpublic debug(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Debug, group });\r\n\t}\r\n\r\n\tpublic info(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Info, group });\r\n\t}\r\n\r\n\tpublic warn(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Warn, group });\r\n\t}\r\n\r\n\tpublic error(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Error, group });\r\n\t}\r\n\r\n\tpublic fatal(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Fatal, group });\r\n\t}\r\n\r\n\tpublic groupEnd(): void {\r\n\t\tconsole.groupEnd();\r\n\t}\r\n\r\n\tprivate log(configuration: {\r\n\t\tlog: any,\r\n\t\tlogLevel: LogLevel,\r\n\t\tgroup: boolean\r\n\t}): void {\r\n\t\tif (this._logLevel === null || this._logLevel === LogLevel.Off || this._logLevel > configuration.logLevel) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (configuration.group) {\r\n\t\t\tconsole.group(configuration.log);\r\n\t\t} else {\r\n\t\t\tconsole.log('%c' + configuration.log, this.logLevelColors[configuration.logLevel]);\r\n\t\t}\r\n\t}\r\n\r\n\tset logLevel(logLevel: LogLevel | null) {\r\n\t\tthis._logLevel = logLevel;\r\n\t}\r\n\r\n\tget logLevel(): LogLevel | null {\r\n\t\treturn this._logLevel;\r\n\t}\r\n}\r\n","import { HttpClient, HttpParams } from \"@angular/common/http\";\r\nimport { inject, Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { LoggerService } from \"./logger.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class ApiService {\r\n\r\n\thttpClient: HttpClient = inject(HttpClient);\r\n\tloggerService: LoggerService = inject(LoggerService);\r\n\r\n\tprivate _apiBaseUrl: string | null = null;\r\n\r\n\tpublic post<T>(endPoint: (string|number)[], body: any): Observable<any> {\r\n\t\treturn this.httpClient.post<T>(this.generateUrl(endPoint), body);\r\n\t}\r\n\r\n\tpublic get<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.get<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic getFileArrayBuffer(endPoint: (string|number)[]): Observable<ArrayBuffer> {\r\n\t\treturn this.httpClient.get(this.generateUrl(endPoint), {\r\n\t\t\tresponseType: 'arraybuffer'\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getFileText(endPoint: (string|number)[]): Observable<string> {\r\n\t\treturn this.httpClient.get(this.generateUrl(endPoint), {\r\n\t\t\tresponseType: 'text'\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getWithHttpParams<T>(endPoint: (string|number)[], params: HttpParams | null = null): Observable<any> {\r\n\t\tif (params === null) {\r\n\t\t\treturn this.get(endPoint);\r\n\t\t} else {\r\n\t\t\treturn this.httpClient.get<T>(this.generateUrl(endPoint), {\r\n\t\t\t\tparams\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic delete<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.delete<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic patch<T>(endPoint: (string|number)[], body: any): Observable<any> {\r\n\t\treturn this.httpClient.patch<T>(this.generateUrl(endPoint), body);\r\n\t}\r\n\r\n\tpublic head<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.head<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic options<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.options<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic put<T>(endPoint: (string|number)[], body: any): Observable<any> {\r\n\t\treturn this.httpClient.put<T>(this.generateUrl(endPoint), body);\r\n\t}\r\n\r\n\tpublic generateUrl(endPoint: (string|number)[]): string {\r\n\t\tif (this._apiBaseUrl === null) {\r\n\t\t\tthrow new Error('No API base url set in generateUrl call!');\r\n\t\t}\r\n if (endPoint.length === 0) {\r\n return this._apiBaseUrl;\r\n }\r\n\t\tif (typeof endPoint[0] === 'string' && endPoint[0].startsWith('#')) {\r\n endPoint[0] = endPoint[0].slice(1);\r\n\t\t\treturn endPoint.map((v, i) => i === 0 ? v : encodeURIComponent(v)).join('/');\r\n\t\t}\r\n\t\treturn [this._apiBaseUrl, ...endPoint.map((v) => encodeURIComponent(v))].join('/');\r\n\t}\r\n\r\n\tset apiBaseUrl(apiBaseUrl: string) {\r\n\t\tthis.loggerService.info('Api Service base url set to: ' + apiBaseUrl);\r\n\t\tif (apiBaseUrl[apiBaseUrl.length - 1] === '/') {\r\n\t\t\tapiBaseUrl = apiBaseUrl.slice(0, apiBaseUrl.length - 1);\r\n\t\t}\r\n\t\tthis._apiBaseUrl = apiBaseUrl;\r\n\t}\r\n\r\n\tget apiBaseUrl(): string | null {\r\n\t\treturn this._apiBaseUrl;\r\n\t}\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from \"@angular/common\";\r\nimport { inject, PLATFORM_ID } from \"@angular/core\";\r\n\r\nexport function isBrowser(): boolean {\r\n\tconst platformId: Object = inject(PLATFORM_ID);\r\n\treturn isPlatformBrowser(platformId);\r\n}\r\n\r\nexport function localStorage(): Storage | null {\r\n\tconst document: Document = inject(DOCUMENT);\r\n\tif (document.defaultView !== null) {\r\n\t\treturn document.defaultView.window.localStorage;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nexport function sessionStorage(): Storage | null {\r\n\tconst document: Document = inject(DOCUMENT);\r\n\tif (document.defaultView !== null) {\r\n\t\treturn document.defaultView.window.sessionStorage;\r\n\t}\r\n\treturn null;\r\n}","import { DOCUMENT } from \"@angular/common\";\r\nimport { Injectable, inject } from \"@angular/core\";\r\nimport { isBrowser } from \"../helpers\";\r\nimport { LoggerService } from \"./logger.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CookieService {\r\n\r\n\tbrowser: boolean = isBrowser();\r\n\tdocument: Document = inject(DOCUMENT);\r\n\r\n\tloggerService: LoggerService = inject(LoggerService);\r\n\r\n\t/**\r\n\t * Get the value of a cookie by name, returns `null` if the cookie is not set\r\n\t * \r\n\t * @param name name of the cookie\r\n\t * @returns value of the cookie\r\n\t */\r\n\tget(name: string): string | null {\r\n\t\tif (!this.browser) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst cookies: {[key: string]: string} = this.cookies;\r\n\t\treturn cookies[name] || null;\r\n\t}\r\n\r\n\t/**\r\n\t * Set the value of a cookie with the given name\r\n\t * \r\n\t * @param name name of the cookie\r\n\t * @param value value of the cookie\r\n\t * @param expire expire of the cookie in seconds, if null, it will never expire\r\n\t * @param path path of the cookie, default is '/'\r\n\t * @param config optional configuration values (expire in seconds, path of cookie)\r\n\t */\r\n\tset(name: string, value: string, expire: number | null = null, path: string | null = '/'): void {\r\n\r\n\t\tif (!this.browser) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (path === null) {\r\n\t\t\tpath = '/';\r\n\t\t}\r\n\r\n\t\t// Default cookie informations\r\n\t\tlet cookie: string = `${name}=${value};`;\r\n\r\n\t\t// If we have an expire date, we need to set\r\n\t\tif (expire !== null) {\r\n\t\t\tlet d: Date = new Date();\r\n\t\t\td.setTime(d.getTime() + (expire * 1000));\r\n\t\t\tcookie += `expires=${d.toUTCString()};`;\r\n\t\t}\r\n\r\n\t\t// Set path\r\n\t\tcookie += `path=${path};`;\r\n\r\n\t\t// Log\r\n\t\tthis.loggerService.info('Cookie data to set: ' + cookie);\r\n\r\n\t\t// Set the cookie\r\n\t\tthis.document.cookie = cookie;\r\n\t}\r\n\r\n\t/**\r\n\t * Delete a cookie by its name\r\n\t * \r\n\t * @param name name of the cookie\r\n\t */\r\n\tdelete(name: string): void {\r\n\t\tif (!this.browser) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.set(name, '', -1);\r\n\t}\r\n\r\n\tget cookies(): {[key: string]: string} {\r\n\r\n\t\tif (!this.browser) {\r\n\t\t\treturn {};\r\n\t\t}\r\n\r\n\t\tconst cookies: string = this.document.cookie;\r\n\t\tif (cookies.length === 0) {\r\n\t\t\treturn {};\r\n\t\t}\r\n\t\tconst cookiesArray: string[] = cookies.split(';');\r\n\t\tconst cookiesObject: {[key: string]: string} = {};\r\n\t\tcookiesArray.forEach((cookiesArrayItem: string) => {\r\n\t\t\tconst cookiesArrayItemSplit: string[] = cookiesArrayItem.split('=');\r\n\t\t\tcookiesObject[cookiesArrayItemSplit[0].trim()] = cookiesArrayItemSplit[1];\r\n\t\t})\r\n\t\treturn cookiesObject;\r\n\t}\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { TokenServiceMode } from '../interfaces';\r\nimport { isBrowser, localStorage, sessionStorage } from '../helpers';\r\nimport { CookieService } from './cookie.service';\r\nimport { LoggerService } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TokenService {\r\n\r\n\tcookieService: CookieService = inject(CookieService);\r\n\tloggerService: LoggerService = inject(LoggerService);\r\n\tlocalStorage: Storage | null = localStorage();\r\n\tsessionStorage: Storage | null = sessionStorage();\r\n\tisBrowser: boolean = isBrowser();\r\n\r\n\tcookiePath: string | null = null;\r\n\taccessToken: string | null = null;\r\n\taccessTokenKey = 'acccessToken';\r\n\taccessTokenCookieExpireDays = 30;\r\n\tmode: TokenServiceMode = TokenServiceMode.LOCALSTORAGE;\r\n\r\n\tpublic init(accessTokenKey: string, mode: TokenServiceMode | null = null, readAndStore: boolean = true): void {\r\n\t\tthis.accessTokenKey = accessTokenKey;\r\n\t\tif (mode !== null) {\r\n\t\t\tthis.mode = mode;\r\n\t\t}\r\n\t\tif (readAndStore) {\r\n\t\t\tthis.accessToken = this.read();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic write(accessToken: string, mode: TokenServiceMode | null = null): void {\r\n\t\tthis.accessToken = accessToken;\r\n\t\tif (mode === null) {\r\n\t\t\tmode = this.mode;\r\n\t\t}\r\n\t\tswitch (mode) {\r\n\t\t\tcase TokenServiceMode.LOCALSTORAGE:\r\n\t\t\t\tif (this.isBrowser && this.localStorage !== null) {\r\n\t\t\t\t\tthis.localStorage.setItem(this.accessTokenKey, this.accessToken);\r\n\t\t\t\t\tthis.loggerService.debug('Token set to local storage: ' + this.accessToken);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to set localStorage on not a browser platform!');\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.SESSIONSTORAGE:\r\n\t\t\t\tif (this.isBrowser && this.sessionStorage !== null) {\r\n\t\t\t\t\tthis.sessionStorage.setItem(this.accessTokenKey, this.accessToken);\r\n\t\t\t\t\tthis.loggerService.debug('Token set to session storage: ' + this.accessToken);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to set sessionStorage on not a browser platform!');\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.COOKIE:\r\n\t\t\t\tthis.cookieService.set(this.accessTokenKey, this.accessToken, this.accessTokenCookieExpireDays * 24 * 60 * 60, this.cookiePath);\r\n\t\t\t\tthis.loggerService.debug('Token set to cookie: ' + this.accessToken);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t}\r\n\r\n\tpublic read(mode: TokenServiceMode | null = null): string | null {\r\n\t\tif (mode === null) {\r\n\t\t\tmode = this.mode;\r\n\t\t}\r\n\t\tswitch (mode) {\r\n\t\t\tcase TokenServiceMode.LOCALSTORAGE:\r\n\t\t\t\tthis.loggerService.debug('Trying to read token from local storage');\r\n\t\t\t\tif (this.isBrowser && this.localStorage !== null) {\r\n\t\t\t\t\tconst tokenLocalStorage: string | null = this.localStorage.getItem(this.accessTokenKey);\r\n\t\t\t\t\tif (tokenLocalStorage !== null) {\r\n\t\t\t\t\t\tthis.loggerService.debug('Token read from local storage: ' + tokenLocalStorage);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn tokenLocalStorage;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to read from localStorage on not a browser platform!');\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\tcase TokenServiceMode.SESSIONSTORAGE:\r\n\t\t\t\tif (this.isBrowser && this.sessionStorage !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Trying to read token from session storage');\r\n\t\t\t\t\tconst tokenSessionStorage: string | null = this.sessionStorage.getItem(this.accessTokenKey);\r\n\t\t\t\t\tif (tokenSessionStorage !== null) {\r\n\t\t\t\t\t\tthis.loggerService.debug('Token read from session storage: ' + tokenSessionStorage);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn tokenSessionStorage;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to read from sessionStorage on not a browser platform!');\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\tcase TokenServiceMode.COOKIE: {\r\n\t\t\t\tthis.loggerService.debug('Trying to read token from session cookie');\r\n\t\t\t\tconst cookieAccessToken: string | null = this.cookieService.get(this.accessTokenKey);\r\n\t\t\t\tif (cookieAccessToken !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Token read from cookie: ' + cookieAccessToken);\r\n\t\t\t\t}\r\n\t\t\t\treturn cookieAccessToken;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic readAndStore(): void {\r\n\r\n\t}\r\n\r\n\tpublic delete(mode: TokenServiceMode | null): void {\r\n\t\tif (mode === null) {\r\n\t\t\tthis.loggerService.error('Invalid mode for token delete!');\r\n\t\t}\r\n\t\tswitch (mode) {\r\n\t\t\tcase TokenServiceMode.LOCALSTORAGE:\r\n\t\t\t\tif (this.localStorage !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Token deleted from local storage');\r\n\t\t\t\t\tthis.localStorage.removeItem(this.accessTokenKey);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.SESSIONSTORAGE:\r\n\t\t\t\tif (this.sessionStorage !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Token deleted from session storage');\r\n\t\t\t\t\tthis.sessionStorage.removeItem(this.accessTokenKey);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.COOKIE: {\r\n\t\t\t\tthis.loggerService.debug('Token deleted from cookie');\r\n\t\t\t\tthis.cookieService.delete(this.accessTokenKey);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.accessToken = null;\r\n\t}\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpRequest } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { InterceptorType, PrecheckNullable } from \"../interfaces\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class InterceptorsService {\r\n\r\n /**\r\n * Skip\r\n * \r\n * Skip interceptors from next http requests\r\n */\r\n\tskip: InterceptorType[] = [];\r\n\r\n /**\r\n * ResetSkip\r\n * \r\n * Resets to `skip` to empty array after first http request\r\n */\r\n resetSkip: boolean = true;\r\n\r\n\r\n /**\r\n * Precheck\r\n * \r\n * Tells the `PrecheckInterceptor` to set a header with the given value\r\n */\r\n precheck: PrecheckNullable = null;\r\n\r\n /**\r\n * ResetPrecheck\r\n * \r\n * Clear `precheck` after first http request \r\n */\r\n resetPrecheck: boolean = true;\r\n\r\n /**\r\n * Error callback function\r\n * \r\n * Function to call after every http error\r\n */\r\n\terrorCallbackfunction: ((httpErrorResponse: HttpErrorResponse) => void) | null = null;\r\n\r\n /**\r\n * Error skip status codes\r\n * \r\n * Skips the given status codes from `errorCallbackfunction`\r\n */\r\n\terrorSkipStatusCodes: number[] = [];\r\n\r\n /**\r\n * Mock callback function\r\n * \r\n * Function to call to mock an http request\r\n */\r\n\tmockCallbackFunction: ((request: HttpRequest<any>, requestUrl: URL, next: HttpHandler) => Observable<HttpEvent<any>>) | null = null;\r\n\r\n /**\r\n * RequestId HTTP Header name\r\n */\r\n\trequestIdHttpHeaderName: string = 'Request-Id';\r\n\r\n /**\r\n * RequestId repeat\r\n */\r\n\trequestIdRepeat: boolean = false;\r\n\r\n /**\r\n * RequestId repeat delay\r\n */\r\n\trequestIdRepeatDelay: number = 0;\r\n\r\n /**\r\n * RequestId repeat statuscodes\r\n */\r\n\trequestIdRepeatStatusCodes: number[] = [];\r\n}","import { inject, Injectable } from \"@angular/core\";\r\nimport { LoggerService } from \"../services\";\r\nimport { InterceptorsService } from \"../services/interceptors.service\";\r\nimport { InterceptorType } from \"../interfaces\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class BaseInterceptor {\r\n\r\n\ttype: InterceptorType | null = null;\r\n\r\n\tinterceptorsService: InterceptorsService = inject(InterceptorsService);\r\n\tloggerService: LoggerService = inject(LoggerService);\r\n\r\n\tskipInterceptor(): boolean {\r\n\t\tif (this.type !== null && this.interceptorsService.skip.indexOf(InterceptorType.ALL) !== -1) {\r\n\t\t\tthis.loggerService.warn('Interceptor skipped, reason is ALL skipped: ' + this.type);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tconst skip: boolean = this.type !== null && this.interceptorsService.skip.indexOf(this.type) !== -1;\r\n\t\tif (skip) {\r\n\t\t\tthis.loggerService.warn('Interceptor skipped, reason is [' + this.interceptorsService.skip.join(', ') + '] skipped');\r\n\t\t}\r\n\t\treturn skip;\r\n\t}\r\n\r\n\tconstructor(\r\n\t\ttype: InterceptorType\r\n\t) {\r\n\t\tthis.type = type;\r\n\t\tthis.loggerService.info('Interceptor initialized: ' + this.type);\r\n\t}\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { TokenService } from '../services';\r\nimport { BaseInterceptor } from './base.interceptor';\r\nimport { InterceptorType } from '../interfaces';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class TokenInterceptor extends BaseInterceptor implements HttpInterceptor {\r\n\r\n\tprivate tokenService: TokenService = inject(TokenService);\r\n\r\n\tintercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n\t\tif (this.skipInterceptor()) {\r\n\t\t\treturn next.handle(request);\r\n\t\t}\r\n\t\tconst accessToken: string | null = this.tokenService.accessToken;\r\n\t\tif (accessToken !== null) {\r\n\t\t\trequest = request.clone({\r\n\t\t\t\tsetHeaders: {\r\n\t\t\t\t\tToken: accessToken\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn next.handle(request);\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper(InterceptorType.TOKEN);\r\n\t}\r\n}\r\n","import { HTTP_INTERCEPTORS } from \"@angular/common/http\";\r\nimport { EnvironmentProviders, makeEnvironmentProviders } from \"@angular/core\";\r\nimport { TokenInterceptor } from \"./interceptors/token.interceptor\";\r\n\r\nexport function provideTokenInterceptor(): EnvironmentProviders {\r\n return makeEnvironmentProviders([{\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: TokenInterceptor,\r\n multi: true\r\n }]);\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.InterceptorType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codefoxcore.mjs","sources":["../../../projects/codefoxcore/src/lib/classes/dialog.ref.class.ts","../../../projects/codefoxcore/src/lib/classes/dialog.config.class.ts","../../../projects/codefoxcore/src/lib/classes/dialog.injector.class.ts","../../../projects/codefoxcore/src/lib/tokens/alert.token.ts","../../../projects/codefoxcore/src/lib/tokens/dialog.token.ts","../../../projects/codefoxcore/src/lib/tokens/confirm.token.ts","../../../projects/codefoxcore/src/lib/interfaces.ts","../../../projects/codefoxcore/src/lib/tokens/message.token.ts","../../../projects/codefoxcore/src/lib/tokens/loglevel.token.ts","../../../projects/codefoxcore/src/lib/services/dialog.service.ts","../../../projects/codefoxcore/src/lib/services/message.service.ts","../../../projects/codefoxcore/src/lib/services/logger.service.ts","../../../projects/codefoxcore/src/lib/services/api.service.ts","../../../projects/codefoxcore/src/lib/helpers.ts","../../../projects/codefoxcore/src/lib/services/cookie.service.ts","../../../projects/codefoxcore/src/lib/services/token.service.ts","../../../projects/codefoxcore/src/lib/services/interceptors.service.ts","../../../projects/codefoxcore/src/lib/interceptors/base.interceptor.ts","../../../projects/codefoxcore/src/lib/interceptors/token.interceptor.ts","../../../projects/codefoxcore/src/lib/providers.ts","../../../projects/codefoxcore/src/codefoxcore.ts"],"sourcesContent":["import { filter, Observable, Subject, takeUntil } from \"rxjs\";\r\nimport { CfDialogCloseParams } from \"../interfaces\";\r\nimport { MessageService } from \"../services\";\r\nimport { DialogConfig } from \"../classes\";\r\n\r\nexport class DialogRef<T = any> {\r\n\tmessageService: MessageService | null = null;\r\n dialogConfig: DialogConfig | null = null;\r\n\tprivate readonly _onClose: Subject<any> = new Subject<any>();\r\n onClose: Observable<T | undefined> = this._onClose.asObservable();\r\n onCloseValue: Observable<T> = this._onClose.pipe(filter(result => result !== undefined && result !== null));\r\n onCloseOnValue: (value: any) => Observable<any> = (value: any) => this._onClose.pipe(filter(result => result === value));\r\n private readonly _onMessage: Subject<any> = new Subject<any>();\r\n\tonMessage: Observable<any> = this._onMessage.asObservable();\r\n private readonly _onDestroy = new Subject<any>();\r\n onDestroy: Observable<any> = this._onDestroy.asObservable();\r\n\tsavedTitle: string = '';\r\n\ttitle: string | null = null;\r\n\topened: Date = new Date();\r\n\tprivate doClose(result?: any, params: CfDialogCloseParams = {}): void {\r\n\t\tif (params.message !== undefined && this.messageService !== null) {\r\n\t\t\tthis.messageService.show(params.message.title, params.message.message, params.message);\r\n\t\t}\r\n\t\tthis._onClose.next(result); \r\n\t}\r\n close(result?: any, params: CfDialogCloseParams = {}): void { \r\n\t\tif (this.dialogConfig === null || this.dialogConfig.beforeClose === null) {\r\n\t\t\tthis.doClose(result, params);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tif (this.dialogConfig.beforeClose instanceof Promise) {\r\n\t\t\tthis.dialogConfig.beforeClose.then((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t}).catch(() => {});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.dialogConfig.beforeClose instanceof Observable) {\r\n\t\t\tthis.dialogConfig.beforeClose.pipe(takeUntil(this._onClose)).subscribe((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tconst beforeCloseResult: boolean | Observable<boolean> | Promise<boolean> = this.dialogConfig.beforeClose();\r\n\r\n\t\tif (beforeCloseResult instanceof Promise) {\r\n\t\t\tbeforeCloseResult.then((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t}).catch(() => {});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (beforeCloseResult instanceof Observable) {\r\n\t\t\tbeforeCloseResult.pipe(takeUntil(this._onClose)).subscribe((value: boolean) => {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.doClose(result, params);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (beforeCloseResult) {\r\n\t\t\tthis.doClose(result, params);\r\n\t\t}\r\n\t}\r\n forceClose(result?: any): void {\r\n this.doClose(result);\r\n }\r\n\tmessage(message: any): void { this._onMessage.next(message); }\r\n destroy(): void { this._onDestroy.next(undefined); }\r\n}\r\n","import { ResolveData } from \"@angular/router\";\r\nimport { Observable } from \"rxjs\";\r\nimport { DialogConfiguration } from \"../interfaces\";\r\n\r\nexport class DialogConfig implements DialogConfiguration {\r\n showCloseIcon: boolean = true;\r\n\tbeforeClose: null | (() => boolean | Observable<boolean> | Promise<boolean>) | Observable<boolean> | Promise<boolean> = null;\r\n\tignoreKeyUp: boolean = false;\r\n data: {[key: (string | number)]: any} = {};\r\n noPadding: boolean = false;\r\n\tkeepActiveElement: boolean = false;\r\n\tcontainerClasses: string[] = [];\r\n\tdialogClasses: string[] = [];\r\n resolve: ResolveData = {};\r\n\ttitle: string | null = null;\r\n contentElement: Element | null = null;\r\n single: boolean = false;\r\n width: string | null = null;\r\n\theight: string | null = null;\r\n getData(key: string | number, defaultOnUndefined: any = null): any {\r\n return this.data[key] !== undefined ? this.data[key] : defaultOnUndefined;\r\n }\r\n}\r\n","import { InjectionToken, Injector, Type } from \"@angular/core\";\r\n\r\nexport class DialogInjector implements Injector {\r\n constructor(private _parentInjector: Injector, private _additionalTokens: WeakMap<any, any>) { }\r\n get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: {}): T;\r\n get(token: any, notFoundValue?: any): any;\r\n get(token: any, notFoundValue?: any, _?: any): any {\r\n const value = this._additionalTokens.get(token);\r\n if (value) { return value; }\r\n return this._parentInjector.get<any>(token, notFoundValue);\r\n }\r\n}","import { InjectionToken } from \"@angular/core\";\r\nimport { AlertButtonConfiguration, AlertConfiguration } from \"../interfaces\";\r\n\r\nexport const ALERT_DEFAULT_BUTTON_CONFIGURATION: InjectionToken<AlertButtonConfiguration> = new InjectionToken('Alert default button', {\r\n\tfactory: (): AlertButtonConfiguration => {\r\n\t\treturn {\r\n\t\t\tlabel: 'alert.ok',\r\n\t\t\tseverity: 'success',\r\n\t\t\tcallback: ({ dialogRef }) => {\r\n\t\t\t\tdialogRef.close();\r\n\t\t\t},\r\n\t\t\tfocus: true,\r\n\t\t\ttranslateLabel: true\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport const ALERT_CONFIGURATIONS: InjectionToken<{[key: string]: AlertConfiguration}> = new InjectionToken('Alert configurations predefined', {\r\n factory: (): {[key: string]: AlertConfiguration} => {\r\n return {};\r\n }\r\n});\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { PredefinedDialogs } from \"../interfaces\";\r\n\r\nexport const PREDEFINED_DIALOGS: InjectionToken<PredefinedDialogs> = new InjectionToken('Predefined dialogs', {\r\n factory: (): PredefinedDialogs => {\r\n return {};\r\n }\r\n});\r\n\r\nexport const OPENED_DIALOG_BODY_CLASS: InjectionToken<string | null> = new InjectionToken('Opened dialog body class', {\r\n factory: (): string | null => {\r\n return null;\r\n }\r\n});\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { ConfirmConfiguration } from \"../interfaces\";\r\n\r\nexport const CONFIRM_CONFIGURATIONS: InjectionToken<{[key: string]: ConfirmConfiguration}> = new InjectionToken('Confirm configurations predefined', {\r\n factory: (): {[key: string]: ConfirmConfiguration} => {\r\n return {};\r\n }\r\n});\r\n","import { ComponentRef, Type } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { DialogRef } from \"./classes/dialog.ref.class\";\r\n\r\nexport interface DialogComponentRefContainer {\r\n componentRef: ComponentRef<any>;\r\n container: HTMLDivElement;\r\n\topenIndex: number;\r\n}\r\n\r\nexport type PredefinedDialogs = {[key: string]: (() => Promise<Type<any>>) | {component: () => Promise<Type<any>>, configuration: DialogConfiguration}};\r\n\r\nexport interface DialogConfiguration {\r\n showCloseIcon?: boolean;\r\n\tbeforeClose?: CfDialogConfigurationBeforeClose;\r\n\tignoreKeyUp?: boolean;\r\n data?: any;\r\n noPadding?: boolean;\r\n\tkeepActiveElement?: boolean;\r\n\tcontainerClasses?: string[];\r\n\tdialogClasses?: string[];\r\n\ttitle?: string | null;\r\n contentElement?: Element | null;\r\n single?: boolean;\r\n width?: string | null;\r\n\theight?: string | null;\r\n}\r\n\r\nexport type CfDialogConfigurationBeforeClose = null | (() => boolean | Observable<boolean> | Promise<boolean>) | Observable<boolean> | Promise<boolean>;\r\n\r\nexport interface ConfirmConfiguration {\r\n title: string;\r\n text: string;\r\n acceptText: string;\r\n declineText: string;\r\n\thideDeclineButton?: boolean;\r\n switchButtonColors?: boolean;\r\n acceptTimeout?: number;\r\n acceptValidationText?: string;\r\n acceptValidationMode?: AcceptValidationMode;\r\n acceptValidationLabel?: string;\r\n}\r\n\r\nexport interface AlertConfiguration {\r\n title: string;\r\n text: string;\r\n\tshowCloseIcon?: boolean;\r\n\tbutton?: Partial<AlertButtonConfiguration>;\r\n}\r\n\r\nexport enum AcceptValidationMode {\r\n PATTERN = 'PATTERN',\r\n TEXT = 'TEXT'\r\n}\r\n\r\nexport interface AlertButtonConfiguration {\r\n\tlabel: string;\r\n\tseverity: string;\r\n\tcallback: (params: {dialogRef: DialogRef}) => void;\r\n\ttranslateLabel: boolean;\r\n\tfocus: boolean;\r\n}\r\n\r\nexport interface CfDialogCloseParams {\r\n message?: MessagePartial;\r\n}\r\n\r\nexport interface MessagePartial extends Partial<MessageConfiguration> {\r\n title: string;\r\n message: string;\r\n}\r\n\r\nexport interface MessageConfiguration {\r\n closeable: boolean;\r\n position: MessagePosition;\r\n lifetime: number | null;\r\n severity: MessageSeverity;\r\n\tkeepOnHover: boolean;\r\n}\r\nexport enum MessagePosition {\r\n TOP = 'top',\r\n BOTTOM = 'bottom'\r\n}\r\n\r\nexport enum MessageSeverity {\r\n SUCCESS = 'success',\r\n WARNING = 'warning',\r\n DANGER = 'danger',\r\n INFO = 'info'\r\n}\r\n\r\nexport interface LoadingConfiguration {\r\n title: string;\r\n text: string;\r\n\tloadingIcon?: string;\r\n iconSize?: number;\r\n}\r\n\r\nexport interface ModalWithButtonsConfiguration {\r\n title: string;\r\n text: string;\r\n\tshowCloseIcon?: boolean;\r\n\tbuttons: ButtonConfiguration[];\r\n}\r\n\r\nexport interface ButtonConfiguration {\r\n\tlabel: string;\r\n\tseverity: string;\r\n\tcallback?: (params: {dialogRef: DialogRef}) => void;\r\n\trouterLink?: any;\r\n\tfocus?: boolean;\r\n\tpermission?: string | string[];\r\n\ttranslateLabel?: boolean;\r\n}\r\n\r\nexport interface Message extends MessageConfiguration {\r\n title: string;\r\n message: string;\r\n}\r\n\r\nexport enum LogLevel {\r\n All = 0,\r\n Debug = 1,\r\n Info = 2,\r\n Warn = 3,\r\n Error = 4,\r\n Fatal = 5,\r\n Off = 6\r\n}\r\n\r\nexport enum TokenServiceMode {\r\n LOCALSTORAGE = 0,\r\n SESSIONSTORAGE = 1,\r\n COOKIE = 2\r\n}\r\n\r\nexport enum InterceptorType {\r\n ALL = 'ALL',\r\n ERROR = 'ERROR',\r\n LOADER = 'LOADER',\r\n MOCK = 'MOCK',\r\n TOKEN = 'TOKEN',\r\n PRECHECK = 'PRECHECK',\r\n LOCK = 'LOCK',\r\n\tREQUESTID = 'REQUESTID'\r\n}\r\n\r\nexport enum Precheck {\r\n ERROR = \"ERROR\",\r\n WARNING = \"WARNING\"\r\n}\r\n\r\nexport type PrecheckNullable = Precheck | null;\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { MessageConfiguration, MessagePosition, MessageSeverity } from \"../interfaces\";\r\n\r\nexport const MESSAGE_DEFAULT_CONFIGURATION: InjectionToken<MessageConfiguration> = new InjectionToken('Message default configuration', {\r\n\tfactory: (): MessageConfiguration => {\r\n\t\treturn {\r\n\t\t\tcloseable: true,\r\n\t\t\tlifetime: 3000,\r\n\t\t\tposition: MessagePosition.TOP,\r\n\t\t\tseverity: MessageSeverity.SUCCESS,\r\n\t\t\tkeepOnHover: false\r\n\t\t};\r\n\t}\r\n});\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { LogLevel } from \"../interfaces\";\r\n\r\nexport const LOG_LEVEL: InjectionToken<LogLevel> = new InjectionToken('Log level', {\r\n factory: (): LogLevel => {\r\n return LogLevel.All;\r\n }\r\n});\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n EmbeddedViewRef,\r\n inject,\r\n Injectable,\r\n Injector,\r\n PLATFORM_ID,\r\n Type\r\n} from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\nimport { AlertConfiguration, DialogConfiguration, ConfirmConfiguration, LoadingConfiguration, ModalWithButtonsConfiguration, PredefinedDialogs, DialogComponentRefContainer } from '../interfaces';\r\nimport { DialogConfig, DialogInjector, DialogRef } from '../classes';\r\nimport { ALERT_CONFIGURATIONS, PREDEFINED_DIALOGS, CONFIRM_CONFIGURATIONS, OPENED_DIALOG_BODY_CLASS } from '../tokens';\r\nimport { MessageService } from '../services';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n\r\n\tprivate injector: Injector = inject(Injector);\r\n\tprivate predefinedConfirmConfigurations: {[key: string]: ConfirmConfiguration} = inject(CONFIRM_CONFIGURATIONS);\r\n\tprivate predefinedAlertConfigurations: {[key: string]: AlertConfiguration} = inject(ALERT_CONFIGURATIONS);\r\n\tprivate predefinedDialogs: PredefinedDialogs = inject(PREDEFINED_DIALOGS);\r\n\tprivate openedDialogBodyClass: string | null = inject(OPENED_DIALOG_BODY_CLASS);\r\n\r\n\ttitle: Title = inject(Title);\r\n\tmessageService: MessageService = inject(MessageService);\r\n\r\n\tdialogs: Map<DialogRef, DialogComponentRefContainer> = new Map();\r\n\tdialogCountChanged: Subject<number> = new Subject();\r\n\topenIndex: number = 1;\r\n\tplatformId: Object = inject(PLATFORM_ID);\r\n\r\n constructor() {\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tdocument.addEventListener(\"keyup\", (keyboardEvent: KeyboardEvent) => {\r\n\t\t\t\tif (keyboardEvent.key.toLowerCase() === 'escape') {\r\n\t\t\t\t\tlet lastOpenIndex: number = 0;\r\n\t\t\t\t\tlet lastOpenedDialogRef: DialogRef | null = null;\r\n\t\t\t\t\tfor (const [dialogRef, cfDialogComponentRefContainer] of this.dialogs.entries()) {\r\n\t\t\t\t\t\tif (cfDialogComponentRefContainer.openIndex > lastOpenIndex) {\r\n\t\t\t\t\t\t\tlastOpenIndex = cfDialogComponentRefContainer.openIndex;\r\n\t\t\t\t\t\t\tlastOpenedDialogRef = dialogRef;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\tif (lastOpenedDialogRef !== null && lastOpenedDialogRef.dialogConfig !== null) {\r\n\t\t\t\t\t\tif (lastOpenedDialogRef.dialogConfig.ignoreKeyUp || document.activeElement instanceof HTMLInputElement || document.activeElement instanceof HTMLTextAreaElement) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\t\tlastOpenedDialogRef.close();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.dialogCountChanged.subscribe((size: number) => {\r\n\t\t\tif (isPlatformBrowser(this.platformId) && this.openedDialogBodyClass !== null) {\r\n\t\t\t\tif (size === 0) {\r\n\t\t\t\t\tdocument.body.classList.remove(this.openedDialogBodyClass);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdocument.body.classList.add(this.openedDialogBodyClass);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t} \r\n\r\n\tasync openPredefined<T = any>(name: string, dialogConfiguration: DialogConfiguration = {}): Promise<DialogRef<T>> {\r\n\t\tif (this.predefinedDialogs[name] === undefined) {\r\n\t\t\tthrow Error('Dialog with name \"' + name + '\" not found!');\r\n\t\t}\r\n\t\tconst predefinedDialog = this.predefinedDialogs[name];\r\n\t\tif (typeof predefinedDialog === 'function') {\r\n\t\t\treturn this.openImport(predefinedDialog, dialogConfiguration);\r\n\t\t}\r\n\t\treturn this.openImport(predefinedDialog.component, {...predefinedDialog.configuration, ...dialogConfiguration});\r\n\t}\r\n\r\n\tasync openImport<T = any>(component: () => Promise<Type<any>>, dialogConfiguration: DialogConfiguration = {}): Promise<DialogRef<T>> {\r\n\t\treturn new Promise(async (resolve) => {\r\n\t\t\tresolve(this.open<T>(await component(), dialogConfiguration));\r\n\t\t});\r\n\t}\r\n\r\n open<T = any>(component: Type<any>, dialogConfiguration: DialogConfiguration = {}): DialogRef<T> {\r\n\r\n\t\tfor (let dialog of this.dialogs.entries()) {\r\n\t\t\tif (\r\n\t\t\t\t(dialogConfiguration.single && dialog[1].componentRef.componentType.name === component.name) ||\r\n\t\t\t\t(dialog[0].dialogConfig !== null && dialog[0].dialogConfig.single && dialog[1].componentRef.componentType.name === component.name)\r\n\t\t\t) {\r\n\t\t\t\treturn dialog[0];\r\n\t\t\t}\r\n\t\t}\r\n\r\n const dialogConfig: DialogConfig = this.createDialogConfig(dialogConfiguration);\r\n\r\n\t\tif (!dialogConfig.keepActiveElement) {\r\n\t\t\tif (document.activeElement instanceof HTMLElement) {\r\n\t\t\t\tdocument.activeElement.blur();\r\n\t\t\t}\r\n\t\t}\r\n\r\n const dialogRef: DialogRef<T> = this.appendToBody(component, dialogConfig);\r\n\t\tdialogRef.messageService = this.messageService;\r\n\t\tdialogRef.dialogConfig = dialogConfig;\r\n\r\n\t\tthis.changeAndStoreTitle(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n\tchangeAndStoreTitle(dialogRef: DialogRef): void {\r\n\t\tdialogRef.savedTitle = this.title.getTitle();\r\n\t\tif (dialogRef.dialogConfig !== null && dialogRef.dialogConfig.title !== null) {\r\n\t\t\tthis.title.setTitle(dialogRef.dialogConfig.title);\r\n\t\t}\r\n\t}\r\n\r\n createDialogConfig(dialogConfiguration: DialogConfiguration): DialogConfig {\r\n const dialogConfig: DialogConfig = new DialogConfig();\r\n if (dialogConfiguration.showCloseIcon !== undefined) {\r\n dialogConfig.showCloseIcon = dialogConfiguration.showCloseIcon;\r\n }\r\n\t\tif (dialogConfiguration.beforeClose !== undefined) {\r\n dialogConfig.beforeClose = dialogConfiguration.beforeClose;\r\n }\r\n\t\tif (dialogConfiguration.ignoreKeyUp !== undefined) {\r\n dialogConfig.ignoreKeyUp = dialogConfiguration.ignoreKeyUp;\r\n }\r\n if (dialogConfiguration.data !== undefined) {\r\n dialogConfig.data = dialogConfiguration.data;\r\n }\r\n if (dialogConfiguration.noPadding !== undefined) {\r\n dialogConfig.noPadding = dialogConfiguration.noPadding;\r\n }\r\n\t\tif (dialogConfiguration.keepActiveElement !== undefined) {\r\n\t\t\tdialogConfig.keepActiveElement = dialogConfiguration.keepActiveElement;\r\n\t\t}\r\n\t\tif (dialogConfiguration.containerClasses !== undefined) {\r\n\t\t\tdialogConfig.containerClasses = dialogConfiguration.containerClasses;\r\n\t\t}\r\n\t\tif (dialogConfiguration.dialogClasses !== undefined) {\r\n\t\t\tdialogConfig.dialogClasses = dialogConfiguration.dialogClasses;\r\n\t\t}\r\n\t\tif (dialogConfiguration.title !== undefined) {\r\n\t\t\tdialogConfig.title = dialogConfiguration.title;\r\n\t\t}\r\n\t\tif (dialogConfiguration.contentElement !== undefined) {\r\n\t\t\tdialogConfig.contentElement = dialogConfiguration.contentElement;\r\n\t\t}\r\n\t\tif (dialogConfiguration.single !== undefined) {\r\n\t\t\tdialogConfig.single = dialogConfiguration.single;\r\n\t\t}\r\n\t\tif (dialogConfiguration.width !== undefined) {\r\n\t\t\tdialogConfig.width = dialogConfiguration.width;\r\n\t\t}\r\n\t\tif (dialogConfiguration.height !== undefined) {\r\n\t\t\tdialogConfig.height = dialogConfiguration.height;\r\n\t\t}\r\n return dialogConfig;\r\n }\r\n\r\n appendToBody(component: Type<any>, dialogConfig: DialogConfig): DialogRef {\r\n\r\n\t\tconst appRef: ApplicationRef = this.injector.get(ApplicationRef);\r\n\r\n // CREATE INJECTION TOKENS\r\n const tokens: WeakMap<any, any> = new WeakMap();\r\n\r\n // CREATE DIALOG CONFIGURATION CLASS\r\n tokens.set(DialogConfig, dialogConfig);\r\n\r\n // CREATE DIALOG REFERENCE CLASS\r\n const dialogRef: DialogRef = new DialogRef();\r\n tokens.set(DialogRef, dialogRef);\r\n\r\n // LISTEN ON DIALOG CLOSE\r\n const closeSub: Subscription = dialogRef.onClose.subscribe(() => {\r\n this.removeFromBody(dialogRef);\r\n closeSub.unsubscribe();\r\n });\r\n\r\n // CREATE COMPONENT REF\r\n const componentRef: ComponentRef<any> = createComponent(component, {\r\n\t\t\tenvironmentInjector: appRef.injector,\r\n\t\t\telementInjector: new DialogInjector(this.injector, tokens)\r\n\t\t});\r\n\r\n // ATTACH VIEW TO ANGULAR\r\n appRef.attachView(componentRef.hostView);\r\n\r\n // CREATE DIALOG CONTAINER ELEMENT\r\n const dialogContainer: HTMLDivElement = document.createElement('div');\r\n dialogContainer.classList.add('cf-dialog-container');\r\n\t\tif (dialogConfig.containerClasses.length > 0) {\r\n\t\t\tdialogContainer.classList.add(...dialogConfig.containerClasses);\r\n\t\t}\r\n\r\n\t\t// APPEND DOM ELEMENT TO DIALOG\r\n\t\tconst childDomElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\r\n\t\tchildDomElem.classList.add('cf-dialog');\r\n\t\t\r\n\t\tif (dialogConfig.width !== null) {\r\n\t\t\tchildDomElem.style.width = dialogConfig.width;\r\n\t\t}\r\n\t\tif (dialogConfig.height !== null) {\r\n\t\t\tchildDomElem.style.height = dialogConfig.height;\r\n\t\t}\r\n\t\tif (dialogConfig.noPadding) {\r\n childDomElem.classList.add('no-padding');\r\n }\r\n\t\tif (dialogConfig.dialogClasses.length > 0) {\r\n\t\t\tchildDomElem.classList.add(...dialogConfig.dialogClasses);\r\n\t\t}\r\n\r\n\t\tif (dialogConfig.contentElement !== null) {\r\n\t\t\tchildDomElem.appendChild(dialogConfig.contentElement);\r\n\t\t}\r\n\r\n\t\tdialogContainer.appendChild(childDomElem);\r\n\r\n // CLOSEABLE? APPEND BUTTON\r\n if (dialogConfig.showCloseIcon) {\r\n const closeElement: HTMLDivElement = document.createElement('div');\r\n closeElement.classList.add(...['cf-dialog-close', 'remixicon', 'close-line']);\r\n closeElement.onclick = () => {\r\n dialogRef.close();\r\n };\r\n childDomElem.appendChild(closeElement);\r\n }\r\n\r\n // APPEND DIALOG CONTAINER TO BODY\r\n document.body.appendChild(dialogContainer);\r\n\r\n this.dialogs.set(dialogRef, {\r\n componentRef,\r\n container: dialogContainer,\r\n\t\t\topenIndex: this.openIndex \r\n });\r\n\t\tthis.dialogCountChanged.next(this.dialogs.size);\r\n\r\n\t\tthis.openIndex++;\r\n\r\n return dialogRef;\r\n }\r\n\r\n removeFromBody(dialogRef: DialogRef): void {\r\n\r\n\t\tconst appRef: ApplicationRef = this.injector.get(ApplicationRef);\r\n\r\n if (!dialogRef || !this.dialogs.has(dialogRef)) {\r\n return;\r\n }\r\n const dialogComponentRefContainer: DialogComponentRefContainer | undefined = this.dialogs.get(dialogRef);\r\n if (dialogComponentRefContainer == undefined) {\r\n return;\r\n }\r\n\t\t\r\n appRef.detachView(dialogComponentRefContainer.componentRef.hostView);\r\n\r\n if (dialogComponentRefContainer.container !== null) {\r\n dialogComponentRefContainer.container.remove();\r\n }\r\n dialogComponentRefContainer.componentRef.destroy();\r\n this.dialogs.delete(dialogRef);\r\n\t\tthis.dialogCountChanged.next(this.dialogs.size);\r\n\r\n\t\tif (this.dialogs.size === 0) {\r\n\t\t\tthis.openIndex = 1;\r\n\t\t}\r\n\r\n\t\t// Restore title\r\n\t\tif (this.dialogs.size === 0) {\r\n\t\t\tthis.title.setTitle(dialogRef.savedTitle);\r\n\t\t} else {\r\n\t\t\tlet latestOpenedDialogRef: DialogRef | null = null;\r\n\t\t\tthis.dialogs.forEach((_, dialogRef: DialogRef) => {\r\n\t\t\t\tif (latestOpenedDialogRef === null) {\r\n\t\t\t\t\tlatestOpenedDialogRef = dialogRef;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (latestOpenedDialogRef.opened < dialogRef.opened) {\r\n\t\t\t\t\t\tlatestOpenedDialogRef = dialogRef;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (latestOpenedDialogRef !== null) {\r\n\t\t\t\t//this.title.setTitle(latestOpenedDialogRef.savedTitle);\r\n\t\t\t} else {\r\n\t\t\t\tthis.title.setTitle(dialogRef.savedTitle);\r\n\t\t\t}\r\n\t\t}\r\n }\r\n\r\n\tconfirm(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): Promise<boolean> {\r\n\t\tif (typeof configuration === 'string') {\r\n\t\t\tconst predefinedConfirmConfiguration: ConfirmConfiguration | undefined = this.predefinedConfirmConfigurations[configuration];\r\n\t\t\tif (predefinedConfirmConfiguration === undefined) {\r\n\t\t\t\tthrow new Error('Predefined confirm configuration not found for: ' + configuration);\r\n\t\t\t}\r\n\t\t\tconfiguration = predefinedConfirmConfiguration;\r\n\t\t}\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.open(component, {\r\n\t\t\t\t...dialogConfiguration,\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tconfiguration\r\n\t\t\t\t},\r\n\t\t\t\tignoreKeyUp: true,\r\n\t\t\t\tshowCloseIcon: false\r\n\t\t\t}).onClose.pipe(filter(value => value !== undefined)).subscribe((accepted: boolean) => {\r\n\t\t\t\tif (accepted) {\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treject(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n async confirmAsync(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): Promise<boolean> {\r\n return await new Promise((resolve) => {\r\n this.confirm(configuration, dialogConfiguration, component).then(() => {\r\n resolve(true);\r\n }).catch(() => {\r\n resolve(false);\r\n });\r\n });\r\n }\r\n\t\r\n\tconfirmAccept(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): Promise<boolean> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tthis.confirm(configuration, dialogConfiguration, component).then(() => resolve(true)).catch(() => {});\r\n\t\t});\r\n\t}\r\n\t\r\n\tconfirmDecline(\r\n\t\tconfiguration: ConfirmConfiguration | string,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): Promise<boolean> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tthis.confirm(configuration, dialogConfiguration, component).then(() => {}).catch(() => resolve(true));\r\n\t\t});\r\n\t}\r\n\r\n\tshowLoading(\r\n\t\tconfiguration: LoadingConfiguration,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): DialogRef {\r\n\t\treturn this.open(component, {\r\n\t\t\t...dialogConfiguration,\r\n\t\t\tshowCloseIcon: false,\r\n\t\t\tignoreKeyUp: true,\r\n\t\t\tdata: {\r\n\t\t\t\tconfiguration\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tshowAlert(\r\n\t\tconfiguration: AlertConfiguration | string,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): Promise<void> {\r\n\t\tif (typeof configuration === 'string') {\r\n\t\t\tconst predefinedAlertConfiguration: AlertConfiguration | undefined = this.predefinedAlertConfigurations[configuration];\r\n\t\t\tif (predefinedAlertConfiguration === undefined) {\r\n\t\t\t\tthrow new Error('Predefined alert configuration not found for: ' + configuration);\r\n\t\t\t}\r\n\t\t\tconfiguration = predefinedAlertConfiguration;\r\n\t\t}\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\treturn this.open(component, {\r\n\t\t\t\t...dialogConfiguration,\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tconfiguration\r\n\t\t\t\t},\r\n\t\t\t\tignoreKeyUp: true,\r\n\t\t\t\tshowCloseIcon: false\r\n\t\t\t}).onClose.subscribe(() => {\r\n\t\t\t\tresolve();\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tshowModalWithButtons(\r\n\t\tconfiguration: ModalWithButtonsConfiguration,\r\n\t\tdialogConfiguration: DialogConfiguration = {},\r\n\t\tcomponent: Type<any>\r\n\t): DialogRef {\r\n\t\treturn this.open(component, {\r\n\t\t\t...dialogConfiguration,\r\n\t\t\tdata: {\r\n\t\t\t\tconfiguration\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Subject, Subscription, timer } from 'rxjs';\r\nimport { Message, MessageConfiguration, MessageSeverity } from '../interfaces';\r\nimport { MESSAGE_DEFAULT_CONFIGURATION } from '../tokens';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class MessageService {\r\n\r\n /**\r\n * Default configuration\r\n * \r\n * Can be changed if you overwrite it or use the `MESSAGE_DEFAULT_CONFIGURATION` InjectionToken\r\n */\r\n public defaultConfiguration: MessageConfiguration = inject(MESSAGE_DEFAULT_CONFIGURATION);\r\n \r\n /**\r\n * Message subject\r\n */\r\n private messageSubject: Subject<Message> = new Subject();\r\n\r\n /**\r\n * Show\r\n * \r\n * Displays message with the given configuration\r\n * \r\n * @param messageConfiguration `Partial<MessageConfiguration>`\r\n */\r\n public show(title: string, message: string, configuration?: Partial<MessageConfiguration>): void {\r\n this.messageSubject.next({\r\n\t\t\t...this.defaultConfiguration,\r\n ...configuration,\r\n\t\t\ttitle,\r\n\t\t\tmessage\r\n });\r\n }\r\n\r\n /**\r\n * Show success message\r\n * \r\n * Display a message with default success severity\r\n * \r\n * @param title `string`, required\r\n * @param message `string`, required\r\n * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n */\r\n\tpublic showSuccessMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.SUCCESS\r\n\t\t});\r\n\t}\r\n\r\n /**\r\n * Show danger message\r\n * \r\n * Display a message with default danger severity\r\n * \r\n * @param title `string`, required\r\n * @param message `string`, required\r\n * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n */\r\n\tpublic showDangerMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.DANGER,\r\n\t\t\tkeepOnHover: true\r\n\t\t});\r\n\t}\r\n\r\n /**\r\n * Show warning message\r\n * \r\n * Display a message with default warning severity\r\n * \r\n * @param title `string`, required\r\n * @param message `string`, required\r\n * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n */\r\n\tpublic showWarningMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.WARNING\r\n\t\t});\r\n\t}\r\n\r\n /**\r\n * Show info message\r\n * \r\n * Display a message with default info severity\r\n * \r\n * @param title `string`, required\r\n * @param message `string`, required\r\n * @param lifetime `number`, optional, default is `this.defaultLifetime`\r\n * @param position `MessagePosition`, optional, default is `this.defaultPosition`\r\n * @param closeable `boolean`, optional, default is `this.defaultClosable`\r\n */\r\n\tpublic showInfoMessage(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\tconfiguration?: Partial<Omit<MessageConfiguration, 'severity'>>\r\n\t): void {\r\n\t\tthis.show(title, message, {\r\n\t\t\t...configuration,\r\n\t\t\tseverity: MessageSeverity.INFO\r\n\t\t});\r\n\t}\r\n\r\n private showMessage(message: Message): void {\r\n let container: HTMLElement | null = document.getElementById('cf-toasts-' + message.position + '-container');\r\n if (container === null) {\r\n container = document.createElement('div');\r\n container.id = 'cf-toasts-' + message.position + '-container';\r\n document.body.appendChild(container);\r\n }\r\n\r\n const div: HTMLElement = this.createMessageHtmlElement(message);\r\n\r\n container.appendChild(div);\r\n\r\n if (message.lifetime !== null) {\r\n\r\n\t\t\tlet disposeTimerSubscription: Subscription | null = timer(message.lifetime + 500).subscribe(() => {\r\n\t\t\t\tthis.hideMessage(div);\r\n\t\t\t});\r\n\r\n\t\t\tif (message.keepOnHover) {\r\n\t\t\t\tdiv.addEventListener('mouseenter', () => {\r\n\t\t\t\t\tif (disposeTimerSubscription !== null) {\r\n\t\t\t\t\t\tdisposeTimerSubscription.unsubscribe();\r\n\t\t\t\t\t\tdisposeTimerSubscription = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n }\r\n }\r\n\r\n private createMessageHtmlElement(message: Message): HTMLElement {\r\n const div: HTMLElement = document.createElement('div');\r\n div.classList.add('cf-toast', 'cf-' + message.severity + '-toast');\r\n const titleDiv: HTMLElement = document.createElement('div');\r\n titleDiv.classList.add('cf-toast-title');\r\n titleDiv.innerText = message.title;\r\n const messageDiv: HTMLElement = document.createElement('div');\r\n messageDiv.classList.add('cf-toast-message');\r\n messageDiv.innerText = message.message;\r\n div.appendChild(titleDiv);\r\n div.appendChild(messageDiv);\r\n if (message.closeable) {\r\n const closeIcon: HTMLElement = document.createElement('i');\r\n closeIcon.classList.add('close-icon', 'remixicon', 'close-line');\r\n closeIcon.onclick = () => {\r\n this.hideMessage(div, true);\r\n };\r\n div.appendChild(closeIcon);\r\n }\r\n return div;\r\n }\r\n\r\n private hideMessage(messageElement: HTMLElement, forceClose: boolean = false): void {\r\n messageElement.classList.add('hidden-toast');\r\n\r\n let remainOpen = false;\r\n messageElement.addEventListener('mouseenter', (() => {\r\n remainOpen = true;\r\n }));\r\n\r\n timer(500).subscribe(() => {\r\n if (remainOpen && !forceClose) {\r\n messageElement.classList.remove('hidden-toast');\r\n return;\r\n }\r\n messageElement.removeEventListener('mouseenter', (() => {}));\r\n messageElement.remove();\r\n });\r\n }\r\n\r\n constructor() {\r\n this.messageSubject.subscribe((message: Message) => {\r\n this.showMessage(message);\r\n });\r\n }\r\n\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { LogLevel } from '../interfaces';\r\nimport { LOG_LEVEL } from '../tokens';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class LoggerService {\r\n\r\n\tprivate _logLevel: LogLevel | null = inject(LOG_LEVEL);\r\n\r\n\tprivate logLevelColors: string[] = [\r\n\t\t'',\r\n\t\t'background-color: #D2BDF3; padding: 5px 10px;',\r\n\t\t'background-color: #A2DDFF; padding: 5px 10px;',\r\n\t\t'background-color: #FFD5C5; padding: 5px 10px;',\r\n\t\t'background-color: #EA4331; color: #FFFFFF; padding: 5px 10px;',\r\n\t\t'background-color: #F71900; color: #FFFFFF; padding: 5px 10px;',\r\n\t\t''\r\n\t];\r\n\r\n\tpublic debug(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Debug, group });\r\n\t}\r\n\r\n\tpublic info(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Info, group });\r\n\t}\r\n\r\n\tpublic warn(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Warn, group });\r\n\t}\r\n\r\n\tpublic error(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Error, group });\r\n\t}\r\n\r\n\tpublic fatal(log: any, group: boolean = false): void {\r\n\t\tthis.log({ log, logLevel: LogLevel.Fatal, group });\r\n\t}\r\n\r\n\tpublic groupEnd(): void {\r\n\t\tconsole.groupEnd();\r\n\t}\r\n\r\n\tprivate log(configuration: {\r\n\t\tlog: any,\r\n\t\tlogLevel: LogLevel,\r\n\t\tgroup: boolean\r\n\t}): void {\r\n\t\tif (this._logLevel === null || this._logLevel === LogLevel.Off || this._logLevel > configuration.logLevel) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (configuration.group) {\r\n\t\t\tconsole.group(configuration.log);\r\n\t\t} else {\r\n\t\t\tconsole.log('%c' + configuration.log, this.logLevelColors[configuration.logLevel]);\r\n\t\t}\r\n\t}\r\n\r\n\tset logLevel(logLevel: LogLevel | null) {\r\n\t\tthis._logLevel = logLevel;\r\n\t}\r\n\r\n\tget logLevel(): LogLevel | null {\r\n\t\treturn this._logLevel;\r\n\t}\r\n}\r\n","import { HttpClient, HttpParams } from \"@angular/common/http\";\r\nimport { inject, Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { LoggerService } from \"./logger.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class ApiService {\r\n\r\n\thttpClient: HttpClient = inject(HttpClient);\r\n\tloggerService: LoggerService = inject(LoggerService);\r\n\r\n\tprivate _apiBaseUrl: string | null = null;\r\n\r\n\tpublic post<T>(endPoint: (string|number)[], body: any): Observable<any> {\r\n\t\treturn this.httpClient.post<T>(this.generateUrl(endPoint), body);\r\n\t}\r\n\r\n\tpublic get<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.get<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic getFileArrayBuffer(endPoint: (string|number)[]): Observable<ArrayBuffer> {\r\n\t\treturn this.httpClient.get(this.generateUrl(endPoint), {\r\n\t\t\tresponseType: 'arraybuffer'\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getFileText(endPoint: (string|number)[]): Observable<string> {\r\n\t\treturn this.httpClient.get(this.generateUrl(endPoint), {\r\n\t\t\tresponseType: 'text'\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getWithHttpParams<T>(endPoint: (string|number)[], params: HttpParams | null = null): Observable<any> {\r\n\t\tif (params === null) {\r\n\t\t\treturn this.get(endPoint);\r\n\t\t} else {\r\n\t\t\treturn this.httpClient.get<T>(this.generateUrl(endPoint), {\r\n\t\t\t\tparams\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic delete<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.delete<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic patch<T>(endPoint: (string|number)[], body: any): Observable<any> {\r\n\t\treturn this.httpClient.patch<T>(this.generateUrl(endPoint), body);\r\n\t}\r\n\r\n\tpublic head<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.head<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic options<T>(endPoint: (string|number)[]): Observable<any> {\r\n\t\treturn this.httpClient.options<T>(this.generateUrl(endPoint));\r\n\t}\r\n\r\n\tpublic put<T>(endPoint: (string|number)[], body: any): Observable<any> {\r\n\t\treturn this.httpClient.put<T>(this.generateUrl(endPoint), body);\r\n\t}\r\n\r\n\tpublic generateUrl(endPoint: (string|number)[]): string {\r\n\t\tif (this._apiBaseUrl === null) {\r\n\t\t\tthrow new Error('No API base url set in generateUrl call!');\r\n\t\t}\r\n if (endPoint.length === 0) {\r\n return this._apiBaseUrl;\r\n }\r\n\t\tif (typeof endPoint[0] === 'string' && endPoint[0].startsWith('#')) {\r\n endPoint[0] = endPoint[0].slice(1);\r\n\t\t\treturn endPoint.map((v, i) => i === 0 ? v : encodeURIComponent(v)).join('/');\r\n\t\t}\r\n\t\treturn [this._apiBaseUrl, ...endPoint.map((v) => encodeURIComponent(v))].join('/');\r\n\t}\r\n\r\n\tset apiBaseUrl(apiBaseUrl: string) {\r\n\t\tthis.loggerService.info('Api Service base url set to: ' + apiBaseUrl);\r\n\t\tif (apiBaseUrl[apiBaseUrl.length - 1] === '/') {\r\n\t\t\tapiBaseUrl = apiBaseUrl.slice(0, apiBaseUrl.length - 1);\r\n\t\t}\r\n\t\tthis._apiBaseUrl = apiBaseUrl;\r\n\t}\r\n\r\n\tget apiBaseUrl(): string | null {\r\n\t\treturn this._apiBaseUrl;\r\n\t}\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from \"@angular/common\";\r\nimport { inject, PLATFORM_ID } from \"@angular/core\";\r\n\r\nexport function isBrowser(): boolean {\r\n\tconst platformId: Object = inject(PLATFORM_ID);\r\n\treturn isPlatformBrowser(platformId);\r\n}\r\n\r\nexport function localStorage(): Storage | null {\r\n\tconst document: Document = inject(DOCUMENT);\r\n\tif (document.defaultView !== null) {\r\n\t\treturn document.defaultView.window.localStorage;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nexport function sessionStorage(): Storage | null {\r\n\tconst document: Document = inject(DOCUMENT);\r\n\tif (document.defaultView !== null) {\r\n\t\treturn document.defaultView.window.sessionStorage;\r\n\t}\r\n\treturn null;\r\n}","import { DOCUMENT } from \"@angular/common\";\r\nimport { Injectable, inject } from \"@angular/core\";\r\nimport { isBrowser } from \"../helpers\";\r\nimport { LoggerService } from \"./logger.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CookieService {\r\n\r\n\tbrowser: boolean = isBrowser();\r\n\tdocument: Document = inject(DOCUMENT);\r\n\r\n\tloggerService: LoggerService = inject(LoggerService);\r\n\r\n\t/**\r\n\t * Get the value of a cookie by name, returns `null` if the cookie is not set\r\n\t * \r\n\t * @param name name of the cookie\r\n\t * @returns value of the cookie\r\n\t */\r\n\tget(name: string): string | null {\r\n\t\tif (!this.browser) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst cookies: {[key: string]: string} = this.cookies;\r\n\t\treturn cookies[name] || null;\r\n\t}\r\n\r\n\t/**\r\n\t * Set the value of a cookie with the given name\r\n\t * \r\n\t * @param name name of the cookie\r\n\t * @param value value of the cookie\r\n\t * @param expire expire of the cookie in seconds, if null, it will never expire\r\n\t * @param path path of the cookie, default is '/'\r\n\t * @param config optional configuration values (expire in seconds, path of cookie)\r\n\t */\r\n\tset(name: string, value: string, expire: number | null = null, path: string | null = '/'): void {\r\n\r\n\t\tif (!this.browser) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (path === null) {\r\n\t\t\tpath = '/';\r\n\t\t}\r\n\r\n\t\t// Default cookie informations\r\n\t\tlet cookie: string = `${name}=${value};`;\r\n\r\n\t\t// If we have an expire date, we need to set\r\n\t\tif (expire !== null) {\r\n\t\t\tlet d: Date = new Date();\r\n\t\t\td.setTime(d.getTime() + (expire * 1000));\r\n\t\t\tcookie += `expires=${d.toUTCString()};`;\r\n\t\t}\r\n\r\n\t\t// Set path\r\n\t\tcookie += `path=${path};`;\r\n\r\n\t\t// Log\r\n\t\tthis.loggerService.info('Cookie data to set: ' + cookie);\r\n\r\n\t\t// Set the cookie\r\n\t\tthis.document.cookie = cookie;\r\n\t}\r\n\r\n\t/**\r\n\t * Delete a cookie by its name\r\n\t * \r\n\t * @param name name of the cookie\r\n\t */\r\n\tdelete(name: string): void {\r\n\t\tif (!this.browser) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.set(name, '', -1);\r\n\t}\r\n\r\n\tget cookies(): {[key: string]: string} {\r\n\r\n\t\tif (!this.browser) {\r\n\t\t\treturn {};\r\n\t\t}\r\n\r\n\t\tconst cookies: string = this.document.cookie;\r\n\t\tif (cookies.length === 0) {\r\n\t\t\treturn {};\r\n\t\t}\r\n\t\tconst cookiesArray: string[] = cookies.split(';');\r\n\t\tconst cookiesObject: {[key: string]: string} = {};\r\n\t\tcookiesArray.forEach((cookiesArrayItem: string) => {\r\n\t\t\tconst cookiesArrayItemSplit: string[] = cookiesArrayItem.split('=');\r\n\t\t\tcookiesObject[cookiesArrayItemSplit[0].trim()] = cookiesArrayItemSplit[1];\r\n\t\t})\r\n\t\treturn cookiesObject;\r\n\t}\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { TokenServiceMode } from '../interfaces';\r\nimport { isBrowser, localStorage, sessionStorage } from '../helpers';\r\nimport { CookieService } from './cookie.service';\r\nimport { LoggerService } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TokenService {\r\n\r\n\tcookieService: CookieService = inject(CookieService);\r\n\tloggerService: LoggerService = inject(LoggerService);\r\n\tlocalStorage: Storage | null = localStorage();\r\n\tsessionStorage: Storage | null = sessionStorage();\r\n\tisBrowser: boolean = isBrowser();\r\n\r\n\tcookiePath: string | null = null;\r\n\taccessToken: string | null = null;\r\n\taccessTokenKey = 'acccessToken';\r\n\taccessTokenCookieExpireDays = 30;\r\n\tmode: TokenServiceMode = TokenServiceMode.LOCALSTORAGE;\r\n\r\n\tpublic init(accessTokenKey: string, mode: TokenServiceMode | null = null, readAndStore: boolean = true): void {\r\n\t\tthis.accessTokenKey = accessTokenKey;\r\n\t\tif (mode !== null) {\r\n\t\t\tthis.mode = mode;\r\n\t\t}\r\n\t\tif (readAndStore) {\r\n\t\t\tthis.accessToken = this.read();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic write(accessToken: string, mode: TokenServiceMode | null = null): void {\r\n\t\tthis.accessToken = accessToken;\r\n\t\tif (mode === null) {\r\n\t\t\tmode = this.mode;\r\n\t\t}\r\n\t\tswitch (mode) {\r\n\t\t\tcase TokenServiceMode.LOCALSTORAGE:\r\n\t\t\t\tif (this.isBrowser && this.localStorage !== null) {\r\n\t\t\t\t\tthis.localStorage.setItem(this.accessTokenKey, this.accessToken);\r\n\t\t\t\t\tthis.loggerService.debug('Token set to local storage: ' + this.accessToken);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to set localStorage on not a browser platform!');\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.SESSIONSTORAGE:\r\n\t\t\t\tif (this.isBrowser && this.sessionStorage !== null) {\r\n\t\t\t\t\tthis.sessionStorage.setItem(this.accessTokenKey, this.accessToken);\r\n\t\t\t\t\tthis.loggerService.debug('Token set to session storage: ' + this.accessToken);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to set sessionStorage on not a browser platform!');\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.COOKIE:\r\n\t\t\t\tthis.cookieService.set(this.accessTokenKey, this.accessToken, this.accessTokenCookieExpireDays * 24 * 60 * 60, this.cookiePath);\r\n\t\t\t\tthis.loggerService.debug('Token set to cookie: ' + this.accessToken);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t}\r\n\r\n\tpublic read(mode: TokenServiceMode | null = null): string | null {\r\n\t\tif (mode === null) {\r\n\t\t\tmode = this.mode;\r\n\t\t}\r\n\t\tswitch (mode) {\r\n\t\t\tcase TokenServiceMode.LOCALSTORAGE:\r\n\t\t\t\tthis.loggerService.debug('Trying to read token from local storage');\r\n\t\t\t\tif (this.isBrowser && this.localStorage !== null) {\r\n\t\t\t\t\tconst tokenLocalStorage: string | null = this.localStorage.getItem(this.accessTokenKey);\r\n\t\t\t\t\tif (tokenLocalStorage !== null) {\r\n\t\t\t\t\t\tthis.loggerService.debug('Token read from local storage: ' + tokenLocalStorage);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn tokenLocalStorage;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to read from localStorage on not a browser platform!');\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\tcase TokenServiceMode.SESSIONSTORAGE:\r\n\t\t\t\tif (this.isBrowser && this.sessionStorage !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Trying to read token from session storage');\r\n\t\t\t\t\tconst tokenSessionStorage: string | null = this.sessionStorage.getItem(this.accessTokenKey);\r\n\t\t\t\t\tif (tokenSessionStorage !== null) {\r\n\t\t\t\t\t\tthis.loggerService.debug('Token read from session storage: ' + tokenSessionStorage);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn tokenSessionStorage;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loggerService.error('Trying to read from sessionStorage on not a browser platform!');\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\tcase TokenServiceMode.COOKIE: {\r\n\t\t\t\tthis.loggerService.debug('Trying to read token from session cookie');\r\n\t\t\t\tconst cookieAccessToken: string | null = this.cookieService.get(this.accessTokenKey);\r\n\t\t\t\tif (cookieAccessToken !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Token read from cookie: ' + cookieAccessToken);\r\n\t\t\t\t}\r\n\t\t\t\treturn cookieAccessToken;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic readAndStore(): void {\r\n\r\n\t}\r\n\r\n\tpublic delete(mode: TokenServiceMode | null): void {\r\n\t\tif (mode === null) {\r\n\t\t\tthis.loggerService.error('Invalid mode for token delete!');\r\n\t\t}\r\n\t\tswitch (mode) {\r\n\t\t\tcase TokenServiceMode.LOCALSTORAGE:\r\n\t\t\t\tif (this.localStorage !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Token deleted from local storage');\r\n\t\t\t\t\tthis.localStorage.removeItem(this.accessTokenKey);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.SESSIONSTORAGE:\r\n\t\t\t\tif (this.sessionStorage !== null) {\r\n\t\t\t\t\tthis.loggerService.debug('Token deleted from session storage');\r\n\t\t\t\t\tthis.sessionStorage.removeItem(this.accessTokenKey);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase TokenServiceMode.COOKIE: {\r\n\t\t\t\tthis.loggerService.debug('Token deleted from cookie');\r\n\t\t\t\tthis.cookieService.delete(this.accessTokenKey);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.accessToken = null;\r\n\t}\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpRequest } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { InterceptorType, PrecheckNullable } from \"../interfaces\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class InterceptorsService {\r\n\r\n /**\r\n * Skip\r\n * \r\n * Skip interceptors from next http requests\r\n */\r\n\tskip: InterceptorType[] = [];\r\n\r\n /**\r\n * ResetSkip\r\n * \r\n * Resets to `skip` to empty array after first http request\r\n */\r\n resetSkip: boolean = true;\r\n\r\n\r\n /**\r\n * Precheck\r\n * \r\n * Tells the `PrecheckInterceptor` to set a header with the given value\r\n */\r\n precheck: PrecheckNullable = null;\r\n\r\n /**\r\n * ResetPrecheck\r\n * \r\n * Clear `precheck` after first http request \r\n */\r\n resetPrecheck: boolean = true;\r\n\r\n /**\r\n * Error callback function\r\n * \r\n * Function to call after every http error\r\n */\r\n\terrorCallbackfunction: ((httpErrorResponse: HttpErrorResponse) => void) | null = null;\r\n\r\n /**\r\n * Error skip status codes\r\n * \r\n * Skips the given status codes from `errorCallbackfunction`\r\n */\r\n\terrorSkipStatusCodes: number[] = [];\r\n\r\n /**\r\n * Mock callback function\r\n * \r\n * Function to call to mock an http request\r\n */\r\n\tmockCallbackFunction: ((request: HttpRequest<any>, requestUrl: URL, next: HttpHandler) => Observable<HttpEvent<any>>) | null = null;\r\n\r\n /**\r\n * RequestId HTTP Header name\r\n */\r\n\trequestIdHttpHeaderName: string = 'Request-Id';\r\n\r\n /**\r\n * RequestId repeat\r\n */\r\n\trequestIdRepeat: boolean = false;\r\n\r\n /**\r\n * RequestId repeat delay\r\n */\r\n\trequestIdRepeatDelay: number = 0;\r\n\r\n /**\r\n * RequestId repeat statuscodes\r\n */\r\n\trequestIdRepeatStatusCodes: number[] = [];\r\n}","import { inject, Injectable } from \"@angular/core\";\r\nimport { LoggerService } from \"../services\";\r\nimport { InterceptorsService } from \"../services/interceptors.service\";\r\nimport { InterceptorType } from \"../interfaces\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class BaseInterceptor {\r\n\r\n\ttype: InterceptorType | null = null;\r\n\r\n\tinterceptorsService: InterceptorsService = inject(InterceptorsService);\r\n\tloggerService: LoggerService = inject(LoggerService);\r\n\r\n\tskipInterceptor(): boolean {\r\n\t\tif (this.type !== null && this.interceptorsService.skip.indexOf(InterceptorType.ALL) !== -1) {\r\n\t\t\tthis.loggerService.warn('Interceptor skipped, reason is ALL skipped: ' + this.type);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tconst skip: boolean = this.type !== null && this.interceptorsService.skip.indexOf(this.type) !== -1;\r\n\t\tif (skip) {\r\n\t\t\tthis.loggerService.warn('Interceptor skipped, reason is [' + this.interceptorsService.skip.join(', ') + '] skipped');\r\n\t\t}\r\n\t\treturn skip;\r\n\t}\r\n\r\n\tconstructor(\r\n\t\ttype: InterceptorType\r\n\t) {\r\n\t\tthis.type = type;\r\n\t\tthis.loggerService.info('Interceptor initialized: ' + this.type);\r\n\t}\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { TokenService } from '../services';\r\nimport { BaseInterceptor } from './base.interceptor';\r\nimport { InterceptorType } from '../interfaces';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class TokenInterceptor extends BaseInterceptor implements HttpInterceptor {\r\n\r\n\tprivate tokenService: TokenService = inject(TokenService);\r\n\r\n\tintercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n\t\tif (this.skipInterceptor()) {\r\n\t\t\treturn next.handle(request);\r\n\t\t}\r\n\t\tconst accessToken: string | null = this.tokenService.accessToken;\r\n\t\tif (accessToken !== null) {\r\n\t\t\trequest = request.clone({\r\n\t\t\t\tsetHeaders: {\r\n\t\t\t\t\tToken: accessToken\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn next.handle(request);\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper(InterceptorType.TOKEN);\r\n\t}\r\n}\r\n","import { HTTP_INTERCEPTORS } from \"@angular/common/http\";\r\nimport { EnvironmentProviders, makeEnvironmentProviders } from \"@angular/core\";\r\nimport { TokenInterceptor } from \"./interceptors/token.interceptor\";\r\nimport { OPENED_DIALOG_BODY_CLASS, PREDEFINED_DIALOGS } from \"./tokens\";\r\nimport { PredefinedDialogs } from \"./interfaces\";\r\n\r\nexport function provideTokenInterceptor(): EnvironmentProviders {\r\n return makeEnvironmentProviders([{\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: TokenInterceptor,\r\n multi: true\r\n }]);\r\n}\r\n\r\nexport function providePredefinedDialogs(predefinedDialogs: PredefinedDialogs): EnvironmentProviders {\r\n return makeEnvironmentProviders([{\r\n provide: PREDEFINED_DIALOGS,\r\n useValue: predefinedDialogs\r\n }]);\r\n}\r\n\r\nexport function provideOpenedDialogBodyClass(openedDialogBodyClass: string | null): EnvironmentProviders {\r\n return makeEnvironmentProviders([{\r\n provide: OPENED_DIALOG_BODY_CLASS,\r\n useValue: openedDialogBodyClass\r\n }]);\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.InterceptorType"],"mappings":"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"}
|
package/lib/providers.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
import { EnvironmentProviders } from "@angular/core";
|
|
2
|
+
import { PredefinedDialogs } from "./interfaces";
|
|
2
3
|
export declare function provideTokenInterceptor(): EnvironmentProviders;
|
|
4
|
+
export declare function providePredefinedDialogs(predefinedDialogs: PredefinedDialogs): EnvironmentProviders;
|
|
5
|
+
export declare function provideOpenedDialogBodyClass(openedDialogBodyClass: string | null): EnvironmentProviders;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Type } from '@angular/core';
|
|
2
2
|
import { Title } from '@angular/platform-browser';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
3
4
|
import { AlertConfiguration, DialogConfiguration, ConfirmConfiguration, LoadingConfiguration, ModalWithButtonsConfiguration, DialogComponentRefContainer } from '../interfaces';
|
|
4
5
|
import { DialogConfig, DialogRef } from '../classes';
|
|
5
6
|
import { MessageService } from '../services';
|
|
@@ -9,9 +10,11 @@ export declare class DialogService {
|
|
|
9
10
|
private predefinedConfirmConfigurations;
|
|
10
11
|
private predefinedAlertConfigurations;
|
|
11
12
|
private predefinedDialogs;
|
|
13
|
+
private openedDialogBodyClass;
|
|
12
14
|
title: Title;
|
|
13
15
|
messageService: MessageService;
|
|
14
16
|
dialogs: Map<DialogRef, DialogComponentRefContainer>;
|
|
17
|
+
dialogCountChanged: Subject<number>;
|
|
15
18
|
openIndex: number;
|
|
16
19
|
platformId: Object;
|
|
17
20
|
constructor();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { InjectionToken } from "@angular/core";
|
|
2
2
|
import { PredefinedDialogs } from "../interfaces";
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const PREDEFINED_DIALOGS: InjectionToken<PredefinedDialogs>;
|
|
4
|
+
export declare const OPENED_DIALOG_BODY_CLASS: InjectionToken<string | null>;
|