@bizdoc/core 1.16.9 → 1.16.10

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/assets/system/{Microsoft_Azure.svg → Azure.svg} +0 -0
  2. package/assets/system/QAD.svg +12 -358
  3. package/assets/system/priority.svg +19 -0
  4. package/esm2020/lib/admin/configuration-designer/cube-axes-filter.component.mjs +2 -2
  5. package/esm2020/lib/admin/configuration-designer/declarations.mjs +108 -0
  6. package/esm2020/lib/admin/configuration-designer/designer-element.component.mjs +120 -223
  7. package/esm2020/lib/admin/configuration-designer/designer.base.mjs +23 -82
  8. package/esm2020/lib/admin/configuration-designer/designer.component.mjs +5 -3
  9. package/esm2020/lib/admin/configuration-designer/elements/action.component.mjs +3 -3
  10. package/esm2020/lib/admin/configuration-designer/elements/analysis-view.component.mjs +13 -12
  11. package/esm2020/lib/admin/configuration-designer/elements/analysis-widget.component.mjs +13 -12
  12. package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +89 -75
  13. package/esm2020/lib/admin/configuration-designer/elements/documents-widget.component.mjs +4 -3
  14. package/esm2020/lib/admin/configuration-designer/elements/folder.component.mjs +3 -3
  15. package/esm2020/lib/admin/configuration-designer/elements/form.component.mjs +6 -5
  16. package/esm2020/lib/admin/configuration-designer/elements/guide.component.mjs +3 -3
  17. package/esm2020/lib/admin/configuration-designer/elements/report.component.mjs +3 -3
  18. package/esm2020/lib/admin/configuration-designer/elements/return-to-role-action.component.mjs +1 -1
  19. package/esm2020/lib/admin/configuration-designer/elements/role.component.mjs +6 -12
  20. package/esm2020/lib/admin/configuration-designer/elements/rule.component.mjs +3 -3
  21. package/esm2020/lib/admin/configuration-designer/elements/state.component.mjs +3 -3
  22. package/esm2020/lib/admin/configuration-designer/elements/tasks-report.component.mjs +1 -1
  23. package/esm2020/lib/admin/configuration-designer/elements/type.component.mjs +3 -3
  24. package/esm2020/lib/admin/configuration-designer/elements/utility.component.mjs +5 -11
  25. package/esm2020/lib/admin/configuration-designer/elements/view.component.mjs +3 -3
  26. package/esm2020/lib/admin/configuration-designer/elements/widget.component.mjs +3 -3
  27. package/esm2020/lib/core/translations.mjs +10 -4
  28. package/esm2020/lib/system.module.mjs +6 -6
  29. package/esm2020/public-api.mjs +2 -2
  30. package/fesm2015/bizdoc-core.mjs +468 -521
  31. package/fesm2015/bizdoc-core.mjs.map +1 -1
  32. package/fesm2020/bizdoc-core.mjs +463 -508
  33. package/fesm2020/bizdoc-core.mjs.map +1 -1
  34. package/lib/admin/configuration-designer/cube-axes-filter.component.d.ts +1 -1
  35. package/lib/admin/configuration-designer/declarations.d.ts +203 -0
  36. package/lib/admin/configuration-designer/designer-element.component.d.ts +45 -65
  37. package/lib/admin/configuration-designer/designer.base.d.ts +5 -197
  38. package/lib/admin/configuration-designer/designer.component.d.ts +1 -1
  39. package/lib/admin/configuration-designer/elements/analysis-view.component.d.ts +1 -1
  40. package/lib/admin/configuration-designer/elements/analysis-widget.component.d.ts +1 -1
  41. package/lib/admin/configuration-designer/elements/cube.component.d.ts +30 -26
  42. package/lib/admin/configuration-designer/elements/documents-widget.component.d.ts +2 -1
  43. package/lib/admin/configuration-designer/elements/folder.component.d.ts +2 -1
  44. package/lib/admin/configuration-designer/elements/form.component.d.ts +2 -1
  45. package/lib/admin/configuration-designer/elements/report.component.d.ts +2 -1
  46. package/lib/admin/configuration-designer/elements/return-to-role-action.component.d.ts +2 -1
  47. package/lib/admin/configuration-designer/elements/role.component.d.ts +2 -1
  48. package/lib/admin/configuration-designer/elements/rule.component.d.ts +1 -1
  49. package/lib/admin/configuration-designer/elements/tasks-report.component.d.ts +2 -1
  50. package/lib/admin/configuration-designer/elements/view.component.d.ts +1 -1
  51. package/lib/admin/configuration-designer/elements/widget.component.d.ts +3 -2
  52. package/lib/core/translations.d.ts +9 -3
  53. package/lib/system.module.d.ts +16 -16
  54. package/package.json +1 -1
  55. package/public-api.d.ts +2 -2
@@ -1,136 +1,117 @@
1
- import { Component, ContentChild, ContentChildren, EventEmitter, HostListener, Inject, Input, Optional, Output, ViewChild, ViewContainerRef } from "@angular/core";
1
+ import { Component, ContentChild, Directive, EventEmitter, Inject, Input, Optional, Output } from "@angular/core";
2
2
  import { FormGroup, Validators } from "@angular/forms";
3
3
  import { Subject, takeUntil } from "rxjs";
4
+ import { DesignerRef, programName, FAMILY_SVG } from "./declarations";
4
5
  import { LayoutComponent } from "../../core/layout/layout.component";
5
- import { DesignerRef, programName, FAMILY_SVG } from "./designer.base";
6
+ import { ComponentPortal } from "@angular/cdk/portal";
6
7
  import * as i0 from "@angular/core";
7
- import * as i1 from "../../core/component-factory-resolver";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "../../core/pipes/sanitize-html.pipe";
10
- import * as i4 from "./designer.base";
11
- import * as i5 from "@angular/material/button";
12
- import * as i6 from "@angular/material/icon";
13
- import * as i7 from "@angular/forms";
14
- import * as i8 from "../system.service";
15
- import * as i9 from "@angular/material/list";
16
- import * as i10 from "@angular/material/toolbar";
17
- import * as i11 from "@angular/material/form-field";
18
- import * as i12 from "@angular/material/input";
8
+ import * as i1 from "../../core/slots/pane-ref";
9
+ import * as i2 from "@angular/forms";
10
+ import * as i3 from "../../core/component-factory-resolver";
11
+ import * as i4 from "../system.service";
12
+ import * as i5 from "@angular/common";
13
+ import * as i6 from "@angular/cdk/portal";
14
+ import * as i7 from "@angular/material/list";
15
+ import * as i8 from "@angular/material/toolbar";
16
+ import * as i9 from "@angular/material/form-field";
17
+ import * as i10 from "@angular/material/button";
18
+ import * as i11 from "@angular/material/input";
19
+ import * as i12 from "@angular/material/icon";
19
20
  import * as i13 from "../core/ace.input";
