@theseam/ui-common 0.4.4 → 0.4.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.
Files changed (55) hide show
  1. package/datatable/models/preferences-accessor.d.ts +3 -15
  2. package/datatable/models/preferences.d.ts +2 -1
  3. package/datatable/services/datatable-preferences.service.d.ts +11 -14
  4. package/datatable/tokens/datatable-preferences-accessor.d.ts +2 -2
  5. package/esm2020/datatable/datatable/datatable.component.mjs +3 -3
  6. package/esm2020/datatable/models/preferences-accessor.mjs +1 -1
  7. package/esm2020/datatable/models/preferences.mjs +1 -1
  8. package/esm2020/datatable/services/datatable-preferences.service.mjs +34 -106
  9. package/esm2020/datatable/tokens/datatable-preferences-accessor.mjs +1 -1
  10. package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets.service.mjs +9 -3
  11. package/esm2020/services/preferences/preferences-accessor.mjs +2 -0
  12. package/esm2020/services/preferences/preferences-manager.service.mjs +69 -0
  13. package/esm2020/services/preferences/preferences-record.mjs +74 -0
  14. package/esm2020/services/preferences/preferences.models.mjs +2 -0
  15. package/esm2020/services/public-api.mjs +5 -1
  16. package/esm2020/story-helpers/public-api.mjs +2 -1
  17. package/esm2020/story-helpers/story-preferences-accessor.service.mjs +34 -0
  18. package/esm2020/widget/preferences/widget-preferences.models.mjs +5 -0
  19. package/esm2020/widget/preferences/widget-preferences.service.mjs +78 -0
  20. package/esm2020/widget/preferences/widget-preferences.token.mjs +3 -0
  21. package/esm2020/widget/widget/widget.component.mjs +68 -31
  22. package/esm2020/widget/widget-token.mjs +2 -1
  23. package/fesm2015/theseam-ui-common-datatable.mjs +45 -116
  24. package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
  25. package/fesm2015/theseam-ui-common-framework.mjs +9 -3
  26. package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
  27. package/fesm2015/theseam-ui-common-services.mjs +144 -8
  28. package/fesm2015/theseam-ui-common-services.mjs.map +1 -1
  29. package/fesm2015/theseam-ui-common-story-helpers.mjs +32 -1
  30. package/fesm2015/theseam-ui-common-story-helpers.mjs.map +1 -1
  31. package/fesm2015/theseam-ui-common-widget.mjs +152 -36
  32. package/fesm2015/theseam-ui-common-widget.mjs.map +1 -1
  33. package/fesm2020/theseam-ui-common-datatable.mjs +45 -116
  34. package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
  35. package/fesm2020/theseam-ui-common-framework.mjs +8 -3
  36. package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
  37. package/fesm2020/theseam-ui-common-services.mjs +144 -8
  38. package/fesm2020/theseam-ui-common-services.mjs.map +1 -1
  39. package/fesm2020/theseam-ui-common-story-helpers.mjs +32 -1
  40. package/fesm2020/theseam-ui-common-story-helpers.mjs.map +1 -1
  41. package/fesm2020/theseam-ui-common-widget.mjs +148 -36
  42. package/fesm2020/theseam-ui-common-widget.mjs.map +1 -1
  43. package/package.json +1 -1
  44. package/services/preferences/preferences-accessor.d.ts +15 -0
  45. package/services/preferences/preferences-manager.service.d.ts +15 -0
  46. package/services/preferences/preferences-record.d.ts +28 -0
  47. package/services/preferences/preferences.models.d.ts +3 -0
  48. package/services/public-api.d.ts +4 -0
  49. package/story-helpers/public-api.d.ts +1 -0
  50. package/story-helpers/story-preferences-accessor.service.d.ts +19 -0
  51. package/widget/preferences/widget-preferences.models.d.ts +8 -0
  52. package/widget/preferences/widget-preferences.service.d.ts +21 -0
  53. package/widget/preferences/widget-preferences.token.d.ts +3 -0
  54. package/widget/widget/widget.component.d.ts +10 -2
  55. package/widget/widget-token.d.ts +1 -0
