@smartbit4all/ng-client 3.1.73 → 3.1.75

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.
@@ -1,16 +1,16 @@
1
1
  import { Component, Input, ViewChild } from '@angular/core';
2
2
  import { Subject, takeUntil } from 'rxjs';
3
- import { SmartFormWidgetDirection } from '../../smart-form/api/model/smartFormWidgetDirection';
4
3
  import { SmartFilterType } from '../../smart-filter/smart-filter.model';
4
+ import { SmartFormWidgetDirection } from '../../smart-form/api/model/smartFormWidgetDirection';
5
5
  import { FilterExpressionBuilderUiModel } from '../api/model/filterExpressionBuilderUiModel';
6
6
  import { FilterExpressionBuilderApiActions } from '../filterExpressionBuilderApiActions';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "../../smart-form/services/smartform.layout-definition.service";
9
9
  import * as i2 from "../../smart-filter/smart-filter/smart-filter.component";
10
- import * as i3 from "@angular/material/button";
11
- import * as i4 from "../../view-context/smart-ui-action/ui-action-toolbar.component";
12
- import * as i5 from "./components/smart-filter-expression-items/smart-filter-expression-items.component";
13
- import * as i6 from "../../smart-form/smartform.component";
10
+ import * as i3 from "../../view-context/smart-ui-action/ui-action-toolbar.component";
11
+ import * as i4 from "./components/smart-filter-expression-items/smart-filter-expression-items.component";
12
+ import * as i5 from "../../smart-form/smartform.component";
13
+ import * as i6 from "@angular/material/button";
14
14
  import * as i7 from "@angular/common";
