@tuki-io/tuki-widgets 0.0.177 → 0.0.179

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/contact-center/cc-script-editor/cc-script-editor.component.d.ts +53 -0
  2. package/contact-center/cc-script-editor/cc-script-editor.module.d.ts +20 -0
  3. package/contact-center/cc-script-editor/components/dialogs/add-node-dialog/add-node-dialog.component.d.ts +35 -0
  4. package/contact-center/cc-script-editor/components/dialogs/link-node-dialog/link-node-dialog.component.d.ts +38 -0
  5. package/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.component.d.ts +34 -0
  6. package/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.module.d.ts +9 -0
  7. package/contact-center/cc-script-editor/components/node-action-toolbar/node-action-toolbar.component.d.ts +27 -0
  8. package/contact-center/cc-script-editor/components/node-details-sidebar/node-details-sidebar.component.d.ts +27 -0
  9. package/contact-center/cc-script-editor/components/node-search-panel/node-search-panel.component.d.ts +14 -0
  10. package/contact-center/cc-script-editor/components/wxcc-actions-bar/wxcc-actions-bar.component.d.ts +11 -0
  11. package/contact-center/cc-script-editor/components/wxcc-file-selection-bar/wxcc-file-selection-bar.component.d.ts +24 -0
  12. package/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.d.ts +66 -0
  13. package/contact-center/cc-script-editor/constants/cytoscape.config.d.ts +2 -0
  14. package/contact-center/cc-script-editor/constants/wxcc-api.constants.d.ts +15 -0
  15. package/contact-center/cc-script-editor/services/wxcc-activity-creation.service.d.ts +21 -0
  16. package/contact-center/cc-script-editor/services/wxcc-activity-manage.service.d.ts +8 -0
  17. package/contact-center/cc-script-editor/services/wxcc-flow-api.service.d.ts +43 -0
  18. package/contact-center/cc-script-editor/services/wxcc2graph.service.d.ts +42 -0
  19. package/contact-center/cc-script-editor/types/extended-activity.d.ts +47 -0
  20. package/contact-center/cc-script-editor/types/wxcc-activity.d.ts +96 -0
  21. package/contact-center/cc-script-editor/types/wxcc.d.ts +161 -0
  22. package/contact-center/cc-script-editor/utils/node-html-template.d.ts +3 -0
  23. package/contact-center/cc-script-editor/utils/node-mappings.d.ts +54 -0
  24. package/contact-center/public-api.d.ts +2 -0
  25. package/esm2020/contact-center/cc-script-editor/cc-script-editor.component.mjs +193 -0
  26. package/esm2020/contact-center/cc-script-editor/cc-script-editor.module.mjs +83 -0
  27. package/esm2020/contact-center/cc-script-editor/components/dialogs/add-node-dialog/add-node-dialog.component.mjs +60 -0
  28. package/esm2020/contact-center/cc-script-editor/components/dialogs/link-node-dialog/link-node-dialog.component.mjs +83 -0
  29. package/esm2020/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.component.mjs +104 -0
  30. package/esm2020/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.module.mjs +28 -0
  31. package/esm2020/contact-center/cc-script-editor/components/node-action-toolbar/node-action-toolbar.component.mjs +65 -0
  32. package/esm2020/contact-center/cc-script-editor/components/node-details-sidebar/node-details-sidebar.component.mjs +97 -0
  33. package/esm2020/contact-center/cc-script-editor/components/node-search-panel/node-search-panel.component.mjs +43 -0
  34. package/esm2020/contact-center/cc-script-editor/components/wxcc-actions-bar/wxcc-actions-bar.component.mjs +27 -0
  35. package/esm2020/contact-center/cc-script-editor/components/wxcc-file-selection-bar/wxcc-file-selection-bar.component.mjs +61 -0
  36. package/esm2020/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.mjs +434 -0
  37. package/esm2020/contact-center/cc-script-editor/constants/cytoscape.config.mjs +72 -0
  38. package/esm2020/contact-center/cc-script-editor/constants/wxcc-api.constants.mjs +14 -0
  39. package/esm2020/contact-center/cc-script-editor/mock/data/QWC_ir.json +912 -0
  40. package/esm2020/contact-center/cc-script-editor/services/wxcc-activity-creation.service.mjs +82 -0
  41. package/esm2020/contact-center/cc-script-editor/services/wxcc-activity-manage.service.mjs +162 -0
  42. package/esm2020/contact-center/cc-script-editor/services/wxcc-flow-api.service.mjs +79 -0
  43. package/esm2020/contact-center/cc-script-editor/services/wxcc2graph.service.mjs +144 -0
  44. package/esm2020/contact-center/cc-script-editor/types/extended-activity.mjs +4 -0
  45. package/esm2020/contact-center/cc-script-editor/types/wxcc-activity.mjs +2 -0
  46. package/esm2020/contact-center/cc-script-editor/types/wxcc.mjs +6 -0
  47. package/esm2020/contact-center/cc-script-editor/utils/node-html-template.mjs +76 -0
  48. package/esm2020/contact-center/cc-script-editor/utils/node-mappings.mjs +109 -0
  49. package/esm2020/contact-center/public-api.mjs +3 -1
  50. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +2948 -3
  51. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  52. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +2974 -3
  53. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  54. 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=