@yuuvis/client-shell-core 0.6.5
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/index.mjs +10 -0
- package/esm2022/lib/client-shell.assets.mjs +10 -0
- package/esm2022/lib/client-shell.interface.mjs +5 -0
- package/esm2022/lib/services/command-palette/command-palette/command-palette.component.mjs +175 -0
- package/esm2022/lib/services/command-palette/command-palette.interface.mjs +2 -0
- package/esm2022/lib/services/command-palette/command-palette.service.mjs +128 -0
- package/esm2022/lib/services/shell/shell.extentions.service.mjs +9 -0
- package/esm2022/lib/services/shell/shell.service.mjs +295 -0
- package/esm2022/lib/services/shell-notifications/shell-notifications.interface.mjs +2 -0
- package/esm2022/lib/services/shell-notifications/shell-notifications.service.mjs +89 -0
- package/esm2022/lib/tile-extension.interface.mjs +2 -0
- package/esm2022/yuuvis-client-shell-core.mjs +5 -0
- package/index.d.ts +9 -0
- package/lib/client-shell.assets.d.ts +8 -0
- package/lib/client-shell.interface.d.ts +55 -0
- package/lib/services/command-palette/command-palette/command-palette.component.d.ts +31 -0
- package/lib/services/command-palette/command-palette.interface.d.ts +16 -0
- package/lib/services/command-palette/command-palette.service.d.ts +41 -0
- package/lib/services/shell/shell.extentions.service.d.ts +2 -0
- package/lib/services/shell/shell.service.d.ts +124 -0
- package/lib/services/shell-notifications/shell-notifications.interface.d.ts +10 -0
- package/lib/services/shell-notifications/shell-notifications.service.d.ts +34 -0
- package/lib/tile-extension.interface.d.ts +12 -0
- package/package.json +27 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { inject, Injectable, signal } from '@angular/core';
|
|
2
|
+
import { BaseObjectTypeField, DmsService, SystemService, TranslateService, UserService, Utils } from '@yuuvis/client-core';
|
|
3
|
+
import { YvcOverlayService } from '@yuuvis/components/overlay';
|
|
4
|
+
import { BehaviorSubject, debounceTime, filter, fromEvent, map, of, ReplaySubject, switchMap } from 'rxjs';
|
|
5
|
+
import { CLIENT_SHELL_ASSETS } from '../../client-shell.assets';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class ShellService {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.#dmsService = inject(DmsService);
|
|
10
|
+
this.#overlay = inject(YvcOverlayService);
|
|
11
|
+
this.#system = inject(SystemService);
|
|
12
|
+
this.#userService = inject(UserService);
|
|
13
|
+
this.translate = inject(TranslateService);
|
|
14
|
+
this._busyCount = 0;
|
|
15
|
+
this.isBusySubject = new BehaviorSubject(false);
|
|
16
|
+
this.isBusy$ = this.isBusySubject.asObservable().pipe(debounceTime(500));
|
|
17
|
+
this.#appSettings = {};
|
|
18
|
+
this.#appSettingsSubject = new ReplaySubject();
|
|
19
|
+
this.appSettings$ = this.#appSettingsSubject.asObservable().pipe(debounceTime(500));
|
|
20
|
+
this.#appSchemata = [];
|
|
21
|
+
this.appBaseRoutes = {};
|
|
22
|
+
this.#defaultShellConfig = {
|
|
23
|
+
icons: {
|
|
24
|
+
appIcon: CLIENT_SHELL_ASSETS.icons?.appIcon,
|
|
25
|
+
logout: CLIENT_SHELL_ASSETS.icons?.logout,
|
|
26
|
+
settings: CLIENT_SHELL_ASSETS.icons?.settings,
|
|
27
|
+
notifications: CLIENT_SHELL_ASSETS.icons?.notifications
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
this.shellConfig = signal(this.#defaultShellConfig);
|
|
31
|
+
/** TODO: implement this feature ????
|
|
32
|
+
* Global shortcuts are captured by the shell to provide a consistent experience
|
|
33
|
+
* accross all apps. Search is one example. Apps should not define their own shourtcuts
|
|
34
|
+
* for search. Instead they should subscribe to the global shortcuts and initialize their
|
|
35
|
+
* search based on the global search shortcut.
|
|
36
|
+
*/
|
|
37
|
+
this.globalShortcuts$ = fromEvent(document, 'keydown').pipe(map((e) => {
|
|
38
|
+
// global shortcut for search
|
|
39
|
+
// if (e.ctrlKey && e.code === 'KeyF') {
|
|
40
|
+
// e.preventDefault();
|
|
41
|
+
// return GlobalShortcut.search;
|
|
42
|
+
// }
|
|
43
|
+
return undefined;
|
|
44
|
+
}), filter((s) => s !== undefined), map((s) => s));
|
|
45
|
+
this._extensions = {};
|
|
46
|
+
this._objectFlavors = [];
|
|
47
|
+
this._objectCreateFlavors = [];
|
|
48
|
+
}
|
|
49
|
+
#dmsService;
|
|
50
|
+
#overlay;
|
|
51
|
+
#system;
|
|
52
|
+
#userService;
|
|
53
|
+
#appSettings;
|
|
54
|
+
#appSettingsSubject;
|
|
55
|
+
#appSchemata;
|
|
56
|
+
#defaultShellConfig;
|
|
57
|
+
setShellConfig(csc) {
|
|
58
|
+
this.shellConfig.update((sc) => ({
|
|
59
|
+
icons: {
|
|
60
|
+
appIcon: csc.icons?.appIcon ?? sc.icons?.appIcon,
|
|
61
|
+
logout: csc.icons?.logout ?? sc.icons?.logout,
|
|
62
|
+
settings: csc.icons?.settings ?? sc.icons?.settings,
|
|
63
|
+
notifications: csc.icons?.settings ?? sc.icons?.notifications
|
|
64
|
+
}
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
setAppBaseRoutes(apps) {
|
|
68
|
+
apps.forEach((a) => (this.appBaseRoutes[a.id] = a.path || ''));
|
|
69
|
+
}
|
|
70
|
+
registerApp(schema) {
|
|
71
|
+
this.#appSchemata.push(schema);
|
|
72
|
+
}
|
|
73
|
+
getRegisteredApp(id) {
|
|
74
|
+
return this.#appSchemata.find((a) => a.id === id);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Register settings for apps to hook into shell settings page.
|
|
78
|
+
* These exposed settings will be saved in the users settings on the backend.
|
|
79
|
+
* @param appID ID of the app that exposes the settings
|
|
80
|
+
* @param cfg ShellAppSettings object containing the settings
|
|
81
|
+
*/
|
|
82
|
+
registerAppSettings(appID, cfg) {
|
|
83
|
+
this.#appSettings[appID] = cfg;
|
|
84
|
+
this.#appSettingsSubject.next(this.#getAppSettings());
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Load persisted settings for a specific app
|
|
88
|
+
* @param appID ID of the app to load the settings for
|
|
89
|
+
*/
|
|
90
|
+
usersAppSettings$(appID) {
|
|
91
|
+
return this.#userService.user$.pipe(map((u) => {
|
|
92
|
+
return u && u.userSettings.clientAppSettings ? u.userSettings.clientAppSettings[appID] : undefined;
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
saveUsersAppSettings(appID, settings) {
|
|
96
|
+
return this.#userService.saveUserSettings({ clientAppSettings: { [appID]: settings } });
|
|
97
|
+
}
|
|
98
|
+
#getAppSettings() {
|
|
99
|
+
return Object.keys(this.#appSettings)
|
|
100
|
+
.map((key) => ({
|
|
101
|
+
appID: this.#appSettings[key].appID,
|
|
102
|
+
label: this.#appSettings[key].label,
|
|
103
|
+
properties: this.#appSettings[key].properties
|
|
104
|
+
}))
|
|
105
|
+
.sort();
|
|
106
|
+
}
|
|
107
|
+
addBusy() {
|
|
108
|
+
if (this._busyCount === 0) {
|
|
109
|
+
this.isBusySubject.next(true);
|
|
110
|
+
}
|
|
111
|
+
this._busyCount++;
|
|
112
|
+
}
|
|
113
|
+
removeBusy() {
|
|
114
|
+
this._busyCount--;
|
|
115
|
+
if (this._busyCount === 0) {
|
|
116
|
+
this.isBusySubject.next(false);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exposeObjectCreateFlavors(flavors) {
|
|
120
|
+
flavors.forEach((flavor) => {
|
|
121
|
+
const idx = this._objectCreateFlavors.findIndex((f) => f.id === flavor.id);
|
|
122
|
+
if (idx === -1)
|
|
123
|
+
this._objectCreateFlavors.push(flavor);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
concealObjectCreateFlavors(flavors) {
|
|
127
|
+
const fid = flavors.map((f) => f.id);
|
|
128
|
+
this._objectCreateFlavors = this._objectCreateFlavors.filter((f) => !fid.includes(f.id));
|
|
129
|
+
}
|
|
130
|
+
getObjectCreateFlavors() {
|
|
131
|
+
return this._objectCreateFlavors;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Exposes a list of object flavors to the shell.
|
|
135
|
+
* Flavors are able to be applied to objects and add new metadata properties to them.
|
|
136
|
+
* @param flavors Array of flavors to be exposed
|
|
137
|
+
* @param app Optional ID of the app that exposes the flavors (defaults to 'global' if not provided)
|
|
138
|
+
*/
|
|
139
|
+
exposeObjectFlavors(flavors, app = 'global') {
|
|
140
|
+
flavors.forEach((f) => this.exposeObjectFlavor(f, app));
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Removes exposed object flavors from the shell.
|
|
144
|
+
* @param flavors Array of flavors to be concealed
|
|
145
|
+
*/
|
|
146
|
+
concealObjectFlavors(flavors, app = 'global') {
|
|
147
|
+
flavors.forEach((f) => this.concealObjectFlavor(f, app));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Exposes an object flavor to the shell. Flavors are able to be applied to objects
|
|
151
|
+
* in order to add a new aspect to them. An object containing an image for example could
|
|
152
|
+
* be added a flavor of 'EXIF Data' that will add the corresponding SOT to it. This way the
|
|
153
|
+
* object gets new metadata properties. If supported, these metadata could even be extracted
|
|
154
|
+
* from the file and filled out automatically.
|
|
155
|
+
* @param flavor The flavor object to be exposed
|
|
156
|
+
* @param app Optional ID of the app that exposes the flavor (defaults to 'global' if not provided)
|
|
157
|
+
*/
|
|
158
|
+
exposeObjectFlavor(flavor, app = 'global') {
|
|
159
|
+
const idx = this._objectFlavors.findIndex((f) => f.id === flavor.id && f.app === app);
|
|
160
|
+
if (idx === -1)
|
|
161
|
+
this._objectFlavors.push({ ...flavor, app });
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Removes an exposed object flavor from the shell.
|
|
165
|
+
* @param flavor Flavor to be concealed
|
|
166
|
+
* @param app Optional ID of the app that exposes the flavor (defaults to 'global' if not provided)
|
|
167
|
+
*/
|
|
168
|
+
concealObjectFlavor(flavor, app = 'global') {
|
|
169
|
+
this._objectFlavors = this._objectFlavors.filter((f) => f.id !== flavor.id && f.app !== app);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get registered object flavors
|
|
173
|
+
* @param app Optional app ID that restricts the returned flavors to the ones
|
|
174
|
+
* provided by a particular app. If not provided all flavors are returned
|
|
175
|
+
* @returns Array of matching object flavors
|
|
176
|
+
*/
|
|
177
|
+
getObjectFlavors(app) {
|
|
178
|
+
return app ? this._objectFlavors.filter((of) => of.app === app) : this._objectFlavors;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Triggers the application of an object flavor. If the flavor has an applyComponent
|
|
182
|
+
* defined, the overlay will be opened with the component. Otherwise the flavor will
|
|
183
|
+
* be applied directly to the object.
|
|
184
|
+
* @param dmsObject The object to apply the flavor to
|
|
185
|
+
* @param flavor The flavor to apply
|
|
186
|
+
* @param data Optional data to be passed to the flavor component
|
|
187
|
+
* @returns Observable that emits true if the flavor was applied successfully
|
|
188
|
+
*/
|
|
189
|
+
triggerApplyObjectFlavor(dmsObject, flavor, data) {
|
|
190
|
+
if (dmsObject) {
|
|
191
|
+
if (flavor.applyComponent) {
|
|
192
|
+
this.#overlay.open(flavor.applyComponent, {
|
|
193
|
+
dmsObject,
|
|
194
|
+
flavor,
|
|
195
|
+
data
|
|
196
|
+
});
|
|
197
|
+
return of(true);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
const sots = dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] || [];
|
|
201
|
+
const data = {};
|
|
202
|
+
data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] = [...sots, flavor.sot];
|
|
203
|
+
return this.#dmsService.updateDmsObject(dmsObject?.id, data).pipe(map(() => true));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else
|
|
207
|
+
return of(false);
|
|
208
|
+
}
|
|
209
|
+
removeObjectFlavor(dmsObject, flavor) {
|
|
210
|
+
return this.#overlay
|
|
211
|
+
.confirm({
|
|
212
|
+
message: this.translate.instant('yuv.shell.flavor.remove.confirm.message', {
|
|
213
|
+
flavor: this.translate.instant(flavor.id)
|
|
214
|
+
})
|
|
215
|
+
})
|
|
216
|
+
.pipe(switchMap((confirmed) => {
|
|
217
|
+
if (confirmed) {
|
|
218
|
+
// remove SOT ...
|
|
219
|
+
const data = {
|
|
220
|
+
[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS]: dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS].filter((sot) => sot !== flavor.sot)
|
|
221
|
+
};
|
|
222
|
+
// ... and all the properties that came with it
|
|
223
|
+
this.#system.getSecondaryObjectType(flavor.sot)?.fields.forEach((p) => {
|
|
224
|
+
data[p.id] = null;
|
|
225
|
+
});
|
|
226
|
+
return this.#dmsService.updateDmsObject(dmsObject.id, data).pipe(map(() => true));
|
|
227
|
+
}
|
|
228
|
+
else
|
|
229
|
+
return of(false);
|
|
230
|
+
}));
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get object flavors applicable for a certain mimetype
|
|
234
|
+
* @param mimeType Mime type or mime type pattern like 'image/*'
|
|
235
|
+
* @param app Optional app ID that restricts the returned flavors to the ones
|
|
236
|
+
* provided by a particular app
|
|
237
|
+
* @param customFlavors Optional array of custom flavors to also take into account.
|
|
238
|
+
* This could be flavors managed by an app itself that are not supposed to be
|
|
239
|
+
* exposed to other apps
|
|
240
|
+
* @returns Array of matching object flavors
|
|
241
|
+
*/
|
|
242
|
+
getApplicableObjectFlavors(mimeType, app, customFlavors) {
|
|
243
|
+
return [...(customFlavors || []), ...this._objectFlavors].filter((of) => of.applicableTo?.mimeTypes.some((mtp) => Utils.patternToRegExp(mtp).test(mimeType)) && (!app || of.app === app));
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get applied and applicable object flavors for a certain object
|
|
247
|
+
* @param dmsObject DmsObject to get flavors for
|
|
248
|
+
* @returns Object containing two arrays: applied and applicable flavors
|
|
249
|
+
*/
|
|
250
|
+
getAppliedObjectFlavors(dmsObject) {
|
|
251
|
+
const applied = [];
|
|
252
|
+
const applicable = [];
|
|
253
|
+
if (dmsObject) {
|
|
254
|
+
const sots = dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] || [];
|
|
255
|
+
if (dmsObject.content) {
|
|
256
|
+
this.getApplicableObjectFlavors(dmsObject.content.mimeType).forEach((flavor) => {
|
|
257
|
+
if (sots.includes(flavor.sot)) {
|
|
258
|
+
applied.push(flavor);
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
applicable.push(flavor);
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return { applied, applicable };
|
|
267
|
+
}
|
|
268
|
+
applyObjectFlavor(dmsObject, flavor, data = {}) {
|
|
269
|
+
const sots = dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] || [];
|
|
270
|
+
data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] = [...sots, flavor.sot];
|
|
271
|
+
return this.#dmsService.updateDmsObject(dmsObject.id, data);
|
|
272
|
+
}
|
|
273
|
+
registerTileExtension(ext) {
|
|
274
|
+
this._extensions[ext.typeId] = ext;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Get tile extensions for a certain type
|
|
278
|
+
* @param typeId ID of the type to fetch extesion for (objectTypeID or secondaryObjectTypeID)
|
|
279
|
+
* @returns
|
|
280
|
+
*/
|
|
281
|
+
getRegisteredTileExtensions() {
|
|
282
|
+
return this._extensions;
|
|
283
|
+
}
|
|
284
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
285
|
+
_init() { }
|
|
286
|
+
static { this.ɵfac = function ShellService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ShellService)(); }; }
|
|
287
|
+
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ShellService, factory: ShellService.ɵfac, providedIn: 'root' }); }
|
|
288
|
+
}
|
|
289
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShellService, [{
|
|
290
|
+
type: Injectable,
|
|
291
|
+
args: [{
|
|
292
|
+
providedIn: 'root'
|
|
293
|
+
}]
|
|
294
|
+
}], null, null); })();
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1zaGVsbC1jb3JlL3NyYy9saWIvc2VydmljZXMvc2hlbGwvc2hlbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUNMLG1CQUFtQixFQUVuQixVQUFVLEVBRVYsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsS0FBSyxFQUVOLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBT2hFLE1BQU0sT0FBTyxZQUFZO0lBSHpCO1FBSUUsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JDLFlBQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEMsaUJBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsY0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXJDLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVELFlBQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVwRSxpQkFBWSxHQUFxQyxFQUFFLENBQUM7UUFDcEQsd0JBQW1CLEdBQUcsSUFBSSxhQUFhLEVBQXNCLENBQUM7UUFDOUQsaUJBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRS9FLGlCQUFZLEdBQWdCLEVBQUUsQ0FBQztRQUMvQixrQkFBYSxHQUEyQixFQUFFLENBQUM7UUFFM0Msd0JBQW1CLEdBQXNCO1lBQ3ZDLEtBQUssRUFBRTtnQkFDTCxPQUFPLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxFQUFFLE9BQU87Z0JBQzNDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsTUFBTTtnQkFDekMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLEtBQUssRUFBRSxRQUFRO2dCQUM3QyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGFBQWE7YUFDeEQ7U0FDRixDQUFDO1FBQ0YsZ0JBQVcsR0FBRyxNQUFNLENBQW9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRWxFOzs7OztXQUtHO1FBQ0gscUJBQWdCLEdBQStCLFNBQVMsQ0FBZ0IsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDL0YsR0FBRyxDQUFDLENBQUMsQ0FBZ0IsRUFBRSxFQUFFO1lBQ3ZCLDZCQUE2QjtZQUM3Qix3Q0FBd0M7WUFDeEMsd0JBQXdCO1lBQ3hCLGtDQUFrQztZQUNsQyxJQUFJO1lBQ0osT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDLEVBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBNkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxFQUMxRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQW1CLENBQUMsQ0FDaEMsQ0FBQztRQUVNLGdCQUFXLEdBQWtDLEVBQUUsQ0FBQztRQUNoRCxtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFDcEMseUJBQW9CLEdBQXlCLEVBQUUsQ0FBQztLQW1RekQ7SUFuVEMsV0FBVyxDQUFzQjtJQUNqQyxRQUFRLENBQTZCO0lBQ3JDLE9BQU8sQ0FBeUI7SUFDaEMsWUFBWSxDQUF1QjtJQU9uQyxZQUFZLENBQXdDO0lBQ3BELG1CQUFtQixDQUEyQztJQUc5RCxZQUFZLENBQW1CO0lBRy9CLG1CQUFtQixDQU9qQjtJQTBCRixjQUFjLENBQUMsR0FBc0I7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0IsS0FBSyxFQUFFO2dCQUNMLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU87Z0JBQ2hELE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07Z0JBQzdDLFFBQVEsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVE7Z0JBQ25ELGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLGFBQWE7YUFDOUQ7U0FDRixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFXO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBaUI7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQVU7UUFDekIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsR0FBcUI7UUFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDakMsR0FBRyxDQUFDLENBQUMsQ0FBc0IsRUFBRSxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNyRyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQWEsRUFBRSxRQUEwQjtRQUM1RCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDbEMsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUs7WUFDbkMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSztZQUNuQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVO1NBQzlDLENBQUMsQ0FBQzthQUNGLElBQUksRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsVUFBVTtRQUNSLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxPQUE2QjtRQUNyRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBMEIsRUFBRSxFQUFFO1lBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztnQkFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDBCQUEwQixDQUFDLE9BQTZCO1FBQ3RELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbUJBQW1CLENBQUMsT0FBMEIsRUFBRSxHQUFHLEdBQUcsUUFBUTtRQUM1RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILG9CQUFvQixDQUFDLE9BQTBCLEVBQUUsR0FBRyxHQUFHLFFBQVE7UUFDN0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILGtCQUFrQixDQUFDLE1BQXVCLEVBQUUsR0FBRyxHQUFHLFFBQVE7UUFDeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3RGLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztZQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLE1BQXVCLEVBQUUsR0FBRyxHQUFHLFFBQVE7UUFDekQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLENBQUMsR0FBWTtRQUMzQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDeEYsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsd0JBQXdCLENBQUMsU0FBb0IsRUFBRSxNQUFvQixFQUFFLElBQVU7UUFDN0UsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFO29CQUN4QyxTQUFTO29CQUNULE1BQU07b0JBQ04sSUFBSTtpQkFDTCxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxHQUFjLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQWMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pHLE1BQU0sSUFBSSxHQUFRLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckYsQ0FBQztRQUNILENBQUM7O1lBQU0sT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQW9CLEVBQUUsTUFBb0I7UUFDM0QsT0FBTyxJQUFJLENBQUMsUUFBUTthQUNqQixPQUFPLENBQUM7WUFDUCxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUNBQXlDLEVBQUU7Z0JBQ3pFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2FBQzFDLENBQUM7U0FDSCxDQUFDO2FBQ0QsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLFNBQWtCLEVBQUUsRUFBRTtZQUMvQixJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLGlCQUFpQjtnQkFDakIsTUFBTSxJQUFJLEdBQTRCO29CQUNwQyxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLEVBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBYyxDQUFDLE1BQU0sQ0FDakksQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUNwQztpQkFDRixDQUFDO2dCQUNGLCtDQUErQztnQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNwRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNwRixDQUFDOztnQkFBTSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILDBCQUEwQixDQUFDLFFBQWdCLEVBQUUsR0FBWSxFQUFFLGFBQThCO1FBQ3ZGLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FDOUQsQ0FBQyxFQUFnQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUN0SSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx1QkFBdUIsQ0FBQyxTQUFvQjtRQUkxQyxNQUFNLE9BQU8sR0FBbUIsRUFBRSxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFtQixFQUFFLENBQUM7UUFDdEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxHQUFjLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQWMsSUFBSSxFQUFFLENBQUM7WUFDekcsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQW9CLEVBQUUsRUFBRTtvQkFDM0YsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN2QixDQUFDO3lCQUFNLENBQUM7d0JBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBb0IsRUFBRSxNQUFvQixFQUFFLE9BQWdDLEVBQUU7UUFDOUYsTUFBTSxJQUFJLEdBQWMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBYyxJQUFJLEVBQUUsQ0FBQztRQUN6RyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQWtCO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDJCQUEyQjtRQUN6QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxLQUFLLEtBQUksQ0FBQzs2R0FuVEMsWUFBWTt1RUFBWixZQUFZLFdBQVosWUFBWSxtQkFGWCxNQUFNOztpRkFFUCxZQUFZO2NBSHhCLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCYXNlT2JqZWN0VHlwZUZpZWxkLFxuICBEbXNPYmplY3QsXG4gIERtc1NlcnZpY2UsXG4gIE9iamVjdENyZWF0ZUZsYXZvcixcbiAgU3lzdGVtU2VydmljZSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgVXNlclNlcnZpY2UsXG4gIFV0aWxzLFxuICBZdXZVc2VyXG59IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgWXZjT3ZlcmxheVNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvb3ZlcmxheSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmcm9tRXZlbnQsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIFJlcGxheVN1YmplY3QsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ0xJRU5UX1NIRUxMX0FTU0VUUyB9IGZyb20gJy4uLy4uL2NsaWVudC1zaGVsbC5hc3NldHMnO1xuaW1wb3J0IHsgQXBwLCBBcHBTY2hlbWEsIEFwcFNjaGVtYUZsYXZvciwgQ2xpZW50U2hlbGxDb25maWcsIEdsb2JhbFNob3J0Y3V0LCBPYmplY3RGbGF2b3IsIFNoZWxsQXBwU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9jbGllbnQtc2hlbGwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRpbGVFeHRlbnNpb24gfSBmcm9tICcuLi8uLi90aWxlLWV4dGVuc2lvbi5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTaGVsbFNlcnZpY2Uge1xuICAjZG1zU2VydmljZSA9IGluamVjdChEbXNTZXJ2aWNlKTtcbiAgI292ZXJsYXkgPSBpbmplY3QoWXZjT3ZlcmxheVNlcnZpY2UpO1xuICAjc3lzdGVtID0gaW5qZWN0KFN5c3RlbVNlcnZpY2UpO1xuICAjdXNlclNlcnZpY2UgPSBpbmplY3QoVXNlclNlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBwcml2YXRlIF9idXN5Q291bnQgPSAwO1xuICBwcml2YXRlIGlzQnVzeVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNCdXN5JCA9IHRoaXMuaXNCdXN5U3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSg1MDApKTtcblxuICAjYXBwU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIFNoZWxsQXBwU2V0dGluZ3M+ID0ge307XG4gICNhcHBTZXR0aW5nc1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxTaGVsbEFwcFNldHRpbmdzW10+KCk7XG4gIGFwcFNldHRpbmdzJCA9IHRoaXMuI2FwcFNldHRpbmdzU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSg1MDApKTtcblxuICAjYXBwU2NoZW1hdGE6IEFwcFNjaGVtYVtdID0gW107XG4gIGFwcEJhc2VSb3V0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAjZGVmYXVsdFNoZWxsQ29uZmlnOiBDbGllbnRTaGVsbENvbmZpZyA9IHtcbiAgICBpY29uczoge1xuICAgICAgYXBwSWNvbjogQ0xJRU5UX1NIRUxMX0FTU0VUUy5pY29ucz8uYXBwSWNvbixcbiAgICAgIGxvZ291dDogQ0xJRU5UX1NIRUxMX0FTU0VUUy5pY29ucz8ubG9nb3V0LFxuICAgICAgc2V0dGluZ3M6IENMSUVOVF9TSEVMTF9BU1NFVFMuaWNvbnM/LnNldHRpbmdzLFxuICAgICAgbm90aWZpY2F0aW9uczogQ0xJRU5UX1NIRUxMX0FTU0VUUy5pY29ucz8ubm90aWZpY2F0aW9uc1xuICAgIH1cbiAgfTtcbiAgc2hlbGxDb25maWcgPSBzaWduYWw8Q2xpZW50U2hlbGxDb25maWc+KHRoaXMuI2RlZmF1bHRTaGVsbENvbmZpZyk7XG5cbiAgLyoqIFRPRE86IGltcGxlbWVudCB0aGlzIGZlYXR1cmUgPz8/P1xuICAgKiBHbG9iYWwgc2hvcnRjdXRzIGFyZSBjYXB0dXJlZCBieSB0aGUgc2hlbGwgdG8gcHJvdmlkZSBhIGNvbnNpc3RlbnQgZXhwZXJpZW5jZVxuICAgKiBhY2Nyb3NzIGFsbCBhcHBzLiBTZWFyY2ggaXMgb25lIGV4YW1wbGUuIEFwcHMgc2hvdWxkIG5vdCBkZWZpbmUgdGhlaXIgb3duIHNob3VydGN1dHNcbiAgICogZm9yIHNlYXJjaC4gSW5zdGVhZCB0aGV5IHNob3VsZCBzdWJzY3JpYmUgdG8gdGhlIGdsb2JhbCBzaG9ydGN1dHMgYW5kIGluaXRpYWxpemUgdGhlaXJcbiAgICogc2VhcmNoIGJhc2VkIG9uIHRoZSBnbG9iYWwgc2VhcmNoIHNob3J0Y3V0LlxuICAgKi9cbiAgZ2xvYmFsU2hvcnRjdXRzJDogT2JzZXJ2YWJsZTxHbG9iYWxTaG9ydGN1dD4gPSBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJykucGlwZShcbiAgICBtYXAoKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIC8vIGdsb2JhbCBzaG9ydGN1dCBmb3Igc2VhcmNoXG4gICAgICAvLyBpZiAoZS5jdHJsS2V5ICYmIGUuY29kZSA9PT0gJ0tleUYnKSB7XG4gICAgICAvLyAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vICAgcmV0dXJuIEdsb2JhbFNob3J0Y3V0LnNlYXJjaDtcbiAgICAgIC8vIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSksXG4gICAgZmlsdGVyKChzOiBHbG9iYWxTaG9ydGN1dCB8IHVuZGVmaW5lZCkgPT4gcyAhPT0gdW5kZWZpbmVkKSxcbiAgICBtYXAoKHMpID0+IHMgYXMgR2xvYmFsU2hvcnRjdXQpXG4gICk7XG5cbiAgcHJpdmF0ZSBfZXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgVGlsZUV4dGVuc2lvbj4gPSB7fTtcbiAgcHJpdmF0ZSBfb2JqZWN0Rmxhdm9yczogT2JqZWN0Rmxhdm9yW10gPSBbXTtcbiAgcHJpdmF0ZSBfb2JqZWN0Q3JlYXRlRmxhdm9yczogT2JqZWN0Q3JlYXRlRmxhdm9yW10gPSBbXTtcblxuICBzZXRTaGVsbENvbmZpZyhjc2M6IENsaWVudFNoZWxsQ29uZmlnKSB7XG4gICAgdGhpcy5zaGVsbENvbmZpZy51cGRhdGUoKHNjKSA9PiAoe1xuICAgICAgaWNvbnM6IHtcbiAgICAgICAgYXBwSWNvbjogY3NjLmljb25zPy5hcHBJY29uID8/IHNjLmljb25zPy5hcHBJY29uLFxuICAgICAgICBsb2dvdXQ6IGNzYy5pY29ucz8ubG9nb3V0ID8/IHNjLmljb25zPy5sb2dvdXQsXG4gICAgICAgIHNldHRpbmdzOiBjc2MuaWNvbnM/LnNldHRpbmdzID8/IHNjLmljb25zPy5zZXR0aW5ncyxcbiAgICAgICAgbm90aWZpY2F0aW9uczogY3NjLmljb25zPy5zZXR0aW5ncyA/PyBzYy5pY29ucz8ubm90aWZpY2F0aW9uc1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIHNldEFwcEJhc2VSb3V0ZXMoYXBwczogQXBwW10pIHtcbiAgICBhcHBzLmZvckVhY2goKGEpID0+ICh0aGlzLmFwcEJhc2VSb3V0ZXNbYS5pZF0gPSBhLnBhdGggfHwgJycpKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQXBwKHNjaGVtYTogQXBwU2NoZW1hKSB7XG4gICAgdGhpcy4jYXBwU2NoZW1hdGEucHVzaChzY2hlbWEpO1xuICB9XG5cbiAgZ2V0UmVnaXN0ZXJlZEFwcChpZDogc3RyaW5nKTogQXBwU2NoZW1hIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jYXBwU2NoZW1hdGEuZmluZCgoYSkgPT4gYS5pZCA9PT0gaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHNldHRpbmdzIGZvciBhcHBzIHRvIGhvb2sgaW50byBzaGVsbCBzZXR0aW5ncyBwYWdlLlxuICAgKiBUaGVzZSBleHBvc2VkIHNldHRpbmdzIHdpbGwgYmUgc2F2ZWQgaW4gdGhlIHVzZXJzIHNldHRpbmdzIG9uIHRoZSBiYWNrZW5kLlxuICAgKiBAcGFyYW0gYXBwSUQgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIHNldHRpbmdzXG4gICAqIEBwYXJhbSBjZmcgU2hlbGxBcHBTZXR0aW5ncyBvYmplY3QgY29udGFpbmluZyB0aGUgc2V0dGluZ3NcbiAgICovXG4gIHJlZ2lzdGVyQXBwU2V0dGluZ3MoYXBwSUQ6IHN0cmluZywgY2ZnOiBTaGVsbEFwcFNldHRpbmdzKSB7XG4gICAgdGhpcy4jYXBwU2V0dGluZ3NbYXBwSURdID0gY2ZnO1xuICAgIHRoaXMuI2FwcFNldHRpbmdzU3ViamVjdC5uZXh0KHRoaXMuI2dldEFwcFNldHRpbmdzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgcGVyc2lzdGVkIHNldHRpbmdzIGZvciBhIHNwZWNpZmljIGFwcFxuICAgKiBAcGFyYW0gYXBwSUQgSUQgb2YgdGhlIGFwcCB0byBsb2FkIHRoZSBzZXR0aW5ncyBmb3JcbiAgICovXG4gIHVzZXJzQXBwU2V0dGluZ3MkKGFwcElEOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNoZWxsQXBwU2V0dGluZ3MgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jdXNlclNlcnZpY2UudXNlciQucGlwZShcbiAgICAgIG1hcCgodTogWXV2VXNlciB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICByZXR1cm4gdSAmJiB1LnVzZXJTZXR0aW5ncy5jbGllbnRBcHBTZXR0aW5ncyA/IHUudXNlclNldHRpbmdzLmNsaWVudEFwcFNldHRpbmdzW2FwcElEXSA6IHVuZGVmaW5lZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHNhdmVVc2Vyc0FwcFNldHRpbmdzKGFwcElEOiBzdHJpbmcsIHNldHRpbmdzOiBTaGVsbEFwcFNldHRpbmdzKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy4jdXNlclNlcnZpY2Uuc2F2ZVVzZXJTZXR0aW5ncyh7IGNsaWVudEFwcFNldHRpbmdzOiB7IFthcHBJRF06IHNldHRpbmdzIH0gfSk7XG4gIH1cblxuICAjZ2V0QXBwU2V0dGluZ3MoKTogU2hlbGxBcHBTZXR0aW5nc1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy4jYXBwU2V0dGluZ3MpXG4gICAgICAubWFwKChrZXk6IHN0cmluZykgPT4gKHtcbiAgICAgICAgYXBwSUQ6IHRoaXMuI2FwcFNldHRpbmdzW2tleV0uYXBwSUQsXG4gICAgICAgIGxhYmVsOiB0aGlzLiNhcHBTZXR0aW5nc1trZXldLmxhYmVsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLiNhcHBTZXR0aW5nc1trZXldLnByb3BlcnRpZXNcbiAgICAgIH0pKVxuICAgICAgLnNvcnQoKTtcbiAgfVxuXG4gIGFkZEJ1c3koKSB7XG4gICAgaWYgKHRoaXMuX2J1c3lDb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0J1c3lTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2J1c3lDb3VudCsrO1xuICB9XG4gIHJlbW92ZUJ1c3koKSB7XG4gICAgdGhpcy5fYnVzeUNvdW50LS07XG4gICAgaWYgKHRoaXMuX2J1c3lDb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0J1c3lTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9zZU9iamVjdENyZWF0ZUZsYXZvcnMoZmxhdm9yczogT2JqZWN0Q3JlYXRlRmxhdm9yW10pIHtcbiAgICBmbGF2b3JzLmZvckVhY2goKGZsYXZvcjogT2JqZWN0Q3JlYXRlRmxhdm9yKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLl9vYmplY3RDcmVhdGVGbGF2b3JzLmZpbmRJbmRleCgoZikgPT4gZi5pZCA9PT0gZmxhdm9yLmlkKTtcbiAgICAgIGlmIChpZHggPT09IC0xKSB0aGlzLl9vYmplY3RDcmVhdGVGbGF2b3JzLnB1c2goZmxhdm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbmNlYWxPYmplY3RDcmVhdGVGbGF2b3JzKGZsYXZvcnM6IE9iamVjdENyZWF0ZUZsYXZvcltdKSB7XG4gICAgY29uc3QgZmlkID0gZmxhdm9ycy5tYXAoKGYpID0+IGYuaWQpO1xuICAgIHRoaXMuX29iamVjdENyZWF0ZUZsYXZvcnMgPSB0aGlzLl9vYmplY3RDcmVhdGVGbGF2b3JzLmZpbHRlcigoZikgPT4gIWZpZC5pbmNsdWRlcyhmLmlkKSk7XG4gIH1cblxuICBnZXRPYmplY3RDcmVhdGVGbGF2b3JzKCk6IE9iamVjdENyZWF0ZUZsYXZvcltdIHtcbiAgICByZXR1cm4gdGhpcy5fb2JqZWN0Q3JlYXRlRmxhdm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvc2VzIGEgbGlzdCBvZiBvYmplY3QgZmxhdm9ycyB0byB0aGUgc2hlbGwuXG4gICAqIEZsYXZvcnMgYXJlIGFibGUgdG8gYmUgYXBwbGllZCB0byBvYmplY3RzIGFuZCBhZGQgbmV3IG1ldGFkYXRhIHByb3BlcnRpZXMgdG8gdGhlbS5cbiAgICogQHBhcmFtIGZsYXZvcnMgQXJyYXkgb2YgZmxhdm9ycyB0byBiZSBleHBvc2VkXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIGZsYXZvcnMgKGRlZmF1bHRzIHRvICdnbG9iYWwnIGlmIG5vdCBwcm92aWRlZClcbiAgICovXG4gIGV4cG9zZU9iamVjdEZsYXZvcnMoZmxhdm9yczogQXBwU2NoZW1hRmxhdm9yW10sIGFwcCA9ICdnbG9iYWwnKSB7XG4gICAgZmxhdm9ycy5mb3JFYWNoKChmKSA9PiB0aGlzLmV4cG9zZU9iamVjdEZsYXZvcihmLCBhcHApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGV4cG9zZWQgb2JqZWN0IGZsYXZvcnMgZnJvbSB0aGUgc2hlbGwuXG4gICAqIEBwYXJhbSBmbGF2b3JzIEFycmF5IG9mIGZsYXZvcnMgdG8gYmUgY29uY2VhbGVkXG4gICAqL1xuICBjb25jZWFsT2JqZWN0Rmxhdm9ycyhmbGF2b3JzOiBBcHBTY2hlbWFGbGF2b3JbXSwgYXBwID0gJ2dsb2JhbCcpIHtcbiAgICBmbGF2b3JzLmZvckVhY2goKGYpID0+IHRoaXMuY29uY2VhbE9iamVjdEZsYXZvcihmLCBhcHApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvc2VzIGFuIG9iamVjdCBmbGF2b3IgdG8gdGhlIHNoZWxsLiBGbGF2b3JzIGFyZSBhYmxlIHRvIGJlIGFwcGxpZWQgdG8gb2JqZWN0c1xuICAgKiBpbiBvcmRlciB0byBhZGQgYSBuZXcgYXNwZWN0IHRvIHRoZW0uIEFuIG9iamVjdCBjb250YWluaW5nIGFuIGltYWdlIGZvciBleGFtcGxlIGNvdWxkXG4gICAqIGJlIGFkZGVkIGEgZmxhdm9yIG9mICdFWElGIERhdGEnIHRoYXQgd2lsbCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgU09UIHRvIGl0LiBUaGlzIHdheSB0aGVcbiAgICogb2JqZWN0IGdldHMgbmV3IG1ldGFkYXRhIHByb3BlcnRpZXMuIElmIHN1cHBvcnRlZCwgdGhlc2UgbWV0YWRhdGEgY291bGQgZXZlbiBiZSBleHRyYWN0ZWRcbiAgICogZnJvbSB0aGUgZmlsZSBhbmQgZmlsbGVkIG91dCBhdXRvbWF0aWNhbGx5LlxuICAgKiBAcGFyYW0gZmxhdm9yIFRoZSBmbGF2b3Igb2JqZWN0IHRvIGJlIGV4cG9zZWRcbiAgICogQHBhcmFtIGFwcCBPcHRpb25hbCBJRCBvZiB0aGUgYXBwIHRoYXQgZXhwb3NlcyB0aGUgZmxhdm9yIChkZWZhdWx0cyB0byAnZ2xvYmFsJyBpZiBub3QgcHJvdmlkZWQpXG4gICAqL1xuICBleHBvc2VPYmplY3RGbGF2b3IoZmxhdm9yOiBBcHBTY2hlbWFGbGF2b3IsIGFwcCA9ICdnbG9iYWwnKSB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5fb2JqZWN0Rmxhdm9ycy5maW5kSW5kZXgoKGYpID0+IGYuaWQgPT09IGZsYXZvci5pZCAmJiBmLmFwcCA9PT0gYXBwKTtcbiAgICBpZiAoaWR4ID09PSAtMSkgdGhpcy5fb2JqZWN0Rmxhdm9ycy5wdXNoKHsgLi4uZmxhdm9yLCBhcHAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbiBleHBvc2VkIG9iamVjdCBmbGF2b3IgZnJvbSB0aGUgc2hlbGwuXG4gICAqIEBwYXJhbSBmbGF2b3IgRmxhdm9yIHRvIGJlIGNvbmNlYWxlZFxuICAgKiBAcGFyYW0gYXBwIE9wdGlvbmFsIElEIG9mIHRoZSBhcHAgdGhhdCBleHBvc2VzIHRoZSBmbGF2b3IgKGRlZmF1bHRzIHRvICdnbG9iYWwnIGlmIG5vdCBwcm92aWRlZClcbiAgICovXG4gIGNvbmNlYWxPYmplY3RGbGF2b3IoZmxhdm9yOiBBcHBTY2hlbWFGbGF2b3IsIGFwcCA9ICdnbG9iYWwnKSB7XG4gICAgdGhpcy5fb2JqZWN0Rmxhdm9ycyA9IHRoaXMuX29iamVjdEZsYXZvcnMuZmlsdGVyKChmKSA9PiBmLmlkICE9PSBmbGF2b3IuaWQgJiYgZi5hcHAgIT09IGFwcCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlZ2lzdGVyZWQgb2JqZWN0IGZsYXZvcnNcbiAgICogQHBhcmFtIGFwcCBPcHRpb25hbCBhcHAgSUQgdGhhdCByZXN0cmljdHMgdGhlIHJldHVybmVkIGZsYXZvcnMgdG8gdGhlIG9uZXNcbiAgICogcHJvdmlkZWQgYnkgYSBwYXJ0aWN1bGFyIGFwcC4gSWYgbm90IHByb3ZpZGVkIGFsbCBmbGF2b3JzIGFyZSByZXR1cm5lZFxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBtYXRjaGluZyBvYmplY3QgZmxhdm9yc1xuICAgKi9cbiAgZ2V0T2JqZWN0Rmxhdm9ycyhhcHA/OiBzdHJpbmcpOiBPYmplY3RGbGF2b3JbXSB7XG4gICAgcmV0dXJuIGFwcCA/IHRoaXMuX29iamVjdEZsYXZvcnMuZmlsdGVyKChvZikgPT4gb2YuYXBwID09PSBhcHApIDogdGhpcy5fb2JqZWN0Rmxhdm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyB0aGUgYXBwbGljYXRpb24gb2YgYW4gb2JqZWN0IGZsYXZvci4gSWYgdGhlIGZsYXZvciBoYXMgYW4gYXBwbHlDb21wb25lbnRcbiAgICogZGVmaW5lZCwgdGhlIG92ZXJsYXkgd2lsbCBiZSBvcGVuZWQgd2l0aCB0aGUgY29tcG9uZW50LiBPdGhlcndpc2UgdGhlIGZsYXZvciB3aWxsXG4gICAqIGJlIGFwcGxpZWQgZGlyZWN0bHkgdG8gdGhlIG9iamVjdC5cbiAgICogQHBhcmFtIGRtc09iamVjdCBUaGUgb2JqZWN0IHRvIGFwcGx5IHRoZSBmbGF2b3IgdG9cbiAgICogQHBhcmFtIGZsYXZvciBUaGUgZmxhdm9yIHRvIGFwcGx5XG4gICAqIEBwYXJhbSBkYXRhIE9wdGlvbmFsIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBmbGF2b3IgY29tcG9uZW50XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0cnVlIGlmIHRoZSBmbGF2b3Igd2FzIGFwcGxpZWQgc3VjY2Vzc2Z1bGx5XG4gICAqL1xuICB0cmlnZ2VyQXBwbHlPYmplY3RGbGF2b3IoZG1zT2JqZWN0OiBEbXNPYmplY3QsIGZsYXZvcjogT2JqZWN0Rmxhdm9yLCBkYXRhPzogYW55KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKGRtc09iamVjdCkge1xuICAgICAgaWYgKGZsYXZvci5hcHBseUNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLiNvdmVybGF5Lm9wZW4oZmxhdm9yLmFwcGx5Q29tcG9uZW50LCB7XG4gICAgICAgICAgZG1zT2JqZWN0LFxuICAgICAgICAgIGZsYXZvcixcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzb3RzOiBzdHJpbmdbXSA9IChkbXNPYmplY3QuZGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFNdIGFzIHN0cmluZ1tdKSB8fCBbXTtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0ge307XG4gICAgICAgIGRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSA9IFsuLi5zb3RzLCBmbGF2b3Iuc290XTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Rtc1NlcnZpY2UudXBkYXRlRG1zT2JqZWN0KGRtc09iamVjdD8uaWQsIGRhdGEpLnBpcGUobWFwKCgpID0+IHRydWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuIG9mKGZhbHNlKTtcbiAgfVxuXG4gIHJlbW92ZU9iamVjdEZsYXZvcihkbXNPYmplY3Q6IERtc09iamVjdCwgZmxhdm9yOiBPYmplY3RGbGF2b3IpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLiNvdmVybGF5XG4gICAgICAuY29uZmlybSh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5zaGVsbC5mbGF2b3IucmVtb3ZlLmNvbmZpcm0ubWVzc2FnZScsIHtcbiAgICAgICAgICBmbGF2b3I6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmxhdm9yLmlkKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGNvbmZpcm1lZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBTT1QgLi4uXG4gICAgICAgICAgICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICAgICAgW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU106IChkbXNPYmplY3QuZGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFNdIGFzIHN0cmluZ1tdKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHNvdDogc3RyaW5nKSA9PiBzb3QgIT09IGZsYXZvci5zb3RcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIC4uLiBhbmQgYWxsIHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FtZSB3aXRoIGl0XG4gICAgICAgICAgICB0aGlzLiNzeXN0ZW0uZ2V0U2Vjb25kYXJ5T2JqZWN0VHlwZShmbGF2b3Iuc290KT8uZmllbGRzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgZGF0YVtwLmlkXSA9IG51bGw7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2Rtc1NlcnZpY2UudXBkYXRlRG1zT2JqZWN0KGRtc09iamVjdC5pZCwgZGF0YSkucGlwZShtYXAoKCkgPT4gdHJ1ZSkpO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb2JqZWN0IGZsYXZvcnMgYXBwbGljYWJsZSBmb3IgYSBjZXJ0YWluIG1pbWV0eXBlXG4gICAqIEBwYXJhbSBtaW1lVHlwZSBNaW1lIHR5cGUgb3IgbWltZSB0eXBlIHBhdHRlcm4gbGlrZSAnaW1hZ2UvKidcbiAgICogQHBhcmFtIGFwcCBPcHRpb25hbCBhcHAgSUQgdGhhdCByZXN0cmljdHMgdGhlIHJldHVybmVkIGZsYXZvcnMgdG8gdGhlIG9uZXNcbiAgICogcHJvdmlkZWQgYnkgYSBwYXJ0aWN1bGFyIGFwcFxuICAgKiBAcGFyYW0gY3VzdG9tRmxhdm9ycyBPcHRpb25hbCBhcnJheSBvZiBjdXN0b20gZmxhdm9ycyB0byBhbHNvIHRha2UgaW50byBhY2NvdW50LlxuICAgKiBUaGlzIGNvdWxkIGJlIGZsYXZvcnMgbWFuYWdlZCBieSBhbiBhcHAgaXRzZWxmIHRoYXQgYXJlIG5vdCBzdXBwb3NlZCB0byBiZVxuICAgKiBleHBvc2VkIHRvIG90aGVyIGFwcHNcbiAgICogQHJldHVybnMgQXJyYXkgb2YgbWF0Y2hpbmcgb2JqZWN0IGZsYXZvcnNcbiAgICovXG4gIGdldEFwcGxpY2FibGVPYmplY3RGbGF2b3JzKG1pbWVUeXBlOiBzdHJpbmcsIGFwcD86IHN0cmluZywgY3VzdG9tRmxhdm9ycz86IE9iamVjdEZsYXZvcltdKTogT2JqZWN0Rmxhdm9yW10ge1xuICAgIHJldHVybiBbLi4uKGN1c3RvbUZsYXZvcnMgfHwgW10pLCAuLi50aGlzLl9vYmplY3RGbGF2b3JzXS5maWx0ZXIoXG4gICAgICAob2Y6IE9iamVjdEZsYXZvcikgPT4gb2YuYXBwbGljYWJsZVRvPy5taW1lVHlwZXMuc29tZSgobXRwKSA9PiBVdGlscy5wYXR0ZXJuVG9SZWdFeHAobXRwKS50ZXN0KG1pbWVUeXBlKSkgJiYgKCFhcHAgfHwgb2YuYXBwID09PSBhcHApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYXBwbGllZCBhbmQgYXBwbGljYWJsZSBvYmplY3QgZmxhdm9ycyBmb3IgYSBjZXJ0YWluIG9iamVjdFxuICAgKiBAcGFyYW0gZG1zT2JqZWN0IERtc09iamVjdCB0byBnZXQgZmxhdm9ycyBmb3JcbiAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgdHdvIGFycmF5czogYXBwbGllZCBhbmQgYXBwbGljYWJsZSBmbGF2b3JzXG4gICAqL1xuICBnZXRBcHBsaWVkT2JqZWN0Rmxhdm9ycyhkbXNPYmplY3Q6IERtc09iamVjdCk6IHtcbiAgICBhcHBsaWVkOiBPYmplY3RGbGF2b3JbXTtcbiAgICBhcHBsaWNhYmxlOiBPYmplY3RGbGF2b3JbXTtcbiAgfSB7XG4gICAgY29uc3QgYXBwbGllZDogT2JqZWN0Rmxhdm9yW10gPSBbXTtcbiAgICBjb25zdCBhcHBsaWNhYmxlOiBPYmplY3RGbGF2b3JbXSA9IFtdO1xuICAgIGlmIChkbXNPYmplY3QpIHtcbiAgICAgIGNvbnN0IHNvdHM6IHN0cmluZ1tdID0gKGRtc09iamVjdC5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gYXMgc3RyaW5nW10pIHx8IFtdO1xuICAgICAgaWYgKGRtc09iamVjdC5jb250ZW50KSB7XG4gICAgICAgIHRoaXMuZ2V0QXBwbGljYWJsZU9iamVjdEZsYXZvcnMoZG1zT2JqZWN0LmNvbnRlbnQubWltZVR5cGUpLmZvckVhY2goKGZsYXZvcjogT2JqZWN0Rmxhdm9yKSA9PiB7XG4gICAgICAgICAgaWYgKHNvdHMuaW5jbHVkZXMoZmxhdm9yLnNvdCkpIHtcbiAgICAgICAgICAgIGFwcGxpZWQucHVzaChmbGF2b3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBsaWNhYmxlLnB1c2goZmxhdm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBhcHBsaWVkLCBhcHBsaWNhYmxlIH07XG4gIH1cblxuICBhcHBseU9iamVjdEZsYXZvcihkbXNPYmplY3Q6IERtc09iamVjdCwgZmxhdm9yOiBPYmplY3RGbGF2b3IsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBPYnNlcnZhYmxlPERtc09iamVjdD4ge1xuICAgIGNvbnN0IHNvdHM6IHN0cmluZ1tdID0gKGRtc09iamVjdC5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gYXMgc3RyaW5nW10pIHx8IFtdO1xuICAgIGRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSA9IFsuLi5zb3RzLCBmbGF2b3Iuc290XTtcbiAgICByZXR1cm4gdGhpcy4jZG1zU2VydmljZS51cGRhdGVEbXNPYmplY3QoZG1zT2JqZWN0LmlkLCBkYXRhKTtcbiAgfVxuXG4gIHJlZ2lzdGVyVGlsZUV4dGVuc2lvbihleHQ6IFRpbGVFeHRlbnNpb24pIHtcbiAgICB0aGlzLl9leHRlbnNpb25zW2V4dC50eXBlSWRdID0gZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aWxlIGV4dGVuc2lvbnMgZm9yIGEgY2VydGFpbiB0eXBlXG4gICAqIEBwYXJhbSB0eXBlSWQgSUQgb2YgdGhlIHR5cGUgdG8gZmV0Y2ggZXh0ZXNpb24gZm9yIChvYmplY3RUeXBlSUQgb3Igc2Vjb25kYXJ5T2JqZWN0VHlwZUlEKVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0UmVnaXN0ZXJlZFRpbGVFeHRlbnNpb25zKCk6IFJlY29yZDxzdHJpbmcsIFRpbGVFeHRlbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fZXh0ZW5zaW9ucztcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgX2luaXQoKSB7fVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwtbm90aWZpY2F0aW9ucy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtc2hlbGwtY29yZS9zcmMvbGliL3NlcnZpY2VzL3NoZWxsLW5vdGlmaWNhdGlvbnMvc2hlbGwtbm90aWZpY2F0aW9ucy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2hlbGxOb3RpZmljYXRpb24ge1xuICAgIC8vIG5vdGlmaWNhdGlvbnMgdGl0bGVcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIC8vIG5vdGlmaWNhdGlvbnMgZGVzY3JpcHRpb25cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAvLyBhbiBpY29uIChTVkcgc3RyaW5nKVxuICAgIGljb24/OiBzdHJpbmc7XG4gICAgLy8gdGhlIGFwcCB0aGF0IHRyaWdnZXJlZCB0aGUgbm90aWZpY2F0aW9uXG4gICAgYXBwPzogc3RyaW5nO1xuICAgIC8vIGxldmVsIGluZGljYXRpbmcgdGhlIHR5cGUgb2Ygbm90aWZpY2F0aW9uIChpdHMgaW1wb3J0YW5jZSlcbiAgICBsZXZlbD86IFNoZWxsTm90aWZpY2F0aW9uTGV2ZWw7XG4gICAgLy8gYSByb3V0ZSB0byBvcGVuIGNsaWNraW5nIHRoZSBub3RpZmljYXRpb25cbiAgICB0YXJnZXRSb3V0ZT86IHN0cmluZztcbiAgICAvLyByZW1vdmUgdGhlIG5vdGlmaWNhdGlvbiBhZnRlciB0aGUgdGFyZ2V0IHJvdXRlIGhhcyBiZWVuIG5hdmlnYXRlZCB0b1xuICAgIHJlbW92ZU9uVGFyZ2V0Um91dGVOYXZpZ2F0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBTaGVsbE5vdGlmaWNhdGlvbkxldmVsID0gJ2FsZXJ0JyB8ICdpbmZvJyB8ICd3YXJuaW5nJyB8ICdzdWNjZXNzJyJdfQ==
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import { ReplaySubject } from 'rxjs';
|
|
3
|
+
import { AppCacheService, NativeNotificationService, TranslateService, Utils } from '@yuuvis/client-core';
|
|
4
|
+
import { ShellService } from '../shell/shell.service';
|
|
5
|
+
import { Router } from '@angular/router';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
/**
|
|
8
|
+
* Service managing shell notifications.
|
|
9
|
+
* Every app could propagate shell notifications. They will be published
|
|
10
|
+
* in the notifications section of the shell. Incoming new messahes will
|
|
11
|
+
* also add an indicator to the icon in the shell bar.
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
export class ShellNotificationsService {
|
|
15
|
+
#shell;
|
|
16
|
+
#router;
|
|
17
|
+
#nativeNotificationService;
|
|
18
|
+
constructor() {
|
|
19
|
+
this.LOCAL_STORAGE_KEY = 'yuv.shell.notifications';
|
|
20
|
+
this.appCache = inject(AppCacheService);
|
|
21
|
+
this.#shell = inject(ShellService);
|
|
22
|
+
this.#router = inject(Router);
|
|
23
|
+
this.translate = inject(TranslateService);
|
|
24
|
+
this.#nativeNotificationService = inject(NativeNotificationService);
|
|
25
|
+
this._notifications = [];
|
|
26
|
+
this._notificationsSource = new ReplaySubject();
|
|
27
|
+
this.shellNotifications$ = this._notificationsSource.asObservable();
|
|
28
|
+
this.appCache.getItem(this.LOCAL_STORAGE_KEY).subscribe((res) => {
|
|
29
|
+
this._notifications = res || [];
|
|
30
|
+
this._notificationsSource.next(this._notifications);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// getNotifications(id: string) {
|
|
34
|
+
// const file = [
|
|
35
|
+
// { id: 'io.yuuvis.app.drive', count: 2, maxLevel: 'info' },
|
|
36
|
+
// { id: 'io.yuuvis.app.tasks', count: 222, maxLevel: 'warning' }
|
|
37
|
+
// ];
|
|
38
|
+
// return file.find((f) => f.id === id);
|
|
39
|
+
// }
|
|
40
|
+
add(notification, nativeNotification = false) {
|
|
41
|
+
this._notifications.push({
|
|
42
|
+
...notification,
|
|
43
|
+
id: Utils.uuid(),
|
|
44
|
+
timestamp: new Date().getTime(),
|
|
45
|
+
seen: false
|
|
46
|
+
});
|
|
47
|
+
// check for unseen items
|
|
48
|
+
if (document.hidden && nativeNotification && this._notifications.some((n) => !n.seen)) {
|
|
49
|
+
this.#nativeNotificationService.showNotification(this.translate.instant('yuv.shell.notification.native.title'), {
|
|
50
|
+
onClick: () => this.#router.navigate([{ outlets: { aside: 'notifications' } }]),
|
|
51
|
+
options: {
|
|
52
|
+
body: this.translate.instant('yuv.shell.notification.native.message'),
|
|
53
|
+
// badge: this.#shell.shellConfig().icons!.appIcon,
|
|
54
|
+
icon: 'https://budgie.enaioci.net/client/assets/_yuuvis/theme/favicon.svg'
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
this._updateNotifications();
|
|
59
|
+
}
|
|
60
|
+
remove(id) {
|
|
61
|
+
this._notifications = this._notifications.filter((n) => n.id !== id);
|
|
62
|
+
this._updateNotifications();
|
|
63
|
+
}
|
|
64
|
+
removeAll() {
|
|
65
|
+
this._notifications = [];
|
|
66
|
+
this._updateNotifications();
|
|
67
|
+
}
|
|
68
|
+
markAllAsSeen() {
|
|
69
|
+
this._notifications.forEach((n) => (n.seen = true));
|
|
70
|
+
this._updateNotifications();
|
|
71
|
+
}
|
|
72
|
+
getNotificationById(id) {
|
|
73
|
+
return this._notifications.find((n) => n.id === id);
|
|
74
|
+
}
|
|
75
|
+
_updateNotifications() {
|
|
76
|
+
this._notifications = this._notifications.sort((a, b) => b.timestamp - a.timestamp);
|
|
77
|
+
this._notificationsSource.next(this._notifications);
|
|
78
|
+
this.appCache.setItem(this.LOCAL_STORAGE_KEY, this._notifications).subscribe();
|
|
79
|
+
}
|
|
80
|
+
static { this.ɵfac = function ShellNotificationsService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ShellNotificationsService)(); }; }
|
|
81
|
+
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ShellNotificationsService, factory: ShellNotificationsService.ɵfac, providedIn: 'root' }); }
|
|
82
|
+
}
|
|
83
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShellNotificationsService, [{
|
|
84
|
+
type: Injectable,
|
|
85
|
+
args: [{
|
|
86
|
+
providedIn: 'root'
|
|
87
|
+
}]
|
|
88
|
+
}], () => [], null); })();
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwtbm90aWZpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LXNoZWxsLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9zaGVsbC1ub3RpZmljYXRpb25zL3NoZWxsLW5vdGlmaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFekM7Ozs7OztHQU1HO0FBSUgsTUFBTSxPQUFPLHlCQUF5QjtJQUdwQyxNQUFNLENBQXdCO0lBQzlCLE9BQU8sQ0FBa0I7SUFFekIsMEJBQTBCLENBQXFDO0lBTS9EO1FBWFEsc0JBQWlCLEdBQUcseUJBQXlCLENBQUM7UUFDOUMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzQyxXQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlCLFlBQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdDLCtCQUEwQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRXZELG1CQUFjLEdBQTRCLEVBQUUsQ0FBQztRQUM3Qyx5QkFBb0IsR0FBRyxJQUFJLGFBQWEsRUFBMkIsQ0FBQztRQUM1RSx3QkFBbUIs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QUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNqRixDQUFDOzBIQXhFVSx5QkFBeUI7dUVBQXpCLHlCQUF5QixXQUF6Qix5QkFBeUIsbUJBRnhCLE1BQU07O2lGQUVQLHlCQUF5QjtjQUhyQyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNoZWxsTm90aWZpY2F0aW9uIH0gZnJvbSAnLi9zaGVsbC1ub3RpZmljYXRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBDYWNoZVNlcnZpY2UsIE5hdGl2ZU5vdGlmaWNhdGlvblNlcnZpY2UsIFRyYW5zbGF0ZVNlcnZpY2UsIFV0aWxzIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBTaGVsbFNlcnZpY2UgfSBmcm9tICcuLi9zaGVsbC9zaGVsbC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbi8qKlxuICogU2VydmljZSBtYW5hZ2luZyBzaGVsbCBub3RpZmljYXRpb25zLlxuICogRXZlcnkgYXBwIGNvdWxkIHByb3BhZ2F0ZSBzaGVsbCBub3RpZmljYXRpb25zLiBUaGV5IHdpbGwgYmUgcHVibGlzaGVkXG4gKiBpbiB0aGUgbm90aWZpY2F0aW9ucyBzZWN0aW9uIG9mIHRoZSBzaGVsbC4gSW5jb21pbmcgbmV3IG1lc3NhaGVzIHdpbGxcbiAqIGFsc28gYWRkIGFuIGluZGljYXRvciB0byB0aGUgaWNvbiBpbiB0aGUgc2hlbGwgYmFyLlxuICpcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2hlbGxOb3RpZmljYXRpb25zU2VydmljZSB7XG4gIHByaXZhdGUgTE9DQUxfU1RPUkFHRV9LRVkgPSAneXV2LnNoZWxsLm5vdGlmaWNhdGlvbnMnO1xuICBwcml2YXRlIGFwcENhY2hlID0gaW5qZWN0KEFwcENhY2hlU2VydmljZSk7XG4gICNzaGVsbCA9IGluamVjdChTaGVsbFNlcnZpY2UpO1xuICAjcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAjbmF0aXZlTm90aWZpY2F0aW9uU2VydmljZSA9IGluamVjdChOYXRpdmVOb3RpZmljYXRpb25TZXJ2aWNlKTtcblxuICBwcml2YXRlIF9ub3RpZmljYXRpb25zOiBTaGVsbE5vdGlmaWNhdGlvbkl0ZW1bXSA9IFtdO1xuICBwcml2YXRlIF9ub3RpZmljYXRpb25zU291cmNlID0gbmV3IFJlcGxheVN1YmplY3Q8U2hlbGxOb3RpZmljYXRpb25JdGVtW10+KCk7XG4gIHNoZWxsTm90aWZpY2F0aW9ucyQ6IE9ic2VydmFibGU8U2hlbGxOb3RpZmljYXRpb25JdGVtW10+ID0gdGhpcy5fbm90aWZpY2F0aW9uc1NvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmFwcENhY2hlLmdldEl0ZW0odGhpcy5MT0NBTF9TVE9SQUdFX0tFWSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMgPSByZXMgfHwgW107XG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25zU291cmNlLm5leHQodGhpcy5fbm90aWZpY2F0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBnZXROb3RpZmljYXRpb25zKGlkOiBzdHJpbmcpIHtcbiAgLy8gICBjb25zdCBmaWxlID0gW1xuICAvLyAgICAgeyBpZDogJ2lvLnl1dXZpcy5hcHAuZHJpdmUnLCBjb3VudDogMiwgbWF4TGV2ZWw6ICdpbmZvJyB9LFxuICAvLyAgICAgeyBpZDogJ2lvLnl1dXZpcy5hcHAudGFza3MnLCBjb3VudDogMjIyLCBtYXhMZXZlbDogJ3dhcm5pbmcnIH1cbiAgLy8gICBdO1xuXG4gIC8vICAgcmV0dXJuIGZpbGUuZmluZCgoZikgPT4gZi5pZCA9PT0gaWQpO1xuICAvLyB9XG5cbiAgYWRkKG5vdGlmaWNhdGlvbjogU2hlbGxOb3RpZmljYXRpb24sIG5hdGl2ZU5vdGlmaWNhdGlvbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucy5wdXNoKHtcbiAgICAgIC4uLm5vdGlmaWNhdGlvbixcbiAgICAgIGlkOiBVdGlscy51dWlkKCksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxuICAgICAgc2VlbjogZmFsc2VcbiAgICB9KTtcbiAgICAvLyBjaGVjayBmb3IgdW5zZWVuIGl0ZW1zXG4gICAgaWYgKGRvY3VtZW50LmhpZGRlbiAmJiBuYXRpdmVOb3RpZmljYXRpb24gJiYgdGhpcy5fbm90aWZpY2F0aW9ucy5zb21lKChuKSA9PiAhbi5zZWVuKSkge1xuICAgICAgdGhpcy4jbmF0aXZlTm90aWZpY2F0aW9uU2VydmljZS5zaG93Tm90aWZpY2F0aW9uKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5zaGVsbC5ub3RpZmljYXRpb24ubmF0aXZlLnRpdGxlJyksIHtcbiAgICAgICAgb25DbGljazogKCkgPT4gdGhpcy4jcm91dGVyLm5hdmlnYXRlKFt7IG91dGxldHM6IHsgYXNpZGU6ICdub3RpZmljYXRpb25zJyB9IH1dKSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvZHk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5zaGVsbC5ub3RpZmljYXRpb24ubmF0aXZlLm1lc3NhZ2UnKSxcbiAgICAgICAgICAvLyBiYWRnZTogdGhpcy4jc2hlbGwuc2hlbGxDb25maWcoKS5pY29ucyEuYXBwSWNvbixcbiAgICAgICAgICBpY29uOiAnaHR0cHM6Ly9idWRnaWUuZW5haW9jaS5uZXQvY2xpZW50L2Fzc2V0cy9feXV1dmlzL3RoZW1lL2Zhdmljb24uc3ZnJ1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlTm90aWZpY2F0aW9ucygpO1xuICB9XG5cbiAgcmVtb3ZlKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25zID0gdGhpcy5fbm90aWZpY2F0aW9ucy5maWx0ZXIoKG4pID0+IG4uaWQgIT09IGlkKTtcbiAgICB0aGlzLl91cGRhdGVOb3RpZmljYXRpb25zKCk7XG4gIH1cblxuICByZW1vdmVBbGwoKSB7XG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucyA9IFtdO1xuICAgIHRoaXMuX3VwZGF0ZU5vdGlmaWNhdGlvbnMoKTtcbiAgfVxuXG4gIG1hcmtBbGxBc1NlZW4oKSB7XG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucy5mb3JFYWNoKChuKSA9PiAobi5zZWVuID0gdHJ1ZSkpO1xuICAgIHRoaXMuX3VwZGF0ZU5vdGlmaWNhdGlvbnMoKTtcbiAgfVxuXG4gIGdldE5vdGlmaWNhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6IFNoZWxsTm90aWZpY2F0aW9uSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbnMuZmluZCgobikgPT4gbi5pZCA9PT0gaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlTm90aWZpY2F0aW9ucygpIHtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25zID0gdGhpcy5fbm90aWZpY2F0aW9ucy5zb3J0KChhLCBiKSA9PiBiLnRpbWVzdGFtcCAtIGEudGltZXN0YW1wKTtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25zU291cmNlLm5leHQodGhpcy5fbm90aWZpY2F0aW9ucyk7XG4gICAgdGhpcy5hcHBDYWNoZS5zZXRJdGVtKHRoaXMuTE9DQUxfU1RPUkFHRV9LRVksIHRoaXMuX25vdGlmaWNhdGlvbnMpLnN1YnNjcmliZSgpO1xuICB9XG59XG5cbnR5cGUgU2hlbGxOb3RpZmljYXRpb25JdGVtID0gU2hlbGxOb3RpZmljYXRpb24gJiB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBzZWVuOiBib29sZWFuO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1leHRlbnNpb24uaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LXNoZWxsLWNvcmUvc3JjL2xpYi90aWxlLWV4dGVuc2lvbi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbGVFeHRlbnNpb24ge1xuICAgIHR5cGVJZDogc3RyaW5nO1xuICAgIGNtcDogVHlwZTxUaWxlRXh0ZW5zaW9uQ29tcG9uZW50Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaWxlRXh0ZW5zaW9uQ29tcG9uZW50IHtcbiAgICBkYXRhOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlsZUV4dGVuc2lvbkRpcmVjdGl2ZUlucHV0IHtcbiAgICB0eXBlSWQ6IHN0cmluZztcbiAgICBkYXRhOiBhbnlcbn0iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXV1dmlzLWNsaWVudC1zaGVsbC1jb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LXNoZWxsLWNvcmUvc3JjL3l1dXZpcy1jbGllbnQtc2hlbGwtY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './lib/client-shell.interface';
|
|
2
|
+
export * from './lib/services/command-palette/command-palette.interface';
|
|
3
|
+
export * from './lib/services/command-palette/command-palette.service';
|
|
4
|
+
export * from './lib/services/command-palette/command-palette/command-palette.component';
|
|
5
|
+
export * from './lib/services/shell-notifications/shell-notifications.interface';
|
|
6
|
+
export * from './lib/services/shell-notifications/shell-notifications.service';
|
|
7
|
+
export * from './lib/services/shell/shell.service';
|
|
8
|
+
export * from './lib/tile-extension.interface';
|
|
9
|
+
export * from './lib/services/shell/shell.extentions.service';
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Type } from '@angular/core';
|
|
2
|
+
import { Route } from '@angular/router';
|
|
3
|
+
import { ObjectCreateFlavor, ObjectTypeFlavor, VirtualObjectType } from '@yuuvis/client-core';
|
|
4
|
+
export interface ClientShellConfig {
|
|
5
|
+
icons?: {
|
|
6
|
+
appIcon?: string;
|
|
7
|
+
logout?: string;
|
|
8
|
+
settings?: string;
|
|
9
|
+
notifications?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface App extends Route {
|
|
13
|
+
id: string;
|
|
14
|
+
icon?: string;
|
|
15
|
+
permissions?: AppPermission;
|
|
16
|
+
}
|
|
17
|
+
export interface AppPermission {
|
|
18
|
+
allow: string[];
|
|
19
|
+
deny: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface AccentColor {
|
|
22
|
+
label: string;
|
|
23
|
+
name: string;
|
|
24
|
+
tone: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ShellAppSettings {
|
|
27
|
+
appID: string;
|
|
28
|
+
label: string;
|
|
29
|
+
properties: ShellAppSettingProperty[];
|
|
30
|
+
}
|
|
31
|
+
export interface ShellAppSettingProperty {
|
|
32
|
+
label: string;
|
|
33
|
+
name: string;
|
|
34
|
+
type: string;
|
|
35
|
+
value?: string | boolean | number;
|
|
36
|
+
}
|
|
37
|
+
export interface AppSchema {
|
|
38
|
+
id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
icon: string;
|
|
41
|
+
types: Record<string, VirtualObjectType>;
|
|
42
|
+
flavors: AppSchemaFlavor[];
|
|
43
|
+
createFlavors?: ObjectCreateFlavor[];
|
|
44
|
+
}
|
|
45
|
+
export type ObjectFlavor = AppSchemaFlavor & {
|
|
46
|
+
app: string;
|
|
47
|
+
};
|
|
48
|
+
export interface AppSchemaFlavor extends ObjectTypeFlavor {
|
|
49
|
+
objectTypeID: string;
|
|
50
|
+
descriptionKey?: string;
|
|
51
|
+
applyComponent?: Type<any>;
|
|
52
|
+
}
|
|
53
|
+
export declare enum GlobalShortcut {
|
|
54
|
+
search = "search"
|
|
55
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AfterViewInit, ElementRef, EventEmitter, OnInit } from '@angular/core';
|
|
2
|
+
import { CommandPaletteCommand, DisabledCause } from '../command-palette.interface';
|
|
3
|
+
import { CommandPaletteService } from '../command-palette.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class CommandPaletteComponent implements OnInit, AfterViewInit {
|
|
6
|
+
private cmdService;
|
|
7
|
+
private elRef;
|
|
8
|
+
private _commands;
|
|
9
|
+
private _cci;
|
|
10
|
+
set currentCommandIndex(i: number);
|
|
11
|
+
get currentCommandIndex(): number;
|
|
12
|
+
commands: CommandPaletteCommand[];
|
|
13
|
+
searchTerm: string;
|
|
14
|
+
keepFocus: boolean;
|
|
15
|
+
message: string | undefined;
|
|
16
|
+
disabledCauses: DisabledCause[];
|
|
17
|
+
placeholder: string | undefined;
|
|
18
|
+
searchTermChange: EventEmitter<string>;
|
|
19
|
+
onArrowDown(e: KeyboardEvent): void;
|
|
20
|
+
onArrowUp(e: KeyboardEvent): void;
|
|
21
|
+
onEnter(): void;
|
|
22
|
+
constructor(cmdService: CommandPaletteService, elRef: ElementRef);
|
|
23
|
+
onTermChange(term: string): void;
|
|
24
|
+
onInputBlur(): void;
|
|
25
|
+
triggerCommand(command?: CommandPaletteCommand): void;
|
|
26
|
+
highlight(txt: string | undefined): string | undefined;
|
|
27
|
+
ngOnInit(): void;
|
|
28
|
+
ngAfterViewInit(): void;
|
|
29
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CommandPaletteComponent, never>;
|
|
30
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CommandPaletteComponent, "yuv-command-palette", never, {}, { "searchTermChange": "searchTermChange"; }, never, never, true, never>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface CommandPaletteModuleConfig {
|
|
2
|
+
triggerKey?: string;
|
|
3
|
+
accentColor?: string;
|
|
4
|
+
searchModeIndicator?: string;
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface CommandPaletteCommand {
|
|
8
|
+
id: string;
|
|
9
|
+
label: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
callback?: () => void;
|
|
12
|
+
}
|
|
13
|
+
export interface DisabledCause {
|
|
14
|
+
id: string;
|
|
15
|
+
message: string;
|
|
16
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { CommandPaletteCommand, DisabledCause } from './command-palette.interface';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class CommandPaletteService {
|
|
5
|
+
private overlayService;
|
|
6
|
+
readonly actionKey: string;
|
|
7
|
+
private _ac;
|
|
8
|
+
private overlayRef;
|
|
9
|
+
private overlayVisible;
|
|
10
|
+
disabledCauses: DisabledCause[];
|
|
11
|
+
placeholder: string;
|
|
12
|
+
private overlayVisibleSource;
|
|
13
|
+
overlayVisible$: Observable<boolean>;
|
|
14
|
+
private commands;
|
|
15
|
+
private commandSource;
|
|
16
|
+
command$: Observable<CommandPaletteCommand>;
|
|
17
|
+
onSearchTerm: (term: string, cb: (res: CommandPaletteCommand[]) => void) => void;
|
|
18
|
+
constructor();
|
|
19
|
+
getCommands(): CommandPaletteCommand[];
|
|
20
|
+
registerCommand(command: CommandPaletteCommand): Observable<CommandPaletteCommand>;
|
|
21
|
+
registerCommands(commands: CommandPaletteCommand[]): Observable<CommandPaletteCommand>;
|
|
22
|
+
unregisterCommand(id: string): void;
|
|
23
|
+
unregisterCommands(ids: string[]): void;
|
|
24
|
+
/**
|
|
25
|
+
* Updates the properties of the registered commands. This is usefull when
|
|
26
|
+
* the language of the app changes and you want to update the commands labels.
|
|
27
|
+
* Based on the IDs propeties of the registered commands will be updated.
|
|
28
|
+
* @param cmds Commands containing the updated properties
|
|
29
|
+
*/
|
|
30
|
+
updateCommands(cmds: CommandPaletteCommand[]): void;
|
|
31
|
+
triggerCommand(cmd: CommandPaletteCommand): void;
|
|
32
|
+
addDisabledCause(cause: DisabledCause): void;
|
|
33
|
+
removeDisabledCause(id: string): void;
|
|
34
|
+
removeAllDisabledCauses(): void;
|
|
35
|
+
private _processCommands;
|
|
36
|
+
private _actionKeyClick;
|
|
37
|
+
private appendComponentToBody;
|
|
38
|
+
private removeComponentFromBody;
|
|
39
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CommandPaletteService, never>;
|
|
40
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<CommandPaletteService>;
|
|
41
|
+
}
|