@@ -0,0 +1,34 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { of } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ const ACCESSOR_PREFIX = 'story-pref';
5
+ export class StoryPreferencesAccessorService {
6
+ /**
7
+ * Gets a preference.
8
+ */
9
+ get(name) {
10
+ // console.log('get', name)
11
+ return of(localStorage.getItem(`${ACCESSOR_PREFIX}-${name}`) || '{}');
12
+ }
13
+ /**
14
+ * Update a preference.
15
+ */
16
+ update(name, value) {
17
+ // console.log('update', name)
18
+ localStorage.setItem(`${ACCESSOR_PREFIX}-${name}`, value);
19
+ return this.get(name);
20
+ }
21
+ /**
22
+ * Delete a preference.
23
+ */
24
+ delete(name) {
25
+ localStorage.removeItem(`${ACCESSOR_PREFIX}-${name}`);
26
+ return of(true);
27
+ }
28
+ }
29
+ StoryPreferencesAccessorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: StoryPreferencesAccessorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
30
+ StoryPreferencesAccessorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: StoryPreferencesAccessorService });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: StoryPreferencesAccessorService, decorators: [{
32
+ type: Injectable
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcnktcHJlZmVyZW5jZXMtYWNjZXNzb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9zdG9yeS1oZWxwZXJzL3N0b3J5LXByZWZlcmVuY2VzLWFjY2Vzc29yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUUxQyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBOztBQUVyQyxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUE7QUFHcEMsTUFBTSxPQUFPLCtCQUErQjtJQUUxQzs7T0FFRztJQUNJLEdBQUcsQ0FBQyxJQUFZO1FBQ3JCLDJCQUEyQjtRQUMzQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsZUFBZSxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7SUFDdkUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLElBQVksRUFBRSxLQUFhO1FBQ3ZDLDhCQUE4QjtRQUM5QixZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsZUFBZSxJQUFJLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBWTtRQUN4QixZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsZUFBZSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUE7UUFDckQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDakIsQ0FBQzs7NEhBekJVLCtCQUErQjtnSUFBL0IsK0JBQStCOzJGQUEvQiwrQkFBK0I7a0JBRDNDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgVGhlU2VhbVByZWZlcmVuY2VzQWNjZXNzb3IgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vc2VydmljZXMnXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcydcclxuXHJcbmNvbnN0IEFDQ0VTU09SX1BSRUZJWCA9ICdzdG9yeS1wcmVmJ1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU3RvcnlQcmVmZXJlbmNlc0FjY2Vzc29yU2VydmljZSBpbXBsZW1lbnRzIFRoZVNlYW1QcmVmZXJlbmNlc0FjY2Vzc29yIHtcclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhIHByZWZlcmVuY2UuXHJcbiAgICovXHJcbiAgcHVibGljIGdldChuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ2dldCcsIG5hbWUpXHJcbiAgICByZXR1cm4gb2YobG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7QUNDRVNTT1JfUFJFRklYfS0ke25hbWV9YCkgfHwgJ3t9JylcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhIHByZWZlcmVuY2UuXHJcbiAgICovXHJcbiAgcHVibGljIHVwZGF0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ3VwZGF0ZScsIG5hbWUpXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHtBQ0NFU1NPUl9QUkVGSVh9LSR7bmFtZX1gLCB2YWx1ZSlcclxuICAgIHJldHVybiB0aGlzLmdldChuYW1lKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGEgcHJlZmVyZW5jZS5cclxuICAgKi9cclxuICBwdWJsaWMgZGVsZXRlKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7QUNDRVNTT1JfUFJFRklYfS0ke25hbWV9YClcclxuICAgIHJldHVybiBvZih0cnVlKVxyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,5 @@
1
+ export const CURRENT_WIDGET_PREFERENCES_VERSION = 1;
2
+ export const EMPTY_WIDGET_PREFERENCES = {
3
+ version: 1,
4
+ };
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXByZWZlcmVuY2VzLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi93aWRnZXQvcHJlZmVyZW5jZXMvd2lkZ2V0LXByZWZlcmVuY2VzLm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLENBQUE7QUFFbkQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQTZCO0lBQ2hFLE9BQU8sRUFBRSxDQUFDO0NBQ1gsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRoZVNlYW1QcmVmZXJlbmNlc0Jhc2UgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vc2VydmljZXMnXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRoZVNlYW1XaWRnZXRQcmVmZXJlbmNlc192MSBleHRlbmRzIFRoZVNlYW1QcmVmZXJlbmNlc0Jhc2Uge1xyXG4gIHZlcnNpb246IDFcclxuICBjb2xsYXBzZWQ/OiBib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFRoZVNlYW1XaWRnZXRQcmVmZXJlbmNlcyA9IFRoZVNlYW1XaWRnZXRQcmVmZXJlbmNlc192MVxyXG5cclxuZXhwb3J0IGNvbnN0IENVUlJFTlRfV0lER0VUX1BSRUZFUkVOQ0VTX1ZFUlNJT04gPSAxXHJcblxyXG5leHBvcnQgY29uc3QgRU1QVFlfV0lER0VUX1BSRUZFUkVOQ0VTOiBUaGVTZWFtV2lkZ2V0UHJlZmVyZW5jZXMgPSB7XHJcbiAgdmVyc2lvbjogMSxcclxufVxyXG4iXX0=
@@ -0,0 +1,78 @@
1
+ import { Inject, Injectable, Optional } from '@angular/core';
2
+ import { of } from 'rxjs';
3
+ import { map, take, tap } from 'rxjs/operators';
4
+ import { THESEAM_WIDGET_PREFERENCES_ACCESSOR } from './widget-preferences.token';
5
+ import { CURRENT_WIDGET_PREFERENCES_VERSION, EMPTY_WIDGET_PREFERENCES } from './widget-preferences.models';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@theseam/ui-common/services";
8
+ // TODO: Rethink this. I originally implemented this to be shared widget's then
9
+ // changed it to be per widget, for the accessor injection.
10
+ // @Injectable({ providedIn: 'root' })
11
+ export class WidgetPreferencesService {
12
+ constructor(_preferencesManager, _prefsAccessor) {
13
+ this._preferencesManager = _preferencesManager;
14
+ this._prefsAccessor = _prefsAccessor;
15
+ this._pendingPatches = {};
16
+ }
17
+ isPatchPending(preferenceKey) {
18
+ return this._pendingPatches[preferenceKey] && this._pendingPatches[preferenceKey].length > 0;
19
+ }
20
+ isPending(preferenceKey) {
21
+ return this._preferencesManager.isPending(preferenceKey);
22
+ }
23
+ isLoaded(preferenceKey) {
24
+ return this._preferencesManager.isLoaded(preferenceKey);
25
+ }
26
+ preferences(preferenceKey) {
27
+ if (!this._prefsAccessor) {
28
+ return of(JSON.parse(JSON.stringify(EMPTY_WIDGET_PREFERENCES)));
29
+ }
30
+ return this._preferencesManager.preferences(preferenceKey, this._prefsAccessor, EMPTY_WIDGET_PREFERENCES).pipe(map(prefs => {
31
+ if (this._isValidPreferences(prefs)) {
32
+ return prefs;
33
+ }
34
+ throw Error(`Preferences for key '${preferenceKey}' is not a valid widget preferences.`);
35
+ }));
36
+ }
37
+ refresh(preferenceKey) {
38
+ this._preferencesManager.refresh(preferenceKey);
39
+ }
40
+ patchPreferences(preferenceKey, preferences) {
41
+ if (!this._prefsAccessor) {
42
+ return;
43
+ }
44
+ if (!this._pendingPatches[preferenceKey]) {
45
+ this._pendingPatches[preferenceKey] = [];
46
+ }
47
+ if (this._pendingPatches[preferenceKey].length > 0) {
48
+ this._pendingPatches[preferenceKey].push(preferences);
49
+ return;
50
+ }
51
+ this._pendingPatches[preferenceKey].push(preferences);
52
+ this.preferences(preferenceKey).pipe(take(1), map(prefs => {
53
+ const pendingPatches = this._pendingPatches[preferenceKey];
54
+ this._pendingPatches[preferenceKey] = [];
55
+ const newPrefs = pendingPatches.reduce((acc, patch) => {
56
+ return { ...acc, ...patch };
57
+ }, prefs); // Typescript isn't recognizing that 'version' is included in the initial value.
58
+ if (!this._isValidPreferences(newPrefs)) {
59
+ throw Error(`Attempted to patch preferences for key '${preferenceKey}' with invalid preferences.`);
60
+ }
61
+ this._preferencesManager.update(preferenceKey, newPrefs);
62
+ }), tap(() => this.refresh(preferenceKey))).subscribe();
63
+ }
64
+ _isValidPreferences(prefs) {
65
+ return prefs.version === CURRENT_WIDGET_PREFERENCES_VERSION;
66
+ }
67
+ }
68
+ WidgetPreferencesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WidgetPreferencesService, deps: [{ token: i1.TheSeamPreferencesManagerService }, { token: THESEAM_WIDGET_PREFERENCES_ACCESSOR, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
69
+ WidgetPreferencesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WidgetPreferencesService });
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WidgetPreferencesService, decorators: [{
71
+ type: Injectable
72
+ }], ctorParameters: function () { return [{ type: i1.TheSeamPreferencesManagerService }, { type: undefined, decorators: [{
73
+ type: Optional
74
+ }, {
75
+ type: Inject,
76
+ args: [THESEAM_WIDGET_PREFERENCES_ACCESSOR]
77
+ }] }]; } });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXByZWZlcmVuY2VzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vd2lkZ2V0L3ByZWZlcmVuY2VzL3dpZGdldC1wcmVmZXJlbmNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM1RCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRy9DLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ2hGLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSx3QkFBd0IsRUFBNEIsTUFBTSw2QkFBNkIsQ0FBQTs7O0FBSXBJLCtFQUErRTtBQUMvRSwyREFBMkQ7QUFFM0Qsc0NBQXNDO0FBRXRDLE1BQU0sT0FBTyx3QkFBd0I7SUFJbkMsWUFDbUIsbUJBQXFELEVBQ0wsY0FBMkM7UUFEM0Ysd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFrQztRQUNMLG1CQUFjLEdBQWQsY0FBYyxDQUE2QjtRQUp0RyxvQkFBZSxHQUFrRSxFQUFHLENBQUE7SUFLeEYsQ0FBQztJQUVFLGNBQWMsQ0FBQyxhQUFxQjtRQUN6QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO0lBQzlGLENBQUM7SUFFTSxTQUFTLENBQUMsYUFBcUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFFTSxRQUFRLENBQUMsYUFBcUI7UUFDbkMsT0FB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TixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcblxyXG5pbXBvcnQgeyBUaGVTZWFtUHJlZmVyZW5jZXNBY2Nlc3NvciwgVGhlU2VhbVByZWZlcmVuY2VzQmFzZSwgVGhlU2VhbVByZWZlcmVuY2VzTWFuYWdlclNlcnZpY2UgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vc2VydmljZXMnXHJcbmltcG9ydCB7IFRIRVNFQU1fV0lER0VUX1BSRUZFUkVOQ0VTX0FDQ0VTU09SIH0gZnJvbSAnLi93aWRnZXQtcHJlZmVyZW5jZXMudG9rZW4nXHJcbmltcG9ydCB7IENVUlJFTlRfV0lER0VUX1BSRUZFUkVOQ0VTX1ZFUlNJT04sIEVNUFRZX1dJREdFVF9QUkVGRVJFTkNFUywgVGhlU2VhbVdpZGdldFByZWZlcmVuY2VzIH0gZnJvbSAnLi93aWRnZXQtcHJlZmVyZW5jZXMubW9kZWxzJ1xyXG5cclxudHlwZSBUaGVTZWFtV2lkZ2V0UHJlZmVyZW5jZXNQYXRjaCA9IE9taXQ8VGhlU2VhbVdpZGdldFByZWZlcmVuY2VzLCAndmVyc2lvbic+XHJcblxyXG4vLyBUT0RPOiBSZXRoaW5rIHRoaXMuIEkgb3JpZ2luYWxseSBpbXBsZW1lbnRlZCB0aGlzIHRvIGJlIHNoYXJlZCB3aWRnZXQncyB0aGVuXHJcbi8vIGNoYW5nZWQgaXQgdG8gYmUgcGVyIHdpZGdldCwgZm9yIHRoZSBhY2Nlc3NvciBpbmplY3Rpb24uXHJcblxyXG4vLyBASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBXaWRnZXRQcmVmZXJlbmNlc1NlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIF9wZW5kaW5nUGF0Y2hlczogeyBbcHJlZmVyZW5jZXNLZXk6IHN0cmluZ106IFRoZVNlYW1XaWRnZXRQcmVmZXJlbmNlc1BhdGNoW10gfSA9IHsgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ByZWZlcmVuY2VzTWFuYWdlcjogVGhlU2VhbVByZWZlcmVuY2VzTWFuYWdlclNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRIRVNFQU1fV0lER0VUX1BSRUZFUkVOQ0VTX0FDQ0VTU09SKSBwcml2YXRlIF9wcmVmc0FjY2Vzc29yPzogVGhlU2VhbVByZWZlcmVuY2VzQWNjZXNzb3JcclxuICApIHsgfVxyXG5cclxuICBwdWJsaWMgaXNQYXRjaFBlbmRpbmcocHJlZmVyZW5jZUtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ1BhdGNoZXNbcHJlZmVyZW5jZUtleV0gJiYgdGhpcy5fcGVuZGluZ1BhdGNoZXNbcHJlZmVyZW5jZUtleV0ubGVuZ3RoID4gMFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzUGVuZGluZyhwcmVmZXJlbmNlS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIuaXNQZW5kaW5nKHByZWZlcmVuY2VLZXkpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNMb2FkZWQocHJlZmVyZW5jZUtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyLmlzTG9hZGVkKHByZWZlcmVuY2VLZXkpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJlZmVyZW5jZXMocHJlZmVyZW5jZUtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUaGVTZWFtV2lkZ2V0UHJlZmVyZW5jZXM+IHtcclxuICAgIGlmICghdGhpcy5fcHJlZnNBY2Nlc3Nvcikge1xyXG4gICAgICByZXR1cm4gb2YoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShFTVBUWV9XSURHRVRfUFJFRkVSRU5DRVMpKSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyLnByZWZlcmVuY2VzKHByZWZlcmVuY2VLZXksIHRoaXMuX3ByZWZzQWNjZXNzb3IsIEVNUFRZX1dJREdFVF9QUkVGRVJFTkNFUykucGlwZShcclxuICAgICAgbWFwKHByZWZzID0+IHtcclxuICAgICAgICBpZiAodGhpcy5faXNWYWxpZFByZWZlcmVuY2VzKHByZWZzKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHByZWZzXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aHJvdyBFcnJvcihgUHJlZmVyZW5jZXMgZm9yIGtleSAnJHtwcmVmZXJlbmNlS2V5fScgaXMgbm90IGEgdmFsaWQgd2lkZ2V0IHByZWZlcmVuY2VzLmApXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaChwcmVmZXJlbmNlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ByZWZlcmVuY2VzTWFuYWdlci5yZWZyZXNoKHByZWZlcmVuY2VLZXkpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGF0Y2hQcmVmZXJlbmNlcyhwcmVmZXJlbmNlS2V5OiBzdHJpbmcsIHByZWZlcmVuY2VzOiBUaGVTZWFtV2lkZ2V0UHJlZmVyZW5jZXNQYXRjaCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9wcmVmc0FjY2Vzc29yKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fcGVuZGluZ1BhdGNoZXNbcHJlZmVyZW5jZUtleV0pIHtcclxuICAgICAgdGhpcy5fcGVuZGluZ1BhdGNoZXNbcHJlZmVyZW5jZUtleV0gPSBbXVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9wZW5kaW5nUGF0Y2hlc1twcmVmZXJlbmNlS2V5XS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuX3BlbmRpbmdQYXRjaGVzW3ByZWZlcmVuY2VLZXldLnB1c2gocHJlZmVyZW5jZXMpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BlbmRpbmdQYXRjaGVzW3ByZWZlcmVuY2VLZXldLnB1c2gocHJlZmVyZW5jZXMpXHJcblxyXG4gICAgdGhpcy5wcmVmZXJlbmNlcyhwcmVmZXJlbmNlS2V5KS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICBtYXAocHJlZnMgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBlbmRpbmdQYXRjaGVzID0gdGhpcy5fcGVuZGluZ1BhdGNoZXNbcHJlZmVyZW5jZUtleV1cclxuICAgICAgICB0aGlzLl9wZW5kaW5nUGF0Y2hlc1twcmVmZXJlbmNlS2V5XSA9IFtdXHJcbiAgICAgICAgY29uc3QgbmV3UHJlZnM6IFRoZVNlYW1XaWRnZXRQcmVmZXJlbmNlcyA9IHBlbmRpbmdQYXRjaGVzLnJlZHVjZSgoYWNjLCBwYXRjaCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCAuLi5wYXRjaCB9XHJcbiAgICAgICAgfSwgcHJlZnMpIGFzIFRoZVNlYW1XaWRnZXRQcmVmZXJlbmNlcyAvLyBUeXBlc2NyaXB0IGlzbid0IHJlY29nbml6aW5nIHRoYXQgJ3ZlcnNpb24nIGlzIGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIHZhbHVlLlxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzVmFsaWRQcmVmZXJlbmNlcyhuZXdQcmVmcykpIHtcclxuICAgICAgICAgIHRocm93IEVycm9yKGBBdHRlbXB0ZWQgdG8gcGF0Y2ggcHJlZmVyZW5jZXMgZm9yIGtleSAnJHtwcmVmZXJlbmNlS2V5fScgd2l0aCBpbnZhbGlkIHByZWZlcmVuY2VzLmApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIudXBkYXRlKHByZWZlcmVuY2VLZXksIG5ld1ByZWZzKVxyXG4gICAgICB9KSxcclxuICAgICAgdGFwKCgpID0+IHRoaXMucmVmcmVzaChwcmVmZXJlbmNlS2V5KSksXHJcbiAgICApLnN1YnNjcmliZSgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZhbGlkUHJlZmVyZW5jZXMocHJlZnM6IFRoZVNlYW1QcmVmZXJlbmNlc0Jhc2UpOiBwcmVmcyBpcyBUaGVTZWFtV2lkZ2V0UHJlZmVyZW5jZXMge1xyXG4gICAgcmV0dXJuIHByZWZzLnZlcnNpb24gPT09IENVUlJFTlRfV0lER0VUX1BSRUZFUkVOQ0VTX1ZFUlNJT05cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const THESEAM_WIDGET_PREFERENCES_ACCESSOR = new InjectionToken('TheSeamWidgetPreferencesAccessor');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXByZWZlcmVuY2VzLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL3dpZGdldC9wcmVmZXJlbmNlcy93aWRnZXQtcHJlZmVyZW5jZXMudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUk5QyxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxJQUFJLGNBQWMsQ0FDbkUsa0NBQWtDLENBQ25DLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcblxyXG5pbXBvcnQgeyBUaGVTZWFtUHJlZmVyZW5jZXNBY2Nlc3NvciB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9zZXJ2aWNlcydcclxuXHJcbmV4cG9ydCBjb25zdCBUSEVTRUFNX1dJREdFVF9QUkVGRVJFTkNFU19BQ0NFU1NPUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUaGVTZWFtUHJlZmVyZW5jZXNBY2Nlc3Nvcj4oXHJcbiAgJ1RoZVNlYW1XaWRnZXRQcmVmZXJlbmNlc0FjY2Vzc29yJ1xyXG4pXHJcbiJdfQ==
@@ -1,17 +1,22 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { animate, state, style, transition, trigger } from '@angular/animations';
3
- import { Component, ContentChild, Input, isDevMode, ViewEncapsulation } from '@angular/core';
3
+ import { Component, ContentChild, Inject, Input, isDevMode, Optional, ViewEncapsulation } from '@angular/core';
4
+ import { Subject, takeUntil, tap } from 'rxjs';
4
5
  import { faAngleDown, faCog } from '@fortawesome/free-solid-svg-icons';
