verben-workflow-ui 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/designer/models/types.mjs +1 -1
- package/esm2022/lib/components/designer/services/wf-mapper.service.mjs +3 -3
- package/esm2022/lib/components/workflow-designer/conditions-popup/conditions-popup.component.mjs +76 -0
- package/esm2022/lib/components/workflow-designer/decision-popup/decision-popup.component.mjs +65 -0
- package/esm2022/lib/components/workflow-designer/designer-canvas/designer-canvas.component.mjs +245 -17
- package/esm2022/lib/components/workflow-designer/designer-toolbar/designer-toolbar.component.mjs +26 -14
- package/esm2022/lib/components/workflow-designer/services/connection.service.mjs +220 -0
- package/esm2022/lib/components/workflow-designer/services/node-management.service.mjs +288 -0
- package/esm2022/lib/components/workflow-designer/services/popup.service.mjs +235 -0
- package/esm2022/lib/components/workflow-designer/services/swimlane.service.mjs +145 -0
- package/esm2022/lib/components/workflow-designer/services/transformer.service.mjs +260 -0
- package/esm2022/lib/components/workflow-designer/stage-dialog/stage-dialog.component.mjs +67 -11
- package/esm2022/lib/components/workflow-designer/stage-node/stage-node.component.mjs +9 -18
- package/esm2022/lib/components/workflow-designer/swimlane-dialog/swimlane-dialog.component.mjs +30 -24
- package/esm2022/lib/components/workflow-designer/workflow-data.service.mjs +2 -2
- package/esm2022/lib/components/workflow-designer/workflow-designer.component.mjs +138 -96
- package/esm2022/lib/components/workflow-designer/workflow-designer.module.mjs +27 -3
- package/esm2022/lib/components/workflow-designer/workflow-designer.state.mjs +243 -205
- package/esm2022/lib/components/workflow-designer/workflow-designer.types.mjs +1 -1
- package/esm2022/lib/models/SwimLane.mjs +1 -1
- package/esm2022/lib/models/Workflow.mjs +1 -1
- package/esm2022/lib/models/WorkflowStage.mjs +1 -1
- package/esm2022/lib/services/http-web-request.service.mjs +2 -2
- package/fesm2022/verben-workflow-ui.mjs +2644 -1005
- package/fesm2022/verben-workflow-ui.mjs.map +1 -1
- package/lib/components/designer/models/types.d.ts +1 -1
- package/lib/components/workflow-designer/conditions-popup/conditions-popup.component.d.ts +34 -0
- package/lib/components/workflow-designer/decision-popup/decision-popup.component.d.ts +26 -0
- package/lib/components/workflow-designer/designer-canvas/designer-canvas.component.d.ts +35 -1
- package/lib/components/workflow-designer/designer-toolbar/designer-toolbar.component.d.ts +14 -3
- package/lib/components/workflow-designer/services/connection.service.d.ts +85 -0
- package/lib/components/workflow-designer/services/node-management.service.d.ts +52 -0
- package/lib/components/workflow-designer/services/popup.service.d.ts +139 -0
- package/lib/components/workflow-designer/services/swimlane.service.d.ts +51 -0
- package/lib/components/workflow-designer/services/transformer.service.d.ts +36 -0
- package/lib/components/workflow-designer/stage-dialog/stage-dialog.component.d.ts +17 -2
- package/lib/components/workflow-designer/stage-node/stage-node.component.d.ts +2 -2
- package/lib/components/workflow-designer/swimlane-dialog/swimlane-dialog.component.d.ts +7 -1
- package/lib/components/workflow-designer/workflow-designer.component.d.ts +2 -1
- package/lib/components/workflow-designer/workflow-designer.module.d.ts +6 -4
- package/lib/components/workflow-designer/workflow-designer.state.d.ts +17 -1
- package/lib/components/workflow-designer/workflow-designer.types.d.ts +2 -0
- package/lib/models/SwimLane.d.ts +1 -0
- package/lib/models/Workflow.d.ts +1 -0
- package/lib/models/WorkflowStage.d.ts +1 -1
- package/package.json +1 -1
- package/styles/styles.css +23 -0
|
@@ -4,13 +4,16 @@ import { StageActorRule } from '../../../models/StageActorRule';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/forms";
|
|
6
6
|
import * as i2 from "../workflow-data.service";
|
|
7
|
-
import * as i3 from "
|
|
8
|
-
import * as i4 from "
|
|
7
|
+
import * as i3 from "../services/node-management.service";
|
|
8
|
+
import * as i4 from "../services/popup.service";
|
|
9
|
+
import * as i5 from "@angular/common";
|
|
10
|
+
import * as i6 from "verben-ng-ui";
|
|
9
11
|
export class StageDialogComponent {
|
|
10
12
|
fb;
|
|
11
13
|
dataService;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
nodeService;
|
|
15
|
+
popupService;
|
|
16
|
+
// Use Angular's signal-based input
|
|
14
17
|
visible = input(false);
|
|
15
18
|
stageData = {}; // For editing existing stages
|
|
16
19
|
closed = new EventEmitter();
|
|
@@ -19,9 +22,12 @@ export class StageDialogComponent {
|
|
|
19
22
|
tags = [];
|
|
20
23
|
actorRules = Object.values(StageActorRule);
|
|
21
24
|
selectedTagIds = [];
|
|
22
|
-
|
|
25
|
+
hasOutgoingConnections = false;
|
|
26
|
+
constructor(fb, dataService, nodeService, popupService) {
|
|
23
27
|
this.fb = fb;
|
|
24
28
|
this.dataService = dataService;
|
|
29
|
+
this.nodeService = nodeService;
|
|
30
|
+
this.popupService = popupService;
|
|
25
31
|
this.stageForm = this.fb.group({
|
|
26
32
|
Name: ['', Validators.required],
|
|
27
33
|
Description: [''],
|
|
@@ -29,11 +35,41 @@ export class StageDialogComponent {
|
|
|
29
35
|
Duration: [0],
|
|
30
36
|
PassOnRule: [''],
|
|
31
37
|
ActorRule: [StageActorRule.None],
|
|
38
|
+
IsExitPoint: [false],
|
|
32
39
|
Tags: [[]],
|
|
33
40
|
});
|
|
34
41
|
}
|
|
35
42
|
ngOnInit() {
|
|
36
43
|
// Load tags
|
|
44
|
+
this.loadTags();
|
|
45
|
+
// If editing an existing stage, populate form
|
|
46
|
+
this.initFormWithStageData();
|
|
47
|
+
}
|
|
48
|
+
ngOnChanges(changes) {
|
|
49
|
+
// If stageData changes, update the form
|
|
50
|
+
if (changes['stageData'] && this.stageData) {
|
|
51
|
+
this.stageForm.patchValue({
|
|
52
|
+
Name: this.stageData.Name || '',
|
|
53
|
+
Description: this.stageData.Description || '',
|
|
54
|
+
MinNoOfActor: this.stageData.MinNoOfActor || 0,
|
|
55
|
+
Duration: this.stageData.Duration || 0,
|
|
56
|
+
PassOnRule: this.stageData.PassOnRule || '',
|
|
57
|
+
ActorRule: this.stageData.ActorRule || StageActorRule.None,
|
|
58
|
+
IsExitPoint: this.stageData.IsExitPoint || false,
|
|
59
|
+
});
|
|
60
|
+
// Update selected tags
|
|
61
|
+
if (this.stageData.Tags && this.stageData.Tags.length > 0) {
|
|
62
|
+
this.selectedTagIds = this.stageData.Tags.map((tag) => tag.Id);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this.selectedTagIds = [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Load tags from data service
|
|
71
|
+
*/
|
|
72
|
+
loadTags() {
|
|
37
73
|
this.dataService.getTags().then((data) => {
|
|
38
74
|
this.tags = data.Result;
|
|
39
75
|
// If we have stage data with tags, update selectedTagIds after tags are loaded
|
|
@@ -43,7 +79,11 @@ export class StageDialogComponent {
|
|
|
43
79
|
this.selectedTagIds = this.stageData.Tags.map((tag) => tag.Id);
|
|
44
80
|
}
|
|
45
81
|
});
|
|
46
|
-
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Initialize form with stage data if provided
|
|
85
|
+
*/
|
|
86
|
+
initFormWithStageData() {
|
|
47
87
|
if (this.stageData) {
|
|
48
88
|
console.log('Initializing form with stage data:', this.stageData);
|
|
49
89
|
this.stageForm.patchValue({
|
|
@@ -53,9 +93,23 @@ export class StageDialogComponent {
|
|
|
53
93
|
Duration: this.stageData.Duration || 0,
|
|
54
94
|
PassOnRule: this.stageData.PassOnRule || '',
|
|
55
95
|
ActorRule: this.stageData.ActorRule || StageActorRule.None,
|
|
96
|
+
IsExitPoint: this.stageData.IsExitPoint || false,
|
|
56
97
|
});
|
|
57
98
|
}
|
|
58
99
|
}
|
|
100
|
+
checkOutgoingConnections() {
|
|
101
|
+
if (this.stageData && this.stageData.Id) {
|
|
102
|
+
// Check if there are outgoing connections from this stage
|
|
103
|
+
this.hasOutgoingConnections = this.nodeService.hasOutgoingConnections(this.stageData.Id);
|
|
104
|
+
// If there are outgoing connections, disable IsExitPoint
|
|
105
|
+
if (this.hasOutgoingConnections) {
|
|
106
|
+
this.stageForm.get('IsExitPoint')?.disable();
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.stageForm.get('IsExitPoint')?.enable();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
59
113
|
onDialogClose(event) {
|
|
60
114
|
this.closed.emit();
|
|
61
115
|
}
|
|
@@ -66,7 +120,9 @@ export class StageDialogComponent {
|
|
|
66
120
|
...this.stageForm.value,
|
|
67
121
|
Tags: selectedTags,
|
|
68
122
|
};
|
|
123
|
+
// Reset form after saving
|
|
69
124
|
this.stageForm.reset();
|
|
125
|
+
// Emit the saved data to the parent component
|
|
70
126
|
this.saved.emit(stageData);
|
|
71
127
|
}
|
|
72
128
|
}
|
|
@@ -85,17 +141,17 @@ export class StageDialogComponent {
|
|
|
85
141
|
onDialogOpen(event) {
|
|
86
142
|
console.log('Dialog opened:', event);
|
|
87
143
|
}
|
|
88
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageDialogComponent, deps: [{ token: i1.FormBuilder }, { token: i2.WorkflowDataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
89
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: StageDialogComponent, selector: "lib-stage-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, stageData: { classPropertyName: "stageData", publicName: "stageData", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", saved: "saved" }, ngImport: i0, template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible()\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div class=\"p-4 border-b border-gray-200\">\n <h2 class=\"text-xl font-medium m-0\">Stage Properties</h2>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-4\">\n <form [formGroup]=\"stageForm\" class=\"space-y-4\">\n <!-- Stage Name -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Stage Name</label>\n <input\n type=\"text\"\n formControlName=\"Name\"\n placeholder=\"Enter Stage Name\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Description -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Description</label>\n <textarea\n formControlName=\"Description\"\n placeholder=\"Enter Description\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n rows=\"3\"\n ></textarea>\n </div>\n\n <!-- Recipient Count -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Recipient Count</label>\n <input\n type=\"number\"\n formControlName=\"MinNoOfActor\"\n placeholder=\"Enter Count\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Pass On Rule -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Pass On Rule</label>\n <input\n type=\"text\"\n formControlName=\"PassOnRule\"\n placeholder=\"Select Rule\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Duration -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Duration</label>\n <input\n type=\"number\"\n formControlName=\"Duration\"\n placeholder=\"Set Duration\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Actor Rule -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Actor Rule</label>\n <select\n formControlName=\"ActorRule\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n >\n <option *ngFor=\"let rule of actorRules\" [value]=\"rule\">\n {{ rule }}\n </option>\n </select>\n </div>\n\n <!-- Tags -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Tags</label>\n <div\n class=\"border border-gray-200 rounded p-2 max-h-40 overflow-y-auto\"\n >\n <div *ngFor=\"let tag of tags\" class=\"py-1\">\n <label class=\"flex items-center\">\n <input\n type=\"checkbox\"\n [checked]=\"isTagSelected(tag.Id)\"\n (change)=\"toggleTagSelection(tag.Id)\"\n class=\"mr-2\"\n />\n <span>{{ tag.Name }}</span>\n </label>\n </div>\n </div>\n </div>\n </form>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"flex justify-end p-4 border-t border-gray-200\">\n <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button>\n <button\n class=\"px-4 py-2 bg-yellow-300 text-black rounded text-sm font-medium\"\n (click)=\"saveStage()\"\n [disabled]=\"stageForm.invalid\"\n >\n Save\n </button>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type:
|
|
144
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageDialogComponent, deps: [{ token: i1.FormBuilder }, { token: i2.WorkflowDataService }, { token: i3.NodeManagementService }, { token: i4.PopupService }], target: i0.ɵɵFactoryTarget.Component });
|
|
145
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: StageDialogComponent, selector: "lib-stage-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, stageData: { classPropertyName: "stageData", publicName: "stageData", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", saved: "saved" }, usesOnChanges: true, ngImport: i0, template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible()\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div class=\"p-4 border-b border-gray-200\">\n <h2 class=\"text-xl font-medium m-0\">Stage Properties</h2>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-4\">\n <form [formGroup]=\"stageForm\" class=\"space-y-4\">\n <!-- Stage Name -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Stage Name</label>\n <input\n type=\"text\"\n formControlName=\"Name\"\n placeholder=\"Enter Stage Name\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Description -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Description</label>\n <textarea\n formControlName=\"Description\"\n placeholder=\"Enter Description\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n rows=\"3\"\n ></textarea>\n </div>\n\n <!-- Recipient Count -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Recipient Count</label>\n <input\n type=\"number\"\n formControlName=\"MinNoOfActor\"\n placeholder=\"Enter Count\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Pass On Rule -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Pass On Rule</label>\n <input\n type=\"text\"\n formControlName=\"PassOnRule\"\n placeholder=\"Select Rule\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Duration -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Duration</label>\n <input\n type=\"number\"\n formControlName=\"Duration\"\n placeholder=\"Set Duration\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Actor Rule -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Actor Rule</label>\n <select\n formControlName=\"ActorRule\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n >\n <option *ngFor=\"let rule of actorRules\" [value]=\"rule\">\n {{ rule }}\n </option>\n </select>\n </div>\n\n <!-- Is Exit Point -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Exit Point</label>\n <div class=\"flex items-center\">\n <input\n type=\"checkbox\"\n formControlName=\"IsExitPoint\"\n [disabled]=\"hasOutgoingConnections\"\n class=\"mr-2 h-4 w-4\"\n />\n <span class=\"text-sm text-gray-600\">Mark as workflow end point</span>\n </div>\n </div>\n\n <!-- Tags -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Tags</label>\n <div\n class=\"border border-gray-200 rounded p-2 max-h-40 overflow-y-auto\"\n >\n <div *ngFor=\"let tag of tags\" class=\"py-1\">\n <label class=\"flex items-center\">\n <input\n type=\"checkbox\"\n [checked]=\"isTagSelected(tag.Id)\"\n (change)=\"toggleTagSelection(tag.Id)\"\n class=\"mr-2\"\n />\n <span>{{ tag.Name }}</span>\n </label>\n </div>\n </div>\n </div>\n </form>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"flex justify-end p-4 border-t border-gray-200\">\n <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button>\n <button\n class=\"px-4 py-2 bg-yellow-300 text-black rounded text-sm font-medium\"\n (click)=\"saveStage()\"\n [disabled]=\"stageForm.invalid\"\n >\n Save\n </button>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i6.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
90
146
|
}
|
|
91
147
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageDialogComponent, decorators: [{
|
|
92
148
|
type: Component,
|
|
93
|
-
args: [{ selector: 'lib-stage-dialog', template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible()\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div class=\"p-4 border-b border-gray-200\">\n <h2 class=\"text-xl font-medium m-0\">Stage Properties</h2>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-4\">\n <form [formGroup]=\"stageForm\" class=\"space-y-4\">\n <!-- Stage Name -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Stage Name</label>\n <input\n type=\"text\"\n formControlName=\"Name\"\n placeholder=\"Enter Stage Name\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Description -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Description</label>\n <textarea\n formControlName=\"Description\"\n placeholder=\"Enter Description\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n rows=\"3\"\n ></textarea>\n </div>\n\n <!-- Recipient Count -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Recipient Count</label>\n <input\n type=\"number\"\n formControlName=\"MinNoOfActor\"\n placeholder=\"Enter Count\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Pass On Rule -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Pass On Rule</label>\n <input\n type=\"text\"\n formControlName=\"PassOnRule\"\n placeholder=\"Select Rule\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Duration -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Duration</label>\n <input\n type=\"number\"\n formControlName=\"Duration\"\n placeholder=\"Set Duration\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Actor Rule -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Actor Rule</label>\n <select\n formControlName=\"ActorRule\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n >\n <option *ngFor=\"let rule of actorRules\" [value]=\"rule\">\n {{ rule }}\n </option>\n </select>\n </div>\n\n <!-- Tags -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Tags</label>\n <div\n class=\"border border-gray-200 rounded p-2 max-h-40 overflow-y-auto\"\n >\n <div *ngFor=\"let tag of tags\" class=\"py-1\">\n <label class=\"flex items-center\">\n <input\n type=\"checkbox\"\n [checked]=\"isTagSelected(tag.Id)\"\n (change)=\"toggleTagSelection(tag.Id)\"\n class=\"mr-2\"\n />\n <span>{{ tag.Name }}</span>\n </label>\n </div>\n </div>\n </div>\n </form>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"flex justify-end p-4 border-t border-gray-200\">\n <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button>\n <button\n class=\"px-4 py-2 bg-yellow-300 text-black rounded text-sm font-medium\"\n (click)=\"saveStage()\"\n [disabled]=\"stageForm.invalid\"\n >\n Save\n </button>\n </div>\n</ng-template>\n" }]
|
|
94
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.WorkflowDataService }], propDecorators: { stageData: [{
|
|
149
|
+
args: [{ selector: 'lib-stage-dialog', template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible()\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div class=\"p-4 border-b border-gray-200\">\n <h2 class=\"text-xl font-medium m-0\">Stage Properties</h2>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-4\">\n <form [formGroup]=\"stageForm\" class=\"space-y-4\">\n <!-- Stage Name -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Stage Name</label>\n <input\n type=\"text\"\n formControlName=\"Name\"\n placeholder=\"Enter Stage Name\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Description -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Description</label>\n <textarea\n formControlName=\"Description\"\n placeholder=\"Enter Description\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n rows=\"3\"\n ></textarea>\n </div>\n\n <!-- Recipient Count -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Recipient Count</label>\n <input\n type=\"number\"\n formControlName=\"MinNoOfActor\"\n placeholder=\"Enter Count\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Pass On Rule -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Pass On Rule</label>\n <input\n type=\"text\"\n formControlName=\"PassOnRule\"\n placeholder=\"Select Rule\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Duration -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Duration</label>\n <input\n type=\"number\"\n formControlName=\"Duration\"\n placeholder=\"Set Duration\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n />\n </div>\n\n <!-- Actor Rule -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Actor Rule</label>\n <select\n formControlName=\"ActorRule\"\n class=\"w-full px-4 py-2 rounded border border-gray-200\"\n >\n <option *ngFor=\"let rule of actorRules\" [value]=\"rule\">\n {{ rule }}\n </option>\n </select>\n </div>\n\n <!-- Is Exit Point -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Exit Point</label>\n <div class=\"flex items-center\">\n <input\n type=\"checkbox\"\n formControlName=\"IsExitPoint\"\n [disabled]=\"hasOutgoingConnections\"\n class=\"mr-2 h-4 w-4\"\n />\n <span class=\"text-sm text-gray-600\">Mark as workflow end point</span>\n </div>\n </div>\n\n <!-- Tags -->\n <div>\n <label class=\"block text-sm font-medium mb-1\">Tags</label>\n <div\n class=\"border border-gray-200 rounded p-2 max-h-40 overflow-y-auto\"\n >\n <div *ngFor=\"let tag of tags\" class=\"py-1\">\n <label class=\"flex items-center\">\n <input\n type=\"checkbox\"\n [checked]=\"isTagSelected(tag.Id)\"\n (change)=\"toggleTagSelection(tag.Id)\"\n class=\"mr-2\"\n />\n <span>{{ tag.Name }}</span>\n </label>\n </div>\n </div>\n </div>\n </form>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"flex justify-end p-4 border-t border-gray-200\">\n <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button>\n <button\n class=\"px-4 py-2 bg-yellow-300 text-black rounded text-sm font-medium\"\n (click)=\"saveStage()\"\n [disabled]=\"stageForm.invalid\"\n >\n Save\n </button>\n </div>\n</ng-template>\n" }]
|
|
150
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.WorkflowDataService }, { type: i3.NodeManagementService }, { type: i4.PopupService }], propDecorators: { stageData: [{
|
|
95
151
|
type: Input
|
|
96
152
|
}], closed: [{
|
|
97
153
|
type: Output
|
|
98
154
|
}], saved: [{
|
|
99
155
|
type: Output
|
|
100
156
|
}] } });
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvc3RhZ2UtZGlhbG9nL3N0YWdlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLWRpYWxvZy9zdGFnZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFFTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7OztBQVFoRSxNQUFNLE9BQU8sb0JBQW9CO0lBY3JCO0lBQ0E7SUFkVixxQ0FBcUM7SUFDckMsc0RBQXNEO0lBQ3RELE9BQU8sR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDdkIsU0FBUyxHQUEyQixFQUFFLENBQUMsQ0FBQyw4QkFBOEI7SUFDckUsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDNUIsS0FBSyxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO0lBRTdELFNBQVMsQ0FBWTtJQUNyQixJQUFJLEdBQVUsRUFBRSxDQUFDO0lBQ2pCLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNDLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFFOUIsWUFDVSxFQUFlLEVBQ2YsV0FBZ0M7UUFEaEMsT0FBRSxHQUFG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SSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDekIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVU7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO3dHQTdGVSxvQkFBb0I7NEZBQXBCLG9CQUFvQixzWENwQmpDLG83SEFxSUE7OzRGRGpIYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCO2tIQVFuQixTQUFTO3NCQUFqQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5wdXQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL1RhZyc7XG5pbXBvcnQgeyBXb3JrZmxvd1N0YWdlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL1dvcmtmbG93U3RhZ2UnO1xuaW1wb3J0IHsgU3RhZ2VBY3RvclJ1bGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvU3RhZ2VBY3RvclJ1bGUnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LWRhdGEuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zdGFnZS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhZ2UtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RhZ2UtZGlhbG9nLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3RhZ2VEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyBASW5wdXQoKSB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIEluIHN0YWdlLWRpYWxvZy5jb21wb25lbnQudHMgLSBjaGVjayBpbnB1dCBoYW5kbGluZ1xuICB2aXNpYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBASW5wdXQoKSBzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4gPSB7fTsgLy8gRm9yIGVkaXRpbmcgZXhpc3Rpbmcgc3RhZ2VzXG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UGFydGlhbDxXb3JrZmxvd1N0YWdlPj4oKTtcblxuICBzdGFnZUZvcm06IEZvcm1Hcm91cDtcbiAgdGFnczogVGFnW10gPSBbXTtcbiAgYWN0b3JSdWxlcyA9IE9iamVjdC52YWx1ZXMoU3RhZ2VBY3RvclJ1bGUpO1xuICBzZWxlY3RlZFRhZ0lkczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBXb3JrZmxvd0RhdGFTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3RhZ2VGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBOYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgRGVzY3JpcHRpb246IFsnJ10sXG4gICAgICBNaW5Ob09mQWN0b3I6IFswXSxcbiAgICAgIER1cmF0aW9uOiBbMF0sXG4gICAgICBQYXNzT25SdWxlOiBbJyddLFxuICAgICAgQWN0b3JSdWxlOiBbU3RhZ2VBY3RvclJ1bGUuTm9uZV0sXG4gICAgICBUYWdzOiBbW11dLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gTG9hZCB0YWdzXG4gICAgdGhpcy5kYXRhU2VydmljZS5nZXRUYWdzKCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgdGhpcy50YWdzID0gZGF0YS5SZXN1bHQ7XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgc3RhZ2UgZGF0YSB3aXRoIHRhZ3MsIHVwZGF0ZSBzZWxlY3RlZFRhZ0lkcyBhZnRlciB0YWdzIGFyZSBsb2FkZWRcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zdGFnZURhdGEgJiZcbiAgICAgICAgdGhpcy5zdGFnZURhdGEuVGFncyAmJlxuICAgICAgICB0aGlzLnN0YWdlRGF0YS5UYWdzLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFnSWRzID0gdGhpcy5zdGFnZURhdGEuVGFncy5tYXAoKHRhZykgPT4gdGFnLklkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIElmIGVkaXRpbmcgYW4gZXhpc3Rpbmcgc3RhZ2UsIHBvcHVsYXRlIGZvcm1cbiAgICBpZiAodGhpcy5zdGFnZURhdGEpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdJbml0aWFsaXppbmcgZm9ybSB3aXRoIHN0YWdlIGRhdGE6JywgdGhpcy5zdGFnZURhdGEpO1xuICAgICAgdGhpcy5zdGFnZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIE5hbWU6IHRoaXMuc3RhZ2VEYXRhLk5hbWUgfHwgJycsXG4gICAgICAgIERlc2NyaXB0aW9uOiB0aGlzLnN0YWdlRGF0YS5EZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgTWluTm9PZkFjdG9yOiB0aGlzLnN0YWdlRGF0YS5NaW5Ob09mQWN0b3IgfHwgMCxcbiAgICAgICAgRHVyYXRpb246IHRoaXMuc3RhZ2VEYXRhLkR1cmF0aW9uIHx8IDAsXG4gICAgICAgIFBhc3NPblJ1bGU6IHRoaXMuc3RhZ2VEYXRhLlBhc3NPblJ1bGUgfHwgJycsXG4gICAgICAgIEFjdG9yUnVsZTogdGhpcy5zdGFnZURhdGEuQWN0b3JSdWxlIHx8IFN0YWdlQWN0b3JSdWxlLk5vbmUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkRpYWxvZ0Nsb3NlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cblxuICBzYXZlU3RhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhZ2VGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFRhZ3MgPSB0aGlzLnRhZ3MuZmlsdGVyKCh0YWcpID0+XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWdJZHMuaW5jbHVkZXModGFnLklkKVxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+ID0ge1xuICAgICAgICAuLi50aGlzLnN0YWdlRm9ybS52YWx1ZSxcbiAgICAgICAgVGFnczogc2VsZWN0ZWRUYWdzLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5zdGFnZUZvcm0ucmVzZXQoKTtcblxuICAgICAgdGhpcy5zYXZlZC5lbWl0KHN0YWdlRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlVGFnU2VsZWN0aW9uKHRhZ0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWdJZHMuaW5kZXhPZih0YWdJZCk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWdJZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhZ0lkcy5wdXNoKHRhZ0lkKTtcbiAgICB9XG4gIH1cblxuICBpc1RhZ1NlbGVjdGVkKHRhZ0lkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhZ0lkcy5pbmNsdWRlcyh0YWdJZCk7XG4gIH1cblxuICBvbkRpYWxvZ09wZW4oZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdEaWFsb2cgb3BlbmVkOicsIGV2ZW50KTtcbiAgfVxufVxuIiwiPHZlcmJlbi1kaWFsb2d1ZVxuICBbc2hvd0Nsb3NlSWNvbl09XCJ0cnVlXCJcbiAgW2Rpc21pc3NPdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gIFtjbG9zZU9uRXNjYXBlXT1cInRydWVcIlxuICBbc2l6ZV09XCInbWVkaXVtJ1wiXG4gIFttb2RlXT1cIidkcmF3ZXInXCJcbiAgW2Rpc2FibGVGb290ZXJdPVwiZmFsc2VcIlxuICBbaXNWaXNpYmxlXT1cInZpc2libGUoKVwiXG4gIFtoZWFkZXJUZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiXG4gIFtib2R5VGVtcGxhdGVdPVwiYm9keVRlbXBsYXRlXCJcbiAgW2Zvb3RlclRlbXBsYXRlXT1cImZvb3RlclRlbXBsYXRlXCJcbiAgKG9wZW5Nb2RhbCk9XCJvbkRpYWxvZ09wZW4oJGV2ZW50KVwiXG4gIChjbG9zZU1vZGFsKT1cIm9uRGlhbG9nQ2xvc2UoJGV2ZW50KVwiXG4+XG48L3ZlcmJlbi1kaWFsb2d1ZT5cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInAtNCBib3JkZXItYiBib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8aDIgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtbWVkaXVtIG0tMFwiPlN0YWdlIFByb3BlcnRpZXM8L2gyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYm9keVRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwicC00XCI+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzdGFnZUZvcm1cIiBjbGFzcz1cInNwYWNlLXktNFwiPlxuICAgICAgPCEtLSBTdGFnZSBOYW1lIC0tPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSBtYi0xXCI+U3RhZ2UgTmFtZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJOYW1lXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIFN0YWdlIE5hbWVcIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTQgcHktMiByb3VuZGVkIGJvcmRlciBib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRGVzY3JpcHRpb24gLS0+XG4gICAgICA8ZGl2PlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTFcIj5EZXNjcmlwdGlvbjwvbGFiZWw+XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkRlc2NyaXB0aW9uXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIERlc2NyaXB0aW9uXCJcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBweC00IHB5LTIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXktMjAwXCJcbiAgICAgICAgICByb3dzPVwiM1wiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUmVjaXBpZW50IENvdW50IC0tPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSBtYi0xXCI+UmVjaXBpZW50IENvdW50PC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiTWluTm9PZkFjdG9yXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIENvdW50XCJcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBweC00IHB5LTIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXktMjAwXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFBhc3MgT24gUnVsZSAtLT5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gbWItMVwiPlBhc3MgT24gUnVsZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJQYXNzT25SdWxlXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBSdWxlXCJcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBweC00IHB5LTIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXktMjAwXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIER1cmF0aW9uIC0tPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSBtYi0xXCI+RHVyYXRpb248L2xhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJEdXJhdGlvblwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZXQgRHVyYXRpb25cIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTQgcHktMiByb3VuZGVkIGJvcmRlciBib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQWN0b3IgUnVsZSAtLT5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gbWItMVwiPkFjdG9yIFJ1bGU8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiQWN0b3JSdWxlXCJcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBweC00IHB5LTIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXktMjAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHJ1bGUgb2YgYWN0b3JSdWxlc1wiIFt2YWx1ZV09XCJydWxlXCI+XG4gICAgICAgICAgICB7eyBydWxlIH19XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVGFncyAtLT5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gbWItMVwiPlRhZ3M8L2xhYmVsPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgcC0yIG1heC1oLTQwIG92ZXJmbG93LXktYXV0b1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0YWcgb2YgdGFnc1wiIGNsYXNzPVwicHktMVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1RhZ1NlbGVjdGVkKHRhZy5JZClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlVGFnU2VsZWN0aW9uKHRhZy5JZClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXItMlwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHRhZy5OYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgcC00IGJvcmRlci10IGJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwicHgtNCBweS0yIG1yLTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gZm9udC1tZWRpdW1cIlxuICAgICAgKGNsaWNrKT1cIm9uRGlhbG9nQ2xvc2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgQ2FuY2VsXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJweC00IHB5LTIgYmcteWVsbG93LTMwMCB0ZXh0LWJsYWNrIHJvdW5kZWQgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgICAoY2xpY2spPVwic2F2ZVN0YWdlKClcIlxuICAgICAgW2Rpc2FibGVkXT1cInN0YWdlRm9ybS5pbnZhbGlkXCJcbiAgICA+XG4gICAgICBTYXZlXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvc3RhZ2UtZGlhbG9nL3N0YWdlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLWRpYWxvZy9zdGFnZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFFTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7O0FBVWhFLE1BQU0sT0FBTyxvQkFBb0I7SUFlckI7SUFDQTtJQUNBO0lBQ0E7SUFqQlYsbUNBQW1DO0lBQ25DLE9BQU8sR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDdkIsU0FBUyxHQUEyQixFQUFFLENBQUMsQ0FBQyw4QkFBOEI7SUFDckUsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDNUIsS0FBSyxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO0lBRTdELFNBQVMsQ0FBWTtJQUNyQixJQUFJLEdBQVUsRUFBRSxDQUFDO0lBQ2pCLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNDLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFFOUIsc0JBQXNCLEdBQVksS0FBSyxDQUFDO0lBRXhDLFlBQ1UsRUFB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QUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7d0dBeEpVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLDJZQ3RCakMsNDRJQW1KQTs7NEZEN0hhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0I7aUxBT25CLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbnB1dCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUYWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvVGFnJztcbmltcG9ydCB7IFdvcmtmbG93U3RhZ2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvV29ya2Zsb3dTdGFnZSc7XG5pbXBvcnQgeyBTdGFnZUFjdG9yUnVsZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9TdGFnZUFjdG9yUnVsZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25vZGUtbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFBvcHVwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BvcHVwLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc3RhZ2UtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0YWdlLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0YWdlLWRpYWxvZy5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFN0YWdlRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gVXNlIEFuZ3VsYXIncyBzaWduYWwtYmFzZWQgaW5wdXRcbiAgdmlzaWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgQElucHV0KCkgc3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+ID0ge307IC8vIEZvciBlZGl0aW5nIGV4aXN0aW5nIHN0YWdlc1xuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4+KCk7XG5cbiAgc3RhZ2VGb3JtOiBGb3JtR3JvdXA7XG4gIHRhZ3M6IFRhZ1tdID0gW107XG4gIGFjdG9yUnVsZXMgPSBPYmplY3QudmFsdWVzKFN0YWdlQWN0b3JSdWxlKTtcbiAgc2VsZWN0ZWRUYWdJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgaGFzT3V0Z29pbmdDb25uZWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IFdvcmtmbG93RGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub2RlU2VydmljZTogTm9kZU1hbmFnZW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9wdXBTZXJ2aWNlOiBQb3B1cFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zdGFnZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIE5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBEZXNjcmlwdGlvbjogWycnXSxcbiAgICAgIE1pbk5vT2ZBY3RvcjogWzBdLFxuICAgICAgRHVyYXRpb246IFswXSxcbiAgICAgIFBhc3NPblJ1bGU6IFsnJ10sXG4gICAgICBBY3RvclJ1bGU6IFtTdGFnZUFjdG9yUnVsZS5Ob25lXSxcbiAgICAgIElzRXhpdFBvaW50OiBbZmFsc2VdLFxuICAgICAgVGFnczogW1tdXSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIExvYWQgdGFnc1xuICAgIHRoaXMubG9hZFRhZ3MoKTtcblxuICAgIC8vIElmIGVkaXRpbmcgYW4gZXhpc3Rpbmcgc3RhZ2UsIHBvcHVsYXRlIGZvcm1cbiAgICB0aGlzLmluaXRGb3JtV2l0aFN0YWdlRGF0YSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIElmIHN0YWdlRGF0YSBjaGFuZ2VzLCB1cGRhdGUgdGhlIGZvcm1cbiAgICBpZiAoY2hhbmdlc1snc3RhZ2VEYXRhJ10gJiYgdGhpcy5zdGFnZURhdGEpIHtcbiAgICAgIHRoaXMuc3RhZ2VGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBOYW1lOiB0aGlzLnN0YWdlRGF0YS5OYW1lIHx8ICcnLFxuICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5zdGFnZURhdGEuRGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIE1pbk5vT2ZBY3RvcjogdGhpcy5zdGFnZURhdGEuTWluTm9PZkFjdG9yIHx8IDAsXG4gICAgICAgIER1cmF0aW9uOiB0aGlzLnN0YWdlRGF0YS5EdXJhdGlvbiB8fCAwLFxuICAgICAgICBQYXNzT25SdWxlOiB0aGlzLnN0YWdlRGF0YS5QYXNzT25SdWxlIHx8ICcnLFxuICAgICAgICBBY3RvclJ1bGU6IHRoaXMuc3RhZ2VEYXRhLkFjdG9yUnVsZSB8fCBTdGFnZUFjdG9yUnVsZS5Ob25lLFxuICAgICAgICBJc0V4aXRQb2ludDogdGhpcy5zdGFnZURhdGEuSXNFeGl0UG9pbnQgfHwgZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgLy8gVXBkYXRlIHNlbGVjdGVkIHRhZ3NcbiAgICAgIGlmICh0aGlzLnN0YWdlRGF0YS5UYWdzICYmIHRoaXMuc3RhZ2VEYXRhLlRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFnSWRzID0gdGhpcy5zdGFnZURhdGEuVGFncy5tYXAoKHRhZykgPT4gdGFnLklkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWdJZHMgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0YWdzIGZyb20gZGF0YSBzZXJ2aWNlXG4gICAqL1xuICBwcml2YXRlIGxvYWRUYWdzKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0VGFncygpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMudGFncyA9IGRhdGEuUmVzdWx0O1xuXG4gICAgICAvLyBJZiB3ZSBoYXZlIHN0YWdlIGRhdGEgd2l0aCB0YWdzLCB1cGRhdGUgc2VsZWN0ZWRUYWdJZHMgYWZ0ZXIgdGFncyBhcmUgbG9hZGVkXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc3RhZ2VEYXRhICYmXG4gICAgICAgIHRoaXMuc3RhZ2VEYXRhLlRhZ3MgJiZcbiAgICAgICAgdGhpcy5zdGFnZURhdGEuVGFncy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhZ0lkcyA9IHRoaXMuc3RhZ2VEYXRhLlRhZ3MubWFwKCh0YWcpID0+IHRhZy5JZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBmb3JtIHdpdGggc3RhZ2UgZGF0YSBpZiBwcm92aWRlZFxuICAgKi9cbiAgcHJpdmF0ZSBpbml0Rm9ybVdpdGhTdGFnZURhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhZ2VEYXRhKSB7XG4gICAgICBjb25zb2xlLmxvZygnSW5pdGlhbGl6aW5nIGZvcm0gd2l0aCBzdGFnZSBkYXRhOicsIHRoaXMuc3RhZ2VEYXRhKTtcbiAgICAgIHRoaXMuc3RhZ2VGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBOYW1lOiB0aGlzLnN0YWdlRGF0YS5OYW1lIHx8ICcnLFxuICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5zdGFnZURhdGEuRGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIE1pbk5vT2ZBY3RvcjogdGhpcy5zdGFnZURhdGEuTWluTm9PZkFjdG9yIHx8IDAsXG4gICAgICAgIER1cmF0aW9uOiB0aGlzLnN0YWdlRGF0YS5EdXJhdGlvbiB8fCAwLFxuICAgICAgICBQYXNzT25SdWxlOiB0aGlzLnN0YWdlRGF0YS5QYXNzT25SdWxlIHx8ICcnLFxuICAgICAgICBBY3RvclJ1bGU6IHRoaXMuc3RhZ2VEYXRhLkFjdG9yUnVsZSB8fCBTdGFnZUFjdG9yUnVsZS5Ob25lLFxuICAgICAgICBJc0V4aXRQb2ludDogdGhpcy5zdGFnZURhdGEuSXNFeGl0UG9pbnQgfHwgZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrT3V0Z29pbmdDb25uZWN0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGFnZURhdGEgJiYgdGhpcy5zdGFnZURhdGEuSWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBvdXRnb2luZyBjb25uZWN0aW9ucyBmcm9tIHRoaXMgc3RhZ2VcbiAgICAgIHRoaXMuaGFzT3V0Z29pbmdDb25uZWN0aW9ucyA9IHRoaXMubm9kZVNlcnZpY2UuaGFzT3V0Z29pbmdDb25uZWN0aW9ucyhcbiAgICAgICAgdGhpcy5zdGFnZURhdGEuSWRcbiAgICAgICk7XG5cbiAgICAgIC8vIElmIHRoZXJlIGFyZSBvdXRnb2luZyBjb25uZWN0aW9ucywgZGlzYWJsZSBJc0V4aXRQb2ludFxuICAgICAgaWYgKHRoaXMuaGFzT3V0Z29pbmdDb25uZWN0aW9ucykge1xuICAgICAgICB0aGlzLnN0YWdlRm9ybS5nZXQoJ0lzRXhpdFBvaW50Jyk/LmRpc2FibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhZ2VGb3JtLmdldCgnSXNFeGl0UG9pbnQnKT8uZW5hYmxlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EaWFsb2dDbG9zZShldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICB9XG5cbiAgc2F2ZVN0YWdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YWdlRm9ybS52YWxpZCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUYWdzID0gdGhpcy50YWdzLmZpbHRlcigodGFnKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFnSWRzLmluY2x1ZGVzKHRhZy5JZClcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPiA9IHtcbiAgICAgICAgLi4udGhpcy5zdGFnZUZvcm0udmFsdWUsXG4gICAgICAgIFRhZ3M6IHNlbGVjdGVkVGFncyxcbiAgICAgIH07XG5cbiAgICAgIC8vIFJlc2V0IGZvcm0gYWZ0ZXIgc2F2aW5nXG4gICAgICB0aGlzLnN0YWdlRm9ybS5yZXNldCgpO1xuXG4gICAgICAvLyBFbWl0IHRoZSBzYXZlZCBkYXRhIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50XG4gICAgICB0aGlzLnNhdmVkLmVtaXQoc3RhZ2VEYXRhKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVUYWdTZWxlY3Rpb24odGFnSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFRhZ0lkcy5pbmRleE9mKHRhZ0lkKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhZ0lkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFnSWRzLnB1c2godGFnSWQpO1xuICAgIH1cbiAgfVxuXG4gIGlzVGFnU2VsZWN0ZWQodGFnSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGFnSWRzLmluY2x1ZGVzKHRhZ0lkKTtcbiAgfVxuXG4gIG9uRGlhbG9nT3BlbihldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0RpYWxvZyBvcGVuZWQ6JywgZXZlbnQpO1xuICB9XG59XG4iLCI8dmVyYmVuLWRpYWxvZ3VlXG4gIFtzaG93Q2xvc2VJY29uXT1cInRydWVcIlxuICBbZGlzbWlzc091dHNpZGVDbGlja109XCJ0cnVlXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwidHJ1ZVwiXG4gIFtzaXplXT1cIidtZWRpdW0nXCJcbiAgW21vZGVdPVwiJ2RyYXdlcidcIlxuICBbZGlzYWJsZUZvb3Rlcl09XCJmYWxzZVwiXG4gIFtpc1Zpc2libGVdPVwidmlzaWJsZSgpXCJcbiAgW2hlYWRlclRlbXBsYXRlXT1cImhlYWRlclRlbXBsYXRlXCJcbiAgW2JvZHlUZW1wbGF0ZV09XCJib2R5VGVtcGxhdGVcIlxuICBbZm9vdGVyVGVtcGxhdGVdPVwiZm9vdGVyVGVtcGxhdGVcIlxuICAob3Blbk1vZGFsKT1cIm9uRGlhbG9nT3BlbigkZXZlbnQpXCJcbiAgKGNsb3NlTW9kYWwpPVwib25EaWFsb2dDbG9zZSgkZXZlbnQpXCJcbj5cbjwvdmVyYmVuLWRpYWxvZ3VlPlxuXG48bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwicC00IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxoMiBjbGFzcz1cInRleHQteGwgZm9udC1tZWRpdW0gbS0wXCI+U3RhZ2UgUHJvcGVydGllczwvaDI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNib2R5VGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJwLTRcIj5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInN0YWdlRm9ybVwiIGNsYXNzPVwic3BhY2UteS00XCI+XG4gICAgICA8IS0tIFN0YWdlIE5hbWUgLS0+XG4gICAgICA8ZGl2PlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTFcIj5TdGFnZSBOYW1lPC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIk5hbWVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgU3RhZ2UgTmFtZVwiXG4gICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtNCBweS0yIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1ncmF5LTIwMFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEZXNjcmlwdGlvbiAtLT5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gbWItMVwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiRGVzY3JpcHRpb25cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgRGVzY3JpcHRpb25cIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTQgcHktMiByb3VuZGVkIGJvcmRlciBib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICAgIHJvd3M9XCIzXCJcbiAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBSZWNpcGllbnQgQ291bnQgLS0+XG4gICAgICA8ZGl2PlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTFcIj5SZWNpcGllbnQgQ291bnQ8L2xhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJNaW5Ob09mQWN0b3JcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgQ291bnRcIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTQgcHktMiByb3VuZGVkIGJvcmRlciBib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUGFzcyBPbiBSdWxlIC0tPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSBtYi0xXCI+UGFzcyBPbiBSdWxlPC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIlBhc3NPblJ1bGVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFJ1bGVcIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTQgcHktMiByb3VuZGVkIGJvcmRlciBib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRHVyYXRpb24gLS0+XG4gICAgICA8ZGl2PlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTFcIj5EdXJhdGlvbjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkR1cmF0aW9uXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNldCBEdXJhdGlvblwiXG4gICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtNCBweS0yIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1ncmF5LTIwMFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBBY3RvciBSdWxlIC0tPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSBtYi0xXCI+QWN0b3IgUnVsZTwvbGFiZWw+XG4gICAgICAgIDxzZWxlY3RcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJBY3RvclJ1bGVcIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTQgcHktMiByb3VuZGVkIGJvcmRlciBib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICA+XG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgcnVsZSBvZiBhY3RvclJ1bGVzXCIgW3ZhbHVlXT1cInJ1bGVcIj5cbiAgICAgICAgICAgIHt7IHJ1bGUgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBJcyBFeGl0IFBvaW50IC0tPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSBtYi0xXCI+RXhpdCBQb2ludDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIklzRXhpdFBvaW50XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJoYXNPdXRnb2luZ0Nvbm5lY3Rpb25zXCJcbiAgICAgICAgICAgIGNsYXNzPVwibXItMiBoLTQgdy00XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+TWFyayBhcyB3b3JrZmxvdyBlbmQgcG9pbnQ8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVGFncyAtLT5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gbWItMVwiPlRhZ3M8L2xhYmVsPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgcC0yIG1heC1oLTQwIG92ZXJmbG93LXktYXV0b1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0YWcgb2YgdGFnc1wiIGNsYXNzPVwicHktMVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1RhZ1NlbGVjdGVkKHRhZy5JZClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlVGFnU2VsZWN0aW9uKHRhZy5JZClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXItMlwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHRhZy5OYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgcC00IGJvcmRlci10IGJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwicHgtNCBweS0yIG1yLTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gZm9udC1tZWRpdW1cIlxuICAgICAgKGNsaWNrKT1cIm9uRGlhbG9nQ2xvc2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgQ2FuY2VsXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJweC00IHB5LTIgYmcteWVsbG93LTMwMCB0ZXh0LWJsYWNrIHJvdW5kZWQgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgICAoY2xpY2spPVwic2F2ZVN0YWdlKClcIlxuICAgICAgW2Rpc2FibGVkXT1cInN0YWdlRm9ybS5pbnZhbGlkXCJcbiAgICA+XG4gICAgICBTYXZlXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "../workflow-designer.state";
|
|
4
4
|
import * as i2 from "../workflow-data.service";
|
|
5
5
|
import * as i3 from "@angular/common";
|
|
6
6
|
import * as i4 from "verben-ng-ui";
|
|
7
|
-
import * as i5 from "../stage-dialog/stage-dialog.component";
|
|
8
7
|
export class StageNodeComponent {
|
|
9
8
|
state;
|
|
10
9
|
dataService;
|
|
@@ -13,9 +12,9 @@ export class StageNodeComponent {
|
|
|
13
12
|
stageData = {};
|
|
14
13
|
stagePropertiesUpdated = new EventEmitter();
|
|
15
14
|
parallelExecutionToggled = new EventEmitter();
|
|
15
|
+
showShieldDialog = new EventEmitter();
|
|
16
16
|
// Properties for icon click events
|
|
17
17
|
showFormPopup = false;
|
|
18
|
-
showShieldPopup = false;
|
|
19
18
|
showTimerPopup = false;
|
|
20
19
|
showActionPopupLeft = false;
|
|
21
20
|
showActionPopupRight = false;
|
|
@@ -96,20 +95,12 @@ export class StageNodeComponent {
|
|
|
96
95
|
this.showFormPopup = !this.showFormPopup;
|
|
97
96
|
}
|
|
98
97
|
toggleShieldPopup(event) {
|
|
99
|
-
// Prevent the event from propagating to parent elements
|
|
100
98
|
if (event) {
|
|
101
99
|
event.preventDefault();
|
|
102
100
|
event.stopPropagation();
|
|
103
101
|
}
|
|
104
|
-
|
|
105
|
-
this.
|
|
106
|
-
console.log('Shield popup toggled:', this.showShieldPopup, 'with data:', this.node.stageData);
|
|
107
|
-
// Force change detection in case Angular isn't detecting the state change
|
|
108
|
-
setTimeout(() => {
|
|
109
|
-
if (this.showShieldPopup) {
|
|
110
|
-
console.log('Shield popup should be visible now');
|
|
111
|
-
}
|
|
112
|
-
}, 0);
|
|
102
|
+
console.log('Shield icon clicked for node:', this.node.id);
|
|
103
|
+
this.showShieldDialog.emit(this.node.id);
|
|
113
104
|
}
|
|
114
105
|
toggleTimerPopup(event) {
|
|
115
106
|
if (event) {
|
|
@@ -149,8 +140,6 @@ export class StageNodeComponent {
|
|
|
149
140
|
this.updateConnectedStagesInfo();
|
|
150
141
|
}
|
|
151
142
|
onStagePropertiesSaved(stageData) {
|
|
152
|
-
// Close the dialog
|
|
153
|
-
this.showShieldPopup = false;
|
|
154
143
|
// Emit the event to the parent component with the node id and updated data
|
|
155
144
|
this.stagePropertiesUpdated.emit({
|
|
156
145
|
nodeId: this.node.id,
|
|
@@ -159,11 +148,11 @@ export class StageNodeComponent {
|
|
|
159
148
|
console.log('Stage properties updated:', stageData);
|
|
160
149
|
}
|
|
161
150
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageNodeComponent, deps: [{ token: i1.WorkflowDesignerState }, { token: i2.WorkflowDataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
162
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StageNodeComponent, selector: "svg:g[lib-stage-node]", inputs: { node: "node", isStartNode: "isStartNode", stageData: "stageData" }, outputs: { stagePropertiesUpdated: "stagePropertiesUpdated", parallelExecutionToggled: "parallelExecutionToggled" }, ngImport: i0, template: "<svg:g>\n <!-- Stage node -->\n <svg:rect\n x=\"0\"\n y=\"0\"\n [attr.width]=\"node.width\"\n [attr.height]=\"node.height\"\n fill=\"none\"\n stroke=\"#D36CFF\"\n stroke-width=\"1\"\n ></svg:rect>\n\n <!-- Top-left icon: Stage form -->\n <svg:g\n (click)=\"toggleFormPopup($event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 6)\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\"\n />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g\n (click)=\"toggleShieldPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\"\n >\n <svg:path\n d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\"\n fill=\"black\"\n />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Left-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('left', $event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 38)\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('right', $event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g\n *ngIf=\"hasMultipleConnectedStages\"\n (click)=\"toggleCodePopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\"\n >\n <svg:text\n font-family=\"'Plus Jakarta Sans', sans-serif\"\n font-weight=\"500\"\n font-size=\"16px\"\n dominant-baseline=\"middle\"\n [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\"\n >\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g\n (click)=\"toggleTimerPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \"\n >\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text\n [attr.x]=\"node.width / 2\"\n [attr.y]=\"node.height / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n font-size=\"14\"\n fill=\"#000000\"\n >\n {{ node.stageData?.Name || \"Stage\" }}\n </svg:text>\n</svg:g>\n\n<lib-stage-dialog\n [visible]=\"showShieldPopup\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup
|
|
151
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StageNodeComponent, selector: "svg:g[lib-stage-node]", inputs: { node: "node", isStartNode: "isStartNode", stageData: "stageData" }, outputs: { stagePropertiesUpdated: "stagePropertiesUpdated", parallelExecutionToggled: "parallelExecutionToggled", showShieldDialog: "showShieldDialog" }, ngImport: i0, template: "<svg:g>\n <!-- Stage node -->\n <svg:rect\n x=\"0\"\n y=\"0\"\n [attr.width]=\"node.width\"\n [attr.height]=\"node.height\"\n fill=\"none\"\n stroke=\"#D36CFF\"\n stroke-width=\"1\"\n ></svg:rect>\n\n <!-- Top-left icon: Stage form -->\n <svg:g\n (click)=\"toggleFormPopup($event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 6)\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\"\n />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g\n (click)=\"toggleShieldPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\"\n fill=\"black\"\n />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Left-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('left', $event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 38)\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('right', $event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g\n *ngIf=\"hasMultipleConnectedStages\"\n (click)=\"toggleCodePopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\"\n >\n <svg:text\n font-family=\"'Plus Jakarta Sans', sans-serif\"\n font-weight=\"500\"\n font-size=\"16px\"\n dominant-baseline=\"middle\"\n [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\"\n >\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g\n (click)=\"toggleTimerPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \"\n >\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text\n [attr.x]=\"node.width / 2\"\n [attr.y]=\"node.height / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n font-size=\"14\"\n fill=\"#000000\"\n >\n {{ node.stageData?.Name || \"Stage\" }}\n </svg:text>\n</svg:g>\n\n<!-- <lib-stage-dialog\n [visible]=\"showShieldPopup()\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup.set(false)\"\n (saved)=\"onStagePropertiesSaved($event)\"\n></lib-stage-dialog> -->\n\n<div\n *ngIf=\"showFormPopup\"\n [style.position]=\"'fixed'\"\n [style.left.px]=\"formPopupX\"\n [style.top.px]=\"formPopupY\"\n [style.background-color]=\"'white'\"\n>\n <verben-pop-Up [dropdownOpen]=\"true\" [customStyles]=\"{ 'z-index': '100' }\">\n <div dropdown-trigger style=\"display: none\">\n <!-- Hidden trigger element -->\n </div>\n <div\n class=\"p-3 bg-white border border-gray-200 rounded shadow-md w-64\"\n dropdown-content\n style=\"background-color: white; z-index: 1000\"\n >\n <h4 class=\"mb-2 font-medium\">Select Form</h4>\n <div *ngIf=\"isLoadingForms\" class=\"text-center py-2\">\n Loading forms...\n </div>\n <div *ngIf=\"!isLoadingForms\" class=\"max-h-48 overflow-y-auto\">\n <div class=\"mb-2\">\n <button\n class=\"w-full px-3 py-2 bg-white border border-gray-200 rounded text-sm hover:bg-gray-50 text-left\"\n (click)=\"selectForm(null)\"\n >\n Clear form selection\n </button>\n </div>\n <div *ngFor=\"let form of formsList\" class=\"mb-1\">\n <button\n class=\"w-full px-3 py-2 bg-white border border-gray-200 rounded text-sm hover:bg-gray-50 text-left\"\n (click)=\"selectForm(form)\"\n >\n {{ form.Name }}\n </button>\n </div>\n <div\n *ngIf=\"formsList.length === 0\"\n class=\"text-center py-2 text-gray-500\"\n >\n No forms available\n </div>\n </div>\n </div>\n </verben-pop-Up>\n</div>\n", styles: [".stage-icon{cursor:pointer}.stage-icon:hover path{fill:#d36cff}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave"], outputs: ["dropdownOpenChange", "close"] }] });
|
|
163
152
|
}
|
|
164
153
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageNodeComponent, decorators: [{
|
|
165
154
|
type: Component,
|
|
166
|
-
args: [{ selector: 'svg:g[lib-stage-node]', template: "<svg:g>\n <!-- Stage node -->\n <svg:rect\n x=\"0\"\n y=\"0\"\n [attr.width]=\"node.width\"\n [attr.height]=\"node.height\"\n fill=\"none\"\n stroke=\"#D36CFF\"\n stroke-width=\"1\"\n ></svg:rect>\n\n <!-- Top-left icon: Stage form -->\n <svg:g\n (click)=\"toggleFormPopup($event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 6)\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\"\n />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g\n (click)=\"toggleShieldPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\"\n >\n <svg:path\n d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\"\n fill=\"black\"\n />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Left-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('left', $event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 38)\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('right', $event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g\n *ngIf=\"hasMultipleConnectedStages\"\n (click)=\"toggleCodePopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\"\n >\n <svg:text\n font-family=\"'Plus Jakarta Sans', sans-serif\"\n font-weight=\"500\"\n font-size=\"16px\"\n dominant-baseline=\"middle\"\n [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\"\n >\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g\n (click)=\"toggleTimerPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \"\n >\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text\n [attr.x]=\"node.width / 2\"\n [attr.y]=\"node.height / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n font-size=\"14\"\n fill=\"#000000\"\n >\n {{ node.stageData?.Name || \"Stage\" }}\n </svg:text>\n</svg:g>\n\n<lib-stage-dialog\n [visible]=\"showShieldPopup\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup
|
|
155
|
+
args: [{ selector: 'svg:g[lib-stage-node]', template: "<svg:g>\n <!-- Stage node -->\n <svg:rect\n x=\"0\"\n y=\"0\"\n [attr.width]=\"node.width\"\n [attr.height]=\"node.height\"\n fill=\"none\"\n stroke=\"#D36CFF\"\n stroke-width=\"1\"\n ></svg:rect>\n\n <!-- Top-left icon: Stage form -->\n <svg:g\n (click)=\"toggleFormPopup($event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 6)\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\"\n />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g\n (click)=\"toggleShieldPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\"\n fill=\"black\"\n />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Left-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('left', $event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 38)\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('right', $event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g\n *ngIf=\"hasMultipleConnectedStages\"\n (click)=\"toggleCodePopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\"\n >\n <svg:text\n font-family=\"'Plus Jakarta Sans', sans-serif\"\n font-weight=\"500\"\n font-size=\"16px\"\n dominant-baseline=\"middle\"\n [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\"\n >\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g\n (click)=\"toggleTimerPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \"\n >\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text\n [attr.x]=\"node.width / 2\"\n [attr.y]=\"node.height / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n font-size=\"14\"\n fill=\"#000000\"\n >\n {{ node.stageData?.Name || \"Stage\" }}\n </svg:text>\n</svg:g>\n\n<!-- <lib-stage-dialog\n [visible]=\"showShieldPopup()\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup.set(false)\"\n (saved)=\"onStagePropertiesSaved($event)\"\n></lib-stage-dialog> -->\n\n<div\n *ngIf=\"showFormPopup\"\n [style.position]=\"'fixed'\"\n [style.left.px]=\"formPopupX\"\n [style.top.px]=\"formPopupY\"\n [style.background-color]=\"'white'\"\n>\n <verben-pop-Up [dropdownOpen]=\"true\" [customStyles]=\"{ 'z-index': '100' }\">\n <div dropdown-trigger style=\"display: none\">\n <!-- Hidden trigger element -->\n </div>\n <div\n class=\"p-3 bg-white border border-gray-200 rounded shadow-md w-64\"\n dropdown-content\n style=\"background-color: white; z-index: 1000\"\n >\n <h4 class=\"mb-2 font-medium\">Select Form</h4>\n <div *ngIf=\"isLoadingForms\" class=\"text-center py-2\">\n Loading forms...\n </div>\n <div *ngIf=\"!isLoadingForms\" class=\"max-h-48 overflow-y-auto\">\n <div class=\"mb-2\">\n <button\n class=\"w-full px-3 py-2 bg-white border border-gray-200 rounded text-sm hover:bg-gray-50 text-left\"\n (click)=\"selectForm(null)\"\n >\n Clear form selection\n </button>\n </div>\n <div *ngFor=\"let form of formsList\" class=\"mb-1\">\n <button\n class=\"w-full px-3 py-2 bg-white border border-gray-200 rounded text-sm hover:bg-gray-50 text-left\"\n (click)=\"selectForm(form)\"\n >\n {{ form.Name }}\n </button>\n </div>\n <div\n *ngIf=\"formsList.length === 0\"\n class=\"text-center py-2 text-gray-500\"\n >\n No forms available\n </div>\n </div>\n </div>\n </verben-pop-Up>\n</div>\n", styles: [".stage-icon{cursor:pointer}.stage-icon:hover path{fill:#d36cff}\n"] }]
|
|
167
156
|
}], ctorParameters: () => [{ type: i1.WorkflowDesignerState }, { type: i2.WorkflowDataService }], propDecorators: { node: [{
|
|
168
157
|
type: Input
|
|
169
158
|
}], isStartNode: [{
|
|
@@ -174,5 +163,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
174
163
|
type: Output
|
|
175
164
|
}], parallelExecutionToggled: [{
|
|
176
165
|
type: Output
|
|
166
|
+
}], showShieldDialog: [{
|
|
167
|
+
type: Output
|
|
177
168
|
}] } });
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2Utbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBWXZFLE1BQU0sT0FBTyxrQkFBa0I7SUE0Qm5CO0lBQ0E7SUE1QkQsSUFBSSxDQUFRO0lBQ1osV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixTQUFTLEdBQTJCLEVBQUUsQ0FBQztJQUN0QyxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFHL0MsQ0FBQztJQUNLLHdCQUF3QixHQUFHLElBQUksWUFBWSxFQUdqRCxDQUFDO0lBRUwsbUNBQW1DO0lBQ25DLGFBQWEsR0FBWSxLQUFLLENBQUM7SUFDL0IsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ2hDLG1CQUFtQixHQUFZLEtBQUssQ0FBQztJQUNyQyxvQkFBb0IsR0FBWSxLQUFLLENBQUM7SUFDdEMsYUFBYSxHQUFZLEtBQUssQ0FBQztJQUUvQixTQUFTLEdBQWlCLEVBQUUsQ0FBQztJQUM3QixjQUFjLEdBQVksS0FBSyxDQUFDO0lBRWhDLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFDdkIsVUFBVSxHQUFXLENBQUMsQ0FBQztJQUV2QixZQUNVLEtBQTRCLEVBQzVC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QUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztRQUVuRCxPQUFPLENBQUMsR0FBRyxDQUNULHNCQUNFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQ2pDLFlBQVksRUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQixDQUFDLFNBQWlDO1FBQ3RELG1CQUFtQjtRQUNuQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU3QiwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQztZQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQzt3R0FyTVUsa0JBQWtCOzRGQUFsQixrQkFBa0IsZ1FDWi9CLDB2TUF1S0E7OzRGRDNKYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsdUJBQXVCOzRIQUt4QixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFJRyx3QkFBd0I7c0JBQWpDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJy4uL3dvcmtmbG93LWRlc2lnbmVyLnR5cGVzJztcbmltcG9ydCB7IFdvcmtmbG93U3RhZ2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvV29ya2Zsb3dTdGFnZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1FbnRpdHkgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvRm9ybUVudGl0eSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N2ZzpnW2xpYi1zdGFnZS1ub2RlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGFnZS1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RhZ2Utbm9kZS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFN0YWdlTm9kZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIG5vZGUhOiBOb2RlO1xuICBASW5wdXQoKSBpc1N0YXJ0Tm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4gPSB7fTtcbiAgQE91dHB1dCgpIHN0YWdlUHJvcGVydGllc1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT47XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSBwYXJhbGxlbEV4ZWN1dGlvblRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBzb3VyY2VOb2RlSWQ6IHN0cmluZztcbiAgICBpc1BhcmFsbGVsOiBib29sZWFuO1xuICB9PigpO1xuXG4gIC8vIFByb3BlcnRpZXMgZm9yIGljb24gY2xpY2sgZXZlbnRzXG4gIHNob3dGb3JtUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd1NoaWVsZFBvcHVwOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dUaW1lclBvcHVwOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBY3Rpb25Qb3B1cExlZnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0FjdGlvblBvcHVwUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0NvZGVQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZvcm1zTGlzdDogRm9ybUVudGl0eVtdID0gW107XG4gIGlzTG9hZGluZ0Zvcm1zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZm9ybVBvcHVwWDogbnVtYmVyID0gMDtcbiAgZm9ybVBvcHVwWTogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0YXRlOiBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogV29ya2Zsb3dEYXRhU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1N0YWdlIG5vZGUgaW5pdGlhbGl6ZWQgd2l0aDonLCB0aGlzLm5vZGUpO1xuICAgIHRoaXMudXBkYXRlQ29ubmVjdGVkU3RhZ2VzSW5mbygpO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGNoZWNrIGlmIHRoaXMgc3RhZ2UgaGFzIG11bHRpcGxlIG91dGdvaW5nIGNvbm5lY3Rpb25zIHRvIG90aGVyIHN0YWdlc1xuICB1cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk6IHZvaWQge1xuICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2Ygb3V0Z29pbmcgY29ubmVjdGlvbnMgdGhhdCBjb25uZWN0IHRvIHN0YWdlc1xuICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgIChjb25uKSA9PiBjb25uLnNvdXJjZU5vZGVJZCA9PT0gdGhpcy5ub2RlLmlkXG4gICAgKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgbm9kZXMgYXJlIHN0YWdlc1xuICAgIGNvbnN0IGNvbm5lY3RlZFN0YWdlTm9kZXMgPSBvdXRnb2luZ0Nvbm5lY3Rpb25zXG4gICAgICAubWFwKChjb25uKSA9PiB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCkpXG4gICAgICAuZmlsdGVyKChub2RlSW5mbykgPT4gbm9kZUluZm8gJiYgbm9kZUluZm8ubm9kZS50eXBlID09PSAnc3RhZ2UnKTtcblxuICAgIHRoaXMubm9kZS5oYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlcyA9IGNvbm5lY3RlZFN0YWdlTm9kZXMubGVuZ3RoID4gMTtcbiAgfVxuXG4gIGdldCBoYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlLmhhc011bHRpcGxlQ29ubmVjdGVkU3RhZ2VzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzUGFyYWxsZWxFeGVjdXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubm9kZS5zdGFnZURhdGE/Lmhhc1BhcmFsbGVsID09PSB0cnVlO1xuICB9XG5cbiAgc2VsZWN0Rm9ybShmb3JtOiBGb3JtRW50aXR5IHwgbnVsbCkge1xuICAgIC8vIElmIGZvcm0gaXMgbnVsbCwgd2UncmUgY2xlYXJpbmcgdGhlIHNlbGVjdGlvblxuICAgIGlmICghdGhpcy5ub2RlLnN0YWdlRGF0YSkge1xuICAgICAgdGhpcy5ub2RlLnN0YWdlRGF0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChmb3JtKSB7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1JZCA9IGZvcm0uSWQ7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1OYW1lID0gZm9ybS5OYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDbGVhciBmb3JtIHNlbGVjdGlvblxuICAgICAgZGVsZXRlIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybUlkO1xuICAgICAgZGVsZXRlIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybU5hbWU7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIHBvcHVwXG4gICAgdGhpcy5zaG93Rm9ybVBvcHVwID0gZmFsc2U7XG5cbiAgICAvLyBFbWl0IGFuIGV2ZW50IHRvIHVwZGF0ZSB0aGUgc3RhZ2UgZGF0YVxuICAgIHRoaXMuc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZC5lbWl0KHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgc3RhZ2VEYXRhOiB0aGlzLm5vZGUuc3RhZ2VEYXRhLFxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlRm9ybVBvcHVwKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgYWJzb2x1dGUgcG9zaXRpb24gZm9yIHRoZSBwb3B1cFxuICAgICAgY29uc3QgcmVjdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLmZvcm1Qb3B1cFggPSByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWDtcbiAgICAgIHRoaXMuZm9ybVBvcHVwWSA9IHJlY3QudG9wICsgd2luZG93LnNjcm9sbFk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UncmUgb3BlbmluZyB0aGUgcG9wdXAsIGxvYWQgZm9ybXNcbiAgICBpZiAoIXRoaXMuc2hvd0Zvcm1Qb3B1cCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IHRydWU7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlXG4gICAgICAgIC5nZXRGb3JtcygpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZm9ybXNMaXN0ID0gcmVzcG9uc2UuUmVzdWx0O1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRm9ybXMgPSBmYWxzZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgZm9ybXM6JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRm9ybXMgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93Rm9ybVBvcHVwID0gIXRoaXMuc2hvd0Zvcm1Qb3B1cDtcbiAgfVxuXG4gIHRvZ2dsZVNoaWVsZFBvcHVwKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIC8vIFByZXZlbnQgdGhlIGV2ZW50IGZyb20gcHJvcGFnYXRpbmcgdG8gcGFyZW50IGVsZW1lbnRzXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlIHRoZSBzaGllbGQgcG9wdXBcbiAgICB0aGlzLnNob3dTaGllbGRQb3B1cCA9ICF0aGlzLnNob3dTaGllbGRQb3B1cDtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdTaGllbGQgcG9wdXAgdG9nZ2xlZDonLFxuICAgICAgdGhpcy5zaG93U2hpZWxkUG9wdXAsXG4gICAgICAnd2l0aCBkYXRhOicsXG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhXG4gICAgKTtcblxuICAgIC8vIEZvcmNlIGNoYW5nZSBkZXRlY3Rpb24gaW4gY2FzZSBBbmd1bGFyIGlzbid0IGRldGVjdGluZyB0aGUgc3RhdGUgY2hhbmdlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaG93U2hpZWxkUG9wdXApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1NoaWVsZCBwb3B1cCBzaG91bGQgYmUgdmlzaWJsZSBub3cnKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIHRvZ2dsZVRpbWVyUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuc2hvd1RpbWVyUG9wdXAgPSAhdGhpcy5zaG93VGltZXJQb3B1cDtcbiAgfVxuXG4gIHRvZ2dsZUFjdGlvblBvcHVwKHNpZGU6ICdsZWZ0JyB8ICdyaWdodCcsIGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICBpZiAoc2lkZSA9PT0gJ2xlZnQnKSB7XG4gICAgICB0aGlzLnNob3dBY3Rpb25Qb3B1cExlZnQgPSAhdGhpcy5zaG93QWN0aW9uUG9wdXBMZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dBY3Rpb25Qb3B1cFJpZ2h0ID0gIXRoaXMuc2hvd0FjdGlvblBvcHVwUmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQ29kZVBvcHVwKGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8vIFRvZ2dsZSBwYXJhbGxlbCBleGVjdXRpb24gc3RhdGVcbiAgICBjb25zdCBuZXdQYXJhbGxlbFN0YXRlID0gIXRoaXMuaXNQYXJhbGxlbEV4ZWN1dGlvbjtcblxuICAgIC8vIFVwZGF0ZSB0aGlzIG5vZGUncyBzdGFnZSBkYXRhXG4gICAgaWYgKCF0aGlzLm5vZGUuc3RhZ2VEYXRhKSB7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhID0ge307XG4gICAgfVxuICAgIHRoaXMubm9kZS5zdGFnZURhdGEuaGFzUGFyYWxsZWwgPSBuZXdQYXJhbGxlbFN0YXRlO1xuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgUGFyYWxsZWwgZXhlY3V0aW9uICR7XG4gICAgICAgIG5ld1BhcmFsbGVsU3RhdGUgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnXG4gICAgICB9IGZvciBub2RlOmAsXG4gICAgICB0aGlzLm5vZGUuaWRcbiAgICApO1xuICB9XG5cbiAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciBjb25uZWN0aW9ucyBjaGFuZ2VcbiAgcmVmcmVzaFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ29ubmVjdGVkU3RhZ2VzSW5mbygpO1xuICB9XG5cbiAgb25TdGFnZVByb3BlcnRpZXNTYXZlZChzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4pIHtcbiAgICAvLyBDbG9zZSB0aGUgZGlhbG9nXG4gICAgdGhpcy5zaG93U2hpZWxkUG9wdXAgPSBmYWxzZTtcblxuICAgIC8vIEVtaXQgdGhlIGV2ZW50IHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdpdGggdGhlIG5vZGUgaWQgYW5kIHVwZGF0ZWQgZGF0YVxuICAgIHRoaXMuc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZC5lbWl0KHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgc3RhZ2VEYXRhOiBzdGFnZURhdGEsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnU3RhZ2UgcHJvcGVydGllcyB1cGRhdGVkOicsIHN0YWdlRGF0YSk7XG4gIH1cbn1cbiIsIjxzdmc6Zz5cbiAgPCEtLSBTdGFnZSBub2RlIC0tPlxuICA8c3ZnOnJlY3RcbiAgICB4PVwiMFwiXG4gICAgeT1cIjBcIlxuICAgIFthdHRyLndpZHRoXT1cIm5vZGUud2lkdGhcIlxuICAgIFthdHRyLmhlaWdodF09XCJub2RlLmhlaWdodFwiXG4gICAgZmlsbD1cIm5vbmVcIlxuICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICA+PC9zdmc6cmVjdD5cblxuICA8IS0tIFRvcC1sZWZ0IGljb246IFN0YWdlIGZvcm0gLS0+XG4gIDxzdmc6Z1xuICAgIChjbGljayk9XCJ0b2dnbGVGb3JtUG9wdXAoJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJzdGFnZS1pY29uXCJcbiAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNiwgNilcIlxuICA+XG4gICAgPCEtLSBUcmFuc3BhcmVudCByZWN0YW5nbGUgdG8gY2FwdHVyZSBjbGlja3MgLS0+XG4gICAgPHN2ZzpyZWN0XG4gICAgICB4PVwiLTJcIlxuICAgICAgeT1cIi0yXCJcbiAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgZmlsbD1cInRyYW5zcGFyZW50XCJcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAvPlxuXG4gICAgPHN2ZzpwYXRoXG4gICAgICBkPVwiTTE2LjUgMjAuNDc1VjE3LjQ3NUgxMy41VjE2LjQ3NUgxNi41VjEzLjQ3NUgxNy41VjE2LjQ3NUgyMC41VjE3LjQ3NUgxNy41VjIwLjQ3NUgxNi41Wk0zLjUgMTcuNVYxNi41SDQuNVYxNy41SDMuNVpNNi41IDE3LjVWMTYuNUgxMS41MTdDMTEuNTA1NyAxNi42NzY3IDExLjUwNDMgMTYuODQ1IDExLjUxMyAxNy4wMDVDMTEuNTIxIDE3LjE2NSAxMS41MzEgMTcuMzMgMTEuNTQzIDE3LjVINi41Wk0zLjUgMTMuNVYxMi41SDQuNVYxMy41SDMuNVpNNi41IDEzLjVWMTIuNUgxMy44MDRDMTMuNjEyNyAxMi42Mzg3IDEzLjQzMzMgMTIuNzkxMyAxMy4yNjYgMTIuOTU4QzEzLjA5OTMgMTMuMTI0NyAxMi45Mzc3IDEzLjMwNTMgMTIuNzgxIDEzLjVINi41Wk0zLjUgOS41VjguNUg0LjVWOS41SDMuNVpNNi41IDkuNVY4LjVIMTguNVY5LjVINi41Wk0zLjUgNS41VjQuNUg0LjVWNS41SDMuNVpNNi41IDUuNVY0LjVIMTguNVY1LjVINi41WlwiXG4gICAgICBbYXR0ci5maWxsXT1cIm5vZGUuc3RhZ2VEYXRhPy5mb3JtSWQgPyAnI0QzNkNGRicgOiAnYmxhY2snXCJcbiAgICAvPlxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gVG9wLXJpZ2h0IGljb246IFNoaWVsZCAtLT5cbiAgPHN2ZzpnXG4gICAgKGNsaWNrKT1cInRvZ2dsZVNoaWVsZFBvcHVwKCRldmVudClcIlxuICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJyArIChub2RlLndpZHRoIC0gMzApICsgJywgNiknXCJcbiAgPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk03LjUgMTJIMTYuNVYxMy41SDcuNVYxMlpNNy41IDcuNUgxNi41VjlINy41VjcuNVpcIlxuICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAvPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xMiAyMi41TDcuMzY4MDEgMjAuMDMwM0M2LjA0NzQgMTkuMzI3OSA0Ljk0MzAzIDE4LjI3OTEgNC4xNzM0OCAxNi45OTY0QzMuNDAzOTMgMTUuNzEzOCAyLjk5ODI1IDE0LjI0NTggMy4wMDAwMSAxMi43NVYzQzMuMDAwMDEgMi42MDIxOCAzLjE1ODA0IDIuMjIwNjQgMy40MzkzNSAxLjkzOTM0QzMuNzIwNjUgMS42NTgwNCA0LjEwMjE4IDEuNSA0LjUwMDAxIDEuNUgxOS41QzE5Ljg5NzggMS41IDIwLjI3OTQgMS42NTgwNCAyMC41NjA3IDEuOTM5MzRDMjAuODQyIDIuMjIwNjQgMjEgMi42MDIxOCAyMSAzVjEyLjc1QzIxLjAwMTggMTQuMjQ1OCAyMC41OTYxIDE1LjcxMzggMTkuODI2NSAxNi45OTY0QzE5LjA1NyAxOC4yNzkxIDE3Ljk1MjYgMTkuMzI3OSAxNi42MzIgMjAuMDMwM0wxMiAyMi41Wk00LjUwMDAxIDNWMTIuNzVDNC40OTkxNyAxMy45NzM4IDQuODMxNDEgMTUuMTc0NyA1LjQ2MTExIDE2LjIyNEM2LjA5MDgyIDE3LjI3MzMgNi45OTQyMyAxOC4xMzE1IDguMDc0NTEgMTguNzA2NUwxMiAyMC43OTk3TDE1LjkyNTUgMTguNzA3M0MxNy4wMDU5IDE4LjEzMjIgMTcuOTA5NCAxNy4yNzM5IDE4LjUzOTEgMTYuMjI0NEMxOS4xNjg4IDE1LjE3NSAxOS41MDEgMTMuOTczOSAxOS41IDEyLjc1VjNINC41MDAwMVpcIlxuICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAvPlxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gTGVmdC1jZW50ZXIgaWNvbjogVGh1bmRlcmJvbHQgLS0+XG4gIDxzdmc6Z1xuICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25Qb3B1cCgnbGVmdCcsICRldmVudClcIlxuICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDM4KVwiXG4gID5cbiAgICA8c3ZnOnBhdGggZD1cIk0xMSAxNUg2TDEzIDFWOUgxOEwxMSAyM1YxNVpcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gUmlnaHQtY2VudGVyIGljb246IFRodW5kZXJib2x0IC0tPlxuICA8c3ZnOmdcbiAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ3JpZ2h0JywgJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJzdGFnZS1pY29uXCJcbiAgICBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgnICsgKG5vZGUud2lkdGggLSAzMCkgKyAnLCAzOCknXCJcbiAgPlxuICAgIDxzdmc6cGF0aCBkPVwiTTExIDE1SDZMMTMgMVY5SDE4TDExIDIzVjE1WlwiIGZpbGw9XCJibGFja1wiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBCb3R0b20tbGVmdCBpY29uOiBEb3VibGUgc2xhc2ggdGV4dCAtLT5cbiAgPHN2ZzpnXG4gICAgKm5nSWY9XCJoYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlc1wiXG4gICAgKGNsaWNrKT1cInRvZ2dsZUNvZGVQb3B1cCgkZXZlbnQpXCJcbiAgICBjbGFzcz1cInN0YWdlLWljb25cIlxuICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKDYsICcgKyAobm9kZS5oZWlnaHQgLSAxNikgKyAnKSdcIlxuICA+XG4gICAgPHN2Zzp0ZXh0XG4gICAgICBmb250LWZhbWlseT1cIidQbHVzIEpha2FydGEgU2FucycsIHNhbnMtc2VyaWZcIlxuICAgICAgZm9udC13ZWlnaHQ9XCI1MDBcIlxuICAgICAgZm9udC1zaXplPVwiMTZweFwiXG4gICAgICBkb21pbmFudC1iYXNlbGluZT1cIm1pZGRsZVwiXG4gICAgICBbYXR0ci5maWxsXT1cImlzUGFyYWxsZWxFeGVjdXRpb24gPyAnI0QzNkNGRicgOiAnYmxhY2snXCJcbiAgICA+XG4gICAgICAvL1xuICAgIDwvc3ZnOnRleHQ+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBCb3R0b20tcmlnaHQgaWNvbjogVGltZXIgLS0+XG4gIDxzdmc6Z1xuICAgIChjbGljayk9XCJ0b2dnbGVUaW1lclBvcHVwKCRldmVudClcIlxuICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIlxuICAgICAgJ3RyYW5zbGF0ZSgnICsgKG5vZGUud2lkdGggLSAzMCkgKyAnLCAnICsgKG5vZGUuaGVpZ2h0IC0gMzApICsgJyknXG4gICAgXCJcbiAgPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xMS41IDNDMTQuMDE5NiAzIDE2LjQzNTkgNC4wMDA4OSAxOC4yMTc1IDUuNzgyNDlDMTkuOTk5MSA3LjU2NDA4IDIxIDkuOTgwNDQgMjEgMTIuNUMyMSAxNS4wMTk2IDE5Ljk5OTEgMTcuNDM1OSAxOC4yMTc1IDE5LjIxNzVDMTYuNDM1OSAyMC45OTkxIDE0LjAxOTYgMjIgMTEuNSAyMkM4Ljk4MDQ0IDIyIDYuNTY0MDggMjAuOTk5MSA0Ljc4MjQ5IDE5LjIxNzVDMy4wMDA4OSAxNy40MzU5IDIgMTUuMDE5NiAyIDEyLjVDMiA5Ljk4MDQ0IDMuMDAwODkgNy41NjQwOCA0Ljc4MjQ5IDUuNzgyNDlDNi41NjQwOCA0LjAwMDg5IDguOTgwNDQgMyAxMS41IDNaTTExLjUgNEM5LjI0NTY2IDQgNy4wODM2NSA0Ljg5NTUzIDUuNDg5NTkgNi40ODk1OUMzLjg5NTUzIDguMDgzNjUgMyAxMC4yNDU3IDMgMTIuNUMzIDE0Ljc1NDMgMy44OTU1MyAxNi45MTYzIDUuNDg5NTkgMTguNTEwNEM3LjA4MzY1IDIwLjEwNDUgOS4yNDU2NiAyMSAxMS41IDIxQzEyLjYxNjIgMjEgMTMuNzIxNSAyMC43ODAxIDE0Ljc1MjggMjAuMzUzQzE1Ljc4NDEgMTkuOTI1OCAxNi43MjExIDE5LjI5OTcgMTcuNTEwNCAxOC41MTA0QzE4LjI5OTcgMTcuNzIxMSAxOC45MjU4IDE2Ljc4NDEgMTkuMzUzIDE1Ljc1MjhDMTkuNzgwMSAxNC43MjE1IDIwIDEzLjYxNjIgMjAgMTIuNUMyMCAxMC4yNDU3IDE5LjEwNDUgOC4wODM2NSAxNy41MTA0IDYuNDg5NTlDMTUuOTE2MyA0Ljg5NTUzIDEzLjc1NDMgNCAxMS41IDRaTTExIDdIMTJWMTIuNDJMMTYuNyAxNS4xM0wxNi4yIDE2TDExIDEzVjdaXCJcbiAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgLz5cbiAgPC9zdmc6Zz5cblxuICA8IS0tIExhYmVsIGluIHRoZSBjZW50ZXIgLS0+XG4gIDxzdmc6dGV4dFxuICAgIFthdHRyLnhdPVwibm9kZS53aWR0aCAvIDJcIlxuICAgIFthdHRyLnldPVwibm9kZS5oZWlnaHQgLyAyXCJcbiAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiXG4gICAgZG9taW5hbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgIGZvbnQtc2l6ZT1cIjE0XCJcbiAgICBmaWxsPVwiIzAwMDAwMFwiXG4gID5cbiAgICB7eyBub2RlLnN0YWdlRGF0YT8uTmFtZSB8fCBcIlN0YWdlXCIgfX1cbiAgPC9zdmc6dGV4dD5cbjwvc3ZnOmc+XG5cbjxsaWItc3RhZ2UtZGlhbG9nXG4gIFt2aXNpYmxlXT1cInNob3dTaGllbGRQb3B1cFwiXG4gIFtzdGFnZURhdGFdPVwibm9kZS5zdGFnZURhdGEgfHwge31cIlxuICAoY2xvc2VkKT1cInNob3dTaGllbGRQb3B1cCA9IGZhbHNlXCJcbiAgKHNhdmVkKT1cIm9uU3RhZ2VQcm9wZXJ0aWVzU2F2ZWQoJGV2ZW50KVwiXG4+PC9saWItc3RhZ2UtZGlhbG9nPlxuXG48ZGl2XG4gICpuZ0lmPVwic2hvd0Zvcm1Qb3B1cFwiXG4gIFtzdHlsZS5wb3NpdGlvbl09XCInZml4ZWQnXCJcbiAgW3N0eWxlLmxlZnQucHhdPVwiZm9ybVBvcHVwWFwiXG4gIFtzdHlsZS50b3AucHhdPVwiZm9ybVBvcHVwWVwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIid3aGl0ZSdcIlxuPlxuICA8dmVyYmVuLXBvcC1VcCBbZHJvcGRvd25PcGVuXT1cInRydWVcIiBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnMTAwJyB9XCI+XG4gICAgPGRpdiBkcm9wZG93bi10cmlnZ2VyIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgPCEtLSBIaWRkZW4gdHJpZ2dlciBlbGVtZW50IC0tPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicC0zIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCBzaGFkb3ctbWQgdy02NFwiXG4gICAgICBkcm9wZG93bi1jb250ZW50XG4gICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB6LWluZGV4OiAxMDAwXCJcbiAgICA+XG4gICAgICA8aDQgY2xhc3M9XCJtYi0yIGZvbnQtbWVkaXVtXCI+U2VsZWN0IEZvcm08L2g0PlxuICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ0Zvcm1zXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0yXCI+XG4gICAgICAgIExvYWRpbmcgZm9ybXMuLi5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdGb3Jtc1wiIGNsYXNzPVwibWF4LWgtNDggb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktNTAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RGb3JtKG51bGwpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBDbGVhciBmb3JtIHNlbGVjdGlvblxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZm9ybSBvZiBmb3Jtc0xpc3RcIiBjbGFzcz1cIm1iLTFcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbCBweC0zIHB5LTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gaG92ZXI6YmctZ3JheS01MCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEZvcm0oZm9ybSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZvcm0uTmFtZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiZm9ybXNMaXN0Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0yIHRleHQtZ3JheS01MDBcIlxuICAgICAgICA+XG4gICAgICAgICAgTm8gZm9ybXMgYXZhaWxhYmxlXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvdmVyYmVuLXBvcC1VcD5cbjwvZGl2PlxuIl19
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2Utbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFZdkIsTUFBTSxPQUFPLGtCQUFrQjtJQTRCbkI7SUFDQTtJQTVCRCxJQUFJLENBQVE7SUFDWixXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLFNBQVMsR0FBMkIsRUFBRSxDQUFDO0lBQ3RDLHNCQUFzQixHQUFHLElBQUksWUFBWSxFQUcvQyxDQUFDO0lBQ0ssd0JBQXdCLEdBQUcsSUFBSSxZQUFZLEVBR2pELENBQUM7SUFDSyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRXhELG1DQUFtQztJQUNuQyxhQUFhLEdBQVksS0FBSyxDQUFDO0lBQy9CLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsbUJBQW1CLEdBQVksS0FBSyxDQUFDO0lBQ3JDLG9CQUFvQixHQUFZLEtBQUssQ0FBQztJQUN0QyxhQUFhLEdBQVksS0FBSyxDQUFDO0lBRS9CLFNBQVMsR0FBaUIsRUFBRSxDQUFDO0lBQzdCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsVUFBVSxHQUFXLENBQUMsQ0FBQztJQUN2QixVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBRXZCLFlBQ1Us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QUEyRDtJQUMzRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQixDQUFDLFNBQWlDO1FBQ3RELDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDO1lBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO3dHQXBMVSxrQkFBa0I7NEZBQWxCLGtCQUFrQixzU0NuQi9CLDY5TUFpTEE7OzRGRDlKYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsdUJBQXVCOzRIQUt4QixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFJRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBSUcsZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJy4uL3dvcmtmbG93LWRlc2lnbmVyLnR5cGVzJztcbmltcG9ydCB7IFdvcmtmbG93U3RhZ2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvV29ya2Zsb3dTdGFnZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1FbnRpdHkgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvRm9ybUVudGl0eSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N2ZzpnW2xpYi1zdGFnZS1ub2RlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGFnZS1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RhZ2Utbm9kZS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFN0YWdlTm9kZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIG5vZGUhOiBOb2RlO1xuICBASW5wdXQoKSBpc1N0YXJ0Tm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4gPSB7fTtcbiAgQE91dHB1dCgpIHN0YWdlUHJvcGVydGllc1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT47XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSBwYXJhbGxlbEV4ZWN1dGlvblRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBzb3VyY2VOb2RlSWQ6IHN0cmluZztcbiAgICBpc1BhcmFsbGVsOiBib29sZWFuO1xuICB9PigpO1xuICBAT3V0cHV0KCkgc2hvd1NoaWVsZERpYWxvZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8vIFByb3BlcnRpZXMgZm9yIGljb24gY2xpY2sgZXZlbnRzXG4gIHNob3dGb3JtUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd1RpbWVyUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0FjdGlvblBvcHVwTGVmdDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93QWN0aW9uUG9wdXBSaWdodDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93Q29kZVBvcHVwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZm9ybXNMaXN0OiBGb3JtRW50aXR5W10gPSBbXTtcbiAgaXNMb2FkaW5nRm9ybXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmb3JtUG9wdXBYOiBudW1iZXIgPSAwO1xuICBmb3JtUG9wdXBZOiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RhdGU6IFdvcmtmbG93RGVzaWduZXJTdGF0ZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBXb3JrZmxvd0RhdGFTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnU3RhZ2Ugbm9kZSBpbml0aWFsaXplZCB3aXRoOicsIHRoaXMubm9kZSk7XG4gICAgdGhpcy51cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gY2hlY2sgaWYgdGhpcyBzdGFnZSBoYXMgbXVsdGlwbGUgb3V0Z29pbmcgY29ubmVjdGlvbnMgdG8gb3RoZXIgc3RhZ2VzXG4gIHVwZGF0ZUNvbm5lY3RlZFN0YWdlc0luZm8oKTogdm9pZCB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBvdXRnb2luZyBjb25uZWN0aW9ucyB0aGF0IGNvbm5lY3QgdG8gc3RhZ2VzXG4gICAgY29uc3Qgb3V0Z29pbmdDb25uZWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgKGNvbm4pID0+IGNvbm4uc291cmNlTm9kZUlkID09PSB0aGlzLm5vZGUuaWRcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhcmdldCBub2RlcyBhcmUgc3RhZ2VzXG4gICAgY29uc3QgY29ubmVjdGVkU3RhZ2VOb2RlcyA9IG91dGdvaW5nQ29ubmVjdGlvbnNcbiAgICAgIC5tYXAoKGNvbm4pID0+IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKSlcbiAgICAgIC5maWx0ZXIoKG5vZGVJbmZvKSA9PiBub2RlSW5mbyAmJiBub2RlSW5mby5ub2RlLnR5cGUgPT09ICdzdGFnZScpO1xuXG4gICAgdGhpcy5ub2RlLmhhc011bHRpcGxlQ29ubmVjdGVkU3RhZ2VzID0gY29ubmVjdGVkU3RhZ2VOb2Rlcy5sZW5ndGggPiAxO1xuICB9XG5cbiAgZ2V0IGhhc011bHRpcGxlQ29ubmVjdGVkU3RhZ2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5vZGUuaGFzTXVsdGlwbGVDb25uZWN0ZWRTdGFnZXMgPT09IHRydWU7XG4gIH1cblxuICBnZXQgaXNQYXJhbGxlbEV4ZWN1dGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlLnN0YWdlRGF0YT8uaGFzUGFyYWxsZWwgPT09IHRydWU7XG4gIH1cblxuICBzZWxlY3RGb3JtKGZvcm06IEZvcm1FbnRpdHkgfCBudWxsKSB7XG4gICAgLy8gSWYgZm9ybSBpcyBudWxsLCB3ZSdyZSBjbGVhcmluZyB0aGUgc2VsZWN0aW9uXG4gICAgaWYgKCF0aGlzLm5vZGUuc3RhZ2VEYXRhKSB7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhID0ge307XG4gICAgfVxuXG4gICAgaWYgKGZvcm0pIHtcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybUlkID0gZm9ybS5JZDtcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybU5hbWUgPSBmb3JtLk5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENsZWFyIGZvcm0gc2VsZWN0aW9uXG4gICAgICBkZWxldGUgdGhpcy5ub2RlLnN0YWdlRGF0YS5mb3JtSWQ7XG4gICAgICBkZWxldGUgdGhpcy5ub2RlLnN0YWdlRGF0YS5mb3JtTmFtZTtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSB0aGUgcG9wdXBcbiAgICB0aGlzLnNob3dGb3JtUG9wdXAgPSBmYWxzZTtcblxuICAgIC8vIEVtaXQgYW4gZXZlbnQgdG8gdXBkYXRlIHRoZSBzdGFnZSBkYXRhXG4gICAgdGhpcy5zdGFnZVByb3BlcnRpZXNVcGRhdGVkLmVtaXQoe1xuICAgICAgbm9kZUlkOiB0aGlzLm5vZGUuaWQsXG4gICAgICBzdGFnZURhdGE6IHRoaXMubm9kZS5zdGFnZURhdGEsXG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVGb3JtUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBhYnNvbHV0ZSBwb3NpdGlvbiBmb3IgdGhlIHBvcHVwXG4gICAgICBjb25zdCByZWN0ID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMuZm9ybVBvcHVwWCA9IHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYO1xuICAgICAgdGhpcy5mb3JtUG9wdXBZID0gcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSdyZSBvcGVuaW5nIHRoZSBwb3B1cCwgbG9hZCBmb3Jtc1xuICAgIGlmICghdGhpcy5zaG93Rm9ybVBvcHVwKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZ0Zvcm1zID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAgICAgLmdldEZvcm1zKClcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5mb3Jtc0xpc3QgPSByZXNwb25zZS5SZXN1bHQ7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IGZhbHNlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmb3JtczonLCBlcnJvcik7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dGb3JtUG9wdXAgPSAhdGhpcy5zaG93Rm9ybVBvcHVwO1xuICB9XG5cbiAgdG9nZ2xlU2hpZWxkUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1NoaWVsZCBpY29uIGNsaWNrZWQgZm9yIG5vZGU6JywgdGhpcy5ub2RlLmlkKTtcbiAgICB0aGlzLnNob3dTaGllbGREaWFsb2cuZW1pdCh0aGlzLm5vZGUuaWQpO1xuICB9XG5cbiAgdG9nZ2xlVGltZXJQb3B1cChldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy5zaG93VGltZXJQb3B1cCA9ICF0aGlzLnNob3dUaW1lclBvcHVwO1xuICB9XG5cbiAgdG9nZ2xlQWN0aW9uUG9wdXAoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0JywgZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSAnbGVmdCcpIHtcbiAgICAgIHRoaXMuc2hvd0FjdGlvblBvcHVwTGVmdCA9ICF0aGlzLnNob3dBY3Rpb25Qb3B1cExlZnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd0FjdGlvblBvcHVwUmlnaHQgPSAhdGhpcy5zaG93QWN0aW9uUG9wdXBSaWdodDtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVDb2RlUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlIHBhcmFsbGVsIGV4ZWN1dGlvbiBzdGF0ZVxuICAgIGNvbnN0IG5ld1BhcmFsbGVsU3RhdGUgPSAhdGhpcy5pc1BhcmFsbGVsRXhlY3V0aW9uO1xuXG4gICAgLy8gVXBkYXRlIHRoaXMgbm9kZSdzIHN0YWdlIGRhdGFcbiAgICBpZiAoIXRoaXMubm9kZS5zdGFnZURhdGEpIHtcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGEgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5ub2RlLnN0YWdlRGF0YS5oYXNQYXJhbGxlbCA9IG5ld1BhcmFsbGVsU3RhdGU7XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBQYXJhbGxlbCBleGVjdXRpb24gJHtcbiAgICAgICAgbmV3UGFyYWxsZWxTdGF0ZSA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCdcbiAgICAgIH0gZm9yIG5vZGU6YCxcbiAgICAgIHRoaXMubm9kZS5pZFxuICAgICk7XG4gIH1cblxuICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIGNvbm5lY3Rpb25zIGNoYW5nZVxuICByZWZyZXNoU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk7XG4gIH1cblxuICBvblN0YWdlUHJvcGVydGllc1NhdmVkKHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPikge1xuICAgIC8vIEVtaXQgdGhlIGV2ZW50IHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdpdGggdGhlIG5vZGUgaWQgYW5kIHVwZGF0ZWQgZGF0YVxuICAgIHRoaXMuc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZC5lbWl0KHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgc3RhZ2VEYXRhOiBzdGFnZURhdGEsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnU3RhZ2UgcHJvcGVydGllcyB1cGRhdGVkOicsIHN0YWdlRGF0YSk7XG4gIH1cbn1cbiIsIjxzdmc6Zz5cbiAgPCEtLSBTdGFnZSBub2RlIC0tPlxuICA8c3ZnOnJlY3RcbiAgICB4PVwiMFwiXG4gICAgeT1cIjBcIlxuICAgIFthdHRyLndpZHRoXT1cIm5vZGUud2lkdGhcIlxuICAgIFthdHRyLmhlaWdodF09XCJub2RlLmhlaWdodFwiXG4gICAgZmlsbD1cIm5vbmVcIlxuICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICA+PC9zdmc6cmVjdD5cblxuICA8IS0tIFRvcC1sZWZ0IGljb246IFN0YWdlIGZvcm0gLS0+XG4gIDxzdmc6Z1xuICAgIChjbGljayk9XCJ0b2dnbGVGb3JtUG9wdXAoJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJzdGFnZS1pY29uXCJcbiAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNiwgNilcIlxuICA+XG4gICAgPCEtLSBUcmFuc3BhcmVudCByZWN0YW5nbGUgdG8gY2FwdHVyZSBjbGlja3MgLS0+XG4gICAgPHN2ZzpyZWN0XG4gICAgICB4PVwiLTJcIlxuICAgICAgeT1cIi0yXCJcbiAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgZmlsbD1cInRyYW5zcGFyZW50XCJcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAvPlxuXG4gICAgPHN2ZzpwYXRoXG4gICAgICBkPVwiTTE2LjUgMjAuNDc1VjE3LjQ3NUgxMy41VjE2LjQ3NUgxNi41VjEzLjQ3NUgxNy41VjE2LjQ3NUgyMC41VjE3LjQ3NUgxNy41VjIwLjQ3NUgxNi41Wk0zLjUgMTcuNVYxNi41SDQuNVYxNy41SDMuNVpNNi41IDE3LjVWMTYuNUgxMS41MTdDMTEuNTA1NyAxNi42NzY3IDExLjUwNDMgMTYuODQ1IDExLjUxMyAxNy4wMDVDMTEuNTIxIDE3LjE2NSAxMS41MzEgMTcuMzMgMTEuNTQzIDE3LjVINi41Wk0zLjUgMTMuNVYxMi41SDQuNVYxMy41SDMuNVpNNi41IDEzLjVWMTIuNUgxMy44MDRDMTMuNjEyNyAxMi42Mzg3IDEzLjQzMzMgMTIuNzkxMyAxMy4yNjYgMTIuOTU4QzEzLjA5OTMgMTMuMTI0NyAxMi45Mzc3IDEzLjMwNTMgMTIuNzgxIDEzLjVINi41Wk0zLjUgOS41VjguNUg0LjVWOS41SDMuNVpNNi41IDkuNVY4LjVIMTguNVY5LjVINi41Wk0zLjUgNS41VjQuNUg0LjVWNS41SDMuNVpNNi41IDUuNVY0LjVIMTguNVY1LjVINi41WlwiXG4gICAgICBbYXR0ci5maWxsXT1cIm5vZGUuc3RhZ2VEYXRhPy5mb3JtSWQgPyAnI0QzNkNGRicgOiAnYmxhY2snXCJcbiAgICAvPlxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gVG9wLXJpZ2h0IGljb246IFNoaWVsZCAtLT5cbiAgPHN2ZzpnXG4gICAgKGNsaWNrKT1cInRvZ2dsZVNoaWVsZFBvcHVwKCRldmVudClcIlxuICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJyArIChub2RlLndpZHRoIC0gMzApICsgJywgNiknXCJcbiAgPlxuICAgIDwhLS0gVHJhbnNwYXJlbnQgcmVjdGFuZ2xlIHRvIGNhcHR1cmUgY2xpY2tzIC0tPlxuICAgIDxzdmc6cmVjdFxuICAgICAgeD1cIi0yXCJcbiAgICAgIHk9XCItMlwiXG4gICAgICB3aWR0aD1cIjI0XCJcbiAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgLz5cblxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk03LjUgMTJIMTYuNVYxMy41SDcuNVYxMlpNNy41IDcuNUgxNi41VjlINy41VjcuNVpcIlxuICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAvPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xMiAyMi41TDcuMzY4MDEgMjAuMDMwM0M2LjA0NzQgMTkuMzI3OSA0Ljk0MzAzIDE4LjI3OTEgNC4xNzM0OCAxNi45OTY0QzMuNDAzOTMgMTUuNzEzOCAyLjk5ODI1IDE0LjI0NTggMy4wMDAwMSAxMi43NVYzQzMuMDAwMDEgMi42MDIxOCAzLjE1ODA0IDIuMjIwNjQgMy40MzkzNSAxLjkzOTM0QzMuNzIwNjUgMS42NTgwNCA0LjEwMjE4IDEuNSA0LjUwMDAxIDEuNUgxOS41QzE5Ljg5NzggMS41IDIwLjI3OTQgMS42NTgwNCAyMC41NjA3IDEuOTM5MzRDMjAuODQyIDIuMjIwNjQgMjEgMi42MDIxOCAyMSAzVjEyLjc1QzIxLjAwMTggMTQuMjQ1OCAyMC41OTYxIDE1LjcxMzggMTkuODI2NSAxNi45OTY0QzE5LjA1NyAxOC4yNzkxIDE3Ljk1MjYgMTkuMzI3OSAxNi42MzIgMjAuMDMwM0wxMiAyMi41Wk00LjUwMDAxIDNWMTIuNzVDNC40OTkxNyAxMy45NzM4IDQuODMxNDEgMTUuMTc0NyA1LjQ2MTExIDE2LjIyNEM2LjA5MDgyIDE3LjI3MzMgNi45OTQyMyAxOC4xMzE1IDguMDc0NTEgMTguNzA2NUwxMiAyMC43OTk3TDE1LjkyNTUgMTguNzA3M0MxNy4wMDU5IDE4LjEzMjIgMTcuOTA5NCAxNy4yNzM5IDE4LjUzOTEgMTYuMjI0NEMxOS4xNjg4IDE1LjE3NSAxOS41MDEgMTMuOTczOSAxOS41IDEyLjc1VjNINC41MDAwMVpcIlxuICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAvPlxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gTGVmdC1jZW50ZXIgaWNvbjogVGh1bmRlcmJvbHQgLS0+XG4gIDxzdmc6Z1xuICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25Qb3B1cCgnbGVmdCcsICRldmVudClcIlxuICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDM4KVwiXG4gID5cbiAgICA8c3ZnOnBhdGggZD1cIk0xMSAxNUg2TDEzIDFWOUgxOEwxMSAyM1YxNVpcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gUmlnaHQtY2VudGVyIGljb246IFRodW5kZXJib2x0IC0tPlxuICA8c3ZnOmdcbiAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ3JpZ2h0JywgJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJzdGFnZS1pY29uXCJcbiAgICBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgnICsgKG5vZGUud2lkdGggLSAzMCkgKyAnLCAzOCknXCJcbiAgPlxuICAgIDxzdmc6cGF0aCBkPVwiTTExIDE1SDZMMTMgMVY5SDE4TDExIDIzVjE1WlwiIGZpbGw9XCJibGFja1wiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBCb3R0b20tbGVmdCBpY29uOiBEb3VibGUgc2xhc2ggdGV4dCAtLT5cbiAgPHN2ZzpnXG4gICAgKm5nSWY9XCJoYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlc1wiXG4gICAgKGNsaWNrKT1cInRvZ2dsZUNvZGVQb3B1cCgkZXZlbnQpXCJcbiAgICBjbGFzcz1cInN0YWdlLWljb25cIlxuICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKDYsICcgKyAobm9kZS5oZWlnaHQgLSAxNikgKyAnKSdcIlxuICA+XG4gICAgPHN2Zzp0ZXh0XG4gICAgICBmb250LWZhbWlseT1cIidQbHVzIEpha2FydGEgU2FucycsIHNhbnMtc2VyaWZcIlxuICAgICAgZm9udC13ZWlnaHQ9XCI1MDBcIlxuICAgICAgZm9udC1zaXplPVwiMTZweFwiXG4gICAgICBkb21pbmFudC1iYXNlbGluZT1cIm1pZGRsZVwiXG4gICAgICBbYXR0ci5maWxsXT1cImlzUGFyYWxsZWxFeGVjdXRpb24gPyAnI0QzNkNGRicgOiAnYmxhY2snXCJcbiAgICA+XG4gICAgICAvL1xuICAgIDwvc3ZnOnRleHQ+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBCb3R0b20tcmlnaHQgaWNvbjogVGltZXIgLS0+XG4gIDxzdmc6Z1xuICAgIChjbGljayk9XCJ0b2dnbGVUaW1lclBvcHVwKCRldmVudClcIlxuICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIlxuICAgICAgJ3RyYW5zbGF0ZSgnICsgKG5vZGUud2lkdGggLSAzMCkgKyAnLCAnICsgKG5vZGUuaGVpZ2h0IC0gMzApICsgJyknXG4gICAgXCJcbiAgPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xMS41IDNDMTQuMDE5NiAzIDE2LjQzNTkgNC4wMDA4OSAxOC4yMTc1IDUuNzgyNDlDMTkuOTk5MSA3LjU2NDA4IDIxIDkuOTgwNDQgMjEgMTIuNUMyMSAxNS4wMTk2IDE5Ljk5OTEgMTcuNDM1OSAxOC4yMTc1IDE5LjIxNzVDMTYuNDM1OSAyMC45OTkxIDE0LjAxOTYgMjIgMTEuNSAyMkM4Ljk4MDQ0IDIyIDYuNTY0MDggMjAuOTk5MSA0Ljc4MjQ5IDE5LjIxNzVDMy4wMDA4OSAxNy40MzU5IDIgMTUuMDE5NiAyIDEyLjVDMiA5Ljk4MDQ0IDMuMDAwODkgNy41NjQwOCA0Ljc4MjQ5IDUuNzgyNDlDNi41NjQwOCA0LjAwMDg5IDguOTgwNDQgMyAxMS41IDNaTTExLjUgNEM5LjI0NTY2IDQgNy4wODM2NSA0Ljg5NTUzIDUuNDg5NTkgNi40ODk1OUMzLjg5NTUzIDguMDgzNjUgMyAxMC4yNDU3IDMgMTIuNUMzIDE0Ljc1NDMgMy44OTU1MyAxNi45MTYzIDUuNDg5NTkgMTguNTEwNEM3LjA4MzY1IDIwLjEwNDUgOS4yNDU2NiAyMSAxMS41IDIxQzEyLjYxNjIgMjEgMTMuNzIxNSAyMC43ODAxIDE0Ljc1MjggMjAuMzUzQzE1Ljc4NDEgMTkuOTI1OCAxNi43MjExIDE5LjI5OTcgMTcuNTEwNCAxOC41MTA0QzE4LjI5OTcgMTcuNzIxMSAxOC45MjU4IDE2Ljc4NDEgMTkuMzUzIDE1Ljc1MjhDMTkuNzgwMSAxNC43MjE1IDIwIDEzLjYxNjIgMjAgMTIuNUMyMCAxMC4yNDU3IDE5LjEwNDUgOC4wODM2NSAxNy41MTA0IDYuNDg5NTlDMTUuOTE2MyA0Ljg5NTUzIDEzLjc1NDMgNCAxMS41IDRaTTExIDdIMTJWMTIuNDJMMTYuNyAxNS4xM0wxNi4yIDE2TDExIDEzVjdaXCJcbiAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgLz5cbiAgPC9zdmc6Zz5cblxuICA8IS0tIExhYmVsIGluIHRoZSBjZW50ZXIgLS0+XG4gIDxzdmc6dGV4dFxuICAgIFthdHRyLnhdPVwibm9kZS53aWR0aCAvIDJcIlxuICAgIFthdHRyLnldPVwibm9kZS5oZWlnaHQgLyAyXCJcbiAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiXG4gICAgZG9taW5hbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgIGZvbnQtc2l6ZT1cIjE0XCJcbiAgICBmaWxsPVwiIzAwMDAwMFwiXG4gID5cbiAgICB7eyBub2RlLnN0YWdlRGF0YT8uTmFtZSB8fCBcIlN0YWdlXCIgfX1cbiAgPC9zdmc6dGV4dD5cbjwvc3ZnOmc+XG5cbjwhLS0gPGxpYi1zdGFnZS1kaWFsb2dcbiAgW3Zpc2libGVdPVwic2hvd1NoaWVsZFBvcHVwKClcIlxuICBbc3RhZ2VEYXRhXT1cIm5vZGUuc3RhZ2VEYXRhIHx8IHt9XCJcbiAgKGNsb3NlZCk9XCJzaG93U2hpZWxkUG9wdXAuc2V0KGZhbHNlKVwiXG4gIChzYXZlZCk9XCJvblN0YWdlUHJvcGVydGllc1NhdmVkKCRldmVudClcIlxuPjwvbGliLXN0YWdlLWRpYWxvZz4gLS0+XG5cbjxkaXZcbiAgKm5nSWY9XCJzaG93Rm9ybVBvcHVwXCJcbiAgW3N0eWxlLnBvc2l0aW9uXT1cIidmaXhlZCdcIlxuICBbc3R5bGUubGVmdC5weF09XCJmb3JtUG9wdXBYXCJcbiAgW3N0eWxlLnRvcC5weF09XCJmb3JtUG9wdXBZXCJcbiAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3doaXRlJ1wiXG4+XG4gIDx2ZXJiZW4tcG9wLVVwIFtkcm9wZG93bk9wZW5dPVwidHJ1ZVwiIFtjdXN0b21TdHlsZXNdPVwieyAnei1pbmRleCc6ICcxMDAnIH1cIj5cbiAgICA8ZGl2IGRyb3Bkb3duLXRyaWdnZXIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgICA8IS0tIEhpZGRlbiB0cmlnZ2VyIGVsZW1lbnQgLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwLTMgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHNoYWRvdy1tZCB3LTY0XCJcbiAgICAgIGRyb3Bkb3duLWNvbnRlbnRcbiAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IHotaW5kZXg6IDEwMDBcIlxuICAgID5cbiAgICAgIDxoNCBjbGFzcz1cIm1iLTIgZm9udC1tZWRpdW1cIj5TZWxlY3QgRm9ybTwvaDQ+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nRm9ybXNcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTJcIj5cbiAgICAgICAgTG9hZGluZyBmb3Jtcy4uLlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ0Zvcm1zXCIgY2xhc3M9XCJtYXgtaC00OCBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbCBweC0zIHB5LTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gaG92ZXI6YmctZ3JheS01MCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEZvcm0obnVsbClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIENsZWFyIGZvcm0gc2VsZWN0aW9uXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmb3JtIG9mIGZvcm1zTGlzdFwiIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTMgcHktMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBob3ZlcjpiZy1ncmF5LTUwIHRleHQtbGVmdFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Rm9ybShmb3JtKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZm9ybS5OYW1lIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJmb3Jtc0xpc3QubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyIHB5LTIgdGV4dC1ncmF5LTUwMFwiXG4gICAgICAgID5cbiAgICAgICAgICBObyBmb3JtcyBhdmFpbGFibGVcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC92ZXJiZW4tcG9wLVVwPlxuPC9kaXY+XG4iXX0=
|