15
15
  export class SmartFilterEditorContentComponent {
16
16
  constructor(layoutService) {
@@ -20,51 +20,45 @@ export class SmartFilterEditorContentComponent {
20
20
  this.expressionUiActionModels = [];
21
21
  this.type = FilterExpressionBuilderUiModel.TypeEnum;
22
22
  }
23
+ ngAfterViewInit() {
24
+ if (this.service.model?.type === this.type.Simple) {
25
+ this.smartFilterChangeSubscription = this.smartFilterChild?.service.change
26
+ .pipe(takeUntil(this._destroy$))
27
+ .subscribe(() => {
28
+ this.saveFilter();
29
+ });
30
+ }
31
+ }
23
32
  ngOnInit() {
24
33
  this.service.load();
25
- this.initChildComponents();
26
34
  this.service.modelChanged.pipe(takeUntil(this._destroy$)).subscribe(() => {
27
- this.bindChildComps();
35
+ this.setUp();
28
36
  });
29
37
  }
30
38
  ngOnDestroy() {
31
39
  this._destroy$.next();
32
40
  this._destroy$.complete();
33
41
  }
34
- initChildComponents() {
35
- if (this.service.model?.type === this.type.Simple) {
36
- this.simpleFilterModel = {
37
- data: [],
38
- type: SmartFilterType.SIMPLE,
39
- };
40
- this.smartFilterChild.service.change.pipe(takeUntil(this._destroy$)).subscribe(() => {
41
- this.saveFilter();
42
- });
43
- }
44
- else {
45
- this.smartForm = {
46
- direction: SmartFormWidgetDirection.ROW,
47
- useOnBlurEvent: true,
48
- componentModel: { data: this.service.model?.selectedField },
49
- widgets: [],
50
- };
51
- this.formChild.onBlurSubject?.pipe(takeUntil(this._destroy$)).subscribe(() => {
52
- this.save();
53
- });
42
+ setupSimpleFilter() {
43
+ this.simpleFilterModel = {
44
+ data: this.service.model.model.workplaceList.filters,
45
+ type: SmartFilterType.SIMPLE,
46
+ };
47
+ if (!this.smartFilterChangeSubscription) {
54
48
  }
55
49
  }
56
- bindChildComps() {
50
+ setUp() {
57
51
  if (this.service.model?.type === this.type.Simple) {
58
- this.smartFilterChild.filter = {
59
- data: this.service.model.model.workplaceList.filters,
60
- type: SmartFilterType.SIMPLE,
61
- };
52
+ this.setupSimpleFilter();
62
53
  }
63
54
  else {
64
55
  this.constructUiActionModels();
65
56
  if (this.service.model.selectedFieldEditor) {
66
57
  this.constructForm();
67
58
  }
59
+ else {
60
+ this.smartForm = undefined;
61
+ }
68
62
  }
69
63
  }
70
64
  constructUiActionModels() {
@@ -96,12 +90,20 @@ export class SmartFilterEditorContentComponent {
96
90
  let generatedWidgets = this.layoutService.render({
97
91
  layoutDefinitions: this.service.model?.selectedFieldEditor?.layoutDef?.widgets,
98
92
  });
99
- this.formChild.smartForm = {
93
+ this.smartForm = {
100
94
  direction: SmartFormWidgetDirection.ROW,
101
95
  useOnBlurEvent: true,
102
96
  componentModel: { data: this.service.model?.selectedField },
103
97
  widgets: generatedWidgets,
104
98
  };
99
+ if (this.smartformChangeSubscription) {
100
+ this.smartformChangeSubscription.unsubscribe();
101
+ }
102
+ this.smartformChangeSubscription = this.formChild?.onBlurSubject
103
+ ?.pipe(takeUntil(this._destroy$))
104
+ .subscribe(() => {
105
+ this.save();
106
+ });
105
107
  }
106
108
  save() {
107
109
  this.formChild?.submitForm(false);
@@ -142,10 +144,10 @@ export class SmartFilterEditorContentComponent {
142
144
  }
143
145
  }
144
146
  SmartFilterEditorContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFilterEditorContentComponent, deps: [{ token: i1.SmartformLayoutDefinitionService }], target: i0.ɵɵFactoryTarget.Component });
145
- SmartFilterEditorContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartFilterEditorContentComponent, selector: "smart-filter-expression-editor", inputs: { service: "service" }, viewQueries: [{ propertyName: "formChild", first: true, predicate: ["form"], descendants: true }, { propertyName: "smartFilterChild", first: true, predicate: ["smartFilter"], descendants: true }], ngImport: i0, template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smart-filter #smartFilter [filter]=\"simpleFilterModel\"></smart-filter>\r\n <button (click)=\"saveFilter()\" mat-raised-button color=\"primary\">Ment\u00E9s</button>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"save()\" mat-raised-button color=\"primary\">Ment\u00E9s</button>\r\n <button (click)=\"remove()\" mat-button color=\"accent\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"], components: [{ type: i2.SmartFilterComponent, selector: "smart-filter", inputs: ["filter"] }, { type: i3.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"] }, { type: i4.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService"] }, { type: i5.SmartFilterExpressionItemsComponent, selector: "app-expression-items", inputs: ["items"] }, { type: i6.SmartformComponent, selector: "smartform", inputs: ["smartForm"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
147
+ SmartFilterEditorContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartFilterEditorContentComponent, selector: "smart-filter-expression-editor", inputs: { service: "service" }, viewQueries: [{ propertyName: "formChild", first: true, predicate: ["form"], descendants: true }, { propertyName: "smartFilterChild", first: true, predicate: ["smartFilter"], descendants: true }], ngImport: i0, template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smart-filter #smartFilter [filter]=\"simpleFilterModel\"></smart-filter>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-button color=\"accent\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"], components: [{ type: i2.SmartFilterComponent, selector: "smart-filter", inputs: ["filter"] }, { type: i3.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService"] }, { type: i4.SmartFilterExpressionItemsComponent, selector: "app-expression-items", inputs: ["items"] }, { type: i5.SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { type: i6.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"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
146
148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFilterEditorContentComponent, decorators: [{
147
149
  type: Component,
148
- args: [{ selector: 'smart-filter-expression-editor', template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smart-filter #smartFilter [filter]=\"simpleFilterModel\"></smart-filter>\r\n <button (click)=\"saveFilter()\" mat-raised-button color=\"primary\">Ment\u00E9s</button>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"save()\" mat-raised-button color=\"primary\">Ment\u00E9s</button>\r\n <button (click)=\"remove()\" mat-button color=\"accent\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"] }]
150
+ args: [{ selector: 'smart-filter-expression-editor', template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smart-filter #smartFilter [filter]=\"simpleFilterModel\"></smart-filter>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-button color=\"accent\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"] }]
149
151
  }], ctorParameters: function () { return [{ type: i1.SmartformLayoutDefinitionService }]; }, propDecorators: { service: [{
150
152
  type: Input
151
153
  }], formChild: [{
@@ -155,4 +157,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
155
157
  type: ViewChild,
156
158
  args: ['smartFilter']
157
159
  }] } });
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsdGVyLWVkaXRvci1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LWZpbHRlci1lZGl0b3Ivc21hcnQtZmlsdGVyLWVkaXRvci1jb250ZW50L3NtYXJ0LWZpbHRlci1lZGl0b3ItY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1maWx0ZXItZWRpdG9yL3NtYXJ0LWZpbHRlci1lZGl0b3ItY29udGVudC9zbWFydC1maWx0ZXItZWRpdG9yLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFNMUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFHL0YsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRTdGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7QUFRekYsTUFBTSxPQUFPLGlDQUFpQztJQWU1QyxZQUFvQixhQUErQztRQUEvQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFkM0QsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBR2pELG1CQUFjLEdBQW9CLEVBQUUsQ0FBQztRQUNyQyw2QkFBd0IsR0FBb0IsRUFBRSxDQUFDO1FBUS9DLFNBQUksR0FBRyw4QkFBOEIsQ0FBQyxRQUFRLENBQUM7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LEtBQUs7Z0JBS2EsU0FBUztzQkFBM0IsU0FBUzt1QkFBQyxNQUFNO2dCQUdTLGdCQUFnQjtzQkFBekMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LWZpbHRlci1lZGl0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFNtYXJ0Zm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NtYXJ0LWZvcm0vc21hcnRmb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNtYXJ0Zm9ybUxheW91dERlZmluaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc21hcnQtZm9ybS9zZXJ2aWNlcy9zbWFydGZvcm0ubGF5b3V0LWRlZmluaXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFVpQWN0aW9uIH0gZnJvbSAnLi4vLi4vdmlldy1jb250ZXh0L2FwaS9tb2RlbC91aUFjdGlvbic7XHJcbmltcG9ydCB7IFNtYXJ0Rm9ybVdpZGdldCB9IGZyb20gJy4uLy4uL3NtYXJ0LWZvcm0vc21hcnRmb3JtLmZvcm0tbW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1XaWRnZXREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9zbWFydC1mb3JtL2FwaS9tb2RlbC9zbWFydEZvcm1XaWRnZXREaXJlY3Rpb24nO1xyXG5pbXBvcnQgeyBVaUFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi91aS1hY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydEZvcm0gfSBmcm9tICcuLi8uLi9zbWFydC1mb3JtL3NtYXJ0Zm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0RmlsdGVyLCBTbWFydEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9zbWFydC1maWx0ZXIvc21hcnQtZmlsdGVyLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJVaU1vZGVsIH0gZnJvbSAnLi4vYXBpL21vZGVsL2ZpbHRlckV4cHJlc3Npb25CdWlsZGVyVWlNb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25GaWVsZCB9IGZyb20gJy4uLy4uL3NtYXJ0LWZpbHRlci9hcGkvZmlsdGVyL21vZGVsL2ZpbHRlckV4cHJlc3Npb25GaWVsZCc7XHJcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25CdWlsZGVyQXBpQWN0aW9ucyB9IGZyb20gJy4uL2ZpbHRlckV4cHJlc3Npb25CdWlsZGVyQXBpQWN0aW9ucyc7XHJcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc21hcnQtZmlsdGVyL3NtYXJ0LWZpbHRlci9zbWFydC1maWx0ZXIuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc21hcnQtZmlsdGVyLWV4cHJlc3Npb24tZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZmlsdGVyLWVkaXRvci1jb250ZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1maWx0ZXItZWRpdG9yLWNvbnRlbnQuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRGaWx0ZXJFZGl0b3JDb250ZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBASW5wdXQoKSBzZXJ2aWNlITogU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlO1xyXG5cclxuICB1aUFjdGlvbk1vZGVsczogVWlBY3Rpb25Nb2RlbFtdID0gW107XHJcbiAgZXhwcmVzc2lvblVpQWN0aW9uTW9kZWxzOiBVaUFjdGlvbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZm9ybScpIGZvcm1DaGlsZD86IFNtYXJ0Zm9ybUNvbXBvbmVudDtcclxuICBzbWFydEZvcm0/OiBTbWFydEZvcm07XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NtYXJ0RmlsdGVyJykgc21hcnRGaWx0ZXJDaGlsZD86IFNtYXJ0RmlsdGVyQ29tcG9uZW50O1xyXG4gIHNpbXBsZUZpbHRlck1vZGVsPzogU21hcnRGaWx0ZXI7XHJcblxyXG4gIHR5cGUgPSBGaWx0ZXJFeHByZXNzaW9uQnVpbGRlclVpTW9kZWwuVHlwZUVudW07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGF5b3V0U2VydmljZTogU21hcnRmb3JtTGF5b3V0RGVmaW5pdGlvblNlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmxvYWQoKTtcclxuICAgIHRoaXMuaW5pdENoaWxkQ29tcG9uZW50cygpO1xyXG4gICAgdGhpcy5zZXJ2aWNlLm1vZGVsQ2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYmluZENoaWxkQ29tcHMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBpbml0Q2hpbGRDb21wb25lbnRzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VydmljZS5tb2RlbD8udHlwZSA9PT0gdGhpcy50eXBlLlNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNpbXBsZUZpbHRlck1vZGVsID0ge1xyXG4gICAgICAgIGRhdGE6IFtdLFxyXG4gICAgICAgIHR5cGU6IFNtYXJ0RmlsdGVyVHlwZS5TSU1QTEUsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc21hcnRGaWx0ZXJDaGlsZCEuc2VydmljZS5jaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2ZUZpbHRlcigpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc21hcnRGb3JtID0ge1xyXG4gICAgICAgIGRpcmVjdGlvbjogU21hcnRGb3JtV2lkZ2V0RGlyZWN0aW9uLlJPVyxcclxuICAgICAgICB1c2VPbkJsdXJFdmVudDogdHJ1ZSxcclxuICAgICAgICBjb21wb25lbnRNb2RlbDogeyBkYXRhOiB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGQgfSxcclxuICAgICAgICB3aWRnZXRzOiBbXSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5mb3JtQ2hpbGQhLm9uQmx1clN1YmplY3Q/LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNhdmUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiaW5kQ2hpbGRDb21wcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlcnZpY2UubW9kZWw/LnR5cGUgPT09IHRoaXMudHlwZS5TaW1wbGUpIHtcclxuICAgICAgdGhpcy5zbWFydEZpbHRlckNoaWxkIS5maWx0ZXIgPSB7XHJcbiAgICAgICAgZGF0YTogdGhpcy5zZXJ2aWNlLm1vZGVsLm1vZGVsIS53b3JrcGxhY2VMaXN0IS5maWx0ZXJzIGFzIEZpbHRlckV4cHJlc3Npb25GaWVsZFtdLFxyXG4gICAgICAgIHR5cGU6IFNtYXJ0RmlsdGVyVHlwZS5TSU1QTEUsXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdFVpQWN0aW9uTW9kZWxzKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZXJ2aWNlIS5tb2RlbCEuc2VsZWN0ZWRGaWVsZEVkaXRvcikge1xyXG4gICAgICAgIHRoaXMuY29uc3RydWN0Rm9ybSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RVaUFjdGlvbk1vZGVscygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlcnZpY2UubW9kZWw/LnBvc3NpYmxlQWN0aW9ucykge1xyXG4gICAgICB0aGlzLnVpQWN0aW9uTW9kZWxzID0gdGhpcy5zZXJ2aWNlLm1vZGVsLnBvc3NpYmxlQWN0aW9ucy5tYXAoKGFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc2VydmljZVRvVXNlOiB0aGlzLnNlcnZpY2UsXHJcbiAgICAgICAgICB1aUFjdGlvbjogYWN0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGRFZGl0b3I/LnBvc3NpYmxlQWN0aW9ucykge1xyXG4gICAgICB0aGlzLmV4cHJlc3Npb25VaUFjdGlvbk1vZGVscyA9IHRoaXMuc2VydmljZS5tb2RlbD8uc2VsZWN0ZWRGaWVsZEVkaXRvci5wb3NzaWJsZUFjdGlvbnMubWFwKFxyXG4gICAgICAgICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICAgIGxldCBjb3BpZWRVaUFjdGlvbjogVWlBY3Rpb24gPSB7fTtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHVpQWN0aW9uKS5tYXAoKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIChjb3BpZWRVaUFjdGlvbiBhcyBhbnkpW2tleV0gPSAodWlBY3Rpb24gYXMgYW55KVtrZXldO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBjb3BpZWRVaUFjdGlvbi5wYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2VydmljZVRvVXNlOiB0aGlzLnNlcnZpY2UsXHJcbiAgICAgICAgICAgIHVpQWN0aW9uOiBjb3BpZWRVaUFjdGlvbixcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0Rm9ybSgpOiB2b2lkIHtcclxuICAgIGxldCBnZW5lcmF0ZWRXaWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdID0gdGhpcy5sYXlvdXRTZXJ2aWNlLnJlbmRlcih7XHJcbiAgICAgIGxheW91dERlZmluaXRpb25zOiB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGRFZGl0b3I/LmxheW91dERlZj8ud2lkZ2V0cyxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9ybUNoaWxkIS5zbWFydEZvcm0gPSB7XHJcbiAgICAgIGRpcmVjdGlvbjogU21hcnRGb3JtV2lkZ2V0RGlyZWN0aW9uLlJPVyxcclxuICAgICAgdXNlT25CbHVyRXZlbnQ6IHRydWUsXHJcbiAgICAgIGNvbXBvbmVudE1vZGVsOiB7IGRhdGE6IHRoaXMuc2VydmljZS5tb2RlbD8uc2VsZWN0ZWRGaWVsZCB9LFxyXG4gICAgICB3aWRnZXRzOiBnZW5lcmF0ZWRXaWRnZXRzLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHNhdmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1DaGlsZD8uc3VibWl0Rm9ybShmYWxzZSk7XHJcbiAgICB0aGlzLnNlcnZpY2UucGVmb3JtV2lkZ2V0QWN0aW9uKHtcclxuICAgICAgY29kZTogJ1VQREFURV9GSUxURVJfRVhQUkVTU0lPTicsXHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIG1vZGVsOiB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGQsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VydmljZS5wZWZvcm1XaWRnZXRBY3Rpb24oe1xyXG4gICAgICBjb2RlOiAnUkVNT1ZFX0ZJTFRFUl9FWFBSRVNTSU9OJyxcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgbW9kZWw6IHRoaXMuc2VydmljZS5tb2RlbD8uc2VsZWN0ZWRGaWVsZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmlsdGVyZWRVaUFjdGlvbk1vZGVscyhmaWx0ZXJQcmVkaWNhdGU6ICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IGJvb2xlYW4pOiBVaUFjdGlvbk1vZGVsW10ge1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuc2VydmljZS5tb2RlbCEucG9zc2libGVBY3Rpb25zIS5maWx0ZXIoZmlsdGVyUHJlZGljYXRlKS5tYXAoKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4ge1xyXG4gICAgLy8gICByZXR1cm4ge1xyXG4gICAgLy8gICAgIHNlcnZpY2VUb1VzZTogdGhpcy5zZXJ2aWNlLFxyXG4gICAgLy8gICAgIHVpQWN0aW9uLFxyXG4gICAgLy8gICB9O1xyXG4gICAgLy8gfSk7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBhc3luYyBzYXZlRmlsdGVyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHNtYXJ0RmlsdGVyID0gYXdhaXQgdGhpcy5zbWFydEZpbHRlckNoaWxkPy5zdWJtaXQoKTtcclxuICAgIHRoaXMuc2VydmljZS5tb2RlbCEubW9kZWwhLndvcmtwbGFjZUxpc3QhLmZpbHRlcnMgPVxyXG4gICAgICBzbWFydEZpbHRlcj8uZGF0YSBhcyBGaWx0ZXJFeHByZXNzaW9uRmllbGRbXTtcclxuXHJcbiAgICB0aGlzLnNlcnZpY2UucGVyZm9ybVVpQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgIGNvZGU6IEZpbHRlckV4cHJlc3Npb25CdWlsZGVyQXBpQWN0aW9ucy5TQVZFX0VYUFJFU1NJT05fRklFTERfTElTVCxcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgbW9kZWw6IHRoaXMuc2VydmljZS5tb2RlbCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidGFyZ2V0R3JvdXBDb250ZW50Q29udGFpbmVyXCI+XHJcbiAgPGgzPnt7IHNlcnZpY2UubW9kZWw/Lm1vZGVsPy5sYWJlbCB9fTwvaDM+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJzZXJ2aWNlLm1vZGVsPy50eXBlID09PSB0eXBlLlNpbXBsZTsgdGhlbiBzaW1wbGVGaWx0ZXI7IGVsc2UgY29tcGxleEZpbHRlclwiPjwvZGl2PlxyXG5cclxuICA8bmctdGVtcGxhdGUgI3NpbXBsZUZpbHRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJleHByZXNzaW9uc0NvbnRhaW5lclwiPlxyXG4gICAgICA8c21hcnQtZmlsdGVyICNzbWFydEZpbHRlciBbZmlsdGVyXT1cInNpbXBsZUZpbHRlck1vZGVsXCI+PC9zbWFydC1maWx0ZXI+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cInNhdmVGaWx0ZXIoKVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPk1lbnTDqXM8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlICNjb21wbGV4RmlsdGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cInVpQWN0aW9uc0JhclwiICpuZ0lmPVwiIXNlcnZpY2UubW9kZWw/LnJlYWRPbmx5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ1aUFjdGlvbnNJbnNpZGVPZkJhclwiPlxyXG4gICAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhciBbdWlBY3Rpb25Nb2RlbHNdPVwidWlBY3Rpb25Nb2RlbHNcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgIHNlcnZpY2U/Lm1vZGVsPy5tb2RlbD8ud29ya3BsYWNlTGlzdD8uZmlsdGVycz8ubGVuZ3RoO1xyXG4gICAgICAgIHRoZW4gd2l0aFBhcmFtZXRlcnM7XHJcbiAgICAgICAgZWxzZSB3aXRob3V0UGFyYW1ldGVyc1xyXG4gICAgICBcIlxyXG4gICAgPjwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlICN3aXRob3V0UGFyYW1ldGVycz5cclxuICAgICAgPGRpdiBjbGFzcz1cIndpdGhvdXRQYXJhbWV0ZXJzQ29udGFpbmVyXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtYm9keVwiPiBNw6lnIG5pbmNzIG1lZ2FkdmEgcGFyYW3DqXRlciA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjd2l0aFBhcmFtZXRlcnM+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3aXRoUGFyYW1ldGVyc0NvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhwcmVzc2lvbnNDb250YWluZXJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJzZXJ2aWNlPy5tb2RlbD8ubW9kZWw/LndvcmtwbGFjZUxpc3Q/LmZpbHRlcnM/Lmxlbmd0aFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGFwcC1leHByZXNzaW9uLWl0ZW1zXHJcbiAgICAgICAgICAgIFtpdGVtc109XCIoc2VydmljZS5tb2RlbD8ubW9kZWw/LndvcmtwbGFjZUxpc3QpIS5maWx0ZXJzXCJcclxuICAgICAgICAgID48L2FwcC1leHByZXNzaW9uLWl0ZW1zPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleHByZXNzaW9uRWRpdG9yQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8c21hcnRmb3JtICNmb3JtIFtzbWFydEZvcm1dPVwic21hcnRGb3JtXCI+PC9zbWFydGZvcm0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRGb3JtXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPk1lbnTDqXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlKClcIiBtYXQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCI+VMO2cmzDqXM8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcbiJdfQ==
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsdGVyLWVkaXRvci1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LWZpbHRlci1lZGl0b3Ivc21hcnQtZmlsdGVyLWVkaXRvci1jb250ZW50L3NtYXJ0LWZpbHRlci1lZGl0b3ItY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1maWx0ZXItZWRpdG9yL3NtYXJ0LWZpbHRlci1lZGl0b3ItY29udGVudC9zbWFydC1maWx0ZXItZWRpdG9yLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUYsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhELE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUVyRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQU8vRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7O0FBUXpGLE1BQU0sT0FBTyxpQ0FBaUM7SUFlNUMsWUFBb0IsYUFBK0M7UUFBL0Msa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBZDNELGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUdqRCxtQkFBYyxHQUFvQixFQUFFLENBQUM7UUFDckMsNkJBQXdCLEdBQW9CLEVBQUUsQ0FBQztRQVEvQyxTQUFJLEdBQUcsOEJBQThCLENBQUMsUUFBUSxDQUFD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dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25GaWVsZCB9IGZyb20gJy4uLy4uL3NtYXJ0LWZpbHRlci9hcGkvZmlsdGVyL21vZGVsL2ZpbHRlckV4cHJlc3Npb25GaWVsZCc7XHJcbmltcG9ydCB7IFNtYXJ0RmlsdGVyLCBTbWFydEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9zbWFydC1maWx0ZXIvc21hcnQtZmlsdGVyLm1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zbWFydC1maWx0ZXIvc21hcnQtZmlsdGVyL3NtYXJ0LWZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1XaWRnZXREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9zbWFydC1mb3JtL2FwaS9tb2RlbC9zbWFydEZvcm1XaWRnZXREaXJlY3Rpb24nO1xyXG5pbXBvcnQgeyBTbWFydGZvcm1MYXlvdXREZWZpbml0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NtYXJ0LWZvcm0vc2VydmljZXMvc21hcnRmb3JtLmxheW91dC1kZWZpbml0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydGZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9zbWFydC1mb3JtL3NtYXJ0Zm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1XaWRnZXQgfSBmcm9tICcuLi8uLi9zbWFydC1mb3JtL3NtYXJ0Zm9ybS5mb3JtLW1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRGb3JtIH0gZnJvbSAnLi4vLi4vc21hcnQtZm9ybS9zbWFydGZvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbiB9IGZyb20gJy4uLy4uL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvdWlBY3Rpb24nO1xyXG5pbXBvcnQgeyBVaUFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi91aS1hY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uQnVpbGRlclVpTW9kZWwgfSBmcm9tICcuLi9hcGkvbW9kZWwvZmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJVaU1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJBcGlBY3Rpb25zIH0gZnJvbSAnLi4vZmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJBcGlBY3Rpb25zJztcclxuaW1wb3J0IHsgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtZmlsdGVyLWVkaXRvci5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc21hcnQtZmlsdGVyLWV4cHJlc3Npb24tZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZmlsdGVyLWVkaXRvci1jb250ZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1maWx0ZXItZWRpdG9yLWNvbnRlbnQuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRGaWx0ZXJFZGl0b3JDb250ZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBASW5wdXQoKSBzZXJ2aWNlITogU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlO1xyXG5cclxuICB1aUFjdGlvbk1vZGVsczogVWlBY3Rpb25Nb2RlbFtdID0gW107XHJcbiAgZXhwcmVzc2lvblVpQWN0aW9uTW9kZWxzOiBVaUFjdGlvbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZm9ybScpIGZvcm1DaGlsZD86IFNtYXJ0Zm9ybUNvbXBvbmVudDtcclxuICBzbWFydEZvcm0/OiBTbWFydEZvcm07XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NtYXJ0RmlsdGVyJykgc21hcnRGaWx0ZXJDaGlsZD86IFNtYXJ0RmlsdGVyQ29tcG9uZW50O1xyXG4gIHNpbXBsZUZpbHRlck1vZGVsPzogU21hcnRGaWx0ZXI7XHJcblxyXG4gIHR5cGUgPSBGaWx0ZXJFeHByZXNzaW9uQnVpbGRlclVpTW9kZWwuVHlwZUVudW07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGF5b3V0U2VydmljZTogU21hcnRmb3JtTGF5b3V0RGVmaW5pdGlvblNlcnZpY2UpIHt9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlcnZpY2UubW9kZWw/LnR5cGUgPT09IHRoaXMudHlwZS5TaW1wbGUpIHtcclxuICAgICAgdGhpcy5zbWFydEZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuc21hcnRGaWx0ZXJDaGlsZD8uc2VydmljZS5jaGFuZ2VcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZlRmlsdGVyKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzbWFydEZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBzbWFydGZvcm1DaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmxvYWQoKTtcclxuICAgIHRoaXMuc2VydmljZS5tb2RlbENoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldFVwKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBTaW1wbGVGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNpbXBsZUZpbHRlck1vZGVsID0ge1xyXG4gICAgICBkYXRhOiB0aGlzLnNlcnZpY2UubW9kZWwhLm1vZGVsIS53b3JrcGxhY2VMaXN0IS5maWx0ZXJzIGFzIEZpbHRlckV4cHJlc3Npb25GaWVsZFtdLFxyXG4gICAgICB0eXBlOiBTbWFydEZpbHRlclR5cGUuU0lNUExFLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIXRoaXMuc21hcnRGaWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24pIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFVwKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VydmljZS5tb2RlbD8udHlwZSA9PT0gdGhpcy50eXBlLlNpbXBsZSkge1xyXG4gICAgICB0aGlzLnNldHVwU2ltcGxlRmlsdGVyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdFVpQWN0aW9uTW9kZWxzKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZXJ2aWNlIS5tb2RlbCEuc2VsZWN0ZWRGaWVsZEVkaXRvcikge1xyXG4gICAgICAgIHRoaXMuY29uc3RydWN0Rm9ybSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RVaUFjdGlvbk1vZGVscygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlcnZpY2UubW9kZWw/LnBvc3NpYmxlQWN0aW9ucykge1xyXG4gICAgICB0aGlzLnVpQWN0aW9uTW9kZWxzID0gdGhpcy5zZXJ2aWNlLm1vZGVsLnBvc3NpYmxlQWN0aW9ucy5tYXAoKGFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc2VydmljZVRvVXNlOiB0aGlzLnNlcnZpY2UsXHJcbiAgICAgICAgICB1aUFjdGlvbjogYWN0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGRFZGl0b3I/LnBvc3NpYmxlQWN0aW9ucykge1xyXG4gICAgICB0aGlzLmV4cHJlc3Npb25VaUFjdGlvbk1vZGVscyA9IHRoaXMuc2VydmljZS5tb2RlbD8uc2VsZWN0ZWRGaWVsZEVkaXRvci5wb3NzaWJsZUFjdGlvbnMubWFwKFxyXG4gICAgICAgICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICAgIGxldCBjb3BpZWRVaUFjdGlvbjogVWlBY3Rpb24gPSB7fTtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHVpQWN0aW9uKS5tYXAoKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIChjb3BpZWRVaUFjdGlvbiBhcyBhbnkpW2tleV0gPSAodWlBY3Rpb24gYXMgYW55KVtrZXldO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBjb3BpZWRVaUFjdGlvbi5wYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2VydmljZVRvVXNlOiB0aGlzLnNlcnZpY2UsXHJcbiAgICAgICAgICAgIHVpQWN0aW9uOiBjb3BpZWRVaUFjdGlvbixcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0Rm9ybSgpOiB2b2lkIHtcclxuICAgIGxldCBnZW5lcmF0ZWRXaWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdID0gdGhpcy5sYXlvdXRTZXJ2aWNlLnJlbmRlcih7XHJcbiAgICAgIGxheW91dERlZmluaXRpb25zOiB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGRFZGl0b3I/LmxheW91dERlZj8ud2lkZ2V0cyxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc21hcnRGb3JtID0ge1xyXG4gICAgICBkaXJlY3Rpb246IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbi5ST1csXHJcbiAgICAgIHVzZU9uQmx1ckV2ZW50OiB0cnVlLFxyXG4gICAgICBjb21wb25lbnRNb2RlbDogeyBkYXRhOiB0aGlzLnNlcnZpY2UubW9kZWw/LnNlbGVjdGVkRmllbGQgfSxcclxuICAgICAgd2lkZ2V0czogZ2VuZXJhdGVkV2lkZ2V0cyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRmb3JtQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc21hcnRmb3JtQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zbWFydGZvcm1DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1DaGlsZD8ub25CbHVyU3ViamVjdFxyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zYXZlKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNoaWxkPy5zdWJtaXRGb3JtKGZhbHNlKTtcclxuICAgIHRoaXMuc2VydmljZS5wZWZvcm1XaWRnZXRBY3Rpb24oe1xyXG4gICAgICBjb2RlOiAnVVBEQVRFX0ZJTFRFUl9FWFBSRVNTSU9OJyxcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgbW9kZWw6IHRoaXMuc2VydmljZS5tb2RlbD8uc2VsZWN0ZWRGaWVsZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXJ2aWNlLnBlZm9ybVdpZGdldEFjdGlvbih7XHJcbiAgICAgIGNvZGU6ICdSRU1PVkVfRklMVEVSX0VYUFJFU1NJT04nLFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBtb2RlbDogdGhpcy5zZXJ2aWNlLm1vZGVsPy5zZWxlY3RlZEZpZWxkLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRGaWx0ZXJlZFVpQWN0aW9uTW9kZWxzKGZpbHRlclByZWRpY2F0ZTogKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4gYm9vbGVhbik6IFVpQWN0aW9uTW9kZWxbXSB7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5zZXJ2aWNlLm1vZGVsIS5wb3NzaWJsZUFjdGlvbnMhLmZpbHRlcihmaWx0ZXJQcmVkaWNhdGUpLm1hcCgodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAvLyAgIHJldHVybiB7XHJcbiAgICAvLyAgICAgc2VydmljZVRvVXNlOiB0aGlzLnNlcnZpY2UsXHJcbiAgICAvLyAgICAgdWlBY3Rpb24sXHJcbiAgICAvLyAgIH07XHJcbiAgICAvLyB9KTtcclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNhdmVGaWx0ZXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgc21hcnRGaWx0ZXIgPSBhd2FpdCB0aGlzLnNtYXJ0RmlsdGVyQ2hpbGQ/LnN1Ym1pdCgpO1xyXG4gICAgdGhpcy5zZXJ2aWNlLm1vZGVsIS5tb2RlbCEud29ya3BsYWNlTGlzdCEuZmlsdGVycyA9XHJcbiAgICAgIHNtYXJ0RmlsdGVyPy5kYXRhIGFzIEZpbHRlckV4cHJlc3Npb25GaWVsZFtdO1xyXG5cclxuICAgIHRoaXMuc2VydmljZS5wZXJmb3JtVWlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgY29kZTogRmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJBcGlBY3Rpb25zLlNBVkVfRVhQUkVTU0lPTl9GSUVMRF9MSVNULFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBtb2RlbDogdGhpcy5zZXJ2aWNlLm1vZGVsLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0YXJnZXRHcm91cENvbnRlbnRDb250YWluZXJcIj5cclxuICA8aDM+e3sgc2VydmljZS5tb2RlbD8ubW9kZWw/LmxhYmVsIH19PC9oMz5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInNlcnZpY2UubW9kZWw/LnR5cGUgPT09IHR5cGUuU2ltcGxlOyB0aGVuIHNpbXBsZUZpbHRlcjsgZWxzZSBjb21wbGV4RmlsdGVyXCI+PC9kaXY+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjc2ltcGxlRmlsdGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cImV4cHJlc3Npb25zQ29udGFpbmVyXCI+XHJcbiAgICAgIDxzbWFydC1maWx0ZXIgI3NtYXJ0RmlsdGVyIFtmaWx0ZXJdPVwic2ltcGxlRmlsdGVyTW9kZWxcIj48L3NtYXJ0LWZpbHRlcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlICNjb21wbGV4RmlsdGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cInVpQWN0aW9uc0JhclwiICpuZ0lmPVwiIXNlcnZpY2UubW9kZWw/LnJlYWRPbmx5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ1aUFjdGlvbnNJbnNpZGVPZkJhclwiPlxyXG4gICAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhciBbdWlBY3Rpb25Nb2RlbHNdPVwidWlBY3Rpb25Nb2RlbHNcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgIHNlcnZpY2U/Lm1vZGVsPy5tb2RlbD8ud29ya3BsYWNlTGlzdD8uZmlsdGVycz8ubGVuZ3RoO1xyXG4gICAgICAgIHRoZW4gd2l0aFBhcmFtZXRlcnM7XHJcbiAgICAgICAgZWxzZSB3aXRob3V0UGFyYW1ldGVyc1xyXG4gICAgICBcIlxyXG4gICAgPjwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlICN3aXRob3V0UGFyYW1ldGVycz5cclxuICAgICAgPGRpdiBjbGFzcz1cIndpdGhvdXRQYXJhbWV0ZXJzQ29udGFpbmVyXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtYm9keVwiPiBNw6lnIG5pbmNzIG1lZ2FkdmEgcGFyYW3DqXRlciA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjd2l0aFBhcmFtZXRlcnM+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3aXRoUGFyYW1ldGVyc0NvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhwcmVzc2lvbnNDb250YWluZXJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJzZXJ2aWNlPy5tb2RlbD8ubW9kZWw/LndvcmtwbGFjZUxpc3Q/LmZpbHRlcnM/Lmxlbmd0aFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGFwcC1leHByZXNzaW9uLWl0ZW1zXHJcbiAgICAgICAgICAgIFtpdGVtc109XCIoc2VydmljZS5tb2RlbD8ubW9kZWw/LndvcmtwbGFjZUxpc3QpIS5maWx0ZXJzXCJcclxuICAgICAgICAgID48L2FwcC1leHByZXNzaW9uLWl0ZW1zPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleHByZXNzaW9uRWRpdG9yQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8c21hcnRmb3JtICNmb3JtIFtzbWFydEZvcm1dPVwic21hcnRGb3JtXCI+PC9zbWFydGZvcm0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRGb3JtXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJlbW92ZSgpXCIgbWF0LWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiPlTDtnJsw6lzPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -13171,53 +13171,45 @@ class SmartFilterEditorContentComponent {
13171
13171
  this.expressionUiActionModels = [];
13172
13172
  this.type = FilterExpressionBuilderUiModel.TypeEnum;
13173
13173
  }
13174
+ ngAfterViewInit() {
13175
+ var _a, _b;
13176
+ if (((_a = this.service.model) === null || _a === void 0 ? void 0 : _a.type) === this.type.Simple) {
13177
+ this.smartFilterChangeSubscription = (_b = this.smartFilterChild) === null || _b === void 0 ? void 0 : _b.service.change.pipe(takeUntil(this._destroy$)).subscribe(() => {
13178
+ this.saveFilter();
13179
+ });
13180
+ }
13181
+ }
13174
13182
  ngOnInit() {
13175
13183
  this.service.load();
13176
- this.initChildComponents();
13177
13184
  this.service.modelChanged.pipe(takeUntil(this._destroy$)).subscribe(() => {
13178
- this.bindChildComps();
13185
+ this.setUp();
13179
13186
  });
13180
13187
  }
13181
13188
  ngOnDestroy() {
13182
13189
  this._destroy$.next();
13183
13190
  this._destroy$.complete();
13184
13191
  }
13185
- initChildComponents() {
13186
- var _a, _b, _c;
13187
- if (((_a = this.service.model) === null || _a === void 0 ? void 0 : _a.type) === this.type.Simple) {
13188
- this.simpleFilterModel = {
13189
- data: [],
13190
- type: SmartFilterType.SIMPLE,
13191
- };
13192
- this.smartFilterChild.service.change.pipe(takeUntil(this._destroy$)).subscribe(() => {
13193
- this.saveFilter();
13194
- });
13195
- }
13196
- else {
13197
- this.smartForm = {
13198
- direction: SmartFormWidgetDirection.ROW,
13199
- useOnBlurEvent: true,
13200
- componentModel: { data: (_b = this.service.model) === null || _b === void 0 ? void 0 : _b.selectedField },
13201
- widgets: [],
13202
- };
13203
- (_c = this.formChild.onBlurSubject) === null || _c === void 0 ? void 0 : _c.pipe(takeUntil(this._destroy$)).subscribe(() => {
13204
- this.save();
13205
- });
13192
+ setupSimpleFilter() {
13193
+ this.simpleFilterModel = {
13194
+ data: this.service.model.model.workplaceList.filters,
13195
+ type: SmartFilterType.SIMPLE,
13196
+ };
13197
+ if (!this.smartFilterChangeSubscription) {
13206
13198
  }
13207
13199
  }
13208
- bindChildComps() {
13200
+ setUp() {
13209
13201
  var _a;
13210
13202
  if (((_a = this.service.model) === null || _a === void 0 ? void 0 : _a.type) === this.type.Simple) {
13211
- this.smartFilterChild.filter = {
13212
- data: this.service.model.model.workplaceList.filters,
13213
- type: SmartFilterType.SIMPLE,
13214
- };
13203
+ this.setupSimpleFilter();
13215
13204
  }
13216
13205
  else {
13217
13206
  this.constructUiActionModels();
13218
13207
  if (this.service.model.selectedFieldEditor) {
13219
13208
  this.constructForm();
13220
13209
  }
13210
+ else {
13211
+ this.smartForm = undefined;
13212
+ }
13221
13213
  }
13222
13214
  }
13223
13215
  constructUiActionModels() {
@@ -13248,16 +13240,22 @@ class SmartFilterEditorContentComponent {
13248
13240
  }
13249
13241
  }
13250
13242
  constructForm() {
13251
- var _a, _b, _c, _d;
13243
+ var _a, _b, _c, _d, _e, _f;
13252
13244
  let generatedWidgets = this.layoutService.render({
13253
13245
  layoutDefinitions: (_c = (_b = (_a = this.service.model) === null || _a === void 0 ? void 0 : _a.selectedFieldEditor) === null || _b === void 0 ? void 0 : _b.layoutDef) === null || _c === void 0 ? void 0 : _c.widgets,
13254
13246
  });
13255
- this.formChild.smartForm = {
13247
+ this.smartForm = {
13256
13248
  direction: SmartFormWidgetDirection.ROW,
13257
13249
  useOnBlurEvent: true,
13258
13250
  componentModel: { data: (_d = this.service.model) === null || _d === void 0 ? void 0 : _d.selectedField },
13259
13251
  widgets: generatedWidgets,
13260
13252
  };
13253
+ if (this.smartformChangeSubscription) {
13254
+ this.smartformChangeSubscription.unsubscribe();
13255
+ }
13256
+ this.smartformChangeSubscription = (_f = (_e = this.formChild) === null || _e === void 0 ? void 0 : _e.onBlurSubject) === null || _f === void 0 ? void 0 : _f.pipe(takeUntil(this._destroy$)).subscribe(() => {
13257
+ this.save();
13258
+ });
13261
13259
  }
13262
13260
  save() {
13263
13261
  var _a, _b;
@@ -13303,10 +13301,10 @@ class SmartFilterEditorContentComponent {
13303
13301
  }
13304
13302
  }
13305
13303
  SmartFilterEditorContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFilterEditorContentComponent, deps: [{ token: SmartformLayoutDefinitionService }], target: i0.ɵɵFactoryTarget.Component });
13306
- SmartFilterEditorContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartFilterEditorContentComponent, selector: "smart-filter-expression-editor", inputs: { service: "service" }, viewQueries: [{ propertyName: "formChild", first: true, predicate: ["form"], descendants: true }, { propertyName: "smartFilterChild", first: true, predicate: ["smartFilter"], descendants: true }], ngImport: i0, template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smart-filter #smartFilter [filter]=\"simpleFilterModel\"></smart-filter>\r\n <button (click)=\"saveFilter()\" mat-raised-button color=\"primary\">Ment\u00E9s</button>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"save()\" mat-raised-button color=\"primary\">Ment\u00E9s</button>\r\n <button (click)=\"remove()\" mat-button color=\"accent\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"], components: [{ type: SmartFilterComponent, selector: "smart-filter", inputs: ["filter"] }, { type: i3.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"] }, { type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService"] }, { type: SmartFilterExpressionItemsComponent, selector: "app-expression-items", inputs: ["items"] }, { type: SmartformComponent, selector: "smartform", inputs: ["smartForm"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
13304
+ SmartFilterEditorContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartFilterEditorContentComponent, selector: "smart-filter-expression-editor", inputs: { service: "service" }, viewQueries: [{ propertyName: "formChild", first: true, predicate: ["form"], descendants: true }, { propertyName: "smartFilterChild", first: true, predicate: ["smartFilter"], descendants: true }], ngImport: i0, template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smart-filter #smartFilter [filter]=\"simpleFilterModel\"></smart-filter>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-button color=\"accent\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"], components: [{ type: SmartFilterComponent, selector: "smart-filter", inputs: ["filter"] }, { type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService"] }, { type: SmartFilterExpressionItemsComponent, selector: "app-expression-items", inputs: ["items"] }, { type: SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { type: i3.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"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
13307
13305
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartFilterEditorContentComponent, decorators: [{
13308
13306
  type: Component,
13309
- args: [{ selector: 'smart-filter-expression-editor', template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smart-filter #smartFilter [filter]=\"simpleFilterModel\"></smart-filter>\r\n <button (click)=\"saveFilter()\" mat-raised-button color=\"primary\">Ment\u00E9s</button>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"save()\" mat-raised-button color=\"primary\">Ment\u00E9s</button>\r\n <button (click)=\"remove()\" mat-button color=\"accent\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"] }]
13307
+ args: [{ selector: 'smart-filter-expression-editor', template: "<div class=\"targetGroupContentContainer\">\r\n <h3>{{ service.model?.model?.label }}</h3>\r\n\r\n <div *ngIf=\"service.model?.type === type.Simple; then simpleFilter; else complexFilter\"></div>\r\n\r\n <ng-template #simpleFilter>\r\n <div class=\"expressionsContainer\">\r\n <smart-filter #smartFilter [filter]=\"simpleFilterModel\"></smart-filter>\r\n </div>\r\n </ng-template>\r\n <ng-template #complexFilter>\r\n <div class=\"uiActionsBar\" *ngIf=\"!service.model?.readOnly\">\r\n <div class=\"uiActionsInsideOfBar\">\r\n <smart-ui-action-toolbar [uiActionModels]=\"uiActionModels\"></smart-ui-action-toolbar>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n service?.model?.model?.workplaceList?.filters?.length;\r\n then withParameters;\r\n else withoutParameters\r\n \"\r\n ></div>\r\n <ng-template #withoutParameters>\r\n <div class=\"withoutParametersContainer\">\r\n <span class=\"mat-body\"> M\u00E9g nincs megadva param\u00E9ter </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #withParameters>\r\n <div class=\"withParametersContainer\">\r\n <div\r\n class=\"expressionsContainer\"\r\n *ngIf=\"service?.model?.model?.workplaceList?.filters?.length\"\r\n >\r\n <app-expression-items\r\n [items]=\"(service.model?.model?.workplaceList)!.filters\"\r\n ></app-expression-items>\r\n </div>\r\n <div class=\"expressionEditorContainer\">\r\n <smartform #form [smartForm]=\"smartForm\"></smartform>\r\n <div *ngIf=\"smartForm\">\r\n <button (click)=\"remove()\" mat-button color=\"accent\">T\u00F6rl\u00E9s</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n", styles: [".targetGroupContentContainer{padding:1.5rem;display:flex;flex-direction:column;gap:2.5rem;height:calc(100% - 3rem);overflow:auto;position:relative}.targetGroupContentContainer h3{margin:0;font-weight:600}.uiActionsBar{padding:1.5rem;border-radius:.25rem;background-color:var(--container-color)}.uiActionsBar,.uiActionsInsideOfBar{display:flex;flex-direction:row;gap:1rem}.uiActionsInsideOfBar{position:relative;left:-3rem}.section,.notSection{display:flex;flex-direction:row;gap:1rem}.section:before{content:\"\";border:1px solid #d9d9d9;align-self:stretch}.withoutParametersContainer{display:flex;flex-direction:column;padding:2rem;background-color:var(--container-color);border-radius:.25rem}.withoutParametersContainer .mat-body{font-weight:600;text-align:center}.withParametersContainer{display:flex;flex-direction:column;padding:1.5rem;background-color:var(--container-color);border-radius:.25rem;gap:.75rem}.expressionsContainer{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;margin-bottom:1px solid #cdcdcd}.expressionEditorContainer{display:flex;flex-direction:column;gap:.75rem}\n"] }]
13310
13308
  }], ctorParameters: function () { return [{ type: SmartformLayoutDefinitionService }]; }, propDecorators: { service: [{
13311
13309
  type: Input
13312
13310
  }], formChild: [{