20
- import * as i14 from "../../core/pipes/translate.pipe";
21
- import * as i15 from "../../core/slots/pane-ref";
22
- export class DesignerElementInfoComponent {
23
- constructor(_cfr, _ref) {
24
- this._cfr = _cfr;
25
- this._ref = _ref;
26
- this.svg = FAMILY_SVG;
27
- this.model = _ref.model;
28
- }
29
- ngOnInit() {
30
- if (this.model.template) {
31
- const factory = this._cfr.resolve(this.model.template);
32
- const cRef = this._econtainer.createComponent(factory, 0);
33
- cRef.instance.model = this.model;
34
- cRef.instance.mode = 'widget';
35
- }
36
- else if (this.model.arguments?.length) {
37
- }
21
+ import * as i14 from "../../core/pipes/sanitize-html.pipe";
22
+ import * as i15 from "../../core/pipes/translate.pipe";
23
+ import * as i16 from "./declarations";
24
+ export class EditContentDirective {
25
+ constructor(templateRef) {
26
+ this.templateRef = templateRef;
38
27
  }
39
28
  }
40
- DesignerElementInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerElementInfoComponent, deps: [{ token: i1.BizDocComponentFactoryResolver }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Component });
41
- DesignerElementInfoComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DesignerElementInfoComponent, selector: "bizdoc-designer-element-widget", viewQueries: [{ propertyName: "_econtainer", first: true, predicate: ["econtainer"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_arguments", first: true, predicate: ["arguments"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `
42
- <div [innerHTML]="(svg[model.family]|sanitizeHtml)||model.family" *ngIf="model.family"></div>
43
- <ng-content></ng-content>
44
- <ng-container #econtainer></ng-container>
45
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.SanitizeHtmlPipe, name: "sanitizeHtml" }] });
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerElementInfoComponent, decorators: [{
47
- type: Component,
29
+ EditContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: EditContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
30
+ EditContentDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.6", type: EditContentDirective, selector: "[bizdocEditContent]", ngImport: i0 });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: EditContentDirective, decorators: [{
32
+ type: Directive,
48
33
  args: [{
49
- selector: 'bizdoc-designer-element-widget', template: `
50
- <div [innerHTML]="(svg[model.family]|sanitizeHtml)||model.family" *ngIf="model.family"></div>
51
- <ng-content></ng-content>
52
- <ng-container #econtainer></ng-container>
53
- `
34
+ selector: '[bizdocEditContent]'
54
35
  }]
55
- }], ctorParameters: function () { return [{ type: i1.BizDocComponentFactoryResolver }, { type: i4.DesignerRef, decorators: [{
56
- type: Inject,
57
- args: [DesignerRef]
58
- }] }]; }, propDecorators: { _econtainer: [{
59
- type: ViewChild,
60
- args: ['econtainer', { static: true, read: ViewContainerRef }]
61
- }], _arguments: [{
62
- type: ViewChild,
63
- args: ['arguments', { static: true, read: ViewContainerRef }]
64
- }] } });
65
- export class DesignerElementAddComponent {
66
- constructor(_ref, _injector, _cfr) {
67
- this._ref = _ref;
68
- this._injector = _injector;
69
- this._cfr = _cfr;
70
- this.form = new FormGroup({});
71
- this.complete = new EventEmitter();
36
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
37
+ export class WidgetContentDirective {
38
+ constructor(templateRef) {
39
+ this.templateRef = templateRef;
72
40
  }
73
- ngOnInit() {
74
- if (this._ref.model.template) {
75
- const factory = this._cfr.resolve(this._ref.model.template);
76
- const cRef = this._econtainer.createComponent(factory, 0, this._injector);
77
- const instance = cRef.instance;
78
- instance.model = this._ref.model;
79
- instance.mode = 'add';
80
- this.form.addControl('options', instance.form, { emitEvent: false });
81
- }
41
+ }
42
+ WidgetContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
43
+ WidgetContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.6", type: WidgetContentDirective, selector: "[bizdocContent]", ngImport: i0 });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetContentDirective, decorators: [{
45
+ type: Directive,
46
+ args: [{
47
+ selector: '[bizdocContent]'
48
+ }]
49
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
50
+ export class AddContentDirective {
51
+ constructor(templateRef) {
52
+ this.templateRef = templateRef;
82
53
  }
83
54
  }
84
- DesignerElementAddComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerElementAddComponent, deps: [{ token: DesignerRef }, { token: i0.Injector }, { token: i1.BizDocComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component });
85
- DesignerElementAddComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DesignerElementAddComponent, selector: "bizdoc-designer-element-add", inputs: { form: "form" }, outputs: { complete: "complete" }, viewQueries: [{ propertyName: "_econtainer", first: true, predicate: ["econtainer"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `
86
- <ng-content></ng-content>
87
- <ng-container #econtainer></ng-container>
88
- <div class="row">
89
- <span class="divider"></span>
90
- <button mat-icon-button [disabled]="!form.valid" (click)="complete.emit()"><mat-icon>play_circle_outline</mat-icon></button>
91
- </div>`, isInline: true, dependencies: [{ kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerElementAddComponent, decorators: [{
93
- type: Component,
55
+ AddContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
56
+ AddContentDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.6", type: AddContentDirective, selector: "[bizdocAddContent]", ngImport: i0 });
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddContentDirective, decorators: [{
58
+ type: Directive,
94
59
  args: [{
95
- selector: 'bizdoc-designer-element-add',
96
- template: `
97
- <ng-content></ng-content>
98
- <ng-container #econtainer></ng-container>
99
- <div class="row">
100
- <span class="divider"></span>
101
- <button mat-icon-button [disabled]="!form.valid" (click)="complete.emit()"><mat-icon>play_circle_outline</mat-icon></button>
102
- </div>`
60
+ selector: '[bizdocAddContent]'
103
61
  }]
104
- }], ctorParameters: function () { return [{ type: i4.DesignerRef, decorators: [{
105
- type: Inject,
106
- args: [DesignerRef]
107
- }] }, { type: i0.Injector }, { type: i1.BizDocComponentFactoryResolver }]; }, propDecorators: { form: [{
108
- type: Input
109
- }], complete: [{
110
- type: Output
111
- }], _econtainer: [{
112
- type: ViewChild,
113
- args: ['econtainer', { static: true, read: ViewContainerRef }]
114
- }] } });
115
- export class DesignerElementPhaseComponent {
116
- constructor(_ref, _fb, _injector, _cfr, _componentFactoryResolver, _service, _element) {
62
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
63
+ /**
64
+ */
65
+ export class DesignerItemComponent {
66
+ constructor(_ref, _element, _pane, _fb, _cfr, _service) {
117
67
  this._ref = _ref;
68
+ this._element = _element;
69
+ this._pane = _pane;
118
70
  this._fb = _fb;
119
- this._injector = _injector;
120
71
  this._cfr = _cfr;
121
- this._componentFactoryResolver = _componentFactoryResolver;
122
72
  this._service = _service;
123
- this._element = _element;
73
+ this.svg = FAMILY_SVG;
74
+ this.form = new FormGroup({});
75
+ //@Input() state: string;
76
+ this.onContinue = new EventEmitter();
124
77
  this.onSave = new EventEmitter();
125
78
  this._destroy = new Subject();
126
- this.model = _ref.model;
127
79
  this.mode = _ref.mode;
80
+ this.model = _ref.model;
81
+ }
82
+ attached(componentRef) {
83
+ const { instance } = componentRef;
84
+ if (this.model.template) {
85
+ this._options = instance;
86
+ instance.model = this.model;
87
+ if (this.mode === 'add' && !this._options.onContinue) {
88
+ this.mode = 'edit';
89
+ this.form.markAsDirty();
90
+ this.onContinue.emit();
91
+ }
92
+ this._options.mode = this.mode;
93
+ }
94
+ else {
95
+ instance.fields = this.model.arguments;
96
+ instance.formulate();
97
+ }
98
+ this.mode !== 'widget' &&
99
+ this.form.addControl('options', instance.form, { emitEvent: false });
128
100
  }
129
101
  ngOnInit() {
130
- if (this.mode === 'widget')
131
- return;
132
- if (this.mode === 'add')
133
- this.dirty = true;
102
+ if (this.model.template) {
103
+ const comp = this._cfr.component(this.model.template);
104
+ this.options = new ComponentPortal(comp);
105
+ }
106
+ else if (this.mode !== 'widget' && this.model.arguments?.length)
107
+ this.options = new ComponentPortal(LayoutComponent);
108
+ switch (this.mode) {
109
+ case 'add':
110
+ case 'edit':
111
+ this._addForm();
112
+ }
113
+ }
114
+ _addForm() {
134
115
  const name = this._fb.control(null, Validators.required), title = this._fb.control(null, Validators.required);
135
116
  this.model.resource && title.disable();
136
117
  if (this.model.draft)
@@ -154,46 +135,32 @@ export class DesignerElementPhaseComponent {
154
135
  })));
155
136
  });
156
137
  }
157
- if (this.model.template) {
158
- const factory = this._cfr.resolve(this.model.template);
159
- const cRef = this._econtainer.createComponent(factory, 0, this._injector);
160
- const instance = cRef.instance;
161
- instance.model = this.model;
162
- instance.mode = this._ref.mode;
163
- this.form.addControl('options', instance.form, { emitEvent: false });
164
- }
165
- else if (this.model.arguments?.length) {
166
- const factory = this._componentFactoryResolver.resolveComponentFactory(LayoutComponent);
167
- const cRef = this._arguments.createComponent(factory);
168
- const instance = cRef.instance;
169
- instance.fields = this.model.arguments;
170
- instance.formulate();
171
- this.form.addControl('options', instance.form, { emitEvent: false });
172
- }
173
- this.form.patchValue(this.model, { emitEvent: false });
174
138
  this.form.statusChanges.pipe(takeUntil(this._destroy)).subscribe(s => {
175
- this.valid = s === 'VALID';
176
- this.dirty = true;
177
139
  });
178
- this.valid = this.form.valid;
179
- }
180
- refresh() {
181
- this.mode = 'edit';
182
- this.form.patchValue(this.model);
140
+ this.form.patchValue(this.model, { emitEvent: !this.model.draft });
183
141
  }
184
142
  ngAfterViewInit() {
185
- setTimeout(() => this._element.nativeElement.querySelector('input')?.focus());
143
+ if (this.mode !== 'widget') {
144
+ setTimeout(() => this._element.nativeElement.querySelector('input')?.focus());
145
+ }
186
146
  }
187
147
  unlock(evt) {
188
148
  if (evt.srcElement.tagName !== 'A')
189
149
  return;
190
150
  this.model.resource = null;
191
151
  this.form.get('title').enable();
192
- this._ref._lock$.next(false);
152
+ this._ref._unlock$.next(false);
153
+ }
154
+ continue() {
155
+ this._ref._state$.next(null);
156
+ this._options.onContinue && this._options.onContinue();
157
+ this.onContinue.emit();
158
+ this.mode = 'edit';
193
159
  }
194
160
  save() {
195
161
  Object.assign(this.model, this.form.value);
196
162
  this.onSave.emit(this.model);
163
+ this._pane.close();
197
164
  }
198
165
  /**
199
166
  * Ctrl-s save
@@ -201,7 +168,7 @@ export class DesignerElementPhaseComponent {
201
168
  */
202
169
  handleKeyboardEvent(event) {
203
170
  if (event.ctrlKey && (event.which === 83 || event.which === 115)) {
204
- this.valid && this.save();
171
+ this.form.valid && this.save();
205
172
  event.preventDefault();
206
173
  }
207
174
  }
@@ -210,99 +177,29 @@ export class DesignerElementPhaseComponent {
210
177
  this._destroy?.complete();
211
178
  }
212
179
  }
213
- DesignerElementPhaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerElementPhaseComponent, deps: [{ token: DesignerRef }, { token: i7.FormBuilder }, { token: i0.Injector }, { token: i1.BizDocComponentFactoryResolver }, { token: i0.ComponentFactoryResolver }, { token: i8.SystemService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
214
- DesignerElementPhaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DesignerElementPhaseComponent, selector: "bizdoc-designer-element-edit", inputs: { state: "state", form: "form" }, outputs: { onSave: "save" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "_econtainer", first: true, predicate: ["econtainer"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_arguments", first: true, predicate: ["arguments"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid || !dirty\"><mat-icon>save</mat-icon></button>\r\n</mat-toolbar>\r\n<p class=\"help\">{{model.help}}</p>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <ng-container *ngIf=\"mode === 'edit'\">\r\n <div class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required #title />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n\r\n </div>\r\n <p *ngIf=\"model.resource\" class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'Unlock'|translate\"></p>\r\n\r\n <!--<ng-container *ngTemplateOutlet=\"_template\"></ng-container>-->\r\n <ng-content></ng-content>\r\n </ng-container>\r\n\r\n <ng-container #econtainer></ng-container>\r\n\r\n <div #arguments></div>\r\n\r\n <ng-container *ngIf=\"form.controls.privileges\" formGroupName=\"privileges\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n</form>\r\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i9.MatSelectionList, selector: "mat-selection-list", inputs: ["disableRipple", "color", "compareWith", "disabled", "multiple"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i9.MatListOption, selector: "mat-list-option", inputs: ["disableRipple", "checkboxPosition", "color", "value", "disabled", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i10.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i11.MatLabel, selector: "mat-label" }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
215
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerElementPhaseComponent, decorators: [{
180
+ DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, deps: [{ token: DesignerRef }, { token: i0.ElementRef }, { token: i1.PaneRef, optional: true }, { token: i2.FormBuilder }, { token: i3.BizDocComponentFactoryResolver }, { token: i4.SystemService }], target: i0.ɵɵFactoryTarget.Component });
181
+ DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { form: "form" }, outputs: { onContinue: "continue", onSave: "save" }, queries: [{ propertyName: "editContent", first: true, predicate: EditContentDirective, descendants: true }, { propertyName: "widgetContent", first: true, predicate: WidgetContentDirective, descendants: true }], ngImport: i0, template: "<ng-conatiner [ngSwitch]=\"mode\">\r\n <ng-container *ngSwitchCase=\"'add'\">\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button [disabled]=\"!form.valid\" (click)=\"continue()\">{{'Continue'|translate}}&nbsp;<mat-icon>double_arrow</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'edit'\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.valid || !form.dirty\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <p class=\"help\">{{model.help}}</p>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\"\r\n (document:keydown)=\"handleKeyboardEvent($event)\">\r\n <!--<ng-container #econtainer></ng-container>-->\r\n <div class=\"row\" *ngIf=\"form.contains('name')\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required #title />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </div>\r\n\r\n <p *ngIf=\"model.resource\" class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'Unlock'|translate\"></p>\r\n\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n\r\n <ng-container *ngIf=\"form.contains('privileges')\" formGroupName=\"privileges\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n </form>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div [innerHTML]=\"(svg[model.family]|sanitizeHtml)||model.family\" *ngIf=\"model.family\"></div>\r\n <ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n </ng-container>\r\n</ng-conatiner>\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}.actions{margin:8px}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i6.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i7.MatSelectionList, selector: "mat-selection-list", inputs: ["disableRipple", "color", "compareWith", "disabled", "multiple"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i7.MatListOption, selector: "mat-list-option", inputs: ["disableRipple", "checkboxPosition", "color", "value", "disabled", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i8.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "component", type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i14.SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }] });
182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, decorators: [{
216
183
  type: Component,
217
- args: [{ selector: 'bizdoc-designer-element-edit', template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid || !dirty\"><mat-icon>save</mat-icon></button>\r\n</mat-toolbar>\r\n<p class=\"help\">{{model.help}}</p>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <ng-container *ngIf=\"mode === 'edit'\">\r\n <div class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required #title />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n\r\n </div>\r\n <p *ngIf=\"model.resource\" class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'Unlock'|translate\"></p>\r\n\r\n <!--<ng-container *ngTemplateOutlet=\"_template\"></ng-container>-->\r\n <ng-content></ng-content>\r\n </ng-container>\r\n\r\n <ng-container #econtainer></ng-container>\r\n\r\n <div #arguments></div>\r\n\r\n <ng-container *ngIf=\"form.controls.privileges\" formGroupName=\"privileges\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n</form>\r\n" }]
218
- }], ctorParameters: function () { return [{ type: i4.DesignerRef, decorators: [{
184
+ args: [{ selector: 'bizdoc-designer-element', template: "<ng-conatiner [ngSwitch]=\"mode\">\r\n <ng-container *ngSwitchCase=\"'add'\">\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button [disabled]=\"!form.valid\" (click)=\"continue()\">{{'Continue'|translate}}&nbsp;<mat-icon>double_arrow</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'edit'\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.valid || !form.dirty\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <p class=\"help\">{{model.help}}</p>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\"\r\n (document:keydown)=\"handleKeyboardEvent($event)\">\r\n <!--<ng-container #econtainer></ng-container>-->\r\n <div class=\"row\" *ngIf=\"form.contains('name')\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required #title />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </div>\r\n\r\n <p *ngIf=\"model.resource\" class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'Unlock'|translate\"></p>\r\n\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n\r\n <ng-container *ngIf=\"form.contains('privileges')\" formGroupName=\"privileges\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n </form>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div [innerHTML]=\"(svg[model.family]|sanitizeHtml)||model.family\" *ngIf=\"model.family\"></div>\r\n <ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n </ng-container>\r\n</ng-conatiner>\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}.actions{margin:8px}\n"] }]
185
+ }], ctorParameters: function () { return [{ type: i16.DesignerRef, decorators: [{
219
186
  type: Inject,
220
187
  args: [DesignerRef]
221
- }] }, { type: i7.FormBuilder }, { type: i0.Injector }, { type: i1.BizDocComponentFactoryResolver }, { type: i0.ComponentFactoryResolver }, { type: i8.SystemService }, { type: i0.ElementRef }]; }, propDecorators: { state: [{
222
- type: Input
223
- }], form: [{
188
+ }] }, { type: i0.ElementRef }, { type: i1.PaneRef, decorators: [{
189
+ type: Optional
190
+ }] }, { type: i2.FormBuilder }, { type: i3.BizDocComponentFactoryResolver }, { type: i4.SystemService }]; }, propDecorators: { form: [{
224
191
  type: Input
192
+ }], onContinue: [{
193
+ type: Output,
194
+ args: ['continue']
225
195
  }], onSave: [{
226
196
  type: Output,
227
197
  args: ['save']
228
- }], _econtainer: [{
229
- type: ViewChild,
230
- args: ['econtainer', { static: true, read: ViewContainerRef }]
231
- }], _arguments: [{
232
- type: ViewChild,
233
- args: ['arguments', { static: true, read: ViewContainerRef }]
234
- }], handleKeyboardEvent: [{
235
- type: HostListener,
236
- args: ['document:keydown', ['$event']]
237
- }] } });
238
- /**
239
- */
240
- export class DesignerItemComponent {
241
- constructor(_ref, _pane) {
242
- this._ref = _ref;
243
- this._pane = _pane;
244
- this.save = new EventEmitter();
245
- this.mode = _ref.mode;
246
- this.model = _ref.model;
247
- }
248
- ngOnChanges() {
249
- //if (this.state) this.phase = this.phases?.find(p => p.state === this.state);
250
- //else this.phase = this.phases?.first;
251
- }
252
- ngAfterContentInit() {
253
- if (this.mode !== 'widget') {
254
- this.phases?.forEach(p => p.onSave.subscribe(e => {
255
- this.save.emit(e);
256
- this._pane.close();
257
- }));
258
- this.add?.complete.subscribe(() => {
259
- this._ref.mode = this.mode = 'edit';
260
- this._ref._state$.next(null);
261
- this.phases.first.refresh();
262
- });
263
- }
264
- }
265
- }
266
- DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, deps: [{ token: DesignerRef }, { token: i15.PaneRef, optional: true }], target: i0.ɵɵFactoryTarget.Component });
267
- DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { state: "state" }, outputs: { save: "save" }, queries: [{ propertyName: "info", first: true, predicate: DesignerElementInfoComponent, descendants: true }, { propertyName: "add", first: true, predicate: DesignerElementAddComponent, descendants: true }, { propertyName: "phases", predicate: DesignerElementPhaseComponent }], usesOnChanges: true, ngImport: i0, template: `
268
- <ng-content select="bizdoc-designer-element-widget"
269
- *ngIf="mode==='widget'; else addedit"></ng-content>
270
- <ng-template #addedit>
271
- <ng-content select="bizdoc-designer-element-add"
272
- *ngIf="mode === 'add' && add; else edit"></ng-content>
273
- </ng-template>
274
- <ng-template #edit>
275
- <ng-content select="bizdoc-designer-element-edit"></ng-content>
276
- </ng-template>`, isInline: true, styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
277
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, decorators: [{
278
- type: Component,
279
- args: [{ selector: 'bizdoc-designer-element', template: `
280
- <ng-content select="bizdoc-designer-element-widget"
281
- *ngIf="mode==='widget'; else addedit"></ng-content>
282
- <ng-template #addedit>
283
- <ng-content select="bizdoc-designer-element-add"
284
- *ngIf="mode === 'add' && add; else edit"></ng-content>
285
- </ng-template>
286
- <ng-template #edit>
287
- <ng-content select="bizdoc-designer-element-edit"></ng-content>
288
- </ng-template>`, styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}\n"] }]
289
- }], ctorParameters: function () { return [{ type: i4.DesignerRef, decorators: [{
290
- type: Inject,
291
- args: [DesignerRef]
292
- }] }, { type: i15.PaneRef, decorators: [{
293
- type: Optional
294
- }] }]; }, propDecorators: { info: [{
198
+ }], editContent: [{
295
199
  type: ContentChild,
296
- args: [DesignerElementInfoComponent]
297
- }], add: [{
200
+ args: [EditContentDirective]
201
+ }], widgetContent: [{
298
202
  type: ContentChild,
299
- args: [DesignerElementAddComponent]
300
- }], phases: [{
301
- type: ContentChildren,
302
- args: [DesignerElementPhaseComponent]
303
- }], state: [{
304
- type: Input
305
- }], save: [{
306
- type: Output
203
+ args: [WidgetContentDirective]
307
204
  }] } });
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBNEIsWUFBWSxFQUFFLGVBQWUsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQTBCLFNBQVMsRUFBZ0IsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM1IsT0FBTyxFQUFlLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFJckUsT0FBTyxFQUFFLFdBQVcsRUFBZ0IsV0FBVyxFQUFjLFVBQVUsRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRM0gsTUFBTSxPQUFPLDRCQUE0QjtJQUt2QyxZQUNVLElBQW9DLEVBQ2YsSUFBc0I7UUFEM0MsU0FBSSxHQUFKLElBQUksQ0FBZ0M7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQU5yRCxRQUFHLEdBQUcsVUFBVSxDQUFDO1FBUWYsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBcUIsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFD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QXFCLGtCQVlqQixXQUFXO3NHQVpmLHFCQUFxQix3SkFDYiw0QkFBNEIsc0VBQzVCLDJCQUEyQiw0REFDeEIsNkJBQTZCLGtEQWZwQzs7Ozs7Ozs7O21CQVNPOzJGQUdYLHFCQUFxQjtrQkFmNUIsU0FBUzsrQkFDRSx5QkFBeUIsWUFFekI7Ozs7Ozs7OzttQkFTTzs7MEJBZWQsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs0Q0FaaUMsSUFBSTtzQkFBL0MsWUFBWTt1QkFBQyw0QkFBNEI7Z0JBQ0MsR0FBRztzQkFBN0MsWUFBWTt1QkFBQywyQkFBMkI7Z0JBQ08sTUFBTTtzQkFBckQsZUFBZTt1QkFBQyw2QkFBNkI7Z0JBQ3JDLEtBQUs7c0JBQWIsS0FBSztnQkFDYSxJQUFJO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSBcIi4uLy4uL2NvcmUvY29tcG9uZW50LWZhY3RvcnktcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHsgTGF5b3V0Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvcmUvbGF5b3V0L2xheW91dC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBQYW5lUmVmIH0gZnJvbSBcIi4uLy4uL2NvcmUvc2xvdHMvcGFuZS1yZWZcIjtcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZSB9IGZyb20gXCIuLi9zeXN0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclJlZiwgRWxlbWVudE1vZGVsLCBwcm9ncmFtTmFtZSwgRGVzaWduTW9kZSwgRkFNSUxZX1NWRywgRGVzaWduZXJFbGVtZW50Q29tcG9uZW50IH0gZnJvbSBcIi4vZGVzaWduZXIuYmFzZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZGVzaWduZXItZWxlbWVudC13aWRnZXQnLCB0ZW1wbGF0ZTogYFxyXG4gIDxkaXYgW2lubmVySFRNTF09XCIoc3ZnW21vZGVsLmZhbWlseV18c2FuaXRpemVIdG1sKXx8bW9kZWwuZmFtaWx5XCIgKm5nSWY9XCJtb2RlbC5mYW1pbHlcIj48L2Rpdj5cclxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48bmctY29udGFpbmVyICNlY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG5gIH0pXHJcbmV4cG9ydCBjbGFzcyBEZXNpZ25lckVsZW1lbnRJbmZvQ29tcG9uZW50IHtcclxuICBzdmcgPSBGQU1JTFlfU1ZHO1xyXG4gIG1vZGVsOiBFbGVtZW50TW9kZWw8YW55PjtcclxuICBAVmlld0NoaWxkKCdlY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2Vjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYXJndW1lbnRzJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2FyZ3VtZW50czogVmlld0NvbnRhaW5lclJlZjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NmcjogQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcHJpdmF0ZSBfcmVmOiBEZXNpZ25lclJlZjxhbnk+LFxyXG4gICkge1xyXG4gICAgdGhpcy5tb2RlbCA9IF9yZWYubW9kZWwgYXMgRWxlbWVudE1vZGVsO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGVsLnRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZSh0aGlzLm1vZGVsLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGNvbnN0IGNSZWYgPSB0aGlzLl9lY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4oZmFjdG9yeSwgMCk7XHJcbiAgICAgIGNSZWYuaW5zdGFuY2UubW9kZWwgPSB0aGlzLm1vZGVsO1xyXG4gICAgICBjUmVmLmluc3RhbmNlLm1vZGUgPSAnd2lkZ2V0JztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubW9kZWwuYXJndW1lbnRzPy5sZW5ndGgpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtYWRkJyxcclxuICB0ZW1wbGF0ZTogYFxyXG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjxuZy1jb250YWluZXIgI2Vjb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiIChjbGljayk9XCJjb21wbGV0ZS5lbWl0KClcIj48bWF0LWljb24+cGxheV9jaXJjbGVfb3V0bGluZTwvbWF0LWljb24+PC9idXR0b24+XHJcbjwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIERlc2lnbmVyRWxlbWVudEFkZENvbXBvbmVudCB7XHJcbiAgbW9kZWw6IEVsZW1lbnRNb2RlbDxhbnk+O1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBjb21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAVmlld0NoaWxkKCdlY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2Vjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KERlc2lnbmVyUmVmKSBwcml2YXRlIF9yZWY6IERlc2lnbmVyUmVmPGFueT4sXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF9jZnI6IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICApIHsgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKCh0aGlzLl9yZWYubW9kZWwgYXMgRWxlbWVudE1vZGVsKS50ZW1wbGF0ZSkge1xyXG4gICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmUoKHRoaXMuX3JlZi5tb2RlbCBhcyBFbGVtZW50TW9kZWwpLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGNvbnN0IGNSZWYgPSB0aGlzLl9lY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4oZmFjdG9yeSwgMCwgdGhpcy5faW5qZWN0b3IpO1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNSZWYuaW5zdGFuY2U7XHJcbiAgICAgIGluc3RhbmNlLm1vZGVsID0gdGhpcy5fcmVmLm1vZGVsO1xyXG4gICAgICBpbnN0YW5jZS5tb2RlID0gJ2FkZCc7XHJcbiAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgaW5zdGFuY2UuZm9ybSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1kZXNpZ25lci1lbGVtZW50LWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERlc2lnbmVyRWxlbWVudFBoYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBzdGF0ZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgQE91dHB1dCgnc2F2ZScpIHJlYWRvbmx5IG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAvL0BWaWV3Q2hpbGQoJ1tiaXpkb2NDb250ZW50XScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KSBfdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZWNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIF9lY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2FyZ3VtZW50cycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIF9hcmd1bWVudHM6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgbW9kZWw6IEVsZW1lbnRNb2RlbDxhbnk+O1xyXG4gIHJvbGVzOiBSb2xlW107XHJcbiAgdmFsaWQ6IGJvb2xlYW47XHJcbiAgZGlydHk6IGJvb2xlYW47XHJcbiAgICBtb2RlOiBEZXNpZ25Nb2RlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcHJpdmF0ZSBfcmVmOiBEZXNpZ25lclJlZjxhbnk+LFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBfY2ZyOiBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIF9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pikge1xyXG4gICAgdGhpcy5tb2RlbCA9IF9yZWYubW9kZWwgYXMgRWxlbWVudE1vZGVsO1xyXG4gICAgdGhpcy5tb2RlID0gX3JlZi5tb2RlO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICd3aWRnZXQnKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnYWRkJykgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fZmIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgdGl0bGUgPSB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgdGhpcy5tb2RlbC5yZXNvdXJjZSAmJiB0aXRsZS5kaXNhYmxlKCk7XHJcbiAgICBpZiAodGhpcy5tb2RlbC5kcmFmdCkgdGl0bGUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKHQ6IHN0cmluZykgPT5cclxuICAgICAgdCAmJiBuYW1lLnNldFZhbHVlKHByb2dyYW1OYW1lKHQpKVxyXG4gICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgbmFtZS5kaXNhYmxlKCk7XHJcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnbmFtZScsIG5hbWUpO1xyXG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ3RpdGxlJywgdGl0bGUpO1xyXG4gICAgaWYgKHRoaXMubW9kZWwucHJpdmlsZWdlcykge1xyXG4gICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgncHJpdmlsZWdlcycsXHJcbiAgICAgICAgdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgcnVsZTogbnVsbCxcclxuICAgICAgICAgIHJvbGVzOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZ1tdPihudWxsKSxcclxuICAgICAgICB9KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLl9zZXJ2aWNlLnJvbGVzKCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgIHRoaXMucm9sZXMgPSByLmNvbmNhdCgodGhpcy5fcmVmLmRlc2lnbmVyLnJvbGVzIGFzIEVsZW1lbnRNb2RlbFtdKS5cclxuICAgICAgICAgIGZpbHRlcihyID0+ICFyLmRpc2FibGVkKS5cclxuICAgICAgICAgIG1hcChyID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IHIubmFtZSxcclxuICAgICAgICAgICAgdGl0bGU6IHIudGl0bGUsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiByLmRhdGFUeXBlXHJcbiAgICAgICAgICB9KSkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGVsLnRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZSh0aGlzLm1vZGVsLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGNvbnN0IGNSZWYgPSB0aGlzLl9lY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4oZmFjdG9yeSwgMCwgdGhpcy5faW5qZWN0b3IpO1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNSZWYuaW5zdGFuY2U7XHJcbiAgICAgIGluc3RhbmNlLm1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgICAgaW5zdGFuY2UubW9kZSA9IHRoaXMuX3JlZi5tb2RlO1xyXG4gICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnb3B0aW9ucycsIGluc3RhbmNlLmZvcm0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubW9kZWwuYXJndW1lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMYXlvdXRDb21wb25lbnQpO1xyXG4gICAgICBjb25zdCBjUmVmID0gdGhpcy5fYXJndW1lbnRzLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcclxuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjUmVmLmluc3RhbmNlO1xyXG4gICAgICBpbnN0YW5jZS5maWVsZHMgPSB0aGlzLm1vZGVsLmFyZ3VtZW50cztcclxuICAgICAgaW5zdGFuY2UuZm9ybXVsYXRlKCk7XHJcbiAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgaW5zdGFuY2UuZm9ybSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgIHRoaXMudmFsaWQgPSBzID09PSAnVkFMSUQnO1xyXG4gICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy52YWxpZCA9IHRoaXMuZm9ybS52YWxpZDtcclxuICB9XHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMubW9kZSA9ICdlZGl0JztcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5mb2N1cygpKTtcclxuICB9XHJcbiAgdW5sb2NrKGV2dDogRXZlbnQpIHtcclxuICAgIGlmICgoZXZ0LnNyY0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgIT09ICdBJykgcmV0dXJuO1xyXG4gICAgdGhpcy5tb2RlbC5yZXNvdXJjZSA9IG51bGw7XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCd0aXRsZScpLmVuYWJsZSgpO1xyXG4gICAgdGhpcy5fcmVmLl9sb2NrJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEN0cmwtcyBzYXZlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LndoaWNoID09PSA4MyB8fCBldmVudC53aGljaCA9PT0gMTE1KSkge1xyXG4gICAgICB0aGlzLnZhbGlkICYmIHRoaXMuc2F2ZSgpO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZGVzaWduZXItZWxlbWVudCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2Rlc2lnbmVyLWVsZW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtd2lkZ2V0XCJcclxuICAgICAgKm5nSWY9XCJtb2RlPT09J3dpZGdldCc7IGVsc2UgYWRkZWRpdFwiPjwvbmctY29udGVudD5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWRkZWRpdD5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtYWRkXCJcclxuICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICdhZGQnICYmIGFkZDsgZWxzZSBlZGl0XCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZWRpdD5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtZWRpdFwiPjwvbmctY29udGVudD5cclxuICAgIDwvbmctdGVtcGxhdGU+YFxyXG59KVxyXG5leHBvcnRcclxuICBjbGFzcyBEZXNpZ25lckl0ZW1Db21wb25lbnQge1xyXG4gIEBDb250ZW50Q2hpbGQoRGVzaWduZXJFbGVtZW50SW5mb0NvbXBvbmVudCkgaW5mbzogRGVzaWduZXJFbGVtZW50SW5mb0NvbXBvbmVudDtcclxuICBAQ29udGVudENoaWxkKERlc2lnbmVyRWxlbWVudEFkZENvbXBvbmVudCkgYWRkOiBEZXNpZ25lckVsZW1lbnRBZGRDb21wb25lbnQ7XHJcbiAgQENvbnRlbnRDaGlsZHJlbihEZXNpZ25lckVsZW1lbnRQaGFzZUNvbXBvbmVudCkgcGhhc2VzOiBRdWVyeUxpc3Q8RGVzaWduZXJFbGVtZW50UGhhc2VDb21wb25lbnQ+O1xyXG4gIEBJbnB1dCgpIHN0YXRlOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgbW9kZTogRGVzaWduTW9kZTtcclxuICB2YWxpZDogYm9vbGVhbjtcclxuICBkaXJ0eTogYm9vbGVhbjtcclxuICBtb2RlbDogRWxlbWVudE1vZGVsPGFueT47XHJcbiAgcGhhc2U6IERlc2lnbmVyRWxlbWVudFBoYXNlQ29tcG9uZW50O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcHJpdmF0ZSBfcmVmOiBEZXNpZ25lclJlZjxhbnk+LFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcGFuZTogUGFuZVJlZixcclxuICApIHtcclxuICAgIHRoaXMubW9kZSA9IF9yZWYubW9kZTtcclxuICAgIHRoaXMubW9kZWwgPSBfcmVmLm1vZGVsIGFzIEVsZW1lbnRNb2RlbDtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAvL2lmICh0aGlzLnN0YXRlKSB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXM/LmZpbmQocCA9PiBwLnN0YXRlID09PSB0aGlzLnN0YXRlKTtcclxuICAgIC8vZWxzZSB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXM/LmZpcnN0O1xyXG4gIH1cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlICE9PSAnd2lkZ2V0Jykge1xyXG4gICAgICB0aGlzLnBoYXNlcz8uZm9yRWFjaChwID0+IHAub25TYXZlLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgICB0aGlzLnNhdmUuZW1pdChlKTtcclxuICAgICAgICB0aGlzLl9wYW5lLmNsb3NlKCk7XHJcbiAgICAgIH0pKTtcclxuICAgICAgdGhpcy5hZGQ/LmNvbXBsZXRlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fcmVmLm1vZGUgPSB0aGlzLm1vZGUgPSAnZWRpdCc7XHJcbiAgICAgICAgdGhpcy5fcmVmLl9zdGF0ZSQubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnBoYXNlcy5maXJzdC5yZWZyZXNoKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bWF0LXRvb2xiYXI+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCIhdmFsaWQgfHwgIWRpcnR5XCI+PG1hdC1pY29uPnNhdmU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG48L21hdC10b29sYmFyPlxyXG48cCBjbGFzcz1cImhlbHBcIj57e21vZGVsLmhlbHB9fTwvcD5cclxuPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJjb2x1bW5cIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2VkaXQnXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7J1RpdGxlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkICN0aXRsZSAvPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAmbmJzcDtcclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3snTmFtZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8cCAqbmdJZj1cIm1vZGVsLnJlc291cmNlXCIgY2xhc3M9XCJtZXNzYWdlXCIgKGNsaWNrKT1cInVubG9jaygkZXZlbnQpXCIgW2lubmVySFRNTF09XCInVW5sb2NrJ3x0cmFuc2xhdGVcIj48L3A+XHJcblxyXG4gICAgPCEtLTxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJfdGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj4tLT5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAjZWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiAjYXJndW1lbnRzPjwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5jb250cm9scy5wcml2aWxlZ2VzXCIgZm9ybUdyb3VwTmFtZT1cInByaXZpbGVnZXNcIj5cclxuICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7J1ByaXZpbGVnZXMnfHRyYW5zbGF0ZX19PC9oMj5cclxuICAgIDxtYXQtc2VsZWN0aW9uLWxpc3QgZm9ybUNvbnRyb2xOYW1lPVwicm9sZXNcIiAqbmdJZj1cInJvbGVzXCI+XHJcbiAgICAgIDxtYXQtbGlzdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2Ygcm9sZXNcIiBbdmFsdWVdPVwici5uYW1lXCI+e3tyLnRpdGxlfX08L21hdC1saXN0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8Yml6ZG9jLWFjZS1pbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ0NvbmRpdGlvbid8dHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwicnVsZVwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgPG1hdC1oaW50PiB7eyAnUHJvZ3JhbW1hYmxlRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZm9ybT5cclxuIl19
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBMEMsWUFBWSxFQUFtQixTQUFTLEVBQWMsWUFBWSxFQUFnQixNQUFNLEVBQVksS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxFQUFxRSxNQUFNLGVBQWUsQ0FBQztBQUN2VSxPQUFPLEVBQWUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSTFDLE9BQU8sRUFBRSxXQUFXLEVBQWdCLFdBQVcsRUFBYyxVQUFVLEVBQTRCLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBbUIsZUFBZSxFQUFVLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU0vRSxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQW1CLFdBQWlDO1FBQWpDLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtJQUFJLENBQUM7O2lIQUQ5QyxvQkFBb0I7cUdBQXBCLG9CQUFvQjsyRkFBcEIsb0JBQW9CO2tCQUhoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7aUJBQ2hDOztBQU9ELE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFB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QUMsRUFBRTtZQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzs7a0hBNUhLLHFCQUFxQixrQkFlakIsV0FBVztzR0FmZixxQkFBcUIsdUxBT2Isb0JBQW9CLGdGQUNwQixzQkFBc0IsZ0RDOUN0Qywrd0ZBb0RBOzJGRGRRLHFCQUFxQjtrQkFONUIsU0FBUzsrQkFDRSx5QkFBeUI7OzBCQW9CaEMsTUFBTTsyQkFBQyxXQUFXOzswQkFFbEIsUUFBUTsrSUFmRixJQUFJO3NCQUFaLEtBQUs7Z0JBRXVCLFVBQVU7c0JBQXRDLE1BQU07dUJBQUMsVUFBVTtnQkFDTyxNQUFNO3NCQUE5QixNQUFNO3VCQUFDLE1BQU07Z0JBRXNCLFdBQVc7c0JBQTlDLFlBQVk7dUJBQUMsb0JBQW9CO2dCQUNJLGFBQWE7c0JBQWxELFlBQVk7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9jb21wb25lbnQtZmFjdG9yeS1yZXNvbHZlclwiO1xyXG5pbXBvcnQgeyBTeXN0ZW1TZXJ2aWNlIH0gZnJvbSBcIi4uL3N5c3RlbS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi4vLi4vY29yZS9tb2RlbHNcIjtcclxuaW1wb3J0IHsgRGVzaWduZXJSZWYsIEVsZW1lbnRNb2RlbCwgcHJvZ3JhbU5hbWUsIERlc2lnbk1vZGUsIEZBTUlMWV9TVkcsIERlc2lnbmVyRWxlbWVudENvbXBvbmVudCB9IGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xyXG5pbXBvcnQgeyBMYXlvdXRDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDZGtQb3J0YWxPdXRsZXQsIENvbXBvbmVudFBvcnRhbCwgUG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcclxuaW1wb3J0IHsgUGFuZVJlZiB9IGZyb20gXCIuLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmXCI7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tiaXpkb2NFZGl0Q29udGVudF0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0Q29udGVudERpcmVjdGl2ZSB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPikgeyB9XHJcbn1cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYml6ZG9jQ29udGVudF0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXaWRnZXRDb250ZW50RGlyZWN0aXZlIHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+KSB7IH1cclxufVxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tiaXpkb2NBZGRDb250ZW50XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZENvbnRlbnREaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4pIHsgfVxyXG59XHJcblxyXG4vKipcclxuKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZGVzaWduZXItZWxlbWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICdkZXNpZ25lci1lbGVtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnRcclxuICBjbGFzcyBEZXNpZ25lckl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIHJlYWRvbmx5IHN2ZyA9IEZBTUlMWV9TVkc7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgLy9ASW5wdXQoKSBzdGF0ZTogc3RyaW5nO1xyXG4gIEBPdXRwdXQoJ2NvbnRpbnVlJykgcmVhZG9ubHkgb25Db250aW51ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCdzYXZlJykgcmVhZG9ubHkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxFbGVtZW50TW9kZWw+KCk7XHJcbiAgcm9sZXM6IFJvbGVbXTtcclxuICBAQ29udGVudENoaWxkKEVkaXRDb250ZW50RGlyZWN0aXZlKSBlZGl0Q29udGVudDogRWRpdENvbnRlbnREaXJlY3RpdmU7XHJcbiAgQENvbnRlbnRDaGlsZChXaWRnZXRDb250ZW50RGlyZWN0aXZlKSB3aWRnZXRDb250ZW50OiBXaWRnZXRDb250ZW50RGlyZWN0aXZlO1xyXG4gIG9wdGlvbnM6IFBvcnRhbDxhbnk+O1xyXG4gIG1vZGU6IERlc2lnbk1vZGU7XHJcbiAgbW9kZWw6IEVsZW1lbnRNb2RlbDxhbnk+O1xyXG4gIHByaXZhdGUgX29wdGlvbnM6IERlc2lnbmVyRWxlbWVudENvbXBvbmVudDxhbnk+O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcHJpdmF0ZSBfcmVmOiBEZXNpZ25lclJlZjxhbnk+LFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9wYW5lOiBQYW5lUmVmLFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfY2ZyOiBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5tb2RlID0gX3JlZi5tb2RlO1xyXG4gICAgdGhpcy5tb2RlbCA9IF9yZWYubW9kZWwgYXMgRWxlbWVudE1vZGVsO1xyXG4gIH1cclxuICBhdHRhY2hlZChjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4gfCBDb21wb25lbnRSZWY8TGF5b3V0Q29tcG9uZW50Pikge1xyXG4gICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gY29tcG9uZW50UmVmO1xyXG4gICAgaWYgKHRoaXMubW9kZWwudGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5fb3B0aW9ucyA9IGluc3RhbmNlIGFzIERlc2lnbmVyRWxlbWVudENvbXBvbmVudDxhbnk+O1xyXG4gICAgICBpbnN0YW5jZS5tb2RlbCA9IHRoaXMubW9kZWw7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdhZGQnICYmICF0aGlzLl9vcHRpb25zLm9uQ29udGludWUpIHtcclxuICAgICAgICB0aGlzLm1vZGUgPSAnZWRpdCc7XHJcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgdGhpcy5vbkNvbnRpbnVlLmVtaXQoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9vcHRpb25zLm1vZGUgPSB0aGlzLm1vZGU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgKGluc3RhbmNlIGFzIExheW91dENvbXBvbmVudCkuZmllbGRzID0gdGhpcy5tb2RlbC5hcmd1bWVudHM7XHJcbiAgICAgIChpbnN0YW5jZSBhcyBMYXlvdXRDb21wb25lbnQpLmZvcm11bGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tb2RlICE9PSAnd2lkZ2V0JyAmJlxyXG4gICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnb3B0aW9ucycsIGluc3RhbmNlLmZvcm0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlbC50ZW1wbGF0ZSkge1xyXG4gICAgICBjb25zdCBjb21wID0gdGhpcy5fY2ZyLmNvbXBvbmVudCh0aGlzLm1vZGVsLnRlbXBsYXRlKTtcclxuICAgICAgdGhpcy5vcHRpb25zID0gbmV3IENvbXBvbmVudFBvcnRhbDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4oY29tcCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLm1vZGUgIT09ICd3aWRnZXQnICYmIHRoaXMubW9kZWwuYXJndW1lbnRzPy5sZW5ndGgpXHJcbiAgICAgIHRoaXMub3B0aW9ucyA9IG5ldyBDb21wb25lbnRQb3J0YWwoTGF5b3V0Q29tcG9uZW50KTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xyXG4gICAgICBjYXNlICdhZGQnOlxyXG4gICAgICBjYXNlICdlZGl0JzpcclxuICAgICAgICB0aGlzLl9hZGRGb3JtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FkZEZvcm0oKSB7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fZmIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgdGl0bGUgPSB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgdGhpcy5tb2RlbC5yZXNvdXJjZSAmJiB0aXRsZS5kaXNhYmxlKCk7XHJcbiAgICBpZiAodGhpcy5tb2RlbC5kcmFmdCkgdGl0bGUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKHQ6IHN0cmluZykgPT5cclxuICAgICAgdCAmJiBuYW1lLnNldFZhbHVlKHByb2dyYW1OYW1lKHQpKVxyXG4gICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgbmFtZS5kaXNhYmxlKCk7XHJcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnbmFtZScsIG5hbWUpO1xyXG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ3RpdGxlJywgdGl0bGUpO1xyXG4gICAgaWYgKHRoaXMubW9kZWwucHJpdmlsZWdlcykge1xyXG4gICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgncHJpdmlsZWdlcycsXHJcbiAgICAgICAgdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgcnVsZTogbnVsbCxcclxuICAgICAgICAgIHJvbGVzOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZ1tdPihudWxsKSxcclxuICAgICAgICB9KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLl9zZXJ2aWNlLnJvbGVzKCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgIHRoaXMucm9sZXMgPSByLmNvbmNhdCgodGhpcy5fcmVmLmRlc2lnbmVyLnJvbGVzIGFzIEVsZW1lbnRNb2RlbFtdKS5cclxuICAgICAgICAgIGZpbHRlcihyID0+ICFyLmRpc2FibGVkKS5cclxuICAgICAgICAgIG1hcChyID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IHIubmFtZSxcclxuICAgICAgICAgICAgdGl0bGU6IHIudGl0bGUsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiByLmRhdGFUeXBlXHJcbiAgICAgICAgICB9KSkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwsIHsgZW1pdEV2ZW50OiAhdGhpcy5tb2RlbC5kcmFmdCB9KTtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMubW9kZSAhPT0gJ3dpZGdldCcpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKT8uZm9jdXMoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVubG9jayhldnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAoKGV2dC5zcmNFbGVtZW50IGFzIEhUTUxFbGVtZW50KS50YWdOYW1lICE9PSAnQScpIHJldHVybjtcclxuICAgIHRoaXMubW9kZWwucmVzb3VyY2UgPSBudWxsO1xyXG4gICAgdGhpcy5mb3JtLmdldCgndGl0bGUnKS5lbmFibGUoKTtcclxuICAgIHRoaXMuX3JlZi5fdW5sb2NrJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcbiAgY29udGludWUoKSB7XHJcbiAgICB0aGlzLl9yZWYuX3N0YXRlJC5uZXh0KG51bGwpO1xyXG4gICAgdGhpcy5fb3B0aW9ucy5vbkNvbnRpbnVlICYmIHRoaXMuX29wdGlvbnMub25Db250aW51ZSgpO1xyXG4gICAgdGhpcy5vbkNvbnRpbnVlLmVtaXQoKTtcclxuICAgIHRoaXMubW9kZSA9ICdlZGl0JztcclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICB0aGlzLl9wYW5lLmNsb3NlKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEN0cmwtcyBzYXZlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LndoaWNoID09PSA4MyB8fCBldmVudC53aGljaCA9PT0gMTE1KSkge1xyXG4gICAgICB0aGlzLmZvcm0udmFsaWQgJiYgdGhpcy5zYXZlKCk7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveT8ubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveT8uY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbmF0aW5lciBbbmdTd2l0Y2hdPVwibW9kZVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhZGQnXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc1wiIChhdHRhY2hlZCk9XCJhdHRhY2hlZCgkZXZlbnQpXCIgW2Nka1BvcnRhbE91dGxldF09XCJvcHRpb25zXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGFjdGlvbnNcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWRcIiAoY2xpY2spPVwiY29udGludWUoKVwiPnt7J0NvbnRpbnVlJ3x0cmFuc2xhdGV9fSZuYnNwOzxtYXQtaWNvbj5kb3VibGVfYXJyb3c8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2VkaXQnXCI+XHJcbiAgICA8bWF0LXRvb2xiYXI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzYXZlKClcIiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWQgfHwgIWZvcm0uZGlydHlcIj48bWF0LWljb24+c2F2ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L21hdC10b29sYmFyPlxyXG4gICAgPHAgY2xhc3M9XCJoZWxwXCI+e3ttb2RlbC5oZWxwfX08L3A+XHJcbiAgICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiXHJcbiAgICAgICAgICAoZG9jdW1lbnQ6a2V5ZG93bik9XCJoYW5kbGVLZXlib2FyZEV2ZW50KCRldmVudClcIj5cclxuICAgICAgPCEtLTxuZy1jb250YWluZXIgI2Vjb250YWluZXI+PC9uZy1jb250YWluZXI+LS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZvcm0uY29udGFpbnMoJ25hbWUnKVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3snVGl0bGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiByZXF1aXJlZCAjdGl0bGUgLz5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICZuYnNwO1xyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3snTmFtZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxwICpuZ0lmPVwibW9kZWwucmVzb3VyY2VcIiBjbGFzcz1cIm1lc3NhZ2VcIiAoY2xpY2spPVwidW5sb2NrKCRldmVudClcIiBbaW5uZXJIVE1MXT1cIidVbmxvY2snfHRyYW5zbGF0ZVwiPjwvcD5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZWRpdENvbnRlbnQ/LnRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc1wiIChhdHRhY2hlZCk9XCJhdHRhY2hlZCgkZXZlbnQpXCIgW2Nka1BvcnRhbE91dGxldF09XCJvcHRpb25zXCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5jb250YWlucygncHJpdmlsZWdlcycpXCIgZm9ybUdyb3VwTmFtZT1cInByaXZpbGVnZXNcIj5cclxuICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eydQcml2aWxlZ2VzJ3x0cmFuc2xhdGV9fTwvaDI+XHJcbiAgICAgICAgPG1hdC1zZWxlY3Rpb24tbGlzdCBmb3JtQ29udHJvbE5hbWU9XCJyb2xlc1wiICpuZ0lmPVwicm9sZXNcIj5cclxuICAgICAgICAgIDxtYXQtbGlzdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2Ygcm9sZXNcIiBbdmFsdWVdPVwici5uYW1lXCI+e3tyLnRpdGxlfX08L21hdC1saXN0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Rpb24tbGlzdD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8Yml6ZG9jLWFjZS1pbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ0NvbmRpdGlvbid8dHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwicnVsZVwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgICAgIDxtYXQtaGludD4ge3sgJ1Byb2dyYW1tYWJsZUV4cHJlc3Npb24nfHRyYW5zbGF0ZSB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgPGRpdiBbaW5uZXJIVE1MXT1cIihzdmdbbW9kZWwuZmFtaWx5XXxzYW5pdGl6ZUh0bWwpfHxtb2RlbC5mYW1pbHlcIiAqbmdJZj1cIm1vZGVsLmZhbWlseVwiPjwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ3aWRnZXRDb250ZW50Py50ZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNcIiAoYXR0YWNoZWQpPVwiYXR0YWNoZWQoJGV2ZW50KVwiIFtjZGtQb3J0YWxPdXRsZXRdPVwib3B0aW9uc1wiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbmF0aW5lcj5cclxuIl19