5
6
  import { InputBoolean } from '@theseam/ui-common/core';
7
+ import { hasProperty } from '@theseam/ui-common/utils';
6
8
  import { WidgetIconTplDirective } from '../directives/widget-icon-tpl.directive';
7
9
  import { WidgetTitleTplDirective } from '../directives/widget-title-tpl.directive';
10
+ import { WidgetPreferencesService } from '../preferences/widget-preferences.service';
11
+ import { THESEAM_WIDGET_DATA } from '../widget-token';
8
12
  import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
- import * as i2 from "@fortawesome/angular-fontawesome";
11
- import * as i3 from "@theseam/ui-common/icon";
12
- import * as i4 from "@theseam/ui-common/loading";
13
- import * as i5 from "@theseam/ui-common/buttons";
14
- import * as i6 from "../directives/widget-drag-handle.directive";
13
+ import * as i1 from "../preferences/widget-preferences.service";
14
+ import * as i2 from "@angular/common";
15
+ import * as i3 from "@fortawesome/angular-fontawesome";
16
+ import * as i4 from "@theseam/ui-common/icon";
17
+ import * as i5 from "@theseam/ui-common/loading";
18
+ import * as i6 from "@theseam/ui-common/buttons";
19
+ import * as i7 from "../directives/widget-drag-handle.directive";
15
20
  const EXPANDED_STATE = 'expanded';
16
21
  const COLLAPSED_STATE = 'collapsed';
17
22
  const EXPAND_TRANSITION = `${EXPANDED_STATE} <=> ${COLLAPSED_STATE}`;
