@tuki-io/tuki-widgets 0.0.176 → 0.0.178
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/README.md +24 -24
- package/contact-center/cc-script-editor/cc-script-editor.component.d.ts +53 -0
- package/contact-center/cc-script-editor/cc-script-editor.module.d.ts +20 -0
- package/contact-center/cc-script-editor/components/dialogs/add-node-dialog/add-node-dialog.component.d.ts +35 -0
- package/contact-center/cc-script-editor/components/dialogs/link-node-dialog/link-node-dialog.component.d.ts +38 -0
- package/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.component.d.ts +34 -0
- package/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.module.d.ts +9 -0
- package/contact-center/cc-script-editor/components/node-action-toolbar/node-action-toolbar.component.d.ts +27 -0
- package/contact-center/cc-script-editor/components/node-details-sidebar/node-details-sidebar.component.d.ts +27 -0
- package/contact-center/cc-script-editor/components/node-search-panel/node-search-panel.component.d.ts +14 -0
- package/contact-center/cc-script-editor/components/wxcc-actions-bar/wxcc-actions-bar.component.d.ts +11 -0
- package/contact-center/cc-script-editor/components/wxcc-file-selection-bar/wxcc-file-selection-bar.component.d.ts +24 -0
- package/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.d.ts +66 -0
- package/contact-center/cc-script-editor/constants/cytoscape.config.d.ts +2 -0
- package/contact-center/cc-script-editor/constants/wxcc-api.constants.d.ts +15 -0
- package/contact-center/cc-script-editor/services/wxcc-activity-creation.service.d.ts +21 -0
- package/contact-center/cc-script-editor/services/wxcc-activity-manage.service.d.ts +8 -0
- package/contact-center/cc-script-editor/services/wxcc-flow-api.service.d.ts +43 -0
- package/contact-center/cc-script-editor/services/wxcc2graph.service.d.ts +42 -0
- package/contact-center/cc-script-editor/types/extended-activity.d.ts +47 -0
- package/contact-center/cc-script-editor/types/wxcc-activity.d.ts +96 -0
- package/contact-center/cc-script-editor/types/wxcc.d.ts +161 -0
- package/contact-center/cc-script-editor/utils/node-html-template.d.ts +3 -0
- package/contact-center/cc-script-editor/utils/node-mappings.d.ts +54 -0
- package/contact-center/public-api.d.ts +2 -0
- package/contact-center/shared/material.module.d.ts +2 -1
- package/esm2020/contact-center/cc-script-editor/cc-script-editor.component.mjs +193 -0
- package/esm2020/contact-center/cc-script-editor/cc-script-editor.module.mjs +83 -0
- package/esm2020/contact-center/cc-script-editor/components/dialogs/add-node-dialog/add-node-dialog.component.mjs +60 -0
- package/esm2020/contact-center/cc-script-editor/components/dialogs/link-node-dialog/link-node-dialog.component.mjs +83 -0
- package/esm2020/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.component.mjs +104 -0
- package/esm2020/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.module.mjs +28 -0
- package/esm2020/contact-center/cc-script-editor/components/node-action-toolbar/node-action-toolbar.component.mjs +65 -0
- package/esm2020/contact-center/cc-script-editor/components/node-details-sidebar/node-details-sidebar.component.mjs +97 -0
- package/esm2020/contact-center/cc-script-editor/components/node-search-panel/node-search-panel.component.mjs +43 -0
- package/esm2020/contact-center/cc-script-editor/components/wxcc-actions-bar/wxcc-actions-bar.component.mjs +27 -0
- package/esm2020/contact-center/cc-script-editor/components/wxcc-file-selection-bar/wxcc-file-selection-bar.component.mjs +61 -0
- package/esm2020/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.mjs +434 -0
- package/esm2020/contact-center/cc-script-editor/constants/cytoscape.config.mjs +72 -0
- package/esm2020/contact-center/cc-script-editor/constants/wxcc-api.constants.mjs +14 -0
- package/esm2020/contact-center/cc-script-editor/mock/data/QWC_ir.json +912 -0
- package/esm2020/contact-center/cc-script-editor/services/wxcc-activity-creation.service.mjs +82 -0
- package/esm2020/contact-center/cc-script-editor/services/wxcc-activity-manage.service.mjs +162 -0
- package/esm2020/contact-center/cc-script-editor/services/wxcc-flow-api.service.mjs +79 -0
- package/esm2020/contact-center/cc-script-editor/services/wxcc2graph.service.mjs +144 -0
- package/esm2020/contact-center/cc-script-editor/types/extended-activity.mjs +4 -0
- package/esm2020/contact-center/cc-script-editor/types/wxcc-activity.mjs +2 -0
- package/esm2020/contact-center/cc-script-editor/types/wxcc.mjs +6 -0
- package/esm2020/contact-center/cc-script-editor/utils/node-html-template.mjs +76 -0
- package/esm2020/contact-center/cc-script-editor/utils/node-mappings.mjs +109 -0
- package/esm2020/contact-center/public-api.mjs +3 -1
- package/esm2020/contact-center/shared/material.module.mjs +8 -4
- package/esm2020/lib/widgets.component.mjs +9 -9
- package/esm2020/lib/widgets.module.mjs +1 -1
- package/esm2020/lib/widgets.service.mjs +1 -1
- package/esm2020/public-api.mjs +1 -1
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +2 -2
- package/esm2020/user-device-manage/public-api.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-association.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-directory.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/notification.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/recording-options.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/site-defaults.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/types.mjs +1 -1
- package/esm2020/user-device-manage/src/common-functions.mjs +1 -1
- package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +1 -1
- package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +2 -2
- package/esm2020/user-device-manage/src/environments/environment.mjs +1 -1
- package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +1 -1
- package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +1 -1
- package/esm2020/user-device-manage/src/material.module.mjs +1 -1
- package/esm2020/user-device-manage/src/notifications/notification.component.mjs +3 -3
- package/esm2020/user-device-manage/src/services/device.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/notification.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/site-settings.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/utils.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/validation.service.mjs +1 -1
- package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +1 -1
- package/esm2020/user-manage/public-api.mjs +1 -1
- package/esm2020/user-manage/src/classes/device.mjs +1 -1
- package/esm2020/user-manage/src/classes/line-association.mjs +1 -1
- package/esm2020/user-manage/src/classes/line-call-info-display.mjs +1 -1
- package/esm2020/user-manage/src/classes/notification.mjs +1 -1
- package/esm2020/user-manage/src/classes/recording-options.mjs +1 -1
- package/esm2020/user-manage/src/classes/table-data.mjs +1 -1
- package/esm2020/user-manage/src/classes/translation-pattern.mjs +1 -1
- package/esm2020/user-manage/src/classes/user-list.mjs +1 -1
- package/esm2020/user-manage/src/common-functions.mjs +1 -1
- package/esm2020/user-manage/src/environments/environment.mjs +1 -1
- package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +1 -1
- package/esm2020/user-manage/src/material.module.mjs +1 -1
- package/esm2020/user-manage/src/notifications/notification.component.mjs +3 -3
- package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/user-manage/src/services/dns.service.mjs +1 -1
- package/esm2020/user-manage/src/services/line.service.mjs +1 -1
- package/esm2020/user-manage/src/services/notification.service.mjs +1 -1
- package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/user-manage/src/services/site-settings.service.mjs +1 -1
- package/esm2020/user-manage/src/services/sorting-utils.service.mjs +1 -1
- package/esm2020/user-manage/src/services/utils.service.mjs +1 -1
- package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +3 -3
- package/esm2020/user-manage/src/user-manage-widget.component.mjs +2 -2
- package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +1 -1
- package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +3 -3
- package/esm2020/users-list/public-api.mjs +1 -1
- package/esm2020/users-list/src/classes/app-location.mjs +1 -1
- package/esm2020/users-list/src/classes/device.mjs +1 -1
- package/esm2020/users-list/src/classes/line.mjs +1 -1
- package/esm2020/users-list/src/classes/notification.mjs +1 -1
- package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
- package/esm2020/users-list/src/classes/table-data.mjs +1 -1
- package/esm2020/users-list/src/classes/user-list.mjs +1 -1
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +3 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +3 -3
- package/esm2020/users-list/src/services/api-webex.service.mjs +1 -1
- package/esm2020/users-list/src/services/api.service.mjs +1 -1
- package/esm2020/users-list/src/services/events-communication.service.mjs +1 -1
- package/esm2020/users-list/src/services/notification.service.mjs +1 -1
- package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/users-list/src/services/site-settings.service.mjs +1 -1
- package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
- package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +1 -1
- package/esm2020/users-list/src/utils/common-functions.mjs +1 -1
- package/esm2020/users-list/src/utils/utils.service.mjs +1 -1
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +2948 -3
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +2 -2
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +10 -10
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +8 -8
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +8 -8
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets.mjs +8 -8
- package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +2974 -3
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +2 -2
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +10 -10
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +8 -8
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +8 -8
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets.mjs +8 -8
- package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, ViewChild } from "@angular/core";
|
|
2
|
+
import cytoscape from "cytoscape";
|
|
3
|
+
import dagre from "cytoscape-dagre";
|
|
4
|
+
import nodeHtmlLabel from "cytoscape-node-html-label";
|
|
5
|
+
import { StyleConfig } from "../../constants/cytoscape.config";
|
|
6
|
+
import { getNodeHtmlTemplate } from "../../utils/node-html-template";
|
|
7
|
+
import { AddNodeDialogComponent } from "../dialogs/add-node-dialog/add-node-dialog.component";
|
|
8
|
+
import { LinkNodeDialogComponent } from "../dialogs/link-node-dialog/link-node-dialog.component";
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../../services/wxcc2graph.service";
|
|
11
|
+
import * as i2 from "@angular/material/dialog";
|
|
12
|
+
import * as i3 from "../../services/wxcc-activity-creation.service";
|
|
13
|
+
import * as i4 from "@angular/common";
|
|
14
|
+
import * as i5 from "@angular/material/tooltip";
|
|
15
|
+
import * as i6 from "../floating-toolbar/floating-toolbar.component";
|
|
16
|
+
import * as i7 from "../node-details-sidebar/node-details-sidebar.component";
|
|
17
|
+
import * as i8 from "../node-action-toolbar/node-action-toolbar.component";
|
|
18
|
+
import * as i9 from "../node-search-panel/node-search-panel.component";
|
|
19
|
+
cytoscape.use(dagre);
|
|
20
|
+
cytoscape.use(nodeHtmlLabel);
|
|
21
|
+
export class WxCCFlowchartComponent {
|
|
22
|
+
constructor(wxcc2graph,
|
|
23
|
+
// private readonly cytoscapeViewportService: CytoscapeViewportService,
|
|
24
|
+
dialog, wxccActivityCreationService, cdr) {
|
|
25
|
+
this.wxcc2graph = wxcc2graph;
|
|
26
|
+
this.dialog = dialog;
|
|
27
|
+
this.wxccActivityCreationService = wxccActivityCreationService;
|
|
28
|
+
this.cdr = cdr;
|
|
29
|
+
this.viewReady = false;
|
|
30
|
+
this.layoutOptions = {
|
|
31
|
+
name: "dagre",
|
|
32
|
+
rankDir: "LR",
|
|
33
|
+
nodeSep: 180,
|
|
34
|
+
edgeSep: 60,
|
|
35
|
+
rankSep: 150,
|
|
36
|
+
animate: true,
|
|
37
|
+
animationDuration: 500,
|
|
38
|
+
fit: true
|
|
39
|
+
};
|
|
40
|
+
// Sidebar state
|
|
41
|
+
this.isSidebarOpen = false;
|
|
42
|
+
this.selectedNodeData = null;
|
|
43
|
+
// Search panel state
|
|
44
|
+
this.isSearchPanelVisible = false;
|
|
45
|
+
this.searchPanelVisible = false;
|
|
46
|
+
// Node action toolbar state
|
|
47
|
+
this.isNodeToolbarVisible = false;
|
|
48
|
+
this.nodeToolbarPosition = { x: 0, y: 0 };
|
|
49
|
+
// Add node dialog state
|
|
50
|
+
this.availableNodes = [];
|
|
51
|
+
// Link node dialog state
|
|
52
|
+
this.isLinkDialogOpen = false;
|
|
53
|
+
this.selectedEdgeId = null;
|
|
54
|
+
this.selectedEdgeDeleteButtonPosition = null;
|
|
55
|
+
}
|
|
56
|
+
ngAfterViewInit() {
|
|
57
|
+
this.viewReady = true;
|
|
58
|
+
this.tryInit();
|
|
59
|
+
}
|
|
60
|
+
ngOnChanges(changes) {
|
|
61
|
+
if (changes["flowchart"]) {
|
|
62
|
+
this.tryInit();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
ngOnDestroy() {
|
|
66
|
+
this.cy?.destroy();
|
|
67
|
+
this.cy = undefined;
|
|
68
|
+
}
|
|
69
|
+
tryInit() {
|
|
70
|
+
if (!this.viewReady || !this.flowchartContainer || !this.flowchart) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
this.init();
|
|
74
|
+
}
|
|
75
|
+
init() {
|
|
76
|
+
const container = this.flowchartContainer.nativeElement;
|
|
77
|
+
this.cy?.destroy();
|
|
78
|
+
this.cy = undefined;
|
|
79
|
+
const elements = [
|
|
80
|
+
...this.flowchart.nodes,
|
|
81
|
+
...this.flowchart.edges,
|
|
82
|
+
];
|
|
83
|
+
this.cy = cytoscape({
|
|
84
|
+
container: container,
|
|
85
|
+
elements: elements,
|
|
86
|
+
style: this.getStylesheet(),
|
|
87
|
+
});
|
|
88
|
+
this.cy.nodeHtmlLabel([
|
|
89
|
+
{
|
|
90
|
+
query: "node",
|
|
91
|
+
halign: "center",
|
|
92
|
+
valign: "center",
|
|
93
|
+
halignBox: "center",
|
|
94
|
+
valignBox: "center",
|
|
95
|
+
tpl: (data) => getNodeHtmlTemplate(data),
|
|
96
|
+
},
|
|
97
|
+
]);
|
|
98
|
+
const layout = this.cy?.layout({
|
|
99
|
+
...this.layoutOptions,
|
|
100
|
+
}).run();
|
|
101
|
+
layout.on("layoutstop", () => {
|
|
102
|
+
// this.cytoscapeViewportService.resetView(this.cy, this.cy?.elements());
|
|
103
|
+
});
|
|
104
|
+
this.setupEventListeners();
|
|
105
|
+
}
|
|
106
|
+
get activities() { return this.wxcc2graph.getAllActivities(); }
|
|
107
|
+
// Toggle search panel visibility
|
|
108
|
+
toggleSearchPanel() {
|
|
109
|
+
this.isSearchPanelVisible = !this.isSearchPanelVisible;
|
|
110
|
+
this.cdr.markForCheck();
|
|
111
|
+
}
|
|
112
|
+
setupEventListeners() {
|
|
113
|
+
// Single tap on node - show only the toolbar (quick actions)
|
|
114
|
+
this.cy?.on("mouseover", "node", (event) => {
|
|
115
|
+
const node = event.target;
|
|
116
|
+
this.selectedNodeData = node.data();
|
|
117
|
+
// Calculate toolbar position relative to the container
|
|
118
|
+
this.updateToolbarPosition(node);
|
|
119
|
+
this.isNodeToolbarVisible = true;
|
|
120
|
+
this.cdr.detectChanges();
|
|
121
|
+
});
|
|
122
|
+
this.cy?.on("tap", "node", (event) => {
|
|
123
|
+
const node = event.target;
|
|
124
|
+
this.clearSelectedEdge();
|
|
125
|
+
this.selectedNodeData = node.data();
|
|
126
|
+
this.isSidebarOpen = true;
|
|
127
|
+
// Hide toolbar when sidebar opens
|
|
128
|
+
this.isNodeToolbarVisible = false;
|
|
129
|
+
this.cdr.detectChanges();
|
|
130
|
+
});
|
|
131
|
+
this.cy?.on("mousemove", "node", (event) => {
|
|
132
|
+
const node = event.target;
|
|
133
|
+
this.updateToolbarPosition(node);
|
|
134
|
+
this.cdr.detectChanges();
|
|
135
|
+
});
|
|
136
|
+
// Edge tap - select edge for explicit deletion action
|
|
137
|
+
this.cy?.on("tap", "edge", (event) => {
|
|
138
|
+
const edge = event.target;
|
|
139
|
+
this.isSidebarOpen = false;
|
|
140
|
+
this.hideNodeToolbar();
|
|
141
|
+
this.selectedNodeData = null;
|
|
142
|
+
this.selectedEdgeId = edge.id();
|
|
143
|
+
edge.select();
|
|
144
|
+
this.updateSelectedEdgeDeleteButtonPosition();
|
|
145
|
+
this.cdr.detectChanges();
|
|
146
|
+
});
|
|
147
|
+
// Canvas tap - hide toolbar and deselect
|
|
148
|
+
this.cy?.on("tap", (event) => {
|
|
149
|
+
if (event.target === this.cy) {
|
|
150
|
+
this.clearSelectedEdge();
|
|
151
|
+
this.isSidebarOpen = false;
|
|
152
|
+
this.hideNodeToolbar();
|
|
153
|
+
this.selectedNodeData = null;
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
// Pan/zoom events - update toolbar position
|
|
157
|
+
this.cy?.on("pan zoom", () => {
|
|
158
|
+
if (this.isNodeToolbarVisible && this.selectedNodeData) {
|
|
159
|
+
const node = this.cy?.getElementById(this.selectedNodeData.id);
|
|
160
|
+
if (node?.length) {
|
|
161
|
+
this.updateToolbarPosition(node);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (this.selectedEdgeId) {
|
|
165
|
+
this.updateSelectedEdgeDeleteButtonPosition();
|
|
166
|
+
}
|
|
167
|
+
this.cdr.detectChanges();
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
updateToolbarPosition(node) {
|
|
171
|
+
const renderedPosition = node.renderedPosition();
|
|
172
|
+
const renderedWidth = node.renderedWidth();
|
|
173
|
+
const renderedHeight = node.renderedHeight();
|
|
174
|
+
// Position toolbar above the node, centered
|
|
175
|
+
this.nodeToolbarPosition = {
|
|
176
|
+
x: renderedPosition.x - 30,
|
|
177
|
+
y: renderedPosition.y - renderedHeight / 2 - 40, // Above the node
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
hideNodeToolbar() {
|
|
181
|
+
this.isNodeToolbarVisible = false;
|
|
182
|
+
this.cdr.detectChanges();
|
|
183
|
+
}
|
|
184
|
+
getStylesheet() {
|
|
185
|
+
return StyleConfig;
|
|
186
|
+
}
|
|
187
|
+
// ==================== Sidebar Events ====================
|
|
188
|
+
onCloseSidebar() {
|
|
189
|
+
this.isSidebarOpen = false;
|
|
190
|
+
this.hideNodeToolbar();
|
|
191
|
+
this.selectedNodeData = null;
|
|
192
|
+
// this.cdr.detectChanges();
|
|
193
|
+
}
|
|
194
|
+
onDescriptionChange(description) {
|
|
195
|
+
if (!this.selectedNodeData || !this.cy)
|
|
196
|
+
return;
|
|
197
|
+
const node = this.cy?.getElementById(this.selectedNodeData.id);
|
|
198
|
+
if (node) {
|
|
199
|
+
const updatedData = {
|
|
200
|
+
...this.selectedNodeData,
|
|
201
|
+
suggestedProperties: {
|
|
202
|
+
...this.selectedNodeData.suggestedProperties,
|
|
203
|
+
uccxDescription: description,
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
this.wxcc2graph.updateActivityData(updatedData);
|
|
207
|
+
node.data(updatedData);
|
|
208
|
+
this.selectedNodeData = updatedData;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
onActivityTypeChange(activityType) {
|
|
212
|
+
if (!this.selectedNodeData || !this.cy)
|
|
213
|
+
return;
|
|
214
|
+
const node = this.cy?.getElementById(this.selectedNodeData.id);
|
|
215
|
+
if (node) {
|
|
216
|
+
const updatedData = {
|
|
217
|
+
...this.selectedNodeData,
|
|
218
|
+
wxccActivityName: activityType.activityName,
|
|
219
|
+
wxccGroup: activityType.group,
|
|
220
|
+
iconUrl: activityType.icon
|
|
221
|
+
};
|
|
222
|
+
this.wxcc2graph.updateActivityData(updatedData);
|
|
223
|
+
node.data(updatedData);
|
|
224
|
+
this.selectedNodeData = updatedData;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// ==================== Node Toolbar Events ====================
|
|
228
|
+
onDeleteNode() {
|
|
229
|
+
if (!this.selectedNodeData || !this.cy)
|
|
230
|
+
return;
|
|
231
|
+
const nodeId = this.selectedNodeData.id;
|
|
232
|
+
// Remove from service and get affected link IDs
|
|
233
|
+
const { removedLinkIds } = this.wxcc2graph.removeActivity(nodeId);
|
|
234
|
+
// Remove edges from cytoscape
|
|
235
|
+
removedLinkIds.forEach((linkId) => {
|
|
236
|
+
this.cy?.getElementById(linkId).remove();
|
|
237
|
+
});
|
|
238
|
+
// Remove node from cytoscape
|
|
239
|
+
this.cy?.getElementById(nodeId).remove();
|
|
240
|
+
// Close sidebar and toolbar
|
|
241
|
+
this.onCloseSidebar();
|
|
242
|
+
// Re-run layout
|
|
243
|
+
this.runLayout();
|
|
244
|
+
}
|
|
245
|
+
onDeleteSelectedEdge() {
|
|
246
|
+
if (!this.selectedEdgeId || !this.cy)
|
|
247
|
+
return;
|
|
248
|
+
const edgeId = this.selectedEdgeId;
|
|
249
|
+
const removed = this.wxcc2graph.removeLink(edgeId);
|
|
250
|
+
if (!removed)
|
|
251
|
+
return;
|
|
252
|
+
this.cy?.getElementById(edgeId).remove();
|
|
253
|
+
this.selectedEdgeId = null;
|
|
254
|
+
this.selectedEdgeDeleteButtonPosition = null;
|
|
255
|
+
this.cdr.detectChanges();
|
|
256
|
+
}
|
|
257
|
+
onLinkNodeRequest() {
|
|
258
|
+
if (!this.selectedNodeData || !this.cy)
|
|
259
|
+
return;
|
|
260
|
+
const sourceNode = this.selectedNodeData;
|
|
261
|
+
if (!this.canCreateOutgoingLink(sourceNode.id)) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
// Get the cytoscape node to inspect existing connections
|
|
265
|
+
const cyNode = this.cy?.getElementById(sourceNode.id);
|
|
266
|
+
// Collect IDs of nodes already connected as targets from this source
|
|
267
|
+
const existingTargetIds = new Set(cyNode.outgoers('node').map((n) => n.id()));
|
|
268
|
+
// Build the filtered list of linkable targets:
|
|
269
|
+
// - Never allow the start node (NewPhoneContact) as a target
|
|
270
|
+
// - Exclude the source node itself
|
|
271
|
+
// - Exclude nodes already linked as targets from this source
|
|
272
|
+
this.availableNodes = this.wxcc2graph.getAllActivities().filter(act => act.id !== sourceNode.id &&
|
|
273
|
+
act.wxccActivityName !== 'NewPhoneContact' &&
|
|
274
|
+
!existingTargetIds.has(act.id));
|
|
275
|
+
const dialogRef = this.dialog.open(LinkNodeDialogComponent, {
|
|
276
|
+
panelClass: "no-padding-modal",
|
|
277
|
+
width: "550px",
|
|
278
|
+
data: {
|
|
279
|
+
availableNodes: this.availableNodes,
|
|
280
|
+
sourceNode: this.selectedNodeData,
|
|
281
|
+
},
|
|
282
|
+
});
|
|
283
|
+
dialogRef.afterClosed().subscribe((result) => {
|
|
284
|
+
if (result) {
|
|
285
|
+
this.onLinkNodes(result);
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
// ==================== Link Dialog Events ====================
|
|
290
|
+
onLinkNodes(linkData) {
|
|
291
|
+
if (!this.cy)
|
|
292
|
+
return;
|
|
293
|
+
if (!this.canCreateOutgoingLink(linkData.sourceNodeId)) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
if (this.wxcc2graph.linkExists(linkData.sourceNodeId, linkData.targetNodeId)) {
|
|
297
|
+
console.warn("Link already exists between these nodes");
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
const edge = this.wxcc2graph.addLink(linkData.sourceNodeId, linkData.targetNodeId, linkData.label);
|
|
301
|
+
this.cy?.add(edge);
|
|
302
|
+
this.runLayout();
|
|
303
|
+
}
|
|
304
|
+
// ==================== Add Node Dialog Events ====================
|
|
305
|
+
openAddNodeDialog() {
|
|
306
|
+
this.availableNodes = this.wxcc2graph.getAllActivities();
|
|
307
|
+
const dialogRef = this.dialog.open(AddNodeDialogComponent, {
|
|
308
|
+
panelClass: "no-padding-modal",
|
|
309
|
+
width: '450px',
|
|
310
|
+
data: {
|
|
311
|
+
availableNodes: this.availableNodes,
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
dialogRef.afterClosed().subscribe((result) => {
|
|
315
|
+
if (result) {
|
|
316
|
+
this.addActivity(result);
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
addActivity(newNodeData) {
|
|
321
|
+
if (!this.cy)
|
|
322
|
+
return;
|
|
323
|
+
const node = this.wxccActivityCreationService.createAndSync({
|
|
324
|
+
activityTypeName: newNodeData.activityTypeName,
|
|
325
|
+
name: newNodeData.name
|
|
326
|
+
});
|
|
327
|
+
// Add node to cytoscape
|
|
328
|
+
this.cy?.add({
|
|
329
|
+
group: "nodes",
|
|
330
|
+
data: node.data
|
|
331
|
+
});
|
|
332
|
+
// Re-run layout to position the new node
|
|
333
|
+
this.runLayout();
|
|
334
|
+
}
|
|
335
|
+
onNodeSelectChange(id) {
|
|
336
|
+
const node = this.cy?.getElementById(id);
|
|
337
|
+
if (node) {
|
|
338
|
+
this.cy?.center(node);
|
|
339
|
+
// Set highlighted property in node data
|
|
340
|
+
const originalData = node.data();
|
|
341
|
+
node.data({ ...originalData, highlighted: true });
|
|
342
|
+
node.emit('data');
|
|
343
|
+
// Remove highlight after 1s
|
|
344
|
+
setTimeout(() => {
|
|
345
|
+
const currentData = node.data();
|
|
346
|
+
if (currentData.highlighted) {
|
|
347
|
+
// Remove the property completely
|
|
348
|
+
delete currentData.highlighted;
|
|
349
|
+
node.data(currentData);
|
|
350
|
+
node.emit('data');
|
|
351
|
+
}
|
|
352
|
+
}, 1000);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
zoomIn() {
|
|
356
|
+
// this.cytoscapeViewportService.zoomIn(this.cy);
|
|
357
|
+
}
|
|
358
|
+
zoomOut() {
|
|
359
|
+
// this.cytoscapeViewportService.zoomOut(this.cy);
|
|
360
|
+
}
|
|
361
|
+
resetView() {
|
|
362
|
+
// this.cytoscapeViewportService.resetView(this.cy, this.cy?.elements());
|
|
363
|
+
}
|
|
364
|
+
runLayout() {
|
|
365
|
+
if (!this.cy)
|
|
366
|
+
return;
|
|
367
|
+
const layout = this.cy?.layout({
|
|
368
|
+
...this.layoutOptions,
|
|
369
|
+
}).run();
|
|
370
|
+
layout.on("layoutstop", () => {
|
|
371
|
+
// this.cytoscapeViewportService.resetView(this.cy, this.cy?.elements());
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
canCreateOutgoingLink(sourceNodeId) {
|
|
375
|
+
if (!this.cy)
|
|
376
|
+
return false;
|
|
377
|
+
const cyNode = this.cy?.getElementById(sourceNodeId);
|
|
378
|
+
if (!cyNode || cyNode.length === 0)
|
|
379
|
+
return false;
|
|
380
|
+
const sourceActivity = cyNode.data().wxccActivityName;
|
|
381
|
+
const outgoingEdgeCount = cyNode.outgoers('edge').length;
|
|
382
|
+
// End-type nodes cannot have outgoing links.
|
|
383
|
+
const END_NODE_TYPES = ['end', 'disconnect-contact', 'blind-transfer'];
|
|
384
|
+
if (END_NODE_TYPES.includes(sourceActivity))
|
|
385
|
+
return false;
|
|
386
|
+
// Start node can only have one output.
|
|
387
|
+
if (sourceActivity === 'NewPhoneContact' && outgoingEdgeCount >= 1)
|
|
388
|
+
return false;
|
|
389
|
+
// Condition node can only have true/false outputs.
|
|
390
|
+
if (sourceActivity === 'condition-activity' && outgoingEdgeCount >= 2)
|
|
391
|
+
return false;
|
|
392
|
+
return true;
|
|
393
|
+
}
|
|
394
|
+
clearSelectedEdge() {
|
|
395
|
+
if (!this.selectedEdgeId || !this.cy)
|
|
396
|
+
return;
|
|
397
|
+
const edge = this.cy?.getElementById(this.selectedEdgeId);
|
|
398
|
+
if (edge && edge.length) {
|
|
399
|
+
edge.unselect();
|
|
400
|
+
}
|
|
401
|
+
this.selectedEdgeId = null;
|
|
402
|
+
this.selectedEdgeDeleteButtonPosition = null;
|
|
403
|
+
this.cdr.detectChanges();
|
|
404
|
+
}
|
|
405
|
+
updateSelectedEdgeDeleteButtonPosition() {
|
|
406
|
+
if (!this.cy || !this.selectedEdgeId) {
|
|
407
|
+
this.selectedEdgeDeleteButtonPosition = null;
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
const edge = this.cy?.getElementById(this.selectedEdgeId);
|
|
411
|
+
if (!edge || edge.length === 0) {
|
|
412
|
+
this.selectedEdgeDeleteButtonPosition = null;
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
const midpoint = edge.renderedMidpoint();
|
|
416
|
+
// Slight offset so the icon does not sit exactly on top of the edge line.
|
|
417
|
+
this.selectedEdgeDeleteButtonPosition = {
|
|
418
|
+
x: midpoint.x + 12,
|
|
419
|
+
y: midpoint.y - 12,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
WxCCFlowchartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WxCCFlowchartComponent, deps: [{ token: i1.WxCC2GraphService }, { token: i2.MatDialog }, { token: i3.WxCCActivityCreationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
424
|
+
WxCCFlowchartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WxCCFlowchartComponent, selector: "wxcc-flowchart", inputs: { flowchart: "flowchart" }, viewQueries: [{ propertyName: "flowchartContainer", first: true, predicate: ["flowchartContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"wxcc-flowchart-container\">\r\n <div #flowchartContainer class=\"flowchart-canvas\"></div>\r\n\r\n <!-- Floating toolbar for viewport controls -->\r\n <graph-floating-toolbar\r\n [visibility]=\"{ export: false }\"\r\n (resetViewChange)=\"resetView()\"\r\n (zoomInChange)=\"zoomIn()\"\r\n (zoomOutChange)=\"zoomOut()\">\r\n </graph-floating-toolbar>\r\n\r\n <!-- Graph Acts -->\r\n <div class=\"graph-actions-wrapper\">\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Search workflow\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"toggleSearchPanel()\"\r\n >\r\n <img src=\"assets/wxcc/search.svg\" width=\"28\" height=\"28\" alt=\"\" />\r\n </button>\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Add New Node\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"openAddNodeDialog()\"\r\n >\r\n <svg\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <button\r\n *ngIf=\"selectedEdgeId && selectedEdgeDeleteButtonPosition\"\r\n class=\"edge-delete-btn\"\r\n matTooltip=\"Delete this edge\"\r\n matTooltipPosition=\"above\"\r\n [style.left.px]=\"selectedEdgeDeleteButtonPosition.x\"\r\n [style.top.px]=\"selectedEdgeDeleteButtonPosition.y\"\r\n (click)=\"onDeleteSelectedEdge()\"\r\n type=\"button\"\r\n aria-label=\"Delete selected edge\"\r\n >\r\n \u00D7\r\n </button>\r\n\r\n <node-search-panel\r\n class=\"fade-in-search-panel\"\r\n [class.visible]=\"isSearchPanelVisible\"\r\n [nodes]=\"activities\"\r\n (selectNodeChange)=\"onNodeSelectChange($event)\"\r\n (searchChange)=\"openAddNodeDialog()\"\r\n >\r\n </node-search-panel>\r\n\r\n <!-- Node action toolbar (floating near selected node) -->\r\n <node-action-toolbar\r\n [isVisible]=\"isNodeToolbarVisible\"\r\n [position]=\"nodeToolbarPosition\"\r\n (deleteNode)=\"onDeleteNode()\"\r\n (linkNode)=\"onLinkNodeRequest()\"\r\n >\r\n </node-action-toolbar>\r\n\r\n <!-- Node details sidebar -->\r\n <node-details-sidebar\r\n [isOpen]=\"isSidebarOpen\"\r\n [nodeData]=\"selectedNodeData\"\r\n (close)=\"onCloseSidebar()\"\r\n (descriptionChange)=\"onDescriptionChange($event)\"\r\n (activityTypeChange)=\"onActivityTypeChange($event)\"\r\n >\r\n </node-details-sidebar>\r\n</div>\r\n", styles: [".fade-in-search-panel{position:absolute;top:0;left:0;right:0;margin:0 auto;z-index:1000;opacity:0;pointer-events:none;transform:translateY(-40px);transition:opacity .4s cubic-bezier(.4,0,.2,1),transform .4s cubic-bezier(.4,0,.2,1)}.fade-in-search-panel.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.close-search-panel{position:absolute;top:10px;right:16px;background:transparent;border:none;font-size:2rem;color:#333;cursor:pointer;z-index:1100}:host ::ng-deep .node-content.highlighted{border-radius:10px;z-index:10}:host ::ng-deep .node-content.highlighted{position:relative;z-index:10}:host ::ng-deep .node-content.highlighted:after{content:\"\";position:absolute;inset:-14px;border:4px solid rgba(110,110,110,.4705882353);border-radius:13px;pointer-events:none;opacity:1}:host ::ng-deep .node-content:not(.highlighted):after{opacity:0}:host{display:block;overflow:hidden;width:100%;height:100%}.wxcc-flowchart-container{display:flex;flex-direction:column;position:relative;background-color:#f8f9fa;border-radius:.5rem;border:1px solid #e1e4e8;box-sizing:border-box;height:100%}.wxcc-flowchart-container .flowchart-canvas{height:100%;background:linear-gradient(90deg,rgba(200,200,200,.1) 1px,transparent 1px),linear-gradient(rgba(200,200,200,.1) 1px,transparent 1px);background-size:20px 20px}.wxcc-flowchart-container .add-node-btn{outline:none;border:none;border-radius:.5rem;background-color:#f6f6f6;padding:.5rem;cursor:pointer;font-size:1rem;display:flex;align-items:center;justify-content:center;width:40px;height:40px;transition:all .2s ease}.wxcc-flowchart-container .add-node-btn:hover{background-color:#eefff8;transform:scale(1.05)}.wxcc-flowchart-container .add-node-btn:active{transform:scale(.95)}.edge-delete-btn{position:absolute;z-index:1100;transform:translate(-50%,-50%);width:24px;height:24px;border-radius:50%;border:1px solid #cc3d36;background:#fff;color:#cc3d36;font-size:16px;font-weight:700;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000002e}.edge-delete-btn:hover{background:#fff1f0;transform:translate(-50%,-50%) scale(1.08)}.edge-delete-btn:active{transform:translate(-50%,-50%) scale(.95)}:host ::ng-deep .node-content{cursor:pointer;display:flex;justify-content:center;flex-direction:column;gap:.5rem;padding:.5rem;background:white;border-radius:6px;border:1px solid #d8d8d8;border-left:4px solid;min-width:200px;transition:all .2s ease}:host ::ng-deep .node-content header{display:flex;align-items:center;gap:.5rem}:host ::ng-deep .node-content img{width:18px;height:18px}:host ::ng-deep .node-content .node-icon{font-size:24px;display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:.5rem;flex-shrink:0}:host ::ng-deep .node-content .node-info{flex:1;min-width:0}:host ::ng-deep .node-content .node-info .node-label{font-size:16px;letter-spacing:.5px;opacity:.7;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}:host ::ng-deep .node-content .node-info .node-activity-name{font-size:12px;color:#99a5b1;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}:host ::ng-deep .node-content .node-details{font-size:12px;color:#000;padding:0 .25rem;display:flex;flex-direction:column;gap:.25rem}:host ::ng-deep .node-content .node-details .node-details-item{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}:host ::ng-deep .node-content .node-details .review-red{background-color:#ffe6e6;border-left-color:#f44336;color:#f44336;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content .node-details .review-green{background-color:#e6ffe6;border-left-color:#4caf50;color:#4caf50;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content .node-details .review-yellow{background-color:#fff9e6;border-left-color:#ff9800;color:#ff9800;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content.node-start{border-left-color:#4caf50}:host ::ng-deep .node-content.node-start .node-icon{background-color:#4caf501a;color:#4caf50}:host ::ng-deep .node-content.node-start .node-label{color:#4caf50}:host ::ng-deep .node-content.node-end{border-left-color:#f44336}:host ::ng-deep .node-content.node-end .node-icon{background-color:#f443361a;color:#f44336}:host ::ng-deep .node-content.node-end .node-label{color:#f44336}:host ::ng-deep .node-content.node-gateway{border-left-color:#ff9800}:host ::ng-deep .node-content.node-gateway .node-icon{background-color:#ff98001a;color:#ff9800}:host ::ng-deep .node-content.node-gateway .node-label{color:#ff9800}:host ::ng-deep .node-content.node-action{border-left-color:#9c27b0}:host ::ng-deep .node-content.node-action .node-icon{background-color:#9c27b01a;color:#9c27b0}:host ::ng-deep .node-content.node-action .node-label{color:#9c27b0}:host ::ng-deep .node-content.node-default{border-left-color:#607d8b}:host ::ng-deep .node-content.node-default .node-icon{background-color:#607d8b1a;color:#607d8b}:host ::ng-deep .node-content.node-default .node-label{color:#607d8b}.graph-actions-wrapper{position:absolute;right:1rem;top:1rem;display:flex;align-items:center;gap:.5rem;box-shadow:2px 4px 15px #0000002d;padding:8px;background-color:#ffffffac;border-radius:1rem;z-index:999}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i6.FloatingToolBarComponent, selector: "graph-floating-toolbar", inputs: ["visibility"], outputs: ["resetViewChange", "zoomInChange", "zoomOutChange", "exportImageChange"] }, { kind: "component", type: i7.NodeDetailsSidebarComponent, selector: "node-details-sidebar", inputs: ["isOpen", "nodeData"], outputs: ["close", "activityTypeChange", "descriptionChange"] }, { kind: "component", type: i8.NodeActionToolbarComponent, selector: "node-action-toolbar", inputs: ["isVisible", "position"], outputs: ["deleteNode", "linkNode"] }, { kind: "component", type: i9.NodeSearchPanelComponent, selector: "node-search-panel", inputs: ["nodes"], outputs: ["searchChange", "selectNodeChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
425
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WxCCFlowchartComponent, decorators: [{
|
|
426
|
+
type: Component,
|
|
427
|
+
args: [{ selector: "wxcc-flowchart", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"wxcc-flowchart-container\">\r\n <div #flowchartContainer class=\"flowchart-canvas\"></div>\r\n\r\n <!-- Floating toolbar for viewport controls -->\r\n <graph-floating-toolbar\r\n [visibility]=\"{ export: false }\"\r\n (resetViewChange)=\"resetView()\"\r\n (zoomInChange)=\"zoomIn()\"\r\n (zoomOutChange)=\"zoomOut()\">\r\n </graph-floating-toolbar>\r\n\r\n <!-- Graph Acts -->\r\n <div class=\"graph-actions-wrapper\">\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Search workflow\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"toggleSearchPanel()\"\r\n >\r\n <img src=\"assets/wxcc/search.svg\" width=\"28\" height=\"28\" alt=\"\" />\r\n </button>\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Add New Node\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"openAddNodeDialog()\"\r\n >\r\n <svg\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <button\r\n *ngIf=\"selectedEdgeId && selectedEdgeDeleteButtonPosition\"\r\n class=\"edge-delete-btn\"\r\n matTooltip=\"Delete this edge\"\r\n matTooltipPosition=\"above\"\r\n [style.left.px]=\"selectedEdgeDeleteButtonPosition.x\"\r\n [style.top.px]=\"selectedEdgeDeleteButtonPosition.y\"\r\n (click)=\"onDeleteSelectedEdge()\"\r\n type=\"button\"\r\n aria-label=\"Delete selected edge\"\r\n >\r\n \u00D7\r\n </button>\r\n\r\n <node-search-panel\r\n class=\"fade-in-search-panel\"\r\n [class.visible]=\"isSearchPanelVisible\"\r\n [nodes]=\"activities\"\r\n (selectNodeChange)=\"onNodeSelectChange($event)\"\r\n (searchChange)=\"openAddNodeDialog()\"\r\n >\r\n </node-search-panel>\r\n\r\n <!-- Node action toolbar (floating near selected node) -->\r\n <node-action-toolbar\r\n [isVisible]=\"isNodeToolbarVisible\"\r\n [position]=\"nodeToolbarPosition\"\r\n (deleteNode)=\"onDeleteNode()\"\r\n (linkNode)=\"onLinkNodeRequest()\"\r\n >\r\n </node-action-toolbar>\r\n\r\n <!-- Node details sidebar -->\r\n <node-details-sidebar\r\n [isOpen]=\"isSidebarOpen\"\r\n [nodeData]=\"selectedNodeData\"\r\n (close)=\"onCloseSidebar()\"\r\n (descriptionChange)=\"onDescriptionChange($event)\"\r\n (activityTypeChange)=\"onActivityTypeChange($event)\"\r\n >\r\n </node-details-sidebar>\r\n</div>\r\n", styles: [".fade-in-search-panel{position:absolute;top:0;left:0;right:0;margin:0 auto;z-index:1000;opacity:0;pointer-events:none;transform:translateY(-40px);transition:opacity .4s cubic-bezier(.4,0,.2,1),transform .4s cubic-bezier(.4,0,.2,1)}.fade-in-search-panel.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.close-search-panel{position:absolute;top:10px;right:16px;background:transparent;border:none;font-size:2rem;color:#333;cursor:pointer;z-index:1100}:host ::ng-deep .node-content.highlighted{border-radius:10px;z-index:10}:host ::ng-deep .node-content.highlighted{position:relative;z-index:10}:host ::ng-deep .node-content.highlighted:after{content:\"\";position:absolute;inset:-14px;border:4px solid rgba(110,110,110,.4705882353);border-radius:13px;pointer-events:none;opacity:1}:host ::ng-deep .node-content:not(.highlighted):after{opacity:0}:host{display:block;overflow:hidden;width:100%;height:100%}.wxcc-flowchart-container{display:flex;flex-direction:column;position:relative;background-color:#f8f9fa;border-radius:.5rem;border:1px solid #e1e4e8;box-sizing:border-box;height:100%}.wxcc-flowchart-container .flowchart-canvas{height:100%;background:linear-gradient(90deg,rgba(200,200,200,.1) 1px,transparent 1px),linear-gradient(rgba(200,200,200,.1) 1px,transparent 1px);background-size:20px 20px}.wxcc-flowchart-container .add-node-btn{outline:none;border:none;border-radius:.5rem;background-color:#f6f6f6;padding:.5rem;cursor:pointer;font-size:1rem;display:flex;align-items:center;justify-content:center;width:40px;height:40px;transition:all .2s ease}.wxcc-flowchart-container .add-node-btn:hover{background-color:#eefff8;transform:scale(1.05)}.wxcc-flowchart-container .add-node-btn:active{transform:scale(.95)}.edge-delete-btn{position:absolute;z-index:1100;transform:translate(-50%,-50%);width:24px;height:24px;border-radius:50%;border:1px solid #cc3d36;background:#fff;color:#cc3d36;font-size:16px;font-weight:700;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000002e}.edge-delete-btn:hover{background:#fff1f0;transform:translate(-50%,-50%) scale(1.08)}.edge-delete-btn:active{transform:translate(-50%,-50%) scale(.95)}:host ::ng-deep .node-content{cursor:pointer;display:flex;justify-content:center;flex-direction:column;gap:.5rem;padding:.5rem;background:white;border-radius:6px;border:1px solid #d8d8d8;border-left:4px solid;min-width:200px;transition:all .2s ease}:host ::ng-deep .node-content header{display:flex;align-items:center;gap:.5rem}:host ::ng-deep .node-content img{width:18px;height:18px}:host ::ng-deep .node-content .node-icon{font-size:24px;display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:.5rem;flex-shrink:0}:host ::ng-deep .node-content .node-info{flex:1;min-width:0}:host ::ng-deep .node-content .node-info .node-label{font-size:16px;letter-spacing:.5px;opacity:.7;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}:host ::ng-deep .node-content .node-info .node-activity-name{font-size:12px;color:#99a5b1;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}:host ::ng-deep .node-content .node-details{font-size:12px;color:#000;padding:0 .25rem;display:flex;flex-direction:column;gap:.25rem}:host ::ng-deep .node-content .node-details .node-details-item{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}:host ::ng-deep .node-content .node-details .review-red{background-color:#ffe6e6;border-left-color:#f44336;color:#f44336;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content .node-details .review-green{background-color:#e6ffe6;border-left-color:#4caf50;color:#4caf50;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content .node-details .review-yellow{background-color:#fff9e6;border-left-color:#ff9800;color:#ff9800;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content.node-start{border-left-color:#4caf50}:host ::ng-deep .node-content.node-start .node-icon{background-color:#4caf501a;color:#4caf50}:host ::ng-deep .node-content.node-start .node-label{color:#4caf50}:host ::ng-deep .node-content.node-end{border-left-color:#f44336}:host ::ng-deep .node-content.node-end .node-icon{background-color:#f443361a;color:#f44336}:host ::ng-deep .node-content.node-end .node-label{color:#f44336}:host ::ng-deep .node-content.node-gateway{border-left-color:#ff9800}:host ::ng-deep .node-content.node-gateway .node-icon{background-color:#ff98001a;color:#ff9800}:host ::ng-deep .node-content.node-gateway .node-label{color:#ff9800}:host ::ng-deep .node-content.node-action{border-left-color:#9c27b0}:host ::ng-deep .node-content.node-action .node-icon{background-color:#9c27b01a;color:#9c27b0}:host ::ng-deep .node-content.node-action .node-label{color:#9c27b0}:host ::ng-deep .node-content.node-default{border-left-color:#607d8b}:host ::ng-deep .node-content.node-default .node-icon{background-color:#607d8b1a;color:#607d8b}:host ::ng-deep .node-content.node-default .node-label{color:#607d8b}.graph-actions-wrapper{position:absolute;right:1rem;top:1rem;display:flex;align-items:center;gap:.5rem;box-shadow:2px 4px 15px #0000002d;padding:8px;background-color:#ffffffac;border-radius:1rem;z-index:999}\n"] }]
|
|
428
|
+
}], ctorParameters: function () { return [{ type: i1.WxCC2GraphService }, { type: i2.MatDialog }, { type: i3.WxCCActivityCreationService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { flowchart: [{
|
|
429
|
+
type: Input
|
|
430
|
+
}], flowchartContainer: [{
|
|
431
|
+
type: ViewChild,
|
|
432
|
+
args: ["flowchartContainer"]
|
|
433
|
+
}] } });
|
|
434
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3hjYy1mbG93Y2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2NvbnRhY3QtY2VudGVyL2NjLXNjcmlwdC1lZGl0b3IvY29tcG9uZW50cy93eGNjLWZsb3djaGFydC93eGNjLWZsb3djaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvY29udGFjdC1jZW50ZXIvY2Mtc2NyaXB0LWVkaXRvci9jb21wb25lbnRzL3d4Y2MtZmxvd2NoYXJ0L3d4Y2MtZmxvd2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTix1QkFBdUIsRUFFdkIsU0FBUyxFQUVULEtBQUssRUFJTCxTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxTQUlOLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sS0FBSyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BDLE9BQU8sYUFBYSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUtyRSxPQUFPLEVBQ04sc0JBQXNCLEVBRXRCLE1BQU0sc0RBQXNELENBQUM7QUFDOUQsT0FBTyxFQUVOLHVCQUF1QixFQUN2QixNQUFNLHdEQUF3RCxDQUFDOzs7Ozs7Ozs7OztBQUtoRSxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBb0IsQ0FBQyxDQUFDO0FBUXBDLE1BQU0sT0FBTyxzQkFBc0I7SUFxQ2xDLFlBQ2tCLFVBQTZCO0lBQzlDLHVFQUF1RTtJQUN0RCxNQUFpQixFQUNqQiwyQkFBd0QsRUFDakUs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QUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFO1lBQ2xCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUU7U0FDbEIsQ0FBQztJQUNILENBQUM7O29IQXRmVyxzQkFBc0I7d0dBQXRCLHNCQUFzQix5T0MvQ25DLDBsRkFtRkE7NEZEcENhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDQyxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTTswTUFHdEMsU0FBUztzQkFBakIsS0FBSztnQkFDMkIsa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0QWZ0ZXJWaWV3SW5pdCxcclxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuXHRDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRDb21wb25lbnQsXHJcblx0RWxlbWVudFJlZixcclxuXHRJbnB1dCxcclxuXHRPbkNoYW5nZXMsXHJcblx0T25EZXN0cm95LFxyXG5cdFNpbXBsZUNoYW5nZXMsXHJcblx0Vmlld0NoaWxkXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgSVd4Q0NGbG93Y2hhcnQgfSBmcm9tIFwiLi4vLi4vdHlwZXMvd3hjY1wiO1xyXG5pbXBvcnQgY3l0b3NjYXBlLCB7XHJcblx0RWxlbWVudERlZmluaXRpb24sXHJcblx0RWRnZVNpbmd1bGFyLFxyXG5cdE5vZGVTaW5ndWxhclxyXG59IGZyb20gXCJjeXRvc2NhcGVcIjtcclxuaW1wb3J0IGRhZ3JlIGZyb20gXCJjeXRvc2NhcGUtZGFncmVcIjtcclxuaW1wb3J0IG5vZGVIdG1sTGFiZWwgZnJvbSBcImN5dG9zY2FwZS1ub2RlLWh0bWwtbGFiZWxcIjtcclxuaW1wb3J0IHsgU3R5bGVDb25maWcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL2N5dG9zY2FwZS5jb25maWdcIjtcclxuaW1wb3J0IHsgZ2V0Tm9kZUh0bWxUZW1wbGF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9ub2RlLWh0bWwtdGVtcGxhdGVcIjtcclxuaW1wb3J0IHsgQWN0aXZpdHlEaXNwbGF5VHlwZSB9IGZyb20gXCIuLi8uLi91dGlscy9ub2RlLW1hcHBpbmdzXCI7XHJcbmltcG9ydCB7IFd4Q0MyR3JhcGhTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3d4Y2MyZ3JhcGguc2VydmljZVwiO1xyXG4vLyBpbXBvcnQgeyBDeXRvc2NhcGVWaWV3cG9ydFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2N5dG9zY2FwZS9jeXN0b3NjYXBlLXZpZXdwb3J0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTm9kZVRvb2xiYXJQb3NpdGlvbiB9IGZyb20gXCIuLi9ub2RlLWFjdGlvbi10b29sYmFyL25vZGUtYWN0aW9uLXRvb2xiYXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7XHJcblx0QWRkTm9kZURpYWxvZ0NvbXBvbmVudCxcclxuXHROZXdOb2RlRGF0YVxyXG59IGZyb20gXCIuLi9kaWFsb2dzL2FkZC1ub2RlLWRpYWxvZy9hZGQtbm9kZS1kaWFsb2cuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7XHJcblx0TGlua05vZGVEYXRhLFxyXG5cdExpbmtOb2RlRGlhbG9nQ29tcG9uZW50XHJcbn0gZnJvbSBcIi4uL2RpYWxvZ3MvbGluay1ub2RlLWRpYWxvZy9saW5rLW5vZGUtZGlhbG9nLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFJlYWRvbmx5RXh0ZW5kZWRBY3Rpdml0eSB9IGZyb20gXCIuLi8uLi90eXBlcy9leHRlbmRlZC1hY3Rpdml0eVwiO1xyXG5pbXBvcnQgeyBXeENDQWN0aXZpdHlDcmVhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvd3hjYy1hY3Rpdml0eS1jcmVhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5jeXRvc2NhcGUudXNlKGRhZ3JlKTtcclxuY3l0b3NjYXBlLnVzZShub2RlSHRtbExhYmVsIGFzIGFueSk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJ3eGNjLWZsb3djaGFydFwiLFxyXG5cdHRlbXBsYXRlVXJsOiBcIi4vd3hjYy1mbG93Y2hhcnQuY29tcG9uZW50Lmh0bWxcIixcclxuXHRzdHlsZVVybHM6IFtcIi4vd3hjYy1mbG93Y2hhcnQuY29tcG9uZW50LnNjc3NcIl0sXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXeENDRmxvd2NoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cdEBJbnB1dCgpIGZsb3djaGFydCE6IElXeENDRmxvd2NoYXJ0O1xyXG5cdEBWaWV3Q2hpbGQoXCJmbG93Y2hhcnRDb250YWluZXJcIikgZmxvd2NoYXJ0Q29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG5cdHByaXZhdGUgY3k/OiBjeXRvc2NhcGUuQ29yZTtcclxuXHRwcml2YXRlIHZpZXdSZWFkeSA9IGZhbHNlO1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgbGF5b3V0T3B0aW9uczogZGFncmUuRGFncmVMYXlvdXRPcHRpb25zID0ge1xyXG5cdFx0bmFtZTogXCJkYWdyZVwiLFxyXG5cdFx0cmFua0RpcjogXCJMUlwiLFxyXG5cdFx0bm9kZVNlcDogMTgwLFxyXG5cdFx0ZWRnZVNlcDogNjAsXHJcblx0XHRyYW5rU2VwOiAxNTAsXHJcblx0XHRhbmltYXRlOiB0cnVlLFxyXG5cdFx0YW5pbWF0aW9uRHVyYXRpb246IDUwMCxcclxuXHRcdGZpdDogdHJ1ZVxyXG5cdH07XHJcblxyXG5cdC8vIFNpZGViYXIgc3RhdGVcclxuXHRpc1NpZGViYXJPcGVuID0gZmFsc2U7XHJcblx0c2VsZWN0ZWROb2RlRGF0YTogUmVhZG9ubHlFeHRlbmRlZEFjdGl2aXR5IHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdC8vIFNlYXJjaCBwYW5lbCBzdGF0ZVxyXG5cdGlzU2VhcmNoUGFuZWxWaXNpYmxlID0gZmFsc2U7XHJcblx0c2VhcmNoUGFuZWxWaXNpYmxlID0gZmFsc2U7XHJcblxyXG5cdC8vIE5vZGUgYWN0aW9uIHRvb2xiYXIgc3RhdGVcclxuXHRpc05vZGVUb29sYmFyVmlzaWJsZSA9IGZhbHNlO1xyXG5cdG5vZGVUb29sYmFyUG9zaXRpb246IE5vZGVUb29sYmFyUG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfTtcclxuXHJcblx0Ly8gQWRkIG5vZGUgZGlhbG9nIHN0YXRlXHJcblx0YXZhaWxhYmxlTm9kZXM6IFJlYWRvbmx5RXh0ZW5kZWRBY3Rpdml0eVtdID0gW107XHJcblxyXG5cdC8vIExpbmsgbm9kZSBkaWFsb2cgc3RhdGVcclxuXHRpc0xpbmtEaWFsb2dPcGVuID0gZmFsc2U7XHJcblx0c2VsZWN0ZWRFZGdlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cdHNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHJlYWRvbmx5IHd4Y2MyZ3JhcGg6IFd4Q0MyR3JhcGhTZXJ2aWNlLFxyXG5cdFx0Ly8gcHJpdmF0ZSByZWFkb25seSBjeXRvc2NhcGVWaWV3cG9ydFNlcnZpY2U6IEN5dG9zY2FwZVZpZXdwb3J0U2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csXHJcblx0XHRwcml2YXRlIHJlYWRvbmx5IHd4Y2NBY3Rpdml0eUNyZWF0aW9uU2VydmljZTogV3hDQ0FjdGl2aXR5Q3JlYXRpb25TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdCkgeyB9XHJcblxyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmlld1JlYWR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMudHJ5SW5pdCgpO1xyXG5cdH1cclxuXHJcblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cdFx0aWYgKGNoYW5nZXNbXCJmbG93Y2hhcnRcIl0pIHtcclxuXHRcdFx0dGhpcy50cnlJbml0KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuY3k/LmRlc3Ryb3koKTtcclxuXHRcdHRoaXMuY3kgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHRyeUluaXQoKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMudmlld1JlYWR5IHx8ICF0aGlzLmZsb3djaGFydENvbnRhaW5lciB8fCAhdGhpcy5mbG93Y2hhcnQpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuaW5pdCgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBpbml0KCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5mbG93Y2hhcnRDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuXHJcblx0XHR0aGlzLmN5Py5kZXN0cm95KCk7XHJcblx0XHR0aGlzLmN5ID0gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IGVsZW1lbnRzOiBFbGVtZW50RGVmaW5pdGlvbltdID0gW1xyXG5cdFx0XHQuLi50aGlzLmZsb3djaGFydC5ub2RlcyxcclxuXHRcdFx0Li4udGhpcy5mbG93Y2hhcnQuZWRnZXMsXHJcblx0XHRdO1xyXG5cclxuXHRcdHRoaXMuY3kgPSBjeXRvc2NhcGUoe1xyXG5cdFx0XHRjb250YWluZXI6IGNvbnRhaW5lcixcclxuXHRcdFx0ZWxlbWVudHM6IGVsZW1lbnRzLFxyXG5cdFx0XHRzdHlsZTogdGhpcy5nZXRTdHlsZXNoZWV0KCksXHJcblx0XHR9KTtcclxuXHJcblx0XHQodGhpcy5jeSBhcyBhbnkpLm5vZGVIdG1sTGFiZWwoW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0cXVlcnk6IFwibm9kZVwiLFxyXG5cdFx0XHRcdGhhbGlnbjogXCJjZW50ZXJcIixcclxuXHRcdFx0XHR2YWxpZ246IFwiY2VudGVyXCIsXHJcblx0XHRcdFx0aGFsaWduQm94OiBcImNlbnRlclwiLFxyXG5cdFx0XHRcdHZhbGlnbkJveDogXCJjZW50ZXJcIixcclxuXHRcdFx0XHR0cGw6IChkYXRhOiBSZWFkb25seUV4dGVuZGVkQWN0aXZpdHkpID0+IGdldE5vZGVIdG1sVGVtcGxhdGUoZGF0YSksXHJcblx0XHRcdH0sXHJcblx0XHRdKTtcclxuXHJcblx0XHRjb25zdCBsYXlvdXQgPSB0aGlzLmN5Py5sYXlvdXQoe1xyXG5cdFx0XHQuLi50aGlzLmxheW91dE9wdGlvbnMsXHJcblx0XHR9KS5ydW4oKTtcclxuXHJcblx0XHRsYXlvdXQub24oXCJsYXlvdXRzdG9wXCIsICgpID0+IHtcclxuXHRcdFx0Ly8gdGhpcy5jeXRvc2NhcGVWaWV3cG9ydFNlcnZpY2UucmVzZXRWaWV3KHRoaXMuY3ksIHRoaXMuY3k/LmVsZW1lbnRzKCkpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgYWN0aXZpdGllcygpIHsgcmV0dXJuIHRoaXMud3hjYzJncmFwaC5nZXRBbGxBY3Rpdml0aWVzKCk7IH1cclxuXHJcblx0Ly8gVG9nZ2xlIHNlYXJjaCBwYW5lbCB2aXNpYmlsaXR5XHJcblx0dG9nZ2xlU2VhcmNoUGFuZWwoKTogdm9pZCB7XHJcblx0XHR0aGlzLmlzU2VhcmNoUGFuZWxWaXNpYmxlID0gIXRoaXMuaXNTZWFyY2hQYW5lbFZpc2libGU7XHJcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpOiB2b2lkIHtcclxuXHRcdC8vIFNpbmdsZSB0YXAgb24gbm9kZSAtIHNob3cgb25seSB0aGUgdG9vbGJhciAocXVpY2sgYWN0aW9ucylcclxuXHRcdHRoaXMuY3k/Lm9uKFwibW91c2VvdmVyXCIsIFwibm9kZVwiLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0Y29uc3Qgbm9kZSA9IGV2ZW50LnRhcmdldCBhcyBOb2RlU2luZ3VsYXI7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWROb2RlRGF0YSA9IG5vZGUuZGF0YSgpIGFzIFJlYWRvbmx5RXh0ZW5kZWRBY3Rpdml0eTtcclxuXHJcblx0XHRcdC8vIENhbGN1bGF0ZSB0b29sYmFyIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXJcclxuXHRcdFx0dGhpcy51cGRhdGVUb29sYmFyUG9zaXRpb24obm9kZSk7XHJcblx0XHRcdHRoaXMuaXNOb2RlVG9vbGJhclZpc2libGUgPSB0cnVlO1xyXG5cclxuXHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5jeT8ub24oXCJ0YXBcIiwgXCJub2RlXCIsIChldmVudCkgPT4ge1xyXG5cdFx0XHRjb25zdCBub2RlID0gZXZlbnQudGFyZ2V0IGFzIE5vZGVTaW5ndWxhcjtcclxuXHRcdFx0dGhpcy5jbGVhclNlbGVjdGVkRWRnZSgpO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTm9kZURhdGEgPSBub2RlLmRhdGEoKSBhcyBSZWFkb25seUV4dGVuZGVkQWN0aXZpdHk7XHJcblx0XHRcdHRoaXMuaXNTaWRlYmFyT3BlbiA9IHRydWU7XHJcblxyXG5cdFx0XHQvLyBIaWRlIHRvb2xiYXIgd2hlbiBzaWRlYmFyIG9wZW5zXHJcblx0XHRcdHRoaXMuaXNOb2RlVG9vbGJhclZpc2libGUgPSBmYWxzZTtcclxuXHJcblx0XHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuY3k/Lm9uKFwibW91c2Vtb3ZlXCIsIFwibm9kZVwiLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0Y29uc3Qgbm9kZSA9IGV2ZW50LnRhcmdldCBhcyBOb2RlU2luZ3VsYXI7XHJcblx0XHRcdHRoaXMudXBkYXRlVG9vbGJhclBvc2l0aW9uKG5vZGUpO1xyXG5cclxuXHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gRWRnZSB0YXAgLSBzZWxlY3QgZWRnZSBmb3IgZXhwbGljaXQgZGVsZXRpb24gYWN0aW9uXHJcblx0XHR0aGlzLmN5Py5vbihcInRhcFwiLCBcImVkZ2VcIiwgKGV2ZW50KSA9PiB7XHJcblx0XHRcdGNvbnN0IGVkZ2UgPSBldmVudC50YXJnZXQgYXMgRWRnZVNpbmd1bGFyO1xyXG5cclxuXHRcdFx0dGhpcy5pc1NpZGViYXJPcGVuID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuaGlkZU5vZGVUb29sYmFyKCk7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWROb2RlRGF0YSA9IG51bGw7XHJcblxyXG5cdFx0XHR0aGlzLnNlbGVjdGVkRWRnZUlkID0gZWRnZS5pZCgpO1xyXG5cdFx0XHRlZGdlLnNlbGVjdCgpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uKCk7XHJcblx0XHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIENhbnZhcyB0YXAgLSBoaWRlIHRvb2xiYXIgYW5kIGRlc2VsZWN0XHJcblx0XHR0aGlzLmN5Py5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0aWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5jeSkge1xyXG5cdFx0XHRcdHRoaXMuY2xlYXJTZWxlY3RlZEVkZ2UoKTtcclxuXHRcdFx0XHR0aGlzLmlzU2lkZWJhck9wZW4gPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLmhpZGVOb2RlVG9vbGJhcigpO1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWROb2RlRGF0YSA9IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFBhbi96b29tIGV2ZW50cyAtIHVwZGF0ZSB0b29sYmFyIHBvc2l0aW9uXHJcblx0XHR0aGlzLmN5Py5vbihcInBhbiB6b29tXCIsICgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuaXNOb2RlVG9vbGJhclZpc2libGUgJiYgdGhpcy5zZWxlY3RlZE5vZGVEYXRhKSB7XHJcblx0XHRcdFx0Y29uc3Qgbm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0ZWROb2RlRGF0YS5pZCk7XHJcblx0XHRcdFx0aWYgKG5vZGU/Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVUb29sYmFyUG9zaXRpb24obm9kZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodGhpcy5zZWxlY3RlZEVkZ2VJZCkge1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlU2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb24oKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVRvb2xiYXJQb3NpdGlvbihub2RlOiBOb2RlU2luZ3VsYXIpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHJlbmRlcmVkUG9zaXRpb24gPSBub2RlLnJlbmRlcmVkUG9zaXRpb24oKTtcclxuXHRcdGNvbnN0IHJlbmRlcmVkV2lkdGggPSBub2RlLnJlbmRlcmVkV2lkdGgoKTtcclxuXHRcdGNvbnN0IHJlbmRlcmVkSGVpZ2h0ID0gbm9kZS5yZW5kZXJlZEhlaWdodCgpO1xyXG5cclxuXHRcdC8vIFBvc2l0aW9uIHRvb2xiYXIgYWJvdmUgdGhlIG5vZGUsIGNlbnRlcmVkXHJcblx0XHR0aGlzLm5vZGVUb29sYmFyUG9zaXRpb24gPSB7XHJcblx0XHRcdHg6IHJlbmRlcmVkUG9zaXRpb24ueCAtIDMwLCAvLyBDZW50ZXIgdGhlIHRvb2xiYXIgKGFwcHJveCBoYWxmIHRvb2xiYXIgd2lkdGgpXHJcblx0XHRcdHk6IHJlbmRlcmVkUG9zaXRpb24ueSAtIHJlbmRlcmVkSGVpZ2h0IC8gMiAtIDQwLCAvLyBBYm92ZSB0aGUgbm9kZVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGlkZU5vZGVUb29sYmFyKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pc05vZGVUb29sYmFyVmlzaWJsZSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRTdHlsZXNoZWV0KCk6IGN5dG9zY2FwZS5TdHlsZXNoZWV0U3R5bGVbXSB7XHJcblx0XHRyZXR1cm4gU3R5bGVDb25maWc7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09PT09PT09PT09PT09PSBTaWRlYmFyIEV2ZW50cyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHRvbkNsb3NlU2lkZWJhcigpOiB2b2lkIHtcclxuXHRcdHRoaXMuaXNTaWRlYmFyT3BlbiA9IGZhbHNlO1xyXG5cdFx0dGhpcy5oaWRlTm9kZVRvb2xiYXIoKTtcclxuXHRcdHRoaXMuc2VsZWN0ZWROb2RlRGF0YSA9IG51bGw7XHJcblx0XHQvLyB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHRvbkRlc2NyaXB0aW9uQ2hhbmdlKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5zZWxlY3RlZE5vZGVEYXRhIHx8ICF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0ZWROb2RlRGF0YS5pZCk7XHJcblx0XHRpZiAobm9kZSkge1xyXG5cdFx0XHRjb25zdCB1cGRhdGVkRGF0YTogUmVhZG9ubHlFeHRlbmRlZEFjdGl2aXR5ID0ge1xyXG5cdFx0XHRcdC4uLnRoaXMuc2VsZWN0ZWROb2RlRGF0YSxcclxuXHRcdFx0XHRzdWdnZXN0ZWRQcm9wZXJ0aWVzOiB7XHJcblx0XHRcdFx0XHQuLi50aGlzLnNlbGVjdGVkTm9kZURhdGEuc3VnZ2VzdGVkUHJvcGVydGllcyxcclxuXHRcdFx0XHRcdHVjY3hEZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdHRoaXMud3hjYzJncmFwaC51cGRhdGVBY3Rpdml0eURhdGEodXBkYXRlZERhdGEpO1xyXG5cdFx0XHRub2RlLmRhdGEodXBkYXRlZERhdGEpO1xyXG5cclxuXHRcdFx0dGhpcy5zZWxlY3RlZE5vZGVEYXRhID0gdXBkYXRlZERhdGE7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRvbkFjdGl2aXR5VHlwZUNoYW5nZShhY3Rpdml0eVR5cGU6IEFjdGl2aXR5RGlzcGxheVR5cGUpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5zZWxlY3RlZE5vZGVEYXRhIHx8ICF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0ZWROb2RlRGF0YS5pZCk7XHJcblx0XHRpZiAobm9kZSkge1xyXG5cdFx0XHRjb25zdCB1cGRhdGVkRGF0YTogUmVhZG9ubHlFeHRlbmRlZEFjdGl2aXR5ID0ge1xyXG5cdFx0XHRcdC4uLnRoaXMuc2VsZWN0ZWROb2RlRGF0YSxcclxuXHRcdFx0XHR3eGNjQWN0aXZpdHlOYW1lOiBhY3Rpdml0eVR5cGUuYWN0aXZpdHlOYW1lLFxyXG5cdFx0XHRcdHd4Y2NHcm91cDogYWN0aXZpdHlUeXBlLmdyb3VwLFxyXG5cdFx0XHRcdGljb25Vcmw6IGFjdGl2aXR5VHlwZS5pY29uXHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHR0aGlzLnd4Y2MyZ3JhcGgudXBkYXRlQWN0aXZpdHlEYXRhKHVwZGF0ZWREYXRhKTtcclxuXHRcdFx0bm9kZS5kYXRhKHVwZGF0ZWREYXRhKTtcclxuXHJcblx0XHRcdHRoaXMuc2VsZWN0ZWROb2RlRGF0YSA9IHVwZGF0ZWREYXRhO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PT09PT09PT09PT09PT0gTm9kZSBUb29sYmFyIEV2ZW50cyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHRvbkRlbGV0ZU5vZGUoKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuc2VsZWN0ZWROb2RlRGF0YSB8fCAhdGhpcy5jeSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IG5vZGVJZCA9IHRoaXMuc2VsZWN0ZWROb2RlRGF0YS5pZDtcclxuXHJcblx0XHQvLyBSZW1vdmUgZnJvbSBzZXJ2aWNlIGFuZCBnZXQgYWZmZWN0ZWQgbGluayBJRHNcclxuXHRcdGNvbnN0IHsgcmVtb3ZlZExpbmtJZHMgfSA9IHRoaXMud3hjYzJncmFwaC5yZW1vdmVBY3Rpdml0eShub2RlSWQpO1xyXG5cclxuXHRcdC8vIFJlbW92ZSBlZGdlcyBmcm9tIGN5dG9zY2FwZVxyXG5cdFx0cmVtb3ZlZExpbmtJZHMuZm9yRWFjaCgobGlua0lkKSA9PiB7XHJcblx0XHRcdHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKGxpbmtJZCkucmVtb3ZlKCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBSZW1vdmUgbm9kZSBmcm9tIGN5dG9zY2FwZVxyXG5cdFx0dGhpcy5jeT8uZ2V0RWxlbWVudEJ5SWQobm9kZUlkKS5yZW1vdmUoKTtcclxuXHJcblx0XHQvLyBDbG9zZSBzaWRlYmFyIGFuZCB0b29sYmFyXHJcblx0XHR0aGlzLm9uQ2xvc2VTaWRlYmFyKCk7XHJcblxyXG5cdFx0Ly8gUmUtcnVuIGxheW91dFxyXG5cdFx0dGhpcy5ydW5MYXlvdXQoKTtcclxuXHR9XHJcblxyXG5cdG9uRGVsZXRlU2VsZWN0ZWRFZGdlKCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLnNlbGVjdGVkRWRnZUlkIHx8ICF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgZWRnZUlkID0gdGhpcy5zZWxlY3RlZEVkZ2VJZDtcclxuXHRcdGNvbnN0IHJlbW92ZWQgPSB0aGlzLnd4Y2MyZ3JhcGgucmVtb3ZlTGluayhlZGdlSWQpO1xyXG5cdFx0aWYgKCFyZW1vdmVkKSByZXR1cm47XHJcblxyXG5cdFx0dGhpcy5jeT8uZ2V0RWxlbWVudEJ5SWQoZWRnZUlkKS5yZW1vdmUoKTtcclxuXHRcdHRoaXMuc2VsZWN0ZWRFZGdlSWQgPSBudWxsO1xyXG5cdFx0dGhpcy5zZWxlY3RlZEVkZ2VEZWxldGVCdXR0b25Qb3NpdGlvbiA9IG51bGw7XHJcblx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHRvbkxpbmtOb2RlUmVxdWVzdCgpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5zZWxlY3RlZE5vZGVEYXRhIHx8ICF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3Qgc291cmNlTm9kZSA9IHRoaXMuc2VsZWN0ZWROb2RlRGF0YTtcclxuXHJcblx0XHRpZiAoIXRoaXMuY2FuQ3JlYXRlT3V0Z29pbmdMaW5rKHNvdXJjZU5vZGUuaWQpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBHZXQgdGhlIGN5dG9zY2FwZSBub2RlIHRvIGluc3BlY3QgZXhpc3RpbmcgY29ubmVjdGlvbnNcclxuXHRcdGNvbnN0IGN5Tm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHNvdXJjZU5vZGUuaWQpO1xyXG5cclxuXHRcdC8vIENvbGxlY3QgSURzIG9mIG5vZGVzIGFscmVhZHkgY29ubmVjdGVkIGFzIHRhcmdldHMgZnJvbSB0aGlzIHNvdXJjZVxyXG5cdFx0Y29uc3QgZXhpc3RpbmdUYXJnZXRJZHMgPSBuZXcgU2V0PHN0cmluZz4oXHJcblx0XHRcdGN5Tm9kZS5vdXRnb2Vycygnbm9kZScpLm1hcCgobjogTm9kZVNpbmd1bGFyKSA9PiBuLmlkKCkpXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIEJ1aWxkIHRoZSBmaWx0ZXJlZCBsaXN0IG9mIGxpbmthYmxlIHRhcmdldHM6XHJcblx0XHQvLyAgLSBOZXZlciBhbGxvdyB0aGUgc3RhcnQgbm9kZSAoTmV3UGhvbmVDb250YWN0KSBhcyBhIHRhcmdldFxyXG5cdFx0Ly8gIC0gRXhjbHVkZSB0aGUgc291cmNlIG5vZGUgaXRzZWxmXHJcblx0XHQvLyAgLSBFeGNsdWRlIG5vZGVzIGFscmVhZHkgbGlua2VkIGFzIHRhcmdldHMgZnJvbSB0aGlzIHNvdXJjZVxyXG5cdFx0dGhpcy5hdmFpbGFibGVOb2RlcyA9IHRoaXMud3hjYzJncmFwaC5nZXRBbGxBY3Rpdml0aWVzKCkuZmlsdGVyKGFjdCA9PlxyXG5cdFx0XHRhY3QuaWQgIT09IHNvdXJjZU5vZGUuaWQgJiZcclxuXHRcdFx0YWN0Lnd4Y2NBY3Rpdml0eU5hbWUgIT09ICdOZXdQaG9uZUNvbnRhY3QnICYmXHJcblx0XHRcdCFleGlzdGluZ1RhcmdldElkcy5oYXMoYWN0LmlkKVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKExpbmtOb2RlRGlhbG9nQ29tcG9uZW50LCB7XHJcblx0XHRcdHBhbmVsQ2xhc3M6IFwibm8tcGFkZGluZy1tb2RhbFwiLFxyXG5cdFx0XHR3aWR0aDogXCI1NTBweFwiLFxyXG5cdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0YXZhaWxhYmxlTm9kZXM6IHRoaXMuYXZhaWxhYmxlTm9kZXMsXHJcblx0XHRcdFx0c291cmNlTm9kZTogdGhpcy5zZWxlY3RlZE5vZGVEYXRhLFxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0KSB7XHJcblx0XHRcdFx0dGhpcy5vbkxpbmtOb2RlcyhyZXN1bHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT09PT09PT09PT09PT09IExpbmsgRGlhbG9nIEV2ZW50cyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHRvbkxpbmtOb2RlcyhsaW5rRGF0YTogTGlua05vZGVEYXRhKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuY3kpIHJldHVybjtcclxuXHJcblx0XHRpZiAoIXRoaXMuY2FuQ3JlYXRlT3V0Z29pbmdMaW5rKGxpbmtEYXRhLnNvdXJjZU5vZGVJZCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnd4Y2MyZ3JhcGgubGlua0V4aXN0cyhsaW5rRGF0YS5zb3VyY2VOb2RlSWQsIGxpbmtEYXRhLnRhcmdldE5vZGVJZCkpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKFwiTGluayBhbHJlYWR5IGV4aXN0cyBiZXR3ZWVuIHRoZXNlIG5vZGVzXCIpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZWRnZSA9IHRoaXMud3hjYzJncmFwaC5hZGRMaW5rKFxyXG5cdFx0XHRsaW5rRGF0YS5zb3VyY2VOb2RlSWQsXHJcblx0XHRcdGxpbmtEYXRhLnRhcmdldE5vZGVJZCxcclxuXHRcdFx0bGlua0RhdGEubGFiZWwsXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuY3k/LmFkZChlZGdlKTtcclxuXHRcdHRoaXMucnVuTGF5b3V0KCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09PT09PT09PT09PT09PSBBZGQgTm9kZSBEaWFsb2cgRXZlbnRzID09PT09PT09PT09PT09PT09PT09XHJcblxyXG5cdG9wZW5BZGROb2RlRGlhbG9nKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5hdmFpbGFibGVOb2RlcyA9IHRoaXMud3hjYzJncmFwaC5nZXRBbGxBY3Rpdml0aWVzKCk7XHJcblxyXG5cdFx0Y29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBZGROb2RlRGlhbG9nQ29tcG9uZW50LCB7XHJcblx0XHRcdHBhbmVsQ2xhc3M6IFwibm8tcGFkZGluZy1tb2RhbFwiLFxyXG5cdFx0XHR3aWR0aDogJzQ1MHB4JyxcclxuXHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdGF2YWlsYWJsZU5vZGVzOiB0aGlzLmF2YWlsYWJsZU5vZGVzLFxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0KSB7XHJcblx0XHRcdFx0dGhpcy5hZGRBY3Rpdml0eShyZXN1bHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGFkZEFjdGl2aXR5KG5ld05vZGVEYXRhOiBOZXdOb2RlRGF0YSk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMud3hjY0FjdGl2aXR5Q3JlYXRpb25TZXJ2aWNlLmNyZWF0ZUFuZFN5bmMoe1xyXG5cdFx0XHRhY3Rpdml0eVR5cGVOYW1lOiBuZXdOb2RlRGF0YS5hY3Rpdml0eVR5cGVOYW1lLFxyXG5cdFx0XHRuYW1lOiBuZXdOb2RlRGF0YS5uYW1lXHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBBZGQgbm9kZSB0byBjeXRvc2NhcGVcclxuXHRcdHRoaXMuY3k/LmFkZCh7XHJcblx0XHRcdGdyb3VwOiBcIm5vZGVzXCIsXHJcblx0XHRcdGRhdGE6IG5vZGUuZGF0YVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gUmUtcnVuIGxheW91dCB0byBwb3NpdGlvbiB0aGUgbmV3IG5vZGVcclxuXHRcdHRoaXMucnVuTGF5b3V0KCk7XHJcblx0fVxyXG5cclxuXHRvbk5vZGVTZWxlY3RDaGFuZ2UoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKGlkKSBhcyBOb2RlU2luZ3VsYXI7XHJcblx0XHRpZiAobm9kZSkge1xyXG5cdFx0XHR0aGlzLmN5Py5jZW50ZXIobm9kZSk7XHJcblxyXG5cdFx0XHQvLyBTZXQgaGlnaGxpZ2h0ZWQgcHJvcGVydHkgaW4gbm9kZSBkYXRhXHJcblx0XHRcdGNvbnN0IG9yaWdpbmFsRGF0YSA9IG5vZGUuZGF0YSgpO1xyXG5cdFx0XHRub2RlLmRhdGEoeyAuLi5vcmlnaW5hbERhdGEsIGhpZ2hsaWdodGVkOiB0cnVlIH0pO1xyXG5cdFx0XHRub2RlLmVtaXQoJ2RhdGEnKTtcclxuXHJcblx0XHRcdC8vIFJlbW92ZSBoaWdobGlnaHQgYWZ0ZXIgMXNcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY3VycmVudERhdGEgPSBub2RlLmRhdGEoKTtcclxuXHRcdFx0XHRpZiAoY3VycmVudERhdGEuaGlnaGxpZ2h0ZWQpIHtcclxuXHRcdFx0XHRcdC8vIFJlbW92ZSB0aGUgcHJvcGVydHkgY29tcGxldGVseVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGN1cnJlbnREYXRhLmhpZ2hsaWdodGVkO1xyXG5cdFx0XHRcdFx0bm9kZS5kYXRhKGN1cnJlbnREYXRhKTtcclxuXHRcdFx0XHRcdG5vZGUuZW1pdCgnZGF0YScpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSwgMTAwMCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR6b29tSW4oKTogdm9pZCB7XHJcblx0XHQvLyB0aGlzLmN5dG9zY2FwZVZpZXdwb3J0U2VydmljZS56b29tSW4odGhpcy5jeSk7XHJcblx0fVxyXG5cclxuXHR6b29tT3V0KCk6IHZvaWQge1xyXG5cdFx0Ly8gdGhpcy5jeXRvc2NhcGVWaWV3cG9ydFNlcnZpY2Uuem9vbU91dCh0aGlzLmN5KTtcclxuXHR9XHJcblxyXG5cdHJlc2V0VmlldygpOiB2b2lkIHtcclxuXHRcdC8vIHRoaXMuY3l0b3NjYXBlVmlld3BvcnRTZXJ2aWNlLnJlc2V0Vmlldyh0aGlzLmN5LCB0aGlzLmN5Py5lbGVtZW50cygpKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcnVuTGF5b3V0KCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgbGF5b3V0ID0gdGhpcy5jeT8ubGF5b3V0KHtcclxuXHRcdFx0Li4udGhpcy5sYXlvdXRPcHRpb25zLFxyXG5cdFx0fSkucnVuKCk7XHJcblxyXG5cdFx0bGF5b3V0Lm9uKFwibGF5b3V0c3RvcFwiLCAoKSA9PiB7XHJcblx0XHRcdC8vIHRoaXMuY3l0b3NjYXBlVmlld3BvcnRTZXJ2aWNlLnJlc2V0Vmlldyh0aGlzLmN5LCB0aGlzLmN5Py5lbGVtZW50cygpKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYW5DcmVhdGVPdXRnb2luZ0xpbmsoc291cmNlTm9kZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdGlmICghdGhpcy5jeSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGNvbnN0IGN5Tm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHNvdXJjZU5vZGVJZCk7XHJcblx0XHRpZiAoIWN5Tm9kZSB8fCBjeU5vZGUubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3Qgc291cmNlQWN0aXZpdHkgPSAoY3lOb2RlLmRhdGEoKSBhcyBSZWFkb25seUV4dGVuZGVkQWN0aXZpdHkpLnd4Y2NBY3Rpdml0eU5hbWU7XHJcblx0XHRjb25zdCBvdXRnb2luZ0VkZ2VDb3VudCA9IGN5Tm9kZS5vdXRnb2VycygnZWRnZScpLmxlbmd0aDtcclxuXHJcblx0XHQvLyBFbmQtdHlwZSBub2RlcyBjYW5ub3QgaGF2ZSBvdXRnb2luZyBsaW5rcy5cclxuXHRcdGNvbnN0IEVORF9OT0RFX1RZUEVTOiBzdHJpbmdbXSA9IFsnZW5kJywgJ2Rpc2Nvbm5lY3QtY29udGFjdCcsICdibGluZC10cmFuc2ZlciddO1xyXG5cdFx0aWYgKEVORF9OT0RFX1RZUEVTLmluY2x1ZGVzKHNvdXJjZUFjdGl2aXR5IGFzIHN0cmluZykpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvLyBTdGFydCBub2RlIGNhbiBvbmx5IGhhdmUgb25lIG91dHB1dC5cclxuXHRcdGlmIChzb3VyY2VBY3Rpdml0eSA9PT0gJ05ld1Bob25lQ29udGFjdCcgJiYgb3V0Z29pbmdFZGdlQ291bnQgPj0gMSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vIENvbmRpdGlvbiBub2RlIGNhbiBvbmx5IGhhdmUgdHJ1ZS9mYWxzZSBvdXRwdXRzLlxyXG5cdFx0aWYgKHNvdXJjZUFjdGl2aXR5ID09PSAnY29uZGl0aW9uLWFjdGl2aXR5JyAmJiBvdXRnb2luZ0VkZ2VDb3VudCA+PSAyKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNsZWFyU2VsZWN0ZWRFZGdlKCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLnNlbGVjdGVkRWRnZUlkIHx8ICF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgZWRnZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0ZWRFZGdlSWQpO1xyXG5cdFx0aWYgKGVkZ2UgJiYgZWRnZS5sZW5ndGgpIHtcclxuXHRcdFx0ZWRnZS51bnNlbGVjdCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2VsZWN0ZWRFZGdlSWQgPSBudWxsO1xyXG5cdFx0dGhpcy5zZWxlY3RlZEVkZ2VEZWxldGVCdXR0b25Qb3NpdGlvbiA9IG51bGw7XHJcblx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uKCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLmN5IHx8ICF0aGlzLnNlbGVjdGVkRWRnZUlkKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb24gPSBudWxsO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZWRnZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0ZWRFZGdlSWQpO1xyXG5cdFx0aWYgKCFlZGdlIHx8IGVkZ2UubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb24gPSBudWxsO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbWlkcG9pbnQgPSAoZWRnZSBhcyBFZGdlU2luZ3VsYXIpLnJlbmRlcmVkTWlkcG9pbnQoKTtcclxuXHJcblx0XHQvLyBTbGlnaHQgb2Zmc2V0IHNvIHRoZSBpY29uIGRvZXMgbm90IHNpdCBleGFjdGx5IG9uIHRvcCBvZiB0aGUgZWRnZSBsaW5lLlxyXG5cdFx0dGhpcy5zZWxlY3RlZEVkZ2VEZWxldGVCdXR0b25Qb3NpdGlvbiA9IHtcclxuXHRcdFx0eDogbWlkcG9pbnQueCArIDEyLFxyXG5cdFx0XHR5OiBtaWRwb2ludC55IC0gMTIsXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwid3hjYy1mbG93Y2hhcnQtY29udGFpbmVyXCI+XHJcbiAgPGRpdiAjZmxvd2NoYXJ0Q29udGFpbmVyIGNsYXNzPVwiZmxvd2NoYXJ0LWNhbnZhc1wiPjwvZGl2PlxyXG5cclxuICA8IS0tIEZsb2F0aW5nIHRvb2xiYXIgZm9yIHZpZXdwb3J0IGNvbnRyb2xzIC0tPlxyXG4gIDxncmFwaC1mbG9hdGluZy10b29sYmFyXHJcbiAgICBbdmlzaWJpbGl0eV09XCJ7IGV4cG9ydDogZmFsc2UgfVwiXHJcbiAgICAocmVzZXRWaWV3Q2hhbmdlKT1cInJlc2V0VmlldygpXCJcclxuICAgICh6b29tSW5DaGFuZ2UpPVwiem9vbUluKClcIlxyXG4gICAgKHpvb21PdXRDaGFuZ2UpPVwiem9vbU91dCgpXCI+XHJcbiAgPC9ncmFwaC1mbG9hdGluZy10b29sYmFyPlxyXG5cclxuICA8IS0tIEdyYXBoIEFjdHMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImdyYXBoLWFjdGlvbnMtd3JhcHBlclwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cImFkZC1ub2RlLWJ0blwiXHJcbiAgICAgIG1hdFRvb2x0aXA9XCJTZWFyY2ggd29ya2Zsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVTZWFyY2hQYW5lbCgpXCJcclxuICAgID5cclxuICAgICAgPGltZyBzcmM9XCJhc3NldHMvd3hjYy9zZWFyY2guc3ZnXCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjI4XCIgYWx0PVwiXCIgLz5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cImFkZC1ub2RlLWJ0blwiXHJcbiAgICAgIG1hdFRvb2x0aXA9XCJBZGQgTmV3IE5vZGVcIlxyXG4gICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgIChjbGljayk9XCJvcGVuQWRkTm9kZURpYWxvZygpXCJcclxuICAgID5cclxuICAgICAgPHN2Z1xyXG4gICAgICAgIHdpZHRoPVwiMjhcIlxyXG4gICAgICAgIGhlaWdodD1cIjI4XCJcclxuICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcclxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiMTJcIiB5MT1cIjVcIiB4Mj1cIjEyXCIgeTI9XCIxOVwiPjwvbGluZT5cclxuICAgICAgICA8bGluZSB4MT1cIjVcIiB5MT1cIjEyXCIgeDI9XCIxOVwiIHkyPVwiMTJcIj48L2xpbmU+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxidXR0b25cclxuICAgICpuZ0lmPVwic2VsZWN0ZWRFZGdlSWQgJiYgc2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb25cIlxyXG4gICAgY2xhc3M9XCJlZGdlLWRlbGV0ZS1idG5cIlxyXG4gICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSB0aGlzIGVkZ2VcIlxyXG4gICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgW3N0eWxlLmxlZnQucHhdPVwic2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb24ueFwiXHJcbiAgICBbc3R5bGUudG9wLnB4XT1cInNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uLnlcIlxyXG4gICAgKGNsaWNrKT1cIm9uRGVsZXRlU2VsZWN0ZWRFZGdlKClcIlxyXG4gICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBhcmlhLWxhYmVsPVwiRGVsZXRlIHNlbGVjdGVkIGVkZ2VcIlxyXG4gID5cclxuICAgIMOXXHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxub2RlLXNlYXJjaC1wYW5lbFxyXG4gICAgY2xhc3M9XCJmYWRlLWluLXNlYXJjaC1wYW5lbFwiXHJcbiAgICBbY2xhc3MudmlzaWJsZV09XCJpc1NlYXJjaFBhbmVsVmlzaWJsZVwiXHJcbiAgICBbbm9kZXNdPVwiYWN0aXZpdGllc1wiXHJcbiAgICAoc2VsZWN0Tm9kZUNoYW5nZSk9XCJvbk5vZGVTZWxlY3RDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAoc2VhcmNoQ2hhbmdlKT1cIm9wZW5BZGROb2RlRGlhbG9nKClcIlxyXG4gID5cclxuICA8L25vZGUtc2VhcmNoLXBhbmVsPlxyXG5cclxuICA8IS0tIE5vZGUgYWN0aW9uIHRvb2xiYXIgKGZsb2F0aW5nIG5lYXIgc2VsZWN0ZWQgbm9kZSkgLS0+XHJcbiAgPG5vZGUtYWN0aW9uLXRvb2xiYXJcclxuICAgIFtpc1Zpc2libGVdPVwiaXNOb2RlVG9vbGJhclZpc2libGVcIlxyXG4gICAgW3Bvc2l0aW9uXT1cIm5vZGVUb29sYmFyUG9zaXRpb25cIlxyXG4gICAgKGRlbGV0ZU5vZGUpPVwib25EZWxldGVOb2RlKClcIlxyXG4gICAgKGxpbmtOb2RlKT1cIm9uTGlua05vZGVSZXF1ZXN0KClcIlxyXG4gID5cclxuICA8L25vZGUtYWN0aW9uLXRvb2xiYXI+XHJcblxyXG4gIDwhLS0gTm9kZSBkZXRhaWxzIHNpZGViYXIgLS0+XHJcbiAgPG5vZGUtZGV0YWlscy1zaWRlYmFyXHJcbiAgICBbaXNPcGVuXT1cImlzU2lkZWJhck9wZW5cIlxyXG4gICAgW25vZGVEYXRhXT1cInNlbGVjdGVkTm9kZURhdGFcIlxyXG4gICAgKGNsb3NlKT1cIm9uQ2xvc2VTaWRlYmFyKClcIlxyXG4gICAgKGRlc2NyaXB0aW9uQ2hhbmdlKT1cIm9uRGVzY3JpcHRpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAoYWN0aXZpdHlUeXBlQ2hhbmdlKT1cIm9uQWN0aXZpdHlUeXBlQ2hhbmdlKCRldmVudClcIlxyXG4gID5cclxuICA8L25vZGUtZGV0YWlscy1zaWRlYmFyPlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export const StyleConfig = [
|
|
2
|
+
{
|
|
3
|
+
selector: 'node',
|
|
4
|
+
style: {
|
|
5
|
+
'background-color': 'transparent',
|
|
6
|
+
'background-opacity': 0,
|
|
7
|
+
'width': 220,
|
|
8
|
+
'height': 100,
|
|
9
|
+
'shape': 'roundrectangle',
|
|
10
|
+
'border-width': 0
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
selector: 'node:selected',
|
|
15
|
+
style: {
|
|
16
|
+
'background-color': 'transparent',
|
|
17
|
+
'background-opacity': 0
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
selector: 'edge',
|
|
22
|
+
style: {
|
|
23
|
+
'width': 1,
|
|
24
|
+
'line-color': '#d4d4d4',
|
|
25
|
+
// 'line-color': '#B0BEC5',
|
|
26
|
+
'target-arrow-color': '#d4d4d4',
|
|
27
|
+
'target-arrow-shape': 'triangle',
|
|
28
|
+
'curve-style': 'bezier',
|
|
29
|
+
'control-point-step-size': 40,
|
|
30
|
+
'label': 'data(label)',
|
|
31
|
+
'font-size': '9px',
|
|
32
|
+
'color': '#546E7A',
|
|
33
|
+
'text-background-color': '#fff',
|
|
34
|
+
'text-background-opacity': 1,
|
|
35
|
+
'text-background-padding': '4px',
|
|
36
|
+
'text-border-width': 1,
|
|
37
|
+
'text-border-color': '#E0E0E0',
|
|
38
|
+
'text-border-opacity': 0.8,
|
|
39
|
+
'text-margin-y': -10,
|
|
40
|
+
'z-index': 10
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
selector: 'edge[label="default"]',
|
|
45
|
+
style: {
|
|
46
|
+
'line-color': '#90A4AE',
|
|
47
|
+
'target-arrow-color': '#90A4AE'
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
selector: 'edge[label="queued"]',
|
|
52
|
+
style: {
|
|
53
|
+
'line-color': '#66BB6A',
|
|
54
|
+
'target-arrow-color': '#66BB6A'
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
selector: 'edge[label="failure"]',
|
|
59
|
+
style: {
|
|
60
|
+
'line-color': '#EF5350',
|
|
61
|
+
'target-arrow-color': '#EF5350'
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
selector: ':selected',
|
|
66
|
+
style: {
|
|
67
|
+
'line-color': '#FF6B6B',
|
|
68
|
+
'target-arrow-color': '#FF6B6B'
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
];
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3l0b3NjYXBlLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9jb250YWN0LWNlbnRlci9jYy1zY3JpcHQtZWRpdG9yL2NvbnN0YW50cy9jeXRvc2NhcGUuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBc0I7SUFDMUM7UUFDSSxRQUFRLEVBQUUsTUFBTTtRQUNoQixLQUFLLEVBQUU7WUFDSCxrQkFBa0IsRUFBRSxhQUFhO1lBQ2pDLG9CQUFvQixFQUFFLENBQUM7WUFDdkIsT0FBTyxFQUFFLEdBQUc7WUFDWixRQUFRLEVBQUUsR0FBRztZQUNiLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsY0FBYyxFQUFFLENBQUM7U0FDcEI7S0FDSjtJQUNEO1FBQ0ksUUFBUSxFQUFFLGVBQWU7UUFDekIsS0FBSyxFQUFFO1lBQ0gsa0JBQWtCLEVBQUUsYUFBYTtZQUNqQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzFCO0tBQ0o7SUFDRDtRQUNJLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLEtBQUssRUFBRTtZQUNILE9BQU8sRUFBRSxDQUFDO1lBQ1YsWUFBWSxFQUFFLFNBQVM7WUFDdkIsMkJBQTJCO1lBQzNCLG9CQUFvQixFQUFFLFNBQVM7WUFDL0Isb0JBQW9CLEVBQUUsVUFBVTtZQUNoQyxhQUFhLEVBQUUsUUFBUTtZQUN2Qix5QkFBeUIsRUFBRSxFQUFFO1lBQzdCLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLHVCQUF1QixFQUFFLE1BQU07WUFDL0IseUJBQXlCLEVBQUUsQ0FBQztZQUM1Qix5QkFBeUIsRUFBRSxLQUFLO1lBQ2hDLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsbUJBQW1CLEVBQUUsU0FBUztZQUM5QixxQkFBcUIsRUFBRSxHQUFHO1lBQzFCLGVBQWUsRUFBRSxDQUFDLEVBQUU7WUFDcEIsU0FBUyxFQUFFLEVBQUU7U0FDaEI7S0FDSjtJQUNEO1FBQ0ksUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxLQUFLLEVBQUU7WUFDSCxZQUFZLEVBQUUsU0FBUztZQUN2QixvQkFBb0IsRUFBRSxTQUFTO1NBQ2xDO0tBQ0o7SUFDRDtRQUNJLFFBQVEsRUFBRSxzQkFBc0I7UUFDaEMsS0FBSyxFQUFFO1lBQ0gsWUFBWSxFQUFFLFNBQVM7WUFDdkIsb0JBQW9CLEVBQUUsU0FBUztTQUNsQztLQUNKO0lBQ0Q7UUFDSSxRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLEtBQUssRUFBRTtZQUNILFlBQVksRUFBRSxTQUFTO1lBQ3ZCLG9CQUFvQixFQUFFLFNBQVM7U0FDbEM7S0FDSjtJQUNEO1FBQ0ksUUFBUSxFQUFFLFdBQVc7UUFDckIsS0FBSyxFQUFFO1lBQ0gsWUFBWSxFQUFFLFNBQVM7WUFDdkIsb0JBQW9CLEVBQUUsU0FBUztTQUNsQztLQUNKO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0eWxlc2hlZXRTdHlsZSB9IGZyb20gXCJjeXRvc2NhcGVcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBTdHlsZUNvbmZpZzogU3R5bGVzaGVldFN0eWxlW10gPSBbXHJcbiAgICB7XHJcbiAgICAgICAgc2VsZWN0b3I6ICdub2RlJyxcclxuICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICd0cmFuc3BhcmVudCcsXHJcbiAgICAgICAgICAgICdiYWNrZ3JvdW5kLW9wYWNpdHknOiAwLFxyXG4gICAgICAgICAgICAnd2lkdGgnOiAyMjAsXHJcbiAgICAgICAgICAgICdoZWlnaHQnOiAxMDAsXHJcbiAgICAgICAgICAgICdzaGFwZSc6ICdyb3VuZHJlY3RhbmdsZScsXHJcbiAgICAgICAgICAgICdib3JkZXItd2lkdGgnOiAwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBzZWxlY3RvcjogJ25vZGU6c2VsZWN0ZWQnLFxyXG4gICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICAgICAgJ2JhY2tncm91bmQtb3BhY2l0eSc6IDBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHNlbGVjdG9yOiAnZWRnZScsXHJcbiAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgJ3dpZHRoJzogMSxcclxuICAgICAgICAgICAgJ2xpbmUtY29sb3InOiAnI2Q0ZDRkNCcsXHJcbiAgICAgICAgICAgIC8vICdsaW5lLWNvbG9yJzogJyNCMEJFQzUnLFxyXG4gICAgICAgICAgICAndGFyZ2V0LWFycm93LWNvbG9yJzogJyNkNGQ0ZDQnLFxyXG4gICAgICAgICAgICAndGFyZ2V0LWFycm93LXNoYXBlJzogJ3RyaWFuZ2xlJyxcclxuICAgICAgICAgICAgJ2N1cnZlLXN0eWxlJzogJ2JlemllcicsXHJcbiAgICAgICAgICAgICdjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSc6IDQwLFxyXG4gICAgICAgICAgICAnbGFiZWwnOiAnZGF0YShsYWJlbCknLFxyXG4gICAgICAgICAgICAnZm9udC1zaXplJzogJzlweCcsXHJcbiAgICAgICAgICAgICdjb2xvcic6ICcjNTQ2RTdBJyxcclxuICAgICAgICAgICAgJ3RleHQtYmFja2dyb3VuZC1jb2xvcic6ICcjZmZmJyxcclxuICAgICAgICAgICAgJ3RleHQtYmFja2dyb3VuZC1vcGFjaXR5JzogMSxcclxuICAgICAgICAgICAgJ3RleHQtYmFja2dyb3VuZC1wYWRkaW5nJzogJzRweCcsXHJcbiAgICAgICAgICAgICd0ZXh0LWJvcmRlci13aWR0aCc6IDEsXHJcbiAgICAgICAgICAgICd0ZXh0LWJvcmRlci1jb2xvcic6ICcjRTBFMEUwJyxcclxuICAgICAgICAgICAgJ3RleHQtYm9yZGVyLW9wYWNpdHknOiAwLjgsXHJcbiAgICAgICAgICAgICd0ZXh0LW1hcmdpbi15JzogLTEwLFxyXG4gICAgICAgICAgICAnei1pbmRleCc6IDEwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBzZWxlY3RvcjogJ2VkZ2VbbGFiZWw9XCJkZWZhdWx0XCJdJyxcclxuICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAnbGluZS1jb2xvcic6ICcjOTBBNEFFJyxcclxuICAgICAgICAgICAgJ3RhcmdldC1hcnJvdy1jb2xvcic6ICcjOTBBNEFFJ1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgc2VsZWN0b3I6ICdlZGdlW2xhYmVsPVwicXVldWVkXCJdJyxcclxuICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAnbGluZS1jb2xvcic6ICcjNjZCQjZBJyxcclxuICAgICAgICAgICAgJ3RhcmdldC1hcnJvdy1jb2xvcic6ICcjNjZCQjZBJ1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgc2VsZWN0b3I6ICdlZGdlW2xhYmVsPVwiZmFpbHVyZVwiXScsXHJcbiAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgJ2xpbmUtY29sb3InOiAnI0VGNTM1MCcsXHJcbiAgICAgICAgICAgICd0YXJnZXQtYXJyb3ctY29sb3InOiAnI0VGNTM1MCdcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHNlbGVjdG9yOiAnOnNlbGVjdGVkJyxcclxuICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAnbGluZS1jb2xvcic6ICcjRkY2QjZCJyxcclxuICAgICAgICAgICAgJ3RhcmdldC1hcnJvdy1jb2xvcic6ICcjRkY2QjZCJ1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXTsiXX0=
|