@c8y/ngx-components 1021.63.2 → 1021.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts +7 -2
- package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts.map +1 -1
- package/core/bottom-drawer/bottom-drawer-ref.d.ts +4 -0
- package/core/bottom-drawer/bottom-drawer-ref.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts +1 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb-outlet.component.d.ts +1 -1
- package/core/breadcrumb/breadcrumb-outlet.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb.component.d.ts +1 -1
- package/core/breadcrumb/breadcrumb.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb.module.d.ts +7 -7
- package/core/breadcrumb/breadcrumb.module.d.ts.map +1 -1
- package/core/common/common.module.d.ts +38 -38
- package/core/common/date-format.service.d.ts +30 -0
- package/core/common/date-format.service.d.ts.map +1 -0
- package/core/common/date.pipe.d.ts +7 -3
- package/core/common/date.pipe.d.ts.map +1 -1
- package/core/common/index.d.ts +1 -0
- package/core/common/index.d.ts.map +1 -1
- package/core/common/outlet.directive.d.ts +1 -1
- package/core/common/outlet.directive.d.ts.map +1 -1
- package/core/common/user-preferences/user-preferences-store-current-user.d.ts +11 -0
- package/core/common/user-preferences/user-preferences-store-current-user.d.ts.map +1 -0
- package/core/common/user-preferences/user-preferences.service.d.ts +40 -1
- package/core/common/user-preferences/user-preferences.service.d.ts.map +1 -1
- package/core/date-picker/date-picker.component.d.ts +3 -1
- package/core/date-picker/date-picker.component.d.ts.map +1 -1
- package/core/date-time-picker/date-time-picker.component.d.ts +6 -3
- package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
- package/core/dynamic-forms/date/date.type.component.d.ts +3 -0
- package/core/dynamic-forms/date/date.type.component.d.ts.map +1 -1
- package/core/plugins/plugins.model.d.ts +1 -0
- package/core/plugins/plugins.model.d.ts.map +1 -1
- package/core/plugins/plugins.service.d.ts +7 -2
- package/core/plugins/plugins.service.d.ts.map +1 -1
- package/core/time-interval/time-interval.component.d.ts +4 -2
- package/core/time-interval/time-interval.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugin-readme.component.d.ts +15 -0
- package/ecosystem/application-plugins/application-plugin-readme.component.d.ts.map +1 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -2
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.module.d.ts +4 -3
- package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
- package/ecosystem/application-plugins/install-plugin.component.d.ts +8 -4
- package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list.component.d.ts +10 -26
- package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list.service.d.ts +27 -0
- package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -0
- package/ecosystem/ecosystem.module.d.ts +2 -1
- package/ecosystem/ecosystem.module.d.ts.map +1 -1
- package/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.d.ts +15 -0
- package/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.d.ts.map +1 -0
- package/ecosystem/packages/package-changelog.guard.d.ts +10 -0
- package/ecosystem/packages/package-changelog.guard.d.ts.map +1 -0
- package/ecosystem/packages/package-details/package-details.component.d.ts +7 -9
- package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts +5 -1
- package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts +8 -3
- package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/packages-versions.component.d.ts +9 -2
- package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
- package/ecosystem/shared/index.d.ts +1 -0
- package/ecosystem/shared/index.d.ts.map +1 -1
- package/ecosystem/shared/package-changelog/package-changelog.component.d.ts +24 -0
- package/ecosystem/shared/package-changelog/package-changelog.component.d.ts.map +1 -0
- package/ecosystem/shared/shared-ecosystem.module.d.ts +2 -1
- package/ecosystem/shared/shared-ecosystem.module.d.ts.map +1 -1
- package/esm2022/auth-configuration/sso-configuration/template-parts/signature-configuration.component.mjs +11 -7
- package/esm2022/core/bottom-drawer/bottom-drawer-ref.mjs +9 -3
- package/esm2022/core/breadcrumb/breadcrumb-item.component.mjs +3 -3
- package/esm2022/core/breadcrumb/breadcrumb-outlet.component.mjs +19 -9
- package/esm2022/core/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/core/breadcrumb/breadcrumb.module.mjs +16 -5
- package/esm2022/core/common/common.module.mjs +6 -6
- package/esm2022/core/common/date-format.service.mjs +81 -0
- package/esm2022/core/common/date.pipe.mjs +29 -6
- package/esm2022/core/common/index.mjs +2 -1
- package/esm2022/core/common/outlet.directive.mjs +4 -3
- package/esm2022/core/common/user-preferences/user-preferences-store-current-user.mjs +22 -0
- package/esm2022/core/common/user-preferences/user-preferences.service.mjs +106 -16
- package/esm2022/core/date-picker/date-picker.component.mjs +11 -4
- package/esm2022/core/date-time-picker/date-time-picker.component.mjs +20 -11
- package/esm2022/core/dynamic-forms/date/date.type.component.mjs +12 -4
- package/esm2022/core/plugins/plugins.model.mjs +1 -1
- package/esm2022/core/plugins/plugins.service.mjs +31 -5
- package/esm2022/core/time-interval/time-interval.component.mjs +9 -2
- package/esm2022/ecosystem/application-plugins/application-plugin-readme.component.mjs +26 -0
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +29 -14
- package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +6 -3
- package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +21 -15
- package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +3 -3
- package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +26 -202
- package/esm2022/ecosystem/application-plugins/plugin-list.service.mjs +200 -0
- package/esm2022/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +3 -3
- package/esm2022/ecosystem/application-properties/update-application-modal/update-application-modal.component.mjs +1 -1
- package/esm2022/ecosystem/ecosystem.module.mjs +21 -5
- package/esm2022/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.mjs +33 -0
- package/esm2022/ecosystem/packages/package-changelog.guard.mjs +22 -0
- package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +25 -44
- package/esm2022/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.mjs +14 -4
- package/esm2022/ecosystem/packages/package-versions/package-contents/packages-contents.component.mjs +27 -8
- package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +22 -8
- package/esm2022/ecosystem/shared/index.mjs +2 -1
- package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +3 -3
- package/esm2022/ecosystem/shared/package-changelog/package-changelog.component.mjs +82 -0
- package/esm2022/ecosystem/shared/package-version-select/package-version-select.component.mjs +3 -3
- package/esm2022/ecosystem/shared/shared-ecosystem.module.mjs +12 -6
- package/esm2022/operations/bulk-operation-scheduler/operation-scheduler.component.mjs +9 -7
- package/esm2022/operations/bulk-operations-list/bulk-operations-list.component.mjs +1 -1
- package/esm2022/upgrade/ng1/downgraded.services.mjs +3 -2
- package/esm2022/upgrade/ng1/index.mjs +3 -2
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +9 -5
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +209 -142
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +96 -13
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +336 -186
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -5
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +3 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +833 -550
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +45 -6
- package/locales/es.po +45 -6
- package/locales/fr.po +45 -6
- package/locales/ja_JP.po +45 -6
- package/locales/ko.po +45 -6
- package/locales/locales.pot +42 -6
- package/locales/nl.po +45 -6
- package/locales/pl.po +45 -6
- package/locales/pt_BR.po +45 -6
- package/locales/zh_CN.po +45 -6
- package/locales/zh_TW.po +45 -6
- package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts +4 -2
- package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/upgrade/ng1/downgraded.services.d.ts +1 -0
- package/upgrade/ng1/downgraded.services.d.ts.map +1 -1
- package/upgrade/ng1/index.d.ts.map +1 -1
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { InventoryService, UserService } from '@c8y/client';
|
|
3
|
-
import { concat, from, Subject } from 'rxjs';
|
|
3
|
+
import { concat, firstValueFrom, from, Subject } from 'rxjs';
|
|
4
4
|
import { filter, first, map, switchMap } from 'rxjs/operators';
|
|
5
5
|
import { AppStateService } from '../ui-state.service';
|
|
6
6
|
import { UserPreferencesStorageLocal } from './user-preferences-storage-local';
|
|
7
7
|
import { UserPreferencesStorageInventory } from './user-preferences-store-inventory';
|
|
8
8
|
import { Permissions } from '../permissions.service';
|
|
9
|
+
import { AlertService } from '../../alert/alert.service';
|
|
10
|
+
import { UserPreferencesStorageCurrentUser } from './user-preferences-store-current-user';
|
|
9
11
|
import * as i0 from "@angular/core";
|
|
10
12
|
import * as i1 from "@c8y/client";
|
|
11
13
|
import * as i2 from "../ui-state.service";
|
|
14
|
+
import * as i3 from "../../alert/alert.service";
|
|
12
15
|
export class UserPreferencesService {
|
|
13
|
-
constructor(user, inventory, appState) {
|
|
16
|
+
constructor(user, inventory, appState, alert) {
|
|
14
17
|
this.user = user;
|
|
15
18
|
this.inventory = inventory;
|
|
16
19
|
this.appState = appState;
|
|
20
|
+
this.alert = alert;
|
|
17
21
|
this.preferenceChanges$ = new Subject();
|
|
18
22
|
this.storage = {
|
|
19
23
|
local: new UserPreferencesStorageLocal(),
|
|
20
|
-
inventory: new UserPreferencesStorageInventory(this.inventory)
|
|
24
|
+
inventory: new UserPreferencesStorageInventory(this.inventory),
|
|
25
|
+
currentUser: new UserPreferencesStorageCurrentUser(this.user, this.appState)
|
|
21
26
|
};
|
|
22
27
|
this.currentUser = this.appState.currentUser.pipe(filter(currentUser => currentUser !== null));
|
|
23
28
|
}
|
|
@@ -36,7 +41,7 @@ export class UserPreferencesService {
|
|
|
36
41
|
* @returns An Observable with the value of preference.
|
|
37
42
|
*/
|
|
38
43
|
get(key) {
|
|
39
|
-
return this.currentUser.pipe(first(), switchMap(user => this.
|
|
44
|
+
return this.currentUser.pipe(first(), switchMap(user => this.getForCurrentUser(key, user)));
|
|
40
45
|
}
|
|
41
46
|
/**
|
|
42
47
|
* Sets a value in storage for current user.
|
|
@@ -45,21 +50,19 @@ export class UserPreferencesService {
|
|
|
45
50
|
* @returns A promise with saved value.
|
|
46
51
|
*/
|
|
47
52
|
set(key, value) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
this.preferenceChanges$.next({ key, value });
|
|
51
|
-
resolve(this.setForUser(key, value, user));
|
|
52
|
-
}, reject);
|
|
53
|
-
});
|
|
53
|
+
this.preferenceChanges$.next({ key, value });
|
|
54
|
+
return this.setForCurrentUser(key, value);
|
|
54
55
|
}
|
|
55
56
|
/**
|
|
56
57
|
* Get an Observable value of searched key for a specific user.
|
|
57
58
|
* @param key The storage key for searched value.
|
|
58
59
|
* @param user The user for whom the search is done.
|
|
59
60
|
* @returns An Observable with the value of preference.
|
|
61
|
+
*
|
|
62
|
+
* @deprecated Uses depracted inventory approach. Use get instead.
|
|
60
63
|
*/
|
|
61
64
|
getForUser(key, user) {
|
|
62
|
-
const rawKey = this.
|
|
65
|
+
const rawKey = this.getTransformedRawKey(key, user);
|
|
63
66
|
const storage = this.getStorage(user);
|
|
64
67
|
return from(storage.get(rawKey));
|
|
65
68
|
}
|
|
@@ -68,22 +71,100 @@ export class UserPreferencesService {
|
|
|
68
71
|
* @param key The storage key for the value to be set.
|
|
69
72
|
* @param value The storage value to be set.
|
|
70
73
|
* @returns A promise with saved value.
|
|
74
|
+
*
|
|
75
|
+
* @deprecated Uses deprecated inventory approach. Use set instead.
|
|
71
76
|
*/
|
|
72
77
|
setForUser(key, value, user) {
|
|
73
|
-
const rawKey = this.
|
|
78
|
+
const rawKey = this.getTransformedRawKey(key, user);
|
|
74
79
|
const storage = this.getStorage(user);
|
|
75
80
|
return Promise.resolve(storage.set(rawKey, value));
|
|
76
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Get value of searched key for current user.
|
|
84
|
+
* If preference is not found in user's customProperties, it will try to get it from inventory or local storage and
|
|
85
|
+
* update user's customProperties with the value and return that value.
|
|
86
|
+
* @param key The preference key for searched value.
|
|
87
|
+
* @param user The user for whom the search is done.
|
|
88
|
+
* @returns A Promise with the value of preference.
|
|
89
|
+
*/
|
|
90
|
+
async getForCurrentUser(key, user) {
|
|
91
|
+
const currentUserStorage = await this.getCurrentUserStorage();
|
|
92
|
+
const customPropertiesKey = this.getCustomPropertiesKey(key);
|
|
93
|
+
const currentUserHasKeyProperty = currentUserStorage && (await currentUserStorage.hasKey(customPropertiesKey));
|
|
94
|
+
if (currentUserHasKeyProperty) {
|
|
95
|
+
return await currentUserStorage.get(customPropertiesKey);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const localOrInventoryStorage = this.getStorage(user);
|
|
99
|
+
const transformedRawKey = this.getTransformedRawKey(key, user);
|
|
100
|
+
const rawKey = this.getRawKey(key, user);
|
|
101
|
+
const valueFromStorage = (await localOrInventoryStorage.get(transformedRawKey)) ||
|
|
102
|
+
(await localOrInventoryStorage.get(rawKey));
|
|
103
|
+
if (valueFromStorage === undefined) {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
await currentUserStorage?.set(customPropertiesKey, valueFromStorage);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
// do nothing
|
|
111
|
+
}
|
|
112
|
+
return valueFromStorage;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Sets a value for current user.
|
|
117
|
+
* @param key The preference key for the value to be set.
|
|
118
|
+
* @param value The preference value to be set.
|
|
119
|
+
*/
|
|
120
|
+
async setForCurrentUser(key, value) {
|
|
121
|
+
const currentUserStorage = await this.getCurrentUserStorage();
|
|
122
|
+
const userPreferencesKey = this.getCustomPropertiesKey(key);
|
|
123
|
+
if (currentUserStorage) {
|
|
124
|
+
try {
|
|
125
|
+
await currentUserStorage.set(userPreferencesKey, value);
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
this.alert.addServerFailure(e);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const user = await firstValueFrom(this.currentUser);
|
|
133
|
+
const rawKey = this.getRawKey(key, user);
|
|
134
|
+
this.storage.local.set(rawKey, value);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
77
137
|
/**
|
|
78
138
|
* Get a string of key concatenated with username.
|
|
139
|
+
* Used by deprecated invetory storage approach and for leftovers in local storage.
|
|
140
|
+
* It was used to store preferences for specific users and it as replacing "." with "__"
|
|
141
|
+
* because of MongoDB restrictions.
|
|
79
142
|
* @param key The storage key for searched value.
|
|
80
143
|
* @param user The user for whom the search is done.
|
|
81
144
|
* @returns A string of key concatenated with username.
|
|
82
145
|
*/
|
|
83
|
-
|
|
146
|
+
getTransformedRawKey(key, user) {
|
|
84
147
|
const username = user.userName.replace(/\./g, '__');
|
|
85
148
|
return `${key}${username}`;
|
|
86
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Get a string of key concatenated with username.
|
|
152
|
+
* Used by local storage.
|
|
153
|
+
* @param key The storage key for searched value.
|
|
154
|
+
* @param user The user for whom the search is done.
|
|
155
|
+
* @returns A string of key concatenated with username.
|
|
156
|
+
*/
|
|
157
|
+
getRawKey(key, user) {
|
|
158
|
+
return `${key}${user.userName}`;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get a key for user preferences. Used current user customProperties.
|
|
162
|
+
* @param key The storage key for searched value.
|
|
163
|
+
* @returns A key for user preferences.
|
|
164
|
+
*/
|
|
165
|
+
getCustomPropertiesKey(key) {
|
|
166
|
+
return `c8y_UserPreference-${key}`;
|
|
167
|
+
}
|
|
87
168
|
/**
|
|
88
169
|
* Gets a proper storage depending on the user roles.
|
|
89
170
|
* @param user The user for whom the role check is done.
|
|
@@ -101,11 +182,20 @@ export class UserPreferencesService {
|
|
|
101
182
|
? this.storage.inventory
|
|
102
183
|
: this.storage.local;
|
|
103
184
|
}
|
|
104
|
-
|
|
185
|
+
async getCurrentUserStorage() {
|
|
186
|
+
const currentUser = await firstValueFrom(this.currentUser);
|
|
187
|
+
const hasRoleToEditCurrentUser = this.user.hasRole(currentUser, Permissions.ROLE_USER_MANAGEMENT_OWN_ADMIN);
|
|
188
|
+
const isExternalUser = currentUser.customProperties?.userOrigin === 'OAUTH2';
|
|
189
|
+
if (!hasRoleToEditCurrentUser || isExternalUser) {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
return this.storage.currentUser;
|
|
193
|
+
}
|
|
194
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreferencesService, deps: [{ token: i1.UserService }, { token: i1.InventoryService }, { token: i2.AppStateService }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
105
195
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreferencesService, providedIn: 'root' }); }
|
|
106
196
|
}
|
|
107
197
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreferencesService, decorators: [{
|
|
108
198
|
type: Injectable,
|
|
109
199
|
args: [{ providedIn: 'root' }]
|
|
110
|
-
}], ctorParameters: () => [{ type: i1.UserService }, { type: i1.InventoryService }, { type: i2.AppStateService }] });
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9jb21tb24vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQVMsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUdyRCxNQUFNLE9BQU8sc0JBQXNCO0lBUWpDLFlBQ1UsSUFBaUIsRUFDakIsU0FBMkIsRUFDM0IsUUFBeUI7UUFGekIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQVRuQyx1QkFBa0IsR0FBNEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVcxRCxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsS0FBSyxFQUFFLElBQUksMkJBQTJCLEVBQUU7WUFDeEMsU0FBUyxFQUFFLElBQUksK0JBQStCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUMvRCxDQUFDO1FBQ0YsSUFBSSxDQUFD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QUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtnQkFDMUIsV0FBVyxDQUFDLHlCQUF5QjtnQkFDckMsV0FBVyxDQUFDLHdCQUF3QjthQUNyQyxDQUFDO1lBQ0YsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUztZQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDekIsQ0FBQzsrR0FsSFUsc0JBQXNCO21IQUF0QixzQkFBc0IsY0FEVCxNQUFNOzs0RkFDbkIsc0JBQXNCO2tCQURsQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEludmVudG9yeVNlcnZpY2UsIElVc2VyLCBVc2VyU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGNvbmNhdCwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1N0b3JhZ2VMb2NhbCB9IGZyb20gJy4vdXNlci1wcmVmZXJlbmNlcy1zdG9yYWdlLWxvY2FsJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1N0b3JhZ2VJbnZlbnRvcnkgfSBmcm9tICcuL3VzZXItcHJlZmVyZW5jZXMtc3RvcmUtaW52ZW50b3J5JztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlIH0gZnJvbSAnLi91c2VyLXByZWZlcmVuY2UubW9kZWwnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnMgfSBmcm9tICcuLi9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlIHtcbiAgY3VycmVudFVzZXI6IE9ic2VydmFibGU8SVVzZXI+O1xuICBwcmVmZXJlbmNlQ2hhbmdlcyQ6IFN1YmplY3Q8VXNlclByZWZlcmVuY2U+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBzdG9yYWdlOiB7XG4gICAgbG9jYWw6IFVzZXJQcmVmZXJlbmNlc1N0b3JhZ2VMb2NhbDtcbiAgICBpbnZlbnRvcnk6IFVzZXJQcmVmZXJlbmNlc1N0b3JhZ2VJbnZlbnRvcnk7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zdG9yYWdlID0ge1xuICAgICAgbG9jYWw6IG5ldyBVc2VyUHJlZmVyZW5jZXNTdG9yYWdlTG9jYWwoKSxcbiAgICAgIGludmVudG9yeTogbmV3IFVzZXJQcmVmZXJlbmNlc1N0b3JhZ2VJbnZlbnRvcnkodGhpcy5pbnZlbnRvcnkpXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci5waXBlKGZpbHRlcihjdXJyZW50VXNlciA9PiBjdXJyZW50VXNlciAhPT0gbnVsbCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSBvZiBhIHVzZXIgcHJlZmVyZW5jZSB3aXRoIGdpdmVuIGtleS5cbiAgICogRW1pdHMgaXRzIGluaXRpYWwgdmFsdWUgZmlyc3QgYW5kIHRoZW4gdXBkYXRlZCB2YWx1ZXMgd2hlbiBzZXQgYnkgdXNlci5cbiAgICogQHBhcmFtIGtleSBUaGUgc3RvcmFnZSBrZXkgZm9yIHNlYXJjaGVkIHZhbHVlLlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIG9mIGEgdXNlciBwcmVmZXJlbmNlLlxuICAgKi9cbiAgb2JzZXJ2ZTxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiBjb25jYXQoXG4gICAgICB0aGlzLmdldChrZXkpLFxuICAgICAgdGhpcy5wcmVmZXJlbmNlQ2hhbmdlcyQucGlwZShcbiAgICAgICAgZmlsdGVyKGNoYW5nZSA9PiBjaGFuZ2Uua2V5ID09PSBrZXkpLFxuICAgICAgICBtYXAoY2hhbmdlID0+IGNoYW5nZS52YWx1ZSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBPYnNlcnZhYmxlIHZhbHVlIGZvciBzZWFyY2hlZCBrZXkgZm9yIGN1cnJlbnQgdXNlci5cbiAgICogQHBhcmFtIGtleSBUaGUgc3RvcmFnZSBrZXkgZm9yIHNlYXJjaGVkIHZhbHVlLlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHdpdGggdGhlIHZhbHVlIG9mIHByZWZlcmVuY2UuXG4gICAqL1xuICBnZXQoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyLnBpcGUoXG4gICAgICBmaXJzdCgpLFxuICAgICAgc3dpdGNoTWFwKHVzZXIgPT4gdGhpcy5nZXRGb3JVc2VyKGtleSwgdXNlcikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdmFsdWUgaW4gc3RvcmFnZSBmb3IgY3VycmVudCB1c2VyLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIHZhbHVlIHRvIGJlIHNldC5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBzdG9yYWdlIHZhbHVlIHRvIGJlIHNldC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdpdGggc2F2ZWQgdmFsdWUuXG4gICAqL1xuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRVc2VyLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKHVzZXIgPT4ge1xuICAgICAgICB0aGlzLnByZWZlcmVuY2VDaGFuZ2VzJC5uZXh0KHsga2V5LCB2YWx1ZSB9KTtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLnNldEZvclVzZXIoa2V5LCB2YWx1ZSwgdXNlcikpO1xuICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gT2JzZXJ2YWJsZSB2YWx1ZSBvZiBzZWFyY2hlZCBrZXkgZm9yIGEgc3BlY2lmaWMgdXNlci5cbiAgICogQHBhcmFtIGtleSBUaGUgc3RvcmFnZSBrZXkgZm9yIHNlYXJjaGVkIHZhbHVlLlxuICAgKiBAcGFyYW0gdXNlciBUaGUgdXNlciBmb3Igd2hvbSB0aGUgc2VhcmNoIGlzIGRvbmUuXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgd2l0aCB0aGUgdmFsdWUgb2YgcHJlZmVyZW5jZS5cbiAgICovXG4gIGdldEZvclVzZXIoa2V5OiBzdHJpbmcsIHVzZXI6IElVc2VyKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCByYXdLZXkgPSB0aGlzLmdldFJhd0tleShrZXksIHVzZXIpO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmdldFN0b3JhZ2UodXNlcik7XG4gICAgcmV0dXJuIGZyb20oc3RvcmFnZS5nZXQocmF3S2V5KSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIHZhbHVlIGluIHN0b3JhZ2UgZm9yIGEgc3BlY2lmaWMgdXNlci5cbiAgICogQHBhcmFtIGtleSBUaGUgc3RvcmFnZSBrZXkgZm9yIHRoZSB2YWx1ZSB0byBiZSBzZXQuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RvcmFnZSB2YWx1ZSB0byBiZSBzZXQuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRoIHNhdmVkIHZhbHVlLlxuICAgKi9cbiAgc2V0Rm9yVXNlcihrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgdXNlcjogSVVzZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJhd0tleSA9IHRoaXMuZ2V0UmF3S2V5KGtleSwgdXNlcik7XG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuZ2V0U3RvcmFnZSh1c2VyKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0b3JhZ2Uuc2V0KHJhd0tleSwgdmFsdWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgb2Yga2V5IGNvbmNhdGVuYXRlZCB3aXRoIHVzZXJuYW1lLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBzdG9yYWdlIGtleSBmb3Igc2VhcmNoZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB1c2VyIFRoZSB1c2VyIGZvciB3aG9tIHRoZSBzZWFyY2ggaXMgZG9uZS5cbiAgICogQHJldHVybnMgQSBzdHJpbmcgb2Yga2V5IGNvbmNhdGVuYXRlZCB3aXRoIHVzZXJuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRSYXdLZXkoa2V5OiBzdHJpbmcsIHVzZXI6IElVc2VyKTogc3RyaW5nIHtcbiAgICBjb25zdCB1c2VybmFtZSA9IHVzZXIudXNlck5hbWUucmVwbGFjZSgvXFwuL2csICdfXycpO1xuICAgIHJldHVybiBgJHtrZXl9JHt1c2VybmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBwcm9wZXIgc3RvcmFnZSBkZXBlbmRpbmcgb24gdGhlIHVzZXIgcm9sZXMuXG4gICAqIEBwYXJhbSB1c2VyIFRoZSB1c2VyIGZvciB3aG9tIHRoZSByb2xlIGNoZWNrIGlzIGRvbmUuXG4gICAqIEByZXR1cm5zIEEgcHJvcGVyIHN0b3JhZ2UuXG4gICAqL1xuICBwcml2YXRlIGdldFN0b3JhZ2UodXNlcjogSVVzZXIpOiBVc2VyUHJlZmVyZW5jZXNTdG9yYWdlSW52ZW50b3J5IHwgVXNlclByZWZlcmVuY2VzU3RvcmFnZUxvY2FsIHtcbiAgICByZXR1cm4gdGhpcy51c2VyLmhhc0FsbFJvbGVzKHVzZXIsIFtcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX1JFQUQsXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9BRE1JTlxuICAgIF0pIHx8XG4gICAgICB0aGlzLnVzZXIuaGFzQWxsUm9sZXModXNlciwgW1xuICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0FETUlOLFxuICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX1JFQURcbiAgICAgIF0pXG4gICAgICA/IHRoaXMuc3RvcmFnZS5pbnZlbnRvcnlcbiAgICAgIDogdGhpcy5zdG9yYWdlLmxvY2FsO1xuICB9XG59XG4iXX0=
|
|
200
|
+
}], ctorParameters: () => [{ type: i1.UserService }, { type: i1.InventoryService }, { type: i2.AppStateService }, { type: i3.AlertService }] });
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9jb21tb24vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQVMsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7OztBQUcxRixNQUFNLE9BQU8sc0JBQXNCO0lBU2pDLFlBQ1UsSUFBaUIsRUFDakIsU0FBMkIsRUFDM0IsUUFBeUIsRUFDekIsS0FBbUI7UUFIbkIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBWDdCLHVCQUFrQixHQUE0QixJQUFJLE9BQU8sRUFBRSxDQUFD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Qyx5QkFBeUI7Z0JBQ3JDLFdBQVcsQ0FBQyx3QkFBd0I7YUFDckMsQ0FBQztZQUNGLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDeEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxLQUFLLENBQUMscUJBQXFCO1FBQ2pDLE1BQU0sV0FBVyxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRCxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUNoRCxXQUFXLEVBQ1gsV0FBVyxDQUFDLDhCQUE4QixDQUMzQyxDQUFDO1FBQ0YsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixFQUFFLFVBQVUsS0FBSyxRQUFRLENBQUM7UUFDN0UsSUFBSSxDQUFDLHdCQUF3QixJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDbEMsQ0FBQzsrR0FqTlUsc0JBQXNCO21IQUF0QixzQkFBc0IsY0FEVCxNQUFNOzs0RkFDbkIsc0JBQXNCO2tCQURsQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEludmVudG9yeVNlcnZpY2UsIElVc2VyLCBVc2VyU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGNvbmNhdCwgZmlyc3RWYWx1ZUZyb20sIGZyb20sIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZmlyc3QsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyUHJlZmVyZW5jZXNTdG9yYWdlTG9jYWwgfSBmcm9tICcuL3VzZXItcHJlZmVyZW5jZXMtc3RvcmFnZS1sb2NhbCc7XG5pbXBvcnQgeyBVc2VyUHJlZmVyZW5jZXNTdG9yYWdlSW52ZW50b3J5IH0gZnJvbSAnLi91c2VyLXByZWZlcmVuY2VzLXN0b3JlLWludmVudG9yeSc7XG5pbXBvcnQgeyBVc2VyUHJlZmVyZW5jZSB9IGZyb20gJy4vdXNlci1wcmVmZXJlbmNlLm1vZGVsJztcbmltcG9ydCB7IFBlcm1pc3Npb25zIH0gZnJvbSAnLi4vcGVybWlzc2lvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1N0b3JhZ2VDdXJyZW50VXNlciB9IGZyb20gJy4vdXNlci1wcmVmZXJlbmNlcy1zdG9yZS1jdXJyZW50LXVzZXInO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2Uge1xuICBjdXJyZW50VXNlcjogT2JzZXJ2YWJsZTxJVXNlcj47XG4gIHByZWZlcmVuY2VDaGFuZ2VzJDogU3ViamVjdDxVc2VyUHJlZmVyZW5jZT4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIHN0b3JhZ2U6IHtcbiAgICBsb2NhbDogVXNlclByZWZlcmVuY2VzU3RvcmFnZUxvY2FsO1xuICAgIGludmVudG9yeTogVXNlclByZWZlcmVuY2VzU3RvcmFnZUludmVudG9yeTtcbiAgICBjdXJyZW50VXNlcjogVXNlclByZWZlcmVuY2VzU3RvcmFnZUN1cnJlbnRVc2VyO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdXNlcjogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZVxuICApIHtcbiAgICB0aGlzLnN0b3JhZ2UgPSB7XG4gICAgICBsb2NhbDogbmV3IFVzZXJQcmVmZXJlbmNlc1N0b3JhZ2VMb2NhbCgpLFxuICAgICAgaW52ZW50b3J5OiBuZXcgVXNlclByZWZlcmVuY2VzU3RvcmFnZUludmVudG9yeSh0aGlzLmludmVudG9yeSksXG4gICAgICBjdXJyZW50VXNlcjogbmV3IFVzZXJQcmVmZXJlbmNlc1N0b3JhZ2VDdXJyZW50VXNlcih0aGlzLnVzZXIsIHRoaXMuYXBwU3RhdGUpXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci5waXBlKGZpbHRlcihjdXJyZW50VXNlciA9PiBjdXJyZW50VXNlciAhPT0gbnVsbCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSBvZiBhIHVzZXIgcHJlZmVyZW5jZSB3aXRoIGdpdmVuIGtleS5cbiAgICogRW1pdHMgaXRzIGluaXRpYWwgdmFsdWUgZmlyc3QgYW5kIHRoZW4gdXBkYXRlZCB2YWx1ZXMgd2hlbiBzZXQgYnkgdXNlci5cbiAgICogQHBhcmFtIGtleSBUaGUgc3RvcmFnZSBrZXkgZm9yIHNlYXJjaGVkIHZhbHVlLlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIG9mIGEgdXNlciBwcmVmZXJlbmNlLlxuICAgKi9cbiAgb2JzZXJ2ZTxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiBjb25jYXQoXG4gICAgICB0aGlzLmdldChrZXkpLFxuICAgICAgdGhpcy5wcmVmZXJlbmNlQ2hhbmdlcyQucGlwZShcbiAgICAgICAgZmlsdGVyKGNoYW5nZSA9PiBjaGFuZ2Uua2V5ID09PSBrZXkpLFxuICAgICAgICBtYXAoY2hhbmdlID0+IGNoYW5nZS52YWx1ZSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBPYnNlcnZhYmxlIHZhbHVlIGZvciBzZWFyY2hlZCBrZXkgZm9yIGN1cnJlbnQgdXNlci5cbiAgICogQHBhcmFtIGtleSBUaGUgc3RvcmFnZSBrZXkgZm9yIHNlYXJjaGVkIHZhbHVlLlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHdpdGggdGhlIHZhbHVlIG9mIHByZWZlcmVuY2UuXG4gICAqL1xuICBnZXQoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyLnBpcGUoXG4gICAgICBmaXJzdCgpLFxuICAgICAgc3dpdGNoTWFwKHVzZXIgPT4gdGhpcy5nZXRGb3JDdXJyZW50VXNlcihrZXksIHVzZXIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIHZhbHVlIGluIHN0b3JhZ2UgZm9yIGN1cnJlbnQgdXNlci5cbiAgICogQHBhcmFtIGtleSBUaGUgc3RvcmFnZSBrZXkgZm9yIHRoZSB2YWx1ZSB0byBiZSBzZXQuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RvcmFnZSB2YWx1ZSB0byBiZSBzZXQuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRoIHNhdmVkIHZhbHVlLlxuICAgKi9cbiAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aGlzLnByZWZlcmVuY2VDaGFuZ2VzJC5uZXh0KHsga2V5LCB2YWx1ZSB9KTtcbiAgICByZXR1cm4gdGhpcy5zZXRGb3JDdXJyZW50VXNlcihrZXksIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gT2JzZXJ2YWJsZSB2YWx1ZSBvZiBzZWFyY2hlZCBrZXkgZm9yIGEgc3BlY2lmaWMgdXNlci5cbiAgICogQHBhcmFtIGtleSBUaGUgc3RvcmFnZSBrZXkgZm9yIHNlYXJjaGVkIHZhbHVlLlxuICAgKiBAcGFyYW0gdXNlciBUaGUgdXNlciBmb3Igd2hvbSB0aGUgc2VhcmNoIGlzIGRvbmUuXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgd2l0aCB0aGUgdmFsdWUgb2YgcHJlZmVyZW5jZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlcyBkZXByYWN0ZWQgaW52ZW50b3J5IGFwcHJvYWNoLiBVc2UgZ2V0IGluc3RlYWQuXG4gICAqL1xuICBnZXRGb3JVc2VyKGtleTogc3RyaW5nLCB1c2VyOiBJVXNlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcmF3S2V5ID0gdGhpcy5nZXRUcmFuc2Zvcm1lZFJhd0tleShrZXksIHVzZXIpO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmdldFN0b3JhZ2UodXNlcik7XG4gICAgcmV0dXJuIGZyb20oc3RvcmFnZS5nZXQocmF3S2V5KSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIHZhbHVlIGluIHN0b3JhZ2UgZm9yIGEgc3BlY2lmaWMgdXNlci5cbiAgICogQHBhcmFtIGtleSBUaGUgc3RvcmFnZSBrZXkgZm9yIHRoZSB2YWx1ZSB0byBiZSBzZXQuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RvcmFnZSB2YWx1ZSB0byBiZSBzZXQuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRoIHNhdmVkIHZhbHVlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2VzIGRlcHJlY2F0ZWQgaW52ZW50b3J5IGFwcHJvYWNoLiBVc2Ugc2V0IGluc3RlYWQuXG4gICAqL1xuICBzZXRGb3JVc2VyKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCB1c2VyOiBJVXNlcik6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmF3S2V5ID0gdGhpcy5nZXRUcmFuc2Zvcm1lZFJhd0tleShrZXksIHVzZXIpO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmdldFN0b3JhZ2UodXNlcik7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdG9yYWdlLnNldChyYXdLZXksIHZhbHVlKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZhbHVlIG9mIHNlYXJjaGVkIGtleSBmb3IgY3VycmVudCB1c2VyLlxuICAgKiBJZiBwcmVmZXJlbmNlIGlzIG5vdCBmb3VuZCBpbiB1c2VyJ3MgY3VzdG9tUHJvcGVydGllcywgaXQgd2lsbCB0cnkgdG8gZ2V0IGl0IGZyb20gaW52ZW50b3J5IG9yIGxvY2FsIHN0b3JhZ2UgYW5kXG4gICAqIHVwZGF0ZSB1c2VyJ3MgY3VzdG9tUHJvcGVydGllcyB3aXRoIHRoZSB2YWx1ZSBhbmQgcmV0dXJuIHRoYXQgdmFsdWUuXG4gICAqIEBwYXJhbSBrZXkgVGhlIHByZWZlcmVuY2Uga2V5IGZvciBzZWFyY2hlZCB2YWx1ZS5cbiAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXIgZm9yIHdob20gdGhlIHNlYXJjaCBpcyBkb25lLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2Ugd2l0aCB0aGUgdmFsdWUgb2YgcHJlZmVyZW5jZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0Rm9yQ3VycmVudFVzZXIoa2V5OiBzdHJpbmcsIHVzZXI6IElVc2VyKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBjdXJyZW50VXNlclN0b3JhZ2UgPSBhd2FpdCB0aGlzLmdldEN1cnJlbnRVc2VyU3RvcmFnZSgpO1xuICAgIGNvbnN0IGN1c3RvbVByb3BlcnRpZXNLZXkgPSB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXNLZXkoa2V5KTtcbiAgICBjb25zdCBjdXJyZW50VXNlckhhc0tleVByb3BlcnR5ID1cbiAgICAgIGN1cnJlbnRVc2VyU3RvcmFnZSAmJiAoYXdhaXQgY3VycmVudFVzZXJTdG9yYWdlLmhhc0tleShjdXN0b21Qcm9wZXJ0aWVzS2V5KSk7XG4gICAgaWYgKGN1cnJlbnRVc2VySGFzS2V5UHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCBjdXJyZW50VXNlclN0b3JhZ2UuZ2V0KGN1c3RvbVByb3BlcnRpZXNLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsb2NhbE9ySW52ZW50b3J5U3RvcmFnZSA9IHRoaXMuZ2V0U3RvcmFnZSh1c2VyKTtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUmF3S2V5ID0gdGhpcy5nZXRUcmFuc2Zvcm1lZFJhd0tleShrZXksIHVzZXIpO1xuICAgICAgY29uc3QgcmF3S2V5ID0gdGhpcy5nZXRSYXdLZXkoa2V5LCB1c2VyKTtcblxuICAgICAgY29uc3QgdmFsdWVGcm9tU3RvcmFnZSA9XG4gICAgICAgIChhd2FpdCBsb2NhbE9ySW52ZW50b3J5U3RvcmFnZS5nZXQodHJhbnNmb3JtZWRSYXdLZXkpKSB8fFxuICAgICAgICAoYXdhaXQgbG9jYWxPckludmVudG9yeVN0b3JhZ2UuZ2V0KHJhd0tleSkpO1xuICAgICAgaWYgKHZhbHVlRnJvbVN0b3JhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY3VycmVudFVzZXJTdG9yYWdlPy5zZXQoY3VzdG9tUHJvcGVydGllc0tleSwgdmFsdWVGcm9tU3RvcmFnZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZUZyb21TdG9yYWdlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdmFsdWUgZm9yIGN1cnJlbnQgdXNlci5cbiAgICogQHBhcmFtIGtleSBUaGUgcHJlZmVyZW5jZSBrZXkgZm9yIHRoZSB2YWx1ZSB0byBiZSBzZXQuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBzZXQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNldEZvckN1cnJlbnRVc2VyKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFVzZXJTdG9yYWdlID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50VXNlclN0b3JhZ2UoKTtcbiAgICBjb25zdCB1c2VyUHJlZmVyZW5jZXNLZXkgPSB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXNLZXkoa2V5KTtcbiAgICBpZiAoY3VycmVudFVzZXJTdG9yYWdlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjdXJyZW50VXNlclN0b3JhZ2Uuc2V0KHVzZXJQcmVmZXJlbmNlc0tleSwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmN1cnJlbnRVc2VyKTtcbiAgICAgIGNvbnN0IHJhd0tleSA9IHRoaXMuZ2V0UmF3S2V5KGtleSwgdXNlcik7XG4gICAgICB0aGlzLnN0b3JhZ2UubG9jYWwuc2V0KHJhd0tleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgb2Yga2V5IGNvbmNhdGVuYXRlZCB3aXRoIHVzZXJuYW1lLlxuICAgKiBVc2VkIGJ5IGRlcHJlY2F0ZWQgaW52ZXRvcnkgc3RvcmFnZSBhcHByb2FjaCBhbmQgZm9yIGxlZnRvdmVycyBpbiBsb2NhbCBzdG9yYWdlLlxuICAgKiBJdCB3YXMgdXNlZCB0byBzdG9yZSBwcmVmZXJlbmNlcyBmb3Igc3BlY2lmaWMgdXNlcnMgYW5kIGl0IGFzIHJlcGxhY2luZyBcIi5cIiB3aXRoIFwiX19cIlxuICAgKiBiZWNhdXNlIG9mIE1vbmdvREIgcmVzdHJpY3Rpb25zLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBzdG9yYWdlIGtleSBmb3Igc2VhcmNoZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB1c2VyIFRoZSB1c2VyIGZvciB3aG9tIHRoZSBzZWFyY2ggaXMgZG9uZS5cbiAgICogQHJldHVybnMgQSBzdHJpbmcgb2Yga2V5IGNvbmNhdGVuYXRlZCB3aXRoIHVzZXJuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUcmFuc2Zvcm1lZFJhd0tleShrZXk6IHN0cmluZywgdXNlcjogSVVzZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZXJuYW1lID0gdXNlci51c2VyTmFtZS5yZXBsYWNlKC9cXC4vZywgJ19fJyk7XG4gICAgcmV0dXJuIGAke2tleX0ke3VzZXJuYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIG9mIGtleSBjb25jYXRlbmF0ZWQgd2l0aCB1c2VybmFtZS5cbiAgICogVXNlZCBieSBsb2NhbCBzdG9yYWdlLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBzdG9yYWdlIGtleSBmb3Igc2VhcmNoZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB1c2VyIFRoZSB1c2VyIGZvciB3aG9tIHRoZSBzZWFyY2ggaXMgZG9uZS5cbiAgICogQHJldHVybnMgQSBzdHJpbmcgb2Yga2V5IGNvbmNhdGVuYXRlZCB3aXRoIHVzZXJuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRSYXdLZXkoa2V5OiBzdHJpbmcsIHVzZXI6IElVc2VyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7a2V5fSR7dXNlci51c2VyTmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGtleSBmb3IgdXNlciBwcmVmZXJlbmNlcy4gVXNlZCBjdXJyZW50IHVzZXIgY3VzdG9tUHJvcGVydGllcy5cbiAgICogQHBhcmFtIGtleSBUaGUgc3RvcmFnZSBrZXkgZm9yIHNlYXJjaGVkIHZhbHVlLlxuICAgKiBAcmV0dXJucyBBIGtleSBmb3IgdXNlciBwcmVmZXJlbmNlcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0Q3VzdG9tUHJvcGVydGllc0tleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjOHlfVXNlclByZWZlcmVuY2UtJHtrZXl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgcHJvcGVyIHN0b3JhZ2UgZGVwZW5kaW5nIG9uIHRoZSB1c2VyIHJvbGVzLlxuICAgKiBAcGFyYW0gdXNlciBUaGUgdXNlciBmb3Igd2hvbSB0aGUgcm9sZSBjaGVjayBpcyBkb25lLlxuICAgKiBAcmV0dXJucyBBIHByb3BlciBzdG9yYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yYWdlKHVzZXI6IElVc2VyKTogVXNlclByZWZlcmVuY2VzU3RvcmFnZUludmVudG9yeSB8IFVzZXJQcmVmZXJlbmNlc1N0b3JhZ2VMb2NhbCB7XG4gICAgcmV0dXJuIHRoaXMudXNlci5oYXNBbGxSb2xlcyh1c2VyLCBbXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9SRUFELFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU5cbiAgICBdKSB8fFxuICAgICAgdGhpcy51c2VyLmhhc0FsbFJvbGVzKHVzZXIsIFtcbiAgICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTixcbiAgICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9SRUFEXG4gICAgICBdKVxuICAgICAgPyB0aGlzLnN0b3JhZ2UuaW52ZW50b3J5XG4gICAgICA6IHRoaXMuc3RvcmFnZS5sb2NhbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q3VycmVudFVzZXJTdG9yYWdlKCk6IFByb21pc2U8VXNlclByZWZlcmVuY2VzU3RvcmFnZUN1cnJlbnRVc2VyPiB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmN1cnJlbnRVc2VyKTtcbiAgICBjb25zdCBoYXNSb2xlVG9FZGl0Q3VycmVudFVzZXIgPSB0aGlzLnVzZXIuaGFzUm9sZShcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9VU0VSX01BTkFHRU1FTlRfT1dOX0FETUlOXG4gICAgKTtcbiAgICBjb25zdCBpc0V4dGVybmFsVXNlciA9IGN1cnJlbnRVc2VyLmN1c3RvbVByb3BlcnRpZXM/LnVzZXJPcmlnaW4gPT09ICdPQVVUSDInO1xuICAgIGlmICghaGFzUm9sZVRvRWRpdEN1cnJlbnRVc2VyIHx8IGlzRXh0ZXJuYWxVc2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5jdXJyZW50VXNlcjtcbiAgfVxufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output, inject } from '@angular/core';
|
|
2
2
|
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
3
3
|
import { gettext } from '../i18n';
|
|
4
4
|
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
|
|
@@ -10,6 +10,7 @@ import { C8yTranslateDirective } from '../i18n/c8y-translate.directive';
|
|
|
10
10
|
import { RequiredInputPlaceholderDirective } from '../forms/required-input-placeholder.directive';
|
|
11
11
|
import { BsDatepickerModule } from 'ngx-bootstrap/datepicker';
|
|
12
12
|
import { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';
|
|
13
|
+
import { DateFormatService } from '../common/date-format.service';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
14
15
|
import * as i1 from "ngx-bootstrap/dropdown";
|
|
15
16
|
import * as i2 from "@angular/forms";
|
|
@@ -18,8 +19,12 @@ export class DatePickerComponent {
|
|
|
18
19
|
constructor() {
|
|
19
20
|
this.onDateSelected = new EventEmitter();
|
|
20
21
|
this.placeholder = gettext('Filter by date…');
|
|
22
|
+
this.dateFormatService = inject(DateFormatService);
|
|
21
23
|
}
|
|
22
24
|
ngOnInit() {
|
|
25
|
+
if (!this.dateInputFormat) {
|
|
26
|
+
this.dateInputFormat = this.dateFormatService.getDateFormat();
|
|
27
|
+
}
|
|
23
28
|
this.fgDatePicker = new FormGroup({
|
|
24
29
|
dateFrom: new FormControl(),
|
|
25
30
|
dateTo: new FormControl()
|
|
@@ -40,7 +45,7 @@ export class DatePickerComponent {
|
|
|
40
45
|
this.dateTo = null;
|
|
41
46
|
}
|
|
42
47
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatePickerComponent, isStandalone: true, selector: "c8y-date-picker", inputs: { placeholder: "placeholder" }, outputs: { onDateSelected: "onDateSelected" }, ngImport: i0, template: "<div\n dropdown\n class=\"c8y-child-assets-selector dropdown\"\n #datefilter=\"bs-dropdown\"\n [insideClick]=\"true\"\n placement=\"bottom left\"\n [cdkTrapFocus]=\"datefilter.isOpen\"\n >\n <button\n id=\"date-range\"\n dropdownToggle\n title=\"{{ 'Date filter' | translate }}\"\n type=\"button\"\n class=\"btn dropdown-toggle d-flex a-i-center c8y-dropdown\"\n >\n <i c8yIcon=\"calendar-o\" class=\"m-r-4 text-primary\"></i>\n <span class=\"text-truncate\">\n <span *ngIf=\"dateFrom\">\n <span class=\"text-label-small\">{{ 'From`date`' | translate }}</span>\n {{ dateFrom | date }}\n </span>\n <span *ngIf=\"dateTo\">\n <span class=\"text-label-small\">{{ 'To`date`' | translate }}</span>\n {{ dateTo | date }}\n </span>\n <em *ngIf=\"!dateFrom && !dateTo\" class=\"text-muted\">\n {{ placeholder }}\n </em>\n </span>\n </button>\n\n <form [formGroup]=\"fgDatePicker\"\n id=\"dropdown-date-range\"\n *dropdownMenu\n class=\"dropdown-menu\">\n <div class=\"dropdown-form p-b-0\">\n <c8y-form-group class=\"form-group-sm\">\n <label for=\"dateFrom\" class=\"text-medium m-b-4\" translate>Date from</label>\n <div class=\"form-group datepicker d-block m-b-0\">\n <input\n id=\"dateFrom\"\n formControlName=\"dateFrom\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Date from' | translate }}\"\n bsDatepicker\n [maxDate]=\"dateTo\"\n (bsValueChange)=\"dateFrom = $event\"\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n />\n </div>\n </c8y-form-group>\n <c8y-form-group class=\"form-group form-group-sm \">\n <label for=\"dateTo\" translate>Date to</label>\n <div class=\"form-group datepicker m-l-0 d-block m-b-0 \">\n <input\n name=\"dateTo\"\n id=\"dateTo\"\n formControlName=\"dateTo\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Date to' | translate }}\"\n bsDatepicker\n [minDate]=\"dateFrom\"\n (bsValueChange)=\"dateTo = $event\"\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n />\n </div>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex separator-top gap-8\">\n <button\n title=\"{{ 'Clear selection' | translate }}\"\n type=\"button\"\n class=\"btn btn-default btn-sm flex-grow\"\n (click)=\"clearFilter(); datefilter.isOpen = !datefilter.isOpen\"\n >\n {{ 'Clear`selection`' | translate }}\n </button>\n <button\n [disabled]=\"!fgDatePicker.get('dateFrom').value && !fgDatePicker.get('dateTo').value\"\n title=\"{{ 'Apply selection' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary btn-sm flex-grow\"\n (click)=\"filter(); datefilter.isOpen = !datefilter.isOpen\"\n >\n {{ 'Apply`selection`' | translate }}\n </button>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i1.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i1.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i1.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "ngmodule", type: BsDatepickerModule }, { kind: "directive", type: i3.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i3.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
48
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatePickerComponent, isStandalone: true, selector: "c8y-date-picker", inputs: { placeholder: "placeholder", dateInputFormat: "dateInputFormat" }, outputs: { onDateSelected: "onDateSelected" }, ngImport: i0, template: "<div\n dropdown\n class=\"c8y-child-assets-selector dropdown\"\n #datefilter=\"bs-dropdown\"\n [insideClick]=\"true\"\n placement=\"bottom left\"\n [cdkTrapFocus]=\"datefilter.isOpen\"\n >\n <button\n id=\"date-range\"\n dropdownToggle\n title=\"{{ 'Date filter' | translate }}\"\n type=\"button\"\n class=\"btn dropdown-toggle d-flex a-i-center c8y-dropdown\"\n >\n <i c8yIcon=\"calendar-o\" class=\"m-r-4 text-primary\"></i>\n <span class=\"text-truncate\">\n <span *ngIf=\"dateFrom\">\n <span class=\"text-label-small\">{{ 'From`date`' | translate }}</span>\n {{ dateFrom | date }}\n </span>\n <span *ngIf=\"dateTo\">\n <span class=\"text-label-small\">{{ 'To`date`' | translate }}</span>\n {{ dateTo | date }}\n </span>\n <em *ngIf=\"!dateFrom && !dateTo\" class=\"text-muted\">\n {{ placeholder }}\n </em>\n </span>\n </button>\n\n <form [formGroup]=\"fgDatePicker\"\n id=\"dropdown-date-range\"\n *dropdownMenu\n class=\"dropdown-menu\">\n <div class=\"dropdown-form p-b-0\">\n <c8y-form-group class=\"form-group-sm\">\n <label for=\"dateFrom\" class=\"text-medium m-b-4\" translate>Date from</label>\n <div class=\"form-group datepicker d-block m-b-0\">\n <input\n id=\"dateFrom\"\n formControlName=\"dateFrom\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Date from' | translate }}\"\n bsDatepicker\n [maxDate]=\"dateTo\"\n (bsValueChange)=\"dateFrom = $event\"\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true, dateInputFormat: dateInputFormat }\"\n />\n </div>\n </c8y-form-group>\n <c8y-form-group class=\"form-group form-group-sm \">\n <label for=\"dateTo\" translate>Date to</label>\n <div class=\"form-group datepicker m-l-0 d-block m-b-0 \">\n <input\n name=\"dateTo\"\n id=\"dateTo\"\n formControlName=\"dateTo\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Date to' | translate }}\"\n bsDatepicker\n [minDate]=\"dateFrom\"\n (bsValueChange)=\"dateTo = $event\"\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true, dateInputFormat: dateInputFormat }\"\n />\n </div>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex separator-top gap-8\">\n <button\n title=\"{{ 'Clear selection' | translate }}\"\n type=\"button\"\n class=\"btn btn-default btn-sm flex-grow\"\n (click)=\"clearFilter(); datefilter.isOpen = !datefilter.isOpen\"\n >\n {{ 'Clear`selection`' | translate }}\n </button>\n <button\n [disabled]=\"!fgDatePicker.get('dateFrom').value && !fgDatePicker.get('dateTo').value\"\n title=\"{{ 'Apply selection' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary btn-sm flex-grow\"\n (click)=\"filter(); datefilter.isOpen = !datefilter.isOpen\"\n >\n {{ 'Apply`selection`' | translate }}\n </button>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i1.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i1.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i1.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "ngmodule", type: BsDatepickerModule }, { kind: "directive", type: i3.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i3.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
44
49
|
}
|
|
45
50
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
46
51
|
type: Component,
|
|
@@ -57,10 +62,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
57
62
|
BsDatepickerModule,
|
|
58
63
|
DatePipe,
|
|
59
64
|
C8yTranslatePipe
|
|
60
|
-
], template: "<div\n dropdown\n class=\"c8y-child-assets-selector dropdown\"\n #datefilter=\"bs-dropdown\"\n [insideClick]=\"true\"\n placement=\"bottom left\"\n [cdkTrapFocus]=\"datefilter.isOpen\"\n >\n <button\n id=\"date-range\"\n dropdownToggle\n title=\"{{ 'Date filter' | translate }}\"\n type=\"button\"\n class=\"btn dropdown-toggle d-flex a-i-center c8y-dropdown\"\n >\n <i c8yIcon=\"calendar-o\" class=\"m-r-4 text-primary\"></i>\n <span class=\"text-truncate\">\n <span *ngIf=\"dateFrom\">\n <span class=\"text-label-small\">{{ 'From`date`' | translate }}</span>\n {{ dateFrom | date }}\n </span>\n <span *ngIf=\"dateTo\">\n <span class=\"text-label-small\">{{ 'To`date`' | translate }}</span>\n {{ dateTo | date }}\n </span>\n <em *ngIf=\"!dateFrom && !dateTo\" class=\"text-muted\">\n {{ placeholder }}\n </em>\n </span>\n </button>\n\n <form [formGroup]=\"fgDatePicker\"\n id=\"dropdown-date-range\"\n *dropdownMenu\n class=\"dropdown-menu\">\n <div class=\"dropdown-form p-b-0\">\n <c8y-form-group class=\"form-group-sm\">\n <label for=\"dateFrom\" class=\"text-medium m-b-4\" translate>Date from</label>\n <div class=\"form-group datepicker d-block m-b-0\">\n <input\n id=\"dateFrom\"\n formControlName=\"dateFrom\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Date from' | translate }}\"\n bsDatepicker\n [maxDate]=\"dateTo\"\n (bsValueChange)=\"dateFrom = $event\"\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n />\n </div>\n </c8y-form-group>\n <c8y-form-group class=\"form-group form-group-sm \">\n <label for=\"dateTo\" translate>Date to</label>\n <div class=\"form-group datepicker m-l-0 d-block m-b-0 \">\n <input\n name=\"dateTo\"\n id=\"dateTo\"\n formControlName=\"dateTo\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Date to' | translate }}\"\n bsDatepicker\n [minDate]=\"dateFrom\"\n (bsValueChange)=\"dateTo = $event\"\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true }\"\n />\n </div>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex separator-top gap-8\">\n <button\n title=\"{{ 'Clear selection' | translate }}\"\n type=\"button\"\n class=\"btn btn-default btn-sm flex-grow\"\n (click)=\"clearFilter(); datefilter.isOpen = !datefilter.isOpen\"\n >\n {{ 'Clear`selection`' | translate }}\n </button>\n <button\n [disabled]=\"!fgDatePicker.get('dateFrom').value && !fgDatePicker.get('dateTo').value\"\n title=\"{{ 'Apply selection' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary btn-sm flex-grow\"\n (click)=\"filter(); datefilter.isOpen = !datefilter.isOpen\"\n >\n {{ 'Apply`selection`' | translate }}\n </button>\n </div>\n </form>\n</div>\n" }]
|
|
65
|
+
], template: "<div\n dropdown\n class=\"c8y-child-assets-selector dropdown\"\n #datefilter=\"bs-dropdown\"\n [insideClick]=\"true\"\n placement=\"bottom left\"\n [cdkTrapFocus]=\"datefilter.isOpen\"\n >\n <button\n id=\"date-range\"\n dropdownToggle\n title=\"{{ 'Date filter' | translate }}\"\n type=\"button\"\n class=\"btn dropdown-toggle d-flex a-i-center c8y-dropdown\"\n >\n <i c8yIcon=\"calendar-o\" class=\"m-r-4 text-primary\"></i>\n <span class=\"text-truncate\">\n <span *ngIf=\"dateFrom\">\n <span class=\"text-label-small\">{{ 'From`date`' | translate }}</span>\n {{ dateFrom | date }}\n </span>\n <span *ngIf=\"dateTo\">\n <span class=\"text-label-small\">{{ 'To`date`' | translate }}</span>\n {{ dateTo | date }}\n </span>\n <em *ngIf=\"!dateFrom && !dateTo\" class=\"text-muted\">\n {{ placeholder }}\n </em>\n </span>\n </button>\n\n <form [formGroup]=\"fgDatePicker\"\n id=\"dropdown-date-range\"\n *dropdownMenu\n class=\"dropdown-menu\">\n <div class=\"dropdown-form p-b-0\">\n <c8y-form-group class=\"form-group-sm\">\n <label for=\"dateFrom\" class=\"text-medium m-b-4\" translate>Date from</label>\n <div class=\"form-group datepicker d-block m-b-0\">\n <input\n id=\"dateFrom\"\n formControlName=\"dateFrom\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Date from' | translate }}\"\n bsDatepicker\n [maxDate]=\"dateTo\"\n (bsValueChange)=\"dateFrom = $event\"\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true, dateInputFormat: dateInputFormat }\"\n />\n </div>\n </c8y-form-group>\n <c8y-form-group class=\"form-group form-group-sm \">\n <label for=\"dateTo\" translate>Date to</label>\n <div class=\"form-group datepicker m-l-0 d-block m-b-0 \">\n <input\n name=\"dateTo\"\n id=\"dateTo\"\n formControlName=\"dateTo\"\n class=\"form-control fit-w text-left\"\n placeholder=\"{{ 'Date to' | translate }}\"\n bsDatepicker\n [minDate]=\"dateFrom\"\n (bsValueChange)=\"dateTo = $event\"\n [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true, dateInputFormat: dateInputFormat }\"\n />\n </div>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex separator-top gap-8\">\n <button\n title=\"{{ 'Clear selection' | translate }}\"\n type=\"button\"\n class=\"btn btn-default btn-sm flex-grow\"\n (click)=\"clearFilter(); datefilter.isOpen = !datefilter.isOpen\"\n >\n {{ 'Clear`selection`' | translate }}\n </button>\n <button\n [disabled]=\"!fgDatePicker.get('dateFrom').value && !fgDatePicker.get('dateTo').value\"\n title=\"{{ 'Apply selection' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary btn-sm flex-grow\"\n (click)=\"filter(); datefilter.isOpen = !datefilter.isOpen\"\n >\n {{ 'Apply`selection`' | translate }}\n </button>\n </div>\n </form>\n</div>\n" }]
|
|
61
66
|
}], propDecorators: { onDateSelected: [{
|
|
62
67
|
type: Output
|
|
63
68
|
}], placeholder: [{
|
|
64
69
|
type: Input
|
|
70
|
+
}], dateInputFormat: [{
|
|
71
|
+
type: Input
|
|
65
72
|
}] } });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0FBcUI5RCxNQUFNLE9BQU8sbUJBQW1CO0lBbkJoQztRQW9CWSxtQkFBYyxHQUE4QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXpFLGdCQUFXLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0E0QjFDO0lBdEJDLFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksU0FBUyxDQUFDO1lBQ2hDLFFBQVEsRUFBRSxJQUFJLFdBQVcsRUFBRTtZQUMzQixNQUFNLEVBQUUsSUFBSSxXQUFXLEVBQUU7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3RELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7WUFDekIsUUFBUSxFQUFFLElBQUk7WUFDZCxNQUFNLEVBQUUsSUFBSTtTQUNiLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7K0dBOUJVLG1CQUFtQjttR0FBbkIsbUJBQW1CLGtLQ2pDaEMsMm1HQXlGQSwyQ0R0RUksZ0JBQWdCLHVsQkFDaEIsWUFBWSw0SUFDWixhQUFhLDJFQUNiLElBQUksNEZBQ0osV0FBVywycEJBQ1gsbUJBQW1CLGdWQUNuQixrQkFBa0IsdUlBQ2xCLHFCQUFxQix3RUFDckIsaUNBQWlDLG1GQUNqQyxrQkFBa0IsaWhCQUNsQixRQUFRLHdDQUNSLGdCQUFnQjs7NEZBR1AsbUJBQW1CO2tCQW5CL0IsU0FBUzsrQkFDRSxpQkFBaUIsY0FFZixJQUFJLFdBQ1A7d0JBQ1AsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsSUFBSTt3QkFDSixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLGlDQUFpQzt3QkFDakMsa0JBQWtCO3dCQUNsQixRQUFRO3dCQUNSLGdCQUFnQjtxQkFDakI7OEJBR1MsY0FBYztzQkFBdkIsTUFBTTtnQkFFUCxXQUFXO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBpY2tlZERhdGVzIH0gZnJvbSAnLi9kYXRlLXBpY2tlci5tb2RlbCc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBDZGtUcmFwRm9jdXMgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBJY29uRGlyZWN0aXZlIH0gZnJvbSAnLi4vY29tbW9uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nSWYsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1Hcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm1zL2Zvcm0tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2kxOG4vYzh5LXRyYW5zbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmVxdWlyZWRJbnB1dFBsYWNlaG9sZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZm9ybXMvcmVxdWlyZWQtaW5wdXQtcGxhY2Vob2xkZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJzRGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBDOHlUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vaTE4bi9jOHktdHJhbnNsYXRlLnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0ZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQnNEcm9wZG93bk1vZHVsZSxcbiAgICBDZGtUcmFwRm9jdXMsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBOZ0lmLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybUdyb3VwQ29tcG9uZW50LFxuICAgIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBSZXF1aXJlZElucHV0UGxhY2Vob2xkZXJEaXJlY3RpdmUsXG4gICAgQnNEYXRlcGlja2VyTW9kdWxlLFxuICAgIERhdGVQaXBlLFxuICAgIEM4eVRyYW5zbGF0ZVBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQE91dHB1dCgpIG9uRGF0ZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8UGlja2VkRGF0ZXM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlciA9IGdldHRleHQoJ0ZpbHRlciBieSBkYXRl4oCmJyk7XG5cbiAgZGF0ZUZyb206IHN0cmluZztcbiAgZGF0ZVRvOiBzdHJpbmc7XG4gIGZnRGF0ZVBpY2tlcjogRm9ybUdyb3VwO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZmdEYXRlUGlja2VyID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBkYXRlRnJvbTogbmV3IEZvcm1Db250cm9sKCksXG4gICAgICBkYXRlVG86IG5ldyBGb3JtQ29udHJvbCgpXG4gICAgfSk7XG4gIH1cblxuICBmaWx0ZXIoKSB7XG4gICAgdGhpcy5vbkRhdGVTZWxlY3RlZC5lbWl0KHRoaXMuZmdEYXRlUGlja2VyLnZhbHVlKTtcbiAgICB0aGlzLmRhdGVGcm9tID0gdGhpcy5mZ0RhdGVQaWNrZXIuZ2V0KCdkYXRlRnJvbScpLnZhbHVlO1xuICAgIHRoaXMuZGF0ZVRvID0gdGhpcy5mZ0RhdGVQaWNrZXIuZ2V0KCdkYXRlVG8nKS52YWx1ZTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVyKCkge1xuICAgIHRoaXMuZmdEYXRlUGlja2VyLnNldFZhbHVlKHtcbiAgICAgIGRhdGVGcm9tOiBudWxsLFxuICAgICAgZGF0ZVRvOiBudWxsXG4gICAgfSk7XG4gICAgdGhpcy5vbkRhdGVTZWxlY3RlZC5lbWl0KG51bGwpO1xuICAgIHRoaXMuZGF0ZUZyb20gPSBudWxsO1xuICAgIHRoaXMuZGF0ZVRvID0gbnVsbDtcbiAgfVxufVxuIiwiPGRpdlxuICBkcm9wZG93blxuICBjbGFzcz1cImM4eS1jaGlsZC1hc3NldHMtc2VsZWN0b3IgZHJvcGRvd25cIlxuICAjZGF0ZWZpbHRlcj1cImJzLWRyb3Bkb3duXCJcbiAgW2luc2lkZUNsaWNrXT1cInRydWVcIlxuICBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdFwiXG4gIFtjZGtUcmFwRm9jdXNdPVwiZGF0ZWZpbHRlci5pc09wZW5cIlxuICA+XG4gIDxidXR0b25cbiAgICBpZD1cImRhdGUtcmFuZ2VcIlxuICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgdGl0bGU9XCJ7eyAnRGF0ZSBmaWx0ZXInIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0biBkcm9wZG93bi10b2dnbGUgZC1mbGV4IGEtaS1jZW50ZXIgYzh5LWRyb3Bkb3duXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJjYWxlbmRhci1vXCIgY2xhc3M9XCJtLXItNCB0ZXh0LXByaW1hcnlcIj48L2k+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICA8c3BhbiAqbmdJZj1cImRhdGVGcm9tXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiPnt7ICdGcm9tYGRhdGVgJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAge3sgZGF0ZUZyb20gfCBkYXRlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImRhdGVUb1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGxcIj57eyAnVG9gZGF0ZWAnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICB7eyBkYXRlVG8gfCBkYXRlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8ZW0gKm5nSWY9XCIhZGF0ZUZyb20gJiYgIWRhdGVUb1wiIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxuICAgICAgICB7eyBwbGFjZWhvbGRlciB9fVxuICAgICAgPC9lbT5cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmdEYXRlUGlja2VyXCJcbiAgICBpZD1cImRyb3Bkb3duLWRhdGUtcmFuZ2VcIlxuICAgICpkcm9wZG93bk1lbnVcbiAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZm9ybSBwLWItMFwiPlxuICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwiZm9ybS1ncm91cC1zbVwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiZGF0ZUZyb21cIiBjbGFzcz1cInRleHQtbWVkaXVtIG0tYi00XCIgdHJhbnNsYXRlPkRhdGUgZnJvbTwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGRhdGVwaWNrZXIgZC1ibG9jayBtLWItMFwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJkYXRlRnJvbVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkYXRlRnJvbVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmaXQtdyB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnRGF0ZSBmcm9tJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBic0RhdGVwaWNrZXJcbiAgICAgICAgICAgIFttYXhEYXRlXT1cImRhdGVUb1wiXG4gICAgICAgICAgICAoYnNWYWx1ZUNoYW5nZSk9XCJkYXRlRnJvbSA9ICRldmVudFwiXG4gICAgICAgICAgICBbYnNDb25maWddPVwieyBjdXN0b21Ub2RheUNsYXNzOiAndG9kYXknLCByZXR1cm5Gb2N1c1RvSW5wdXQ6IHRydWUgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwiZm9ybS1ncm91cCBmb3JtLWdyb3VwLXNtIFwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiZGF0ZVRvXCIgdHJhbnNsYXRlPkRhdGUgdG88L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBkYXRlcGlja2VyIG0tbC0wIGQtYmxvY2sgbS1iLTAgXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBuYW1lPVwiZGF0ZVRvXCJcbiAgICAgICAgICAgIGlkPVwiZGF0ZVRvXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRhdGVUb1wiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmaXQtdyB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnRGF0ZSB0bycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgYnNEYXRlcGlja2VyXG4gICAgICAgICAgICBbbWluRGF0ZV09XCJkYXRlRnJvbVwiXG4gICAgICAgICAgICAoYnNWYWx1ZUNoYW5nZSk9XCJkYXRlVG8gPSAkZXZlbnRcIlxuICAgICAgICAgICAgW2JzQ29uZmlnXT1cInsgY3VzdG9tVG9kYXlDbGFzczogJ3RvZGF5JywgcmV0dXJuRm9jdXNUb0lucHV0OiB0cnVlIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicC0xNiBkLWZsZXggc2VwYXJhdG9yLXRvcCBnYXAtOFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0aXRsZT1cInt7ICdDbGVhciBzZWxlY3Rpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBmbGV4LWdyb3dcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKTsgZGF0ZWZpbHRlci5pc09wZW4gPSAhZGF0ZWZpbHRlci5pc09wZW5cIlxuICAgICAgPlxuICAgICAgICB7eyAnQ2xlYXJgc2VsZWN0aW9uYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiIWZnRGF0ZVBpY2tlci5nZXQoJ2RhdGVGcm9tJykudmFsdWUgJiYgIWZnRGF0ZVBpY2tlci5nZXQoJ2RhdGVUbycpLnZhbHVlXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQXBwbHkgc2VsZWN0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgKGNsaWNrKT1cImZpbHRlcigpOyBkYXRlZmlsdGVyLmlzT3BlbiA9ICFkYXRlZmlsdGVyLmlzT3BlblwiXG4gICAgICA+XG4gICAgICAgIHt7ICdBcHBseWBzZWxlY3Rpb25gJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvZGl2PlxuIl19
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7OztBQXFCbEUsTUFBTSxPQUFPLG1CQUFtQjtJQW5CaEM7UUFvQlksbUJBQWMsR0FBOEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV6RSxnQkFBVyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBUWpDLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBMkJ2RDtJQXpCQyxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUNoQyxRQUFRLEVBQUUsSUFBSSxXQUFXLEVBQUU7WUFDM0IsTUFBTSxFQUFFLElBQUksV0FBVyxFQUFFO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN0RCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1lBQ3pCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDOytHQXJDVSxtQkFBbUI7bUdBQW5CLG1CQUFtQixzTUNsQ2hDLCtxR0F5RkEsMkNEckVJLGdCQUFnQix1bEJBQ2hCLFlBQVksNElBQ1osYUFBYSwyRUFDYixJQUFJLDRGQUNKLFdBQVcsMnBCQUNYLG1CQUFtQixnVkFDbkIsa0JBQWtCLHVJQUNsQixxQkFBcUIsd0VBQ3JCLGlDQUFpQyxtRkFDakMsa0JBQWtCLGloQkFDbEIsUUFBUSx3Q0FDUixnQkFBZ0I7OzRGQUdQLG1CQUFtQjtrQkFuQi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBRWYsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLElBQUk7d0JBQ0osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIscUJBQXFCO3dCQUNyQixpQ0FBaUM7d0JBQ2pDLGtCQUFrQjt3QkFDbEIsUUFBUTt3QkFDUixnQkFBZ0I7cUJBQ2pCOzhCQUdTLGNBQWM7c0JBQXZCLE1BQU07Z0JBRVAsV0FBVztzQkFEVixLQUFLO2dCQUdOLGVBQWU7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIElucHV0LCBPdXRwdXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQaWNrZWREYXRlcyB9IGZyb20gJy4vZGF0ZS1waWNrZXIubW9kZWwnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgQnNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZHJvcGRvd24nO1xuaW1wb3J0IHsgQ2RrVHJhcEZvY3VzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgSWNvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2NvbW1vbi9pY29uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOZ0lmLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9mb3Jtcy9mb3JtLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDOHlUcmFuc2xhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9pMThuL2M4eS10cmFuc2xhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJlcXVpcmVkSW5wdXRQbGFjZWhvbGRlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm1zL3JlcXVpcmVkLWlucHV0LXBsYWNlaG9sZGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCc0RhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgQzh5VHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uL2kxOG4vYzh5LXRyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IERhdGVGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL2RhdGUtZm9ybWF0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0ZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQnNEcm9wZG93bk1vZHVsZSxcbiAgICBDZGtUcmFwRm9jdXMsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBOZ0lmLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybUdyb3VwQ29tcG9uZW50LFxuICAgIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBSZXF1aXJlZElucHV0UGxhY2Vob2xkZXJEaXJlY3RpdmUsXG4gICAgQnNEYXRlcGlja2VyTW9kdWxlLFxuICAgIERhdGVQaXBlLFxuICAgIEM4eVRyYW5zbGF0ZVBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQE91dHB1dCgpIG9uRGF0ZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8UGlja2VkRGF0ZXM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlciA9IGdldHRleHQoJ0ZpbHRlciBieSBkYXRl4oCmJyk7XG4gIEBJbnB1dCgpXG4gIGRhdGVJbnB1dEZvcm1hdDogc3RyaW5nO1xuXG4gIGRhdGVGcm9tOiBzdHJpbmc7XG4gIGRhdGVUbzogc3RyaW5nO1xuICBmZ0RhdGVQaWNrZXI6IEZvcm1Hcm91cDtcblxuICBwcml2YXRlIGRhdGVGb3JtYXRTZXJ2aWNlID0gaW5qZWN0KERhdGVGb3JtYXRTZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuZGF0ZUlucHV0Rm9ybWF0KSB7XG4gICAgICB0aGlzLmRhdGVJbnB1dEZvcm1hdCA9IHRoaXMuZGF0ZUZvcm1hdFNlcnZpY2UuZ2V0RGF0ZUZvcm1hdCgpO1xuICAgIH1cbiAgICB0aGlzLmZnRGF0ZVBpY2tlciA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgZGF0ZUZyb206IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgZGF0ZVRvOiBuZXcgRm9ybUNvbnRyb2woKVxuICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyKCkge1xuICAgIHRoaXMub25EYXRlU2VsZWN0ZWQuZW1pdCh0aGlzLmZnRGF0ZVBpY2tlci52YWx1ZSk7XG4gICAgdGhpcy5kYXRlRnJvbSA9IHRoaXMuZmdEYXRlUGlja2VyLmdldCgnZGF0ZUZyb20nKS52YWx1ZTtcbiAgICB0aGlzLmRhdGVUbyA9IHRoaXMuZmdEYXRlUGlja2VyLmdldCgnZGF0ZVRvJykudmFsdWU7XG4gIH1cblxuICBjbGVhckZpbHRlcigpIHtcbiAgICB0aGlzLmZnRGF0ZVBpY2tlci5zZXRWYWx1ZSh7XG4gICAgICBkYXRlRnJvbTogbnVsbCxcbiAgICAgIGRhdGVUbzogbnVsbFxuICAgIH0pO1xuICAgIHRoaXMub25EYXRlU2VsZWN0ZWQuZW1pdChudWxsKTtcbiAgICB0aGlzLmRhdGVGcm9tID0gbnVsbDtcbiAgICB0aGlzLmRhdGVUbyA9IG51bGw7XG4gIH1cbn1cbiIsIjxkaXZcbiAgZHJvcGRvd25cbiAgY2xhc3M9XCJjOHktY2hpbGQtYXNzZXRzLXNlbGVjdG9yIGRyb3Bkb3duXCJcbiAgI2RhdGVmaWx0ZXI9XCJicy1kcm9wZG93blwiXG4gIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgcGxhY2VtZW50PVwiYm90dG9tIGxlZnRcIlxuICBbY2RrVHJhcEZvY3VzXT1cImRhdGVmaWx0ZXIuaXNPcGVuXCJcbiAgPlxuICA8YnV0dG9uXG4gICAgaWQ9XCJkYXRlLXJhbmdlXCJcbiAgICBkcm9wZG93blRvZ2dsZVxuICAgIHRpdGxlPVwie3sgJ0RhdGUgZmlsdGVyJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJidG4gZHJvcGRvd24tdG9nZ2xlIGQtZmxleCBhLWktY2VudGVyIGM4eS1kcm9wZG93blwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwiY2FsZW5kYXItb1wiIGNsYXNzPVwibS1yLTQgdGV4dC1wcmltYXJ5XCI+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgPHNwYW4gKm5nSWY9XCJkYXRlRnJvbVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGxcIj57eyAnRnJvbWBkYXRlYCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIHt7IGRhdGVGcm9tIHwgZGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJkYXRlVG9cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsXCI+e3sgJ1RvYGRhdGVgJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAge3sgZGF0ZVRvIHwgZGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPGVtICpuZ0lmPVwiIWRhdGVGcm9tICYmICFkYXRlVG9cIiBjbGFzcz1cInRleHQtbXV0ZWRcIj5cbiAgICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICAgIDwvZW0+XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZnRGF0ZVBpY2tlclwiXG4gICAgaWQ9XCJkcm9wZG93bi1kYXRlLXJhbmdlXCJcbiAgICAqZHJvcGRvd25NZW51XG4gICAgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWZvcm0gcC1iLTBcIj5cbiAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cImZvcm0tZ3JvdXAtc21cIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImRhdGVGcm9tXCIgY2xhc3M9XCJ0ZXh0LW1lZGl1bSBtLWItNFwiIHRyYW5zbGF0ZT5EYXRlIGZyb208L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBkYXRlcGlja2VyIGQtYmxvY2sgbS1iLTBcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwiZGF0ZUZyb21cIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZUZyb21cIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZml0LXcgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ0RhdGUgZnJvbScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgYnNEYXRlcGlja2VyXG4gICAgICAgICAgICBbbWF4RGF0ZV09XCJkYXRlVG9cIlxuICAgICAgICAgICAgKGJzVmFsdWVDaGFuZ2UpPVwiZGF0ZUZyb20gPSAkZXZlbnRcIlxuICAgICAgICAgICAgW2JzQ29uZmlnXT1cInsgY3VzdG9tVG9kYXlDbGFzczogJ3RvZGF5JywgcmV0dXJuRm9jdXNUb0lucHV0OiB0cnVlLCBkYXRlSW5wdXRGb3JtYXQ6IGRhdGVJbnB1dEZvcm1hdCB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJmb3JtLWdyb3VwIGZvcm0tZ3JvdXAtc20gXCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJkYXRlVG9cIiB0cmFuc2xhdGU+RGF0ZSB0bzwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGRhdGVwaWNrZXIgbS1sLTAgZC1ibG9jayBtLWItMCBcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIG5hbWU9XCJkYXRlVG9cIlxuICAgICAgICAgICAgaWQ9XCJkYXRlVG9cIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZVRvXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZpdC13IHRleHQtbGVmdFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdEYXRlIHRvJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBic0RhdGVwaWNrZXJcbiAgICAgICAgICAgIFttaW5EYXRlXT1cImRhdGVGcm9tXCJcbiAgICAgICAgICAgIChic1ZhbHVlQ2hhbmdlKT1cImRhdGVUbyA9ICRldmVudFwiXG4gICAgICAgICAgICBbYnNDb25maWddPVwieyBjdXN0b21Ub2RheUNsYXNzOiAndG9kYXknLCByZXR1cm5Gb2N1c1RvSW5wdXQ6IHRydWUsIGRhdGVJbnB1dEZvcm1hdDogZGF0ZUlucHV0Rm9ybWF0IH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicC0xNiBkLWZsZXggc2VwYXJhdG9yLXRvcCBnYXAtOFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0aXRsZT1cInt7ICdDbGVhciBzZWxlY3Rpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBmbGV4LWdyb3dcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKTsgZGF0ZWZpbHRlci5pc09wZW4gPSAhZGF0ZWZpbHRlci5pc09wZW5cIlxuICAgICAgPlxuICAgICAgICB7eyAnQ2xlYXJgc2VsZWN0aW9uYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiIWZnRGF0ZVBpY2tlci5nZXQoJ2RhdGVGcm9tJykudmFsdWUgJiYgIWZnRGF0ZVBpY2tlci5nZXQoJ2RhdGVUbycpLnZhbHVlXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQXBwbHkgc2VsZWN0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgKGNsaWNrKT1cImZpbHRlcigpOyBkYXRlZmlsdGVyLmlzT3BlbiA9ICFkYXRlZmlsdGVyLmlzT3BlblwiXG4gICAgICA+XG4gICAgICAgIHt7ICdBcHBseWBzZWxlY3Rpb25gJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvZGl2PlxuIl19
|