@@ -53,9 +58,31 @@ const collapseAnimation = trigger('collapseAnim', [
53
58
  * used then the situation should be considered for becoming a widget component.
54
59
  */
55
60
  export class WidgetComponent {
56
- constructor() {
61
+ /**
62
+ * Icon displayed in the top header.
63
+ *
64
+ * If a more advanced icon is needed you can use `seamWidgetIconTpl` template
65
+ * directive, but a `SeamIcon` input is recommended, because allowing custom
66
+ * icons that do not follow the tested types can lead to inconsitency quickly
67
+ * as different developers keep making tweaks.
68
+ */
69
+ get icon() { return this._iconUrl || this._iconObj; }
70
+ set icon(value) {
71
+ if (typeof value === 'string') {
72
+ this._iconUrl = value;
73
+ this._iconObj = undefined;
74
+ }
75
+ else {
76
+ this._iconUrl = undefined;
77
+ this._iconObj = value;
78
+ }
79
+ }
80
+ constructor(_widgetPreferences, _data) {
81
+ this._widgetPreferences = _widgetPreferences;
82
+ this._data = _data;
57
83
  this.configIcon = faCog;
58
84
  this.collapseIcon = faAngleDown;
85
+ this._ngUnsubscribe = new Subject();
59
86
  /**
60
87
  * Toggles the collapsed state of a widget.
61
88
  */
@@ -75,26 +102,19 @@ export class WidgetComponent {
75
102
  * header to toggle the collapsed state.
76
103
  */
77
104
  this.canCollapse = false;
78
- }
79
- /**
80
- * Icon displayed in the top header.
81
- *
82
- * If a more advanced icon is needed you can use `seamWidgetIconTpl` template
83
- * directive, but a `SeamIcon` input is recommended, because allowing custom
84
- * icons that do not follow the tested types can lead to inconsitency quickly
85
- * as different developers keep making tweaks.
86
- */
87
- get icon() { return this._iconUrl || this._iconObj; }
88
- set icon(value) {
89
- if (typeof value === 'string') {
90
- this._iconUrl = value;
91
- this._iconObj = undefined;
92
- }
93
- else {
94
- this._iconUrl = undefined;
95
- this._iconObj = value;
105
+ if (this._data && this._data.widgetId) {
106
+ this._preferencesKey = `widget:${this._data.widgetId}`;
107
+ this._widgetPreferences.preferences(this._preferencesKey).pipe(tap(prefs => {
108
+ if (hasProperty(prefs, 'collapsed')) {
109
+ this.collapsed = prefs.collapsed;
110
+ }
111
+ }), takeUntil(this._ngUnsubscribe)).subscribe();
96
112
  }
97
113
  }
114
+ ngOnDestroy() {
115
+ this._ngUnsubscribe.next();
116
+ this._ngUnsubscribe.complete();
117
+ }
98
118
  /**
99
119
  * Toggles a widget's collapsed state.
100
120
  */
@@ -106,11 +126,21 @@ export class WidgetComponent {
106
126
  return;
107
127
  }
108
128
  this.collapsed = !this.collapsed;
129
+ // Only update the preference, if collapse method is called, because it is
130
+ // assumed that the user is collapsing the widget. If the collapsed state is
131
+ // changed by other means, such using the widget's `collapsed` input, then
132
+ // the preference should not be updated, because that is assumed to be an
133
+ // app controlled change that should not be persisted.
134
+ if (this._preferencesKey) {
135
+ this._widgetPreferences.patchPreferences(this._preferencesKey, { collapsed: this.collapsed });
136
+ }
109
137
  }
110
138
  get collapseState() { return this.collapsed ? COLLAPSED_STATE : EXPANDED_STATE; }
111
139
  }
112
- WidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
113
- WidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WidgetComponent, selector: "seam-widget", inputs: { collapsed: "collapsed", hasHeader: "hasHeader", titleText: "titleText", icon: "icon", iconClass: "iconClass", loading: "loading", hasConfig: "hasConfig", canCollapse: "canCollapse" }, queries: [{ propertyName: "iconTpl", first: true, predicate: WidgetIconTplDirective, descendants: true, static: true }, { propertyName: "titleTpl", first: true, predicate: WidgetTitleTplDirective, descendants: true, static: true }], ngImport: i0, template: "<div class=\"seam-widget border rounded overflow-hidden\">\n <div class=\"widget-header\" seamWidgetDragHandle *ngIf=\"hasHeader\">\n <div class=\"widget-header-content p-2 text-nowrap\">\n <span class=\"mr-1 widget-header-icon\">\n <ng-container *ngIf=\"iconTpl; else noIconTpl\">\n <ng-template\n [ngTemplateOutlet]=\"iconTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: icon, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noIconTpl>\n <fa-icon *ngIf=\"_iconObj\"\n class=\"widget-header-icon--fa {{ iconClass }}\"\n [icon]=\"_iconObj\"></fa-icon>\n <img *ngIf=\"_iconUrl\"\n class=\"widget-header-icon--img {{ iconClass }}\"\n [src]=\"_iconUrl\" [alt]=\"titleText\">\n </ng-template>\n </span>\n <span class=\"widget-header-title text-truncate\">\n <ng-container *ngIf=\"titleTpl; else noTitleTpl\">\n <ng-template\n [ngTemplateOutlet]=\"titleTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: titleText, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noTitleTpl>{{ titleText }}</ng-template>\n </span>\n </div>\n <div class=\"widget-header-btns-container\" *ngIf=\"hasConfig || canCollapse\">\n <!-- <div *ngIf=\"hasConfig\">\n <button seamIconBtn [icon]=\"configIcon\"\n class=\"widget-header-btn-config\"\n [iconType]=\"null\">\n <span class=\"sr-only\">Widget configuration menu</span>\n </button>\n <button seamButton class=\"widget-header-btn-config p-0\">\n <seam-icon class=\"d-block\" [icon]=\"configIcon\" iconClass=\"text-secondary\"></seam-icon>\n <span class=\"sr-only\">Widget configuration menu</span>\n </button>\n </div> -->\n\n <div *ngIf=\"canCollapse\" class=\"px-0\">\n\n <button seamButton class=\"widget-header-btn-collapse p-0 mr-1 h-100\" (click)=\"collapse()\" [class.widget-header-btn-collapse--active]=\"collapsed\">\n <seam-icon class=\"d-block\"\n [icon]=\"collapseIcon\"\n iconClass=\"text-secondary\">\n </seam-icon>\n <span class=\"sr-only\">Widget collapse</span>\n </button>\n <!-- iconType=\"borderless-styled-square\" -->\n <!-- style=\"margin-left: -10px; margin-right: -5px;\" -->\n\n <!-- <button seamIconBtn class=\"widget-header-btn-collapse\" (click)=\"collapse()\" [class.widget-header-btn-collapse--active]=\"collapsed\"\n btnTheme=\"secondary\"\n [icon]=\"collapseIcon\"\n iconType=\"borderless-styled-square\"\n size=\"xs\"\n btnSize=\"sm\"\n >\n <seam-icon class=\"d-block\"\n [icon]=\"collapseIcon\"\n iconClass=\"text-secondary\"\n style=\"margin-left: -10px; margin-right: -5px;\"\n iconType=\"borderless-styled-square\"></seam-icon>\n <span class=\"sr-only\">Widget collapse</span>\n </button> -->\n </div>\n </div>\n </div>\n <div class=\"position-relative overflow-hidden\" [style.height.px]=\"loading ? 150 : undefined\" [@collapseAnim]=\"collapseState\">\n <ng-container *ngIf=\"!collapsed\">\n <div class=\"p-2\" *ngIf=\"!loading else loadingTpl\" @keepContentAnim>\n <ng-content></ng-content>\n </div>\n <ng-content select=\"seam-widget-footer\"></ng-content>\n <ng-template #loadingTpl>\n <div class=\"position-absolute\" @loadingAnim style=\"top:0;right:0;bottom:0;left:0\">\n <seam-loading [theme]=\"'primary'\"></seam-loading>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: ["seam-widget{display:block;font-size:15px}seam-widget .seam-widget{background:#FFFFFF;box-shadow:none}seam-widget .widget-header{display:flex;flex-direction:row;border-bottom:1px solid #dee2e6;background:#F4F4F4;font-size:17px}seam-widget .widget-header .widget-header-content{flex:1 1 100%}seam-widget .widget-header .widget-header-btns-container{display:flex;flex-direction:row}seam-widget .widget-header .widget-header-btns-container>div{display:flex;flex-direction:column;justify-content:center;padding:4px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:25px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:25px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .svg-inline--fa{transform:rotate(0);transition:.3s ease-in-out transform}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse.widget-header-btn-collapse--active .svg-inline--fa{transform:rotate(90deg)}seam-widget .widget-header .widget-header-title{font-size:17px}seam-widget .widget-header-icon{display:inline-block;vertical-align:top;max-height:20px;max-width:20px;height:20px;width:20px;color:currentColor}seam-widget .widget-header-icon .widget-header-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;max-height:20px;max-width:20px;height:20px;width:20px}seam-widget .widget-header-icon .widget-header-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header-icon .widget-header-icon--img{height:100%;max-height:20px;max-width:20px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: i3.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i4.LoadingComponent, selector: "seam-loading", inputs: ["theme"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }, { kind: "directive", type: i6.WidgetDragHandleDirective, selector: "[seamWidgetDragHandle]", inputs: ["cdkDragHandleDisabled"] }], animations: [
140
+ WidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WidgetComponent, deps: [{ token: i1.WidgetPreferencesService }, { token: THESEAM_WIDGET_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
141
+ WidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WidgetComponent, selector: "seam-widget", inputs: { collapsed: "collapsed", hasHeader: "hasHeader", titleText: "titleText", icon: "icon", iconClass: "iconClass", loading: "loading", hasConfig: "hasConfig", canCollapse: "canCollapse" }, providers: [
142
+ WidgetPreferencesService,
143
+ ], queries: [{ propertyName: "iconTpl", first: true, predicate: WidgetIconTplDirective, descendants: true, static: true }, { propertyName: "titleTpl", first: true, predicate: WidgetTitleTplDirective, descendants: true, static: true }], ngImport: i0, template: "<div class=\"seam-widget border rounded overflow-hidden\">\n <div class=\"widget-header\" seamWidgetDragHandle *ngIf=\"hasHeader\">\n <div class=\"widget-header-content p-2 text-nowrap\">\n <span class=\"mr-1 widget-header-icon\">\n <ng-container *ngIf=\"iconTpl; else noIconTpl\">\n <ng-template\n [ngTemplateOutlet]=\"iconTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: icon, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noIconTpl>\n <fa-icon *ngIf=\"_iconObj\"\n class=\"widget-header-icon--fa {{ iconClass }}\"\n [icon]=\"_iconObj\"></fa-icon>\n <img *ngIf=\"_iconUrl\"\n class=\"widget-header-icon--img {{ iconClass }}\"\n [src]=\"_iconUrl\" [alt]=\"titleText\">\n </ng-template>\n </span>\n <span class=\"widget-header-title text-truncate\">\n <ng-container *ngIf=\"titleTpl; else noTitleTpl\">\n <ng-template\n [ngTemplateOutlet]=\"titleTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: titleText, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noTitleTpl>{{ titleText }}</ng-template>\n </span>\n </div>\n <div class=\"widget-header-btns-container\" *ngIf=\"hasConfig || canCollapse\">\n <!-- <div *ngIf=\"hasConfig\">\n <button seamIconBtn [icon]=\"configIcon\"\n class=\"widget-header-btn-config\"\n [iconType]=\"null\">\n <span class=\"sr-only\">Widget configuration menu</span>\n </button>\n <button seamButton class=\"widget-header-btn-config p-0\">\n <seam-icon class=\"d-block\" [icon]=\"configIcon\" iconClass=\"text-secondary\"></seam-icon>\n <span class=\"sr-only\">Widget configuration menu</span>\n </button>\n </div> -->\n\n <div *ngIf=\"canCollapse\" class=\"px-0\">\n\n <button seamButton class=\"widget-header-btn-collapse p-0 mr-1 h-100\" (click)=\"collapse()\" [class.widget-header-btn-collapse--active]=\"collapsed\">\n <seam-icon class=\"d-block\"\n [icon]=\"collapseIcon\"\n iconClass=\"text-secondary\">\n </seam-icon>\n <span class=\"sr-only\">Widget collapse</span>\n </button>\n <!-- iconType=\"borderless-styled-square\" -->\n <!-- style=\"margin-left: -10px; margin-right: -5px;\" -->\n\n <!-- <button seamIconBtn class=\"widget-header-btn-collapse\" (click)=\"collapse()\" [class.widget-header-btn-collapse--active]=\"collapsed\"\n btnTheme=\"secondary\"\n [icon]=\"collapseIcon\"\n iconType=\"borderless-styled-square\"\n size=\"xs\"\n btnSize=\"sm\"\n >\n <seam-icon class=\"d-block\"\n [icon]=\"collapseIcon\"\n iconClass=\"text-secondary\"\n style=\"margin-left: -10px; margin-right: -5px;\"\n iconType=\"borderless-styled-square\"></seam-icon>\n <span class=\"sr-only\">Widget collapse</span>\n </button> -->\n </div>\n </div>\n </div>\n <div class=\"position-relative overflow-hidden\" [style.height.px]=\"loading ? 150 : undefined\" [@collapseAnim]=\"collapseState\">\n <ng-container *ngIf=\"!collapsed\">\n <div class=\"p-2\" *ngIf=\"!loading else loadingTpl\" @keepContentAnim>\n <ng-content></ng-content>\n </div>\n <ng-content select=\"seam-widget-footer\"></ng-content>\n <ng-template #loadingTpl>\n <div class=\"position-absolute\" @loadingAnim style=\"top:0;right:0;bottom:0;left:0\">\n <seam-loading [theme]=\"'primary'\"></seam-loading>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: ["seam-widget{display:block;font-size:15px}seam-widget .seam-widget{background:#FFFFFF;box-shadow:none}seam-widget .widget-header{display:flex;flex-direction:row;border-bottom:1px solid #dee2e6;background:#F4F4F4;font-size:17px}seam-widget .widget-header .widget-header-content{flex:1 1 100%}seam-widget .widget-header .widget-header-btns-container{display:flex;flex-direction:row}seam-widget .widget-header .widget-header-btns-container>div{display:flex;flex-direction:column;justify-content:center;padding:4px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:25px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:25px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .svg-inline--fa{transform:rotate(0);transition:.3s ease-in-out transform}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse.widget-header-btn-collapse--active .svg-inline--fa{transform:rotate(90deg)}seam-widget .widget-header .widget-header-title{font-size:17px}seam-widget .widget-header-icon{display:inline-block;vertical-align:top;max-height:20px;max-width:20px;height:20px;width:20px;color:currentColor}seam-widget .widget-header-icon .widget-header-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;max-height:20px;max-width:20px;height:20px;width:20px}seam-widget .widget-header-icon .widget-header-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header-icon .widget-header-icon--img{height:100%;max-height:20px;max-width:20px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: i4.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i5.LoadingComponent, selector: "seam-loading", inputs: ["theme"] }, { kind: "component", type: i6.ButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }, { kind: "directive", type: i7.WidgetDragHandleDirective, selector: "[seamWidgetDragHandle]", inputs: ["cdkDragHandleDisabled"] }], animations: [
114
144
  loadingAnimation,
115
145
  collapseAnimation,
116
146
  keepContentAnimation,
@@ -132,12 +162,19 @@ __decorate([
132
162
  ], WidgetComponent.prototype, "canCollapse", void 0);
133
163
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WidgetComponent, decorators: [{
134
164
  type: Component,
135
- args: [{ selector: 'seam-widget', encapsulation: ViewEncapsulation.None, animations: [
165
+ args: [{ selector: 'seam-widget', providers: [
166
+ WidgetPreferencesService,
167
+ ], encapsulation: ViewEncapsulation.None, animations: [
136
168
  loadingAnimation,
137
169
  collapseAnimation,
138
170
  keepContentAnimation,
139
171
  ], template: "<div class=\"seam-widget border rounded overflow-hidden\">\n <div class=\"widget-header\" seamWidgetDragHandle *ngIf=\"hasHeader\">\n <div class=\"widget-header-content p-2 text-nowrap\">\n <span class=\"mr-1 widget-header-icon\">\n <ng-container *ngIf=\"iconTpl; else noIconTpl\">\n <ng-template\n [ngTemplateOutlet]=\"iconTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: icon, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noIconTpl>\n <fa-icon *ngIf=\"_iconObj\"\n class=\"widget-header-icon--fa {{ iconClass }}\"\n [icon]=\"_iconObj\"></fa-icon>\n <img *ngIf=\"_iconUrl\"\n class=\"widget-header-icon--img {{ iconClass }}\"\n [src]=\"_iconUrl\" [alt]=\"titleText\">\n </ng-template>\n </span>\n <span class=\"widget-header-title text-truncate\">\n <ng-container *ngIf=\"titleTpl; else noTitleTpl\">\n <ng-template\n [ngTemplateOutlet]=\"titleTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: titleText, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noTitleTpl>{{ titleText }}</ng-template>\n </span>\n </div>\n <div class=\"widget-header-btns-container\" *ngIf=\"hasConfig || canCollapse\">\n <!-- <div *ngIf=\"hasConfig\">\n <button seamIconBtn [icon]=\"configIcon\"\n class=\"widget-header-btn-config\"\n [iconType]=\"null\">\n <span class=\"sr-only\">Widget configuration menu</span>\n </button>\n <button seamButton class=\"widget-header-btn-config p-0\">\n <seam-icon class=\"d-block\" [icon]=\"configIcon\" iconClass=\"text-secondary\"></seam-icon>\n <span class=\"sr-only\">Widget configuration menu</span>\n </button>\n </div> -->\n\n <div *ngIf=\"canCollapse\" class=\"px-0\">\n\n <button seamButton class=\"widget-header-btn-collapse p-0 mr-1 h-100\" (click)=\"collapse()\" [class.widget-header-btn-collapse--active]=\"collapsed\">\n <seam-icon class=\"d-block\"\n [icon]=\"collapseIcon\"\n iconClass=\"text-secondary\">\n </seam-icon>\n <span class=\"sr-only\">Widget collapse</span>\n </button>\n <!-- iconType=\"borderless-styled-square\" -->\n <!-- style=\"margin-left: -10px; margin-right: -5px;\" -->\n\n <!-- <button seamIconBtn class=\"widget-header-btn-collapse\" (click)=\"collapse()\" [class.widget-header-btn-collapse--active]=\"collapsed\"\n btnTheme=\"secondary\"\n [icon]=\"collapseIcon\"\n iconType=\"borderless-styled-square\"\n size=\"xs\"\n btnSize=\"sm\"\n >\n <seam-icon class=\"d-block\"\n [icon]=\"collapseIcon\"\n iconClass=\"text-secondary\"\n style=\"margin-left: -10px; margin-right: -5px;\"\n iconType=\"borderless-styled-square\"></seam-icon>\n <span class=\"sr-only\">Widget collapse</span>\n </button> -->\n </div>\n </div>\n </div>\n <div class=\"position-relative overflow-hidden\" [style.height.px]=\"loading ? 150 : undefined\" [@collapseAnim]=\"collapseState\">\n <ng-container *ngIf=\"!collapsed\">\n <div class=\"p-2\" *ngIf=\"!loading else loadingTpl\" @keepContentAnim>\n <ng-content></ng-content>\n </div>\n <ng-content select=\"seam-widget-footer\"></ng-content>\n <ng-template #loadingTpl>\n <div class=\"position-absolute\" @loadingAnim style=\"top:0;right:0;bottom:0;left:0\">\n <seam-loading [theme]=\"'primary'\"></seam-loading>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: ["seam-widget{display:block;font-size:15px}seam-widget .seam-widget{background:#FFFFFF;box-shadow:none}seam-widget .widget-header{display:flex;flex-direction:row;border-bottom:1px solid #dee2e6;background:#F4F4F4;font-size:17px}seam-widget .widget-header .widget-header-content{flex:1 1 100%}seam-widget .widget-header .widget-header-btns-container{display:flex;flex-direction:row}seam-widget .widget-header .widget-header-btns-container>div{display:flex;flex-direction:column;justify-content:center;padding:4px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:25px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:25px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .svg-inline--fa{transform:rotate(0);transition:.3s ease-in-out transform}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse.widget-header-btn-collapse--active .svg-inline--fa{transform:rotate(90deg)}seam-widget .widget-header .widget-header-title{font-size:17px}seam-widget .widget-header-icon{display:inline-block;vertical-align:top;max-height:20px;max-width:20px;height:20px;width:20px;color:currentColor}seam-widget .widget-header-icon .widget-header-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;max-height:20px;max-width:20px;height:20px;width:20px}seam-widget .widget-header-icon .widget-header-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header-icon .widget-header-icon--img{height:100%;max-height:20px;max-width:20px}\n"] }]
140
- }], propDecorators: { collapsed: [{
172
+ }], ctorParameters: function () { return [{ type: i1.WidgetPreferencesService }, { type: undefined, decorators: [{
173
+ type: Optional
174
+ }, {
175
+ type: Inject,
176
+ args: [THESEAM_WIDGET_DATA]
177
+ }] }]; }, propDecorators: { collapsed: [{
141
178
  type: Input
142
179
  }], hasHeader: [{
143
180
  type: Input
@@ -160,4 +197,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
160
197
  type: ContentChild,
161
198
  args: [WidgetTitleTplDirective, { static: true }]
162
199
  }] } });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi93aWRnZXQvd2lkZ2V0L3dpZGdldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vd2lkZ2V0L3dpZGdldC93aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUc1RixPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUd0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQTs7Ozs7Ozs7QUFFbEYsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFBO0FBQ2pDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQTtBQUVuQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsY0FBYyxRQUFRLGVBQWUsRUFBRSxDQUFBO0FBRXBFLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRTtJQUM5QyxVQUFVLENBQUMsUUFBUSxFQUFFO1FBQ25CLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNyQixPQUFPLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDcEQsQ0FBQztJQUNGLFVBQVUsQ0FBQyxRQUFRLEVBQUU7UUFDbkIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNwRCxDQUFDO0NBQ0gsQ0FBQyxDQUFBO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixFQUFFO0lBQ3RELFVBQVUsQ0FBQyxRQUFRLEVBQUU7UUFDbkIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDdEMsQ0FBQztDQUNILENBQUMsQ0FBQTtBQUVGLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRTtJQUNoRCxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLEtBQUssQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0NBQzNELENBQUMsQ0FBQTtBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFZSCxNQUFNLE9BQU8sZUFBZTtJQVg1QjtRQWtCVyxlQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLGlCQUFZLEdBQUcsV0FBVyxDQUFBO1FBRW5DOztXQUVHO1FBQ3NCLGNBQVMsR0FBRyxLQUFLLENBQUE7UUFFMUM7OztXQUdHO1FBQ3NCLGNBQVMsR0FBRyxJQUFJLENBQUE7UUFzQ3pDLCtDQUErQztRQUN0QixZQUFPLEdBQUcsS0FBSyxDQUFBO1FBRXhDLGNBQWM7UUFDZCx5Q0FBeUM7UUFDaEIsY0FBUyxHQUFHLEtBQUssQ0FBQTtRQUUxQzs7O1dBR0c7UUFDc0IsZ0JBQVcsR0FBRyxLQUFLLENBQUE7S0FxQjdDO0lBMURDOzs7Ozs7O09BT0c7SUFDSCxJQUNJLElBQUksS0FBMkIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBQzFFLElBQUksSUFBSSxDQUFDLEtBQTJCO1FBQ2xDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFBO1NBQzFCO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQTtZQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtTQUN0QjtJQUNILENBQUM7SUF3QkQ7O09BRUc7SUFDSSxRQUFRO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxTQUFTLEVBQUUsRUFBRTtnQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLCtEQUErRCxDQUFDLENBQUE7YUFDOUU7WUFDRCxPQUFNO1NBQ1A7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsSUFBSSxhQUFhLEtBQWEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQSxDQUFDLENBQUM7OzRHQXZGN0UsZUFBZTtnR0FBZixlQUFlLDBSQXNFWixzQkFBc0IseUZBQ3RCLHVCQUF1Qiw4REMzSXZDLDZ2SEFxRkEsd3JHRHZCYztRQUNWLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsb0JBQW9CO0tBQ3JCO0FBZXdCO0lBQWYsWUFBWSxFQUFFO2tEQUFrQjtBQU1qQjtJQUFmLFlBQVksRUFBRTtrREFBaUI7QUF1Q2hCO0lBQWYsWUFBWSxFQUFFO2dEQUFnQjtBQUlmO0lBQWYsWUFBWSxFQUFFO2tEQUFrQjtBQU1qQjtJQUFmLFlBQVksRUFBRTtvREFBb0I7MkZBcEVqQyxlQUFlO2tCQVgzQixTQUFTOytCQUNFLGFBQWEsaUJBR1IsaUJBQWlCLENBQUMsSUFBSSxjQUN6Qjt3QkFDVixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsb0JBQW9CO3FCQUNyQjs4QkFld0IsU0FBUztzQkFBakMsS0FBSztnQkFNbUIsU0FBUztzQkFBakMsS0FBSztnQkFVRyxTQUFTO3NCQUFqQixLQUFLO2dCQVdGLElBQUk7c0JBRFAsS0FBSztnQkFnQkcsU0FBUztzQkFBakIsS0FBSztnQkFHbUIsT0FBTztzQkFBL0IsS0FBSztnQkFJbUIsU0FBUztzQkFBakMsS0FBSztnQkFNbUIsV0FBVztzQkFBbkMsS0FBSztnQkFFa0QsT0FBTztzQkFBOUQsWUFBWTt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0csUUFBUTtzQkFBaEUsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJ1xuaW1wb3J0IHsgQm9vbGVhbklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIElucHV0LCBpc0Rldk1vZGUsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuaW1wb3J0IHsgSWNvblByb3AgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnXG5pbXBvcnQgeyBmYUFuZ2xlRG93biwgZmFDb2cgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vY29yZSdcbmltcG9ydCB7IFNlYW1JY29uIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2ljb24nXG5cbmltcG9ydCB7IFdpZGdldEljb25UcGxEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3dpZGdldC1pY29uLXRwbC5kaXJlY3RpdmUnXG5pbXBvcnQgeyBXaWRnZXRUaXRsZVRwbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvd2lkZ2V0LXRpdGxlLXRwbC5kaXJlY3RpdmUnXG5cbmNvbnN0IEVYUEFOREVEX1NUQVRFID0gJ2V4cGFuZGVkJ1xuY29uc3QgQ09MTEFQU0VEX1NUQVRFID0gJ2NvbGxhcHNlZCdcblxuY29uc3QgRVhQQU5EX1RSQU5TSVRJT04gPSBgJHtFWFBBTkRFRF9TVEFURX0gPD0+ICR7Q09MTEFQU0VEX1NUQVRFfWBcblxuY29uc3QgbG9hZGluZ0FuaW1hdGlvbiA9IHRyaWdnZXIoJ2xvYWRpbmdBbmltJywgW1xuICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgc3R5bGUoeyBvcGFjaXR5OiAwIH0pLFxuICAgIGFuaW1hdGUoJzI1MG1zIGVhc2UtaW4tb3V0Jywgc3R5bGUoeyBvcGFjaXR5OiAxIH0pKSxcbiAgXSksXG4gIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICBzdHlsZSh7IG9wYWNpdHk6IDEgfSksXG4gICAgYW5pbWF0ZSgnMjUwbXMgZWFzZS1pbi1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDAgfSkpLFxuICBdKSxcbl0pXG5cbi8qKlxuICogSSB3YXMgaGF2aW5nIGFuIGlzc3VlIGdldHRpbmcgdGhlIGNvbnRlbnQgdG8gbm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NLFxuICogYmVmb3JlIHRoZSBhbmltYXRpb24gd2FzIGNvbXBsZXRlLiBUaGlzIGFuaW1hdGlvbiBpcyBhIGhhY2sgdG8ga2VlcCB0aGVcbiAqIGNvbnRlbnQgaW4gdGhlIERPTSB1bnRpbCB0aGUgYW5pbWF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5jb25zdCBrZWVwQ29udGVudEFuaW1hdGlvbiA9IHRyaWdnZXIoJ2tlZXBDb250ZW50QW5pbScsIFtcbiAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgIHN0eWxlKHsgb3BhY2l0eTogMSB9KSxcbiAgICBhbmltYXRlKCcwbXMnLCBzdHlsZSh7IG9wYWNpdHk6IDAgfSkpLFxuICBdKSxcbl0pXG5cbmNvbnN0IGNvbGxhcHNlQW5pbWF0aW9uID0gdHJpZ2dlcignY29sbGFwc2VBbmltJywgW1xuICBzdGF0ZShFWFBBTkRFRF9TVEFURSwgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gIHN0YXRlKENPTExBUFNFRF9TVEFURSwgc3R5bGUoeyBoZWlnaHQ6ICcwJyB9KSksXG4gIHRyYW5zaXRpb24oRVhQQU5EX1RSQU5TSVRJT04sIGFuaW1hdGUoJzAuM3MgZWFzZS1pbi1vdXQnKSksXG5dKVxuXG4vKipcbiAqIFdpZGdldFxuICpcbiAqIFdpZGdldHMgYXJlIGRlc2lnbmVkIHdpdGggdGhlIGludGVudGlvbiBvZiBiZWluZyBvbiBhIGRhc2hib2FyZC4gT3RoZXIgdXNlc1xuICogbWF5IGJlIHN1cHBvcnRlZCBhcyB0aGUgbmVlZCBhcmlzZXMuXG4gKlxuICogVGhlIG9ubHkgSFRNTC9DU1MgdXNlIHNob3VsZCBiZSBhIHdpZGdldCBjb250ZW50IGNvbXBvbmVudCwgdW5sZXNzIHRoZXJlIGlzIGFcbiAqIGNhc2UgcmVxdWlyaW5nIG1vcmUgYWR2YW5jZWQgZGVzaWduLiBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIG1hbmFnZSBhIGNvbW1vblxuICogc3R5bGUgZm9yIG91ciB3aWRnZXRzLiBJZiBhIGNhc2UgcmVxdWlyaW5nIG5vbiB3aWRnZXQgY29udGVudCBjb21wb25lbnRzIGlzXG4gKiB1c2VkIHRoZW4gdGhlIHNpdHVhdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgYmVjb21pbmcgYSB3aWRnZXQgY29tcG9uZW50LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLXdpZGdldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93aWRnZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgYW5pbWF0aW9uczogW1xuICAgIGxvYWRpbmdBbmltYXRpb24sXG4gICAgY29sbGFwc2VBbmltYXRpb24sXG4gICAga2VlcENvbnRlbnRBbmltYXRpb24sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldENvbXBvbmVudCB7XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hhc0hlYWRlcjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9sb2FkaW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hhc0NvbmZpZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jYW5Db2xsYXBzZTogQm9vbGVhbklucHV0XG5cbiAgcmVhZG9ubHkgY29uZmlnSWNvbiA9IGZhQ29nXG4gIHJlYWRvbmx5IGNvbGxhcHNlSWNvbiA9IGZhQW5nbGVEb3duXG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGNvbGxhcHNlZCBzdGF0ZSBvZiBhIHdpZGdldC5cbiAgICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBjb2xsYXBzZWQgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB0b3AgaGVhZGVyIGJhciBvZiBhIHdpZGdldC4gVGhpcyBzaG91bGQgYmUgdHJ1ZSBmb3IgbW9zdFxuICAgKiB3aWRnZXRzLlxuICAgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGhhc0hlYWRlciA9IHRydWVcblxuICAvKipcbiAgICogVGl0bGUgZGlzcGxheWVkIGluIHRoZSB0b3AgaGVhZGVyLlxuICAgKlxuICAgKiBJZiBhIG1vcmUgYWR2YW5jZWQgdGl0bGUgaXMgbmVlZGVkIHlvdSBjYW4gdXNlIGBzZWFtV2lkZ2V0VGl0bGVUcGxgXG4gICAqIHRlbXBsYXRlIGRpcmVjdGl2ZSwgYnV0IHRleHQgaXMgcmVjb21tZW5kZWQsIGJlY2F1c2UgYWxsb3dpbmcgY3VzdG9tIHN0eWxlc1xuICAgKiBjYW4gbGVhZCB0byBpbmNvbnNpdGVuY3kgcXVpY2tseSBhcyBkaWZmZXJlbnQgZGV2ZWxvcGVycyBrZWVwIG1ha2luZ1xuICAgKiB0d2Vha3MuXG4gICAqL1xuICBASW5wdXQoKSB0aXRsZVRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICAvKipcbiAgICogSWNvbiBkaXNwbGF5ZWQgaW4gdGhlIHRvcCBoZWFkZXIuXG4gICAqXG4gICAqIElmIGEgbW9yZSBhZHZhbmNlZCBpY29uIGlzIG5lZWRlZCB5b3UgY2FuIHVzZSBgc2VhbVdpZGdldEljb25UcGxgIHRlbXBsYXRlXG4gICAqIGRpcmVjdGl2ZSwgYnV0IGEgYFNlYW1JY29uYCBpbnB1dCBpcyByZWNvbW1lbmRlZCwgYmVjYXVzZSBhbGxvd2luZyBjdXN0b21cbiAgICogaWNvbnMgdGhhdCBkbyBub3QgZm9sbG93IHRoZSB0ZXN0ZWQgdHlwZXMgY2FuIGxlYWQgdG8gaW5jb25zaXRlbmN5IHF1aWNrbHlcbiAgICogYXMgZGlmZmVyZW50IGRldmVsb3BlcnMga2VlcCBtYWtpbmcgdHdlYWtzLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGljb24oKTogU2VhbUljb24gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5faWNvblVybCB8fCB0aGlzLl9pY29uT2JqIH1cbiAgc2V0IGljb24odmFsdWU6IFNlYW1JY29uIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2ljb25VcmwgPSB2YWx1ZVxuICAgICAgdGhpcy5faWNvbk9iaiA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pY29uVXJsID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLl9pY29uT2JqID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBfaWNvblVybDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIF9pY29uT2JqOiBJY29uUHJvcCB8IHVuZGVmaW5lZFxuXG4gIC8qKiBBZGQgYSBjc3MgY2xhc3MgdG8gdGhlIGhlYWRlciBpY29uLiAqL1xuICBASW5wdXQoKSBpY29uQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICAvKiogU2hvd3Mgd2lkZ2V0IGxvYWRpbmcgaW5zdGVhZCBvZiBjb250ZW50LiAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbG9hZGluZyA9IGZhbHNlXG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgLy8gTk9URTogQ29uZmlnIGlzIHN0aWxsIGJlaW5nIHdvcmtlZCBvbi5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGhhc0NvbmZpZyA9IGZhbHNlXG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGFiaWxpdHkgdG8gY29sbGFwc2UgYSB3aWRnZXQuIEFuIGljb24gd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlXG4gICAqIGhlYWRlciB0byB0b2dnbGUgdGhlIGNvbGxhcHNlZCBzdGF0ZS5cbiAgICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBjYW5Db2xsYXBzZSA9IGZhbHNlXG5cbiAgQENvbnRlbnRDaGlsZChXaWRnZXRJY29uVHBsRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBpY29uVHBsPzogV2lkZ2V0SWNvblRwbERpcmVjdGl2ZVxuICBAQ29udGVudENoaWxkKFdpZGdldFRpdGxlVHBsRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSB0aXRsZVRwbD86IFdpZGdldFRpdGxlVHBsRGlyZWN0aXZlXG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgYSB3aWRnZXQncyBjb2xsYXBzZWQgc3RhdGUuXG4gICAqL1xuICBwdWJsaWMgY29sbGFwc2UoKSB7XG4gICAgaWYgKCF0aGlzLmNhbkNvbGxhcHNlKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdXaWRnZXRDb21wb25lbnQ6IGNvbGxhcHNlKCkgY2FsbGVkIHdoZW4gY2FuQ29sbGFwc2UgaXMgZmFsc2UuJylcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY29sbGFwc2VkID0gIXRoaXMuY29sbGFwc2VkXG4gIH1cblxuICBnZXQgY29sbGFwc2VTdGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb2xsYXBzZWQgPyBDT0xMQVBTRURfU1RBVEUgOiBFWFBBTkRFRF9TVEFURSB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZWFtLXdpZGdldCBib3JkZXIgcm91bmRlZCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgPGRpdiBjbGFzcz1cIndpZGdldC1oZWFkZXJcIiBzZWFtV2lkZ2V0RHJhZ0hhbmRsZSAqbmdJZj1cImhhc0hlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWNvbnRlbnQgcC0yIHRleHQtbm93cmFwXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1yLTEgd2lkZ2V0LWhlYWRlci1pY29uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uVHBsOyBlbHNlIG5vSWNvblRwbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaWNvblRwbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGljb24sIGljb246IGljb24sIHRpdGxlOiB0aXRsZVRleHQgfVwiPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvblRwbD5cbiAgICAgICAgICA8ZmEtaWNvbiAqbmdJZj1cIl9pY29uT2JqXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1pY29uLS1mYSB7eyBpY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgW2ljb25dPVwiX2ljb25PYmpcIj48L2ZhLWljb24+XG4gICAgICAgICAgPGltZyAqbmdJZj1cIl9pY29uVXJsXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1pY29uLS1pbWcge3sgaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgIFtzcmNdPVwiX2ljb25VcmxcIiBbYWx0XT1cInRpdGxlVGV4dFwiPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLXRpdGxlIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRpdGxlVHBsOyBlbHNlIG5vVGl0bGVUcGxcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRpdGxlVHBsLnRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogdGl0bGVUZXh0LCBpY29uOiBpY29uLCB0aXRsZTogdGl0bGVUZXh0IH1cIj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub1RpdGxlVHBsPnt7IHRpdGxlVGV4dCB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIndpZGdldC1oZWFkZXItYnRucy1jb250YWluZXJcIiAqbmdJZj1cImhhc0NvbmZpZyB8fCBjYW5Db2xsYXBzZVwiPlxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaGFzQ29uZmlnXCI+XG4gICAgICAgIDxidXR0b24gc2VhbUljb25CdG4gW2ljb25dPVwiY29uZmlnSWNvblwiXG4gICAgICAgICAgY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWJ0bi1jb25maWdcIlxuICAgICAgICAgIFtpY29uVHlwZV09XCJudWxsXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+V2lkZ2V0IGNvbmZpZ3VyYXRpb24gbWVudTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gc2VhbUJ1dHRvbiBjbGFzcz1cIndpZGdldC1oZWFkZXItYnRuLWNvbmZpZyBwLTBcIj5cbiAgICAgICAgICA8c2VhbS1pY29uIGNsYXNzPVwiZC1ibG9ja1wiIFtpY29uXT1cImNvbmZpZ0ljb25cIiBpY29uQ2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPjwvc2VhbS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPldpZGdldCBjb25maWd1cmF0aW9uIG1lbnU8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiY2FuQ29sbGFwc2VcIiBjbGFzcz1cInB4LTBcIj5cblxuICAgICAgICA8YnV0dG9uIHNlYW1CdXR0b24gY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWJ0bi1jb2xsYXBzZSBwLTAgbXItMSBoLTEwMFwiIChjbGljayk9XCJjb2xsYXBzZSgpXCIgW2NsYXNzLndpZGdldC1oZWFkZXItYnRuLWNvbGxhcHNlLS1hY3RpdmVdPVwiY29sbGFwc2VkXCI+XG4gICAgICAgICAgPHNlYW0taWNvbiBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgW2ljb25dPVwiY29sbGFwc2VJY29uXCJcbiAgICAgICAgICAgIGljb25DbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgPC9zZWFtLWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+V2lkZ2V0IGNvbGxhcHNlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPCEtLSBpY29uVHlwZT1cImJvcmRlcmxlc3Mtc3R5bGVkLXNxdWFyZVwiIC0tPlxuICAgICAgICA8IS0tIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4OyBtYXJnaW4tcmlnaHQ6IC01cHg7XCIgLS0+XG5cbiAgICAgICAgPCEtLSA8YnV0dG9uIHNlYW1JY29uQnRuIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1idG4tY29sbGFwc2VcIiAoY2xpY2spPVwiY29sbGFwc2UoKVwiIFtjbGFzcy53aWRnZXQtaGVhZGVyLWJ0bi1jb2xsYXBzZS0tYWN0aXZlXT1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgYnRuVGhlbWU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIFtpY29uXT1cImNvbGxhcHNlSWNvblwiXG4gICAgICAgICAgaWNvblR5cGU9XCJib3JkZXJsZXNzLXN0eWxlZC1zcXVhcmVcIlxuICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgYnRuU2l6ZT1cInNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHNlYW0taWNvbiBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgW2ljb25dPVwiY29sbGFwc2VJY29uXCJcbiAgICAgICAgICAgIGljb25DbGFzcz1cInRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4OyBtYXJnaW4tcmlnaHQ6IC01cHg7XCJcbiAgICAgICAgICAgIGljb25UeXBlPVwiYm9yZGVybGVzcy1zdHlsZWQtc3F1YXJlXCI+PC9zZWFtLWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+V2lkZ2V0IGNvbGxhcHNlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW5cIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImxvYWRpbmcgPyAxNTAgOiB1bmRlZmluZWRcIiBbQGNvbGxhcHNlQW5pbV09XCJjb2xsYXBzZVN0YXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2xsYXBzZWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIiAqbmdJZj1cIiFsb2FkaW5nIGVsc2UgbG9hZGluZ1RwbFwiIEBrZWVwQ29udGVudEFuaW0+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2VhbS13aWRnZXQtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nVHBsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIiBAbG9hZGluZ0FuaW0gc3R5bGU9XCJ0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MFwiPlxuICAgICAgICAgIDxzZWFtLWxvYWRpbmcgW3RoZW1lXT1cIidwcmltYXJ5J1wiPjwvc2VhbS1sb2FkaW5nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi93aWRnZXQvd2lkZ2V0L3dpZGdldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vd2lkZ2V0L3dpZGdldC93aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQWEsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3pILE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUc5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUV0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFDaEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUE7QUFDbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUE7QUFDcEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUE7Ozs7Ozs7OztBQUVyRCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUE7QUFDakMsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFBO0FBRW5DLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxj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VCx3QkFBd0I7S0FDekIsK0RBa0ZhLHNCQUFzQix5RkFDdEIsdUJBQXVCLDhEQ3RKdkMsNnZIQXFGQSx3ckdEaEJjO1FBQ1YsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixvQkFBb0I7S0FDckI7QUFtQndCO0lBQWYsWUFBWSxFQUFFO2tEQUFrQjtBQU1qQjtJQUFmLFlBQVksRUFBRTtrREFBaUI7QUF1Q2hCO0lBQWYsWUFBWSxFQUFFO2dEQUFnQjtBQUlmO0lBQWYsWUFBWSxFQUFFO2tEQUFrQjtBQU1qQjtJQUFmLFlBQVksRUFBRTtvREFBb0I7MkZBeEVqQyxlQUFlO2tCQWQzQixTQUFTOytCQUNFLGFBQWEsYUFHWjt3QkFDVCx3QkFBd0I7cUJBQ3pCLGlCQUNjLGlCQUFpQixDQUFDLElBQUksY0FDekI7d0JBQ1YsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLG9CQUFvQjtxQkFDckI7OzBCQWlGRSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjs0Q0E5RGhCLFNBQVM7c0JBQWpDLEtBQUs7Z0JBTW1CLFNBQVM7c0JBQWpDLEtBQUs7Z0JBVUcsU0FBUztzQkFBakIsS0FBSztnQkFXRixJQUFJO3NCQURQLEtBQUs7Z0JBZ0JHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR21CLE9BQU87c0JBQS9CLEtBQUs7Z0JBSW1CLFNBQVM7c0JBQWpDLEtBQUs7Z0JBTW1CLFdBQVc7c0JBQW5DLEtBQUs7Z0JBRWtELE9BQU87c0JBQTlELFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNHLFFBQVE7c0JBQWhFLFlBQVk7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBJbmplY3QsIElucHV0LCBpc0Rldk1vZGUsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcydcblxuaW1wb3J0IHsgSWNvblByb3AgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnXG5pbXBvcnQgeyBmYUFuZ2xlRG93biwgZmFDb2cgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vY29yZSdcbmltcG9ydCB7IFNlYW1JY29uIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2ljb24nXG5pbXBvcnQgeyBoYXNQcm9wZXJ0eSB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi91dGlscydcblxuaW1wb3J0IHsgV2lkZ2V0SWNvblRwbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvd2lkZ2V0LWljb24tdHBsLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFdpZGdldFRpdGxlVHBsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy93aWRnZXQtdGl0bGUtdHBsLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFdpZGdldFByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJy4uL3ByZWZlcmVuY2VzL3dpZGdldC1wcmVmZXJlbmNlcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgVEhFU0VBTV9XSURHRVRfREFUQSB9IGZyb20gJy4uL3dpZGdldC10b2tlbidcblxuY29uc3QgRVhQQU5ERURfU1RBVEUgPSAnZXhwYW5kZWQnXG5jb25zdCBDT0xMQVBTRURfU1RBVEUgPSAnY29sbGFwc2VkJ1xuXG5jb25zdCBFWFBBTkRfVFJBTlNJVElPTiA9IGAke0VYUEFOREVEX1NUQVRFfSA8PT4gJHtDT0xMQVBTRURfU1RBVEV9YFxuXG5jb25zdCBsb2FkaW5nQW5pbWF0aW9uID0gdHJpZ2dlcignbG9hZGluZ0FuaW0nLCBbXG4gIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICBzdHlsZSh7IG9wYWNpdHk6IDAgfSksXG4gICAgYW5pbWF0ZSgnMjUwbXMgZWFzZS1pbi1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDEgfSkpLFxuICBdKSxcbiAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgIHN0eWxlKHsgb3BhY2l0eTogMSB9KSxcbiAgICBhbmltYXRlKCcyNTBtcyBlYXNlLWluLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSksXG4gIF0pLFxuXSlcblxuLyoqXG4gKiBJIHdhcyBoYXZpbmcgYW4gaXNzdWUgZ2V0dGluZyB0aGUgY29udGVudCB0byBub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBET00sXG4gKiBiZWZvcmUgdGhlIGFuaW1hdGlvbiB3YXMgY29tcGxldGUuIFRoaXMgYW5pbWF0aW9uIGlzIGEgaGFjayB0byBrZWVwIHRoZVxuICogY29udGVudCBpbiB0aGUgRE9NIHVudGlsIHRoZSBhbmltYXRpb24gaXMgY29tcGxldGUuXG4gKi9cbmNvbnN0IGtlZXBDb250ZW50QW5pbWF0aW9uID0gdHJpZ2dlcigna2VlcENvbnRlbnRBbmltJywgW1xuICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgc3R5bGUoeyBvcGFjaXR5OiAxIH0pLFxuICAgIGFuaW1hdGUoJzBtcycsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSksXG4gIF0pLFxuXSlcblxuY29uc3QgY29sbGFwc2VBbmltYXRpb24gPSB0cmlnZ2VyKCdjb2xsYXBzZUFuaW0nLCBbXG4gIHN0YXRlKEVYUEFOREVEX1NUQVRFLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcbiAgc3RhdGUoQ09MTEFQU0VEX1NUQVRFLCBzdHlsZSh7IGhlaWdodDogJzAnIH0pKSxcbiAgdHJhbnNpdGlvbihFWFBBTkRfVFJBTlNJVElPTiwgYW5pbWF0ZSgnMC4zcyBlYXNlLWluLW91dCcpKSxcbl0pXG5cbi8qKlxuICogV2lkZ2V0XG4gKlxuICogV2lkZ2V0cyBhcmUgZGVzaWduZWQgd2l0aCB0aGUgaW50ZW50aW9uIG9mIGJlaW5nIG9uIGEgZGFzaGJvYXJkLiBPdGhlciB1c2VzXG4gKiBtYXkgYmUgc3VwcG9ydGVkIGFzIHRoZSBuZWVkIGFyaXNlcy5cbiAqXG4gKiBUaGUgb25seSBIVE1ML0NTUyB1c2Ugc2hvdWxkIGJlIGEgd2lkZ2V0IGNvbnRlbnQgY29tcG9uZW50LCB1bmxlc3MgdGhlcmUgaXMgYVxuICogY2FzZSByZXF1aXJpbmcgbW9yZSBhZHZhbmNlZCBkZXNpZ24uIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gbWFuYWdlIGEgY29tbW9uXG4gKiBzdHlsZSBmb3Igb3VyIHdpZGdldHMuIElmIGEgY2FzZSByZXF1aXJpbmcgbm9uIHdpZGdldCBjb250ZW50IGNvbXBvbmVudHMgaXNcbiAqIHVzZWQgdGhlbiB0aGUgc2l0dWF0aW9uIHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBiZWNvbWluZyBhIHdpZGdldCBjb21wb25lbnQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlYW0td2lkZ2V0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dpZGdldC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBXaWRnZXRQcmVmZXJlbmNlc1NlcnZpY2UsXG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICBsb2FkaW5nQW5pbWF0aW9uLFxuICAgIGNvbGxhcHNlQW5pbWF0aW9uLFxuICAgIGtlZXBDb250ZW50QW5pbWF0aW9uLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oYXNIZWFkZXI6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbG9hZGluZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oYXNDb25maWc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY2FuQ29sbGFwc2U6IEJvb2xlYW5JbnB1dFxuXG4gIHJlYWRvbmx5IGNvbmZpZ0ljb24gPSBmYUNvZ1xuICByZWFkb25seSBjb2xsYXBzZUljb24gPSBmYUFuZ2xlRG93blxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgcHJpdmF0ZSBfcHJlZmVyZW5jZXNLZXk/OiBzdHJpbmdcblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgY29sbGFwc2VkIHN0YXRlIG9mIGEgd2lkZ2V0LlxuICAgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGNvbGxhcHNlZCA9IGZhbHNlXG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIHRvcCBoZWFkZXIgYmFyIG9mIGEgd2lkZ2V0LiBUaGlzIHNob3VsZCBiZSB0cnVlIGZvciBtb3N0XG4gICAqIHdpZGdldHMuXG4gICAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgaGFzSGVhZGVyID0gdHJ1ZVxuXG4gIC8qKlxuICAgKiBUaXRsZSBkaXNwbGF5ZWQgaW4gdGhlIHRvcCBoZWFkZXIuXG4gICAqXG4gICAqIElmIGEgbW9yZSBhZHZhbmNlZCB0aXRsZSBpcyBuZWVkZWQgeW91IGNhbiB1c2UgYHNlYW1XaWRnZXRUaXRsZVRwbGBcbiAgICogdGVtcGxhdGUgZGlyZWN0aXZlLCBidXQgdGV4dCBpcyByZWNvbW1lbmRlZCwgYmVjYXVzZSBhbGxvd2luZyBjdXN0b20gc3R5bGVzXG4gICAqIGNhbiBsZWFkIHRvIGluY29uc2l0ZW5jeSBxdWlja2x5IGFzIGRpZmZlcmVudCBkZXZlbG9wZXJzIGtlZXAgbWFraW5nXG4gICAqIHR3ZWFrcy5cbiAgICovXG4gIEBJbnB1dCgpIHRpdGxlVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIC8qKlxuICAgKiBJY29uIGRpc3BsYXllZCBpbiB0aGUgdG9wIGhlYWRlci5cbiAgICpcbiAgICogSWYgYSBtb3JlIGFkdmFuY2VkIGljb24gaXMgbmVlZGVkIHlvdSBjYW4gdXNlIGBzZWFtV2lkZ2V0SWNvblRwbGAgdGVtcGxhdGVcbiAgICogZGlyZWN0aXZlLCBidXQgYSBgU2VhbUljb25gIGlucHV0IGlzIHJlY29tbWVuZGVkLCBiZWNhdXNlIGFsbG93aW5nIGN1c3RvbVxuICAgKiBpY29ucyB0aGF0IGRvIG5vdCBmb2xsb3cgdGhlIHRlc3RlZCB0eXBlcyBjYW4gbGVhZCB0byBpbmNvbnNpdGVuY3kgcXVpY2tseVxuICAgKiBhcyBkaWZmZXJlbnQgZGV2ZWxvcGVycyBrZWVwIG1ha2luZyB0d2Vha3MuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgaWNvbigpOiBTZWFtSWNvbiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9pY29uVXJsIHx8IHRoaXMuX2ljb25PYmogfVxuICBzZXQgaWNvbih2YWx1ZTogU2VhbUljb24gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5faWNvblVybCA9IHZhbHVlXG4gICAgICB0aGlzLl9pY29uT2JqID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2ljb25VcmwgPSB1bmRlZmluZWRcbiAgICAgIHRoaXMuX2ljb25PYmogPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIF9pY29uVXJsOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgX2ljb25PYmo6IEljb25Qcm9wIHwgdW5kZWZpbmVkXG5cbiAgLyoqIEFkZCBhIGNzcyBjbGFzcyB0byB0aGUgaGVhZGVyIGljb24uICovXG4gIEBJbnB1dCgpIGljb25DbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIC8qKiBTaG93cyB3aWRnZXQgbG9hZGluZyBpbnN0ZWFkIG9mIGNvbnRlbnQuICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBsb2FkaW5nID0gZmFsc2VcblxuICAvKiogQGlnbm9yZSAqL1xuICAvLyBOT1RFOiBDb25maWcgaXMgc3RpbGwgYmVpbmcgd29ya2VkIG9uLlxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgaGFzQ29uZmlnID0gZmFsc2VcblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgYWJpbGl0eSB0byBjb2xsYXBzZSBhIHdpZGdldC4gQW4gaWNvbiB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGVcbiAgICogaGVhZGVyIHRvIHRvZ2dsZSB0aGUgY29sbGFwc2VkIHN0YXRlLlxuICAgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGNhbkNvbGxhcHNlID0gZmFsc2VcblxuICBAQ29udGVudENoaWxkKFdpZGdldEljb25UcGxEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGljb25UcGw/OiBXaWRnZXRJY29uVHBsRGlyZWN0aXZlXG4gIEBDb250ZW50Q2hpbGQoV2lkZ2V0VGl0bGVUcGxEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHRpdGxlVHBsPzogV2lkZ2V0VGl0bGVUcGxEaXJlY3RpdmVcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF93aWRnZXRQcmVmZXJlbmNlczogV2lkZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVEhFU0VBTV9XSURHRVRfREFUQSkgcHJpdmF0ZSByZWFkb25seSBfZGF0YTogYW55XG4gICkge1xuICAgIGlmICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEud2lkZ2V0SWQpIHtcbiAgICAgIHRoaXMuX3ByZWZlcmVuY2VzS2V5ID0gYHdpZGdldDoke3RoaXMuX2RhdGEud2lkZ2V0SWR9YFxuICAgICAgdGhpcy5fd2lkZ2V0UHJlZmVyZW5jZXMucHJlZmVyZW5jZXModGhpcy5fcHJlZmVyZW5jZXNLZXkpLnBpcGUoXG4gICAgICAgIHRhcChwcmVmcyA9PiB7XG4gICAgICAgICAgaWYgKGhhc1Byb3BlcnR5KHByZWZzLCAnY29sbGFwc2VkJykpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2VkID0gcHJlZnMuY29sbGFwc2VkXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgICApLnN1YnNjcmliZSgpXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5uZXh0KClcbiAgICB0aGlzLl9uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIGEgd2lkZ2V0J3MgY29sbGFwc2VkIHN0YXRlLlxuICAgKi9cbiAgcHVibGljIGNvbGxhcHNlKCkge1xuICAgIGlmICghdGhpcy5jYW5Db2xsYXBzZSkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignV2lkZ2V0Q29tcG9uZW50OiBjb2xsYXBzZSgpIGNhbGxlZCB3aGVuIGNhbkNvbGxhcHNlIGlzIGZhbHNlLicpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZFxuXG4gICAgLy8gT25seSB1cGRhdGUgdGhlIHByZWZlcmVuY2UsIGlmIGNvbGxhcHNlIG1ldGhvZCBpcyBjYWxsZWQsIGJlY2F1c2UgaXQgaXNcbiAgICAvLyBhc3N1bWVkIHRoYXQgdGhlIHVzZXIgaXMgY29sbGFwc2luZyB0aGUgd2lkZ2V0LiBJZiB0aGUgY29sbGFwc2VkIHN0YXRlIGlzXG4gICAgLy8gY2hhbmdlZCBieSBvdGhlciBtZWFucywgc3VjaCB1c2luZyB0aGUgd2lkZ2V0J3MgYGNvbGxhcHNlZGAgaW5wdXQsIHRoZW5cbiAgICAvLyB0aGUgcHJlZmVyZW5jZSBzaG91bGQgbm90IGJlIHVwZGF0ZWQsIGJlY2F1c2UgdGhhdCBpcyBhc3N1bWVkIHRvIGJlIGFuXG4gICAgLy8gYXBwIGNvbnRyb2xsZWQgY2hhbmdlIHRoYXQgc2hvdWxkIG5vdCBiZSBwZXJzaXN0ZWQuXG4gICAgaWYgKHRoaXMuX3ByZWZlcmVuY2VzS2V5KSB7XG4gICAgICB0aGlzLl93aWRnZXRQcmVmZXJlbmNlcy5wYXRjaFByZWZlcmVuY2VzKHRoaXMuX3ByZWZlcmVuY2VzS2V5LCB7IGNvbGxhcHNlZDogdGhpcy5jb2xsYXBzZWQgfSlcbiAgICB9XG4gIH1cblxuICBnZXQgY29sbGFwc2VTdGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb2xsYXBzZWQgPyBDT0xMQVBTRURfU1RBVEUgOiBFWFBBTkRFRF9TVEFURSB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZWFtLXdpZGdldCBib3JkZXIgcm91bmRlZCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgPGRpdiBjbGFzcz1cIndpZGdldC1oZWFkZXJcIiBzZWFtV2lkZ2V0RHJhZ0hhbmRsZSAqbmdJZj1cImhhc0hlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWNvbnRlbnQgcC0yIHRleHQtbm93cmFwXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1yLTEgd2lkZ2V0LWhlYWRlci1pY29uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uVHBsOyBlbHNlIG5vSWNvblRwbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaWNvblRwbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGljb24sIGljb246IGljb24sIHRpdGxlOiB0aXRsZVRleHQgfVwiPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvblRwbD5cbiAgICAgICAgICA8ZmEtaWNvbiAqbmdJZj1cIl9pY29uT2JqXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1pY29uLS1mYSB7eyBpY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgW2ljb25dPVwiX2ljb25PYmpcIj48L2ZhLWljb24+XG4gICAgICAgICAgPGltZyAqbmdJZj1cIl9pY29uVXJsXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1pY29uLS1pbWcge3sgaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgIFtzcmNdPVwiX2ljb25VcmxcIiBbYWx0XT1cInRpdGxlVGV4dFwiPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLXRpdGxlIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRpdGxlVHBsOyBlbHNlIG5vVGl0bGVUcGxcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRpdGxlVHBsLnRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogdGl0bGVUZXh0LCBpY29uOiBpY29uLCB0aXRsZTogdGl0bGVUZXh0IH1cIj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub1RpdGxlVHBsPnt7IHRpdGxlVGV4dCB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIndpZGdldC1oZWFkZXItYnRucy1jb250YWluZXJcIiAqbmdJZj1cImhhc0NvbmZpZyB8fCBjYW5Db2xsYXBzZVwiPlxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaGFzQ29uZmlnXCI+XG4gICAgICAgIDxidXR0b24gc2VhbUljb25CdG4gW2ljb25dPVwiY29uZmlnSWNvblwiXG4gICAgICAgICAgY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWJ0bi1jb25maWdcIlxuICAgICAgICAgIFtpY29uVHlwZV09XCJudWxsXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+V2lkZ2V0IGNvbmZpZ3VyYXRpb24gbWVudTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gc2VhbUJ1dHRvbiBjbGFzcz1cIndpZGdldC1oZWFkZXItYnRuLWNvbmZpZyBwLTBcIj5cbiAgICAgICAgICA8c2VhbS1pY29uIGNsYXNzPVwiZC1ibG9ja1wiIFtpY29uXT1cImNvbmZpZ0ljb25cIiBpY29uQ2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPjwvc2VhbS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPldpZGdldCBjb25maWd1cmF0aW9uIG1lbnU8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiY2FuQ29sbGFwc2VcIiBjbGFzcz1cInB4LTBcIj5cblxuICAgICAgICA8YnV0dG9uIHNlYW1CdXR0b24gY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWJ0bi1jb2xsYXBzZSBwLTAgbXItMSBoLTEwMFwiIChjbGljayk9XCJjb2xsYXBzZSgpXCIgW2NsYXNzLndpZGdldC1oZWFkZXItYnRuLWNvbGxhcHNlLS1hY3RpdmVdPVwiY29sbGFwc2VkXCI+XG4gICAgICAgICAgPHNlYW0taWNvbiBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgW2ljb25dPVwiY29sbGFwc2VJY29uXCJcbiAgICAgICAgICAgIGljb25DbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgPC9zZWFtLWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+V2lkZ2V0IGNvbGxhcHNlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPCEtLSBpY29uVHlwZT1cImJvcmRlcmxlc3Mtc3R5bGVkLXNxdWFyZVwiIC0tPlxuICAgICAgICA8IS0tIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4OyBtYXJnaW4tcmlnaHQ6IC01cHg7XCIgLS0+XG5cbiAgICAgICAgPCEtLSA8YnV0dG9uIHNlYW1JY29uQnRuIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1idG4tY29sbGFwc2VcIiAoY2xpY2spPVwiY29sbGFwc2UoKVwiIFtjbGFzcy53aWRnZXQtaGVhZGVyLWJ0bi1jb2xsYXBzZS0tYWN0aXZlXT1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgYnRuVGhlbWU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIFtpY29uXT1cImNvbGxhcHNlSWNvblwiXG4gICAgICAgICAgaWNvblR5cGU9XCJib3JkZXJsZXNzLXN0eWxlZC1zcXVhcmVcIlxuICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgYnRuU2l6ZT1cInNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHNlYW0taWNvbiBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgW2ljb25dPVwiY29sbGFwc2VJY29uXCJcbiAgICAgICAgICAgIGljb25DbGFzcz1cInRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4OyBtYXJnaW4tcmlnaHQ6IC01cHg7XCJcbiAgICAgICAgICAgIGljb25UeXBlPVwiYm9yZGVybGVzcy1zdHlsZWQtc3F1YXJlXCI+PC9zZWFtLWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+V2lkZ2V0IGNvbGxhcHNlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW5cIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImxvYWRpbmcgPyAxNTAgOiB1bmRlZmluZWRcIiBbQGNvbGxhcHNlQW5pbV09XCJjb2xsYXBzZVN0YXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2xsYXBzZWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIiAqbmdJZj1cIiFsb2FkaW5nIGVsc2UgbG9hZGluZ1RwbFwiIEBrZWVwQ29udGVudEFuaW0+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2VhbS13aWRnZXQtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nVHBsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIiBAbG9hZGluZ0FuaW0gc3R5bGU9XCJ0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MFwiPlxuICAgICAgICAgIDxzZWFtLWxvYWRpbmcgW3RoZW1lXT1cIidwcmltYXJ5J1wiPjwvc2VhbS1sb2FkaW5nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,3 +1,4 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const THESEAM_WIDGETS = new InjectionToken('TheSeamWidgets');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL3dpZGdldC93aWRnZXQtdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUk5QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQXdCLGdCQUFnQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbmltcG9ydCB7IElXaWRnZXRSZWdpc3RyeVJlY29yZCB9IGZyb20gJy4vd2lkZ2V0LXJlZ2lzdHJ5Lm1vZGVscydcblxuZXhwb3J0IGNvbnN0IFRIRVNFQU1fV0lER0VUUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJV2lkZ2V0UmVnaXN0cnlSZWNvcmQ+KCdUaGVTZWFtV2lkZ2V0cycpXG4iXX0=
3
+ export const THESEAM_WIDGET_DATA = new InjectionToken('TheSeamWidgetData');
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL3dpZGdldC93aWRnZXQtdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUk5QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQXdCLGdCQUFnQixDQUFDLENBQUE7QUFFMUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQU0sbUJBQW1CLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuaW1wb3J0IHsgSVdpZGdldFJlZ2lzdHJ5UmVjb3JkIH0gZnJvbSAnLi93aWRnZXQtcmVnaXN0cnkubW9kZWxzJ1xuXG5leHBvcnQgY29uc3QgVEhFU0VBTV9XSURHRVRTID0gbmV3IEluamVjdGlvblRva2VuPElXaWRnZXRSZWdpc3RyeVJlY29yZD4oJ1RoZVNlYW1XaWRnZXRzJylcblxuZXhwb3J0IGNvbnN0IFRIRVNFQU1fV0lER0VUX0RBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignVGhlU2VhbVdpZGdldERhdGEnKVxuIl19