diff --git a/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js b/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js index e94ef29..4b4b139 100644 --- a/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js +++ b/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js @@ -414,7 +414,7 @@ } return BaseError; }()); - BaseError.prototype = new Error(); + Object.defineProperty(BaseError, 'prototype', new Error()); var ModelvalidationError = /** @class */ (function (_super) { __extends(ModelvalidationError, _super); function ModelvalidationError(message) { @@ -547,7 +547,7 @@ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FcModelService = /** @class */ (function () { - function FcModelService(modelValidation, model, modelChanged, cd, selectedObjects, dropNode, createEdge, edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback, canvasHtmlElement, svgHtmlElement) { + function FcModelService(modelValidation, model, modelChanged, detectChangesSubject, selectedObjects, dropNode, createEdge, edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback, canvasHtmlElement, svgHtmlElement) { var _this = this; this.connectorsHtmlElements = {}; this.nodesHtmlElements = {}; @@ -558,7 +558,7 @@ this.modelValidation = modelValidation; this.model = model; this.modelChanged = modelChanged; - this.cd = cd; + this.detectChangesSubject = detectChangesSubject; this.canvasHtmlElement = canvasHtmlElement; this.svgHtmlElement = svgHtmlElement; this.modelValidation.validateModel(this.model); @@ -616,7 +616,7 @@ * @return {?} */ function () { - _this.cd.detectChanges(); + _this.detectChangesSubject.next(); }), 0); }; /** @@ -943,23 +943,6 @@ } return this.dragImage; }; - /** - * @param {?} edgeAddedCallback - * @param {?} nodeRemovedCallback - * @param {?} edgeRemovedCallback - * @return {?} - */ - FcModelService.prototype.registerCallbacks = /** - * @param {?} edgeAddedCallback - * @param {?} nodeRemovedCallback - * @param {?} edgeRemovedCallback - * @return {?} - */ - function (edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback) { - this.edgeAddedCallback = edgeAddedCallback; - this.nodeRemovedCallback = nodeRemovedCallback; - this.edgeRemovedCallback = edgeRemovedCallback; - }; return FcModelService; }()); if (false) { @@ -967,8 +950,11 @@ FcModelService.prototype.modelValidation; /** @type {?} */ FcModelService.prototype.model; - /** @type {?} */ - FcModelService.prototype.cd; + /** + * @type {?} + * @private + */ + FcModelService.prototype.detectChangesSubject; /** @type {?} */ FcModelService.prototype.selectedObjects; /** @type {?} */ @@ -3311,6 +3297,7 @@ */ var NgxFlowchartComponent = /** @class */ (function () { function NgxFlowchartComponent(elementRef, differs, modelValidation, edgeDrawingService, cd, zone) { + var _this = this; this.elementRef = elementRef; this.differs = differs; this.modelValidation = modelValidation; @@ -3336,8 +3323,15 @@ function (index, item) { return item; })); + this.detectChangesSubject = new rxjs.Subject(); this.arrowDefId = 'arrow-' + Math.random(); this.arrowDefIdSelected = this.arrowDefId + '-selected'; + this.detectChangesSubject + .pipe(operators.debounceTime(50)) + .subscribe((/** + * @return {?} + */ + function () { return _this.cd.detectChanges(); })); } Object.defineProperty(NgxFlowchartComponent.prototype, "canvasClass", { get: /** @@ -3403,7 +3397,7 @@ this.userNodeCallbacks = this.userCallbacks.nodeCallbacks; /** @type {?} */ var element = $(this.elementRef.nativeElement); - this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.cd, this.selectedObjects, this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved, this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg')); + this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.detectChangesSubject, this.selectedObjects, this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved, this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg')); if (this.dropTargetId) { this.modelService.dropTargetId = this.dropTargetId; } @@ -3487,7 +3481,7 @@ this.adjustCanvasSize(this.fitModelSizeByDefault); } if (nodesChanged_1 || edgesChanged_1) { - this.cd.detectChanges(); + this.detectChangesSubject.next(); } } }; @@ -3820,6 +3814,11 @@ * @private */ NgxFlowchartComponent.prototype.edgesDiffer; + /** + * @type {?} + * @private + */ + NgxFlowchartComponent.prototype.detectChangesSubject; /** * @type {?} * @private diff --git a/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js.map b/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js.map index c4dd307..70b93d6 100644 --- a/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js.map +++ b/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"ngx-flowchart.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://ngx-flowchart/lib/ngx-flowchart.models.ts","ng://ngx-flowchart/lib/model.service.ts","ng://ngx-flowchart/lib/modelvalidation.service.ts","ng://ngx-flowchart/lib/node-dragging.service.ts","ng://ngx-flowchart/lib/edge-drawing.service.ts","ng://ngx-flowchart/lib/edge-dragging.service.ts","ng://ngx-flowchart/lib/mouseover.service.ts","ng://ngx-flowchart/lib/scrollparent.ts","ng://ngx-flowchart/lib/rectangleselect.service.ts","ng://ngx-flowchart/lib/ngx-flowchart.component.ts","ng://ngx-flowchart/lib/magnet.directive.ts","ng://ngx-flowchart/lib/connector.directive.ts","ng://ngx-flowchart/lib/node.component.ts","ng://ngx-flowchart/lib/default-node.component.ts","ng://ngx-flowchart/lib/ngx-flowchart.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Observable } from 'rxjs';\nimport { InjectionToken, Type } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\nexport const FC_NODE_COMPONENT_CONFIG = new InjectionToken('fc-node.component.config');\n\nexport interface FcNodeComponentConfig {\n nodeComponentType: Type;\n}\n\nconst htmlPrefix = 'fc';\nconst leftConnectorType = 'leftConnector';\nconst rightConnectorType = 'rightConnector';\n\nexport const FlowchartConstants = {\n htmlPrefix,\n leftConnectorType,\n rightConnectorType,\n curvedStyle: 'curved',\n lineStyle: 'line',\n dragAnimationRepaint: 'repaint',\n dragAnimationShadow: 'shadow',\n canvasClass: htmlPrefix + '-canvas',\n selectedClass: htmlPrefix + '-selected',\n editClass: htmlPrefix + '-edit',\n activeClass: htmlPrefix + '-active',\n hoverClass: htmlPrefix + '-hover',\n draggingClass: htmlPrefix + '-dragging',\n edgeClass: htmlPrefix + '-edge',\n edgeLabelClass: htmlPrefix + '-edge-label',\n connectorClass: htmlPrefix + '-connector',\n magnetClass: htmlPrefix + '-magnet',\n nodeClass: htmlPrefix + '-node',\n nodeOverlayClass: htmlPrefix + '-node-overlay',\n leftConnectorClass: htmlPrefix + '-' + leftConnectorType + 's',\n rightConnectorClass: htmlPrefix + '-' + rightConnectorType + 's',\n canvasResizeThreshold: 200,\n canvasResizeStep: 200\n};\n\n\nexport interface FcCoords {\n x?: number;\n y?: number;\n}\n\nexport interface FcRectBox {\n top: number;\n left: number;\n right: number;\n bottom: number;\n}\n\nexport interface FcConnector {\n id: string;\n type: string;\n}\n\nexport interface FcNode extends FcCoords {\n id: string;\n name: string;\n connectors: Array;\n readonly?: boolean;\n [key: string]: any;\n}\n\nexport interface FcEdge {\n label?: string;\n source?: string;\n destination?: string;\n active?: boolean;\n}\n\nexport interface FcItemInfo {\n node?: FcNode;\n edge?: FcEdge;\n}\n\nexport interface FcModel {\n nodes: Array;\n edges: Array;\n}\n\nexport interface UserCallbacks {\n dropNode?: (event: Event, node: FcNode) => void;\n createEdge?: (event: Event, edge: FcEdge) => Observable;\n edgeAdded?: (edge: FcEdge) => void;\n nodeRemoved?: (node: FcNode) => void;\n edgeRemoved?: (edge: FcEdge) => void;\n edgeDoubleClick?: (event: MouseEvent, edge: FcEdge) => void;\n edgeMouseOver?: (event: MouseEvent, edge: FcEdge) => void;\n isValidEdge?: (source: FcConnector, destination: FcConnector) => boolean;\n edgeEdit?: (event: Event, edge: FcEdge) => void;\n nodeCallbacks?: UserNodeCallbacks;\n}\n\nexport interface UserNodeCallbacks {\n nodeEdit?: (event: MouseEvent, node: FcNode) => void;\n doubleClick?: (event: MouseEvent, node: FcNode) => void;\n mouseDown?: (event: MouseEvent, node: FcNode) => void;\n mouseEnter?: (event: MouseEvent, node: FcNode) => void;\n mouseLeave?: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcCallbacks {\n nodeDragstart: (event: DragEvent, node: FcNode) => void;\n nodeDragend: (event: DragEvent) => void;\n edgeDragstart: (event: DragEvent, connector: FcConnector) => void;\n edgeDragend: (event: DragEvent) => void;\n edgeDrop: (event: DragEvent, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: DragEvent) => void;\n nodeMouseOver: (event: MouseEvent, node: FcNode) => void;\n nodeMouseOut: (event: MouseEvent, node: FcNode) => void;\n connectorMouseEnter: (event: MouseEvent, connector: FcConnector) => void;\n connectorMouseLeave: (event: MouseEvent, connector: FcConnector) => void;\n nodeClicked: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcAdjacentList {\n [id: string]: {\n incoming: number;\n outgoing: Array;\n };\n}\n\nclass BaseError {\n constructor() {\n Error.apply(this, arguments);\n }\n}\n\nBaseError.prototype = new Error();\n\nexport class ModelvalidationError extends BaseError {\n constructor(public message: string) {\n super();\n }\n}\n\nexport function fcTopSort(graph: FcModel): Array | null {\n const adjacentList: FcAdjacentList = {};\n graph.nodes.forEach((node) => {\n adjacentList[node.id] = {incoming: 0, outgoing: []};\n });\n graph.edges.forEach((edge) => {\n const sourceNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.source;\n });\n })[0];\n const destinationNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.destination;\n });\n })[0];\n adjacentList[sourceNode.id].outgoing.push(destinationNode.id);\n adjacentList[destinationNode.id].incoming++;\n });\n const orderedNodes: string[] = [];\n const sourceNodes: string[] = [];\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming === 0) {\n sourceNodes.push(node);\n }\n }\n while (sourceNodes.length !== 0) {\n const sourceNode = sourceNodes.pop();\n for (let i = 0; i < adjacentList[sourceNode].outgoing.length; i++) {\n const destinationNode = adjacentList[sourceNode].outgoing[i];\n adjacentList[destinationNode].incoming--;\n if (adjacentList[destinationNode].incoming === 0) {\n sourceNodes.push(destinationNode);\n }\n adjacentList[sourceNode].outgoing.splice(i, 1);\n i--;\n }\n orderedNodes.push(sourceNode);\n }\n let hasEdges = false;\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming !== 0) {\n hasEdges = true;\n }\n }\n if (hasEdges) {\n return null;\n } else {\n return orderedNodes;\n }\n}\n","import { FcModelValidationService } from './modelvalidation.service';\nimport { FcConnector, FcCoords, FcEdge, FcItemInfo, FcModel, FcNode, FcRectBox } from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { ChangeDetectorRef, EventEmitter } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\nexport class FcModelService {\n\n modelValidation: FcModelValidationService;\n model: FcModel;\n cd: ChangeDetectorRef;\n selectedObjects: any[];\n\n connectorsHtmlElements: HtmlElementMap = {};\n nodesHtmlElements: HtmlElementMap = {};\n canvasHtmlElement: HTMLElement = null;\n dragImage: HTMLImageElement = null;\n svgHtmlElement: SVGElement = null;\n\n dropNode: (event: Event, node: FcNode) => void;\n createEdge: (event: Event, edge: FcEdge) => Observable;\n edgeAddedCallback: (edge: FcEdge) => void;\n nodeRemovedCallback: (node: FcNode) => void;\n edgeRemovedCallback: (edge: FcEdge) => void;\n\n dropTargetId: string;\n\n private readonly modelChanged: EventEmitter;\n private readonly debouncer = new Subject();\n\n connectors: ConnectorsModel;\n nodes: NodesModel;\n edges: EdgesModel;\n\n constructor(modelValidation: FcModelValidationService,\n model: FcModel,\n modelChanged: EventEmitter,\n cd: ChangeDetectorRef,\n selectedObjects: any[],\n dropNode: (event: Event, node: FcNode) => void,\n createEdge: (event: Event, edge: FcEdge) => Observable,\n edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void,\n canvasHtmlElement: HTMLElement,\n svgHtmlElement: SVGElement) {\n\n this.modelValidation = modelValidation;\n this.model = model;\n this.modelChanged = modelChanged;\n this.cd = cd;\n this.canvasHtmlElement = canvasHtmlElement;\n this.svgHtmlElement = svgHtmlElement;\n this.modelValidation.validateModel(this.model);\n this.selectedObjects = selectedObjects;\n\n this.dropNode = dropNode || (() => {});\n this.createEdge = createEdge || ((event, edge) => of({...edge, label: 'label'}));\n this.edgeAddedCallback = edgeAddedCallback || (() => {});\n this.nodeRemovedCallback = nodeRemovedCallback || (() => {});\n this.edgeRemovedCallback = edgeRemovedCallback || (() => {});\n\n this.connectors = new ConnectorsModel(this);\n this.nodes = new NodesModel(this);\n this.edges = new EdgesModel(this);\n\n this.debouncer\n .pipe(debounceTime(100))\n .subscribe(() => this.modelChanged.emit());\n }\n\n public notifyModelChanged() {\n this.debouncer.next();\n }\n\n public detectChanges() {\n setTimeout(() => {\n this.cd.detectChanges();\n }, 0);\n }\n\n public selectObject(object: any) {\n if (this.isEditable()) {\n if (this.selectedObjects.indexOf(object) === -1) {\n this.selectedObjects.push(object);\n }\n }\n }\n\n public deselectObject(object: any) {\n if (this.isEditable()) {\n const index = this.selectedObjects.indexOf(object);\n if (index === -1) {\n throw new Error('Tried to deselect an unselected object');\n }\n this.selectedObjects.splice(index, 1);\n }\n }\n\n public toggleSelectedObject(object: any) {\n if (this.isSelectedObject(object)) {\n this.deselectObject(object);\n } else {\n this.selectObject(object);\n }\n }\n\n public isSelectedObject(object: any): boolean {\n return this.selectedObjects.indexOf(object) !== -1;\n }\n\n public selectAll() {\n this.model.nodes.forEach(node => {\n if (!node.readonly) {\n this.nodes.select(node);\n }\n });\n this.model.edges.forEach(edge => {\n this.edges.select(edge);\n });\n this.detectChanges();\n }\n\n public deselectAll() {\n this.selectedObjects.splice(0, this.selectedObjects.length);\n this.detectChanges();\n }\n\n public isEditObject(object: any): boolean {\n return this.selectedObjects.length === 1 &&\n this.selectedObjects.indexOf(object) !== -1;\n }\n\n private inRectBox(x: number, y: number, rectBox: FcRectBox): boolean {\n return x >= rectBox.left && x <= rectBox.right &&\n y >= rectBox.top && y <= rectBox.bottom;\n }\n\n public getItemInfoAtPoint(x: number, y: number): FcItemInfo {\n return {\n node: this.getNodeAtPoint(x, y),\n edge: this.getEdgeAtPoint(x, y)\n };\n }\n\n public getNodeAtPoint(x: number, y: number): FcNode {\n for (const node of this.model.nodes) {\n const element = this.nodes.getHtmlElement(node.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (x >= nodeElementBox.left && x <= nodeElementBox.right\n && y >= nodeElementBox.top && y <= nodeElementBox.bottom) {\n return node;\n }\n }\n return null;\n }\n\n public getEdgeAtPoint(x: number, y: number): FcEdge {\n const element = document.elementFromPoint(x, y);\n const id = element.id;\n let edgeIndex = -1;\n if (id) {\n if (id.startsWith('fc-edge-path-')) {\n edgeIndex = Number(id.substring('fc-edge-path-'.length));\n } else if (id.startsWith('fc-edge-label-')) {\n edgeIndex = Number(id.substring('fc-edge-label-'.length));\n }\n }\n if (edgeIndex > -1) {\n return this.model.edges[edgeIndex];\n }\n return null;\n }\n\n public selectAllInRect(rectBox: FcRectBox) {\n this.model.nodes.forEach((value) => {\n const element = this.nodes.getHtmlElement(value.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (!value.readonly) {\n const x = nodeElementBox.left + nodeElementBox.width / 2;\n const y = nodeElementBox.top + nodeElementBox.height / 2;\n if (this.inRectBox(x, y, rectBox)) {\n this.nodes.select(value);\n } else {\n if (this.nodes.isSelected(value)) {\n this.nodes.deselect(value);\n }\n }\n }\n });\n const canvasElementBox = this.canvasHtmlElement.getBoundingClientRect();\n this.model.edges.forEach((value) => {\n const start = this.edges.sourceCoord(value);\n const end = this.edges.destCoord(value);\n const x = (start.x + end.x) / 2 + canvasElementBox.left;\n const y = (start.y + end.y) / 2 + canvasElementBox.top;\n if (this.inRectBox(x, y, rectBox)) {\n this.edges.select(value);\n } else {\n if (this.edges.isSelected(value)) {\n this.edges.deselect(value);\n }\n }\n });\n }\n\n public deleteSelected() {\n const edgesToDelete = this.edges.getSelectedEdges();\n edgesToDelete.forEach((edge) => {\n this.edges.delete(edge);\n });\n const nodesToDelete = this.nodes.getSelectedNodes();\n nodesToDelete.forEach((node) => {\n this.nodes.delete(node);\n });\n }\n\n public isEditable(): boolean {\n return this.dropTargetId === undefined;\n }\n\n public isDropSource(): boolean {\n return this.dropTargetId !== undefined;\n }\n\n public getDragImage(): HTMLImageElement {\n if (!this.dragImage) {\n this.dragImage = new Image();\n this.dragImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n this.dragImage.style.visibility = 'hidden';\n }\n return this.dragImage;\n }\n\n public registerCallbacks(edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void) {\n this.edgeAddedCallback = edgeAddedCallback;\n this.nodeRemovedCallback = nodeRemovedCallback;\n this.edgeRemovedCallback = edgeRemovedCallback;\n }\n\n}\n\ninterface HtmlElementMap { [id: string]: HTMLElement; }\n\nabstract class AbstractFcModel {\n\n modelService: FcModelService;\n\n protected constructor(modelService: FcModelService) {\n this.modelService = modelService;\n }\n\n public select(object: T) {\n this.modelService.selectObject(object);\n }\n\n public deselect(object: T) {\n this.modelService.deselectObject(object);\n }\n\n public toggleSelected(object: T) {\n this.modelService.toggleSelectedObject(object);\n }\n\n public isSelected(object: T): boolean {\n return this.modelService.isSelectedObject(object);\n }\n\n public isEdit(object: T): boolean {\n return this.modelService.isEditObject(object);\n }\n}\n\nclass ConnectorsModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnector(connectorId: string): FcConnector {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n for (const connector of node.connectors) {\n if (connector.id === connectorId) {\n return connector;\n }\n }\n }\n }\n\n public getHtmlElement(connectorId: string): HTMLElement {\n return this.modelService.connectorsHtmlElements[connectorId];\n }\n\n public setHtmlElement(connectorId: string, element: HTMLElement) {\n this.modelService.connectorsHtmlElements[connectorId] = element;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const element = this.getHtmlElement(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (element === null || element === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n const connectorElementBox = element.getBoundingClientRect();\n const canvasElementBox = canvas.getBoundingClientRect();\n let coords: FcCoords = {\n x: connectorElementBox.left - canvasElementBox.left,\n y: connectorElementBox.top - canvasElementBox.top\n };\n if (centered) {\n coords = {\n x: Math.round(coords.x + element.offsetWidth / 2),\n y: Math.round(coords.y + element.offsetHeight / 2)\n };\n }\n return coords;\n }\n\n public getCoords(connectorId: string): FcCoords {\n return this._getCoords(connectorId, false);\n }\n\n public getCenteredCoord(connectorId: string): FcCoords {\n return this._getCoords(connectorId, true);\n }\n}\n\nclass NodesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnectorsByType(node: FcNode, type: string): Array {\n return node.connectors.filter((connector) => {\n return connector.type === type;\n });\n }\n\n private _addConnector(node: FcNode, connector: FcConnector) {\n node.connectors.push(connector);\n try {\n this.modelService.modelValidation.validateNode(node);\n } catch (error) {\n node.connectors.splice(node.connectors.indexOf(connector), 1);\n throw error;\n }\n }\n\n public delete(node: FcNode) {\n if (this.isSelected(node)) {\n this.deselect(node);\n }\n const model = this.modelService.model;\n const index = model.nodes.indexOf(node);\n if (index === -1) {\n if (node === undefined) {\n throw new Error('Passed undefined');\n }\n throw new Error('Tried to delete not existing node');\n }\n const connectorIds = this.getConnectorIds(node);\n for (let i = 0; i < model.edges.length; i++) {\n const edge = model.edges[i];\n if (connectorIds.indexOf(edge.source) !== -1 || connectorIds.indexOf(edge.destination) !== -1) {\n this.modelService.edges.delete(edge);\n i--;\n }\n }\n model.nodes.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.nodeRemovedCallback(node);\n }\n\n public getSelectedNodes(): Array {\n const model = this.modelService.model;\n return model.nodes.filter((node) => {\n return this.modelService.nodes.isSelected(node);\n });\n }\n\n public handleClicked(node: FcNode, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.nodes.toggleSelected(node);\n } else {\n this.modelService.deselectAll();\n this.modelService.nodes.select(node);\n }\n }\n\n private _addNode(node: FcNode) {\n const model = this.modelService.model;\n try {\n model.nodes.push(node);\n this.modelService.modelValidation.validateNodes(model.nodes);\n } catch (error) {\n model.nodes.splice(model.nodes.indexOf(node), 1);\n throw error;\n }\n }\n\n public getConnectorIds(node: FcNode): Array {\n return node.connectors.map((connector) => {\n return connector.id;\n });\n }\n\n public getNodeByConnectorId(connectorId: string): FcNode {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n const connectorIds = this.getConnectorIds(node);\n if (connectorIds.indexOf(connectorId) > -1) {\n return node;\n }\n }\n return null;\n }\n\n public getHtmlElement(nodeId: string): HTMLElement {\n return this.modelService.nodesHtmlElements[nodeId];\n }\n\n public setHtmlElement(nodeId: string, element: HTMLElement) {\n this.modelService.nodesHtmlElements[nodeId] = element;\n this.modelService.detectChanges();\n }\n\n}\n\nclass EdgesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public ready(edge: FcEdge): boolean {\n const source = this.modelService.connectors.getHtmlElement(edge.source);\n const destination = this.modelService.connectors.getHtmlElement(edge.destination);\n return source !== undefined && destination !== undefined;\n }\n\n public sourceCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.source);\n }\n\n public destCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.destination);\n }\n\n public delete(edge: FcEdge) {\n const model = this.modelService.model;\n const index = model.edges.indexOf(edge);\n if (index === -1) {\n throw new Error('Tried to delete not existing edge');\n }\n if (this.isSelected(edge)) {\n this.deselect(edge);\n }\n model.edges.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.edgeRemovedCallback(edge);\n }\n\n public getSelectedEdges(): Array {\n const model = this.modelService.model;\n return model.edges.filter((edge) => {\n return this.modelService.edges.isSelected(edge);\n });\n }\n\n public handleEdgeMouseClick(edge: FcEdge, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.edges.toggleSelected(edge);\n } else {\n this.modelService.deselectAll();\n this.modelService.edges.select(edge);\n }\n }\n\n public putEdge(edge: FcEdge) {\n const model = this.modelService.model;\n model.edges.push(edge);\n this.modelService.notifyModelChanged();\n }\n\n public _addEdge(event: Event, sourceConnector: FcConnector, destConnector: FcConnector, label: string) {\n this.modelService.modelValidation.validateConnector(sourceConnector);\n this.modelService.modelValidation.validateConnector(destConnector);\n const edge: FcEdge = {};\n edge.source = sourceConnector.id;\n edge.destination = destConnector.id;\n edge.label = label;\n const model = this.modelService.model;\n this.modelService.modelValidation.validateEdges(model.edges.concat([edge]), model.nodes);\n this.modelService.createEdge(event, edge).subscribe(\n (created) => {\n model.edges.push(created);\n this.modelService.notifyModelChanged();\n this.modelService.edgeAddedCallback(created);\n }\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FcConnector, FcEdge, FcModel, FcNode, fcTopSort, ModelvalidationError } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcModelValidationService {\n\n constructor() { }\n\n public validateModel(model: FcModel): FcModel {\n this.validateNodes(model.nodes);\n this._validateEdges(model.edges, model.nodes);\n return model;\n }\n\n public validateNodes(nodes: Array): Array {\n const ids: string[] = [];\n nodes.forEach((node) => {\n this.validateNode(node);\n if (ids.indexOf(node.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n ids.push(node.id);\n });\n const connectorIds: string[] = [];\n nodes.forEach((node) => {\n node.connectors.forEach((connector) => {\n if (connectorIds.indexOf(connector.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n connectorIds.push(connector.id);\n });\n });\n return nodes;\n }\n\n public validateNode(node: FcNode): FcNode {\n if (node.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (typeof node.name !== 'string') {\n throw new ModelvalidationError('Name not valid.');\n }\n if (typeof node.x !== 'number' || node.x < 0 || Math.round(node.x) !== node.x) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (typeof node.y !== 'number' || node.y < 0 || Math.round(node.y) !== node.y) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (!Array.isArray(node.connectors)) {\n throw new ModelvalidationError('Connectors not valid.');\n }\n node.connectors.forEach((connector) => {\n this.validateConnector(connector);\n });\n return node;\n }\n\n private _validateEdges(edges: Array, nodes: Array): Array {\n edges.forEach((edge) => {\n this._validateEdge(edge, nodes);\n });\n edges.forEach((edge1, index1) => {\n edges.forEach((edge2, index2) => {\n if (index1 !== index2) {\n if ((edge1.source === edge2.source && edge1.destination === edge2.destination) ||\n (edge1.source === edge2.destination && edge1.destination === edge2.source)) {\n throw new ModelvalidationError('Duplicated edge.');\n }\n }\n });\n });\n if (fcTopSort({nodes, edges}) === null) {\n throw new ModelvalidationError('Graph has a circle.');\n }\n return edges;\n }\n\n public validateEdges(edges: Array, nodes: Array): Array {\n this.validateNodes(nodes);\n return this._validateEdges(edges, nodes);\n }\n\n private _validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n if (edge.source === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n if (edge.destination === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (edge.source === edge.destination) {\n throw new ModelvalidationError('Edge with same source and destination connectors.');\n }\n const sourceNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.source))[0];\n if (sourceNode === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n const destinationNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.destination))[0];\n if (destinationNode === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (sourceNode === destinationNode) {\n throw new ModelvalidationError('Edge with same source and destination nodes.');\n }\n return edge;\n }\n\n public validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n this.validateNodes(nodes);\n return this._validateEdge(edge, nodes);\n }\n\n public validateConnector(connector: FcConnector): FcConnector {\n if (connector.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (connector.type === undefined || connector.type === null || typeof connector.type !== 'string') {\n throw new ModelvalidationError('Type not valid.');\n }\n return connector;\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcCoords, FcNode, FlowchartConstants } from './ngx-flowchart.models';\n\nconst nodeDropScope: NodeDropScope = {\n dropElement: null\n};\n\nexport class FcNodeDraggingService {\n\n nodeDraggingScope: NodeDraggingScope = {\n shadowDragStarted: false,\n dropElement: null,\n draggedNodes: [],\n shadowElements: []\n };\n\n private dragOffsets: FcCoords[] = [];\n private draggedElements: HTMLElement[] = [];\n\n private destinationHtmlElements: HTMLElement[] = [];\n private oldDisplayStyles: string[] = [];\n\n private readonly modelService: FcModelService;\n private readonly automaticResize: boolean;\n private readonly dragAnimation: string;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n applyFunction: (fn: (...args: any[]) => T) => T,\n automaticResize: boolean, dragAnimation: string) {\n this.modelService = modelService;\n this.automaticResize = automaticResize;\n this.dragAnimation = dragAnimation;\n this.applyFunction = applyFunction;\n }\n\n private getCoordinate(coordinate: number, max: number): number {\n coordinate = Math.max(coordinate, 0);\n coordinate = Math.min(coordinate, max);\n return coordinate;\n }\n\n private getXCoordinate(x: number): number {\n return this.getCoordinate(x, this.modelService.canvasHtmlElement.offsetWidth);\n }\n\n private getYCoordinate(y: number): number {\n return this.getCoordinate(y, this.modelService.canvasHtmlElement.offsetHeight);\n }\n\n private resizeCanvas(draggedNode: FcNode, nodeElement: HTMLElement) {\n if (this.automaticResize && !this.modelService.isDropSource()) {\n const canvasElement = this.modelService.canvasHtmlElement;\n if (canvasElement.offsetWidth < draggedNode.x + nodeElement.offsetWidth + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.width = canvasElement.offsetWidth + FlowchartConstants.canvasResizeStep + 'px';\n }\n if (canvasElement.offsetHeight < draggedNode.y + nodeElement.offsetHeight + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.height = canvasElement.offsetHeight + FlowchartConstants.canvasResizeStep + 'px';\n }\n }\n }\n\n public isDraggingNode(node: FcNode): boolean {\n return this.nodeDraggingScope.draggedNodes.includes(node);\n }\n\n public dragstart(event: DragEvent, node: FcNode) {\n if (node.readonly) {\n return;\n }\n this.dragOffsets.length = 0;\n this.draggedElements.length = 0;\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.nodeDraggingScope.shadowElements.length = 0;\n this.destinationHtmlElements.length = 0;\n this.oldDisplayStyles.length = 0;\n const elements: Array> = [];\n const nodes: Array = [];\n if (this.modelService.nodes.isSelected(node)) {\n const selectedNodes = this.modelService.nodes.getSelectedNodes();\n for (const selectedNode of selectedNodes) {\n const element = $(this.modelService.nodes.getHtmlElement(selectedNode.id));\n elements.push(element);\n nodes.push(selectedNode);\n }\n } else {\n elements.push($(event.target as HTMLElement));\n nodes.push(node);\n }\n const offsetsX: number[] = [];\n const offsetsY: number[] = [];\n for (const element of elements) {\n offsetsX.push(parseInt(element.css('left'), 10) - event.clientX);\n offsetsY.push(parseInt(element.css('top'), 10) - event.clientY);\n }\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n if (this.modelService.isDropSource()) {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n nodeDropScope.dropElement = elements[0][0].cloneNode(true) as NodeDropElement;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n nodeDropScope.dropElement.offsetInfo = {\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n nodeDropScope.dropElement.style.position = 'absolute';\n nodeDropScope.dropElement.style.pointerEvents = 'none';\n nodeDropScope.dropElement.style.zIndex = '9999';\n\n document.body.appendChild(nodeDropScope.dropElement);\n const dropNodeInfo: DropNodeInfo = {\n node,\n dropTargetId: this.modelService.dropTargetId,\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n originalEvent.dataTransfer.setData('text', JSON.stringify(dropNodeInfo));\n\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n const target: HTMLElement = event.target as HTMLElement;\n this.destinationHtmlElements.push(target);\n this.oldDisplayStyles.push(target.style.display);\n target.style.display = 'none';\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n return;\n }\n this.nodeDraggingScope.draggedNodes = nodes;\n for (let i = 0; i < elements.length; i++) {\n this.draggedElements.push(elements[i][0]);\n this.dragOffsets.push(\n {\n x: offsetsX[i],\n y: offsetsY[i]\n }\n );\n }\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n for (let i = 0; i < this.draggedElements.length; i++) {\n const dragOffset = this.dragOffsets[i];\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = $(`
` +\n `

${draggedNode.name}

`);\n const targetInnerNode = $(this.draggedElements[i]).children()[0];\n shadowElement.children()[0].style.backgroundColor = targetInnerNode.style.backgroundColor;\n this.nodeDraggingScope.shadowElements.push(shadowElement);\n this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[i][0]);\n }\n }\n originalEvent.dataTransfer.setData('text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n for (let i = 0; i < this.draggedElements.length; i++) {\n this.destinationHtmlElements.push(this.draggedElements[i]);\n this.oldDisplayStyles.push(this.destinationHtmlElements[i].style.display);\n this.destinationHtmlElements[i].style.display = 'none';\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: DragEvent): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n const infoText = originalEvent.dataTransfer.getData('text');\n if (infoText) {\n let dropNodeInfo: DropNodeInfo = null;\n try {\n dropNodeInfo = JSON.parse(infoText);\n } catch (e) {}\n if (dropNodeInfo && dropNodeInfo.dropTargetId) {\n if (this.modelService.canvasHtmlElement.id &&\n this.modelService.canvasHtmlElement.id === dropNodeInfo.dropTargetId) {\n dropNode = dropNodeInfo.node;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n const x = event.clientX - offset.left;\n const y = event.clientY - offset.top;\n dropNode.x = Math.round(this.getXCoordinate(dropNodeInfo.offsetX + x));\n dropNode.y = Math.round(this.getYCoordinate(dropNodeInfo.offsetY + y));\n }\n }\n }\n if (dropNode) {\n this.modelService.dropNode(event, dropNode);\n event.preventDefault();\n return false;\n } else if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = Math.round(this.getXCoordinate(dragOffset.x + event.clientX));\n draggedNode.y = Math.round(this.getYCoordinate(dragOffset.y + event.clientY));\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n }\n\n public dragover(event: DragEvent) {\n if (nodeDropScope.dropElement) {\n const offsetInfo = nodeDropScope.dropElement.offsetInfo;\n nodeDropScope.dropElement.style.left = (offsetInfo.offsetX + event.clientX) + 'px';\n nodeDropScope.dropElement.style.top = (offsetInfo.offsetY + event.clientY) + 'px';\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n this.destinationHtmlElements[0].style.display = this.oldDisplayStyles[0];\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n event.preventDefault();\n return;\n }\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return;\n }\n if (!this.nodeDraggingScope.draggedNodes.length) {\n event.preventDefault();\n return;\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = this.getXCoordinate(dragOffset.x + event.clientX);\n draggedNode.y = this.getYCoordinate(dragOffset.y + event.clientY);\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n this.destinationHtmlElements[i].style.display = this.oldDisplayStyles[i];\n }\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n this.nodeDraggingScope.shadowElements[i].css('left', this.getXCoordinate(dragOffset.x + event.clientX) + 'px');\n this.nodeDraggingScope.shadowElements[i].css('top', this.getYCoordinate(dragOffset.y + event.clientY) + 'px');\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n }\n }\n }\n\n public dragend(event: DragEvent) {\n this.applyFunction(() => {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n if (this.modelService.isDropSource()) {\n return;\n }\n if (this.nodeDraggingScope.shadowElements.length) {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = this.nodeDraggingScope.shadowElements[i];\n draggedNode.x = parseInt(shadowElement.css('left').replace('px', ''), 10);\n draggedNode.y = parseInt(shadowElement.css('top').replace('px', ''), 10);\n this.modelService.canvasHtmlElement.removeChild(shadowElement[0]);\n }\n this.nodeDraggingScope.shadowElements.length = 0;\n this.modelService.notifyModelChanged();\n }\n\n if (this.nodeDraggingScope.draggedNodes.length) {\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.draggedElements.length = 0;\n this.dragOffsets.length = 0;\n }\n });\n }\n\n}\n\nexport interface NodeDraggingScope {\n draggedNodes: Array;\n shadowElements: Array>;\n shadowDragStarted: boolean;\n dropElement: HTMLElement;\n}\n\nexport interface NodeDropElement extends HTMLElement {\n offsetInfo?: {\n offsetX: number;\n offsetY: number;\n };\n}\n\nexport interface NodeDropScope {\n dropElement: NodeDropElement;\n}\n\nexport interface DropNodeInfo {\n node: FcNode;\n dropTargetId: string;\n offsetX: number;\n offsetY: number;\n}\n","import { Injectable } from '@angular/core';\nimport { FcCoords, FlowchartConstants } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcEdgeDrawingService {\n\n constructor() {\n }\n\n public getEdgeDAttribute(pt1: FcCoords, pt2: FcCoords, style: string): string {\n let dAddribute = `M ${pt1.x}, ${pt1.y} `;\n if (style === FlowchartConstants.curvedStyle) {\n const sourceTangent = this.computeEdgeSourceTangent(pt1, pt2);\n const destinationTangent = this.computeEdgeDestinationTangent(pt1, pt2);\n dAddribute += `C ${sourceTangent.x}, ${sourceTangent.y} ${(destinationTangent.x - 50)}, ${destinationTangent.y} ${pt2.x}, ${pt2.y}`;\n } else {\n dAddribute += `L ${pt2.x}, ${pt2.y}`;\n }\n return dAddribute;\n }\n\n public getEdgeCenter(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: (pt1.x + pt2.x) / 2,\n y: (pt1.y + pt2.y) / 2\n };\n }\n\n private computeEdgeTangentOffset(pt1: FcCoords, pt2: FcCoords): number {\n return (pt2.y - pt1.y) / 2;\n }\n\n private computeEdgeSourceTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt1.x,\n y: pt1.y + this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n private computeEdgeDestinationTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt2.x,\n y: pt2.y - this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcConnector, FcCoords, FcEdge, FcModel, FlowchartConstants, ModelvalidationError } from './ngx-flowchart.models';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcModelValidationService } from './modelvalidation.service';\n\nexport class FcEdgeDraggingService {\n\n edgeDragging: EdgeDragging = {\n isDragging: false,\n dragPoint1: null,\n dragPoint2: null,\n shadowDragStarted: false\n };\n\n private draggedEdgeSource: FcConnector = null;\n private dragOffset: FcCoords = {};\n private destinationHtmlElement: HTMLElement = null;\n private oldDisplayStyle = '';\n\n private readonly modelValidation: FcModelValidationService;\n private readonly edgeDrawingService: FcEdgeDrawingService;\n private readonly modelService: FcModelService;\n private readonly model: FcModel;\n private readonly isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n private readonly dragAnimation: string;\n private readonly edgeStyle: string;\n\n constructor(modelValidation: FcModelValidationService,\n edgeDrawingService: FcEdgeDrawingService,\n modelService: FcModelService,\n model: FcModel,\n isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean,\n applyFunction: (fn: (...args: any[]) => T) => T,\n dragAnimation: string,\n edgeStyle: string) {\n this.modelValidation = modelValidation;\n this.edgeDrawingService = edgeDrawingService;\n this.modelService = modelService;\n this.model = model;\n this.isValidEdgeCallback = isValidEdgeCallback || (() => true);\n this.applyFunction = applyFunction;\n this.dragAnimation = dragAnimation;\n this.edgeStyle = edgeStyle;\n }\n\n public dragstart(event: DragEvent, connector: FcConnector) {\n let swapConnector: FcConnector;\n let dragLabel: string;\n let prevEdge: FcEdge;\n if (connector.type === FlowchartConstants.leftConnectorType) {\n for (const edge of this.model.edges) {\n if (edge.destination === connector.id) {\n swapConnector = this.modelService.connectors.getConnector(edge.source);\n dragLabel = edge.label;\n prevEdge = edge;\n this.applyFunction(() => {\n this.modelService.edges.delete(edge);\n });\n break;\n }\n }\n }\n this.edgeDragging.isDragging = true;\n if (swapConnector !== undefined) {\n this.draggedEdgeSource = swapConnector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(swapConnector.id);\n this.edgeDragging.dragLabel = dragLabel;\n this.edgeDragging.prevEdge = prevEdge;\n } else {\n this.draggedEdgeSource = connector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(connector.id);\n }\n const canvas = this.modelService.canvasHtmlElement;\n if (!canvas) {\n throw new Error('No canvas while edgedraggingService found.');\n }\n this.dragOffset.x = -canvas.getBoundingClientRect().left;\n this.dragOffset.y = -canvas.getBoundingClientRect().top;\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n\n originalEvent.dataTransfer.setData('Text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n this.destinationHtmlElement = event.target as HTMLElement;\n this.oldDisplayStyle = this.destinationHtmlElement.style.display;\n this.destinationHtmlElement.style.display = 'none';\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.shadowDragStarted = true;\n }\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.edgeDragging.gElement === undefined) {\n this.edgeDragging.gElement = $(document.querySelectorAll('.shadow-svg-class'));\n this.edgeDragging.pathElement = $(document.querySelectorAll('.shadow-svg-class')).find('path');\n this.edgeDragging.circleElement = $(document.querySelectorAll('.shadow-svg-class')).find('circle');\n }\n\n this.edgeDragging.gElement.css('display', 'block');\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n }\n event.stopPropagation();\n }\n\n public dragover(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n if (!this.edgeDragging.magnetActive && this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n if (this.edgeDragging.shadowDragStarted) {\n this.applyFunction(() => {\n this.edgeDragging.shadowDragStarted = false;\n });\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n });\n }\n }\n }\n\n public dragoverConnector(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n }\n }\n\n public dragleaveMagnet(event: DragEvent) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n\n this.edgeDragging.magnetActive = true;\n\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n event.preventDefault();\n event.stopPropagation();\n return false;\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n event.preventDefault();\n event.stopPropagation();\n return false;\n });\n }\n }\n }\n }\n\n public dragend(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n this.edgeDragging.isDragging = false;\n this.edgeDragging.dragPoint1 = null;\n this.edgeDragging.dragPoint2 = null;\n this.edgeDragging.dragLabel = null;\n event.stopPropagation();\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.gElement.css('display', 'none');\n }\n if (this.edgeDragging.prevEdge) {\n const edge = this.edgeDragging.prevEdge;\n this.edgeDragging.prevEdge = null;\n this.applyFunction(() => {\n this.modelService.edges.putEdge(edge);\n });\n }\n }\n }\n\n public drop(event: DragEvent, targetConnector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: targetConnector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n\n if (this.isValidEdgeCallback(this.draggedEdgeSource, targetConnector)) {\n this.edgeDragging.prevEdge = null;\n this.modelService.edges._addEdge(event, this.draggedEdgeSource, targetConnector, this.edgeDragging.dragLabel);\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n }\n }\n}\n\nexport interface EdgeDragging {\n isDragging: boolean;\n shadowDragStarted: boolean;\n dragPoint1: FcCoords;\n dragPoint2: FcCoords;\n dragLabel?: string;\n prevEdge?: FcEdge;\n magnetActive?: boolean;\n gElement?: JQuery;\n pathElement?: JQuery;\n circleElement?: JQuery;\n}\n","import { FcConnector, FcEdge, FcNode } from './ngx-flowchart.models';\n\nexport class FcMouseOverService {\n\n mouseoverscope: MouseOverScope = {\n connector: null,\n edge: null,\n node: null\n };\n\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(applyFunction: (fn: (...args: any[]) => T) => T) {\n this.applyFunction = applyFunction;\n }\n\n public nodeMouseOver(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = node;\n });\n }\n\n public nodeMouseOut(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = null;\n });\n }\n\n public connectorMouseEnter(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = connector;\n });\n }\n\n public connectorMouseLeave(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = null;\n });\n }\n\n public edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = edge;\n }\n\n public edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = null;\n }\n}\n\nexport interface MouseOverScope {\n connector: FcConnector;\n edge: FcEdge;\n node: FcNode;\n}\n","const regex = /(auto|scroll)/;\n\nconst style = (node: Element, prop: string): string =>\n getComputedStyle(node, null).getPropertyValue(prop);\n\nconst scroll = (node: Element) =>\n regex.test(\n style(node, 'overflow') +\n style(node, 'overflow-y') +\n style(node, 'overflow-x'));\n\nconst scrollparent = (node: HTMLElement): HTMLElement =>\n !node || node === document.body\n ? document.body\n : scroll(node)\n ? node\n : scrollparent(node.parentNode as HTMLElement);\n\nexport default scrollparent;\n","import { FcModelService } from './model.service';\nimport { FcRectBox } from './ngx-flowchart.models';\nimport scrollparent from './scrollparent';\n\ninterface Rectangle {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport class FcRectangleSelectService {\n\n private readonly selectRect: Rectangle = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n\n private readonly modelService: FcModelService;\n private readonly selectElement: HTMLElement;\n private readonly $canvasElement: JQuery;\n private readonly $scrollParent: JQuery;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n selectElement: HTMLElement,\n applyFunction: (fn: (...args: any[]) => T) => T) {\n this.modelService = modelService;\n this.selectElement = selectElement;\n this.$canvasElement = $(this.modelService.canvasHtmlElement);\n this.$scrollParent = $(scrollparent(this.modelService.canvasHtmlElement));\n this.applyFunction = applyFunction;\n }\n\n public mousedown(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && this.selectElement.hidden) {\n this.selectElement.hidden = false;\n const offset = this.$canvasElement.offset();\n this.selectRect.x1 = Math.round(e.pageX - offset.left);\n this.selectRect.y1 = Math.round(e.pageY - offset.top);\n this.selectRect.x2 = this.selectRect.x1;\n this.selectRect.y2 = this.selectRect.y1;\n this.updateSelectRect();\n }\n }\n\n public mousemove(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const offset = this.$canvasElement.offset();\n this.selectRect.x2 = Math.round(e.pageX - offset.left);\n this.selectRect.y2 = Math.round(e.pageY - offset.top);\n this.updateScroll(offset);\n this.updateSelectRect();\n }\n }\n\n private updateScroll(offset: JQuery.Coordinates) {\n const rect = this.$scrollParent[0].getBoundingClientRect();\n const bottom = rect.bottom - offset.top;\n const right = rect.right - offset.left;\n const top = rect.top - offset.top;\n const left = rect.left - offset.left;\n if (this.selectRect.y2 - top < 25) {\n const topScroll = 25 - (this.selectRect.y2 - top);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll - topScroll);\n } else if (bottom - this.selectRect.y2 < 40) {\n const bottomScroll = 40 - (bottom - this.selectRect.y2);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll + bottomScroll);\n }\n if (this.selectRect.x2 - left < 25) {\n const leftScroll = 25 - (this.selectRect.x2 - left);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll - leftScroll);\n } else if (right - this.selectRect.x2 < 40) {\n const rightScroll = 40 - (right - this.selectRect.x2);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll + rightScroll);\n }\n }\n\n public mouseup(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const rectBox = this.selectElement.getBoundingClientRect() as FcRectBox;\n this.selectElement.hidden = true;\n this.selectObjects(rectBox);\n }\n }\n\n private updateSelectRect() {\n const x3 = Math.min(this.selectRect.x1, this.selectRect.x2);\n const x4 = Math.max(this.selectRect.x1, this.selectRect.x2);\n const y3 = Math.min(this.selectRect.y1, this.selectRect.y2);\n const y4 = Math.max(this.selectRect.y1, this.selectRect.y2);\n this.selectElement.style.left = x3 + 'px';\n this.selectElement.style.top = y3 + 'px';\n this.selectElement.style.width = x4 - x3 + 'px';\n this.selectElement.style.height = y4 - y3 + 'px';\n }\n\n private selectObjects(rectBox: FcRectBox) {\n this.applyFunction(() => {\n this.modelService.selectAllInRect(rectBox);\n });\n }\n\n}\n\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef, EventEmitter,\n HostBinding,\n HostListener,\n Input,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnInit, Output\n} from '@angular/core';\nimport { FcCallbacks, FcEdge, FcModel, FcNode, FlowchartConstants, UserCallbacks, UserNodeCallbacks } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcNodeDraggingService } from './node-dragging.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcEdgeDraggingService } from './edge-dragging.service';\nimport { FcMouseOverService } from './mouseover.service';\nimport { FcRectangleSelectService } from './rectangleselect.service';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'fc-canvas',\n templateUrl: './ngx-flowchart.component.html',\n styleUrls: ['./ngx-flowchart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxFlowchartComponent implements OnInit, DoCheck {\n\n @HostBinding('attr.class')\n get canvasClass(): string {\n return FlowchartConstants.canvasClass;\n }\n\n @Input()\n model: FcModel;\n\n @Input()\n selectedObjects: any[];\n\n @Input()\n edgeStyle: string;\n\n @Input()\n userCallbacks: UserCallbacks;\n\n @Input()\n automaticResize: boolean;\n\n @Input()\n dragAnimation: string;\n\n @Input()\n nodeWidth: number;\n\n @Input()\n nodeHeight: number;\n\n @Input()\n dropTargetId: string;\n\n @Output()\n modelChanged = new EventEmitter();\n\n private fitModelSizeByDefaultValue = true;\n get fitModelSizeByDefault(): boolean {\n return this.fitModelSizeByDefaultValue;\n }\n @Input()\n set fitModelSizeByDefault(value: boolean) {\n this.fitModelSizeByDefaultValue = coerceBooleanProperty(value);\n }\n\n callbacks: FcCallbacks;\n\n userNodeCallbacks: UserNodeCallbacks;\n\n modelService: FcModelService;\n nodeDraggingService: FcNodeDraggingService;\n edgeDraggingService: FcEdgeDraggingService;\n mouseoverService: FcMouseOverService;\n rectangleSelectService: FcRectangleSelectService;\n\n arrowDefId: string;\n arrowDefIdSelected: string;\n\n flowchartConstants = FlowchartConstants;\n\n private nodesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private edgesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n constructor(private elementRef: ElementRef,\n private differs: IterableDiffers,\n private modelValidation: FcModelValidationService,\n public edgeDrawingService: FcEdgeDrawingService,\n private cd: ChangeDetectorRef,\n private zone: NgZone) {\n this.arrowDefId = 'arrow-' + Math.random();\n this.arrowDefIdSelected = this.arrowDefId + '-selected';\n }\n\n ngOnInit() {\n if (!this.dropTargetId && this.edgeStyle !== FlowchartConstants.curvedStyle && this.edgeStyle !== FlowchartConstants.lineStyle) {\n throw new Error('edgeStyle not supported.');\n }\n this.nodeHeight = this.nodeHeight || 200;\n this.nodeWidth = this.nodeWidth || 200;\n this.dragAnimation = this.dragAnimation || FlowchartConstants.dragAnimationRepaint;\n this.userCallbacks = this.userCallbacks || {};\n this.automaticResize = this.automaticResize || false;\n\n for (const key of Object.keys(this.userCallbacks)) {\n const callback = this.userCallbacks[key];\n if (typeof callback !== 'function' && key !== 'nodeCallbacks') {\n throw new Error('All callbacks should be functions.');\n }\n }\n\n this.userNodeCallbacks = this.userCallbacks.nodeCallbacks;\n\n const element = $(this.elementRef.nativeElement);\n\n this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.cd, this.selectedObjects,\n this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved,\n this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg'));\n\n if (this.dropTargetId) {\n this.modelService.dropTargetId = this.dropTargetId;\n }\n\n const applyFunction = this.zone.run.bind(this.zone);\n\n this.nodeDraggingService = new FcNodeDraggingService(this.modelService, applyFunction,\n this.automaticResize, this.dragAnimation);\n\n this.edgeDraggingService = new FcEdgeDraggingService(this.modelValidation, this.edgeDrawingService, this.modelService,\n this.model, this.userCallbacks.isValidEdge || null, applyFunction,\n this.dragAnimation, this.edgeStyle);\n\n this.mouseoverService = new FcMouseOverService(applyFunction);\n\n this.rectangleSelectService = new FcRectangleSelectService(this.modelService,\n element[0].querySelector('#select-rectangle'), applyFunction);\n\n this.callbacks = {\n nodeDragstart: this.nodeDraggingService.dragstart.bind(this.nodeDraggingService),\n nodeDragend: this.nodeDraggingService.dragend.bind(this.nodeDraggingService),\n edgeDragstart: this.edgeDraggingService.dragstart.bind(this.edgeDraggingService),\n edgeDragend: this.edgeDraggingService.dragend.bind(this.edgeDraggingService),\n edgeDrop: this.edgeDraggingService.drop.bind(this.edgeDraggingService),\n edgeDragoverConnector: this.edgeDraggingService.dragoverConnector.bind(this.edgeDraggingService),\n edgeDragoverMagnet: this.edgeDraggingService.dragoverMagnet.bind(this.edgeDraggingService),\n edgeDragleaveMagnet: this.edgeDraggingService.dragleaveMagnet.bind(this.edgeDraggingService),\n nodeMouseOver: this.mouseoverService.nodeMouseOver.bind(this.mouseoverService),\n nodeMouseOut: this.mouseoverService.nodeMouseOut.bind(this.mouseoverService),\n connectorMouseEnter: this.mouseoverService.connectorMouseEnter.bind(this.mouseoverService),\n connectorMouseLeave: this.mouseoverService.connectorMouseLeave.bind(this.mouseoverService),\n nodeClicked: (event, node) => {\n this.modelService.nodes.handleClicked(node, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n };\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n\n ngDoCheck(): void {\n if (this.model) {\n const nodesChange = this.nodesDiffer.diff(this.model.nodes);\n const edgesChange = this.edgesDiffer.diff(this.model.edges);\n let nodesChanged = false;\n let edgesChanged = false;\n if (nodesChange !== null) {\n nodesChange.forEachAddedItem(() => {\n nodesChanged = true;\n });\n nodesChange.forEachRemovedItem(() => {\n nodesChanged = true;\n });\n }\n if (edgesChange !== null) {\n edgesChange.forEachAddedItem(() => {\n edgesChanged = true;\n });\n edgesChange.forEachRemovedItem(() => {\n edgesChanged = true;\n });\n }\n if (nodesChanged) {\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n if (nodesChanged || edgesChanged) {\n this.cd.detectChanges();\n }\n }\n }\n\n getEdgeDAttribute(edge: FcEdge): string {\n return this.edgeDrawingService.getEdgeDAttribute(this.modelService.edges.sourceCoord(edge),\n this.modelService.edges.destCoord(edge), this.edgeStyle);\n }\n\n public adjustCanvasSize(fit?: boolean) {\n let maxX = 0;\n let maxY = 0;\n const element = $(this.elementRef.nativeElement);\n this.model.nodes.forEach((node) => {\n maxX = Math.max(node.x + this.nodeWidth, maxX);\n maxY = Math.max(node.y + this.nodeHeight, maxY);\n });\n let width;\n let height;\n if (fit) {\n width = maxX;\n height = maxY;\n } else {\n width = Math.max(maxX, element.prop('offsetWidth'));\n height = Math.max(maxY, element.prop('offsetHeight'));\n }\n element.css('width', width + 'px');\n element.css('height', height + 'px');\n }\n\n canvasClick(event: MouseEvent) {}\n\n edgeMouseDown(event: MouseEvent, edge: FcEdge) {\n event.stopPropagation();\n }\n\n edgeClick(event: MouseEvent, edge: FcEdge) {\n this.modelService.edges.handleEdgeMouseClick(edge, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeRemove(event: Event, edge: FcEdge) {\n this.modelService.edges.delete(edge);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeEdit(event: Event, edge: FcEdge) {\n if (this.userCallbacks.edgeEdit) {\n this.userCallbacks.edgeEdit(event, edge);\n }\n }\n\n edgeDoubleClick(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeDoubleClick) {\n this.userCallbacks.edgeDoubleClick(event, edge);\n }\n }\n\n edgeMouseOver(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeMouseOver) {\n this.userCallbacks.edgeMouseOver(event, edge);\n }\n }\n\n edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseEnter(event, edge);\n }\n\n edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseLeave(event, edge);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n this.nodeDraggingService.drop(event);\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n this.rectangleSelectService.mousedown(event);\n }\n\n @HostListener('mousemove', ['$event'])\n mousemove(event: MouseEvent) {\n this.rectangleSelectService.mousemove(event);\n }\n\n @HostListener('mouseup', ['$event'])\n mouseup(event: MouseEvent) {\n this.rectangleSelectService.mouseup(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-magnet]'\n})\nexport class FcMagnetDirective implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n connector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.magnetClass);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: DragEvent) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-connector]'\n})\nexport class FcConnectorDirective implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n connector: FcConnector;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.connectorClass);\n if (this.modelservice.isEditable()) {\n element.attr('draggable', 'true');\n this.updateConnectorClass();\n }\n this.modelservice.connectors.setHtmlElement(this.connector.id, element[0]);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateConnector = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (propName === 'mouseOverConnector') {\n updateConnector = true;\n }\n }\n }\n if (updateConnector && this.modelservice.isEditable()) {\n this.updateConnectorClass();\n }\n }\n\n private updateConnectorClass() {\n const element = $(this.elementRef.nativeElement);\n if (this.connector === this.mouseOverConnector) {\n element.addClass(FlowchartConstants.hoverClass);\n } else {\n element.removeClass(FlowchartConstants.hoverClass);\n }\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n // Skip - conflict with magnet\n /* if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDragoverConnector(event, this.connector);\n }*/\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragstart(event, this.connector);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n mouseenter(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseEnter(event, this.connector);\n }\n }\n\n @HostListener('mouseleave', ['$event'])\n mouseleave(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseLeave(event, this.connector);\n }\n }\n\n}\n","import {\n Component,\n ComponentFactoryResolver, Directive,\n ElementRef, HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {\n FC_NODE_COMPONENT_CONFIG,\n FcCallbacks,\n FcConnector,\n FcNode,\n FcNodeComponentConfig,\n FlowchartConstants,\n UserNodeCallbacks\n} from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Component({\n selector: 'fc-node',\n template: '',\n styleUrls: ['./node.component.scss']\n})\nexport class FcNodeContainerComponent implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n @HostBinding('attr.id')\n get nodeId(): string {\n return this.node.id;\n }\n\n @HostBinding('style.top')\n get top(): string {\n return this.node.y + 'px';\n }\n\n @HostBinding('style.left')\n get left(): string {\n return this.node.x + 'px';\n }\n\n nodeComponent: FcNodeComponent;\n\n @ViewChild('nodeContent', {read: ViewContainerRef, static: true}) nodeContentContainer: ViewContainerRef;\n\n constructor(@Inject(FC_NODE_COMPONENT_CONFIG) private nodeComponentConfig: FcNodeComponentConfig,\n private elementRef: ElementRef,\n private componentFactoryResolver: ComponentFactoryResolver) {\n }\n\n ngOnInit(): void {\n if (!this.userNodeCallbacks) {\n this.userNodeCallbacks = {};\n }\n this.userNodeCallbacks.nodeEdit = this.userNodeCallbacks.nodeEdit || (() => {});\n this.userNodeCallbacks.doubleClick = this.userNodeCallbacks.doubleClick || (() => {});\n this.userNodeCallbacks.mouseDown = this.userNodeCallbacks.mouseDown || (() => {});\n this.userNodeCallbacks.mouseEnter = this.userNodeCallbacks.mouseEnter || (() => {});\n this.userNodeCallbacks.mouseLeave = this.userNodeCallbacks.mouseLeave || (() => {});\n\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.nodeClass);\n if (!this.node.readonly) {\n element.attr('draggable', 'true');\n }\n this.updateNodeClass();\n this.modelservice.nodes.setHtmlElement(this.node.id, element[0]);\n this.nodeContentContainer.clear();\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.nodeComponentConfig.nodeComponentType);\n const componentRef = this.nodeContentContainer.createComponent(componentFactory);\n this.nodeComponent = componentRef.instance;\n this.nodeComponent.callbacks = this.callbacks;\n this.nodeComponent.userNodeCallbacks = this.userNodeCallbacks;\n this.nodeComponent.node = this.node;\n this.nodeComponent.modelservice = this.modelservice;\n this.updateNodeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateNode = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (['selected', 'edit', 'underMouse', 'mouseOverConnector', 'dragging'].includes(propName)) {\n updateNode = true;\n }\n }\n }\n if (updateNode) {\n this.updateNodeClass();\n this.updateNodeComponent();\n }\n }\n\n private updateNodeClass() {\n const element = $(this.elementRef.nativeElement);\n this.toggleClass(element, FlowchartConstants.selectedClass, this.selected);\n this.toggleClass(element, FlowchartConstants.editClass, this.edit);\n this.toggleClass(element, FlowchartConstants.hoverClass, this.underMouse);\n this.toggleClass(element, FlowchartConstants.draggingClass, this.dragging);\n }\n\n private updateNodeComponent() {\n this.nodeComponent.selected = this.selected;\n this.nodeComponent.edit = this.edit;\n this.nodeComponent.underMouse = this.underMouse;\n this.nodeComponent.mouseOverConnector = this.mouseOverConnector;\n this.nodeComponent.dragging = this.dragging;\n }\n\n private toggleClass(element: JQuery, clazz: string, set: boolean) {\n if (set) {\n element.addClass(clazz);\n } else {\n element.removeClass(clazz);\n }\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragend(event);\n }\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeClicked(event, this.node);\n }\n }\n\n @HostListener('mouseover', ['$event'])\n mouseover(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOver(event, this.node);\n }\n }\n\n @HostListener('mouseout', ['$event'])\n mouseout(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOut(event, this.node);\n }\n }\n\n}\n\nexport abstract class FcNodeComponent implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n flowchartConstants = FlowchartConstants;\n\n ngOnInit(): void {\n }\n\n}\n","import { Component } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\n@Component({\n selector: 'fc-default-node',\n templateUrl: './default-node.component.html',\n styleUrls: ['./default-node.component.scss']\n})\nexport class DefaultFcNodeComponent extends FcNodeComponent {\n\n constructor() {\n super();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { NgxFlowchartComponent } from './ngx-flowchart.component';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { CommonModule } from '@angular/common';\nimport { FcMagnetDirective } from './magnet.directive';\nimport { FcConnectorDirective } from './connector.directive';\nimport { FcNodeContainerComponent } from './node.component';\nimport { FC_NODE_COMPONENT_CONFIG } from './ngx-flowchart.models';\nimport { DefaultFcNodeComponent } from './default-node.component';\n\n@NgModule({\n entryComponents: [\n DefaultFcNodeComponent\n ],\n declarations: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n FcNodeContainerComponent,\n DefaultFcNodeComponent],\n providers: [\n FcModelValidationService,\n FcEdgeDrawingService,\n {\n provide: FC_NODE_COMPONENT_CONFIG,\n useValue: {\n nodeComponentType: DefaultFcNodeComponent\n }\n }\n ],\n imports: [\n CommonModule\n ],\n exports: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n DefaultFcNodeComponent]\n})\nexport class NgxFlowchartModule { }\n"],"names":["InjectionToken","tslib_1.__extends","tslib_1.__values","Subject","of","debounceTime","Injectable","EventEmitter","coerceBooleanProperty","Component","ChangeDetectionStrategy","ElementRef","IterableDiffers","ChangeDetectorRef","NgZone","HostBinding","Input","Output","HostListener","Directive","Inject","ComponentFactoryResolver","ViewChild","ViewContainerRef","NgModule","CommonModule"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ngx-flowchart.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://ngx-flowchart/lib/ngx-flowchart.models.ts","ng://ngx-flowchart/lib/model.service.ts","ng://ngx-flowchart/lib/modelvalidation.service.ts","ng://ngx-flowchart/lib/node-dragging.service.ts","ng://ngx-flowchart/lib/edge-drawing.service.ts","ng://ngx-flowchart/lib/edge-dragging.service.ts","ng://ngx-flowchart/lib/mouseover.service.ts","ng://ngx-flowchart/lib/scrollparent.ts","ng://ngx-flowchart/lib/rectangleselect.service.ts","ng://ngx-flowchart/lib/ngx-flowchart.component.ts","ng://ngx-flowchart/lib/magnet.directive.ts","ng://ngx-flowchart/lib/connector.directive.ts","ng://ngx-flowchart/lib/node.component.ts","ng://ngx-flowchart/lib/default-node.component.ts","ng://ngx-flowchart/lib/ngx-flowchart.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Observable } from 'rxjs';\nimport { InjectionToken, Type } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\nexport const FC_NODE_COMPONENT_CONFIG = new InjectionToken('fc-node.component.config');\n\nexport interface FcNodeComponentConfig {\n nodeComponentType: Type;\n}\n\nconst htmlPrefix = 'fc';\nconst leftConnectorType = 'leftConnector';\nconst rightConnectorType = 'rightConnector';\n\nexport const FlowchartConstants = {\n htmlPrefix,\n leftConnectorType,\n rightConnectorType,\n curvedStyle: 'curved',\n lineStyle: 'line',\n dragAnimationRepaint: 'repaint',\n dragAnimationShadow: 'shadow',\n canvasClass: htmlPrefix + '-canvas',\n selectedClass: htmlPrefix + '-selected',\n editClass: htmlPrefix + '-edit',\n activeClass: htmlPrefix + '-active',\n hoverClass: htmlPrefix + '-hover',\n draggingClass: htmlPrefix + '-dragging',\n edgeClass: htmlPrefix + '-edge',\n edgeLabelClass: htmlPrefix + '-edge-label',\n connectorClass: htmlPrefix + '-connector',\n magnetClass: htmlPrefix + '-magnet',\n nodeClass: htmlPrefix + '-node',\n nodeOverlayClass: htmlPrefix + '-node-overlay',\n leftConnectorClass: htmlPrefix + '-' + leftConnectorType + 's',\n rightConnectorClass: htmlPrefix + '-' + rightConnectorType + 's',\n canvasResizeThreshold: 200,\n canvasResizeStep: 200\n};\n\n\nexport interface FcCoords {\n x?: number;\n y?: number;\n}\n\nexport interface FcRectBox {\n top: number;\n left: number;\n right: number;\n bottom: number;\n}\n\nexport interface FcConnector {\n id: string;\n type: string;\n}\n\nexport interface FcNode extends FcCoords {\n id: string;\n name: string;\n connectors: Array;\n readonly?: boolean;\n [key: string]: any;\n}\n\nexport interface FcEdge {\n label?: string;\n source?: string;\n destination?: string;\n active?: boolean;\n}\n\nexport interface FcItemInfo {\n node?: FcNode;\n edge?: FcEdge;\n}\n\nexport interface FcModel {\n nodes: Array;\n edges: Array;\n}\n\nexport interface UserCallbacks {\n dropNode?: (event: Event, node: FcNode) => void;\n createEdge?: (event: Event, edge: FcEdge) => Observable;\n edgeAdded?: (edge: FcEdge) => void;\n nodeRemoved?: (node: FcNode) => void;\n edgeRemoved?: (edge: FcEdge) => void;\n edgeDoubleClick?: (event: MouseEvent, edge: FcEdge) => void;\n edgeMouseOver?: (event: MouseEvent, edge: FcEdge) => void;\n isValidEdge?: (source: FcConnector, destination: FcConnector) => boolean;\n edgeEdit?: (event: Event, edge: FcEdge) => void;\n nodeCallbacks?: UserNodeCallbacks;\n}\n\nexport interface UserNodeCallbacks {\n nodeEdit?: (event: MouseEvent, node: FcNode) => void;\n doubleClick?: (event: MouseEvent, node: FcNode) => void;\n mouseDown?: (event: MouseEvent, node: FcNode) => void;\n mouseEnter?: (event: MouseEvent, node: FcNode) => void;\n mouseLeave?: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcCallbacks {\n nodeDragstart: (event: DragEvent, node: FcNode) => void;\n nodeDragend: (event: DragEvent) => void;\n edgeDragstart: (event: DragEvent, connector: FcConnector) => void;\n edgeDragend: (event: DragEvent) => void;\n edgeDrop: (event: DragEvent, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: DragEvent) => void;\n nodeMouseOver: (event: MouseEvent, node: FcNode) => void;\n nodeMouseOut: (event: MouseEvent, node: FcNode) => void;\n connectorMouseEnter: (event: MouseEvent, connector: FcConnector) => void;\n connectorMouseLeave: (event: MouseEvent, connector: FcConnector) => void;\n nodeClicked: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcAdjacentList {\n [id: string]: {\n incoming: number;\n outgoing: Array;\n };\n}\n\nclass BaseError {\n constructor() {\n Error.apply(this, arguments);\n }\n}\n\nObject.defineProperty(BaseError, 'prototype', new Error());\n\nexport class ModelvalidationError extends BaseError {\n constructor(public message: string) {\n super();\n }\n}\n\nexport function fcTopSort(graph: FcModel): Array | null {\n const adjacentList: FcAdjacentList = {};\n graph.nodes.forEach((node) => {\n adjacentList[node.id] = {incoming: 0, outgoing: []};\n });\n graph.edges.forEach((edge) => {\n const sourceNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.source;\n });\n })[0];\n const destinationNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.destination;\n });\n })[0];\n adjacentList[sourceNode.id].outgoing.push(destinationNode.id);\n adjacentList[destinationNode.id].incoming++;\n });\n const orderedNodes: string[] = [];\n const sourceNodes: string[] = [];\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming === 0) {\n sourceNodes.push(node);\n }\n }\n while (sourceNodes.length !== 0) {\n const sourceNode = sourceNodes.pop();\n for (let i = 0; i < adjacentList[sourceNode].outgoing.length; i++) {\n const destinationNode = adjacentList[sourceNode].outgoing[i];\n adjacentList[destinationNode].incoming--;\n if (adjacentList[destinationNode].incoming === 0) {\n sourceNodes.push(destinationNode);\n }\n adjacentList[sourceNode].outgoing.splice(i, 1);\n i--;\n }\n orderedNodes.push(sourceNode);\n }\n let hasEdges = false;\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming !== 0) {\n hasEdges = true;\n }\n }\n if (hasEdges) {\n return null;\n } else {\n return orderedNodes;\n }\n}\n","import { FcModelValidationService } from './modelvalidation.service';\nimport { FcConnector, FcCoords, FcEdge, FcItemInfo, FcModel, FcNode, FcRectBox } from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { ChangeDetectorRef, EventEmitter } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\nexport class FcModelService {\n\n modelValidation: FcModelValidationService;\n model: FcModel;\n private readonly detectChangesSubject: Subject;\n selectedObjects: any[];\n\n connectorsHtmlElements: HtmlElementMap = {};\n nodesHtmlElements: HtmlElementMap = {};\n canvasHtmlElement: HTMLElement = null;\n dragImage: HTMLImageElement = null;\n svgHtmlElement: SVGElement = null;\n\n dropNode: (event: Event, node: FcNode) => void;\n createEdge: (event: Event, edge: FcEdge) => Observable;\n edgeAddedCallback: (edge: FcEdge) => void;\n nodeRemovedCallback: (node: FcNode) => void;\n edgeRemovedCallback: (edge: FcEdge) => void;\n\n dropTargetId: string;\n\n private readonly modelChanged: EventEmitter;\n private readonly debouncer = new Subject();\n\n connectors: ConnectorsModel;\n nodes: NodesModel;\n edges: EdgesModel;\n\n constructor(modelValidation: FcModelValidationService,\n model: FcModel,\n modelChanged: EventEmitter,\n detectChangesSubject: Subject,\n selectedObjects: any[],\n dropNode: (event: Event, node: FcNode) => void,\n createEdge: (event: Event, edge: FcEdge) => Observable,\n edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void,\n canvasHtmlElement: HTMLElement,\n svgHtmlElement: SVGElement) {\n\n this.modelValidation = modelValidation;\n this.model = model;\n this.modelChanged = modelChanged;\n this.detectChangesSubject = detectChangesSubject;\n this.canvasHtmlElement = canvasHtmlElement;\n this.svgHtmlElement = svgHtmlElement;\n this.modelValidation.validateModel(this.model);\n this.selectedObjects = selectedObjects;\n\n this.dropNode = dropNode || (() => {});\n this.createEdge = createEdge || ((event, edge) => of({...edge, label: 'label'}));\n this.edgeAddedCallback = edgeAddedCallback || (() => {});\n this.nodeRemovedCallback = nodeRemovedCallback || (() => {});\n this.edgeRemovedCallback = edgeRemovedCallback || (() => {});\n\n this.connectors = new ConnectorsModel(this);\n this.nodes = new NodesModel(this);\n this.edges = new EdgesModel(this);\n\n this.debouncer\n .pipe(debounceTime(100))\n .subscribe(() => this.modelChanged.emit());\n }\n\n public notifyModelChanged() {\n this.debouncer.next();\n }\n\n public detectChanges() {\n setTimeout(() => {\n this.detectChangesSubject.next();\n }, 0);\n }\n\n public selectObject(object: any) {\n if (this.isEditable()) {\n if (this.selectedObjects.indexOf(object) === -1) {\n this.selectedObjects.push(object);\n }\n }\n }\n\n public deselectObject(object: any) {\n if (this.isEditable()) {\n const index = this.selectedObjects.indexOf(object);\n if (index === -1) {\n throw new Error('Tried to deselect an unselected object');\n }\n this.selectedObjects.splice(index, 1);\n }\n }\n\n public toggleSelectedObject(object: any) {\n if (this.isSelectedObject(object)) {\n this.deselectObject(object);\n } else {\n this.selectObject(object);\n }\n }\n\n public isSelectedObject(object: any): boolean {\n return this.selectedObjects.indexOf(object) !== -1;\n }\n\n public selectAll() {\n this.model.nodes.forEach(node => {\n if (!node.readonly) {\n this.nodes.select(node);\n }\n });\n this.model.edges.forEach(edge => {\n this.edges.select(edge);\n });\n this.detectChanges();\n }\n\n public deselectAll() {\n this.selectedObjects.splice(0, this.selectedObjects.length);\n this.detectChanges();\n }\n\n public isEditObject(object: any): boolean {\n return this.selectedObjects.length === 1 &&\n this.selectedObjects.indexOf(object) !== -1;\n }\n\n private inRectBox(x: number, y: number, rectBox: FcRectBox): boolean {\n return x >= rectBox.left && x <= rectBox.right &&\n y >= rectBox.top && y <= rectBox.bottom;\n }\n\n public getItemInfoAtPoint(x: number, y: number): FcItemInfo {\n return {\n node: this.getNodeAtPoint(x, y),\n edge: this.getEdgeAtPoint(x, y)\n };\n }\n\n public getNodeAtPoint(x: number, y: number): FcNode {\n for (const node of this.model.nodes) {\n const element = this.nodes.getHtmlElement(node.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (x >= nodeElementBox.left && x <= nodeElementBox.right\n && y >= nodeElementBox.top && y <= nodeElementBox.bottom) {\n return node;\n }\n }\n return null;\n }\n\n public getEdgeAtPoint(x: number, y: number): FcEdge {\n const element = document.elementFromPoint(x, y);\n const id = element.id;\n let edgeIndex = -1;\n if (id) {\n if (id.startsWith('fc-edge-path-')) {\n edgeIndex = Number(id.substring('fc-edge-path-'.length));\n } else if (id.startsWith('fc-edge-label-')) {\n edgeIndex = Number(id.substring('fc-edge-label-'.length));\n }\n }\n if (edgeIndex > -1) {\n return this.model.edges[edgeIndex];\n }\n return null;\n }\n\n public selectAllInRect(rectBox: FcRectBox) {\n this.model.nodes.forEach((value) => {\n const element = this.nodes.getHtmlElement(value.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (!value.readonly) {\n const x = nodeElementBox.left + nodeElementBox.width / 2;\n const y = nodeElementBox.top + nodeElementBox.height / 2;\n if (this.inRectBox(x, y, rectBox)) {\n this.nodes.select(value);\n } else {\n if (this.nodes.isSelected(value)) {\n this.nodes.deselect(value);\n }\n }\n }\n });\n const canvasElementBox = this.canvasHtmlElement.getBoundingClientRect();\n this.model.edges.forEach((value) => {\n const start = this.edges.sourceCoord(value);\n const end = this.edges.destCoord(value);\n const x = (start.x + end.x) / 2 + canvasElementBox.left;\n const y = (start.y + end.y) / 2 + canvasElementBox.top;\n if (this.inRectBox(x, y, rectBox)) {\n this.edges.select(value);\n } else {\n if (this.edges.isSelected(value)) {\n this.edges.deselect(value);\n }\n }\n });\n }\n\n public deleteSelected() {\n const edgesToDelete = this.edges.getSelectedEdges();\n edgesToDelete.forEach((edge) => {\n this.edges.delete(edge);\n });\n const nodesToDelete = this.nodes.getSelectedNodes();\n nodesToDelete.forEach((node) => {\n this.nodes.delete(node);\n });\n }\n\n public isEditable(): boolean {\n return this.dropTargetId === undefined;\n }\n\n public isDropSource(): boolean {\n return this.dropTargetId !== undefined;\n }\n\n public getDragImage(): HTMLImageElement {\n if (!this.dragImage) {\n this.dragImage = new Image();\n this.dragImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n this.dragImage.style.visibility = 'hidden';\n }\n return this.dragImage;\n }\n}\n\ninterface HtmlElementMap { [id: string]: HTMLElement; }\n\nabstract class AbstractFcModel {\n\n modelService: FcModelService;\n\n protected constructor(modelService: FcModelService) {\n this.modelService = modelService;\n }\n\n public select(object: T) {\n this.modelService.selectObject(object);\n }\n\n public deselect(object: T) {\n this.modelService.deselectObject(object);\n }\n\n public toggleSelected(object: T) {\n this.modelService.toggleSelectedObject(object);\n }\n\n public isSelected(object: T): boolean {\n return this.modelService.isSelectedObject(object);\n }\n\n public isEdit(object: T): boolean {\n return this.modelService.isEditObject(object);\n }\n}\n\nclass ConnectorsModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnector(connectorId: string): FcConnector {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n for (const connector of node.connectors) {\n if (connector.id === connectorId) {\n return connector;\n }\n }\n }\n }\n\n public getHtmlElement(connectorId: string): HTMLElement {\n return this.modelService.connectorsHtmlElements[connectorId];\n }\n\n public setHtmlElement(connectorId: string, element: HTMLElement) {\n this.modelService.connectorsHtmlElements[connectorId] = element;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const element = this.getHtmlElement(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (element === null || element === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n const connectorElementBox = element.getBoundingClientRect();\n const canvasElementBox = canvas.getBoundingClientRect();\n let coords: FcCoords = {\n x: connectorElementBox.left - canvasElementBox.left,\n y: connectorElementBox.top - canvasElementBox.top\n };\n if (centered) {\n coords = {\n x: Math.round(coords.x + element.offsetWidth / 2),\n y: Math.round(coords.y + element.offsetHeight / 2)\n };\n }\n return coords;\n }\n\n public getCoords(connectorId: string): FcCoords {\n return this._getCoords(connectorId, false);\n }\n\n public getCenteredCoord(connectorId: string): FcCoords {\n return this._getCoords(connectorId, true);\n }\n}\n\nclass NodesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnectorsByType(node: FcNode, type: string): Array {\n return node.connectors.filter((connector) => {\n return connector.type === type;\n });\n }\n\n private _addConnector(node: FcNode, connector: FcConnector) {\n node.connectors.push(connector);\n try {\n this.modelService.modelValidation.validateNode(node);\n } catch (error) {\n node.connectors.splice(node.connectors.indexOf(connector), 1);\n throw error;\n }\n }\n\n public delete(node: FcNode) {\n if (this.isSelected(node)) {\n this.deselect(node);\n }\n const model = this.modelService.model;\n const index = model.nodes.indexOf(node);\n if (index === -1) {\n if (node === undefined) {\n throw new Error('Passed undefined');\n }\n throw new Error('Tried to delete not existing node');\n }\n const connectorIds = this.getConnectorIds(node);\n for (let i = 0; i < model.edges.length; i++) {\n const edge = model.edges[i];\n if (connectorIds.indexOf(edge.source) !== -1 || connectorIds.indexOf(edge.destination) !== -1) {\n this.modelService.edges.delete(edge);\n i--;\n }\n }\n model.nodes.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.nodeRemovedCallback(node);\n }\n\n public getSelectedNodes(): Array {\n const model = this.modelService.model;\n return model.nodes.filter((node) => {\n return this.modelService.nodes.isSelected(node);\n });\n }\n\n public handleClicked(node: FcNode, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.nodes.toggleSelected(node);\n } else {\n this.modelService.deselectAll();\n this.modelService.nodes.select(node);\n }\n }\n\n private _addNode(node: FcNode) {\n const model = this.modelService.model;\n try {\n model.nodes.push(node);\n this.modelService.modelValidation.validateNodes(model.nodes);\n } catch (error) {\n model.nodes.splice(model.nodes.indexOf(node), 1);\n throw error;\n }\n }\n\n public getConnectorIds(node: FcNode): Array {\n return node.connectors.map((connector) => {\n return connector.id;\n });\n }\n\n public getNodeByConnectorId(connectorId: string): FcNode {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n const connectorIds = this.getConnectorIds(node);\n if (connectorIds.indexOf(connectorId) > -1) {\n return node;\n }\n }\n return null;\n }\n\n public getHtmlElement(nodeId: string): HTMLElement {\n return this.modelService.nodesHtmlElements[nodeId];\n }\n\n public setHtmlElement(nodeId: string, element: HTMLElement) {\n this.modelService.nodesHtmlElements[nodeId] = element;\n this.modelService.detectChanges();\n }\n\n}\n\nclass EdgesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public ready(edge: FcEdge): boolean {\n const source = this.modelService.connectors.getHtmlElement(edge.source);\n const destination = this.modelService.connectors.getHtmlElement(edge.destination);\n return source !== undefined && destination !== undefined;\n }\n\n public sourceCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.source);\n }\n\n public destCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.destination);\n }\n\n public delete(edge: FcEdge) {\n const model = this.modelService.model;\n const index = model.edges.indexOf(edge);\n if (index === -1) {\n throw new Error('Tried to delete not existing edge');\n }\n if (this.isSelected(edge)) {\n this.deselect(edge);\n }\n model.edges.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.edgeRemovedCallback(edge);\n }\n\n public getSelectedEdges(): Array {\n const model = this.modelService.model;\n return model.edges.filter((edge) => {\n return this.modelService.edges.isSelected(edge);\n });\n }\n\n public handleEdgeMouseClick(edge: FcEdge, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.edges.toggleSelected(edge);\n } else {\n this.modelService.deselectAll();\n this.modelService.edges.select(edge);\n }\n }\n\n public putEdge(edge: FcEdge) {\n const model = this.modelService.model;\n model.edges.push(edge);\n this.modelService.notifyModelChanged();\n }\n\n public _addEdge(event: Event, sourceConnector: FcConnector, destConnector: FcConnector, label: string) {\n this.modelService.modelValidation.validateConnector(sourceConnector);\n this.modelService.modelValidation.validateConnector(destConnector);\n const edge: FcEdge = {};\n edge.source = sourceConnector.id;\n edge.destination = destConnector.id;\n edge.label = label;\n const model = this.modelService.model;\n this.modelService.modelValidation.validateEdges(model.edges.concat([edge]), model.nodes);\n this.modelService.createEdge(event, edge).subscribe(\n (created) => {\n model.edges.push(created);\n this.modelService.notifyModelChanged();\n this.modelService.edgeAddedCallback(created);\n }\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FcConnector, FcEdge, FcModel, FcNode, fcTopSort, ModelvalidationError } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcModelValidationService {\n\n constructor() { }\n\n public validateModel(model: FcModel): FcModel {\n this.validateNodes(model.nodes);\n this._validateEdges(model.edges, model.nodes);\n return model;\n }\n\n public validateNodes(nodes: Array): Array {\n const ids: string[] = [];\n nodes.forEach((node) => {\n this.validateNode(node);\n if (ids.indexOf(node.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n ids.push(node.id);\n });\n const connectorIds: string[] = [];\n nodes.forEach((node) => {\n node.connectors.forEach((connector) => {\n if (connectorIds.indexOf(connector.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n connectorIds.push(connector.id);\n });\n });\n return nodes;\n }\n\n public validateNode(node: FcNode): FcNode {\n if (node.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (typeof node.name !== 'string') {\n throw new ModelvalidationError('Name not valid.');\n }\n if (typeof node.x !== 'number' || node.x < 0 || Math.round(node.x) !== node.x) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (typeof node.y !== 'number' || node.y < 0 || Math.round(node.y) !== node.y) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (!Array.isArray(node.connectors)) {\n throw new ModelvalidationError('Connectors not valid.');\n }\n node.connectors.forEach((connector) => {\n this.validateConnector(connector);\n });\n return node;\n }\n\n private _validateEdges(edges: Array, nodes: Array): Array {\n edges.forEach((edge) => {\n this._validateEdge(edge, nodes);\n });\n edges.forEach((edge1, index1) => {\n edges.forEach((edge2, index2) => {\n if (index1 !== index2) {\n if ((edge1.source === edge2.source && edge1.destination === edge2.destination) ||\n (edge1.source === edge2.destination && edge1.destination === edge2.source)) {\n throw new ModelvalidationError('Duplicated edge.');\n }\n }\n });\n });\n if (fcTopSort({nodes, edges}) === null) {\n throw new ModelvalidationError('Graph has a circle.');\n }\n return edges;\n }\n\n public validateEdges(edges: Array, nodes: Array): Array {\n this.validateNodes(nodes);\n return this._validateEdges(edges, nodes);\n }\n\n private _validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n if (edge.source === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n if (edge.destination === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (edge.source === edge.destination) {\n throw new ModelvalidationError('Edge with same source and destination connectors.');\n }\n const sourceNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.source))[0];\n if (sourceNode === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n const destinationNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.destination))[0];\n if (destinationNode === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (sourceNode === destinationNode) {\n throw new ModelvalidationError('Edge with same source and destination nodes.');\n }\n return edge;\n }\n\n public validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n this.validateNodes(nodes);\n return this._validateEdge(edge, nodes);\n }\n\n public validateConnector(connector: FcConnector): FcConnector {\n if (connector.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (connector.type === undefined || connector.type === null || typeof connector.type !== 'string') {\n throw new ModelvalidationError('Type not valid.');\n }\n return connector;\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcCoords, FcNode, FlowchartConstants } from './ngx-flowchart.models';\n\nconst nodeDropScope: NodeDropScope = {\n dropElement: null\n};\n\nexport class FcNodeDraggingService {\n\n nodeDraggingScope: NodeDraggingScope = {\n shadowDragStarted: false,\n dropElement: null,\n draggedNodes: [],\n shadowElements: []\n };\n\n private dragOffsets: FcCoords[] = [];\n private draggedElements: HTMLElement[] = [];\n\n private destinationHtmlElements: HTMLElement[] = [];\n private oldDisplayStyles: string[] = [];\n\n private readonly modelService: FcModelService;\n private readonly automaticResize: boolean;\n private readonly dragAnimation: string;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n applyFunction: (fn: (...args: any[]) => T) => T,\n automaticResize: boolean, dragAnimation: string) {\n this.modelService = modelService;\n this.automaticResize = automaticResize;\n this.dragAnimation = dragAnimation;\n this.applyFunction = applyFunction;\n }\n\n private getCoordinate(coordinate: number, max: number): number {\n coordinate = Math.max(coordinate, 0);\n coordinate = Math.min(coordinate, max);\n return coordinate;\n }\n\n private getXCoordinate(x: number): number {\n return this.getCoordinate(x, this.modelService.canvasHtmlElement.offsetWidth);\n }\n\n private getYCoordinate(y: number): number {\n return this.getCoordinate(y, this.modelService.canvasHtmlElement.offsetHeight);\n }\n\n private resizeCanvas(draggedNode: FcNode, nodeElement: HTMLElement) {\n if (this.automaticResize && !this.modelService.isDropSource()) {\n const canvasElement = this.modelService.canvasHtmlElement;\n if (canvasElement.offsetWidth < draggedNode.x + nodeElement.offsetWidth + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.width = canvasElement.offsetWidth + FlowchartConstants.canvasResizeStep + 'px';\n }\n if (canvasElement.offsetHeight < draggedNode.y + nodeElement.offsetHeight + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.height = canvasElement.offsetHeight + FlowchartConstants.canvasResizeStep + 'px';\n }\n }\n }\n\n public isDraggingNode(node: FcNode): boolean {\n return this.nodeDraggingScope.draggedNodes.includes(node);\n }\n\n public dragstart(event: DragEvent, node: FcNode) {\n if (node.readonly) {\n return;\n }\n this.dragOffsets.length = 0;\n this.draggedElements.length = 0;\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.nodeDraggingScope.shadowElements.length = 0;\n this.destinationHtmlElements.length = 0;\n this.oldDisplayStyles.length = 0;\n const elements: Array> = [];\n const nodes: Array = [];\n if (this.modelService.nodes.isSelected(node)) {\n const selectedNodes = this.modelService.nodes.getSelectedNodes();\n for (const selectedNode of selectedNodes) {\n const element = $(this.modelService.nodes.getHtmlElement(selectedNode.id));\n elements.push(element);\n nodes.push(selectedNode);\n }\n } else {\n elements.push($(event.target as HTMLElement));\n nodes.push(node);\n }\n const offsetsX: number[] = [];\n const offsetsY: number[] = [];\n for (const element of elements) {\n offsetsX.push(parseInt(element.css('left'), 10) - event.clientX);\n offsetsY.push(parseInt(element.css('top'), 10) - event.clientY);\n }\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n if (this.modelService.isDropSource()) {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n nodeDropScope.dropElement = elements[0][0].cloneNode(true) as NodeDropElement;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n nodeDropScope.dropElement.offsetInfo = {\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n nodeDropScope.dropElement.style.position = 'absolute';\n nodeDropScope.dropElement.style.pointerEvents = 'none';\n nodeDropScope.dropElement.style.zIndex = '9999';\n\n document.body.appendChild(nodeDropScope.dropElement);\n const dropNodeInfo: DropNodeInfo = {\n node,\n dropTargetId: this.modelService.dropTargetId,\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n originalEvent.dataTransfer.setData('text', JSON.stringify(dropNodeInfo));\n\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n const target: HTMLElement = event.target as HTMLElement;\n this.destinationHtmlElements.push(target);\n this.oldDisplayStyles.push(target.style.display);\n target.style.display = 'none';\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n return;\n }\n this.nodeDraggingScope.draggedNodes = nodes;\n for (let i = 0; i < elements.length; i++) {\n this.draggedElements.push(elements[i][0]);\n this.dragOffsets.push(\n {\n x: offsetsX[i],\n y: offsetsY[i]\n }\n );\n }\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n for (let i = 0; i < this.draggedElements.length; i++) {\n const dragOffset = this.dragOffsets[i];\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = $(`
` +\n `

${draggedNode.name}

`);\n const targetInnerNode = $(this.draggedElements[i]).children()[0];\n shadowElement.children()[0].style.backgroundColor = targetInnerNode.style.backgroundColor;\n this.nodeDraggingScope.shadowElements.push(shadowElement);\n this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[i][0]);\n }\n }\n originalEvent.dataTransfer.setData('text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n for (let i = 0; i < this.draggedElements.length; i++) {\n this.destinationHtmlElements.push(this.draggedElements[i]);\n this.oldDisplayStyles.push(this.destinationHtmlElements[i].style.display);\n this.destinationHtmlElements[i].style.display = 'none';\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: DragEvent): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n const infoText = originalEvent.dataTransfer.getData('text');\n if (infoText) {\n let dropNodeInfo: DropNodeInfo = null;\n try {\n dropNodeInfo = JSON.parse(infoText);\n } catch (e) {}\n if (dropNodeInfo && dropNodeInfo.dropTargetId) {\n if (this.modelService.canvasHtmlElement.id &&\n this.modelService.canvasHtmlElement.id === dropNodeInfo.dropTargetId) {\n dropNode = dropNodeInfo.node;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n const x = event.clientX - offset.left;\n const y = event.clientY - offset.top;\n dropNode.x = Math.round(this.getXCoordinate(dropNodeInfo.offsetX + x));\n dropNode.y = Math.round(this.getYCoordinate(dropNodeInfo.offsetY + y));\n }\n }\n }\n if (dropNode) {\n this.modelService.dropNode(event, dropNode);\n event.preventDefault();\n return false;\n } else if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = Math.round(this.getXCoordinate(dragOffset.x + event.clientX));\n draggedNode.y = Math.round(this.getYCoordinate(dragOffset.y + event.clientY));\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n }\n\n public dragover(event: DragEvent) {\n if (nodeDropScope.dropElement) {\n const offsetInfo = nodeDropScope.dropElement.offsetInfo;\n nodeDropScope.dropElement.style.left = (offsetInfo.offsetX + event.clientX) + 'px';\n nodeDropScope.dropElement.style.top = (offsetInfo.offsetY + event.clientY) + 'px';\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n this.destinationHtmlElements[0].style.display = this.oldDisplayStyles[0];\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n event.preventDefault();\n return;\n }\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return;\n }\n if (!this.nodeDraggingScope.draggedNodes.length) {\n event.preventDefault();\n return;\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = this.getXCoordinate(dragOffset.x + event.clientX);\n draggedNode.y = this.getYCoordinate(dragOffset.y + event.clientY);\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n this.destinationHtmlElements[i].style.display = this.oldDisplayStyles[i];\n }\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n this.nodeDraggingScope.shadowElements[i].css('left', this.getXCoordinate(dragOffset.x + event.clientX) + 'px');\n this.nodeDraggingScope.shadowElements[i].css('top', this.getYCoordinate(dragOffset.y + event.clientY) + 'px');\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n }\n }\n }\n\n public dragend(event: DragEvent) {\n this.applyFunction(() => {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n if (this.modelService.isDropSource()) {\n return;\n }\n if (this.nodeDraggingScope.shadowElements.length) {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = this.nodeDraggingScope.shadowElements[i];\n draggedNode.x = parseInt(shadowElement.css('left').replace('px', ''), 10);\n draggedNode.y = parseInt(shadowElement.css('top').replace('px', ''), 10);\n this.modelService.canvasHtmlElement.removeChild(shadowElement[0]);\n }\n this.nodeDraggingScope.shadowElements.length = 0;\n this.modelService.notifyModelChanged();\n }\n\n if (this.nodeDraggingScope.draggedNodes.length) {\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.draggedElements.length = 0;\n this.dragOffsets.length = 0;\n }\n });\n }\n\n}\n\nexport interface NodeDraggingScope {\n draggedNodes: Array;\n shadowElements: Array>;\n shadowDragStarted: boolean;\n dropElement: HTMLElement;\n}\n\nexport interface NodeDropElement extends HTMLElement {\n offsetInfo?: {\n offsetX: number;\n offsetY: number;\n };\n}\n\nexport interface NodeDropScope {\n dropElement: NodeDropElement;\n}\n\nexport interface DropNodeInfo {\n node: FcNode;\n dropTargetId: string;\n offsetX: number;\n offsetY: number;\n}\n","import { Injectable } from '@angular/core';\nimport { FcCoords, FlowchartConstants } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcEdgeDrawingService {\n\n constructor() {\n }\n\n public getEdgeDAttribute(pt1: FcCoords, pt2: FcCoords, style: string): string {\n let dAddribute = `M ${pt1.x}, ${pt1.y} `;\n if (style === FlowchartConstants.curvedStyle) {\n const sourceTangent = this.computeEdgeSourceTangent(pt1, pt2);\n const destinationTangent = this.computeEdgeDestinationTangent(pt1, pt2);\n dAddribute += `C ${sourceTangent.x}, ${sourceTangent.y} ${(destinationTangent.x - 50)}, ${destinationTangent.y} ${pt2.x}, ${pt2.y}`;\n } else {\n dAddribute += `L ${pt2.x}, ${pt2.y}`;\n }\n return dAddribute;\n }\n\n public getEdgeCenter(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: (pt1.x + pt2.x) / 2,\n y: (pt1.y + pt2.y) / 2\n };\n }\n\n private computeEdgeTangentOffset(pt1: FcCoords, pt2: FcCoords): number {\n return (pt2.y - pt1.y) / 2;\n }\n\n private computeEdgeSourceTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt1.x,\n y: pt1.y + this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n private computeEdgeDestinationTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt2.x,\n y: pt2.y - this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcConnector, FcCoords, FcEdge, FcModel, FlowchartConstants, ModelvalidationError } from './ngx-flowchart.models';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcModelValidationService } from './modelvalidation.service';\n\nexport class FcEdgeDraggingService {\n\n edgeDragging: EdgeDragging = {\n isDragging: false,\n dragPoint1: null,\n dragPoint2: null,\n shadowDragStarted: false\n };\n\n private draggedEdgeSource: FcConnector = null;\n private dragOffset: FcCoords = {};\n private destinationHtmlElement: HTMLElement = null;\n private oldDisplayStyle = '';\n\n private readonly modelValidation: FcModelValidationService;\n private readonly edgeDrawingService: FcEdgeDrawingService;\n private readonly modelService: FcModelService;\n private readonly model: FcModel;\n private readonly isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n private readonly dragAnimation: string;\n private readonly edgeStyle: string;\n\n constructor(modelValidation: FcModelValidationService,\n edgeDrawingService: FcEdgeDrawingService,\n modelService: FcModelService,\n model: FcModel,\n isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean,\n applyFunction: (fn: (...args: any[]) => T) => T,\n dragAnimation: string,\n edgeStyle: string) {\n this.modelValidation = modelValidation;\n this.edgeDrawingService = edgeDrawingService;\n this.modelService = modelService;\n this.model = model;\n this.isValidEdgeCallback = isValidEdgeCallback || (() => true);\n this.applyFunction = applyFunction;\n this.dragAnimation = dragAnimation;\n this.edgeStyle = edgeStyle;\n }\n\n public dragstart(event: DragEvent, connector: FcConnector) {\n let swapConnector: FcConnector;\n let dragLabel: string;\n let prevEdge: FcEdge;\n if (connector.type === FlowchartConstants.leftConnectorType) {\n for (const edge of this.model.edges) {\n if (edge.destination === connector.id) {\n swapConnector = this.modelService.connectors.getConnector(edge.source);\n dragLabel = edge.label;\n prevEdge = edge;\n this.applyFunction(() => {\n this.modelService.edges.delete(edge);\n });\n break;\n }\n }\n }\n this.edgeDragging.isDragging = true;\n if (swapConnector !== undefined) {\n this.draggedEdgeSource = swapConnector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(swapConnector.id);\n this.edgeDragging.dragLabel = dragLabel;\n this.edgeDragging.prevEdge = prevEdge;\n } else {\n this.draggedEdgeSource = connector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(connector.id);\n }\n const canvas = this.modelService.canvasHtmlElement;\n if (!canvas) {\n throw new Error('No canvas while edgedraggingService found.');\n }\n this.dragOffset.x = -canvas.getBoundingClientRect().left;\n this.dragOffset.y = -canvas.getBoundingClientRect().top;\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n\n originalEvent.dataTransfer.setData('Text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n this.destinationHtmlElement = event.target as HTMLElement;\n this.oldDisplayStyle = this.destinationHtmlElement.style.display;\n this.destinationHtmlElement.style.display = 'none';\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.shadowDragStarted = true;\n }\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.edgeDragging.gElement === undefined) {\n this.edgeDragging.gElement = $(document.querySelectorAll('.shadow-svg-class'));\n this.edgeDragging.pathElement = $(document.querySelectorAll('.shadow-svg-class')).find('path');\n this.edgeDragging.circleElement = $(document.querySelectorAll('.shadow-svg-class')).find('circle');\n }\n\n this.edgeDragging.gElement.css('display', 'block');\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n }\n event.stopPropagation();\n }\n\n public dragover(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n if (!this.edgeDragging.magnetActive && this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n if (this.edgeDragging.shadowDragStarted) {\n this.applyFunction(() => {\n this.edgeDragging.shadowDragStarted = false;\n });\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n });\n }\n }\n }\n\n public dragoverConnector(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n }\n }\n\n public dragleaveMagnet(event: DragEvent) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n\n this.edgeDragging.magnetActive = true;\n\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n event.preventDefault();\n event.stopPropagation();\n return false;\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n event.preventDefault();\n event.stopPropagation();\n return false;\n });\n }\n }\n }\n }\n\n public dragend(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n this.edgeDragging.isDragging = false;\n this.edgeDragging.dragPoint1 = null;\n this.edgeDragging.dragPoint2 = null;\n this.edgeDragging.dragLabel = null;\n event.stopPropagation();\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.gElement.css('display', 'none');\n }\n if (this.edgeDragging.prevEdge) {\n const edge = this.edgeDragging.prevEdge;\n this.edgeDragging.prevEdge = null;\n this.applyFunction(() => {\n this.modelService.edges.putEdge(edge);\n });\n }\n }\n }\n\n public drop(event: DragEvent, targetConnector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: targetConnector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n\n if (this.isValidEdgeCallback(this.draggedEdgeSource, targetConnector)) {\n this.edgeDragging.prevEdge = null;\n this.modelService.edges._addEdge(event, this.draggedEdgeSource, targetConnector, this.edgeDragging.dragLabel);\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n }\n }\n}\n\nexport interface EdgeDragging {\n isDragging: boolean;\n shadowDragStarted: boolean;\n dragPoint1: FcCoords;\n dragPoint2: FcCoords;\n dragLabel?: string;\n prevEdge?: FcEdge;\n magnetActive?: boolean;\n gElement?: JQuery;\n pathElement?: JQuery;\n circleElement?: JQuery;\n}\n","import { FcConnector, FcEdge, FcNode } from './ngx-flowchart.models';\n\nexport class FcMouseOverService {\n\n mouseoverscope: MouseOverScope = {\n connector: null,\n edge: null,\n node: null\n };\n\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(applyFunction: (fn: (...args: any[]) => T) => T) {\n this.applyFunction = applyFunction;\n }\n\n public nodeMouseOver(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = node;\n });\n }\n\n public nodeMouseOut(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = null;\n });\n }\n\n public connectorMouseEnter(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = connector;\n });\n }\n\n public connectorMouseLeave(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = null;\n });\n }\n\n public edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = edge;\n }\n\n public edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = null;\n }\n}\n\nexport interface MouseOverScope {\n connector: FcConnector;\n edge: FcEdge;\n node: FcNode;\n}\n","const regex = /(auto|scroll)/;\n\nconst style = (node: Element, prop: string): string =>\n getComputedStyle(node, null).getPropertyValue(prop);\n\nconst scroll = (node: Element) =>\n regex.test(\n style(node, 'overflow') +\n style(node, 'overflow-y') +\n style(node, 'overflow-x'));\n\nconst scrollparent = (node: HTMLElement): HTMLElement =>\n !node || node === document.body\n ? document.body\n : scroll(node)\n ? node\n : scrollparent(node.parentNode as HTMLElement);\n\nexport default scrollparent;\n","import { FcModelService } from './model.service';\nimport { FcRectBox } from './ngx-flowchart.models';\nimport scrollparent from './scrollparent';\n\ninterface Rectangle {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport class FcRectangleSelectService {\n\n private readonly selectRect: Rectangle = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n\n private readonly modelService: FcModelService;\n private readonly selectElement: HTMLElement;\n private readonly $canvasElement: JQuery;\n private readonly $scrollParent: JQuery;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n selectElement: HTMLElement,\n applyFunction: (fn: (...args: any[]) => T) => T) {\n this.modelService = modelService;\n this.selectElement = selectElement;\n this.$canvasElement = $(this.modelService.canvasHtmlElement);\n this.$scrollParent = $(scrollparent(this.modelService.canvasHtmlElement));\n this.applyFunction = applyFunction;\n }\n\n public mousedown(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && this.selectElement.hidden) {\n this.selectElement.hidden = false;\n const offset = this.$canvasElement.offset();\n this.selectRect.x1 = Math.round(e.pageX - offset.left);\n this.selectRect.y1 = Math.round(e.pageY - offset.top);\n this.selectRect.x2 = this.selectRect.x1;\n this.selectRect.y2 = this.selectRect.y1;\n this.updateSelectRect();\n }\n }\n\n public mousemove(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const offset = this.$canvasElement.offset();\n this.selectRect.x2 = Math.round(e.pageX - offset.left);\n this.selectRect.y2 = Math.round(e.pageY - offset.top);\n this.updateScroll(offset);\n this.updateSelectRect();\n }\n }\n\n private updateScroll(offset: JQuery.Coordinates) {\n const rect = this.$scrollParent[0].getBoundingClientRect();\n const bottom = rect.bottom - offset.top;\n const right = rect.right - offset.left;\n const top = rect.top - offset.top;\n const left = rect.left - offset.left;\n if (this.selectRect.y2 - top < 25) {\n const topScroll = 25 - (this.selectRect.y2 - top);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll - topScroll);\n } else if (bottom - this.selectRect.y2 < 40) {\n const bottomScroll = 40 - (bottom - this.selectRect.y2);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll + bottomScroll);\n }\n if (this.selectRect.x2 - left < 25) {\n const leftScroll = 25 - (this.selectRect.x2 - left);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll - leftScroll);\n } else if (right - this.selectRect.x2 < 40) {\n const rightScroll = 40 - (right - this.selectRect.x2);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll + rightScroll);\n }\n }\n\n public mouseup(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const rectBox = this.selectElement.getBoundingClientRect() as FcRectBox;\n this.selectElement.hidden = true;\n this.selectObjects(rectBox);\n }\n }\n\n private updateSelectRect() {\n const x3 = Math.min(this.selectRect.x1, this.selectRect.x2);\n const x4 = Math.max(this.selectRect.x1, this.selectRect.x2);\n const y3 = Math.min(this.selectRect.y1, this.selectRect.y2);\n const y4 = Math.max(this.selectRect.y1, this.selectRect.y2);\n this.selectElement.style.left = x3 + 'px';\n this.selectElement.style.top = y3 + 'px';\n this.selectElement.style.width = x4 - x3 + 'px';\n this.selectElement.style.height = y4 - y3 + 'px';\n }\n\n private selectObjects(rectBox: FcRectBox) {\n this.applyFunction(() => {\n this.modelService.selectAllInRect(rectBox);\n });\n }\n\n}\n\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef, EventEmitter,\n HostBinding,\n HostListener,\n Input,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnInit, Output\n} from '@angular/core';\nimport { FcCallbacks, FcEdge, FcModel, FcNode, FlowchartConstants, UserCallbacks, UserNodeCallbacks } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcNodeDraggingService } from './node-dragging.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcEdgeDraggingService } from './edge-dragging.service';\nimport { FcMouseOverService } from './mouseover.service';\nimport { FcRectangleSelectService } from './rectangleselect.service';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Component({\n selector: 'fc-canvas',\n templateUrl: './ngx-flowchart.component.html',\n styleUrls: ['./ngx-flowchart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxFlowchartComponent implements OnInit, DoCheck {\n\n @HostBinding('attr.class')\n get canvasClass(): string {\n return FlowchartConstants.canvasClass;\n }\n\n @Input()\n model: FcModel;\n\n @Input()\n selectedObjects: any[];\n\n @Input()\n edgeStyle: string;\n\n @Input()\n userCallbacks: UserCallbacks;\n\n @Input()\n automaticResize: boolean;\n\n @Input()\n dragAnimation: string;\n\n @Input()\n nodeWidth: number;\n\n @Input()\n nodeHeight: number;\n\n @Input()\n dropTargetId: string;\n\n @Output()\n modelChanged = new EventEmitter();\n\n private fitModelSizeByDefaultValue = true;\n get fitModelSizeByDefault(): boolean {\n return this.fitModelSizeByDefaultValue;\n }\n @Input()\n set fitModelSizeByDefault(value: boolean) {\n this.fitModelSizeByDefaultValue = coerceBooleanProperty(value);\n }\n\n callbacks: FcCallbacks;\n\n userNodeCallbacks: UserNodeCallbacks;\n\n modelService: FcModelService;\n nodeDraggingService: FcNodeDraggingService;\n edgeDraggingService: FcEdgeDraggingService;\n mouseoverService: FcMouseOverService;\n rectangleSelectService: FcRectangleSelectService;\n\n arrowDefId: string;\n arrowDefIdSelected: string;\n\n flowchartConstants = FlowchartConstants;\n\n private nodesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private edgesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private readonly detectChangesSubject = new Subject();\n\n constructor(private elementRef: ElementRef,\n private differs: IterableDiffers,\n private modelValidation: FcModelValidationService,\n public edgeDrawingService: FcEdgeDrawingService,\n private cd: ChangeDetectorRef,\n private zone: NgZone) {\n this.arrowDefId = 'arrow-' + Math.random();\n this.arrowDefIdSelected = this.arrowDefId + '-selected';\n this.detectChangesSubject\n .pipe(debounceTime(50))\n .subscribe(() => this.cd.detectChanges());\n }\n\n ngOnInit() {\n if (!this.dropTargetId && this.edgeStyle !== FlowchartConstants.curvedStyle && this.edgeStyle !== FlowchartConstants.lineStyle) {\n throw new Error('edgeStyle not supported.');\n }\n this.nodeHeight = this.nodeHeight || 200;\n this.nodeWidth = this.nodeWidth || 200;\n this.dragAnimation = this.dragAnimation || FlowchartConstants.dragAnimationRepaint;\n this.userCallbacks = this.userCallbacks || {};\n this.automaticResize = this.automaticResize || false;\n\n for (const key of Object.keys(this.userCallbacks)) {\n const callback = this.userCallbacks[key];\n if (typeof callback !== 'function' && key !== 'nodeCallbacks') {\n throw new Error('All callbacks should be functions.');\n }\n }\n\n this.userNodeCallbacks = this.userCallbacks.nodeCallbacks;\n\n const element = $(this.elementRef.nativeElement);\n\n this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged,\n this.detectChangesSubject, this.selectedObjects,\n this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved,\n this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg'));\n\n if (this.dropTargetId) {\n this.modelService.dropTargetId = this.dropTargetId;\n }\n\n const applyFunction = this.zone.run.bind(this.zone);\n\n this.nodeDraggingService = new FcNodeDraggingService(this.modelService, applyFunction,\n this.automaticResize, this.dragAnimation);\n\n this.edgeDraggingService = new FcEdgeDraggingService(this.modelValidation, this.edgeDrawingService, this.modelService,\n this.model, this.userCallbacks.isValidEdge || null, applyFunction,\n this.dragAnimation, this.edgeStyle);\n\n this.mouseoverService = new FcMouseOverService(applyFunction);\n\n this.rectangleSelectService = new FcRectangleSelectService(this.modelService,\n element[0].querySelector('#select-rectangle'), applyFunction);\n\n this.callbacks = {\n nodeDragstart: this.nodeDraggingService.dragstart.bind(this.nodeDraggingService),\n nodeDragend: this.nodeDraggingService.dragend.bind(this.nodeDraggingService),\n edgeDragstart: this.edgeDraggingService.dragstart.bind(this.edgeDraggingService),\n edgeDragend: this.edgeDraggingService.dragend.bind(this.edgeDraggingService),\n edgeDrop: this.edgeDraggingService.drop.bind(this.edgeDraggingService),\n edgeDragoverConnector: this.edgeDraggingService.dragoverConnector.bind(this.edgeDraggingService),\n edgeDragoverMagnet: this.edgeDraggingService.dragoverMagnet.bind(this.edgeDraggingService),\n edgeDragleaveMagnet: this.edgeDraggingService.dragleaveMagnet.bind(this.edgeDraggingService),\n nodeMouseOver: this.mouseoverService.nodeMouseOver.bind(this.mouseoverService),\n nodeMouseOut: this.mouseoverService.nodeMouseOut.bind(this.mouseoverService),\n connectorMouseEnter: this.mouseoverService.connectorMouseEnter.bind(this.mouseoverService),\n connectorMouseLeave: this.mouseoverService.connectorMouseLeave.bind(this.mouseoverService),\n nodeClicked: (event, node) => {\n this.modelService.nodes.handleClicked(node, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n };\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n\n ngDoCheck(): void {\n if (this.model) {\n const nodesChange = this.nodesDiffer.diff(this.model.nodes);\n const edgesChange = this.edgesDiffer.diff(this.model.edges);\n let nodesChanged = false;\n let edgesChanged = false;\n if (nodesChange !== null) {\n nodesChange.forEachAddedItem(() => {\n nodesChanged = true;\n });\n nodesChange.forEachRemovedItem(() => {\n nodesChanged = true;\n });\n }\n if (edgesChange !== null) {\n edgesChange.forEachAddedItem(() => {\n edgesChanged = true;\n });\n edgesChange.forEachRemovedItem(() => {\n edgesChanged = true;\n });\n }\n if (nodesChanged) {\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n if (nodesChanged || edgesChanged) {\n this.detectChangesSubject.next();\n }\n }\n }\n\n getEdgeDAttribute(edge: FcEdge): string {\n return this.edgeDrawingService.getEdgeDAttribute(this.modelService.edges.sourceCoord(edge),\n this.modelService.edges.destCoord(edge), this.edgeStyle);\n }\n\n public adjustCanvasSize(fit?: boolean) {\n let maxX = 0;\n let maxY = 0;\n const element = $(this.elementRef.nativeElement);\n this.model.nodes.forEach((node) => {\n maxX = Math.max(node.x + this.nodeWidth, maxX);\n maxY = Math.max(node.y + this.nodeHeight, maxY);\n });\n let width;\n let height;\n if (fit) {\n width = maxX;\n height = maxY;\n } else {\n width = Math.max(maxX, element.prop('offsetWidth'));\n height = Math.max(maxY, element.prop('offsetHeight'));\n }\n element.css('width', width + 'px');\n element.css('height', height + 'px');\n }\n\n canvasClick(event: MouseEvent) {}\n\n edgeMouseDown(event: MouseEvent, edge: FcEdge) {\n event.stopPropagation();\n }\n\n edgeClick(event: MouseEvent, edge: FcEdge) {\n this.modelService.edges.handleEdgeMouseClick(edge, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeRemove(event: Event, edge: FcEdge) {\n this.modelService.edges.delete(edge);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeEdit(event: Event, edge: FcEdge) {\n if (this.userCallbacks.edgeEdit) {\n this.userCallbacks.edgeEdit(event, edge);\n }\n }\n\n edgeDoubleClick(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeDoubleClick) {\n this.userCallbacks.edgeDoubleClick(event, edge);\n }\n }\n\n edgeMouseOver(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeMouseOver) {\n this.userCallbacks.edgeMouseOver(event, edge);\n }\n }\n\n edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseEnter(event, edge);\n }\n\n edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseLeave(event, edge);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n this.nodeDraggingService.drop(event);\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n this.rectangleSelectService.mousedown(event);\n }\n\n @HostListener('mousemove', ['$event'])\n mousemove(event: MouseEvent) {\n this.rectangleSelectService.mousemove(event);\n }\n\n @HostListener('mouseup', ['$event'])\n mouseup(event: MouseEvent) {\n this.rectangleSelectService.mouseup(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-magnet]'\n})\nexport class FcMagnetDirective implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n connector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.magnetClass);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: DragEvent) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-connector]'\n})\nexport class FcConnectorDirective implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n connector: FcConnector;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.connectorClass);\n if (this.modelservice.isEditable()) {\n element.attr('draggable', 'true');\n this.updateConnectorClass();\n }\n this.modelservice.connectors.setHtmlElement(this.connector.id, element[0]);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateConnector = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (propName === 'mouseOverConnector') {\n updateConnector = true;\n }\n }\n }\n if (updateConnector && this.modelservice.isEditable()) {\n this.updateConnectorClass();\n }\n }\n\n private updateConnectorClass() {\n const element = $(this.elementRef.nativeElement);\n if (this.connector === this.mouseOverConnector) {\n element.addClass(FlowchartConstants.hoverClass);\n } else {\n element.removeClass(FlowchartConstants.hoverClass);\n }\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n // Skip - conflict with magnet\n /* if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDragoverConnector(event, this.connector);\n }*/\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragstart(event, this.connector);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n mouseenter(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseEnter(event, this.connector);\n }\n }\n\n @HostListener('mouseleave', ['$event'])\n mouseleave(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseLeave(event, this.connector);\n }\n }\n\n}\n","import {\n Component,\n ComponentFactoryResolver, Directive,\n ElementRef, HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {\n FC_NODE_COMPONENT_CONFIG,\n FcCallbacks,\n FcConnector,\n FcNode,\n FcNodeComponentConfig,\n FlowchartConstants,\n UserNodeCallbacks\n} from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Component({\n selector: 'fc-node',\n template: '',\n styleUrls: ['./node.component.scss']\n})\nexport class FcNodeContainerComponent implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n @HostBinding('attr.id')\n get nodeId(): string {\n return this.node.id;\n }\n\n @HostBinding('style.top')\n get top(): string {\n return this.node.y + 'px';\n }\n\n @HostBinding('style.left')\n get left(): string {\n return this.node.x + 'px';\n }\n\n nodeComponent: FcNodeComponent;\n\n @ViewChild('nodeContent', {read: ViewContainerRef, static: true}) nodeContentContainer: ViewContainerRef;\n\n constructor(@Inject(FC_NODE_COMPONENT_CONFIG) private nodeComponentConfig: FcNodeComponentConfig,\n private elementRef: ElementRef,\n private componentFactoryResolver: ComponentFactoryResolver) {\n }\n\n ngOnInit(): void {\n if (!this.userNodeCallbacks) {\n this.userNodeCallbacks = {};\n }\n this.userNodeCallbacks.nodeEdit = this.userNodeCallbacks.nodeEdit || (() => {});\n this.userNodeCallbacks.doubleClick = this.userNodeCallbacks.doubleClick || (() => {});\n this.userNodeCallbacks.mouseDown = this.userNodeCallbacks.mouseDown || (() => {});\n this.userNodeCallbacks.mouseEnter = this.userNodeCallbacks.mouseEnter || (() => {});\n this.userNodeCallbacks.mouseLeave = this.userNodeCallbacks.mouseLeave || (() => {});\n\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.nodeClass);\n if (!this.node.readonly) {\n element.attr('draggable', 'true');\n }\n this.updateNodeClass();\n this.modelservice.nodes.setHtmlElement(this.node.id, element[0]);\n this.nodeContentContainer.clear();\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.nodeComponentConfig.nodeComponentType);\n const componentRef = this.nodeContentContainer.createComponent(componentFactory);\n this.nodeComponent = componentRef.instance;\n this.nodeComponent.callbacks = this.callbacks;\n this.nodeComponent.userNodeCallbacks = this.userNodeCallbacks;\n this.nodeComponent.node = this.node;\n this.nodeComponent.modelservice = this.modelservice;\n this.updateNodeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateNode = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (['selected', 'edit', 'underMouse', 'mouseOverConnector', 'dragging'].includes(propName)) {\n updateNode = true;\n }\n }\n }\n if (updateNode) {\n this.updateNodeClass();\n this.updateNodeComponent();\n }\n }\n\n private updateNodeClass() {\n const element = $(this.elementRef.nativeElement);\n this.toggleClass(element, FlowchartConstants.selectedClass, this.selected);\n this.toggleClass(element, FlowchartConstants.editClass, this.edit);\n this.toggleClass(element, FlowchartConstants.hoverClass, this.underMouse);\n this.toggleClass(element, FlowchartConstants.draggingClass, this.dragging);\n }\n\n private updateNodeComponent() {\n this.nodeComponent.selected = this.selected;\n this.nodeComponent.edit = this.edit;\n this.nodeComponent.underMouse = this.underMouse;\n this.nodeComponent.mouseOverConnector = this.mouseOverConnector;\n this.nodeComponent.dragging = this.dragging;\n }\n\n private toggleClass(element: JQuery, clazz: string, set: boolean) {\n if (set) {\n element.addClass(clazz);\n } else {\n element.removeClass(clazz);\n }\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragend(event);\n }\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeClicked(event, this.node);\n }\n }\n\n @HostListener('mouseover', ['$event'])\n mouseover(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOver(event, this.node);\n }\n }\n\n @HostListener('mouseout', ['$event'])\n mouseout(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOut(event, this.node);\n }\n }\n\n}\n\nexport abstract class FcNodeComponent implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n flowchartConstants = FlowchartConstants;\n\n ngOnInit(): void {\n }\n\n}\n","import { Component } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\n@Component({\n selector: 'fc-default-node',\n templateUrl: './default-node.component.html',\n styleUrls: ['./default-node.component.scss']\n})\nexport class DefaultFcNodeComponent extends FcNodeComponent {\n\n constructor() {\n super();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { NgxFlowchartComponent } from './ngx-flowchart.component';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { CommonModule } from '@angular/common';\nimport { FcMagnetDirective } from './magnet.directive';\nimport { FcConnectorDirective } from './connector.directive';\nimport { FcNodeContainerComponent } from './node.component';\nimport { FC_NODE_COMPONENT_CONFIG } from './ngx-flowchart.models';\nimport { DefaultFcNodeComponent } from './default-node.component';\n\n@NgModule({\n entryComponents: [\n DefaultFcNodeComponent\n ],\n declarations: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n FcNodeContainerComponent,\n DefaultFcNodeComponent],\n providers: [\n FcModelValidationService,\n FcEdgeDrawingService,\n {\n provide: FC_NODE_COMPONENT_CONFIG,\n useValue: {\n nodeComponentType: DefaultFcNodeComponent\n }\n }\n ],\n imports: [\n CommonModule\n ],\n exports: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n DefaultFcNodeComponent]\n})\nexport class NgxFlowchartModule { }\n"],"names":["InjectionToken","tslib_1.__extends","tslib_1.__values","Subject","of","debounceTime","Injectable","EventEmitter","coerceBooleanProperty","Component","ChangeDetectionStrategy","ElementRef","IterableDiffers","ChangeDetectorRef","NgZone","HostBinding","Input","Output","HostListener","Directive","Inject","ComponentFactoryResolver","ViewChild","ViewContainerRef","NgModule","CommonModule"],"mappings":"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"} \ No newline at end of file diff --git a/dist/ngx-flowchart/bundles/ngx-flowchart.umd.min.js b/dist/ngx-flowchart/bundles/ngx-flowchart.umd.min.js index c4d64ab..ffc0783 100644 --- a/dist/ngx-flowchart/bundles/ngx-flowchart.umd.min.js +++ b/dist/ngx-flowchart/bundles/ngx-flowchart.umd.min.js @@ -12,5 +12,5 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. - ***************************************************************************** */var s=function(e,t){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function a(e,t){function n(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var d=function(){return(d=Object.assign||function(e){for(var t,n=1,o=arguments.length;n=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}var c=new t.InjectionToken("fc-node.component.config");var g={htmlPrefix:"fc",leftConnectorType:"leftConnector",rightConnectorType:"rightConnector",curvedStyle:"curved",lineStyle:"line",dragAnimationRepaint:"repaint",dragAnimationShadow:"shadow",canvasClass:"fc-canvas",selectedClass:"fc-selected",editClass:"fc-edit",activeClass:"fc-active",hoverClass:"fc-hover",draggingClass:"fc-dragging",edgeClass:"fc-edge",edgeLabelClass:"fc-edge-label",connectorClass:"fc-connector",magnetClass:"fc-magnet",nodeClass:"fc-node",nodeOverlayClass:"fc-node-overlay",leftConnectorClass:"fc-leftConnectors",rightConnectorClass:"fc-rightConnectors",canvasResizeThreshold:200,canvasResizeStep:200};var h=function(){Error.apply(this,arguments)};h.prototype=new Error;var u=function(e){function t(t){var n=e.call(this)||this;return n.message=t,n}return a(t,e),t}(h);function p(e){var t,n,o,r,i={};e.nodes.forEach((function(e){i[e.id]={incoming:0,outgoing:[]}})),e.edges.forEach((function(t){var n=e.nodes.filter((function(e){return e.connectors.some((function(e){return e.id===t.source}))}))[0],o=e.nodes.filter((function(e){return e.connectors.some((function(e){return e.id===t.destination}))}))[0];i[n.id].outgoing.push(o.id),i[o.id].incoming++}));var s=[],a=[];try{for(var d=l(Object.keys(i)),c=d.next();!c.done;c=d.next()){var g=c.value;0===i[g].incoming&&a.push(g)}}catch(e){t={error:e}}finally{try{c&&!c.done&&(n=d.return)&&n.call(d)}finally{if(t)throw t.error}}for(;0!==a.length;){for(var h=a.pop(),u=0;u=n.left&&e<=n.right&&t>=n.top&&t<=n.bottom},e.prototype.getItemInfoAtPoint=function(e,t){return{node:this.getNodeAtPoint(e,t),edge:this.getEdgeAtPoint(e,t)}},e.prototype.getNodeAtPoint=function(e,t){var n,o;try{for(var r=l(this.model.nodes),i=r.next();!i.done;i=r.next()){var s=i.value,a=this.nodes.getHtmlElement(s.id).getBoundingClientRect();if(e>=a.left&&e<=a.right&&t>=a.top&&t<=a.bottom)return s}}catch(e){n={error:e}}finally{try{i&&!i.done&&(o=r.return)&&o.call(r)}finally{if(n)throw n.error}}return null},e.prototype.getEdgeAtPoint=function(e,t){var n=document.elementFromPoint(e,t).id,o=-1;return n&&(n.startsWith("fc-edge-path-")?o=Number(n.substring("fc-edge-path-".length)):n.startsWith("fc-edge-label-")&&(o=Number(n.substring("fc-edge-label-".length)))),o>-1?this.model.edges[o]:null},e.prototype.selectAllInRect=function(e){var t=this;this.model.nodes.forEach((function(n){var o=t.nodes.getHtmlElement(n.id).getBoundingClientRect();if(!n.readonly){var r=o.left+o.width/2,i=o.top+o.height/2;t.inRectBox(r,i,e)?t.nodes.select(n):t.nodes.isSelected(n)&&t.nodes.deselect(n)}}));var n=this.canvasHtmlElement.getBoundingClientRect();this.model.edges.forEach((function(o){var r=t.edges.sourceCoord(o),i=t.edges.destCoord(o),s=(r.x+i.x)/2+n.left,a=(r.y+i.y)/2+n.top;t.inRectBox(s,a,e)?t.edges.select(o):t.edges.isSelected(o)&&t.edges.deselect(o)}))},e.prototype.deleteSelected=function(){var e=this;this.edges.getSelectedEdges().forEach((function(t){e.edges.delete(t)})),this.nodes.getSelectedNodes().forEach((function(t){e.nodes.delete(t)}))},e.prototype.isEditable=function(){return void 0===this.dropTargetId},e.prototype.isDropSource=function(){return void 0!==this.dropTargetId},e.prototype.getDragImage=function(){return this.dragImage||(this.dragImage=new Image,this.dragImage.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",this.dragImage.style.visibility="hidden"),this.dragImage},e.prototype.registerCallbacks=function(e,t,n){this.edgeAddedCallback=e,this.nodeRemovedCallback=t,this.edgeRemovedCallback=n},e}();var v=function(){function e(e){this.modelService=e}return e.prototype.select=function(e){this.modelService.selectObject(e)},e.prototype.deselect=function(e){this.modelService.deselectObject(e)},e.prototype.toggleSelected=function(e){this.modelService.toggleSelectedObject(e)},e.prototype.isSelected=function(e){return this.modelService.isSelectedObject(e)},e.prototype.isEdit=function(e){return this.modelService.isEditObject(e)},e}();var m=function(e){function t(t){return e.call(this,t)||this}return a(t,e),t.prototype.getConnector=function(e){var t,n,o,r,i=this.modelService.model;try{for(var s=l(i.nodes),a=s.next();!a.done;a=s.next()){var d=a.value;try{for(var c=(o=void 0,l(d.connectors)),g=c.next();!g.done;g=c.next()){var h=g.value;if(h.id===e)return h}}catch(e){o={error:e}}finally{try{g&&!g.done&&(r=c.return)&&r.call(c)}finally{if(o)throw o.error}}}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}},t.prototype.getHtmlElement=function(e){return this.modelService.connectorsHtmlElements[e]},t.prototype.setHtmlElement=function(e,t){this.modelService.connectorsHtmlElements[e]=t,this.modelService.detectChanges()},t.prototype._getCoords=function(e,t){var n=this.getHtmlElement(e),o=this.modelService.canvasHtmlElement;if(null==n||null===o)return{x:0,y:0};var r=n.getBoundingClientRect(),i=o.getBoundingClientRect(),s={x:r.left-i.left,y:r.top-i.top};return t&&(s={x:Math.round(s.x+n.offsetWidth/2),y:Math.round(s.y+n.offsetHeight/2)}),s},t.prototype.getCoords=function(e){return this._getCoords(e,!1)},t.prototype.getCenteredCoord=function(e){return this._getCoords(e,!0)},t}(v),y=function(e){function t(t){return e.call(this,t)||this}return a(t,e),t.prototype.getConnectorsByType=function(e,t){return e.connectors.filter((function(e){return e.type===t}))},t.prototype._addConnector=function(e,t){e.connectors.push(t);try{this.modelService.modelValidation.validateNode(e)}catch(n){throw e.connectors.splice(e.connectors.indexOf(t),1),n}},t.prototype.delete=function(e){this.isSelected(e)&&this.deselect(e);var t=this.modelService.model,n=t.nodes.indexOf(e);if(-1===n){if(void 0===e)throw new Error("Passed undefined");throw new Error("Tried to delete not existing node")}for(var o=this.getConnectorIds(e),r=0;r-1)return s}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}return null},t.prototype.getHtmlElement=function(e){return this.modelService.nodesHtmlElements[e]},t.prototype.setHtmlElement=function(e,t){this.modelService.nodesHtmlElements[e]=t,this.modelService.detectChanges()},t}(v),C=function(e){function t(t){return e.call(this,t)||this}return a(t,e),t.prototype.ready=function(e){var t=this.modelService.connectors.getHtmlElement(e.source),n=this.modelService.connectors.getHtmlElement(e.destination);return void 0!==t&&void 0!==n},t.prototype.sourceCoord=function(e){return this.modelService.connectors.getCenteredCoord(e.source)},t.prototype.destCoord=function(e){return this.modelService.connectors.getCenteredCoord(e.destination)},t.prototype.delete=function(e){var t=this.modelService.model,n=t.edges.indexOf(e);if(-1===n)throw new Error("Tried to delete not existing edge");this.isSelected(e)&&this.deselect(e),t.edges.splice(n,1),this.modelService.notifyModelChanged(),this.modelService.edgeRemovedCallback(e)},t.prototype.getSelectedEdges=function(){var e=this;return this.modelService.model.edges.filter((function(t){return e.modelService.edges.isSelected(t)}))},t.prototype.handleEdgeMouseClick=function(e,t){t?this.modelService.edges.toggleSelected(e):(this.modelService.deselectAll(),this.modelService.edges.select(e))},t.prototype.putEdge=function(e){this.modelService.model.edges.push(e),this.modelService.notifyModelChanged()},t.prototype._addEdge=function(e,t,n,o){var r=this;this.modelService.modelValidation.validateConnector(t),this.modelService.modelValidation.validateConnector(n);var i={};i.source=t.id,i.destination=n.id,i.label=o;var s=this.modelService.model;this.modelService.modelValidation.validateEdges(s.edges.concat([i]),s.nodes),this.modelService.createEdge(e,i).subscribe((function(e){s.edges.push(e),r.modelService.notifyModelChanged(),r.modelService.edgeAddedCallback(e)}))},t}(v),S=function(){function e(){}return e.prototype.validateModel=function(e){return this.validateNodes(e.nodes),this._validateEdges(e.edges,e.nodes),e},e.prototype.validateNodes=function(e){var t=this,n=[];e.forEach((function(e){if(t.validateNode(e),-1!==n.indexOf(e.id))throw new u("Id not unique.");n.push(e.id)}));var o=[];return e.forEach((function(e){e.connectors.forEach((function(e){if(-1!==o.indexOf(e.id))throw new u("Id not unique.");o.push(e.id)}))})),e},e.prototype.validateNode=function(e){var t=this;if(void 0===e.id)throw new u("Id not valid.");if("string"!=typeof e.name)throw new u("Name not valid.");if("number"!=typeof e.x||e.x<0||Math.round(e.x)!==e.x)throw new u("Coordinates not valid.");if("number"!=typeof e.y||e.y<0||Math.round(e.y)!==e.y)throw new u("Coordinates not valid.");if(!Array.isArray(e.connectors))throw new u("Connectors not valid.");return e.connectors.forEach((function(e){t.validateConnector(e)})),e},e.prototype._validateEdges=function(e,t){var n=this;if(e.forEach((function(e){n._validateEdge(e,t)})),e.forEach((function(t,n){e.forEach((function(e,o){if(n!==o&&(t.source===e.source&&t.destination===e.destination||t.source===e.destination&&t.destination===e.source))throw new u("Duplicated edge.")}))})),null===p({nodes:t,edges:e}))throw new u("Graph has a circle.");return e},e.prototype.validateEdges=function(e,t){return this.validateNodes(t),this._validateEdges(e,t)},e.prototype._validateEdge=function(e,t){if(void 0===e.source)throw new u("Source not valid.");if(void 0===e.destination)throw new u("Destination not valid.");if(e.source===e.destination)throw new u("Edge with same source and destination connectors.");var n=t.filter((function(t){return t.connectors.some((function(t){return t.id===e.source}))}))[0];if(void 0===n)throw new u("Source not valid.");var o=t.filter((function(t){return t.connectors.some((function(t){return t.id===e.destination}))}))[0];if(void 0===o)throw new u("Destination not valid.");if(n===o)throw new u("Edge with same source and destination nodes.");return e},e.prototype.validateEdge=function(e,t){return this.validateNodes(t),this._validateEdge(e,t)},e.prototype.validateConnector=function(e){if(void 0===e.id)throw new u("Id not valid.");if(void 0===e.type||null===e.type||"string"!=typeof e.type)throw new u("Type not valid.");return e},e.decorators=[{type:t.Injectable}],e.ctorParameters=function(){return[]},e}(),b={dropElement:null},D=function(){function e(e,t,n,o){this.nodeDraggingScope={shadowDragStarted:!1,dropElement:null,draggedNodes:[],shadowElements:[]},this.dragOffsets=[],this.draggedElements=[],this.destinationHtmlElements=[],this.oldDisplayStyles=[],this.modelService=e,this.automaticResize=n,this.dragAnimation=o,this.applyFunction=t}return e.prototype.getCoordinate=function(e,t){return e=Math.max(e,0),e=Math.min(e,t)},e.prototype.getXCoordinate=function(e){return this.getCoordinate(e,this.modelService.canvasHtmlElement.offsetWidth)},e.prototype.getYCoordinate=function(e){return this.getCoordinate(e,this.modelService.canvasHtmlElement.offsetHeight)},e.prototype.resizeCanvas=function(e,t){if(this.automaticResize&&!this.modelService.isDropSource()){var n=this.modelService.canvasHtmlElement;n.offsetWidth

'+k.name+"

"),I=$(this.draggedElements[w]).children()[0];O.children()[0].style.backgroundColor=I.style.backgroundColor,this.nodeDraggingScope.shadowElements.push(O),this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[w][0])}if(C.dataTransfer.setData("text","Just to support firefox"),C.dataTransfer.setDragImage)C.dataTransfer.setDragImage(this.modelService.getDragImage(),0,0);else{for(w=0;w\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n {{edgeDraggingService.edgeDragging.dragLabel}}\n
\n
\n \n
\n
\n \n
\n
\n ×\n
\n {{edge.label}}\n
\n \n \n\n',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[":host{display:block;position:relative;width:100%;height:100%;background-size:25px 25px;background-image:linear-gradient(to right,rgba(0,0,0,.1) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.1) 1px,transparent 1px);background-color:transparent;min-width:100%;min-height:100%;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host .fc-canvas-container{display:block;position:relative;width:100%;height:100%}:host .fc-canvas-container svg.fc-canvas-svg{display:block;position:relative;width:100%;height:100%}:host .fc-edge{stroke:gray;stroke-width:4;transition:stroke-width .2s;fill:transparent}:host .fc-edge.fc-hover{stroke:gray;stroke-width:6;fill:transparent}:host .fc-edge.fc-selected{stroke:red;stroke-width:4;fill:transparent}:host .fc-edge.fc-active{-webkit-animation:3s linear infinite dash;animation:3s linear infinite dash;stroke-dasharray:20}:host .fc-edge.fc-dragging{pointer-events:none}:host .fc-arrow-marker polygon{stroke:gray;fill:gray}:host .fc-arrow-marker-selected polygon{stroke:red;fill:red}:host .edge-endpoint{fill:gray}:host .fc-noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host .fc-edge-label{position:absolute;opacity:.8;transition:transform .2s;transform-origin:bottom left;margin:0 auto}:host .fc-edge-label .fc-edge-label-text{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;text-align:center;font-size:16px}:host .fc-edge-label .fc-edge-label-text span{cursor:default;border:solid #ff3d00;border-radius:10px;color:#ff3d00;background-color:#fff;padding:3px 5px}:host .fc-edge-label .fc-nodeedit{top:-30px;right:14px}:host .fc-edge-label .fc-nodedelete{top:-30px;right:-13px}:host .fc-edge-label.fc-hover{transform:scale(1.25)}:host .fc-edge-label.fc-edit .fc-edge-label-text span,:host .fc-edge-label.fc-selected .fc-edge-label-text span{border:solid red;color:#fff;font-weight:600;background-color:red}:host .fc-select-rectangle{border:2px dashed #5262ff;position:absolute;background:rgba(20,125,255,.1);z-index:2}@-webkit-keyframes dash{from{stroke-dashoffset:500}}@keyframes dash{from{stroke-dashoffset:500}}:host ::ng-deep .fc-nodeedit{display:none;font-size:15px}:host ::ng-deep .fc-nodedelete{display:none;font-size:18px}:host ::ng-deep .fc-edit .fc-nodedelete,:host ::ng-deep .fc-edit .fc-nodeedit{display:block;position:absolute;border:2px solid #eee;border-radius:50%;font-weight:600;line-height:20px;height:20px;padding-top:2px;width:22px;background:#494949;color:#fff;text-align:center;vertical-align:bottom;cursor:pointer}:host ::ng-deep .fc-edit .fc-nodeedit{top:-24px;right:16px}:host ::ng-deep .fc-edit .fc-nodedelete{top:-24px;right:-13px}"]}]}],e.ctorParameters=function(){return[{type:t.ElementRef},{type:t.IterableDiffers},{type:S},{type:E},{type:t.ChangeDetectorRef},{type:t.NgZone}]},e.propDecorators={canvasClass:[{type:t.HostBinding,args:["attr.class"]}],model:[{type:t.Input}],selectedObjects:[{type:t.Input}],edgeStyle:[{type:t.Input}],userCallbacks:[{type:t.Input}],automaticResize:[{type:t.Input}],dragAnimation:[{type:t.Input}],nodeWidth:[{type:t.Input}],nodeHeight:[{type:t.Input}],dropTargetId:[{type:t.Input}],modelChanged:[{type:t.Output}],fitModelSizeByDefault:[{type:t.Input}],dragover:[{type:t.HostListener,args:["dragover",["$event"]]}],drop:[{type:t.HostListener,args:["drop",["$event"]]}],mousedown:[{type:t.HostListener,args:["mousedown",["$event"]]}],mousemove:[{type:t.HostListener,args:["mousemove",["$event"]]}],mouseup:[{type:t.HostListener,args:["mouseup",["$event"]]}]},e}();var H=function(){function e(e){this.elementRef=e}return e.prototype.ngOnInit=function(){$(this.elementRef.nativeElement).addClass(g.magnetClass)},e.prototype.dragover=function(e){return this.callbacks.edgeDragoverMagnet(e,this.connector)},e.prototype.dragleave=function(e){this.callbacks.edgeDragleaveMagnet(e)},e.prototype.drop=function(e){return this.callbacks.edgeDrop(e,this.connector)},e.prototype.dragend=function(e){this.callbacks.edgeDragend(e)},e.decorators=[{type:t.Directive,args:[{selector:"[fc-magnet]"}]}],e.ctorParameters=function(){return[{type:t.ElementRef}]},e.propDecorators={callbacks:[{type:t.Input}],connector:[{type:t.Input}],dragover:[{type:t.HostListener,args:["dragover",["$event"]]}],dragleave:[{type:t.HostListener,args:["dragleave",["$event"]]}],drop:[{type:t.HostListener,args:["drop",["$event"]]}],dragend:[{type:t.HostListener,args:["dragend",["$event"]]}]},e}();var N=function(){function e(e){this.elementRef=e}return e.prototype.ngOnInit=function(){var e=$(this.elementRef.nativeElement);e.addClass(g.connectorClass),this.modelservice.isEditable()&&(e.attr("draggable","true"),this.updateConnectorClass()),this.modelservice.connectors.setHtmlElement(this.connector.id,e[0])},e.prototype.ngOnChanges=function(e){var t,n,o=!1;try{for(var r=l(Object.keys(e)),i=r.next();!i.done;i=r.next()){var s=i.value,a=e[s];a.firstChange||a.currentValue===a.previousValue||"mouseOverConnector"===s&&(o=!0)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}o&&this.modelservice.isEditable()&&this.updateConnectorClass()},e.prototype.updateConnectorClass=function(){var e=$(this.elementRef.nativeElement);this.connector===this.mouseOverConnector?e.addClass(g.hoverClass):e.removeClass(g.hoverClass)},e.prototype.dragover=function(e){},e.prototype.drop=function(e){if(this.modelservice.isEditable())return this.callbacks.edgeDrop(e,this.connector)},e.prototype.dragend=function(e){this.modelservice.isEditable()&&this.callbacks.edgeDragend(e)},e.prototype.dragstart=function(e){this.modelservice.isEditable()&&this.callbacks.edgeDragstart(e,this.connector)},e.prototype.mouseenter=function(e){this.modelservice.isEditable()&&this.callbacks.connectorMouseEnter(e,this.connector)},e.prototype.mouseleave=function(e){this.modelservice.isEditable()&&this.callbacks.connectorMouseLeave(e,this.connector)},e.decorators=[{type:t.Directive,args:[{selector:"[fc-connector]"}]}],e.ctorParameters=function(){return[{type:t.ElementRef}]},e.propDecorators={callbacks:[{type:t.Input}],modelservice:[{type:t.Input}],connector:[{type:t.Input}],mouseOverConnector:[{type:t.Input}],dragover:[{type:t.HostListener,args:["dragover",["$event"]]}],drop:[{type:t.HostListener,args:["drop",["$event"]]}],dragend:[{type:t.HostListener,args:["dragend",["$event"]]}],dragstart:[{type:t.HostListener,args:["dragstart",["$event"]]}],mouseenter:[{type:t.HostListener,args:["mouseenter",["$event"]]}],mouseleave:[{type:t.HostListener,args:["mouseleave",["$event"]]}]},e}();var P=function(){function e(e,t,n){this.nodeComponentConfig=e,this.elementRef=t,this.componentFactoryResolver=n}return Object.defineProperty(e.prototype,"nodeId",{get:function(){return this.node.id},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"top",{get:function(){return this.node.y+"px"},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"left",{get:function(){return this.node.x+"px"},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.userNodeCallbacks||(this.userNodeCallbacks={}),this.userNodeCallbacks.nodeEdit=this.userNodeCallbacks.nodeEdit||function(){},this.userNodeCallbacks.doubleClick=this.userNodeCallbacks.doubleClick||function(){},this.userNodeCallbacks.mouseDown=this.userNodeCallbacks.mouseDown||function(){},this.userNodeCallbacks.mouseEnter=this.userNodeCallbacks.mouseEnter||function(){},this.userNodeCallbacks.mouseLeave=this.userNodeCallbacks.mouseLeave||function(){};var e=$(this.elementRef.nativeElement);e.addClass(g.nodeClass),this.node.readonly||e.attr("draggable","true"),this.updateNodeClass(),this.modelservice.nodes.setHtmlElement(this.node.id,e[0]),this.nodeContentContainer.clear();var t=this.componentFactoryResolver.resolveComponentFactory(this.nodeComponentConfig.nodeComponentType),n=this.nodeContentContainer.createComponent(t);this.nodeComponent=n.instance,this.nodeComponent.callbacks=this.callbacks,this.nodeComponent.userNodeCallbacks=this.userNodeCallbacks,this.nodeComponent.node=this.node,this.nodeComponent.modelservice=this.modelservice,this.updateNodeComponent()},e.prototype.ngOnChanges=function(e){var t,n,o=!1;try{for(var r=l(Object.keys(e)),i=r.next();!i.done;i=r.next()){var s=i.value,a=e[s];a.firstChange||a.currentValue===a.previousValue||["selected","edit","underMouse","mouseOverConnector","dragging"].includes(s)&&(o=!0)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}o&&(this.updateNodeClass(),this.updateNodeComponent())},e.prototype.updateNodeClass=function(){var e=$(this.elementRef.nativeElement);this.toggleClass(e,g.selectedClass,this.selected),this.toggleClass(e,g.editClass,this.edit),this.toggleClass(e,g.hoverClass,this.underMouse),this.toggleClass(e,g.draggingClass,this.dragging)},e.prototype.updateNodeComponent=function(){this.nodeComponent.selected=this.selected,this.nodeComponent.edit=this.edit,this.nodeComponent.underMouse=this.underMouse,this.nodeComponent.mouseOverConnector=this.mouseOverConnector,this.nodeComponent.dragging=this.dragging},e.prototype.toggleClass=function(e,t,n){n?e.addClass(t):e.removeClass(t)},e.prototype.mousedown=function(e){e.stopPropagation()},e.prototype.dragstart=function(e){this.node.readonly||this.callbacks.nodeDragstart(e,this.node)},e.prototype.dragend=function(e){this.node.readonly||this.callbacks.nodeDragend(e)},e.prototype.click=function(e){this.node.readonly||this.callbacks.nodeClicked(e,this.node)},e.prototype.mouseover=function(e){this.node.readonly||this.callbacks.nodeMouseOver(e,this.node)},e.prototype.mouseout=function(e){this.node.readonly||this.callbacks.nodeMouseOut(e,this.node)},e.decorators=[{type:t.Component,args:[{selector:"fc-node",template:"",styles:[":host{position:absolute;z-index:1}:host.fc-dragging{z-index:10}:host ::ng-deep .fc-leftConnectors,:host ::ng-deep .fc-rightConnectors{position:absolute;top:0;height:100%;display:flex;flex-direction:column;z-index:-10}:host ::ng-deep .fc-leftConnectors .fc-magnet,:host ::ng-deep .fc-rightConnectors .fc-magnet{align-items:center}:host ::ng-deep .fc-leftConnectors{left:-20px}:host ::ng-deep .fc-rightConnectors{right:-20px}:host ::ng-deep .fc-magnet{display:flex;flex-grow:1;height:60px;justify-content:center}:host ::ng-deep .fc-connector{width:18px;height:18px;border:10px solid transparent;-moz-background-clip:padding;-webkit-background-clip:padding;background-clip:padding-box;border-radius:50%;background-color:#f7a789;color:#fff;pointer-events:all}:host ::ng-deep .fc-connector.fc-hover{background-color:#000}"]}]}],e.ctorParameters=function(){return[{type:void 0,decorators:[{type:t.Inject,args:[c]}]},{type:t.ElementRef},{type:t.ComponentFactoryResolver}]},e.propDecorators={callbacks:[{type:t.Input}],userNodeCallbacks:[{type:t.Input}],node:[{type:t.Input}],selected:[{type:t.Input}],edit:[{type:t.Input}],underMouse:[{type:t.Input}],mouseOverConnector:[{type:t.Input}],modelservice:[{type:t.Input}],dragging:[{type:t.Input}],nodeId:[{type:t.HostBinding,args:["attr.id"]}],top:[{type:t.HostBinding,args:["style.top"]}],left:[{type:t.HostBinding,args:["style.left"]}],nodeContentContainer:[{type:t.ViewChild,args:["nodeContent",{read:t.ViewContainerRef,static:!0}]}],mousedown:[{type:t.HostListener,args:["mousedown",["$event"]]}],dragstart:[{type:t.HostListener,args:["dragstart",["$event"]]}],dragend:[{type:t.HostListener,args:["dragend",["$event"]]}],click:[{type:t.HostListener,args:["click",["$event"]]}],mouseover:[{type:t.HostListener,args:["mouseover",["$event"]]}],mouseout:[{type:t.HostListener,args:["mouseout",["$event"]]}]},e}();var j=function(){function e(){this.flowchartConstants=g}return e.prototype.ngOnInit=function(){},e.propDecorators={callbacks:[{type:t.Input}],userNodeCallbacks:[{type:t.Input}],node:[{type:t.Input}],selected:[{type:t.Input}],edit:[{type:t.Input}],underMouse:[{type:t.Input}],mouseOverConnector:[{type:t.Input}],modelservice:[{type:t.Input}],dragging:[{type:t.Input}]},e}();var T=function(e){function n(){return e.call(this)||this}return a(n,e),n.decorators=[{type:t.Component,args:[{selector:"fc-default-node",template:'\n
\n
\n

{{ node.name }}

\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n ×\n
\n\n',styles:[":host .fc-node-overlay{position:absolute;pointer-events:none;left:0;top:0;right:0;bottom:0;background-color:#000;opacity:0}:host :host-context(.fc-hover) .fc-node-overlay{opacity:.25;transition:opacity .2s}:host :host-context(.fc-selected) .fc-node-overlay{opacity:.25}:host .innerNode{display:flex;justify-content:center;align-items:center;min-width:100px;border-radius:5px;background-color:#f15b26;color:#fff;font-size:16px;pointer-events:none}:host .innerNode p{padding:0 15px;text-align:center}"]}]}],n.ctorParameters=function(){return[]},n}(j),L={nodeComponentType:T},z=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{entryComponents:[T],declarations:[R,H,N,P,T],providers:[S,E,{provide:c,useValue:L}],imports:[i.CommonModule],exports:[R,H,N,T]}]}],e}();e.FC_NODE_COMPONENT_CONFIG=c,e.FcNodeComponent=j,e.FlowchartConstants=g,e.ModelvalidationError=u,e.NgxFlowchartComponent=R,e.NgxFlowchartModule=z,e.fcTopSort=p,e.ɵa=P,e.ɵb=S,e.ɵc=E,e.ɵd=T,e.ɵe=H,e.ɵf=N,Object.defineProperty(e,"__esModule",{value:!0})})); + ***************************************************************************** */var s=function(e,t){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function a(e,t){function n(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var d=function(){return(d=Object.assign||function(e){for(var t,n=1,o=arguments.length;n=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}var c=new t.InjectionToken("fc-node.component.config");var g={htmlPrefix:"fc",leftConnectorType:"leftConnector",rightConnectorType:"rightConnector",curvedStyle:"curved",lineStyle:"line",dragAnimationRepaint:"repaint",dragAnimationShadow:"shadow",canvasClass:"fc-canvas",selectedClass:"fc-selected",editClass:"fc-edit",activeClass:"fc-active",hoverClass:"fc-hover",draggingClass:"fc-dragging",edgeClass:"fc-edge",edgeLabelClass:"fc-edge-label",connectorClass:"fc-connector",magnetClass:"fc-magnet",nodeClass:"fc-node",nodeOverlayClass:"fc-node-overlay",leftConnectorClass:"fc-leftConnectors",rightConnectorClass:"fc-rightConnectors",canvasResizeThreshold:200,canvasResizeStep:200};var h=function(){Error.apply(this,arguments)};Object.defineProperty(h,"prototype",new Error);var u=function(e){function t(t){var n=e.call(this)||this;return n.message=t,n}return a(t,e),t}(h);function p(e){var t,n,o,r,i={};e.nodes.forEach((function(e){i[e.id]={incoming:0,outgoing:[]}})),e.edges.forEach((function(t){var n=e.nodes.filter((function(e){return e.connectors.some((function(e){return e.id===t.source}))}))[0],o=e.nodes.filter((function(e){return e.connectors.some((function(e){return e.id===t.destination}))}))[0];i[n.id].outgoing.push(o.id),i[o.id].incoming++}));var s=[],a=[];try{for(var d=l(Object.keys(i)),c=d.next();!c.done;c=d.next()){var g=c.value;0===i[g].incoming&&a.push(g)}}catch(e){t={error:e}}finally{try{c&&!c.done&&(n=d.return)&&n.call(d)}finally{if(t)throw t.error}}for(;0!==a.length;){for(var h=a.pop(),u=0;u=n.left&&e<=n.right&&t>=n.top&&t<=n.bottom},e.prototype.getItemInfoAtPoint=function(e,t){return{node:this.getNodeAtPoint(e,t),edge:this.getEdgeAtPoint(e,t)}},e.prototype.getNodeAtPoint=function(e,t){var n,o;try{for(var r=l(this.model.nodes),i=r.next();!i.done;i=r.next()){var s=i.value,a=this.nodes.getHtmlElement(s.id).getBoundingClientRect();if(e>=a.left&&e<=a.right&&t>=a.top&&t<=a.bottom)return s}}catch(e){n={error:e}}finally{try{i&&!i.done&&(o=r.return)&&o.call(r)}finally{if(n)throw n.error}}return null},e.prototype.getEdgeAtPoint=function(e,t){var n=document.elementFromPoint(e,t).id,o=-1;return n&&(n.startsWith("fc-edge-path-")?o=Number(n.substring("fc-edge-path-".length)):n.startsWith("fc-edge-label-")&&(o=Number(n.substring("fc-edge-label-".length)))),o>-1?this.model.edges[o]:null},e.prototype.selectAllInRect=function(e){var t=this;this.model.nodes.forEach((function(n){var o=t.nodes.getHtmlElement(n.id).getBoundingClientRect();if(!n.readonly){var r=o.left+o.width/2,i=o.top+o.height/2;t.inRectBox(r,i,e)?t.nodes.select(n):t.nodes.isSelected(n)&&t.nodes.deselect(n)}}));var n=this.canvasHtmlElement.getBoundingClientRect();this.model.edges.forEach((function(o){var r=t.edges.sourceCoord(o),i=t.edges.destCoord(o),s=(r.x+i.x)/2+n.left,a=(r.y+i.y)/2+n.top;t.inRectBox(s,a,e)?t.edges.select(o):t.edges.isSelected(o)&&t.edges.deselect(o)}))},e.prototype.deleteSelected=function(){var e=this;this.edges.getSelectedEdges().forEach((function(t){e.edges.delete(t)})),this.nodes.getSelectedNodes().forEach((function(t){e.nodes.delete(t)}))},e.prototype.isEditable=function(){return void 0===this.dropTargetId},e.prototype.isDropSource=function(){return void 0!==this.dropTargetId},e.prototype.getDragImage=function(){return this.dragImage||(this.dragImage=new Image,this.dragImage.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",this.dragImage.style.visibility="hidden"),this.dragImage},e}();var v=function(){function e(e){this.modelService=e}return e.prototype.select=function(e){this.modelService.selectObject(e)},e.prototype.deselect=function(e){this.modelService.deselectObject(e)},e.prototype.toggleSelected=function(e){this.modelService.toggleSelectedObject(e)},e.prototype.isSelected=function(e){return this.modelService.isSelectedObject(e)},e.prototype.isEdit=function(e){return this.modelService.isEditObject(e)},e}();var m=function(e){function t(t){return e.call(this,t)||this}return a(t,e),t.prototype.getConnector=function(e){var t,n,o,r,i=this.modelService.model;try{for(var s=l(i.nodes),a=s.next();!a.done;a=s.next()){var d=a.value;try{for(var c=(o=void 0,l(d.connectors)),g=c.next();!g.done;g=c.next()){var h=g.value;if(h.id===e)return h}}catch(e){o={error:e}}finally{try{g&&!g.done&&(r=c.return)&&r.call(c)}finally{if(o)throw o.error}}}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}},t.prototype.getHtmlElement=function(e){return this.modelService.connectorsHtmlElements[e]},t.prototype.setHtmlElement=function(e,t){this.modelService.connectorsHtmlElements[e]=t,this.modelService.detectChanges()},t.prototype._getCoords=function(e,t){var n=this.getHtmlElement(e),o=this.modelService.canvasHtmlElement;if(null==n||null===o)return{x:0,y:0};var r=n.getBoundingClientRect(),i=o.getBoundingClientRect(),s={x:r.left-i.left,y:r.top-i.top};return t&&(s={x:Math.round(s.x+n.offsetWidth/2),y:Math.round(s.y+n.offsetHeight/2)}),s},t.prototype.getCoords=function(e){return this._getCoords(e,!1)},t.prototype.getCenteredCoord=function(e){return this._getCoords(e,!0)},t}(v),y=function(e){function t(t){return e.call(this,t)||this}return a(t,e),t.prototype.getConnectorsByType=function(e,t){return e.connectors.filter((function(e){return e.type===t}))},t.prototype._addConnector=function(e,t){e.connectors.push(t);try{this.modelService.modelValidation.validateNode(e)}catch(n){throw e.connectors.splice(e.connectors.indexOf(t),1),n}},t.prototype.delete=function(e){this.isSelected(e)&&this.deselect(e);var t=this.modelService.model,n=t.nodes.indexOf(e);if(-1===n){if(void 0===e)throw new Error("Passed undefined");throw new Error("Tried to delete not existing node")}for(var o=this.getConnectorIds(e),r=0;r-1)return s}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}return null},t.prototype.getHtmlElement=function(e){return this.modelService.nodesHtmlElements[e]},t.prototype.setHtmlElement=function(e,t){this.modelService.nodesHtmlElements[e]=t,this.modelService.detectChanges()},t}(v),C=function(e){function t(t){return e.call(this,t)||this}return a(t,e),t.prototype.ready=function(e){var t=this.modelService.connectors.getHtmlElement(e.source),n=this.modelService.connectors.getHtmlElement(e.destination);return void 0!==t&&void 0!==n},t.prototype.sourceCoord=function(e){return this.modelService.connectors.getCenteredCoord(e.source)},t.prototype.destCoord=function(e){return this.modelService.connectors.getCenteredCoord(e.destination)},t.prototype.delete=function(e){var t=this.modelService.model,n=t.edges.indexOf(e);if(-1===n)throw new Error("Tried to delete not existing edge");this.isSelected(e)&&this.deselect(e),t.edges.splice(n,1),this.modelService.notifyModelChanged(),this.modelService.edgeRemovedCallback(e)},t.prototype.getSelectedEdges=function(){var e=this;return this.modelService.model.edges.filter((function(t){return e.modelService.edges.isSelected(t)}))},t.prototype.handleEdgeMouseClick=function(e,t){t?this.modelService.edges.toggleSelected(e):(this.modelService.deselectAll(),this.modelService.edges.select(e))},t.prototype.putEdge=function(e){this.modelService.model.edges.push(e),this.modelService.notifyModelChanged()},t.prototype._addEdge=function(e,t,n,o){var r=this;this.modelService.modelValidation.validateConnector(t),this.modelService.modelValidation.validateConnector(n);var i={};i.source=t.id,i.destination=n.id,i.label=o;var s=this.modelService.model;this.modelService.modelValidation.validateEdges(s.edges.concat([i]),s.nodes),this.modelService.createEdge(e,i).subscribe((function(e){s.edges.push(e),r.modelService.notifyModelChanged(),r.modelService.edgeAddedCallback(e)}))},t}(v),S=function(){function e(){}return e.prototype.validateModel=function(e){return this.validateNodes(e.nodes),this._validateEdges(e.edges,e.nodes),e},e.prototype.validateNodes=function(e){var t=this,n=[];e.forEach((function(e){if(t.validateNode(e),-1!==n.indexOf(e.id))throw new u("Id not unique.");n.push(e.id)}));var o=[];return e.forEach((function(e){e.connectors.forEach((function(e){if(-1!==o.indexOf(e.id))throw new u("Id not unique.");o.push(e.id)}))})),e},e.prototype.validateNode=function(e){var t=this;if(void 0===e.id)throw new u("Id not valid.");if("string"!=typeof e.name)throw new u("Name not valid.");if("number"!=typeof e.x||e.x<0||Math.round(e.x)!==e.x)throw new u("Coordinates not valid.");if("number"!=typeof e.y||e.y<0||Math.round(e.y)!==e.y)throw new u("Coordinates not valid.");if(!Array.isArray(e.connectors))throw new u("Connectors not valid.");return e.connectors.forEach((function(e){t.validateConnector(e)})),e},e.prototype._validateEdges=function(e,t){var n=this;if(e.forEach((function(e){n._validateEdge(e,t)})),e.forEach((function(t,n){e.forEach((function(e,o){if(n!==o&&(t.source===e.source&&t.destination===e.destination||t.source===e.destination&&t.destination===e.source))throw new u("Duplicated edge.")}))})),null===p({nodes:t,edges:e}))throw new u("Graph has a circle.");return e},e.prototype.validateEdges=function(e,t){return this.validateNodes(t),this._validateEdges(e,t)},e.prototype._validateEdge=function(e,t){if(void 0===e.source)throw new u("Source not valid.");if(void 0===e.destination)throw new u("Destination not valid.");if(e.source===e.destination)throw new u("Edge with same source and destination connectors.");var n=t.filter((function(t){return t.connectors.some((function(t){return t.id===e.source}))}))[0];if(void 0===n)throw new u("Source not valid.");var o=t.filter((function(t){return t.connectors.some((function(t){return t.id===e.destination}))}))[0];if(void 0===o)throw new u("Destination not valid.");if(n===o)throw new u("Edge with same source and destination nodes.");return e},e.prototype.validateEdge=function(e,t){return this.validateNodes(t),this._validateEdge(e,t)},e.prototype.validateConnector=function(e){if(void 0===e.id)throw new u("Id not valid.");if(void 0===e.type||null===e.type||"string"!=typeof e.type)throw new u("Type not valid.");return e},e.decorators=[{type:t.Injectable}],e.ctorParameters=function(){return[]},e}(),b={dropElement:null},D=function(){function e(e,t,n,o){this.nodeDraggingScope={shadowDragStarted:!1,dropElement:null,draggedNodes:[],shadowElements:[]},this.dragOffsets=[],this.draggedElements=[],this.destinationHtmlElements=[],this.oldDisplayStyles=[],this.modelService=e,this.automaticResize=n,this.dragAnimation=o,this.applyFunction=t}return e.prototype.getCoordinate=function(e,t){return e=Math.max(e,0),e=Math.min(e,t)},e.prototype.getXCoordinate=function(e){return this.getCoordinate(e,this.modelService.canvasHtmlElement.offsetWidth)},e.prototype.getYCoordinate=function(e){return this.getCoordinate(e,this.modelService.canvasHtmlElement.offsetHeight)},e.prototype.resizeCanvas=function(e,t){if(this.automaticResize&&!this.modelService.isDropSource()){var n=this.modelService.canvasHtmlElement;n.offsetWidth

'+k.name+"

"),I=$(this.draggedElements[w]).children()[0];O.children()[0].style.backgroundColor=I.style.backgroundColor,this.nodeDraggingScope.shadowElements.push(O),this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[w][0])}if(C.dataTransfer.setData("text","Just to support firefox"),C.dataTransfer.setDragImage)C.dataTransfer.setDragImage(this.modelService.getDragImage(),0,0);else{for(w=0;w\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n {{edgeDraggingService.edgeDragging.dragLabel}}\n
\n
\n \n
\n
\n \n
\n
\n ×\n
\n {{edge.label}}\n
\n \n \n\n',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[":host{display:block;position:relative;width:100%;height:100%;background-size:25px 25px;background-image:linear-gradient(to right,rgba(0,0,0,.1) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.1) 1px,transparent 1px);background-color:transparent;min-width:100%;min-height:100%;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host .fc-canvas-container{display:block;position:relative;width:100%;height:100%}:host .fc-canvas-container svg.fc-canvas-svg{display:block;position:relative;width:100%;height:100%}:host .fc-edge{stroke:gray;stroke-width:4;transition:stroke-width .2s;fill:transparent}:host .fc-edge.fc-hover{stroke:gray;stroke-width:6;fill:transparent}:host .fc-edge.fc-selected{stroke:red;stroke-width:4;fill:transparent}:host .fc-edge.fc-active{-webkit-animation:3s linear infinite dash;animation:3s linear infinite dash;stroke-dasharray:20}:host .fc-edge.fc-dragging{pointer-events:none}:host .fc-arrow-marker polygon{stroke:gray;fill:gray}:host .fc-arrow-marker-selected polygon{stroke:red;fill:red}:host .edge-endpoint{fill:gray}:host .fc-noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host .fc-edge-label{position:absolute;opacity:.8;transition:transform .2s;transform-origin:bottom left;margin:0 auto}:host .fc-edge-label .fc-edge-label-text{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;text-align:center;font-size:16px}:host .fc-edge-label .fc-edge-label-text span{cursor:default;border:solid #ff3d00;border-radius:10px;color:#ff3d00;background-color:#fff;padding:3px 5px}:host .fc-edge-label .fc-nodeedit{top:-30px;right:14px}:host .fc-edge-label .fc-nodedelete{top:-30px;right:-13px}:host .fc-edge-label.fc-hover{transform:scale(1.25)}:host .fc-edge-label.fc-edit .fc-edge-label-text span,:host .fc-edge-label.fc-selected .fc-edge-label-text span{border:solid red;color:#fff;font-weight:600;background-color:red}:host .fc-select-rectangle{border:2px dashed #5262ff;position:absolute;background:rgba(20,125,255,.1);z-index:2}@-webkit-keyframes dash{from{stroke-dashoffset:500}}@keyframes dash{from{stroke-dashoffset:500}}:host ::ng-deep .fc-nodeedit{display:none;font-size:15px}:host ::ng-deep .fc-nodedelete{display:none;font-size:18px}:host ::ng-deep .fc-edit .fc-nodedelete,:host ::ng-deep .fc-edit .fc-nodeedit{display:block;position:absolute;border:2px solid #eee;border-radius:50%;font-weight:600;line-height:20px;height:20px;padding-top:2px;width:22px;background:#494949;color:#fff;text-align:center;vertical-align:bottom;cursor:pointer}:host ::ng-deep .fc-edit .fc-nodeedit{top:-24px;right:16px}:host ::ng-deep .fc-edit .fc-nodedelete{top:-24px;right:-13px}"]}]}],e.ctorParameters=function(){return[{type:t.ElementRef},{type:t.IterableDiffers},{type:S},{type:E},{type:t.ChangeDetectorRef},{type:t.NgZone}]},e.propDecorators={canvasClass:[{type:t.HostBinding,args:["attr.class"]}],model:[{type:t.Input}],selectedObjects:[{type:t.Input}],edgeStyle:[{type:t.Input}],userCallbacks:[{type:t.Input}],automaticResize:[{type:t.Input}],dragAnimation:[{type:t.Input}],nodeWidth:[{type:t.Input}],nodeHeight:[{type:t.Input}],dropTargetId:[{type:t.Input}],modelChanged:[{type:t.Output}],fitModelSizeByDefault:[{type:t.Input}],dragover:[{type:t.HostListener,args:["dragover",["$event"]]}],drop:[{type:t.HostListener,args:["drop",["$event"]]}],mousedown:[{type:t.HostListener,args:["mousedown",["$event"]]}],mousemove:[{type:t.HostListener,args:["mousemove",["$event"]]}],mouseup:[{type:t.HostListener,args:["mouseup",["$event"]]}]},e}();var H=function(){function e(e){this.elementRef=e}return e.prototype.ngOnInit=function(){$(this.elementRef.nativeElement).addClass(g.magnetClass)},e.prototype.dragover=function(e){return this.callbacks.edgeDragoverMagnet(e,this.connector)},e.prototype.dragleave=function(e){this.callbacks.edgeDragleaveMagnet(e)},e.prototype.drop=function(e){return this.callbacks.edgeDrop(e,this.connector)},e.prototype.dragend=function(e){this.callbacks.edgeDragend(e)},e.decorators=[{type:t.Directive,args:[{selector:"[fc-magnet]"}]}],e.ctorParameters=function(){return[{type:t.ElementRef}]},e.propDecorators={callbacks:[{type:t.Input}],connector:[{type:t.Input}],dragover:[{type:t.HostListener,args:["dragover",["$event"]]}],dragleave:[{type:t.HostListener,args:["dragleave",["$event"]]}],drop:[{type:t.HostListener,args:["drop",["$event"]]}],dragend:[{type:t.HostListener,args:["dragend",["$event"]]}]},e}();var N=function(){function e(e){this.elementRef=e}return e.prototype.ngOnInit=function(){var e=$(this.elementRef.nativeElement);e.addClass(g.connectorClass),this.modelservice.isEditable()&&(e.attr("draggable","true"),this.updateConnectorClass()),this.modelservice.connectors.setHtmlElement(this.connector.id,e[0])},e.prototype.ngOnChanges=function(e){var t,n,o=!1;try{for(var r=l(Object.keys(e)),i=r.next();!i.done;i=r.next()){var s=i.value,a=e[s];a.firstChange||a.currentValue===a.previousValue||"mouseOverConnector"===s&&(o=!0)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}o&&this.modelservice.isEditable()&&this.updateConnectorClass()},e.prototype.updateConnectorClass=function(){var e=$(this.elementRef.nativeElement);this.connector===this.mouseOverConnector?e.addClass(g.hoverClass):e.removeClass(g.hoverClass)},e.prototype.dragover=function(e){},e.prototype.drop=function(e){if(this.modelservice.isEditable())return this.callbacks.edgeDrop(e,this.connector)},e.prototype.dragend=function(e){this.modelservice.isEditable()&&this.callbacks.edgeDragend(e)},e.prototype.dragstart=function(e){this.modelservice.isEditable()&&this.callbacks.edgeDragstart(e,this.connector)},e.prototype.mouseenter=function(e){this.modelservice.isEditable()&&this.callbacks.connectorMouseEnter(e,this.connector)},e.prototype.mouseleave=function(e){this.modelservice.isEditable()&&this.callbacks.connectorMouseLeave(e,this.connector)},e.decorators=[{type:t.Directive,args:[{selector:"[fc-connector]"}]}],e.ctorParameters=function(){return[{type:t.ElementRef}]},e.propDecorators={callbacks:[{type:t.Input}],modelservice:[{type:t.Input}],connector:[{type:t.Input}],mouseOverConnector:[{type:t.Input}],dragover:[{type:t.HostListener,args:["dragover",["$event"]]}],drop:[{type:t.HostListener,args:["drop",["$event"]]}],dragend:[{type:t.HostListener,args:["dragend",["$event"]]}],dragstart:[{type:t.HostListener,args:["dragstart",["$event"]]}],mouseenter:[{type:t.HostListener,args:["mouseenter",["$event"]]}],mouseleave:[{type:t.HostListener,args:["mouseleave",["$event"]]}]},e}();var P=function(){function e(e,t,n){this.nodeComponentConfig=e,this.elementRef=t,this.componentFactoryResolver=n}return Object.defineProperty(e.prototype,"nodeId",{get:function(){return this.node.id},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"top",{get:function(){return this.node.y+"px"},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"left",{get:function(){return this.node.x+"px"},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.userNodeCallbacks||(this.userNodeCallbacks={}),this.userNodeCallbacks.nodeEdit=this.userNodeCallbacks.nodeEdit||function(){},this.userNodeCallbacks.doubleClick=this.userNodeCallbacks.doubleClick||function(){},this.userNodeCallbacks.mouseDown=this.userNodeCallbacks.mouseDown||function(){},this.userNodeCallbacks.mouseEnter=this.userNodeCallbacks.mouseEnter||function(){},this.userNodeCallbacks.mouseLeave=this.userNodeCallbacks.mouseLeave||function(){};var e=$(this.elementRef.nativeElement);e.addClass(g.nodeClass),this.node.readonly||e.attr("draggable","true"),this.updateNodeClass(),this.modelservice.nodes.setHtmlElement(this.node.id,e[0]),this.nodeContentContainer.clear();var t=this.componentFactoryResolver.resolveComponentFactory(this.nodeComponentConfig.nodeComponentType),n=this.nodeContentContainer.createComponent(t);this.nodeComponent=n.instance,this.nodeComponent.callbacks=this.callbacks,this.nodeComponent.userNodeCallbacks=this.userNodeCallbacks,this.nodeComponent.node=this.node,this.nodeComponent.modelservice=this.modelservice,this.updateNodeComponent()},e.prototype.ngOnChanges=function(e){var t,n,o=!1;try{for(var r=l(Object.keys(e)),i=r.next();!i.done;i=r.next()){var s=i.value,a=e[s];a.firstChange||a.currentValue===a.previousValue||["selected","edit","underMouse","mouseOverConnector","dragging"].includes(s)&&(o=!0)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}o&&(this.updateNodeClass(),this.updateNodeComponent())},e.prototype.updateNodeClass=function(){var e=$(this.elementRef.nativeElement);this.toggleClass(e,g.selectedClass,this.selected),this.toggleClass(e,g.editClass,this.edit),this.toggleClass(e,g.hoverClass,this.underMouse),this.toggleClass(e,g.draggingClass,this.dragging)},e.prototype.updateNodeComponent=function(){this.nodeComponent.selected=this.selected,this.nodeComponent.edit=this.edit,this.nodeComponent.underMouse=this.underMouse,this.nodeComponent.mouseOverConnector=this.mouseOverConnector,this.nodeComponent.dragging=this.dragging},e.prototype.toggleClass=function(e,t,n){n?e.addClass(t):e.removeClass(t)},e.prototype.mousedown=function(e){e.stopPropagation()},e.prototype.dragstart=function(e){this.node.readonly||this.callbacks.nodeDragstart(e,this.node)},e.prototype.dragend=function(e){this.node.readonly||this.callbacks.nodeDragend(e)},e.prototype.click=function(e){this.node.readonly||this.callbacks.nodeClicked(e,this.node)},e.prototype.mouseover=function(e){this.node.readonly||this.callbacks.nodeMouseOver(e,this.node)},e.prototype.mouseout=function(e){this.node.readonly||this.callbacks.nodeMouseOut(e,this.node)},e.decorators=[{type:t.Component,args:[{selector:"fc-node",template:"",styles:[":host{position:absolute;z-index:1}:host.fc-dragging{z-index:10}:host ::ng-deep .fc-leftConnectors,:host ::ng-deep .fc-rightConnectors{position:absolute;top:0;height:100%;display:flex;flex-direction:column;z-index:-10}:host ::ng-deep .fc-leftConnectors .fc-magnet,:host ::ng-deep .fc-rightConnectors .fc-magnet{align-items:center}:host ::ng-deep .fc-leftConnectors{left:-20px}:host ::ng-deep .fc-rightConnectors{right:-20px}:host ::ng-deep .fc-magnet{display:flex;flex-grow:1;height:60px;justify-content:center}:host ::ng-deep .fc-connector{width:18px;height:18px;border:10px solid transparent;-moz-background-clip:padding;-webkit-background-clip:padding;background-clip:padding-box;border-radius:50%;background-color:#f7a789;color:#fff;pointer-events:all}:host ::ng-deep .fc-connector.fc-hover{background-color:#000}"]}]}],e.ctorParameters=function(){return[{type:void 0,decorators:[{type:t.Inject,args:[c]}]},{type:t.ElementRef},{type:t.ComponentFactoryResolver}]},e.propDecorators={callbacks:[{type:t.Input}],userNodeCallbacks:[{type:t.Input}],node:[{type:t.Input}],selected:[{type:t.Input}],edit:[{type:t.Input}],underMouse:[{type:t.Input}],mouseOverConnector:[{type:t.Input}],modelservice:[{type:t.Input}],dragging:[{type:t.Input}],nodeId:[{type:t.HostBinding,args:["attr.id"]}],top:[{type:t.HostBinding,args:["style.top"]}],left:[{type:t.HostBinding,args:["style.left"]}],nodeContentContainer:[{type:t.ViewChild,args:["nodeContent",{read:t.ViewContainerRef,static:!0}]}],mousedown:[{type:t.HostListener,args:["mousedown",["$event"]]}],dragstart:[{type:t.HostListener,args:["dragstart",["$event"]]}],dragend:[{type:t.HostListener,args:["dragend",["$event"]]}],click:[{type:t.HostListener,args:["click",["$event"]]}],mouseover:[{type:t.HostListener,args:["mouseover",["$event"]]}],mouseout:[{type:t.HostListener,args:["mouseout",["$event"]]}]},e}();var j=function(){function e(){this.flowchartConstants=g}return e.prototype.ngOnInit=function(){},e.propDecorators={callbacks:[{type:t.Input}],userNodeCallbacks:[{type:t.Input}],node:[{type:t.Input}],selected:[{type:t.Input}],edit:[{type:t.Input}],underMouse:[{type:t.Input}],mouseOverConnector:[{type:t.Input}],modelservice:[{type:t.Input}],dragging:[{type:t.Input}]},e}();var T=function(e){function n(){return e.call(this)||this}return a(n,e),n.decorators=[{type:t.Component,args:[{selector:"fc-default-node",template:'\n
\n
\n

{{ node.name }}

\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n ×\n
\n\n',styles:[":host .fc-node-overlay{position:absolute;pointer-events:none;left:0;top:0;right:0;bottom:0;background-color:#000;opacity:0}:host :host-context(.fc-hover) .fc-node-overlay{opacity:.25;transition:opacity .2s}:host :host-context(.fc-selected) .fc-node-overlay{opacity:.25}:host .innerNode{display:flex;justify-content:center;align-items:center;min-width:100px;border-radius:5px;background-color:#f15b26;color:#fff;font-size:16px;pointer-events:none}:host .innerNode p{padding:0 15px;text-align:center}"]}]}],n.ctorParameters=function(){return[]},n}(j),L={nodeComponentType:T},z=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{entryComponents:[T],declarations:[R,H,N,P,T],providers:[S,E,{provide:c,useValue:L}],imports:[i.CommonModule],exports:[R,H,N,T]}]}],e}();e.FC_NODE_COMPONENT_CONFIG=c,e.FcNodeComponent=j,e.FlowchartConstants=g,e.ModelvalidationError=u,e.NgxFlowchartComponent=R,e.NgxFlowchartModule=z,e.fcTopSort=p,e.ɵa=P,e.ɵb=S,e.ɵc=E,e.ɵd=T,e.ɵe=H,e.ɵf=N,Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=ngx-flowchart.umd.min.js.map \ No newline at end of file diff --git a/dist/ngx-flowchart/bundles/ngx-flowchart.umd.min.js.map b/dist/ngx-flowchart/bundles/ngx-flowchart.umd.min.js.map index 6698be0..63ba16e 100644 --- a/dist/ngx-flowchart/bundles/ngx-flowchart.umd.min.js.map +++ b/dist/ngx-flowchart/bundles/ngx-flowchart.umd.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://ngx-flowchart/lib/ngx-flowchart.models.ts","ng://ngx-flowchart/lib/model.service.ts","ng://ngx-flowchart/lib/modelvalidation.service.ts","ng://ngx-flowchart/lib/node-dragging.service.ts","ng://ngx-flowchart/lib/edge-drawing.service.ts","ng://ngx-flowchart/lib/edge-dragging.service.ts","ng://ngx-flowchart/lib/mouseover.service.ts","ng://ngx-flowchart/lib/scrollparent.ts","ng://ngx-flowchart/lib/rectangleselect.service.ts","ng://ngx-flowchart/lib/ngx-flowchart.component.ts","ng://ngx-flowchart/lib/magnet.directive.ts","ng://ngx-flowchart/lib/connector.directive.ts","ng://ngx-flowchart/lib/node.component.ts","ng://ngx-flowchart/lib/default-node.component.ts","ng://ngx-flowchart/lib/ngx-flowchart.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__values","o","m","Symbol","iterator","next","value","done","FC_NODE_COMPONENT_CONFIG","InjectionToken","FlowchartConstants","htmlPrefix","leftConnectorType","rightConnectorType","curvedStyle","lineStyle","dragAnimationRepaint","dragAnimationShadow","canvasClass","selectedClass","editClass","activeClass","hoverClass","draggingClass","edgeClass","edgeLabelClass","connectorClass","magnetClass","nodeClass","nodeOverlayClass","leftConnectorClass","rightConnectorClass","canvasResizeThreshold","canvasResizeStep","BaseError","Error","ModelvalidationError","_super","message","_this","tslib_1.__extends","fcTopSort","graph","adjacentList","nodes","forEach","node","id","incoming","outgoing","edges","edge","sourceNode","filter","connectors","some","connector","source","destinationNode","destination","push","orderedNodes","sourceNodes","_c","tslib_1.__values","keys","_d","pop","splice","hasEdges","_e","_f","FcModelService","modelValidation","model","modelChanged","cd","selectedObjects","dropNode","createEdge","edgeAddedCallback","nodeRemovedCallback","edgeRemovedCallback","canvasHtmlElement","svgHtmlElement","connectorsHtmlElements","nodesHtmlElements","dragImage","debouncer","Subject","validateModel","event","of","label","ConnectorsModel","NodesModel","EdgesModel","pipe","debounceTime","subscribe","emit","notifyModelChanged","detectChanges","setTimeout","selectObject","object","isEditable","indexOf","deselectObject","index","toggleSelectedObject","isSelectedObject","selectAll","readonly","select","deselectAll","isEditObject","inRectBox","x","y","rectBox","left","right","top","bottom","getItemInfoAtPoint","getNodeAtPoint","getEdgeAtPoint","_b","nodeElementBox","getHtmlElement","getBoundingClientRect","document","elementFromPoint","edgeIndex","startsWith","Number","substring","selectAllInRect","width","height","isSelected","deselect","canvasElementBox","start","sourceCoord","end","destCoord","deleteSelected","getSelectedEdges","delete","getSelectedNodes","undefined","dropTargetId","isDropSource","getDragImage","Image","src","style","visibility","registerCallbacks","AbstractFcModel","modelService","toggleSelected","isEdit","getConnector","connectorId","e_3","setHtmlElement","element","_getCoords","centered","canvas","connectorElementBox","coords","Math","round","offsetWidth","offsetHeight","getCoords","getCenteredCoord","getConnectorsByType","type","_addConnector","validateNode","error","connectorIds","getConnectorIds","handleClicked","ctrlKey","_addNode","validateNodes","map","getNodeByConnectorId","nodeId","ready","handleEdgeMouseClick","putEdge","_addEdge","sourceConnector","destConnector","validateConnector","validateEdges","concat","created","FcModelValidationService","_validateEdges","ids","name","isArray","_validateEdge","edge1","index1","edge2","index2","validateEdge","Injectable","nodeDropScope","dropElement","FcNodeDraggingService","applyFunction","automaticResize","dragAnimation","nodeDraggingScope","shadowDragStarted","draggedNodes","shadowElements","dragOffsets","draggedElements","destinationHtmlElements","oldDisplayStyles","getCoordinate","coordinate","max","min","getXCoordinate","getYCoordinate","resizeCanvas","draggedNode","nodeElement","canvasElement","isDraggingNode","includes","dragstart","elements","selectedNodes","selectedNodes_1","selectedNodes_1_1","selectedNode","$","offsetsX","offsetsY","elements_1","elements_1_1","parseInt","css","clientX","clientY","originalEvent","parentNode","removeChild","cloneNode","offset","offsetInfo","offsetX","offsetY","position","pointerEvents","zIndex","body","appendChild","dropNodeInfo","dataTransfer","setData","JSON","stringify","setDragImage","target","display","dragOffset","shadowElement","targetInnerNode","children","backgroundColor","drop","preventDefault","infoText","getData","parse","e","dragover","dragend","replace","FcEdgeDrawingService","getEdgeDAttribute","pt1","pt2","dAddribute","sourceTangent","computeEdgeSourceTangent","destinationTangent","computeEdgeDestinationTangent","getEdgeCenter","computeEdgeTangentOffset","FcEdgeDraggingService","edgeDrawingService","isValidEdgeCallback","edgeStyle","edgeDragging","isDragging","dragPoint1","dragPoint2","draggedEdgeSource","destinationHtmlElement","oldDisplayStyle","swapConnector","dragLabel","prevEdge","this_1","gElement","querySelectorAll","pathElement","find","circleElement","attr","stopPropagation","magnetActive","dragoverConnector","dragleaveMagnet","dragoverMagnet","edge_1","targetConnector","FcMouseOverService","mouseoverscope","nodeMouseOver","nodeMouseOut","connectorMouseEnter","connectorMouseLeave","edgeMouseEnter","edgeMouseLeave","regex","prop","getComputedStyle","getPropertyValue","scroll","test","scrollparent","FcRectangleSelectService","selectElement","selectRect","x1","x2","y1","y2","$canvasElement","$scrollParent","mousedown","metaKey","button","hidden","pageX","pageY","updateSelectRect","mousemove","updateScroll","rect","topScroll","scroll_1","scrollTop","bottomScroll","scroll_2","leftScroll","scroll_3","scrollLeft","rightScroll","scroll_4","mouseup","selectObjects","x3","x4","y3","y4","NgxFlowchartComponent","elementRef","differs","zone","EventEmitter","fitModelSizeByDefaultValue","flowchartConstants","nodesDiffer","item","edgesDiffer","arrowDefId","random","arrowDefIdSelected","defineProperty","coerceBooleanProperty","ngOnInit","nodeHeight","nodeWidth","userCallbacks","key","userNodeCallbacks","nodeCallbacks","nativeElement","edgeAdded","nodeRemoved","edgeRemoved","querySelector","run","bind","nodeDraggingService","edgeDraggingService","isValidEdge","mouseoverService","rectangleSelectService","callbacks","nodeDragstart","nodeDragend","edgeDragstart","edgeDragend","edgeDrop","edgeDragoverConnector","edgeDragoverMagnet","edgeDragleaveMagnet","nodeClicked","adjustCanvasSize","fitModelSizeByDefault","ngDoCheck","nodesChange","diff","edgesChange","nodesChanged_1","edgesChanged_1","forEachAddedItem","forEachRemovedItem","fit","maxX","maxY","canvasClick","edgeMouseDown","edgeClick","edgeRemove","edgeEdit","edgeDoubleClick","edgeMouseOver","Component","args","selector","template","changeDetection","ChangeDetectionStrategy","OnPush","ElementRef","IterableDiffers","ChangeDetectorRef","NgZone","HostBinding","Input","Output","HostListener","FcMagnetDirective","addClass","dragleave","Directive","FcConnectorDirective","modelservice","updateConnectorClass","ngOnChanges","changes","updateConnector","propName","change","firstChange","currentValue","previousValue","mouseOverConnector","removeClass","mouseenter","mouseleave","FcNodeContainerComponent","nodeComponentConfig","componentFactoryResolver","nodeEdit","doubleClick","mouseDown","mouseEnter","mouseLeave","updateNodeClass","nodeContentContainer","clear","componentFactory","resolveComponentFactory","nodeComponentType","componentRef","createComponent","nodeComponent","instance","updateNodeComponent","updateNode","toggleClass","selected","edit","underMouse","dragging","clazz","set","click","mouseover","mouseout","Inject","ComponentFactoryResolver","ViewChild","read","ViewContainerRef","static","FcNodeComponent","DefaultFcNodeComponent","ɵ0$1","NgxFlowchartModule","NgModule","entryComponents","declarations","providers","provide","useValue","imports","CommonModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Observable } from 'rxjs';\nimport { InjectionToken, Type } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\nexport const FC_NODE_COMPONENT_CONFIG = new InjectionToken('fc-node.component.config');\n\nexport interface FcNodeComponentConfig {\n nodeComponentType: Type;\n}\n\nconst htmlPrefix = 'fc';\nconst leftConnectorType = 'leftConnector';\nconst rightConnectorType = 'rightConnector';\n\nexport const FlowchartConstants = {\n htmlPrefix,\n leftConnectorType,\n rightConnectorType,\n curvedStyle: 'curved',\n lineStyle: 'line',\n dragAnimationRepaint: 'repaint',\n dragAnimationShadow: 'shadow',\n canvasClass: htmlPrefix + '-canvas',\n selectedClass: htmlPrefix + '-selected',\n editClass: htmlPrefix + '-edit',\n activeClass: htmlPrefix + '-active',\n hoverClass: htmlPrefix + '-hover',\n draggingClass: htmlPrefix + '-dragging',\n edgeClass: htmlPrefix + '-edge',\n edgeLabelClass: htmlPrefix + '-edge-label',\n connectorClass: htmlPrefix + '-connector',\n magnetClass: htmlPrefix + '-magnet',\n nodeClass: htmlPrefix + '-node',\n nodeOverlayClass: htmlPrefix + '-node-overlay',\n leftConnectorClass: htmlPrefix + '-' + leftConnectorType + 's',\n rightConnectorClass: htmlPrefix + '-' + rightConnectorType + 's',\n canvasResizeThreshold: 200,\n canvasResizeStep: 200\n};\n\n\nexport interface FcCoords {\n x?: number;\n y?: number;\n}\n\nexport interface FcRectBox {\n top: number;\n left: number;\n right: number;\n bottom: number;\n}\n\nexport interface FcConnector {\n id: string;\n type: string;\n}\n\nexport interface FcNode extends FcCoords {\n id: string;\n name: string;\n connectors: Array;\n readonly?: boolean;\n [key: string]: any;\n}\n\nexport interface FcEdge {\n label?: string;\n source?: string;\n destination?: string;\n active?: boolean;\n}\n\nexport interface FcItemInfo {\n node?: FcNode;\n edge?: FcEdge;\n}\n\nexport interface FcModel {\n nodes: Array;\n edges: Array;\n}\n\nexport interface UserCallbacks {\n dropNode?: (event: Event, node: FcNode) => void;\n createEdge?: (event: Event, edge: FcEdge) => Observable;\n edgeAdded?: (edge: FcEdge) => void;\n nodeRemoved?: (node: FcNode) => void;\n edgeRemoved?: (edge: FcEdge) => void;\n edgeDoubleClick?: (event: MouseEvent, edge: FcEdge) => void;\n edgeMouseOver?: (event: MouseEvent, edge: FcEdge) => void;\n isValidEdge?: (source: FcConnector, destination: FcConnector) => boolean;\n edgeEdit?: (event: Event, edge: FcEdge) => void;\n nodeCallbacks?: UserNodeCallbacks;\n}\n\nexport interface UserNodeCallbacks {\n nodeEdit?: (event: MouseEvent, node: FcNode) => void;\n doubleClick?: (event: MouseEvent, node: FcNode) => void;\n mouseDown?: (event: MouseEvent, node: FcNode) => void;\n mouseEnter?: (event: MouseEvent, node: FcNode) => void;\n mouseLeave?: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcCallbacks {\n nodeDragstart: (event: DragEvent, node: FcNode) => void;\n nodeDragend: (event: DragEvent) => void;\n edgeDragstart: (event: DragEvent, connector: FcConnector) => void;\n edgeDragend: (event: DragEvent) => void;\n edgeDrop: (event: DragEvent, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: DragEvent) => void;\n nodeMouseOver: (event: MouseEvent, node: FcNode) => void;\n nodeMouseOut: (event: MouseEvent, node: FcNode) => void;\n connectorMouseEnter: (event: MouseEvent, connector: FcConnector) => void;\n connectorMouseLeave: (event: MouseEvent, connector: FcConnector) => void;\n nodeClicked: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcAdjacentList {\n [id: string]: {\n incoming: number;\n outgoing: Array;\n };\n}\n\nclass BaseError {\n constructor() {\n Error.apply(this, arguments);\n }\n}\n\nBaseError.prototype = new Error();\n\nexport class ModelvalidationError extends BaseError {\n constructor(public message: string) {\n super();\n }\n}\n\nexport function fcTopSort(graph: FcModel): Array | null {\n const adjacentList: FcAdjacentList = {};\n graph.nodes.forEach((node) => {\n adjacentList[node.id] = {incoming: 0, outgoing: []};\n });\n graph.edges.forEach((edge) => {\n const sourceNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.source;\n });\n })[0];\n const destinationNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.destination;\n });\n })[0];\n adjacentList[sourceNode.id].outgoing.push(destinationNode.id);\n adjacentList[destinationNode.id].incoming++;\n });\n const orderedNodes: string[] = [];\n const sourceNodes: string[] = [];\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming === 0) {\n sourceNodes.push(node);\n }\n }\n while (sourceNodes.length !== 0) {\n const sourceNode = sourceNodes.pop();\n for (let i = 0; i < adjacentList[sourceNode].outgoing.length; i++) {\n const destinationNode = adjacentList[sourceNode].outgoing[i];\n adjacentList[destinationNode].incoming--;\n if (adjacentList[destinationNode].incoming === 0) {\n sourceNodes.push(destinationNode);\n }\n adjacentList[sourceNode].outgoing.splice(i, 1);\n i--;\n }\n orderedNodes.push(sourceNode);\n }\n let hasEdges = false;\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming !== 0) {\n hasEdges = true;\n }\n }\n if (hasEdges) {\n return null;\n } else {\n return orderedNodes;\n }\n}\n","import { FcModelValidationService } from './modelvalidation.service';\nimport { FcConnector, FcCoords, FcEdge, FcItemInfo, FcModel, FcNode, FcRectBox } from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { ChangeDetectorRef, EventEmitter } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\nexport class FcModelService {\n\n modelValidation: FcModelValidationService;\n model: FcModel;\n cd: ChangeDetectorRef;\n selectedObjects: any[];\n\n connectorsHtmlElements: HtmlElementMap = {};\n nodesHtmlElements: HtmlElementMap = {};\n canvasHtmlElement: HTMLElement = null;\n dragImage: HTMLImageElement = null;\n svgHtmlElement: SVGElement = null;\n\n dropNode: (event: Event, node: FcNode) => void;\n createEdge: (event: Event, edge: FcEdge) => Observable;\n edgeAddedCallback: (edge: FcEdge) => void;\n nodeRemovedCallback: (node: FcNode) => void;\n edgeRemovedCallback: (edge: FcEdge) => void;\n\n dropTargetId: string;\n\n private readonly modelChanged: EventEmitter;\n private readonly debouncer = new Subject();\n\n connectors: ConnectorsModel;\n nodes: NodesModel;\n edges: EdgesModel;\n\n constructor(modelValidation: FcModelValidationService,\n model: FcModel,\n modelChanged: EventEmitter,\n cd: ChangeDetectorRef,\n selectedObjects: any[],\n dropNode: (event: Event, node: FcNode) => void,\n createEdge: (event: Event, edge: FcEdge) => Observable,\n edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void,\n canvasHtmlElement: HTMLElement,\n svgHtmlElement: SVGElement) {\n\n this.modelValidation = modelValidation;\n this.model = model;\n this.modelChanged = modelChanged;\n this.cd = cd;\n this.canvasHtmlElement = canvasHtmlElement;\n this.svgHtmlElement = svgHtmlElement;\n this.modelValidation.validateModel(this.model);\n this.selectedObjects = selectedObjects;\n\n this.dropNode = dropNode || (() => {});\n this.createEdge = createEdge || ((event, edge) => of({...edge, label: 'label'}));\n this.edgeAddedCallback = edgeAddedCallback || (() => {});\n this.nodeRemovedCallback = nodeRemovedCallback || (() => {});\n this.edgeRemovedCallback = edgeRemovedCallback || (() => {});\n\n this.connectors = new ConnectorsModel(this);\n this.nodes = new NodesModel(this);\n this.edges = new EdgesModel(this);\n\n this.debouncer\n .pipe(debounceTime(100))\n .subscribe(() => this.modelChanged.emit());\n }\n\n public notifyModelChanged() {\n this.debouncer.next();\n }\n\n public detectChanges() {\n setTimeout(() => {\n this.cd.detectChanges();\n }, 0);\n }\n\n public selectObject(object: any) {\n if (this.isEditable()) {\n if (this.selectedObjects.indexOf(object) === -1) {\n this.selectedObjects.push(object);\n }\n }\n }\n\n public deselectObject(object: any) {\n if (this.isEditable()) {\n const index = this.selectedObjects.indexOf(object);\n if (index === -1) {\n throw new Error('Tried to deselect an unselected object');\n }\n this.selectedObjects.splice(index, 1);\n }\n }\n\n public toggleSelectedObject(object: any) {\n if (this.isSelectedObject(object)) {\n this.deselectObject(object);\n } else {\n this.selectObject(object);\n }\n }\n\n public isSelectedObject(object: any): boolean {\n return this.selectedObjects.indexOf(object) !== -1;\n }\n\n public selectAll() {\n this.model.nodes.forEach(node => {\n if (!node.readonly) {\n this.nodes.select(node);\n }\n });\n this.model.edges.forEach(edge => {\n this.edges.select(edge);\n });\n this.detectChanges();\n }\n\n public deselectAll() {\n this.selectedObjects.splice(0, this.selectedObjects.length);\n this.detectChanges();\n }\n\n public isEditObject(object: any): boolean {\n return this.selectedObjects.length === 1 &&\n this.selectedObjects.indexOf(object) !== -1;\n }\n\n private inRectBox(x: number, y: number, rectBox: FcRectBox): boolean {\n return x >= rectBox.left && x <= rectBox.right &&\n y >= rectBox.top && y <= rectBox.bottom;\n }\n\n public getItemInfoAtPoint(x: number, y: number): FcItemInfo {\n return {\n node: this.getNodeAtPoint(x, y),\n edge: this.getEdgeAtPoint(x, y)\n };\n }\n\n public getNodeAtPoint(x: number, y: number): FcNode {\n for (const node of this.model.nodes) {\n const element = this.nodes.getHtmlElement(node.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (x >= nodeElementBox.left && x <= nodeElementBox.right\n && y >= nodeElementBox.top && y <= nodeElementBox.bottom) {\n return node;\n }\n }\n return null;\n }\n\n public getEdgeAtPoint(x: number, y: number): FcEdge {\n const element = document.elementFromPoint(x, y);\n const id = element.id;\n let edgeIndex = -1;\n if (id) {\n if (id.startsWith('fc-edge-path-')) {\n edgeIndex = Number(id.substring('fc-edge-path-'.length));\n } else if (id.startsWith('fc-edge-label-')) {\n edgeIndex = Number(id.substring('fc-edge-label-'.length));\n }\n }\n if (edgeIndex > -1) {\n return this.model.edges[edgeIndex];\n }\n return null;\n }\n\n public selectAllInRect(rectBox: FcRectBox) {\n this.model.nodes.forEach((value) => {\n const element = this.nodes.getHtmlElement(value.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (!value.readonly) {\n const x = nodeElementBox.left + nodeElementBox.width / 2;\n const y = nodeElementBox.top + nodeElementBox.height / 2;\n if (this.inRectBox(x, y, rectBox)) {\n this.nodes.select(value);\n } else {\n if (this.nodes.isSelected(value)) {\n this.nodes.deselect(value);\n }\n }\n }\n });\n const canvasElementBox = this.canvasHtmlElement.getBoundingClientRect();\n this.model.edges.forEach((value) => {\n const start = this.edges.sourceCoord(value);\n const end = this.edges.destCoord(value);\n const x = (start.x + end.x) / 2 + canvasElementBox.left;\n const y = (start.y + end.y) / 2 + canvasElementBox.top;\n if (this.inRectBox(x, y, rectBox)) {\n this.edges.select(value);\n } else {\n if (this.edges.isSelected(value)) {\n this.edges.deselect(value);\n }\n }\n });\n }\n\n public deleteSelected() {\n const edgesToDelete = this.edges.getSelectedEdges();\n edgesToDelete.forEach((edge) => {\n this.edges.delete(edge);\n });\n const nodesToDelete = this.nodes.getSelectedNodes();\n nodesToDelete.forEach((node) => {\n this.nodes.delete(node);\n });\n }\n\n public isEditable(): boolean {\n return this.dropTargetId === undefined;\n }\n\n public isDropSource(): boolean {\n return this.dropTargetId !== undefined;\n }\n\n public getDragImage(): HTMLImageElement {\n if (!this.dragImage) {\n this.dragImage = new Image();\n this.dragImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n this.dragImage.style.visibility = 'hidden';\n }\n return this.dragImage;\n }\n\n public registerCallbacks(edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void) {\n this.edgeAddedCallback = edgeAddedCallback;\n this.nodeRemovedCallback = nodeRemovedCallback;\n this.edgeRemovedCallback = edgeRemovedCallback;\n }\n\n}\n\ninterface HtmlElementMap { [id: string]: HTMLElement; }\n\nabstract class AbstractFcModel {\n\n modelService: FcModelService;\n\n protected constructor(modelService: FcModelService) {\n this.modelService = modelService;\n }\n\n public select(object: T) {\n this.modelService.selectObject(object);\n }\n\n public deselect(object: T) {\n this.modelService.deselectObject(object);\n }\n\n public toggleSelected(object: T) {\n this.modelService.toggleSelectedObject(object);\n }\n\n public isSelected(object: T): boolean {\n return this.modelService.isSelectedObject(object);\n }\n\n public isEdit(object: T): boolean {\n return this.modelService.isEditObject(object);\n }\n}\n\nclass ConnectorsModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnector(connectorId: string): FcConnector {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n for (const connector of node.connectors) {\n if (connector.id === connectorId) {\n return connector;\n }\n }\n }\n }\n\n public getHtmlElement(connectorId: string): HTMLElement {\n return this.modelService.connectorsHtmlElements[connectorId];\n }\n\n public setHtmlElement(connectorId: string, element: HTMLElement) {\n this.modelService.connectorsHtmlElements[connectorId] = element;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const element = this.getHtmlElement(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (element === null || element === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n const connectorElementBox = element.getBoundingClientRect();\n const canvasElementBox = canvas.getBoundingClientRect();\n let coords: FcCoords = {\n x: connectorElementBox.left - canvasElementBox.left,\n y: connectorElementBox.top - canvasElementBox.top\n };\n if (centered) {\n coords = {\n x: Math.round(coords.x + element.offsetWidth / 2),\n y: Math.round(coords.y + element.offsetHeight / 2)\n };\n }\n return coords;\n }\n\n public getCoords(connectorId: string): FcCoords {\n return this._getCoords(connectorId, false);\n }\n\n public getCenteredCoord(connectorId: string): FcCoords {\n return this._getCoords(connectorId, true);\n }\n}\n\nclass NodesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnectorsByType(node: FcNode, type: string): Array {\n return node.connectors.filter((connector) => {\n return connector.type === type;\n });\n }\n\n private _addConnector(node: FcNode, connector: FcConnector) {\n node.connectors.push(connector);\n try {\n this.modelService.modelValidation.validateNode(node);\n } catch (error) {\n node.connectors.splice(node.connectors.indexOf(connector), 1);\n throw error;\n }\n }\n\n public delete(node: FcNode) {\n if (this.isSelected(node)) {\n this.deselect(node);\n }\n const model = this.modelService.model;\n const index = model.nodes.indexOf(node);\n if (index === -1) {\n if (node === undefined) {\n throw new Error('Passed undefined');\n }\n throw new Error('Tried to delete not existing node');\n }\n const connectorIds = this.getConnectorIds(node);\n for (let i = 0; i < model.edges.length; i++) {\n const edge = model.edges[i];\n if (connectorIds.indexOf(edge.source) !== -1 || connectorIds.indexOf(edge.destination) !== -1) {\n this.modelService.edges.delete(edge);\n i--;\n }\n }\n model.nodes.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.nodeRemovedCallback(node);\n }\n\n public getSelectedNodes(): Array {\n const model = this.modelService.model;\n return model.nodes.filter((node) => {\n return this.modelService.nodes.isSelected(node);\n });\n }\n\n public handleClicked(node: FcNode, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.nodes.toggleSelected(node);\n } else {\n this.modelService.deselectAll();\n this.modelService.nodes.select(node);\n }\n }\n\n private _addNode(node: FcNode) {\n const model = this.modelService.model;\n try {\n model.nodes.push(node);\n this.modelService.modelValidation.validateNodes(model.nodes);\n } catch (error) {\n model.nodes.splice(model.nodes.indexOf(node), 1);\n throw error;\n }\n }\n\n public getConnectorIds(node: FcNode): Array {\n return node.connectors.map((connector) => {\n return connector.id;\n });\n }\n\n public getNodeByConnectorId(connectorId: string): FcNode {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n const connectorIds = this.getConnectorIds(node);\n if (connectorIds.indexOf(connectorId) > -1) {\n return node;\n }\n }\n return null;\n }\n\n public getHtmlElement(nodeId: string): HTMLElement {\n return this.modelService.nodesHtmlElements[nodeId];\n }\n\n public setHtmlElement(nodeId: string, element: HTMLElement) {\n this.modelService.nodesHtmlElements[nodeId] = element;\n this.modelService.detectChanges();\n }\n\n}\n\nclass EdgesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public ready(edge: FcEdge): boolean {\n const source = this.modelService.connectors.getHtmlElement(edge.source);\n const destination = this.modelService.connectors.getHtmlElement(edge.destination);\n return source !== undefined && destination !== undefined;\n }\n\n public sourceCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.source);\n }\n\n public destCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.destination);\n }\n\n public delete(edge: FcEdge) {\n const model = this.modelService.model;\n const index = model.edges.indexOf(edge);\n if (index === -1) {\n throw new Error('Tried to delete not existing edge');\n }\n if (this.isSelected(edge)) {\n this.deselect(edge);\n }\n model.edges.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.edgeRemovedCallback(edge);\n }\n\n public getSelectedEdges(): Array {\n const model = this.modelService.model;\n return model.edges.filter((edge) => {\n return this.modelService.edges.isSelected(edge);\n });\n }\n\n public handleEdgeMouseClick(edge: FcEdge, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.edges.toggleSelected(edge);\n } else {\n this.modelService.deselectAll();\n this.modelService.edges.select(edge);\n }\n }\n\n public putEdge(edge: FcEdge) {\n const model = this.modelService.model;\n model.edges.push(edge);\n this.modelService.notifyModelChanged();\n }\n\n public _addEdge(event: Event, sourceConnector: FcConnector, destConnector: FcConnector, label: string) {\n this.modelService.modelValidation.validateConnector(sourceConnector);\n this.modelService.modelValidation.validateConnector(destConnector);\n const edge: FcEdge = {};\n edge.source = sourceConnector.id;\n edge.destination = destConnector.id;\n edge.label = label;\n const model = this.modelService.model;\n this.modelService.modelValidation.validateEdges(model.edges.concat([edge]), model.nodes);\n this.modelService.createEdge(event, edge).subscribe(\n (created) => {\n model.edges.push(created);\n this.modelService.notifyModelChanged();\n this.modelService.edgeAddedCallback(created);\n }\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FcConnector, FcEdge, FcModel, FcNode, fcTopSort, ModelvalidationError } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcModelValidationService {\n\n constructor() { }\n\n public validateModel(model: FcModel): FcModel {\n this.validateNodes(model.nodes);\n this._validateEdges(model.edges, model.nodes);\n return model;\n }\n\n public validateNodes(nodes: Array): Array {\n const ids: string[] = [];\n nodes.forEach((node) => {\n this.validateNode(node);\n if (ids.indexOf(node.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n ids.push(node.id);\n });\n const connectorIds: string[] = [];\n nodes.forEach((node) => {\n node.connectors.forEach((connector) => {\n if (connectorIds.indexOf(connector.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n connectorIds.push(connector.id);\n });\n });\n return nodes;\n }\n\n public validateNode(node: FcNode): FcNode {\n if (node.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (typeof node.name !== 'string') {\n throw new ModelvalidationError('Name not valid.');\n }\n if (typeof node.x !== 'number' || node.x < 0 || Math.round(node.x) !== node.x) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (typeof node.y !== 'number' || node.y < 0 || Math.round(node.y) !== node.y) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (!Array.isArray(node.connectors)) {\n throw new ModelvalidationError('Connectors not valid.');\n }\n node.connectors.forEach((connector) => {\n this.validateConnector(connector);\n });\n return node;\n }\n\n private _validateEdges(edges: Array, nodes: Array): Array {\n edges.forEach((edge) => {\n this._validateEdge(edge, nodes);\n });\n edges.forEach((edge1, index1) => {\n edges.forEach((edge2, index2) => {\n if (index1 !== index2) {\n if ((edge1.source === edge2.source && edge1.destination === edge2.destination) ||\n (edge1.source === edge2.destination && edge1.destination === edge2.source)) {\n throw new ModelvalidationError('Duplicated edge.');\n }\n }\n });\n });\n if (fcTopSort({nodes, edges}) === null) {\n throw new ModelvalidationError('Graph has a circle.');\n }\n return edges;\n }\n\n public validateEdges(edges: Array, nodes: Array): Array {\n this.validateNodes(nodes);\n return this._validateEdges(edges, nodes);\n }\n\n private _validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n if (edge.source === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n if (edge.destination === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (edge.source === edge.destination) {\n throw new ModelvalidationError('Edge with same source and destination connectors.');\n }\n const sourceNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.source))[0];\n if (sourceNode === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n const destinationNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.destination))[0];\n if (destinationNode === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (sourceNode === destinationNode) {\n throw new ModelvalidationError('Edge with same source and destination nodes.');\n }\n return edge;\n }\n\n public validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n this.validateNodes(nodes);\n return this._validateEdge(edge, nodes);\n }\n\n public validateConnector(connector: FcConnector): FcConnector {\n if (connector.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (connector.type === undefined || connector.type === null || typeof connector.type !== 'string') {\n throw new ModelvalidationError('Type not valid.');\n }\n return connector;\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcCoords, FcNode, FlowchartConstants } from './ngx-flowchart.models';\n\nconst nodeDropScope: NodeDropScope = {\n dropElement: null\n};\n\nexport class FcNodeDraggingService {\n\n nodeDraggingScope: NodeDraggingScope = {\n shadowDragStarted: false,\n dropElement: null,\n draggedNodes: [],\n shadowElements: []\n };\n\n private dragOffsets: FcCoords[] = [];\n private draggedElements: HTMLElement[] = [];\n\n private destinationHtmlElements: HTMLElement[] = [];\n private oldDisplayStyles: string[] = [];\n\n private readonly modelService: FcModelService;\n private readonly automaticResize: boolean;\n private readonly dragAnimation: string;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n applyFunction: (fn: (...args: any[]) => T) => T,\n automaticResize: boolean, dragAnimation: string) {\n this.modelService = modelService;\n this.automaticResize = automaticResize;\n this.dragAnimation = dragAnimation;\n this.applyFunction = applyFunction;\n }\n\n private getCoordinate(coordinate: number, max: number): number {\n coordinate = Math.max(coordinate, 0);\n coordinate = Math.min(coordinate, max);\n return coordinate;\n }\n\n private getXCoordinate(x: number): number {\n return this.getCoordinate(x, this.modelService.canvasHtmlElement.offsetWidth);\n }\n\n private getYCoordinate(y: number): number {\n return this.getCoordinate(y, this.modelService.canvasHtmlElement.offsetHeight);\n }\n\n private resizeCanvas(draggedNode: FcNode, nodeElement: HTMLElement) {\n if (this.automaticResize && !this.modelService.isDropSource()) {\n const canvasElement = this.modelService.canvasHtmlElement;\n if (canvasElement.offsetWidth < draggedNode.x + nodeElement.offsetWidth + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.width = canvasElement.offsetWidth + FlowchartConstants.canvasResizeStep + 'px';\n }\n if (canvasElement.offsetHeight < draggedNode.y + nodeElement.offsetHeight + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.height = canvasElement.offsetHeight + FlowchartConstants.canvasResizeStep + 'px';\n }\n }\n }\n\n public isDraggingNode(node: FcNode): boolean {\n return this.nodeDraggingScope.draggedNodes.includes(node);\n }\n\n public dragstart(event: DragEvent, node: FcNode) {\n if (node.readonly) {\n return;\n }\n this.dragOffsets.length = 0;\n this.draggedElements.length = 0;\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.nodeDraggingScope.shadowElements.length = 0;\n this.destinationHtmlElements.length = 0;\n this.oldDisplayStyles.length = 0;\n const elements: Array> = [];\n const nodes: Array = [];\n if (this.modelService.nodes.isSelected(node)) {\n const selectedNodes = this.modelService.nodes.getSelectedNodes();\n for (const selectedNode of selectedNodes) {\n const element = $(this.modelService.nodes.getHtmlElement(selectedNode.id));\n elements.push(element);\n nodes.push(selectedNode);\n }\n } else {\n elements.push($(event.target as HTMLElement));\n nodes.push(node);\n }\n const offsetsX: number[] = [];\n const offsetsY: number[] = [];\n for (const element of elements) {\n offsetsX.push(parseInt(element.css('left'), 10) - event.clientX);\n offsetsY.push(parseInt(element.css('top'), 10) - event.clientY);\n }\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n if (this.modelService.isDropSource()) {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n nodeDropScope.dropElement = elements[0][0].cloneNode(true) as NodeDropElement;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n nodeDropScope.dropElement.offsetInfo = {\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n nodeDropScope.dropElement.style.position = 'absolute';\n nodeDropScope.dropElement.style.pointerEvents = 'none';\n nodeDropScope.dropElement.style.zIndex = '9999';\n\n document.body.appendChild(nodeDropScope.dropElement);\n const dropNodeInfo: DropNodeInfo = {\n node,\n dropTargetId: this.modelService.dropTargetId,\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n originalEvent.dataTransfer.setData('text', JSON.stringify(dropNodeInfo));\n\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n const target: HTMLElement = event.target as HTMLElement;\n this.destinationHtmlElements.push(target);\n this.oldDisplayStyles.push(target.style.display);\n target.style.display = 'none';\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n return;\n }\n this.nodeDraggingScope.draggedNodes = nodes;\n for (let i = 0; i < elements.length; i++) {\n this.draggedElements.push(elements[i][0]);\n this.dragOffsets.push(\n {\n x: offsetsX[i],\n y: offsetsY[i]\n }\n );\n }\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n for (let i = 0; i < this.draggedElements.length; i++) {\n const dragOffset = this.dragOffsets[i];\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = $(`
` +\n `

${draggedNode.name}

`);\n const targetInnerNode = $(this.draggedElements[i]).children()[0];\n shadowElement.children()[0].style.backgroundColor = targetInnerNode.style.backgroundColor;\n this.nodeDraggingScope.shadowElements.push(shadowElement);\n this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[i][0]);\n }\n }\n originalEvent.dataTransfer.setData('text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n for (let i = 0; i < this.draggedElements.length; i++) {\n this.destinationHtmlElements.push(this.draggedElements[i]);\n this.oldDisplayStyles.push(this.destinationHtmlElements[i].style.display);\n this.destinationHtmlElements[i].style.display = 'none';\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: DragEvent): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n const infoText = originalEvent.dataTransfer.getData('text');\n if (infoText) {\n let dropNodeInfo: DropNodeInfo = null;\n try {\n dropNodeInfo = JSON.parse(infoText);\n } catch (e) {}\n if (dropNodeInfo && dropNodeInfo.dropTargetId) {\n if (this.modelService.canvasHtmlElement.id &&\n this.modelService.canvasHtmlElement.id === dropNodeInfo.dropTargetId) {\n dropNode = dropNodeInfo.node;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n const x = event.clientX - offset.left;\n const y = event.clientY - offset.top;\n dropNode.x = Math.round(this.getXCoordinate(dropNodeInfo.offsetX + x));\n dropNode.y = Math.round(this.getYCoordinate(dropNodeInfo.offsetY + y));\n }\n }\n }\n if (dropNode) {\n this.modelService.dropNode(event, dropNode);\n event.preventDefault();\n return false;\n } else if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = Math.round(this.getXCoordinate(dragOffset.x + event.clientX));\n draggedNode.y = Math.round(this.getYCoordinate(dragOffset.y + event.clientY));\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n }\n\n public dragover(event: DragEvent) {\n if (nodeDropScope.dropElement) {\n const offsetInfo = nodeDropScope.dropElement.offsetInfo;\n nodeDropScope.dropElement.style.left = (offsetInfo.offsetX + event.clientX) + 'px';\n nodeDropScope.dropElement.style.top = (offsetInfo.offsetY + event.clientY) + 'px';\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n this.destinationHtmlElements[0].style.display = this.oldDisplayStyles[0];\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n event.preventDefault();\n return;\n }\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return;\n }\n if (!this.nodeDraggingScope.draggedNodes.length) {\n event.preventDefault();\n return;\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = this.getXCoordinate(dragOffset.x + event.clientX);\n draggedNode.y = this.getYCoordinate(dragOffset.y + event.clientY);\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n this.destinationHtmlElements[i].style.display = this.oldDisplayStyles[i];\n }\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n this.nodeDraggingScope.shadowElements[i].css('left', this.getXCoordinate(dragOffset.x + event.clientX) + 'px');\n this.nodeDraggingScope.shadowElements[i].css('top', this.getYCoordinate(dragOffset.y + event.clientY) + 'px');\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n }\n }\n }\n\n public dragend(event: DragEvent) {\n this.applyFunction(() => {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n if (this.modelService.isDropSource()) {\n return;\n }\n if (this.nodeDraggingScope.shadowElements.length) {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = this.nodeDraggingScope.shadowElements[i];\n draggedNode.x = parseInt(shadowElement.css('left').replace('px', ''), 10);\n draggedNode.y = parseInt(shadowElement.css('top').replace('px', ''), 10);\n this.modelService.canvasHtmlElement.removeChild(shadowElement[0]);\n }\n this.nodeDraggingScope.shadowElements.length = 0;\n this.modelService.notifyModelChanged();\n }\n\n if (this.nodeDraggingScope.draggedNodes.length) {\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.draggedElements.length = 0;\n this.dragOffsets.length = 0;\n }\n });\n }\n\n}\n\nexport interface NodeDraggingScope {\n draggedNodes: Array;\n shadowElements: Array>;\n shadowDragStarted: boolean;\n dropElement: HTMLElement;\n}\n\nexport interface NodeDropElement extends HTMLElement {\n offsetInfo?: {\n offsetX: number;\n offsetY: number;\n };\n}\n\nexport interface NodeDropScope {\n dropElement: NodeDropElement;\n}\n\nexport interface DropNodeInfo {\n node: FcNode;\n dropTargetId: string;\n offsetX: number;\n offsetY: number;\n}\n","import { Injectable } from '@angular/core';\nimport { FcCoords, FlowchartConstants } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcEdgeDrawingService {\n\n constructor() {\n }\n\n public getEdgeDAttribute(pt1: FcCoords, pt2: FcCoords, style: string): string {\n let dAddribute = `M ${pt1.x}, ${pt1.y} `;\n if (style === FlowchartConstants.curvedStyle) {\n const sourceTangent = this.computeEdgeSourceTangent(pt1, pt2);\n const destinationTangent = this.computeEdgeDestinationTangent(pt1, pt2);\n dAddribute += `C ${sourceTangent.x}, ${sourceTangent.y} ${(destinationTangent.x - 50)}, ${destinationTangent.y} ${pt2.x}, ${pt2.y}`;\n } else {\n dAddribute += `L ${pt2.x}, ${pt2.y}`;\n }\n return dAddribute;\n }\n\n public getEdgeCenter(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: (pt1.x + pt2.x) / 2,\n y: (pt1.y + pt2.y) / 2\n };\n }\n\n private computeEdgeTangentOffset(pt1: FcCoords, pt2: FcCoords): number {\n return (pt2.y - pt1.y) / 2;\n }\n\n private computeEdgeSourceTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt1.x,\n y: pt1.y + this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n private computeEdgeDestinationTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt2.x,\n y: pt2.y - this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcConnector, FcCoords, FcEdge, FcModel, FlowchartConstants, ModelvalidationError } from './ngx-flowchart.models';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcModelValidationService } from './modelvalidation.service';\n\nexport class FcEdgeDraggingService {\n\n edgeDragging: EdgeDragging = {\n isDragging: false,\n dragPoint1: null,\n dragPoint2: null,\n shadowDragStarted: false\n };\n\n private draggedEdgeSource: FcConnector = null;\n private dragOffset: FcCoords = {};\n private destinationHtmlElement: HTMLElement = null;\n private oldDisplayStyle = '';\n\n private readonly modelValidation: FcModelValidationService;\n private readonly edgeDrawingService: FcEdgeDrawingService;\n private readonly modelService: FcModelService;\n private readonly model: FcModel;\n private readonly isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n private readonly dragAnimation: string;\n private readonly edgeStyle: string;\n\n constructor(modelValidation: FcModelValidationService,\n edgeDrawingService: FcEdgeDrawingService,\n modelService: FcModelService,\n model: FcModel,\n isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean,\n applyFunction: (fn: (...args: any[]) => T) => T,\n dragAnimation: string,\n edgeStyle: string) {\n this.modelValidation = modelValidation;\n this.edgeDrawingService = edgeDrawingService;\n this.modelService = modelService;\n this.model = model;\n this.isValidEdgeCallback = isValidEdgeCallback || (() => true);\n this.applyFunction = applyFunction;\n this.dragAnimation = dragAnimation;\n this.edgeStyle = edgeStyle;\n }\n\n public dragstart(event: DragEvent, connector: FcConnector) {\n let swapConnector: FcConnector;\n let dragLabel: string;\n let prevEdge: FcEdge;\n if (connector.type === FlowchartConstants.leftConnectorType) {\n for (const edge of this.model.edges) {\n if (edge.destination === connector.id) {\n swapConnector = this.modelService.connectors.getConnector(edge.source);\n dragLabel = edge.label;\n prevEdge = edge;\n this.applyFunction(() => {\n this.modelService.edges.delete(edge);\n });\n break;\n }\n }\n }\n this.edgeDragging.isDragging = true;\n if (swapConnector !== undefined) {\n this.draggedEdgeSource = swapConnector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(swapConnector.id);\n this.edgeDragging.dragLabel = dragLabel;\n this.edgeDragging.prevEdge = prevEdge;\n } else {\n this.draggedEdgeSource = connector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(connector.id);\n }\n const canvas = this.modelService.canvasHtmlElement;\n if (!canvas) {\n throw new Error('No canvas while edgedraggingService found.');\n }\n this.dragOffset.x = -canvas.getBoundingClientRect().left;\n this.dragOffset.y = -canvas.getBoundingClientRect().top;\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n\n originalEvent.dataTransfer.setData('Text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n this.destinationHtmlElement = event.target as HTMLElement;\n this.oldDisplayStyle = this.destinationHtmlElement.style.display;\n this.destinationHtmlElement.style.display = 'none';\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.shadowDragStarted = true;\n }\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.edgeDragging.gElement === undefined) {\n this.edgeDragging.gElement = $(document.querySelectorAll('.shadow-svg-class'));\n this.edgeDragging.pathElement = $(document.querySelectorAll('.shadow-svg-class')).find('path');\n this.edgeDragging.circleElement = $(document.querySelectorAll('.shadow-svg-class')).find('circle');\n }\n\n this.edgeDragging.gElement.css('display', 'block');\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n }\n event.stopPropagation();\n }\n\n public dragover(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n if (!this.edgeDragging.magnetActive && this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n if (this.edgeDragging.shadowDragStarted) {\n this.applyFunction(() => {\n this.edgeDragging.shadowDragStarted = false;\n });\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n });\n }\n }\n }\n\n public dragoverConnector(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n }\n }\n\n public dragleaveMagnet(event: DragEvent) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n\n this.edgeDragging.magnetActive = true;\n\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n event.preventDefault();\n event.stopPropagation();\n return false;\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n event.preventDefault();\n event.stopPropagation();\n return false;\n });\n }\n }\n }\n }\n\n public dragend(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n this.edgeDragging.isDragging = false;\n this.edgeDragging.dragPoint1 = null;\n this.edgeDragging.dragPoint2 = null;\n this.edgeDragging.dragLabel = null;\n event.stopPropagation();\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.gElement.css('display', 'none');\n }\n if (this.edgeDragging.prevEdge) {\n const edge = this.edgeDragging.prevEdge;\n this.edgeDragging.prevEdge = null;\n this.applyFunction(() => {\n this.modelService.edges.putEdge(edge);\n });\n }\n }\n }\n\n public drop(event: DragEvent, targetConnector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: targetConnector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n\n if (this.isValidEdgeCallback(this.draggedEdgeSource, targetConnector)) {\n this.edgeDragging.prevEdge = null;\n this.modelService.edges._addEdge(event, this.draggedEdgeSource, targetConnector, this.edgeDragging.dragLabel);\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n }\n }\n}\n\nexport interface EdgeDragging {\n isDragging: boolean;\n shadowDragStarted: boolean;\n dragPoint1: FcCoords;\n dragPoint2: FcCoords;\n dragLabel?: string;\n prevEdge?: FcEdge;\n magnetActive?: boolean;\n gElement?: JQuery;\n pathElement?: JQuery;\n circleElement?: JQuery;\n}\n","import { FcConnector, FcEdge, FcNode } from './ngx-flowchart.models';\n\nexport class FcMouseOverService {\n\n mouseoverscope: MouseOverScope = {\n connector: null,\n edge: null,\n node: null\n };\n\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(applyFunction: (fn: (...args: any[]) => T) => T) {\n this.applyFunction = applyFunction;\n }\n\n public nodeMouseOver(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = node;\n });\n }\n\n public nodeMouseOut(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = null;\n });\n }\n\n public connectorMouseEnter(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = connector;\n });\n }\n\n public connectorMouseLeave(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = null;\n });\n }\n\n public edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = edge;\n }\n\n public edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = null;\n }\n}\n\nexport interface MouseOverScope {\n connector: FcConnector;\n edge: FcEdge;\n node: FcNode;\n}\n","const regex = /(auto|scroll)/;\n\nconst style = (node: Element, prop: string): string =>\n getComputedStyle(node, null).getPropertyValue(prop);\n\nconst scroll = (node: Element) =>\n regex.test(\n style(node, 'overflow') +\n style(node, 'overflow-y') +\n style(node, 'overflow-x'));\n\nconst scrollparent = (node: HTMLElement): HTMLElement =>\n !node || node === document.body\n ? document.body\n : scroll(node)\n ? node\n : scrollparent(node.parentNode as HTMLElement);\n\nexport default scrollparent;\n","import { FcModelService } from './model.service';\nimport { FcRectBox } from './ngx-flowchart.models';\nimport scrollparent from './scrollparent';\n\ninterface Rectangle {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport class FcRectangleSelectService {\n\n private readonly selectRect: Rectangle = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n\n private readonly modelService: FcModelService;\n private readonly selectElement: HTMLElement;\n private readonly $canvasElement: JQuery;\n private readonly $scrollParent: JQuery;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n selectElement: HTMLElement,\n applyFunction: (fn: (...args: any[]) => T) => T) {\n this.modelService = modelService;\n this.selectElement = selectElement;\n this.$canvasElement = $(this.modelService.canvasHtmlElement);\n this.$scrollParent = $(scrollparent(this.modelService.canvasHtmlElement));\n this.applyFunction = applyFunction;\n }\n\n public mousedown(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && this.selectElement.hidden) {\n this.selectElement.hidden = false;\n const offset = this.$canvasElement.offset();\n this.selectRect.x1 = Math.round(e.pageX - offset.left);\n this.selectRect.y1 = Math.round(e.pageY - offset.top);\n this.selectRect.x2 = this.selectRect.x1;\n this.selectRect.y2 = this.selectRect.y1;\n this.updateSelectRect();\n }\n }\n\n public mousemove(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const offset = this.$canvasElement.offset();\n this.selectRect.x2 = Math.round(e.pageX - offset.left);\n this.selectRect.y2 = Math.round(e.pageY - offset.top);\n this.updateScroll(offset);\n this.updateSelectRect();\n }\n }\n\n private updateScroll(offset: JQuery.Coordinates) {\n const rect = this.$scrollParent[0].getBoundingClientRect();\n const bottom = rect.bottom - offset.top;\n const right = rect.right - offset.left;\n const top = rect.top - offset.top;\n const left = rect.left - offset.left;\n if (this.selectRect.y2 - top < 25) {\n const topScroll = 25 - (this.selectRect.y2 - top);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll - topScroll);\n } else if (bottom - this.selectRect.y2 < 40) {\n const bottomScroll = 40 - (bottom - this.selectRect.y2);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll + bottomScroll);\n }\n if (this.selectRect.x2 - left < 25) {\n const leftScroll = 25 - (this.selectRect.x2 - left);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll - leftScroll);\n } else if (right - this.selectRect.x2 < 40) {\n const rightScroll = 40 - (right - this.selectRect.x2);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll + rightScroll);\n }\n }\n\n public mouseup(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const rectBox = this.selectElement.getBoundingClientRect() as FcRectBox;\n this.selectElement.hidden = true;\n this.selectObjects(rectBox);\n }\n }\n\n private updateSelectRect() {\n const x3 = Math.min(this.selectRect.x1, this.selectRect.x2);\n const x4 = Math.max(this.selectRect.x1, this.selectRect.x2);\n const y3 = Math.min(this.selectRect.y1, this.selectRect.y2);\n const y4 = Math.max(this.selectRect.y1, this.selectRect.y2);\n this.selectElement.style.left = x3 + 'px';\n this.selectElement.style.top = y3 + 'px';\n this.selectElement.style.width = x4 - x3 + 'px';\n this.selectElement.style.height = y4 - y3 + 'px';\n }\n\n private selectObjects(rectBox: FcRectBox) {\n this.applyFunction(() => {\n this.modelService.selectAllInRect(rectBox);\n });\n }\n\n}\n\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef, EventEmitter,\n HostBinding,\n HostListener,\n Input,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnInit, Output\n} from '@angular/core';\nimport { FcCallbacks, FcEdge, FcModel, FcNode, FlowchartConstants, UserCallbacks, UserNodeCallbacks } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcNodeDraggingService } from './node-dragging.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcEdgeDraggingService } from './edge-dragging.service';\nimport { FcMouseOverService } from './mouseover.service';\nimport { FcRectangleSelectService } from './rectangleselect.service';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'fc-canvas',\n templateUrl: './ngx-flowchart.component.html',\n styleUrls: ['./ngx-flowchart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxFlowchartComponent implements OnInit, DoCheck {\n\n @HostBinding('attr.class')\n get canvasClass(): string {\n return FlowchartConstants.canvasClass;\n }\n\n @Input()\n model: FcModel;\n\n @Input()\n selectedObjects: any[];\n\n @Input()\n edgeStyle: string;\n\n @Input()\n userCallbacks: UserCallbacks;\n\n @Input()\n automaticResize: boolean;\n\n @Input()\n dragAnimation: string;\n\n @Input()\n nodeWidth: number;\n\n @Input()\n nodeHeight: number;\n\n @Input()\n dropTargetId: string;\n\n @Output()\n modelChanged = new EventEmitter();\n\n private fitModelSizeByDefaultValue = true;\n get fitModelSizeByDefault(): boolean {\n return this.fitModelSizeByDefaultValue;\n }\n @Input()\n set fitModelSizeByDefault(value: boolean) {\n this.fitModelSizeByDefaultValue = coerceBooleanProperty(value);\n }\n\n callbacks: FcCallbacks;\n\n userNodeCallbacks: UserNodeCallbacks;\n\n modelService: FcModelService;\n nodeDraggingService: FcNodeDraggingService;\n edgeDraggingService: FcEdgeDraggingService;\n mouseoverService: FcMouseOverService;\n rectangleSelectService: FcRectangleSelectService;\n\n arrowDefId: string;\n arrowDefIdSelected: string;\n\n flowchartConstants = FlowchartConstants;\n\n private nodesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private edgesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n constructor(private elementRef: ElementRef,\n private differs: IterableDiffers,\n private modelValidation: FcModelValidationService,\n public edgeDrawingService: FcEdgeDrawingService,\n private cd: ChangeDetectorRef,\n private zone: NgZone) {\n this.arrowDefId = 'arrow-' + Math.random();\n this.arrowDefIdSelected = this.arrowDefId + '-selected';\n }\n\n ngOnInit() {\n if (!this.dropTargetId && this.edgeStyle !== FlowchartConstants.curvedStyle && this.edgeStyle !== FlowchartConstants.lineStyle) {\n throw new Error('edgeStyle not supported.');\n }\n this.nodeHeight = this.nodeHeight || 200;\n this.nodeWidth = this.nodeWidth || 200;\n this.dragAnimation = this.dragAnimation || FlowchartConstants.dragAnimationRepaint;\n this.userCallbacks = this.userCallbacks || {};\n this.automaticResize = this.automaticResize || false;\n\n for (const key of Object.keys(this.userCallbacks)) {\n const callback = this.userCallbacks[key];\n if (typeof callback !== 'function' && key !== 'nodeCallbacks') {\n throw new Error('All callbacks should be functions.');\n }\n }\n\n this.userNodeCallbacks = this.userCallbacks.nodeCallbacks;\n\n const element = $(this.elementRef.nativeElement);\n\n this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.cd, this.selectedObjects,\n this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved,\n this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg'));\n\n if (this.dropTargetId) {\n this.modelService.dropTargetId = this.dropTargetId;\n }\n\n const applyFunction = this.zone.run.bind(this.zone);\n\n this.nodeDraggingService = new FcNodeDraggingService(this.modelService, applyFunction,\n this.automaticResize, this.dragAnimation);\n\n this.edgeDraggingService = new FcEdgeDraggingService(this.modelValidation, this.edgeDrawingService, this.modelService,\n this.model, this.userCallbacks.isValidEdge || null, applyFunction,\n this.dragAnimation, this.edgeStyle);\n\n this.mouseoverService = new FcMouseOverService(applyFunction);\n\n this.rectangleSelectService = new FcRectangleSelectService(this.modelService,\n element[0].querySelector('#select-rectangle'), applyFunction);\n\n this.callbacks = {\n nodeDragstart: this.nodeDraggingService.dragstart.bind(this.nodeDraggingService),\n nodeDragend: this.nodeDraggingService.dragend.bind(this.nodeDraggingService),\n edgeDragstart: this.edgeDraggingService.dragstart.bind(this.edgeDraggingService),\n edgeDragend: this.edgeDraggingService.dragend.bind(this.edgeDraggingService),\n edgeDrop: this.edgeDraggingService.drop.bind(this.edgeDraggingService),\n edgeDragoverConnector: this.edgeDraggingService.dragoverConnector.bind(this.edgeDraggingService),\n edgeDragoverMagnet: this.edgeDraggingService.dragoverMagnet.bind(this.edgeDraggingService),\n edgeDragleaveMagnet: this.edgeDraggingService.dragleaveMagnet.bind(this.edgeDraggingService),\n nodeMouseOver: this.mouseoverService.nodeMouseOver.bind(this.mouseoverService),\n nodeMouseOut: this.mouseoverService.nodeMouseOut.bind(this.mouseoverService),\n connectorMouseEnter: this.mouseoverService.connectorMouseEnter.bind(this.mouseoverService),\n connectorMouseLeave: this.mouseoverService.connectorMouseLeave.bind(this.mouseoverService),\n nodeClicked: (event, node) => {\n this.modelService.nodes.handleClicked(node, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n };\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n\n ngDoCheck(): void {\n if (this.model) {\n const nodesChange = this.nodesDiffer.diff(this.model.nodes);\n const edgesChange = this.edgesDiffer.diff(this.model.edges);\n let nodesChanged = false;\n let edgesChanged = false;\n if (nodesChange !== null) {\n nodesChange.forEachAddedItem(() => {\n nodesChanged = true;\n });\n nodesChange.forEachRemovedItem(() => {\n nodesChanged = true;\n });\n }\n if (edgesChange !== null) {\n edgesChange.forEachAddedItem(() => {\n edgesChanged = true;\n });\n edgesChange.forEachRemovedItem(() => {\n edgesChanged = true;\n });\n }\n if (nodesChanged) {\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n if (nodesChanged || edgesChanged) {\n this.cd.detectChanges();\n }\n }\n }\n\n getEdgeDAttribute(edge: FcEdge): string {\n return this.edgeDrawingService.getEdgeDAttribute(this.modelService.edges.sourceCoord(edge),\n this.modelService.edges.destCoord(edge), this.edgeStyle);\n }\n\n public adjustCanvasSize(fit?: boolean) {\n let maxX = 0;\n let maxY = 0;\n const element = $(this.elementRef.nativeElement);\n this.model.nodes.forEach((node) => {\n maxX = Math.max(node.x + this.nodeWidth, maxX);\n maxY = Math.max(node.y + this.nodeHeight, maxY);\n });\n let width;\n let height;\n if (fit) {\n width = maxX;\n height = maxY;\n } else {\n width = Math.max(maxX, element.prop('offsetWidth'));\n height = Math.max(maxY, element.prop('offsetHeight'));\n }\n element.css('width', width + 'px');\n element.css('height', height + 'px');\n }\n\n canvasClick(event: MouseEvent) {}\n\n edgeMouseDown(event: MouseEvent, edge: FcEdge) {\n event.stopPropagation();\n }\n\n edgeClick(event: MouseEvent, edge: FcEdge) {\n this.modelService.edges.handleEdgeMouseClick(edge, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeRemove(event: Event, edge: FcEdge) {\n this.modelService.edges.delete(edge);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeEdit(event: Event, edge: FcEdge) {\n if (this.userCallbacks.edgeEdit) {\n this.userCallbacks.edgeEdit(event, edge);\n }\n }\n\n edgeDoubleClick(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeDoubleClick) {\n this.userCallbacks.edgeDoubleClick(event, edge);\n }\n }\n\n edgeMouseOver(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeMouseOver) {\n this.userCallbacks.edgeMouseOver(event, edge);\n }\n }\n\n edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseEnter(event, edge);\n }\n\n edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseLeave(event, edge);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n this.nodeDraggingService.drop(event);\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n this.rectangleSelectService.mousedown(event);\n }\n\n @HostListener('mousemove', ['$event'])\n mousemove(event: MouseEvent) {\n this.rectangleSelectService.mousemove(event);\n }\n\n @HostListener('mouseup', ['$event'])\n mouseup(event: MouseEvent) {\n this.rectangleSelectService.mouseup(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-magnet]'\n})\nexport class FcMagnetDirective implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n connector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.magnetClass);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: DragEvent) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-connector]'\n})\nexport class FcConnectorDirective implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n connector: FcConnector;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.connectorClass);\n if (this.modelservice.isEditable()) {\n element.attr('draggable', 'true');\n this.updateConnectorClass();\n }\n this.modelservice.connectors.setHtmlElement(this.connector.id, element[0]);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateConnector = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (propName === 'mouseOverConnector') {\n updateConnector = true;\n }\n }\n }\n if (updateConnector && this.modelservice.isEditable()) {\n this.updateConnectorClass();\n }\n }\n\n private updateConnectorClass() {\n const element = $(this.elementRef.nativeElement);\n if (this.connector === this.mouseOverConnector) {\n element.addClass(FlowchartConstants.hoverClass);\n } else {\n element.removeClass(FlowchartConstants.hoverClass);\n }\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n // Skip - conflict with magnet\n /* if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDragoverConnector(event, this.connector);\n }*/\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragstart(event, this.connector);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n mouseenter(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseEnter(event, this.connector);\n }\n }\n\n @HostListener('mouseleave', ['$event'])\n mouseleave(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseLeave(event, this.connector);\n }\n }\n\n}\n","import {\n Component,\n ComponentFactoryResolver, Directive,\n ElementRef, HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {\n FC_NODE_COMPONENT_CONFIG,\n FcCallbacks,\n FcConnector,\n FcNode,\n FcNodeComponentConfig,\n FlowchartConstants,\n UserNodeCallbacks\n} from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Component({\n selector: 'fc-node',\n template: '',\n styleUrls: ['./node.component.scss']\n})\nexport class FcNodeContainerComponent implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n @HostBinding('attr.id')\n get nodeId(): string {\n return this.node.id;\n }\n\n @HostBinding('style.top')\n get top(): string {\n return this.node.y + 'px';\n }\n\n @HostBinding('style.left')\n get left(): string {\n return this.node.x + 'px';\n }\n\n nodeComponent: FcNodeComponent;\n\n @ViewChild('nodeContent', {read: ViewContainerRef, static: true}) nodeContentContainer: ViewContainerRef;\n\n constructor(@Inject(FC_NODE_COMPONENT_CONFIG) private nodeComponentConfig: FcNodeComponentConfig,\n private elementRef: ElementRef,\n private componentFactoryResolver: ComponentFactoryResolver) {\n }\n\n ngOnInit(): void {\n if (!this.userNodeCallbacks) {\n this.userNodeCallbacks = {};\n }\n this.userNodeCallbacks.nodeEdit = this.userNodeCallbacks.nodeEdit || (() => {});\n this.userNodeCallbacks.doubleClick = this.userNodeCallbacks.doubleClick || (() => {});\n this.userNodeCallbacks.mouseDown = this.userNodeCallbacks.mouseDown || (() => {});\n this.userNodeCallbacks.mouseEnter = this.userNodeCallbacks.mouseEnter || (() => {});\n this.userNodeCallbacks.mouseLeave = this.userNodeCallbacks.mouseLeave || (() => {});\n\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.nodeClass);\n if (!this.node.readonly) {\n element.attr('draggable', 'true');\n }\n this.updateNodeClass();\n this.modelservice.nodes.setHtmlElement(this.node.id, element[0]);\n this.nodeContentContainer.clear();\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.nodeComponentConfig.nodeComponentType);\n const componentRef = this.nodeContentContainer.createComponent(componentFactory);\n this.nodeComponent = componentRef.instance;\n this.nodeComponent.callbacks = this.callbacks;\n this.nodeComponent.userNodeCallbacks = this.userNodeCallbacks;\n this.nodeComponent.node = this.node;\n this.nodeComponent.modelservice = this.modelservice;\n this.updateNodeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateNode = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (['selected', 'edit', 'underMouse', 'mouseOverConnector', 'dragging'].includes(propName)) {\n updateNode = true;\n }\n }\n }\n if (updateNode) {\n this.updateNodeClass();\n this.updateNodeComponent();\n }\n }\n\n private updateNodeClass() {\n const element = $(this.elementRef.nativeElement);\n this.toggleClass(element, FlowchartConstants.selectedClass, this.selected);\n this.toggleClass(element, FlowchartConstants.editClass, this.edit);\n this.toggleClass(element, FlowchartConstants.hoverClass, this.underMouse);\n this.toggleClass(element, FlowchartConstants.draggingClass, this.dragging);\n }\n\n private updateNodeComponent() {\n this.nodeComponent.selected = this.selected;\n this.nodeComponent.edit = this.edit;\n this.nodeComponent.underMouse = this.underMouse;\n this.nodeComponent.mouseOverConnector = this.mouseOverConnector;\n this.nodeComponent.dragging = this.dragging;\n }\n\n private toggleClass(element: JQuery, clazz: string, set: boolean) {\n if (set) {\n element.addClass(clazz);\n } else {\n element.removeClass(clazz);\n }\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragend(event);\n }\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeClicked(event, this.node);\n }\n }\n\n @HostListener('mouseover', ['$event'])\n mouseover(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOver(event, this.node);\n }\n }\n\n @HostListener('mouseout', ['$event'])\n mouseout(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOut(event, this.node);\n }\n }\n\n}\n\nexport abstract class FcNodeComponent implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n flowchartConstants = FlowchartConstants;\n\n ngOnInit(): void {\n }\n\n}\n","import { Component } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\n@Component({\n selector: 'fc-default-node',\n templateUrl: './default-node.component.html',\n styleUrls: ['./default-node.component.scss']\n})\nexport class DefaultFcNodeComponent extends FcNodeComponent {\n\n constructor() {\n super();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { NgxFlowchartComponent } from './ngx-flowchart.component';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { CommonModule } from '@angular/common';\nimport { FcMagnetDirective } from './magnet.directive';\nimport { FcConnectorDirective } from './connector.directive';\nimport { FcNodeContainerComponent } from './node.component';\nimport { FC_NODE_COMPONENT_CONFIG } from './ngx-flowchart.models';\nimport { DefaultFcNodeComponent } from './default-node.component';\n\n@NgModule({\n entryComponents: [\n DefaultFcNodeComponent\n ],\n declarations: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n FcNodeContainerComponent,\n DefaultFcNodeComponent],\n providers: [\n FcModelValidationService,\n FcEdgeDrawingService,\n {\n provide: FC_NODE_COMPONENT_CONFIG,\n useValue: {\n nodeComponentType: DefaultFcNodeComponent\n }\n }\n ],\n imports: [\n CommonModule\n ],\n exports: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n DefaultFcNodeComponent]\n})\nexport class NgxFlowchartModule { }\n"]} \ No newline at end of file +{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://ngx-flowchart/lib/ngx-flowchart.models.ts","ng://ngx-flowchart/lib/model.service.ts","ng://ngx-flowchart/lib/modelvalidation.service.ts","ng://ngx-flowchart/lib/node-dragging.service.ts","ng://ngx-flowchart/lib/edge-drawing.service.ts","ng://ngx-flowchart/lib/edge-dragging.service.ts","ng://ngx-flowchart/lib/mouseover.service.ts","ng://ngx-flowchart/lib/scrollparent.ts","ng://ngx-flowchart/lib/rectangleselect.service.ts","ng://ngx-flowchart/lib/ngx-flowchart.component.ts","ng://ngx-flowchart/lib/magnet.directive.ts","ng://ngx-flowchart/lib/connector.directive.ts","ng://ngx-flowchart/lib/node.component.ts","ng://ngx-flowchart/lib/default-node.component.ts","ng://ngx-flowchart/lib/ngx-flowchart.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__values","o","m","Symbol","iterator","next","value","done","FC_NODE_COMPONENT_CONFIG","InjectionToken","FlowchartConstants","htmlPrefix","leftConnectorType","rightConnectorType","curvedStyle","lineStyle","dragAnimationRepaint","dragAnimationShadow","canvasClass","selectedClass","editClass","activeClass","hoverClass","draggingClass","edgeClass","edgeLabelClass","connectorClass","magnetClass","nodeClass","nodeOverlayClass","leftConnectorClass","rightConnectorClass","canvasResizeThreshold","canvasResizeStep","BaseError","Error","defineProperty","ModelvalidationError","_super","message","_this","tslib_1.__extends","fcTopSort","graph","adjacentList","nodes","forEach","node","id","incoming","outgoing","edges","edge","sourceNode","filter","connectors","some","connector","source","destinationNode","destination","push","orderedNodes","sourceNodes","_c","tslib_1.__values","keys","_d","pop","splice","hasEdges","_e","_f","FcModelService","modelValidation","model","modelChanged","detectChangesSubject","selectedObjects","dropNode","createEdge","edgeAddedCallback","nodeRemovedCallback","edgeRemovedCallback","canvasHtmlElement","svgHtmlElement","connectorsHtmlElements","nodesHtmlElements","dragImage","debouncer","Subject","validateModel","event","of","label","ConnectorsModel","NodesModel","EdgesModel","pipe","debounceTime","subscribe","emit","notifyModelChanged","detectChanges","setTimeout","selectObject","object","isEditable","indexOf","deselectObject","index","toggleSelectedObject","isSelectedObject","selectAll","readonly","select","deselectAll","isEditObject","inRectBox","x","y","rectBox","left","right","top","bottom","getItemInfoAtPoint","getNodeAtPoint","getEdgeAtPoint","_b","nodeElementBox","getHtmlElement","getBoundingClientRect","document","elementFromPoint","edgeIndex","startsWith","Number","substring","selectAllInRect","width","height","isSelected","deselect","canvasElementBox","start","sourceCoord","end","destCoord","deleteSelected","getSelectedEdges","delete","getSelectedNodes","undefined","dropTargetId","isDropSource","getDragImage","Image","src","style","visibility","AbstractFcModel","modelService","toggleSelected","isEdit","getConnector","connectorId","e_3","setHtmlElement","element","_getCoords","centered","canvas","connectorElementBox","coords","Math","round","offsetWidth","offsetHeight","getCoords","getCenteredCoord","getConnectorsByType","type","_addConnector","validateNode","error","connectorIds","getConnectorIds","handleClicked","ctrlKey","_addNode","validateNodes","map","getNodeByConnectorId","nodeId","ready","handleEdgeMouseClick","putEdge","_addEdge","sourceConnector","destConnector","validateConnector","validateEdges","concat","created","FcModelValidationService","_validateEdges","ids","name","isArray","_validateEdge","edge1","index1","edge2","index2","validateEdge","Injectable","nodeDropScope","dropElement","FcNodeDraggingService","applyFunction","automaticResize","dragAnimation","nodeDraggingScope","shadowDragStarted","draggedNodes","shadowElements","dragOffsets","draggedElements","destinationHtmlElements","oldDisplayStyles","getCoordinate","coordinate","max","min","getXCoordinate","getYCoordinate","resizeCanvas","draggedNode","nodeElement","canvasElement","isDraggingNode","includes","dragstart","elements","selectedNodes","selectedNodes_1","selectedNodes_1_1","selectedNode","$","offsetsX","offsetsY","elements_1","elements_1_1","parseInt","css","clientX","clientY","originalEvent","parentNode","removeChild","cloneNode","offset","offsetInfo","offsetX","offsetY","position","pointerEvents","zIndex","body","appendChild","dropNodeInfo","dataTransfer","setData","JSON","stringify","setDragImage","target","display","dragOffset","shadowElement","targetInnerNode","children","backgroundColor","drop","preventDefault","infoText","getData","parse","e","dragover","dragend","replace","FcEdgeDrawingService","getEdgeDAttribute","pt1","pt2","dAddribute","sourceTangent","computeEdgeSourceTangent","destinationTangent","computeEdgeDestinationTangent","getEdgeCenter","computeEdgeTangentOffset","FcEdgeDraggingService","edgeDrawingService","isValidEdgeCallback","edgeStyle","edgeDragging","isDragging","dragPoint1","dragPoint2","draggedEdgeSource","destinationHtmlElement","oldDisplayStyle","swapConnector","dragLabel","prevEdge","this_1","gElement","querySelectorAll","pathElement","find","circleElement","attr","stopPropagation","magnetActive","dragoverConnector","dragleaveMagnet","dragoverMagnet","edge_1","targetConnector","FcMouseOverService","mouseoverscope","nodeMouseOver","nodeMouseOut","connectorMouseEnter","connectorMouseLeave","edgeMouseEnter","edgeMouseLeave","regex","prop","getComputedStyle","getPropertyValue","scroll","test","scrollparent","FcRectangleSelectService","selectElement","selectRect","x1","x2","y1","y2","$canvasElement","$scrollParent","mousedown","metaKey","button","hidden","pageX","pageY","updateSelectRect","mousemove","updateScroll","rect","topScroll","scroll_1","scrollTop","bottomScroll","scroll_2","leftScroll","scroll_3","scrollLeft","rightScroll","scroll_4","mouseup","selectObjects","x3","x4","y3","y4","NgxFlowchartComponent","elementRef","differs","cd","zone","EventEmitter","fitModelSizeByDefaultValue","flowchartConstants","nodesDiffer","item","edgesDiffer","arrowDefId","random","arrowDefIdSelected","coerceBooleanProperty","ngOnInit","nodeHeight","nodeWidth","userCallbacks","key","userNodeCallbacks","nodeCallbacks","nativeElement","edgeAdded","nodeRemoved","edgeRemoved","querySelector","run","bind","nodeDraggingService","edgeDraggingService","isValidEdge","mouseoverService","rectangleSelectService","callbacks","nodeDragstart","nodeDragend","edgeDragstart","edgeDragend","edgeDrop","edgeDragoverConnector","edgeDragoverMagnet","edgeDragleaveMagnet","nodeClicked","adjustCanvasSize","fitModelSizeByDefault","ngDoCheck","nodesChange","diff","edgesChange","nodesChanged_1","edgesChanged_1","forEachAddedItem","forEachRemovedItem","fit","maxX","maxY","canvasClick","edgeMouseDown","edgeClick","edgeRemove","edgeEdit","edgeDoubleClick","edgeMouseOver","Component","args","selector","template","changeDetection","ChangeDetectionStrategy","OnPush","ElementRef","IterableDiffers","ChangeDetectorRef","NgZone","HostBinding","Input","Output","HostListener","FcMagnetDirective","addClass","dragleave","Directive","FcConnectorDirective","modelservice","updateConnectorClass","ngOnChanges","changes","updateConnector","propName","change","firstChange","currentValue","previousValue","mouseOverConnector","removeClass","mouseenter","mouseleave","FcNodeContainerComponent","nodeComponentConfig","componentFactoryResolver","nodeEdit","doubleClick","mouseDown","mouseEnter","mouseLeave","updateNodeClass","nodeContentContainer","clear","componentFactory","resolveComponentFactory","nodeComponentType","componentRef","createComponent","nodeComponent","instance","updateNodeComponent","updateNode","toggleClass","selected","edit","underMouse","dragging","clazz","set","click","mouseover","mouseout","Inject","ComponentFactoryResolver","ViewChild","read","ViewContainerRef","static","FcNodeComponent","DefaultFcNodeComponent","ɵ0$1","NgxFlowchartModule","NgModule","entryComponents","declarations","providers","provide","useValue","imports","CommonModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Observable } from 'rxjs';\nimport { InjectionToken, Type } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\nexport const FC_NODE_COMPONENT_CONFIG = new InjectionToken('fc-node.component.config');\n\nexport interface FcNodeComponentConfig {\n nodeComponentType: Type;\n}\n\nconst htmlPrefix = 'fc';\nconst leftConnectorType = 'leftConnector';\nconst rightConnectorType = 'rightConnector';\n\nexport const FlowchartConstants = {\n htmlPrefix,\n leftConnectorType,\n rightConnectorType,\n curvedStyle: 'curved',\n lineStyle: 'line',\n dragAnimationRepaint: 'repaint',\n dragAnimationShadow: 'shadow',\n canvasClass: htmlPrefix + '-canvas',\n selectedClass: htmlPrefix + '-selected',\n editClass: htmlPrefix + '-edit',\n activeClass: htmlPrefix + '-active',\n hoverClass: htmlPrefix + '-hover',\n draggingClass: htmlPrefix + '-dragging',\n edgeClass: htmlPrefix + '-edge',\n edgeLabelClass: htmlPrefix + '-edge-label',\n connectorClass: htmlPrefix + '-connector',\n magnetClass: htmlPrefix + '-magnet',\n nodeClass: htmlPrefix + '-node',\n nodeOverlayClass: htmlPrefix + '-node-overlay',\n leftConnectorClass: htmlPrefix + '-' + leftConnectorType + 's',\n rightConnectorClass: htmlPrefix + '-' + rightConnectorType + 's',\n canvasResizeThreshold: 200,\n canvasResizeStep: 200\n};\n\n\nexport interface FcCoords {\n x?: number;\n y?: number;\n}\n\nexport interface FcRectBox {\n top: number;\n left: number;\n right: number;\n bottom: number;\n}\n\nexport interface FcConnector {\n id: string;\n type: string;\n}\n\nexport interface FcNode extends FcCoords {\n id: string;\n name: string;\n connectors: Array;\n readonly?: boolean;\n [key: string]: any;\n}\n\nexport interface FcEdge {\n label?: string;\n source?: string;\n destination?: string;\n active?: boolean;\n}\n\nexport interface FcItemInfo {\n node?: FcNode;\n edge?: FcEdge;\n}\n\nexport interface FcModel {\n nodes: Array;\n edges: Array;\n}\n\nexport interface UserCallbacks {\n dropNode?: (event: Event, node: FcNode) => void;\n createEdge?: (event: Event, edge: FcEdge) => Observable;\n edgeAdded?: (edge: FcEdge) => void;\n nodeRemoved?: (node: FcNode) => void;\n edgeRemoved?: (edge: FcEdge) => void;\n edgeDoubleClick?: (event: MouseEvent, edge: FcEdge) => void;\n edgeMouseOver?: (event: MouseEvent, edge: FcEdge) => void;\n isValidEdge?: (source: FcConnector, destination: FcConnector) => boolean;\n edgeEdit?: (event: Event, edge: FcEdge) => void;\n nodeCallbacks?: UserNodeCallbacks;\n}\n\nexport interface UserNodeCallbacks {\n nodeEdit?: (event: MouseEvent, node: FcNode) => void;\n doubleClick?: (event: MouseEvent, node: FcNode) => void;\n mouseDown?: (event: MouseEvent, node: FcNode) => void;\n mouseEnter?: (event: MouseEvent, node: FcNode) => void;\n mouseLeave?: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcCallbacks {\n nodeDragstart: (event: DragEvent, node: FcNode) => void;\n nodeDragend: (event: DragEvent) => void;\n edgeDragstart: (event: DragEvent, connector: FcConnector) => void;\n edgeDragend: (event: DragEvent) => void;\n edgeDrop: (event: DragEvent, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: DragEvent) => void;\n nodeMouseOver: (event: MouseEvent, node: FcNode) => void;\n nodeMouseOut: (event: MouseEvent, node: FcNode) => void;\n connectorMouseEnter: (event: MouseEvent, connector: FcConnector) => void;\n connectorMouseLeave: (event: MouseEvent, connector: FcConnector) => void;\n nodeClicked: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcAdjacentList {\n [id: string]: {\n incoming: number;\n outgoing: Array;\n };\n}\n\nclass BaseError {\n constructor() {\n Error.apply(this, arguments);\n }\n}\n\nObject.defineProperty(BaseError, 'prototype', new Error());\n\nexport class ModelvalidationError extends BaseError {\n constructor(public message: string) {\n super();\n }\n}\n\nexport function fcTopSort(graph: FcModel): Array | null {\n const adjacentList: FcAdjacentList = {};\n graph.nodes.forEach((node) => {\n adjacentList[node.id] = {incoming: 0, outgoing: []};\n });\n graph.edges.forEach((edge) => {\n const sourceNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.source;\n });\n })[0];\n const destinationNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.destination;\n });\n })[0];\n adjacentList[sourceNode.id].outgoing.push(destinationNode.id);\n adjacentList[destinationNode.id].incoming++;\n });\n const orderedNodes: string[] = [];\n const sourceNodes: string[] = [];\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming === 0) {\n sourceNodes.push(node);\n }\n }\n while (sourceNodes.length !== 0) {\n const sourceNode = sourceNodes.pop();\n for (let i = 0; i < adjacentList[sourceNode].outgoing.length; i++) {\n const destinationNode = adjacentList[sourceNode].outgoing[i];\n adjacentList[destinationNode].incoming--;\n if (adjacentList[destinationNode].incoming === 0) {\n sourceNodes.push(destinationNode);\n }\n adjacentList[sourceNode].outgoing.splice(i, 1);\n i--;\n }\n orderedNodes.push(sourceNode);\n }\n let hasEdges = false;\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming !== 0) {\n hasEdges = true;\n }\n }\n if (hasEdges) {\n return null;\n } else {\n return orderedNodes;\n }\n}\n","import { FcModelValidationService } from './modelvalidation.service';\nimport { FcConnector, FcCoords, FcEdge, FcItemInfo, FcModel, FcNode, FcRectBox } from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { ChangeDetectorRef, EventEmitter } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\nexport class FcModelService {\n\n modelValidation: FcModelValidationService;\n model: FcModel;\n private readonly detectChangesSubject: Subject;\n selectedObjects: any[];\n\n connectorsHtmlElements: HtmlElementMap = {};\n nodesHtmlElements: HtmlElementMap = {};\n canvasHtmlElement: HTMLElement = null;\n dragImage: HTMLImageElement = null;\n svgHtmlElement: SVGElement = null;\n\n dropNode: (event: Event, node: FcNode) => void;\n createEdge: (event: Event, edge: FcEdge) => Observable;\n edgeAddedCallback: (edge: FcEdge) => void;\n nodeRemovedCallback: (node: FcNode) => void;\n edgeRemovedCallback: (edge: FcEdge) => void;\n\n dropTargetId: string;\n\n private readonly modelChanged: EventEmitter;\n private readonly debouncer = new Subject();\n\n connectors: ConnectorsModel;\n nodes: NodesModel;\n edges: EdgesModel;\n\n constructor(modelValidation: FcModelValidationService,\n model: FcModel,\n modelChanged: EventEmitter,\n detectChangesSubject: Subject,\n selectedObjects: any[],\n dropNode: (event: Event, node: FcNode) => void,\n createEdge: (event: Event, edge: FcEdge) => Observable,\n edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void,\n canvasHtmlElement: HTMLElement,\n svgHtmlElement: SVGElement) {\n\n this.modelValidation = modelValidation;\n this.model = model;\n this.modelChanged = modelChanged;\n this.detectChangesSubject = detectChangesSubject;\n this.canvasHtmlElement = canvasHtmlElement;\n this.svgHtmlElement = svgHtmlElement;\n this.modelValidation.validateModel(this.model);\n this.selectedObjects = selectedObjects;\n\n this.dropNode = dropNode || (() => {});\n this.createEdge = createEdge || ((event, edge) => of({...edge, label: 'label'}));\n this.edgeAddedCallback = edgeAddedCallback || (() => {});\n this.nodeRemovedCallback = nodeRemovedCallback || (() => {});\n this.edgeRemovedCallback = edgeRemovedCallback || (() => {});\n\n this.connectors = new ConnectorsModel(this);\n this.nodes = new NodesModel(this);\n this.edges = new EdgesModel(this);\n\n this.debouncer\n .pipe(debounceTime(100))\n .subscribe(() => this.modelChanged.emit());\n }\n\n public notifyModelChanged() {\n this.debouncer.next();\n }\n\n public detectChanges() {\n setTimeout(() => {\n this.detectChangesSubject.next();\n }, 0);\n }\n\n public selectObject(object: any) {\n if (this.isEditable()) {\n if (this.selectedObjects.indexOf(object) === -1) {\n this.selectedObjects.push(object);\n }\n }\n }\n\n public deselectObject(object: any) {\n if (this.isEditable()) {\n const index = this.selectedObjects.indexOf(object);\n if (index === -1) {\n throw new Error('Tried to deselect an unselected object');\n }\n this.selectedObjects.splice(index, 1);\n }\n }\n\n public toggleSelectedObject(object: any) {\n if (this.isSelectedObject(object)) {\n this.deselectObject(object);\n } else {\n this.selectObject(object);\n }\n }\n\n public isSelectedObject(object: any): boolean {\n return this.selectedObjects.indexOf(object) !== -1;\n }\n\n public selectAll() {\n this.model.nodes.forEach(node => {\n if (!node.readonly) {\n this.nodes.select(node);\n }\n });\n this.model.edges.forEach(edge => {\n this.edges.select(edge);\n });\n this.detectChanges();\n }\n\n public deselectAll() {\n this.selectedObjects.splice(0, this.selectedObjects.length);\n this.detectChanges();\n }\n\n public isEditObject(object: any): boolean {\n return this.selectedObjects.length === 1 &&\n this.selectedObjects.indexOf(object) !== -1;\n }\n\n private inRectBox(x: number, y: number, rectBox: FcRectBox): boolean {\n return x >= rectBox.left && x <= rectBox.right &&\n y >= rectBox.top && y <= rectBox.bottom;\n }\n\n public getItemInfoAtPoint(x: number, y: number): FcItemInfo {\n return {\n node: this.getNodeAtPoint(x, y),\n edge: this.getEdgeAtPoint(x, y)\n };\n }\n\n public getNodeAtPoint(x: number, y: number): FcNode {\n for (const node of this.model.nodes) {\n const element = this.nodes.getHtmlElement(node.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (x >= nodeElementBox.left && x <= nodeElementBox.right\n && y >= nodeElementBox.top && y <= nodeElementBox.bottom) {\n return node;\n }\n }\n return null;\n }\n\n public getEdgeAtPoint(x: number, y: number): FcEdge {\n const element = document.elementFromPoint(x, y);\n const id = element.id;\n let edgeIndex = -1;\n if (id) {\n if (id.startsWith('fc-edge-path-')) {\n edgeIndex = Number(id.substring('fc-edge-path-'.length));\n } else if (id.startsWith('fc-edge-label-')) {\n edgeIndex = Number(id.substring('fc-edge-label-'.length));\n }\n }\n if (edgeIndex > -1) {\n return this.model.edges[edgeIndex];\n }\n return null;\n }\n\n public selectAllInRect(rectBox: FcRectBox) {\n this.model.nodes.forEach((value) => {\n const element = this.nodes.getHtmlElement(value.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (!value.readonly) {\n const x = nodeElementBox.left + nodeElementBox.width / 2;\n const y = nodeElementBox.top + nodeElementBox.height / 2;\n if (this.inRectBox(x, y, rectBox)) {\n this.nodes.select(value);\n } else {\n if (this.nodes.isSelected(value)) {\n this.nodes.deselect(value);\n }\n }\n }\n });\n const canvasElementBox = this.canvasHtmlElement.getBoundingClientRect();\n this.model.edges.forEach((value) => {\n const start = this.edges.sourceCoord(value);\n const end = this.edges.destCoord(value);\n const x = (start.x + end.x) / 2 + canvasElementBox.left;\n const y = (start.y + end.y) / 2 + canvasElementBox.top;\n if (this.inRectBox(x, y, rectBox)) {\n this.edges.select(value);\n } else {\n if (this.edges.isSelected(value)) {\n this.edges.deselect(value);\n }\n }\n });\n }\n\n public deleteSelected() {\n const edgesToDelete = this.edges.getSelectedEdges();\n edgesToDelete.forEach((edge) => {\n this.edges.delete(edge);\n });\n const nodesToDelete = this.nodes.getSelectedNodes();\n nodesToDelete.forEach((node) => {\n this.nodes.delete(node);\n });\n }\n\n public isEditable(): boolean {\n return this.dropTargetId === undefined;\n }\n\n public isDropSource(): boolean {\n return this.dropTargetId !== undefined;\n }\n\n public getDragImage(): HTMLImageElement {\n if (!this.dragImage) {\n this.dragImage = new Image();\n this.dragImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n this.dragImage.style.visibility = 'hidden';\n }\n return this.dragImage;\n }\n}\n\ninterface HtmlElementMap { [id: string]: HTMLElement; }\n\nabstract class AbstractFcModel {\n\n modelService: FcModelService;\n\n protected constructor(modelService: FcModelService) {\n this.modelService = modelService;\n }\n\n public select(object: T) {\n this.modelService.selectObject(object);\n }\n\n public deselect(object: T) {\n this.modelService.deselectObject(object);\n }\n\n public toggleSelected(object: T) {\n this.modelService.toggleSelectedObject(object);\n }\n\n public isSelected(object: T): boolean {\n return this.modelService.isSelectedObject(object);\n }\n\n public isEdit(object: T): boolean {\n return this.modelService.isEditObject(object);\n }\n}\n\nclass ConnectorsModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnector(connectorId: string): FcConnector {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n for (const connector of node.connectors) {\n if (connector.id === connectorId) {\n return connector;\n }\n }\n }\n }\n\n public getHtmlElement(connectorId: string): HTMLElement {\n return this.modelService.connectorsHtmlElements[connectorId];\n }\n\n public setHtmlElement(connectorId: string, element: HTMLElement) {\n this.modelService.connectorsHtmlElements[connectorId] = element;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const element = this.getHtmlElement(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (element === null || element === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n const connectorElementBox = element.getBoundingClientRect();\n const canvasElementBox = canvas.getBoundingClientRect();\n let coords: FcCoords = {\n x: connectorElementBox.left - canvasElementBox.left,\n y: connectorElementBox.top - canvasElementBox.top\n };\n if (centered) {\n coords = {\n x: Math.round(coords.x + element.offsetWidth / 2),\n y: Math.round(coords.y + element.offsetHeight / 2)\n };\n }\n return coords;\n }\n\n public getCoords(connectorId: string): FcCoords {\n return this._getCoords(connectorId, false);\n }\n\n public getCenteredCoord(connectorId: string): FcCoords {\n return this._getCoords(connectorId, true);\n }\n}\n\nclass NodesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnectorsByType(node: FcNode, type: string): Array {\n return node.connectors.filter((connector) => {\n return connector.type === type;\n });\n }\n\n private _addConnector(node: FcNode, connector: FcConnector) {\n node.connectors.push(connector);\n try {\n this.modelService.modelValidation.validateNode(node);\n } catch (error) {\n node.connectors.splice(node.connectors.indexOf(connector), 1);\n throw error;\n }\n }\n\n public delete(node: FcNode) {\n if (this.isSelected(node)) {\n this.deselect(node);\n }\n const model = this.modelService.model;\n const index = model.nodes.indexOf(node);\n if (index === -1) {\n if (node === undefined) {\n throw new Error('Passed undefined');\n }\n throw new Error('Tried to delete not existing node');\n }\n const connectorIds = this.getConnectorIds(node);\n for (let i = 0; i < model.edges.length; i++) {\n const edge = model.edges[i];\n if (connectorIds.indexOf(edge.source) !== -1 || connectorIds.indexOf(edge.destination) !== -1) {\n this.modelService.edges.delete(edge);\n i--;\n }\n }\n model.nodes.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.nodeRemovedCallback(node);\n }\n\n public getSelectedNodes(): Array {\n const model = this.modelService.model;\n return model.nodes.filter((node) => {\n return this.modelService.nodes.isSelected(node);\n });\n }\n\n public handleClicked(node: FcNode, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.nodes.toggleSelected(node);\n } else {\n this.modelService.deselectAll();\n this.modelService.nodes.select(node);\n }\n }\n\n private _addNode(node: FcNode) {\n const model = this.modelService.model;\n try {\n model.nodes.push(node);\n this.modelService.modelValidation.validateNodes(model.nodes);\n } catch (error) {\n model.nodes.splice(model.nodes.indexOf(node), 1);\n throw error;\n }\n }\n\n public getConnectorIds(node: FcNode): Array {\n return node.connectors.map((connector) => {\n return connector.id;\n });\n }\n\n public getNodeByConnectorId(connectorId: string): FcNode {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n const connectorIds = this.getConnectorIds(node);\n if (connectorIds.indexOf(connectorId) > -1) {\n return node;\n }\n }\n return null;\n }\n\n public getHtmlElement(nodeId: string): HTMLElement {\n return this.modelService.nodesHtmlElements[nodeId];\n }\n\n public setHtmlElement(nodeId: string, element: HTMLElement) {\n this.modelService.nodesHtmlElements[nodeId] = element;\n this.modelService.detectChanges();\n }\n\n}\n\nclass EdgesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public ready(edge: FcEdge): boolean {\n const source = this.modelService.connectors.getHtmlElement(edge.source);\n const destination = this.modelService.connectors.getHtmlElement(edge.destination);\n return source !== undefined && destination !== undefined;\n }\n\n public sourceCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.source);\n }\n\n public destCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.destination);\n }\n\n public delete(edge: FcEdge) {\n const model = this.modelService.model;\n const index = model.edges.indexOf(edge);\n if (index === -1) {\n throw new Error('Tried to delete not existing edge');\n }\n if (this.isSelected(edge)) {\n this.deselect(edge);\n }\n model.edges.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.edgeRemovedCallback(edge);\n }\n\n public getSelectedEdges(): Array {\n const model = this.modelService.model;\n return model.edges.filter((edge) => {\n return this.modelService.edges.isSelected(edge);\n });\n }\n\n public handleEdgeMouseClick(edge: FcEdge, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.edges.toggleSelected(edge);\n } else {\n this.modelService.deselectAll();\n this.modelService.edges.select(edge);\n }\n }\n\n public putEdge(edge: FcEdge) {\n const model = this.modelService.model;\n model.edges.push(edge);\n this.modelService.notifyModelChanged();\n }\n\n public _addEdge(event: Event, sourceConnector: FcConnector, destConnector: FcConnector, label: string) {\n this.modelService.modelValidation.validateConnector(sourceConnector);\n this.modelService.modelValidation.validateConnector(destConnector);\n const edge: FcEdge = {};\n edge.source = sourceConnector.id;\n edge.destination = destConnector.id;\n edge.label = label;\n const model = this.modelService.model;\n this.modelService.modelValidation.validateEdges(model.edges.concat([edge]), model.nodes);\n this.modelService.createEdge(event, edge).subscribe(\n (created) => {\n model.edges.push(created);\n this.modelService.notifyModelChanged();\n this.modelService.edgeAddedCallback(created);\n }\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FcConnector, FcEdge, FcModel, FcNode, fcTopSort, ModelvalidationError } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcModelValidationService {\n\n constructor() { }\n\n public validateModel(model: FcModel): FcModel {\n this.validateNodes(model.nodes);\n this._validateEdges(model.edges, model.nodes);\n return model;\n }\n\n public validateNodes(nodes: Array): Array {\n const ids: string[] = [];\n nodes.forEach((node) => {\n this.validateNode(node);\n if (ids.indexOf(node.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n ids.push(node.id);\n });\n const connectorIds: string[] = [];\n nodes.forEach((node) => {\n node.connectors.forEach((connector) => {\n if (connectorIds.indexOf(connector.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n connectorIds.push(connector.id);\n });\n });\n return nodes;\n }\n\n public validateNode(node: FcNode): FcNode {\n if (node.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (typeof node.name !== 'string') {\n throw new ModelvalidationError('Name not valid.');\n }\n if (typeof node.x !== 'number' || node.x < 0 || Math.round(node.x) !== node.x) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (typeof node.y !== 'number' || node.y < 0 || Math.round(node.y) !== node.y) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (!Array.isArray(node.connectors)) {\n throw new ModelvalidationError('Connectors not valid.');\n }\n node.connectors.forEach((connector) => {\n this.validateConnector(connector);\n });\n return node;\n }\n\n private _validateEdges(edges: Array, nodes: Array): Array {\n edges.forEach((edge) => {\n this._validateEdge(edge, nodes);\n });\n edges.forEach((edge1, index1) => {\n edges.forEach((edge2, index2) => {\n if (index1 !== index2) {\n if ((edge1.source === edge2.source && edge1.destination === edge2.destination) ||\n (edge1.source === edge2.destination && edge1.destination === edge2.source)) {\n throw new ModelvalidationError('Duplicated edge.');\n }\n }\n });\n });\n if (fcTopSort({nodes, edges}) === null) {\n throw new ModelvalidationError('Graph has a circle.');\n }\n return edges;\n }\n\n public validateEdges(edges: Array, nodes: Array): Array {\n this.validateNodes(nodes);\n return this._validateEdges(edges, nodes);\n }\n\n private _validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n if (edge.source === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n if (edge.destination === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (edge.source === edge.destination) {\n throw new ModelvalidationError('Edge with same source and destination connectors.');\n }\n const sourceNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.source))[0];\n if (sourceNode === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n const destinationNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.destination))[0];\n if (destinationNode === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (sourceNode === destinationNode) {\n throw new ModelvalidationError('Edge with same source and destination nodes.');\n }\n return edge;\n }\n\n public validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n this.validateNodes(nodes);\n return this._validateEdge(edge, nodes);\n }\n\n public validateConnector(connector: FcConnector): FcConnector {\n if (connector.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (connector.type === undefined || connector.type === null || typeof connector.type !== 'string') {\n throw new ModelvalidationError('Type not valid.');\n }\n return connector;\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcCoords, FcNode, FlowchartConstants } from './ngx-flowchart.models';\n\nconst nodeDropScope: NodeDropScope = {\n dropElement: null\n};\n\nexport class FcNodeDraggingService {\n\n nodeDraggingScope: NodeDraggingScope = {\n shadowDragStarted: false,\n dropElement: null,\n draggedNodes: [],\n shadowElements: []\n };\n\n private dragOffsets: FcCoords[] = [];\n private draggedElements: HTMLElement[] = [];\n\n private destinationHtmlElements: HTMLElement[] = [];\n private oldDisplayStyles: string[] = [];\n\n private readonly modelService: FcModelService;\n private readonly automaticResize: boolean;\n private readonly dragAnimation: string;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n applyFunction: (fn: (...args: any[]) => T) => T,\n automaticResize: boolean, dragAnimation: string) {\n this.modelService = modelService;\n this.automaticResize = automaticResize;\n this.dragAnimation = dragAnimation;\n this.applyFunction = applyFunction;\n }\n\n private getCoordinate(coordinate: number, max: number): number {\n coordinate = Math.max(coordinate, 0);\n coordinate = Math.min(coordinate, max);\n return coordinate;\n }\n\n private getXCoordinate(x: number): number {\n return this.getCoordinate(x, this.modelService.canvasHtmlElement.offsetWidth);\n }\n\n private getYCoordinate(y: number): number {\n return this.getCoordinate(y, this.modelService.canvasHtmlElement.offsetHeight);\n }\n\n private resizeCanvas(draggedNode: FcNode, nodeElement: HTMLElement) {\n if (this.automaticResize && !this.modelService.isDropSource()) {\n const canvasElement = this.modelService.canvasHtmlElement;\n if (canvasElement.offsetWidth < draggedNode.x + nodeElement.offsetWidth + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.width = canvasElement.offsetWidth + FlowchartConstants.canvasResizeStep + 'px';\n }\n if (canvasElement.offsetHeight < draggedNode.y + nodeElement.offsetHeight + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.height = canvasElement.offsetHeight + FlowchartConstants.canvasResizeStep + 'px';\n }\n }\n }\n\n public isDraggingNode(node: FcNode): boolean {\n return this.nodeDraggingScope.draggedNodes.includes(node);\n }\n\n public dragstart(event: DragEvent, node: FcNode) {\n if (node.readonly) {\n return;\n }\n this.dragOffsets.length = 0;\n this.draggedElements.length = 0;\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.nodeDraggingScope.shadowElements.length = 0;\n this.destinationHtmlElements.length = 0;\n this.oldDisplayStyles.length = 0;\n const elements: Array> = [];\n const nodes: Array = [];\n if (this.modelService.nodes.isSelected(node)) {\n const selectedNodes = this.modelService.nodes.getSelectedNodes();\n for (const selectedNode of selectedNodes) {\n const element = $(this.modelService.nodes.getHtmlElement(selectedNode.id));\n elements.push(element);\n nodes.push(selectedNode);\n }\n } else {\n elements.push($(event.target as HTMLElement));\n nodes.push(node);\n }\n const offsetsX: number[] = [];\n const offsetsY: number[] = [];\n for (const element of elements) {\n offsetsX.push(parseInt(element.css('left'), 10) - event.clientX);\n offsetsY.push(parseInt(element.css('top'), 10) - event.clientY);\n }\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n if (this.modelService.isDropSource()) {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n nodeDropScope.dropElement = elements[0][0].cloneNode(true) as NodeDropElement;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n nodeDropScope.dropElement.offsetInfo = {\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n nodeDropScope.dropElement.style.position = 'absolute';\n nodeDropScope.dropElement.style.pointerEvents = 'none';\n nodeDropScope.dropElement.style.zIndex = '9999';\n\n document.body.appendChild(nodeDropScope.dropElement);\n const dropNodeInfo: DropNodeInfo = {\n node,\n dropTargetId: this.modelService.dropTargetId,\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n originalEvent.dataTransfer.setData('text', JSON.stringify(dropNodeInfo));\n\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n const target: HTMLElement = event.target as HTMLElement;\n this.destinationHtmlElements.push(target);\n this.oldDisplayStyles.push(target.style.display);\n target.style.display = 'none';\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n return;\n }\n this.nodeDraggingScope.draggedNodes = nodes;\n for (let i = 0; i < elements.length; i++) {\n this.draggedElements.push(elements[i][0]);\n this.dragOffsets.push(\n {\n x: offsetsX[i],\n y: offsetsY[i]\n }\n );\n }\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n for (let i = 0; i < this.draggedElements.length; i++) {\n const dragOffset = this.dragOffsets[i];\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = $(`
` +\n `

${draggedNode.name}

`);\n const targetInnerNode = $(this.draggedElements[i]).children()[0];\n shadowElement.children()[0].style.backgroundColor = targetInnerNode.style.backgroundColor;\n this.nodeDraggingScope.shadowElements.push(shadowElement);\n this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[i][0]);\n }\n }\n originalEvent.dataTransfer.setData('text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n for (let i = 0; i < this.draggedElements.length; i++) {\n this.destinationHtmlElements.push(this.draggedElements[i]);\n this.oldDisplayStyles.push(this.destinationHtmlElements[i].style.display);\n this.destinationHtmlElements[i].style.display = 'none';\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: DragEvent): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n const infoText = originalEvent.dataTransfer.getData('text');\n if (infoText) {\n let dropNodeInfo: DropNodeInfo = null;\n try {\n dropNodeInfo = JSON.parse(infoText);\n } catch (e) {}\n if (dropNodeInfo && dropNodeInfo.dropTargetId) {\n if (this.modelService.canvasHtmlElement.id &&\n this.modelService.canvasHtmlElement.id === dropNodeInfo.dropTargetId) {\n dropNode = dropNodeInfo.node;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n const x = event.clientX - offset.left;\n const y = event.clientY - offset.top;\n dropNode.x = Math.round(this.getXCoordinate(dropNodeInfo.offsetX + x));\n dropNode.y = Math.round(this.getYCoordinate(dropNodeInfo.offsetY + y));\n }\n }\n }\n if (dropNode) {\n this.modelService.dropNode(event, dropNode);\n event.preventDefault();\n return false;\n } else if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = Math.round(this.getXCoordinate(dragOffset.x + event.clientX));\n draggedNode.y = Math.round(this.getYCoordinate(dragOffset.y + event.clientY));\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n }\n\n public dragover(event: DragEvent) {\n if (nodeDropScope.dropElement) {\n const offsetInfo = nodeDropScope.dropElement.offsetInfo;\n nodeDropScope.dropElement.style.left = (offsetInfo.offsetX + event.clientX) + 'px';\n nodeDropScope.dropElement.style.top = (offsetInfo.offsetY + event.clientY) + 'px';\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n this.destinationHtmlElements[0].style.display = this.oldDisplayStyles[0];\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n event.preventDefault();\n return;\n }\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return;\n }\n if (!this.nodeDraggingScope.draggedNodes.length) {\n event.preventDefault();\n return;\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = this.getXCoordinate(dragOffset.x + event.clientX);\n draggedNode.y = this.getYCoordinate(dragOffset.y + event.clientY);\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n this.destinationHtmlElements[i].style.display = this.oldDisplayStyles[i];\n }\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n this.nodeDraggingScope.shadowElements[i].css('left', this.getXCoordinate(dragOffset.x + event.clientX) + 'px');\n this.nodeDraggingScope.shadowElements[i].css('top', this.getYCoordinate(dragOffset.y + event.clientY) + 'px');\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n }\n }\n }\n\n public dragend(event: DragEvent) {\n this.applyFunction(() => {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n if (this.modelService.isDropSource()) {\n return;\n }\n if (this.nodeDraggingScope.shadowElements.length) {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = this.nodeDraggingScope.shadowElements[i];\n draggedNode.x = parseInt(shadowElement.css('left').replace('px', ''), 10);\n draggedNode.y = parseInt(shadowElement.css('top').replace('px', ''), 10);\n this.modelService.canvasHtmlElement.removeChild(shadowElement[0]);\n }\n this.nodeDraggingScope.shadowElements.length = 0;\n this.modelService.notifyModelChanged();\n }\n\n if (this.nodeDraggingScope.draggedNodes.length) {\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.draggedElements.length = 0;\n this.dragOffsets.length = 0;\n }\n });\n }\n\n}\n\nexport interface NodeDraggingScope {\n draggedNodes: Array;\n shadowElements: Array>;\n shadowDragStarted: boolean;\n dropElement: HTMLElement;\n}\n\nexport interface NodeDropElement extends HTMLElement {\n offsetInfo?: {\n offsetX: number;\n offsetY: number;\n };\n}\n\nexport interface NodeDropScope {\n dropElement: NodeDropElement;\n}\n\nexport interface DropNodeInfo {\n node: FcNode;\n dropTargetId: string;\n offsetX: number;\n offsetY: number;\n}\n","import { Injectable } from '@angular/core';\nimport { FcCoords, FlowchartConstants } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcEdgeDrawingService {\n\n constructor() {\n }\n\n public getEdgeDAttribute(pt1: FcCoords, pt2: FcCoords, style: string): string {\n let dAddribute = `M ${pt1.x}, ${pt1.y} `;\n if (style === FlowchartConstants.curvedStyle) {\n const sourceTangent = this.computeEdgeSourceTangent(pt1, pt2);\n const destinationTangent = this.computeEdgeDestinationTangent(pt1, pt2);\n dAddribute += `C ${sourceTangent.x}, ${sourceTangent.y} ${(destinationTangent.x - 50)}, ${destinationTangent.y} ${pt2.x}, ${pt2.y}`;\n } else {\n dAddribute += `L ${pt2.x}, ${pt2.y}`;\n }\n return dAddribute;\n }\n\n public getEdgeCenter(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: (pt1.x + pt2.x) / 2,\n y: (pt1.y + pt2.y) / 2\n };\n }\n\n private computeEdgeTangentOffset(pt1: FcCoords, pt2: FcCoords): number {\n return (pt2.y - pt1.y) / 2;\n }\n\n private computeEdgeSourceTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt1.x,\n y: pt1.y + this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n private computeEdgeDestinationTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt2.x,\n y: pt2.y - this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcConnector, FcCoords, FcEdge, FcModel, FlowchartConstants, ModelvalidationError } from './ngx-flowchart.models';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcModelValidationService } from './modelvalidation.service';\n\nexport class FcEdgeDraggingService {\n\n edgeDragging: EdgeDragging = {\n isDragging: false,\n dragPoint1: null,\n dragPoint2: null,\n shadowDragStarted: false\n };\n\n private draggedEdgeSource: FcConnector = null;\n private dragOffset: FcCoords = {};\n private destinationHtmlElement: HTMLElement = null;\n private oldDisplayStyle = '';\n\n private readonly modelValidation: FcModelValidationService;\n private readonly edgeDrawingService: FcEdgeDrawingService;\n private readonly modelService: FcModelService;\n private readonly model: FcModel;\n private readonly isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n private readonly dragAnimation: string;\n private readonly edgeStyle: string;\n\n constructor(modelValidation: FcModelValidationService,\n edgeDrawingService: FcEdgeDrawingService,\n modelService: FcModelService,\n model: FcModel,\n isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean,\n applyFunction: (fn: (...args: any[]) => T) => T,\n dragAnimation: string,\n edgeStyle: string) {\n this.modelValidation = modelValidation;\n this.edgeDrawingService = edgeDrawingService;\n this.modelService = modelService;\n this.model = model;\n this.isValidEdgeCallback = isValidEdgeCallback || (() => true);\n this.applyFunction = applyFunction;\n this.dragAnimation = dragAnimation;\n this.edgeStyle = edgeStyle;\n }\n\n public dragstart(event: DragEvent, connector: FcConnector) {\n let swapConnector: FcConnector;\n let dragLabel: string;\n let prevEdge: FcEdge;\n if (connector.type === FlowchartConstants.leftConnectorType) {\n for (const edge of this.model.edges) {\n if (edge.destination === connector.id) {\n swapConnector = this.modelService.connectors.getConnector(edge.source);\n dragLabel = edge.label;\n prevEdge = edge;\n this.applyFunction(() => {\n this.modelService.edges.delete(edge);\n });\n break;\n }\n }\n }\n this.edgeDragging.isDragging = true;\n if (swapConnector !== undefined) {\n this.draggedEdgeSource = swapConnector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(swapConnector.id);\n this.edgeDragging.dragLabel = dragLabel;\n this.edgeDragging.prevEdge = prevEdge;\n } else {\n this.draggedEdgeSource = connector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(connector.id);\n }\n const canvas = this.modelService.canvasHtmlElement;\n if (!canvas) {\n throw new Error('No canvas while edgedraggingService found.');\n }\n this.dragOffset.x = -canvas.getBoundingClientRect().left;\n this.dragOffset.y = -canvas.getBoundingClientRect().top;\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n\n originalEvent.dataTransfer.setData('Text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n this.destinationHtmlElement = event.target as HTMLElement;\n this.oldDisplayStyle = this.destinationHtmlElement.style.display;\n this.destinationHtmlElement.style.display = 'none';\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.shadowDragStarted = true;\n }\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.edgeDragging.gElement === undefined) {\n this.edgeDragging.gElement = $(document.querySelectorAll('.shadow-svg-class'));\n this.edgeDragging.pathElement = $(document.querySelectorAll('.shadow-svg-class')).find('path');\n this.edgeDragging.circleElement = $(document.querySelectorAll('.shadow-svg-class')).find('circle');\n }\n\n this.edgeDragging.gElement.css('display', 'block');\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n }\n event.stopPropagation();\n }\n\n public dragover(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n if (!this.edgeDragging.magnetActive && this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n if (this.edgeDragging.shadowDragStarted) {\n this.applyFunction(() => {\n this.edgeDragging.shadowDragStarted = false;\n });\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n });\n }\n }\n }\n\n public dragoverConnector(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n }\n }\n\n public dragleaveMagnet(event: DragEvent) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n\n this.edgeDragging.magnetActive = true;\n\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n event.preventDefault();\n event.stopPropagation();\n return false;\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n event.preventDefault();\n event.stopPropagation();\n return false;\n });\n }\n }\n }\n }\n\n public dragend(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n this.edgeDragging.isDragging = false;\n this.edgeDragging.dragPoint1 = null;\n this.edgeDragging.dragPoint2 = null;\n this.edgeDragging.dragLabel = null;\n event.stopPropagation();\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.gElement.css('display', 'none');\n }\n if (this.edgeDragging.prevEdge) {\n const edge = this.edgeDragging.prevEdge;\n this.edgeDragging.prevEdge = null;\n this.applyFunction(() => {\n this.modelService.edges.putEdge(edge);\n });\n }\n }\n }\n\n public drop(event: DragEvent, targetConnector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: targetConnector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n\n if (this.isValidEdgeCallback(this.draggedEdgeSource, targetConnector)) {\n this.edgeDragging.prevEdge = null;\n this.modelService.edges._addEdge(event, this.draggedEdgeSource, targetConnector, this.edgeDragging.dragLabel);\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n }\n }\n}\n\nexport interface EdgeDragging {\n isDragging: boolean;\n shadowDragStarted: boolean;\n dragPoint1: FcCoords;\n dragPoint2: FcCoords;\n dragLabel?: string;\n prevEdge?: FcEdge;\n magnetActive?: boolean;\n gElement?: JQuery;\n pathElement?: JQuery;\n circleElement?: JQuery;\n}\n","import { FcConnector, FcEdge, FcNode } from './ngx-flowchart.models';\n\nexport class FcMouseOverService {\n\n mouseoverscope: MouseOverScope = {\n connector: null,\n edge: null,\n node: null\n };\n\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(applyFunction: (fn: (...args: any[]) => T) => T) {\n this.applyFunction = applyFunction;\n }\n\n public nodeMouseOver(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = node;\n });\n }\n\n public nodeMouseOut(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = null;\n });\n }\n\n public connectorMouseEnter(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = connector;\n });\n }\n\n public connectorMouseLeave(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = null;\n });\n }\n\n public edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = edge;\n }\n\n public edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = null;\n }\n}\n\nexport interface MouseOverScope {\n connector: FcConnector;\n edge: FcEdge;\n node: FcNode;\n}\n","const regex = /(auto|scroll)/;\n\nconst style = (node: Element, prop: string): string =>\n getComputedStyle(node, null).getPropertyValue(prop);\n\nconst scroll = (node: Element) =>\n regex.test(\n style(node, 'overflow') +\n style(node, 'overflow-y') +\n style(node, 'overflow-x'));\n\nconst scrollparent = (node: HTMLElement): HTMLElement =>\n !node || node === document.body\n ? document.body\n : scroll(node)\n ? node\n : scrollparent(node.parentNode as HTMLElement);\n\nexport default scrollparent;\n","import { FcModelService } from './model.service';\nimport { FcRectBox } from './ngx-flowchart.models';\nimport scrollparent from './scrollparent';\n\ninterface Rectangle {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport class FcRectangleSelectService {\n\n private readonly selectRect: Rectangle = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n\n private readonly modelService: FcModelService;\n private readonly selectElement: HTMLElement;\n private readonly $canvasElement: JQuery;\n private readonly $scrollParent: JQuery;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n selectElement: HTMLElement,\n applyFunction: (fn: (...args: any[]) => T) => T) {\n this.modelService = modelService;\n this.selectElement = selectElement;\n this.$canvasElement = $(this.modelService.canvasHtmlElement);\n this.$scrollParent = $(scrollparent(this.modelService.canvasHtmlElement));\n this.applyFunction = applyFunction;\n }\n\n public mousedown(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && this.selectElement.hidden) {\n this.selectElement.hidden = false;\n const offset = this.$canvasElement.offset();\n this.selectRect.x1 = Math.round(e.pageX - offset.left);\n this.selectRect.y1 = Math.round(e.pageY - offset.top);\n this.selectRect.x2 = this.selectRect.x1;\n this.selectRect.y2 = this.selectRect.y1;\n this.updateSelectRect();\n }\n }\n\n public mousemove(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const offset = this.$canvasElement.offset();\n this.selectRect.x2 = Math.round(e.pageX - offset.left);\n this.selectRect.y2 = Math.round(e.pageY - offset.top);\n this.updateScroll(offset);\n this.updateSelectRect();\n }\n }\n\n private updateScroll(offset: JQuery.Coordinates) {\n const rect = this.$scrollParent[0].getBoundingClientRect();\n const bottom = rect.bottom - offset.top;\n const right = rect.right - offset.left;\n const top = rect.top - offset.top;\n const left = rect.left - offset.left;\n if (this.selectRect.y2 - top < 25) {\n const topScroll = 25 - (this.selectRect.y2 - top);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll - topScroll);\n } else if (bottom - this.selectRect.y2 < 40) {\n const bottomScroll = 40 - (bottom - this.selectRect.y2);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll + bottomScroll);\n }\n if (this.selectRect.x2 - left < 25) {\n const leftScroll = 25 - (this.selectRect.x2 - left);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll - leftScroll);\n } else if (right - this.selectRect.x2 < 40) {\n const rightScroll = 40 - (right - this.selectRect.x2);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll + rightScroll);\n }\n }\n\n public mouseup(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const rectBox = this.selectElement.getBoundingClientRect() as FcRectBox;\n this.selectElement.hidden = true;\n this.selectObjects(rectBox);\n }\n }\n\n private updateSelectRect() {\n const x3 = Math.min(this.selectRect.x1, this.selectRect.x2);\n const x4 = Math.max(this.selectRect.x1, this.selectRect.x2);\n const y3 = Math.min(this.selectRect.y1, this.selectRect.y2);\n const y4 = Math.max(this.selectRect.y1, this.selectRect.y2);\n this.selectElement.style.left = x3 + 'px';\n this.selectElement.style.top = y3 + 'px';\n this.selectElement.style.width = x4 - x3 + 'px';\n this.selectElement.style.height = y4 - y3 + 'px';\n }\n\n private selectObjects(rectBox: FcRectBox) {\n this.applyFunction(() => {\n this.modelService.selectAllInRect(rectBox);\n });\n }\n\n}\n\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef, EventEmitter,\n HostBinding,\n HostListener,\n Input,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnInit, Output\n} from '@angular/core';\nimport { FcCallbacks, FcEdge, FcModel, FcNode, FlowchartConstants, UserCallbacks, UserNodeCallbacks } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcNodeDraggingService } from './node-dragging.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcEdgeDraggingService } from './edge-dragging.service';\nimport { FcMouseOverService } from './mouseover.service';\nimport { FcRectangleSelectService } from './rectangleselect.service';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Component({\n selector: 'fc-canvas',\n templateUrl: './ngx-flowchart.component.html',\n styleUrls: ['./ngx-flowchart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxFlowchartComponent implements OnInit, DoCheck {\n\n @HostBinding('attr.class')\n get canvasClass(): string {\n return FlowchartConstants.canvasClass;\n }\n\n @Input()\n model: FcModel;\n\n @Input()\n selectedObjects: any[];\n\n @Input()\n edgeStyle: string;\n\n @Input()\n userCallbacks: UserCallbacks;\n\n @Input()\n automaticResize: boolean;\n\n @Input()\n dragAnimation: string;\n\n @Input()\n nodeWidth: number;\n\n @Input()\n nodeHeight: number;\n\n @Input()\n dropTargetId: string;\n\n @Output()\n modelChanged = new EventEmitter();\n\n private fitModelSizeByDefaultValue = true;\n get fitModelSizeByDefault(): boolean {\n return this.fitModelSizeByDefaultValue;\n }\n @Input()\n set fitModelSizeByDefault(value: boolean) {\n this.fitModelSizeByDefaultValue = coerceBooleanProperty(value);\n }\n\n callbacks: FcCallbacks;\n\n userNodeCallbacks: UserNodeCallbacks;\n\n modelService: FcModelService;\n nodeDraggingService: FcNodeDraggingService;\n edgeDraggingService: FcEdgeDraggingService;\n mouseoverService: FcMouseOverService;\n rectangleSelectService: FcRectangleSelectService;\n\n arrowDefId: string;\n arrowDefIdSelected: string;\n\n flowchartConstants = FlowchartConstants;\n\n private nodesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private edgesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private readonly detectChangesSubject = new Subject();\n\n constructor(private elementRef: ElementRef,\n private differs: IterableDiffers,\n private modelValidation: FcModelValidationService,\n public edgeDrawingService: FcEdgeDrawingService,\n private cd: ChangeDetectorRef,\n private zone: NgZone) {\n this.arrowDefId = 'arrow-' + Math.random();\n this.arrowDefIdSelected = this.arrowDefId + '-selected';\n this.detectChangesSubject\n .pipe(debounceTime(50))\n .subscribe(() => this.cd.detectChanges());\n }\n\n ngOnInit() {\n if (!this.dropTargetId && this.edgeStyle !== FlowchartConstants.curvedStyle && this.edgeStyle !== FlowchartConstants.lineStyle) {\n throw new Error('edgeStyle not supported.');\n }\n this.nodeHeight = this.nodeHeight || 200;\n this.nodeWidth = this.nodeWidth || 200;\n this.dragAnimation = this.dragAnimation || FlowchartConstants.dragAnimationRepaint;\n this.userCallbacks = this.userCallbacks || {};\n this.automaticResize = this.automaticResize || false;\n\n for (const key of Object.keys(this.userCallbacks)) {\n const callback = this.userCallbacks[key];\n if (typeof callback !== 'function' && key !== 'nodeCallbacks') {\n throw new Error('All callbacks should be functions.');\n }\n }\n\n this.userNodeCallbacks = this.userCallbacks.nodeCallbacks;\n\n const element = $(this.elementRef.nativeElement);\n\n this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged,\n this.detectChangesSubject, this.selectedObjects,\n this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved,\n this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg'));\n\n if (this.dropTargetId) {\n this.modelService.dropTargetId = this.dropTargetId;\n }\n\n const applyFunction = this.zone.run.bind(this.zone);\n\n this.nodeDraggingService = new FcNodeDraggingService(this.modelService, applyFunction,\n this.automaticResize, this.dragAnimation);\n\n this.edgeDraggingService = new FcEdgeDraggingService(this.modelValidation, this.edgeDrawingService, this.modelService,\n this.model, this.userCallbacks.isValidEdge || null, applyFunction,\n this.dragAnimation, this.edgeStyle);\n\n this.mouseoverService = new FcMouseOverService(applyFunction);\n\n this.rectangleSelectService = new FcRectangleSelectService(this.modelService,\n element[0].querySelector('#select-rectangle'), applyFunction);\n\n this.callbacks = {\n nodeDragstart: this.nodeDraggingService.dragstart.bind(this.nodeDraggingService),\n nodeDragend: this.nodeDraggingService.dragend.bind(this.nodeDraggingService),\n edgeDragstart: this.edgeDraggingService.dragstart.bind(this.edgeDraggingService),\n edgeDragend: this.edgeDraggingService.dragend.bind(this.edgeDraggingService),\n edgeDrop: this.edgeDraggingService.drop.bind(this.edgeDraggingService),\n edgeDragoverConnector: this.edgeDraggingService.dragoverConnector.bind(this.edgeDraggingService),\n edgeDragoverMagnet: this.edgeDraggingService.dragoverMagnet.bind(this.edgeDraggingService),\n edgeDragleaveMagnet: this.edgeDraggingService.dragleaveMagnet.bind(this.edgeDraggingService),\n nodeMouseOver: this.mouseoverService.nodeMouseOver.bind(this.mouseoverService),\n nodeMouseOut: this.mouseoverService.nodeMouseOut.bind(this.mouseoverService),\n connectorMouseEnter: this.mouseoverService.connectorMouseEnter.bind(this.mouseoverService),\n connectorMouseLeave: this.mouseoverService.connectorMouseLeave.bind(this.mouseoverService),\n nodeClicked: (event, node) => {\n this.modelService.nodes.handleClicked(node, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n };\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n\n ngDoCheck(): void {\n if (this.model) {\n const nodesChange = this.nodesDiffer.diff(this.model.nodes);\n const edgesChange = this.edgesDiffer.diff(this.model.edges);\n let nodesChanged = false;\n let edgesChanged = false;\n if (nodesChange !== null) {\n nodesChange.forEachAddedItem(() => {\n nodesChanged = true;\n });\n nodesChange.forEachRemovedItem(() => {\n nodesChanged = true;\n });\n }\n if (edgesChange !== null) {\n edgesChange.forEachAddedItem(() => {\n edgesChanged = true;\n });\n edgesChange.forEachRemovedItem(() => {\n edgesChanged = true;\n });\n }\n if (nodesChanged) {\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n if (nodesChanged || edgesChanged) {\n this.detectChangesSubject.next();\n }\n }\n }\n\n getEdgeDAttribute(edge: FcEdge): string {\n return this.edgeDrawingService.getEdgeDAttribute(this.modelService.edges.sourceCoord(edge),\n this.modelService.edges.destCoord(edge), this.edgeStyle);\n }\n\n public adjustCanvasSize(fit?: boolean) {\n let maxX = 0;\n let maxY = 0;\n const element = $(this.elementRef.nativeElement);\n this.model.nodes.forEach((node) => {\n maxX = Math.max(node.x + this.nodeWidth, maxX);\n maxY = Math.max(node.y + this.nodeHeight, maxY);\n });\n let width;\n let height;\n if (fit) {\n width = maxX;\n height = maxY;\n } else {\n width = Math.max(maxX, element.prop('offsetWidth'));\n height = Math.max(maxY, element.prop('offsetHeight'));\n }\n element.css('width', width + 'px');\n element.css('height', height + 'px');\n }\n\n canvasClick(event: MouseEvent) {}\n\n edgeMouseDown(event: MouseEvent, edge: FcEdge) {\n event.stopPropagation();\n }\n\n edgeClick(event: MouseEvent, edge: FcEdge) {\n this.modelService.edges.handleEdgeMouseClick(edge, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeRemove(event: Event, edge: FcEdge) {\n this.modelService.edges.delete(edge);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeEdit(event: Event, edge: FcEdge) {\n if (this.userCallbacks.edgeEdit) {\n this.userCallbacks.edgeEdit(event, edge);\n }\n }\n\n edgeDoubleClick(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeDoubleClick) {\n this.userCallbacks.edgeDoubleClick(event, edge);\n }\n }\n\n edgeMouseOver(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeMouseOver) {\n this.userCallbacks.edgeMouseOver(event, edge);\n }\n }\n\n edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseEnter(event, edge);\n }\n\n edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseLeave(event, edge);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n this.nodeDraggingService.drop(event);\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n this.rectangleSelectService.mousedown(event);\n }\n\n @HostListener('mousemove', ['$event'])\n mousemove(event: MouseEvent) {\n this.rectangleSelectService.mousemove(event);\n }\n\n @HostListener('mouseup', ['$event'])\n mouseup(event: MouseEvent) {\n this.rectangleSelectService.mouseup(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-magnet]'\n})\nexport class FcMagnetDirective implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n connector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.magnetClass);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: DragEvent) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-connector]'\n})\nexport class FcConnectorDirective implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n connector: FcConnector;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.connectorClass);\n if (this.modelservice.isEditable()) {\n element.attr('draggable', 'true');\n this.updateConnectorClass();\n }\n this.modelservice.connectors.setHtmlElement(this.connector.id, element[0]);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateConnector = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (propName === 'mouseOverConnector') {\n updateConnector = true;\n }\n }\n }\n if (updateConnector && this.modelservice.isEditable()) {\n this.updateConnectorClass();\n }\n }\n\n private updateConnectorClass() {\n const element = $(this.elementRef.nativeElement);\n if (this.connector === this.mouseOverConnector) {\n element.addClass(FlowchartConstants.hoverClass);\n } else {\n element.removeClass(FlowchartConstants.hoverClass);\n }\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n // Skip - conflict with magnet\n /* if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDragoverConnector(event, this.connector);\n }*/\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragstart(event, this.connector);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n mouseenter(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseEnter(event, this.connector);\n }\n }\n\n @HostListener('mouseleave', ['$event'])\n mouseleave(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseLeave(event, this.connector);\n }\n }\n\n}\n","import {\n Component,\n ComponentFactoryResolver, Directive,\n ElementRef, HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {\n FC_NODE_COMPONENT_CONFIG,\n FcCallbacks,\n FcConnector,\n FcNode,\n FcNodeComponentConfig,\n FlowchartConstants,\n UserNodeCallbacks\n} from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Component({\n selector: 'fc-node',\n template: '',\n styleUrls: ['./node.component.scss']\n})\nexport class FcNodeContainerComponent implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n @HostBinding('attr.id')\n get nodeId(): string {\n return this.node.id;\n }\n\n @HostBinding('style.top')\n get top(): string {\n return this.node.y + 'px';\n }\n\n @HostBinding('style.left')\n get left(): string {\n return this.node.x + 'px';\n }\n\n nodeComponent: FcNodeComponent;\n\n @ViewChild('nodeContent', {read: ViewContainerRef, static: true}) nodeContentContainer: ViewContainerRef;\n\n constructor(@Inject(FC_NODE_COMPONENT_CONFIG) private nodeComponentConfig: FcNodeComponentConfig,\n private elementRef: ElementRef,\n private componentFactoryResolver: ComponentFactoryResolver) {\n }\n\n ngOnInit(): void {\n if (!this.userNodeCallbacks) {\n this.userNodeCallbacks = {};\n }\n this.userNodeCallbacks.nodeEdit = this.userNodeCallbacks.nodeEdit || (() => {});\n this.userNodeCallbacks.doubleClick = this.userNodeCallbacks.doubleClick || (() => {});\n this.userNodeCallbacks.mouseDown = this.userNodeCallbacks.mouseDown || (() => {});\n this.userNodeCallbacks.mouseEnter = this.userNodeCallbacks.mouseEnter || (() => {});\n this.userNodeCallbacks.mouseLeave = this.userNodeCallbacks.mouseLeave || (() => {});\n\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.nodeClass);\n if (!this.node.readonly) {\n element.attr('draggable', 'true');\n }\n this.updateNodeClass();\n this.modelservice.nodes.setHtmlElement(this.node.id, element[0]);\n this.nodeContentContainer.clear();\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.nodeComponentConfig.nodeComponentType);\n const componentRef = this.nodeContentContainer.createComponent(componentFactory);\n this.nodeComponent = componentRef.instance;\n this.nodeComponent.callbacks = this.callbacks;\n this.nodeComponent.userNodeCallbacks = this.userNodeCallbacks;\n this.nodeComponent.node = this.node;\n this.nodeComponent.modelservice = this.modelservice;\n this.updateNodeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateNode = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (['selected', 'edit', 'underMouse', 'mouseOverConnector', 'dragging'].includes(propName)) {\n updateNode = true;\n }\n }\n }\n if (updateNode) {\n this.updateNodeClass();\n this.updateNodeComponent();\n }\n }\n\n private updateNodeClass() {\n const element = $(this.elementRef.nativeElement);\n this.toggleClass(element, FlowchartConstants.selectedClass, this.selected);\n this.toggleClass(element, FlowchartConstants.editClass, this.edit);\n this.toggleClass(element, FlowchartConstants.hoverClass, this.underMouse);\n this.toggleClass(element, FlowchartConstants.draggingClass, this.dragging);\n }\n\n private updateNodeComponent() {\n this.nodeComponent.selected = this.selected;\n this.nodeComponent.edit = this.edit;\n this.nodeComponent.underMouse = this.underMouse;\n this.nodeComponent.mouseOverConnector = this.mouseOverConnector;\n this.nodeComponent.dragging = this.dragging;\n }\n\n private toggleClass(element: JQuery, clazz: string, set: boolean) {\n if (set) {\n element.addClass(clazz);\n } else {\n element.removeClass(clazz);\n }\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragend(event);\n }\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeClicked(event, this.node);\n }\n }\n\n @HostListener('mouseover', ['$event'])\n mouseover(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOver(event, this.node);\n }\n }\n\n @HostListener('mouseout', ['$event'])\n mouseout(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOut(event, this.node);\n }\n }\n\n}\n\nexport abstract class FcNodeComponent implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n flowchartConstants = FlowchartConstants;\n\n ngOnInit(): void {\n }\n\n}\n","import { Component } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\n@Component({\n selector: 'fc-default-node',\n templateUrl: './default-node.component.html',\n styleUrls: ['./default-node.component.scss']\n})\nexport class DefaultFcNodeComponent extends FcNodeComponent {\n\n constructor() {\n super();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { NgxFlowchartComponent } from './ngx-flowchart.component';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { CommonModule } from '@angular/common';\nimport { FcMagnetDirective } from './magnet.directive';\nimport { FcConnectorDirective } from './connector.directive';\nimport { FcNodeContainerComponent } from './node.component';\nimport { FC_NODE_COMPONENT_CONFIG } from './ngx-flowchart.models';\nimport { DefaultFcNodeComponent } from './default-node.component';\n\n@NgModule({\n entryComponents: [\n DefaultFcNodeComponent\n ],\n declarations: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n FcNodeContainerComponent,\n DefaultFcNodeComponent],\n providers: [\n FcModelValidationService,\n FcEdgeDrawingService,\n {\n provide: FC_NODE_COMPONENT_CONFIG,\n useValue: {\n nodeComponentType: DefaultFcNodeComponent\n }\n }\n ],\n imports: [\n CommonModule\n ],\n exports: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n DefaultFcNodeComponent]\n})\nexport class NgxFlowchartModule { }\n"]} \ No newline at end of file diff --git a/dist/ngx-flowchart/esm2015/lib/model.service.js b/dist/ngx-flowchart/esm2015/lib/model.service.js index a9c3bab..0cb491e 100644 --- a/dist/ngx-flowchart/esm2015/lib/model.service.js +++ b/dist/ngx-flowchart/esm2015/lib/model.service.js @@ -9,7 +9,7 @@ export class FcModelService { * @param {?} modelValidation * @param {?} model * @param {?} modelChanged - * @param {?} cd + * @param {?} detectChangesSubject * @param {?} selectedObjects * @param {?} dropNode * @param {?} createEdge @@ -19,7 +19,7 @@ export class FcModelService { * @param {?} canvasHtmlElement * @param {?} svgHtmlElement */ - constructor(modelValidation, model, modelChanged, cd, selectedObjects, dropNode, createEdge, edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback, canvasHtmlElement, svgHtmlElement) { + constructor(modelValidation, model, modelChanged, detectChangesSubject, selectedObjects, dropNode, createEdge, edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback, canvasHtmlElement, svgHtmlElement) { this.connectorsHtmlElements = {}; this.nodesHtmlElements = {}; this.canvasHtmlElement = null; @@ -29,7 +29,7 @@ export class FcModelService { this.modelValidation = modelValidation; this.model = model; this.modelChanged = modelChanged; - this.cd = cd; + this.detectChangesSubject = detectChangesSubject; this.canvasHtmlElement = canvasHtmlElement; this.svgHtmlElement = svgHtmlElement; this.modelValidation.validateModel(this.model); @@ -80,7 +80,7 @@ export class FcModelService { * @return {?} */ () => { - this.cd.detectChanges(); + this.detectChangesSubject.next(); }), 0); } /** @@ -329,25 +329,17 @@ export class FcModelService { } return this.dragImage; } - /** - * @param {?} edgeAddedCallback - * @param {?} nodeRemovedCallback - * @param {?} edgeRemovedCallback - * @return {?} - */ - registerCallbacks(edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback) { - this.edgeAddedCallback = edgeAddedCallback; - this.nodeRemovedCallback = nodeRemovedCallback; - this.edgeRemovedCallback = edgeRemovedCallback; - } } if (false) { /** @type {?} */ FcModelService.prototype.modelValidation; /** @type {?} */ FcModelService.prototype.model; - /** @type {?} */ - FcModelService.prototype.cd; + /** + * @type {?} + * @private + */ + FcModelService.prototype.detectChangesSubject; /** @type {?} */ FcModelService.prototype.selectedObjects; /** @type {?} */ @@ -807,4 +799,4 @@ class EdgesModel extends AbstractFcModel { })); } } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1mbG93Y2hhcnQvIiwic291cmNlcyI6WyJsaWIvbW9kZWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE1BQU0sT0FBTyxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7SUE0QnpCLFlBQVksZUFBeUMsRUFDekMsS0FBYyxFQUNkLFlBQStCLEVBQy9CLEVBQXFCLEVBQ3JCLGVBQXNCLEVBQ3RCLFFBQThDLEVBQzlDLFVBQThELEVBQzlELGlCQUF5QyxFQUN6QyxtQkFBMkMsRUFDM0MsbUJBQTJDLEVBQzNDLGlCQUE4QixFQUM5QixjQUEwQjtRQWhDdEMsMkJBQXNCLEdBQW1CLEVBQUUsQ0FBQztRQUM1QyxzQkFBaUIsR0FBbUIsRUFBRSxDQUFDO1FBQ3ZDLHNCQUFpQixHQUFnQixJQUFJLENBQUM7UUFDdEMsY0FBUyxHQUFxQixJQUFJLENBQUM7UUFDbkMsbUJBQWMsR0FBZSxJQUFJLENBQUM7UUFXakIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFtQjlDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxHQUFH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QUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUzs7OztRQUNqRCxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1YsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxFQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGY01vZGVsVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuL21vZGVsdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZjQ29ubmVjdG9yLCBGY0Nvb3JkcywgRmNFZGdlLCBGY0l0ZW1JbmZvLCBGY01vZGVsLCBGY05vZGUsIEZjUmVjdEJveCB9IGZyb20gJy4vbmd4LWZsb3djaGFydC5tb2RlbHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGNsYXNzIEZjTW9kZWxTZXJ2aWNlIHtcblxuICBtb2RlbFZhbGlkYXRpb246IEZjTW9kZWxWYWxpZGF0aW9uU2VydmljZTtcbiAgbW9kZWw6IEZjTW9kZWw7XG4gIGNkOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgc2VsZWN0ZWRPYmplY3RzOiBhbnlbXTtcblxuICBjb25uZWN0b3JzSHRtbEVsZW1lbnRzOiBIdG1sRWxlbWVudE1hcCA9IHt9O1xuICBub2Rlc0h0bWxFbGVtZW50czogSHRtbEVsZW1lbnRNYXAgPSB7fTtcbiAgY2FudmFzSHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gbnVsbDtcbiAgZHJhZ0ltYWdlOiBIVE1MSW1hZ2VFbGVtZW50ID0gbnVsbDtcbiAgc3ZnSHRtbEVsZW1lbnQ6IFNWR0VsZW1lbnQgPSBudWxsO1xuXG4gIGRyb3BOb2RlOiAoZXZlbnQ6IEV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIGNyZWF0ZUVkZ2U6IChldmVudDogRXZlbnQsIGVkZ2U6IEZjRWRnZSkgPT4gT2JzZXJ2YWJsZTxGY0VkZ2U+O1xuICBlZGdlQWRkZWRDYWxsYmFjazogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcbiAgbm9kZVJlbW92ZWRDYWxsYmFjazogKG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgZWRnZVJlbW92ZWRDYWxsYmFjazogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcblxuICBkcm9wVGFyZ2V0SWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IG1vZGVsQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VyID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIGNvbm5lY3RvcnM6IENvbm5lY3RvcnNNb2RlbDtcbiAgbm9kZXM6IE5vZGVzTW9kZWw7XG4gIGVkZ2VzOiBFZGdlc01vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKG1vZGVsVmFsaWRhdGlvbjogRmNNb2RlbFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBtb2RlbDogRmNNb2RlbCxcbiAgICAgICAgICAgICAgbW9kZWxDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PixcbiAgICAgICAgICAgICAgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICBzZWxlY3RlZE9iamVjdHM6IGFueVtdLFxuICAgICAgICAgICAgICBkcm9wTm9kZTogKGV2ZW50OiBFdmVudCwgbm9kZTogRmNOb2RlKSA9PiB2b2lkLFxuICAgICAgICAgICAgICBjcmVhdGVFZGdlOiAoZXZlbnQ6IEV2ZW50LCBlZGdlOiBGY0VkZ2UpID0+IE9ic2VydmFibGU8RmNFZGdlPixcbiAgICAgICAgICAgICAgZWRnZUFkZGVkQ2FsbGJhY2s6IChlZGdlOiBGY0VkZ2UpID0+IHZvaWQsXG4gICAgICAgICAgICAgIG5vZGVSZW1vdmVkQ2FsbGJhY2s6IChub2RlOiBGY05vZGUpID0+IHZvaWQsXG4gICAgICAgICAgICAgIGVkZ2VSZW1vdmVkQ2FsbGJhY2s6IChlZGdlOiBGY0VkZ2UpID0+IHZvaWQsXG4gICAgICAgICAgICAgIGNhbnZhc0h0bWxFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgc3ZnSHRtbEVsZW1lbnQ6IFNWR0VsZW1lbnQpIHtcblxuICAgIHRoaXMubW9kZWxWYWxpZGF0aW9uID0gbW9kZWxWYWxpZGF0aW9uO1xuICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgICB0aGlzLm1vZGVsQ2hhbmdlZCA9IG1vZGVsQ2hhbmdlZDtcbiAgICB0aGlzLmNkID0gY2Q7XG4gICAgdGhpcy5jYW52YXNIdG1sRWxlbWVudCA9IGNhbnZhc0h0bWxFbGVtZW50O1xuICAgIHRoaXMuc3ZnSHRtbEVsZW1lbnQgPSBzdmdIdG1sRWxlbWVudDtcbiAgICB0aGlzLm1vZGVsVmFsaWRhdGlvbi52YWxpZGF0ZU1vZGVsKHRoaXMubW9kZWwpO1xuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RzID0gc2VsZWN0ZWRPYmplY3RzO1xuXG4gICAgdGhpcy5kcm9wTm9kZSA9IGRyb3BOb2RlIHx8ICgoKSA9PiB7fSk7XG4gICAgdGhpcy5jcmVhdGVFZGdlID0gY3JlYXRlRWRnZSB8fCAoKGV2ZW50LCBlZGdlKSA9PiBvZih7Li4uZWRnZSwgbGFiZWw6ICdsYWJlbCd9KSk7XG4gICAgdGhpcy5lZGdlQWRkZWRDYWxsYmFjayA9IGVkZ2VBZGRlZENhbGxiYWNrIHx8ICgoKSA9PiB7fSk7XG4gICAgdGhpcy5ub2RlUmVtb3ZlZENhbGxiYWNrID0gbm9kZVJlbW92ZWRDYWxsYmFjayB8fCAoKCkgPT4ge30pO1xuICAgIHRoaXMuZWRnZVJlbW92ZWRDYWxsYmFjayA9IGVkZ2VSZW1vdmVkQ2FsbGJhY2sgfHwgKCgpID0+IHt9KTtcblxuICAgIHRoaXMuY29ubmVjdG9ycyA9IG5ldyBDb25uZWN0b3JzTW9kZWwodGhpcyk7XG4gICAgdGhpcy5ub2RlcyA9IG5ldyBOb2Rlc01vZGVsKHRoaXMpO1xuICAgIHRoaXMuZWRnZXMgPSBuZXcgRWRnZXNNb2RlbCh0aGlzKTtcblxuICAgIHRoaXMuZGVib3VuY2VyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5tb2RlbENoYW5nZWQuZW1pdCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBub3RpZnlNb2RlbENoYW5nZWQoKSB7XG4gICAgdGhpcy5kZWJvdW5jZXIubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIGRldGVjdENoYW5nZXMoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RPYmplY3Qob2JqZWN0OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0VkaXRhYmxlKCkpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0cy5pbmRleE9mKG9iamVjdCkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVzZWxlY3RPYmplY3Qob2JqZWN0OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0VkaXRhYmxlKCkpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZE9iamVjdHMuaW5kZXhPZihvYmplY3QpO1xuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyaWVkIHRvIGRlc2VsZWN0IGFuIHVuc2VsZWN0ZWQgb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RlZE9iamVjdChvYmplY3Q6IGFueSkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRPYmplY3Qob2JqZWN0KSkge1xuICAgICAgdGhpcy5kZXNlbGVjdE9iamVjdChvYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdE9iamVjdChvYmplY3QpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGVjdGVkT2JqZWN0KG9iamVjdDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPYmplY3RzLmluZGV4T2Yob2JqZWN0KSAhPT0gLTE7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsKCkge1xuICAgIHRoaXMubW9kZWwubm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGlmICghbm9kZS5yZWFkb25seSkge1xuICAgICAgICB0aGlzLm5vZGVzLnNlbGVjdChub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm1vZGVsLmVkZ2VzLmZvckVhY2goZWRnZSA9PiB7XG4gICAgICB0aGlzLmVkZ2VzLnNlbGVjdChlZGdlKTtcbiAgICB9KTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0cy5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZE9iamVjdHMubGVuZ3RoKTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0VkaXRPYmplY3Qob2JqZWN0OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9iamVjdHMubGVuZ3RoID09PSAxICYmXG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0cy5pbmRleE9mKG9iamVjdCkgIT09IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBpblJlY3RCb3goeDogbnVtYmVyLCB5OiBudW1iZXIsIHJlY3RCb3g6IEZjUmVjdEJveCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB4ID49IHJlY3RCb3gubGVmdCAmJiB4IDw9IHJlY3RCb3gucmlnaHQgJiZcbiAgICAgIHkgPj0gcmVjdEJveC50b3AgJiYgeSA8PSByZWN0Qm94LmJvdHRvbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtSW5mb0F0UG9pbnQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBGY0l0ZW1JbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgbm9kZTogdGhpcy5nZXROb2RlQXRQb2ludCh4LCB5KSxcbiAgICAgIGVkZ2U6IHRoaXMuZ2V0RWRnZUF0UG9pbnQoeCwgeSlcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldE5vZGVBdFBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyKTogRmNOb2RlIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5tb2RlbC5ub2Rlcykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMubm9kZXMuZ2V0SHRtbEVsZW1lbnQobm9kZS5pZCk7XG4gICAgICBjb25zdCBub2RlRWxlbWVudEJveCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAoeCA+PSBub2RlRWxlbWVudEJveC5sZWZ0ICYmIHggPD0gbm9kZUVsZW1lbnRCb3gucmlnaHRcbiAgICAgICAgJiYgeSA+PSBub2RlRWxlbWVudEJveC50b3AgJiYgeSA8PSBub2RlRWxlbWVudEJveC5ib3R0b20pIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldEVkZ2VBdFBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyKTogRmNFZGdlIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTtcbiAgICBjb25zdCBpZCA9IGVsZW1lbnQuaWQ7XG4gICAgbGV0IGVkZ2VJbmRleCA9IC0xO1xuICAgIGlmIChpZCkge1xuICAgICAgaWYgKGlkLnN0YXJ0c1dpdGgoJ2ZjLWVkZ2UtcGF0aC0nKSkge1xuICAgICAgICBlZGdlSW5kZXggPSBOdW1iZXIoaWQuc3Vic3RyaW5nKCdmYy1lZGdlLXBhdGgtJy5sZW5ndGgpKTtcbiAgICAgIH0gZWxzZSBpZiAoaWQuc3RhcnRzV2l0aCgnZmMtZWRnZS1sYWJlbC0nKSkge1xuICAgICAgICBlZGdlSW5kZXggPSBOdW1iZXIoaWQuc3Vic3RyaW5nKCdmYy1lZGdlLWxhYmVsLScubGVuZ3RoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlZGdlSW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZWRnZXNbZWRnZUluZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsSW5SZWN0KHJlY3RCb3g6IEZjUmVjdEJveCkge1xuICAgIHRoaXMubW9kZWwubm9kZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLm5vZGVzLmdldEh0bWxFbGVtZW50KHZhbHVlLmlkKTtcbiAgICAgIGNvbnN0IG5vZGVFbGVtZW50Qm94ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmICghdmFsdWUucmVhZG9ubHkpIHtcbiAgICAgICAgY29uc3QgeCA9IG5vZGVFbGVtZW50Qm94LmxlZnQgKyBub2RlRWxlbWVudEJveC53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IHkgPSBub2RlRWxlbWVudEJveC50b3AgKyBub2RlRWxlbWVudEJveC5oZWlnaHQgLyAyO1xuICAgICAgICBpZiAodGhpcy5pblJlY3RCb3goeCwgeSwgcmVjdEJveCkpIHtcbiAgICAgICAgICB0aGlzLm5vZGVzLnNlbGVjdCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMubm9kZXMuaXNTZWxlY3RlZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZXMuZGVzZWxlY3QodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnRCb3ggPSB0aGlzLmNhbnZhc0h0bWxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMubW9kZWwuZWRnZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5lZGdlcy5zb3VyY2VDb29yZCh2YWx1ZSk7XG4gICAgICBjb25zdCBlbmQgPSB0aGlzLmVkZ2VzLmRlc3RDb29yZCh2YWx1ZSk7XG4gICAgICBjb25zdCB4ID0gKHN0YXJ0LnggKyBlbmQueCkgLyAyICsgY2FudmFzRWxlbWVudEJveC5sZWZ0O1xuICAgICAgY29uc3QgeSA9IChzdGFydC55ICsgZW5kLnkpIC8gMiArIGNhbnZhc0VsZW1lbnRCb3gudG9wO1xuICAgICAgaWYgKHRoaXMuaW5SZWN0Qm94KHgsIHksIHJlY3RCb3gpKSB7XG4gICAgICAgIHRoaXMuZWRnZXMuc2VsZWN0KHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmVkZ2VzLmlzU2VsZWN0ZWQodmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5lZGdlcy5kZXNlbGVjdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVTZWxlY3RlZCgpIHtcbiAgICBjb25zdCBlZGdlc1RvRGVsZXRlID0gdGhpcy5lZGdlcy5nZXRTZWxlY3RlZEVkZ2VzKCk7XG4gICAgZWRnZXNUb0RlbGV0ZS5mb3JFYWNoKChlZGdlKSA9PiB7XG4gICAgICB0aGlzLmVkZ2VzLmRlbGV0ZShlZGdlKTtcbiAgICB9KTtcbiAgICBjb25zdCBub2Rlc1RvRGVsZXRlID0gdGhpcy5ub2Rlcy5nZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgbm9kZXNUb0RlbGV0ZS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICB0aGlzLm5vZGVzLmRlbGV0ZShub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpc0VkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRyb3BUYXJnZXRJZCA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGlzRHJvcFNvdXJjZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wVGFyZ2V0SWQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXREcmFnSW1hZ2UoKTogSFRNTEltYWdlRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmRyYWdJbWFnZSkge1xuICAgICAgdGhpcy5kcmFnSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIHRoaXMuZHJhZ0ltYWdlLnNyYyA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3lINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQlJBQTcnO1xuICAgICAgdGhpcy5kcmFnSW1hZ2Uuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kcmFnSW1hZ2U7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJDYWxsYmFja3MoZWRnZUFkZGVkQ2FsbGJhY2s6IChlZGdlOiBGY0VkZ2UpID0+IHZvaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlUmVtb3ZlZENhbGxiYWNrOiAobm9kZTogRmNOb2RlKSA9PiB2b2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZVJlbW92ZWRDYWxsYmFjazogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZCkge1xuICAgIHRoaXMuZWRnZUFkZGVkQ2FsbGJhY2sgPSBlZGdlQWRkZWRDYWxsYmFjaztcbiAgICB0aGlzLm5vZGVSZW1vdmVkQ2FsbGJhY2sgPSBub2RlUmVtb3ZlZENhbGxiYWNrO1xuICAgIHRoaXMuZWRnZVJlbW92ZWRDYWxsYmFjayA9IGVkZ2VSZW1vdmVkQ2FsbGJhY2s7XG4gIH1cblxufVxuXG5pbnRlcmZhY2UgSHRtbEVsZW1lbnRNYXAgeyBbaWQ6IHN0cmluZ106IEhUTUxFbGVtZW50OyB9XG5cbmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmNNb2RlbDxUPiB7XG5cbiAgbW9kZWxTZXJ2aWNlOiBGY01vZGVsU2VydmljZTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IobW9kZWxTZXJ2aWNlOiBGY01vZGVsU2VydmljZSkge1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlID0gbW9kZWxTZXJ2aWNlO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdChvYmplY3Q6IFQpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5zZWxlY3RPYmplY3Qob2JqZWN0KTtcbiAgfVxuXG4gIHB1YmxpYyBkZXNlbGVjdChvYmplY3Q6IFQpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5kZXNlbGVjdE9iamVjdChvYmplY3QpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlbGVjdGVkKG9iamVjdDogVCkge1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLnRvZ2dsZVNlbGVjdGVkT2JqZWN0KG9iamVjdCk7XG4gIH1cblxuICBwdWJsaWMgaXNTZWxlY3RlZChvYmplY3Q6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2UuaXNTZWxlY3RlZE9iamVjdChvYmplY3QpO1xuICB9XG5cbiAgcHVibGljIGlzRWRpdChvYmplY3Q6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2UuaXNFZGl0T2JqZWN0KG9iamVjdCk7XG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdG9yc01vZGVsIGV4dGVuZHMgQWJzdHJhY3RGY01vZGVsPEZjQ29ubmVjdG9yPiB7XG5cbiAgY29uc3RydWN0b3IobW9kZWxTZXJ2aWNlOiBGY01vZGVsU2VydmljZSkge1xuICAgIHN1cGVyKG1vZGVsU2VydmljZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29ubmVjdG9yKGNvbm5lY3RvcklkOiBzdHJpbmcpOiBGY0Nvbm5lY3RvciB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbW9kZWwubm9kZXMpIHtcbiAgICAgIGZvciAoY29uc3QgY29ubmVjdG9yIG9mIG5vZGUuY29ubmVjdG9ycykge1xuICAgICAgICBpZiAoY29ubmVjdG9yLmlkID09PSBjb25uZWN0b3JJZCkge1xuICAgICAgICAgIHJldHVybiBjb25uZWN0b3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0SHRtbEVsZW1lbnQoY29ubmVjdG9ySWQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2UuY29ubmVjdG9yc0h0bWxFbGVtZW50c1tjb25uZWN0b3JJZF07XG4gIH1cblxuICBwdWJsaWMgc2V0SHRtbEVsZW1lbnQoY29ubmVjdG9ySWQ6IHN0cmluZywgZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5jb25uZWN0b3JzSHRtbEVsZW1lbnRzW2Nvbm5lY3RvcklkXSA9IGVsZW1lbnQ7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29vcmRzKGNvbm5lY3RvcklkOiBzdHJpbmcsIGNlbnRlcmVkPzogYm9vbGVhbik6IEZjQ29vcmRzIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRIdG1sRWxlbWVudChjb25uZWN0b3JJZCk7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5tb2RlbFNlcnZpY2UuY2FudmFzSHRtbEVsZW1lbnQ7XG4gICAgaWYgKGVsZW1lbnQgPT09IG51bGwgfHwgZWxlbWVudCA9PT0gdW5kZWZpbmVkIHx8IGNhbnZhcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt4OiAwLCB5OiAwfTtcbiAgICB9XG4gICAgY29uc3QgY29ubmVjdG9yRWxlbWVudEJveCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY2FudmFzRWxlbWVudEJveCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBsZXQgY29vcmRzOiBGY0Nvb3JkcyA9IHtcbiAgICAgIHg6IGNvbm5lY3RvckVsZW1lbnRCb3gubGVmdCAtIGNhbnZhc0VsZW1lbnRCb3gubGVmdCxcbiAgICAgIHk6IGNvbm5lY3RvckVsZW1lbnRCb3gudG9wIC0gY2FudmFzRWxlbWVudEJveC50b3BcbiAgICB9O1xuICAgIGlmIChjZW50ZXJlZCkge1xuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBNYXRoLnJvdW5kKGNvb3Jkcy54ICsgZWxlbWVudC5vZmZzZXRXaWR0aCAvIDIpLFxuICAgICAgICB5OiBNYXRoLnJvdW5kKGNvb3Jkcy55ICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb3JkcztcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb29yZHMoY29ubmVjdG9ySWQ6IHN0cmluZyk6IEZjQ29vcmRzIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q29vcmRzKGNvbm5lY3RvcklkLCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VudGVyZWRDb29yZChjb25uZWN0b3JJZDogc3RyaW5nKTogRmNDb29yZHMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDb29yZHMoY29ubmVjdG9ySWQsIHRydWUpO1xuICB9XG59XG5cbmNsYXNzIE5vZGVzTW9kZWwgZXh0ZW5kcyBBYnN0cmFjdEZjTW9kZWw8RmNOb2RlPiB7XG5cbiAgY29uc3RydWN0b3IobW9kZWxTZXJ2aWNlOiBGY01vZGVsU2VydmljZSkge1xuICAgIHN1cGVyKG1vZGVsU2VydmljZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29ubmVjdG9yc0J5VHlwZShub2RlOiBGY05vZGUsIHR5cGU6IHN0cmluZyk6IEFycmF5PEZjQ29ubmVjdG9yPiB7XG4gICAgcmV0dXJuIG5vZGUuY29ubmVjdG9ycy5maWx0ZXIoKGNvbm5lY3RvcikgPT4ge1xuICAgICAgcmV0dXJuIGNvbm5lY3Rvci50eXBlID09PSB0eXBlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkQ29ubmVjdG9yKG5vZGU6IEZjTm9kZSwgY29ubmVjdG9yOiBGY0Nvbm5lY3Rvcikge1xuICAgIG5vZGUuY29ubmVjdG9ycy5wdXNoKGNvbm5lY3Rvcik7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsVmFsaWRhdGlvbi52YWxpZGF0ZU5vZGUobm9kZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG5vZGUuY29ubmVjdG9ycy5zcGxpY2Uobm9kZS5jb25uZWN0b3JzLmluZGV4T2YoY29ubmVjdG9yKSwgMSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKG5vZGU6IEZjTm9kZSkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgIHRoaXMuZGVzZWxlY3Qobm9kZSk7XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbFNlcnZpY2UubW9kZWw7XG4gICAgY29uc3QgaW5kZXggPSBtb2RlbC5ub2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXNzZWQgdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyaWVkIHRvIGRlbGV0ZSBub3QgZXhpc3Rpbmcgbm9kZScpO1xuICAgIH1cbiAgICBjb25zdCBjb25uZWN0b3JJZHMgPSB0aGlzLmdldENvbm5lY3Rvcklkcyhub2RlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZGVsLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gbW9kZWwuZWRnZXNbaV07XG4gICAgICBpZiAoY29ubmVjdG9ySWRzLmluZGV4T2YoZWRnZS5zb3VyY2UpICE9PSAtMSB8fCBjb25uZWN0b3JJZHMuaW5kZXhPZihlZGdlLmRlc3RpbmF0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuZGVsZXRlKGVkZ2UpO1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgfVxuICAgIG1vZGVsLm5vZGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2Uubm90aWZ5TW9kZWxDaGFuZ2VkKCk7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2Uubm9kZVJlbW92ZWRDYWxsYmFjayhub2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZE5vZGVzKCk6IEFycmF5PEZjTm9kZT4ge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbFNlcnZpY2UubW9kZWw7XG4gICAgcmV0dXJuIG1vZGVsLm5vZGVzLmZpbHRlcigobm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWxTZXJ2aWNlLm5vZGVzLmlzU2VsZWN0ZWQobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ2xpY2tlZChub2RlOiBGY05vZGUsIGN0cmxLZXk/OiBib29sZWFuKSB7XG4gICAgaWYgKGN0cmxLZXkpIHtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLm5vZGVzLnRvZ2dsZVNlbGVjdGVkKG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5kZXNlbGVjdEFsbCgpO1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXMuc2VsZWN0KG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2FkZE5vZGUobm9kZTogRmNOb2RlKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICB0cnkge1xuICAgICAgbW9kZWwubm9kZXMucHVzaChub2RlKTtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsVmFsaWRhdGlvbi52YWxpZGF0ZU5vZGVzKG1vZGVsLm5vZGVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbW9kZWwubm9kZXMuc3BsaWNlKG1vZGVsLm5vZGVzLmluZGV4T2Yobm9kZSksIDEpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldENvbm5lY3Rvcklkcyhub2RlOiBGY05vZGUpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbm9kZS5jb25uZWN0b3JzLm1hcCgoY29ubmVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gY29ubmVjdG9yLmlkO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldE5vZGVCeUNvbm5lY3RvcklkKGNvbm5lY3RvcklkOiBzdHJpbmcpOiBGY05vZGUge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbFNlcnZpY2UubW9kZWw7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG1vZGVsLm5vZGVzKSB7XG4gICAgICBjb25zdCBjb25uZWN0b3JJZHMgPSB0aGlzLmdldENvbm5lY3Rvcklkcyhub2RlKTtcbiAgICAgIGlmIChjb25uZWN0b3JJZHMuaW5kZXhPZihjb25uZWN0b3JJZCkgPiAtMSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0SHRtbEVsZW1lbnQobm9kZUlkOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxTZXJ2aWNlLm5vZGVzSHRtbEVsZW1lbnRzW25vZGVJZF07XG4gIH1cblxuICBwdWJsaWMgc2V0SHRtbEVsZW1lbnQobm9kZUlkOiBzdHJpbmcsIGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXNIdG1sRWxlbWVudHNbbm9kZUlkXSA9IGVsZW1lbnQ7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbn1cblxuY2xhc3MgRWRnZXNNb2RlbCBleHRlbmRzIEFic3RyYWN0RmNNb2RlbDxGY0VkZ2U+IHtcblxuICBjb25zdHJ1Y3Rvcihtb2RlbFNlcnZpY2U6IEZjTW9kZWxTZXJ2aWNlKSB7XG4gICAgc3VwZXIobW9kZWxTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkeShlZGdlOiBGY0VkZ2UpOiBib29sZWFuIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLm1vZGVsU2VydmljZS5jb25uZWN0b3JzLmdldEh0bWxFbGVtZW50KGVkZ2Uuc291cmNlKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMubW9kZWxTZXJ2aWNlLmNvbm5lY3RvcnMuZ2V0SHRtbEVsZW1lbnQoZWRnZS5kZXN0aW5hdGlvbik7XG4gICAgcmV0dXJuIHNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIGRlc3RpbmF0aW9uICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc291cmNlQ29vcmQoZWRnZTogRmNFZGdlKTogRmNDb29yZHMge1xuICAgIHJldHVybiB0aGlzLm1vZGVsU2VydmljZS5jb25uZWN0b3JzLmdldENlbnRlcmVkQ29vcmQoZWRnZS5zb3VyY2UpO1xuICB9XG5cbiAgcHVibGljIGRlc3RDb29yZChlZGdlOiBGY0VkZ2UpOiBGY0Nvb3JkcyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxTZXJ2aWNlLmNvbm5lY3RvcnMuZ2V0Q2VudGVyZWRDb29yZChlZGdlLmRlc3RpbmF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUoZWRnZTogRmNFZGdlKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICBjb25zdCBpbmRleCA9IG1vZGVsLmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmllZCB0byBkZWxldGUgbm90IGV4aXN0aW5nIGVkZ2UnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChlZGdlKSkge1xuICAgICAgdGhpcy5kZXNlbGVjdChlZGdlKTtcbiAgICB9XG4gICAgbW9kZWwuZWRnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5ub3RpZnlNb2RlbENoYW5nZWQoKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlUmVtb3ZlZENhbGxiYWNrKGVkZ2UpO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkRWRnZXMoKTogQXJyYXk8RmNFZGdlPiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICByZXR1cm4gbW9kZWwuZWRnZXMuZmlsdGVyKChlZGdlKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuaXNTZWxlY3RlZChlZGdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVFZGdlTW91c2VDbGljayhlZGdlOiBGY0VkZ2UsIGN0cmxLZXk/OiBib29sZWFuKSB7XG4gICAgaWYgKGN0cmxLZXkpIHtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLmVkZ2VzLnRvZ2dsZVNlbGVjdGVkKGVkZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5kZXNlbGVjdEFsbCgpO1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuc2VsZWN0KGVkZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwdXRFZGdlKGVkZ2U6IEZjRWRnZSkge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbFNlcnZpY2UubW9kZWw7XG4gICAgbW9kZWwuZWRnZXMucHVzaChlZGdlKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5ub3RpZnlNb2RlbENoYW5nZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBfYWRkRWRnZShldmVudDogRXZlbnQsIHNvdXJjZUNvbm5lY3RvcjogRmNDb25uZWN0b3IsIGRlc3RDb25uZWN0b3I6IEZjQ29ubmVjdG9yLCBsYWJlbDogc3RyaW5nKSB7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlQ29ubmVjdG9yKHNvdXJjZUNvbm5lY3Rvcik7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlQ29ubmVjdG9yKGRlc3RDb25uZWN0b3IpO1xuICAgIGNvbnN0IGVkZ2U6IEZjRWRnZSA9IHt9O1xuICAgIGVkZ2Uuc291cmNlID0gc291cmNlQ29ubmVjdG9yLmlkO1xuICAgIGVkZ2UuZGVzdGluYXRpb24gPSBkZXN0Q29ubmVjdG9yLmlkO1xuICAgIGVkZ2UubGFiZWwgPSBsYWJlbDtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsO1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsVmFsaWRhdGlvbi52YWxpZGF0ZUVkZ2VzKG1vZGVsLmVkZ2VzLmNvbmNhdChbZWRnZV0pLCBtb2RlbC5ub2Rlcyk7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UuY3JlYXRlRWRnZShldmVudCwgZWRnZSkuc3Vic2NyaWJlKFxuICAgICAgKGNyZWF0ZWQpID0+IHtcbiAgICAgICAgbW9kZWwuZWRnZXMucHVzaChjcmVhdGVkKTtcbiAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2Uubm90aWZ5TW9kZWxDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLmVkZ2VBZGRlZENhbGxiYWNrKGNyZWF0ZWQpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1mbG93Y2hhcnQvIiwic291cmNlcyI6WyJsaWIvbW9kZWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE1BQU0sT0FBTyxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7SUE0QnpCLFlBQVksZUFBeUMsRUFDekMsS0FBYyxFQUNkLFlBQStCLEVBQy9CLG9CQUFrQyxFQUNsQyxlQUFzQixFQUN0QixRQUE4QyxFQUM5QyxVQUE4RCxFQUM5RCxpQkFBeUMsRUFDekMsbUJBQTJDLEVBQzNDLG1CQUEyQyxFQUMzQyxpQkFBOEIsRUFDOUIsY0FBMEI7UUFoQ3RDLDJCQUFzQixHQUFtQixFQUFFLENBQUM7UUFDNUMsc0JBQWlCLEdBQW1CLEVBQUUsQ0FBQztRQUN2QyxzQkFBaUIsR0FBZ0IsSUFBSSxDQUFDO1FBQ3RDLGNBQVMsR0FBcUIsSUFBSSxDQUFDO1FBQ25DLG1CQUFjLEdBQWUsSUFBSSxDQUFDO1FBV2pCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBbUI5QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFB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QU8sQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLENBQUMsRUFDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmNNb2RlbFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbHZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGY0Nvbm5lY3RvciwgRmNDb29yZHMsIEZjRWRnZSwgRmNJdGVtSW5mbywgRmNNb2RlbCwgRmNOb2RlLCBGY1JlY3RCb3ggfSBmcm9tICcuL25neC1mbG93Y2hhcnQubW9kZWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBGY01vZGVsU2VydmljZSB7XG5cbiAgbW9kZWxWYWxpZGF0aW9uOiBGY01vZGVsVmFsaWRhdGlvblNlcnZpY2U7XG4gIG1vZGVsOiBGY01vZGVsO1xuICBwcml2YXRlIHJlYWRvbmx5IGRldGVjdENoYW5nZXNTdWJqZWN0OiBTdWJqZWN0PGFueT47XG4gIHNlbGVjdGVkT2JqZWN0czogYW55W107XG5cbiAgY29ubmVjdG9yc0h0bWxFbGVtZW50czogSHRtbEVsZW1lbnRNYXAgPSB7fTtcbiAgbm9kZXNIdG1sRWxlbWVudHM6IEh0bWxFbGVtZW50TWFwID0ge307XG4gIGNhbnZhc0h0bWxFbGVtZW50OiBIVE1MRWxlbWVudCA9IG51bGw7XG4gIGRyYWdJbWFnZTogSFRNTEltYWdlRWxlbWVudCA9IG51bGw7XG4gIHN2Z0h0bWxFbGVtZW50OiBTVkdFbGVtZW50ID0gbnVsbDtcblxuICBkcm9wTm9kZTogKGV2ZW50OiBFdmVudCwgbm9kZTogRmNOb2RlKSA9PiB2b2lkO1xuICBjcmVhdGVFZGdlOiAoZXZlbnQ6IEV2ZW50LCBlZGdlOiBGY0VkZ2UpID0+IE9ic2VydmFibGU8RmNFZGdlPjtcbiAgZWRnZUFkZGVkQ2FsbGJhY2s6IChlZGdlOiBGY0VkZ2UpID0+IHZvaWQ7XG4gIG5vZGVSZW1vdmVkQ2FsbGJhY2s6IChub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIGVkZ2VSZW1vdmVkQ2FsbGJhY2s6IChlZGdlOiBGY0VkZ2UpID0+IHZvaWQ7XG5cbiAgZHJvcFRhcmdldElkOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb2RlbENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlciA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBjb25uZWN0b3JzOiBDb25uZWN0b3JzTW9kZWw7XG4gIG5vZGVzOiBOb2Rlc01vZGVsO1xuICBlZGdlczogRWRnZXNNb2RlbDtcblxuICBjb25zdHJ1Y3Rvcihtb2RlbFZhbGlkYXRpb246IEZjTW9kZWxWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgbW9kZWw6IEZjTW9kZWwsXG4gICAgICAgICAgICAgIG1vZGVsQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4sXG4gICAgICAgICAgICAgIGRldGVjdENoYW5nZXNTdWJqZWN0OiBTdWJqZWN0PGFueT4sXG4gICAgICAgICAgICAgIHNlbGVjdGVkT2JqZWN0czogYW55W10sXG4gICAgICAgICAgICAgIGRyb3BOb2RlOiAoZXZlbnQ6IEV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQsXG4gICAgICAgICAgICAgIGNyZWF0ZUVkZ2U6IChldmVudDogRXZlbnQsIGVkZ2U6IEZjRWRnZSkgPT4gT2JzZXJ2YWJsZTxGY0VkZ2U+LFxuICAgICAgICAgICAgICBlZGdlQWRkZWRDYWxsYmFjazogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZCxcbiAgICAgICAgICAgICAgbm9kZVJlbW92ZWRDYWxsYmFjazogKG5vZGU6IEZjTm9kZSkgPT4gdm9pZCxcbiAgICAgICAgICAgICAgZWRnZVJlbW92ZWRDYWxsYmFjazogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZCxcbiAgICAgICAgICAgICAgY2FudmFzSHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBzdmdIdG1sRWxlbWVudDogU1ZHRWxlbWVudCkge1xuXG4gICAgdGhpcy5tb2RlbFZhbGlkYXRpb24gPSBtb2RlbFZhbGlkYXRpb247XG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuICAgIHRoaXMubW9kZWxDaGFuZ2VkID0gbW9kZWxDaGFuZ2VkO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlc1N1YmplY3QgPSBkZXRlY3RDaGFuZ2VzU3ViamVjdDtcbiAgICB0aGlzLmNhbnZhc0h0bWxFbGVtZW50ID0gY2FudmFzSHRtbEVsZW1lbnQ7XG4gICAgdGhpcy5zdmdIdG1sRWxlbWVudCA9IHN2Z0h0bWxFbGVtZW50O1xuICAgIHRoaXMubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlTW9kZWwodGhpcy5tb2RlbCk7XG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdHMgPSBzZWxlY3RlZE9iamVjdHM7XG5cbiAgICB0aGlzLmRyb3BOb2RlID0gZHJvcE5vZGUgfHwgKCgpID0+IHt9KTtcbiAgICB0aGlzLmNyZWF0ZUVkZ2UgPSBjcmVhdGVFZGdlIHx8ICgoZXZlbnQsIGVkZ2UpID0+IG9mKHsuLi5lZGdlLCBsYWJlbDogJ2xhYmVsJ30pKTtcbiAgICB0aGlzLmVkZ2VBZGRlZENhbGxiYWNrID0gZWRnZUFkZGVkQ2FsbGJhY2sgfHwgKCgpID0+IHt9KTtcbiAgICB0aGlzLm5vZGVSZW1vdmVkQ2FsbGJhY2sgPSBub2RlUmVtb3ZlZENhbGxiYWNrIHx8ICgoKSA9PiB7fSk7XG4gICAgdGhpcy5lZGdlUmVtb3ZlZENhbGxiYWNrID0gZWRnZVJlbW92ZWRDYWxsYmFjayB8fCAoKCkgPT4ge30pO1xuXG4gICAgdGhpcy5jb25uZWN0b3JzID0gbmV3IENvbm5lY3RvcnNNb2RlbCh0aGlzKTtcbiAgICB0aGlzLm5vZGVzID0gbmV3IE5vZGVzTW9kZWwodGhpcyk7XG4gICAgdGhpcy5lZGdlcyA9IG5ldyBFZGdlc01vZGVsKHRoaXMpO1xuXG4gICAgdGhpcy5kZWJvdW5jZXJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm1vZGVsQ2hhbmdlZC5lbWl0KCkpO1xuICB9XG5cbiAgcHVibGljIG5vdGlmeU1vZGVsQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmRlYm91bmNlci5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlc1N1YmplY3QubmV4dCgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdE9iamVjdChvYmplY3Q6IGFueSkge1xuICAgIGlmICh0aGlzLmlzRWRpdGFibGUoKSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3RzLmluZGV4T2Yob2JqZWN0KSA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdHMucHVzaChvYmplY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZXNlbGVjdE9iamVjdChvYmplY3Q6IGFueSkge1xuICAgIGlmICh0aGlzLmlzRWRpdGFibGUoKSkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkT2JqZWN0cy5pbmRleE9mKG9iamVjdCk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHJpZWQgdG8gZGVzZWxlY3QgYW4gdW5zZWxlY3RlZCBvYmplY3QnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlbGVjdGVkT2JqZWN0KG9iamVjdDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZE9iamVjdChvYmplY3QpKSB7XG4gICAgICB0aGlzLmRlc2VsZWN0T2JqZWN0KG9iamVjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG9iamVjdCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzU2VsZWN0ZWRPYmplY3Qob2JqZWN0OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9iamVjdHMuaW5kZXhPZihvYmplY3QpICE9PSAtMTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5tb2RlbC5ub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgaWYgKCFub2RlLnJlYWRvbmx5KSB7XG4gICAgICAgIHRoaXMubm9kZXMuc2VsZWN0KG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubW9kZWwuZWRnZXMuZm9yRWFjaChlZGdlID0+IHtcbiAgICAgIHRoaXMuZWRnZXMuc2VsZWN0KGVkZ2UpO1xuICAgIH0pO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RzLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkT2JqZWN0cy5sZW5ndGgpO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIGlzRWRpdE9iamVjdChvYmplY3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT2JqZWN0cy5sZW5ndGggPT09IDEgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RzLmluZGV4T2Yob2JqZWN0KSAhPT0gLTE7XG4gIH1cblxuICBwcml2YXRlIGluUmVjdEJveCh4OiBudW1iZXIsIHk6IG51bWJlciwgcmVjdEJveDogRmNSZWN0Qm94KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHggPj0gcmVjdEJveC5sZWZ0ICYmIHggPD0gcmVjdEJveC5yaWdodCAmJlxuICAgICAgeSA+PSByZWN0Qm94LnRvcCAmJiB5IDw9IHJlY3RCb3guYm90dG9tO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1JbmZvQXRQb2ludCh4OiBudW1iZXIsIHk6IG51bWJlcik6IEZjSXRlbUluZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBub2RlOiB0aGlzLmdldE5vZGVBdFBvaW50KHgsIHkpLFxuICAgICAgZWRnZTogdGhpcy5nZXRFZGdlQXRQb2ludCh4LCB5KVxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZUF0UG9pbnQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBGY05vZGUge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLm1vZGVsLm5vZGVzKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5ub2Rlcy5nZXRIdG1sRWxlbWVudChub2RlLmlkKTtcbiAgICAgIGNvbnN0IG5vZGVFbGVtZW50Qm94ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmICh4ID49IG5vZGVFbGVtZW50Qm94LmxlZnQgJiYgeCA8PSBub2RlRWxlbWVudEJveC5yaWdodFxuICAgICAgICAmJiB5ID49IG5vZGVFbGVtZW50Qm94LnRvcCAmJiB5IDw9IG5vZGVFbGVtZW50Qm94LmJvdHRvbSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0RWRnZUF0UG9pbnQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBGY0VkZ2Uge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpO1xuICAgIGNvbnN0IGlkID0gZWxlbWVudC5pZDtcbiAgICBsZXQgZWRnZUluZGV4ID0gLTE7XG4gICAgaWYgKGlkKSB7XG4gICAgICBpZiAoaWQuc3RhcnRzV2l0aCgnZmMtZWRnZS1wYXRoLScpKSB7XG4gICAgICAgIGVkZ2VJbmRleCA9IE51bWJlcihpZC5zdWJzdHJpbmcoJ2ZjLWVkZ2UtcGF0aC0nLmxlbmd0aCkpO1xuICAgICAgfSBlbHNlIGlmIChpZC5zdGFydHNXaXRoKCdmYy1lZGdlLWxhYmVsLScpKSB7XG4gICAgICAgIGVkZ2VJbmRleCA9IE51bWJlcihpZC5zdWJzdHJpbmcoJ2ZjLWVkZ2UtbGFiZWwtJy5sZW5ndGgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVkZ2VJbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlbC5lZGdlc1tlZGdlSW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbGxJblJlY3QocmVjdEJveDogRmNSZWN0Qm94KSB7XG4gICAgdGhpcy5tb2RlbC5ub2Rlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMubm9kZXMuZ2V0SHRtbEVsZW1lbnQodmFsdWUuaWQpO1xuICAgICAgY29uc3Qgbm9kZUVsZW1lbnRCb3ggPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKCF2YWx1ZS5yZWFkb25seSkge1xuICAgICAgICBjb25zdCB4ID0gbm9kZUVsZW1lbnRCb3gubGVmdCArIG5vZGVFbGVtZW50Qm94LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgeSA9IG5vZGVFbGVtZW50Qm94LnRvcCArIG5vZGVFbGVtZW50Qm94LmhlaWdodCAvIDI7XG4gICAgICAgIGlmICh0aGlzLmluUmVjdEJveCh4LCB5LCByZWN0Qm94KSkge1xuICAgICAgICAgIHRoaXMubm9kZXMuc2VsZWN0KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5pc1NlbGVjdGVkKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5ub2Rlcy5kZXNlbGVjdCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgY2FudmFzRWxlbWVudEJveCA9IHRoaXMuY2FudmFzSHRtbEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5tb2RlbC5lZGdlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmVkZ2VzLnNvdXJjZUNvb3JkKHZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZCA9IHRoaXMuZWRnZXMuZGVzdENvb3JkKHZhbHVlKTtcbiAgICAgIGNvbnN0IHggPSAoc3RhcnQueCArIGVuZC54KSAvIDIgKyBjYW52YXNFbGVtZW50Qm94LmxlZnQ7XG4gICAgICBjb25zdCB5ID0gKHN0YXJ0LnkgKyBlbmQueSkgLyAyICsgY2FudmFzRWxlbWVudEJveC50b3A7XG4gICAgICBpZiAodGhpcy5pblJlY3RCb3goeCwgeSwgcmVjdEJveCkpIHtcbiAgICAgICAgdGhpcy5lZGdlcy5zZWxlY3QodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZWRnZXMuaXNTZWxlY3RlZCh2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLmVkZ2VzLmRlc2VsZWN0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZVNlbGVjdGVkKCkge1xuICAgIGNvbnN0IGVkZ2VzVG9EZWxldGUgPSB0aGlzLmVkZ2VzLmdldFNlbGVjdGVkRWRnZXMoKTtcbiAgICBlZGdlc1RvRGVsZXRlLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICAgIHRoaXMuZWRnZXMuZGVsZXRlKGVkZ2UpO1xuICAgIH0pO1xuICAgIGNvbnN0IG5vZGVzVG9EZWxldGUgPSB0aGlzLm5vZGVzLmdldFNlbGVjdGVkTm9kZXMoKTtcbiAgICBub2Rlc1RvRGVsZXRlLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIHRoaXMubm9kZXMuZGVsZXRlKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGlzRWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcFRhcmdldElkID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgaXNEcm9wU291cmNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRyb3BUYXJnZXRJZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdldERyYWdJbWFnZSgpOiBIVE1MSW1hZ2VFbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZHJhZ0ltYWdlKSB7XG4gICAgICB0aGlzLmRyYWdJbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgdGhpcy5kcmFnSW1hZ2Uuc3JjID0gJ2RhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFBQUFQLy8veUg1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlCUkFBNyc7XG4gICAgICB0aGlzLmRyYWdJbWFnZS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRyYWdJbWFnZTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgSHRtbEVsZW1lbnRNYXAgeyBbaWQ6IHN0cmluZ106IEhUTUxFbGVtZW50OyB9XG5cbmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmNNb2RlbDxUPiB7XG5cbiAgbW9kZWxTZXJ2aWNlOiBGY01vZGVsU2VydmljZTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IobW9kZWxTZXJ2aWNlOiBGY01vZGVsU2VydmljZSkge1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlID0gbW9kZWxTZXJ2aWNlO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdChvYmplY3Q6IFQpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5zZWxlY3RPYmplY3Qob2JqZWN0KTtcbiAgfVxuXG4gIHB1YmxpYyBkZXNlbGVjdChvYmplY3Q6IFQpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5kZXNlbGVjdE9iamVjdChvYmplY3QpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlbGVjdGVkKG9iamVjdDogVCkge1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLnRvZ2dsZVNlbGVjdGVkT2JqZWN0KG9iamVjdCk7XG4gIH1cblxuICBwdWJsaWMgaXNTZWxlY3RlZChvYmplY3Q6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2UuaXNTZWxlY3RlZE9iamVjdChvYmplY3QpO1xuICB9XG5cbiAgcHVibGljIGlzRWRpdChvYmplY3Q6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2UuaXNFZGl0T2JqZWN0KG9iamVjdCk7XG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdG9yc01vZGVsIGV4dGVuZHMgQWJzdHJhY3RGY01vZGVsPEZjQ29ubmVjdG9yPiB7XG5cbiAgY29uc3RydWN0b3IobW9kZWxTZXJ2aWNlOiBGY01vZGVsU2VydmljZSkge1xuICAgIHN1cGVyKG1vZGVsU2VydmljZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29ubmVjdG9yKGNvbm5lY3RvcklkOiBzdHJpbmcpOiBGY0Nvbm5lY3RvciB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbW9kZWwubm9kZXMpIHtcbiAgICAgIGZvciAoY29uc3QgY29ubmVjdG9yIG9mIG5vZGUuY29ubmVjdG9ycykge1xuICAgICAgICBpZiAoY29ubmVjdG9yLmlkID09PSBjb25uZWN0b3JJZCkge1xuICAgICAgICAgIHJldHVybiBjb25uZWN0b3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0SHRtbEVsZW1lbnQoY29ubmVjdG9ySWQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2UuY29ubmVjdG9yc0h0bWxFbGVtZW50c1tjb25uZWN0b3JJZF07XG4gIH1cblxuICBwdWJsaWMgc2V0SHRtbEVsZW1lbnQoY29ubmVjdG9ySWQ6IHN0cmluZywgZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5jb25uZWN0b3JzSHRtbEVsZW1lbnRzW2Nvbm5lY3RvcklkXSA9IGVsZW1lbnQ7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29vcmRzKGNvbm5lY3RvcklkOiBzdHJpbmcsIGNlbnRlcmVkPzogYm9vbGVhbik6IEZjQ29vcmRzIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRIdG1sRWxlbWVudChjb25uZWN0b3JJZCk7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5tb2RlbFNlcnZpY2UuY2FudmFzSHRtbEVsZW1lbnQ7XG4gICAgaWYgKGVsZW1lbnQgPT09IG51bGwgfHwgZWxlbWVudCA9PT0gdW5kZWZpbmVkIHx8IGNhbnZhcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt4OiAwLCB5OiAwfTtcbiAgICB9XG4gICAgY29uc3QgY29ubmVjdG9yRWxlbWVudEJveCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY2FudmFzRWxlbWVudEJveCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBsZXQgY29vcmRzOiBGY0Nvb3JkcyA9IHtcbiAgICAgIHg6IGNvbm5lY3RvckVsZW1lbnRCb3gubGVmdCAtIGNhbnZhc0VsZW1lbnRCb3gubGVmdCxcbiAgICAgIHk6IGNvbm5lY3RvckVsZW1lbnRCb3gudG9wIC0gY2FudmFzRWxlbWVudEJveC50b3BcbiAgICB9O1xuICAgIGlmIChjZW50ZXJlZCkge1xuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBNYXRoLnJvdW5kKGNvb3Jkcy54ICsgZWxlbWVudC5vZmZzZXRXaWR0aCAvIDIpLFxuICAgICAgICB5OiBNYXRoLnJvdW5kKGNvb3Jkcy55ICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb3JkcztcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb29yZHMoY29ubmVjdG9ySWQ6IHN0cmluZyk6IEZjQ29vcmRzIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q29vcmRzKGNvbm5lY3RvcklkLCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VudGVyZWRDb29yZChjb25uZWN0b3JJZDogc3RyaW5nKTogRmNDb29yZHMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDb29yZHMoY29ubmVjdG9ySWQsIHRydWUpO1xuICB9XG59XG5cbmNsYXNzIE5vZGVzTW9kZWwgZXh0ZW5kcyBBYnN0cmFjdEZjTW9kZWw8RmNOb2RlPiB7XG5cbiAgY29uc3RydWN0b3IobW9kZWxTZXJ2aWNlOiBGY01vZGVsU2VydmljZSkge1xuICAgIHN1cGVyKG1vZGVsU2VydmljZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29ubmVjdG9yc0J5VHlwZShub2RlOiBGY05vZGUsIHR5cGU6IHN0cmluZyk6IEFycmF5PEZjQ29ubmVjdG9yPiB7XG4gICAgcmV0dXJuIG5vZGUuY29ubmVjdG9ycy5maWx0ZXIoKGNvbm5lY3RvcikgPT4ge1xuICAgICAgcmV0dXJuIGNvbm5lY3Rvci50eXBlID09PSB0eXBlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkQ29ubmVjdG9yKG5vZGU6IEZjTm9kZSwgY29ubmVjdG9yOiBGY0Nvbm5lY3Rvcikge1xuICAgIG5vZGUuY29ubmVjdG9ycy5wdXNoKGNvbm5lY3Rvcik7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsVmFsaWRhdGlvbi52YWxpZGF0ZU5vZGUobm9kZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG5vZGUuY29ubmVjdG9ycy5zcGxpY2Uobm9kZS5jb25uZWN0b3JzLmluZGV4T2YoY29ubmVjdG9yKSwgMSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKG5vZGU6IEZjTm9kZSkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgIHRoaXMuZGVzZWxlY3Qobm9kZSk7XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbFNlcnZpY2UubW9kZWw7XG4gICAgY29uc3QgaW5kZXggPSBtb2RlbC5ub2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXNzZWQgdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyaWVkIHRvIGRlbGV0ZSBub3QgZXhpc3Rpbmcgbm9kZScpO1xuICAgIH1cbiAgICBjb25zdCBjb25uZWN0b3JJZHMgPSB0aGlzLmdldENvbm5lY3Rvcklkcyhub2RlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZGVsLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gbW9kZWwuZWRnZXNbaV07XG4gICAgICBpZiAoY29ubmVjdG9ySWRzLmluZGV4T2YoZWRnZS5zb3VyY2UpICE9PSAtMSB8fCBjb25uZWN0b3JJZHMuaW5kZXhPZihlZGdlLmRlc3RpbmF0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuZGVsZXRlKGVkZ2UpO1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgfVxuICAgIG1vZGVsLm5vZGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2Uubm90aWZ5TW9kZWxDaGFuZ2VkKCk7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2Uubm9kZVJlbW92ZWRDYWxsYmFjayhub2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZE5vZGVzKCk6IEFycmF5PEZjTm9kZT4ge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbFNlcnZpY2UubW9kZWw7XG4gICAgcmV0dXJuIG1vZGVsLm5vZGVzLmZpbHRlcigobm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWxTZXJ2aWNlLm5vZGVzLmlzU2VsZWN0ZWQobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ2xpY2tlZChub2RlOiBGY05vZGUsIGN0cmxLZXk/OiBib29sZWFuKSB7XG4gICAgaWYgKGN0cmxLZXkpIHtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLm5vZGVzLnRvZ2dsZVNlbGVjdGVkKG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5kZXNlbGVjdEFsbCgpO1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXMuc2VsZWN0KG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2FkZE5vZGUobm9kZTogRmNOb2RlKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICB0cnkge1xuICAgICAgbW9kZWwubm9kZXMucHVzaChub2RlKTtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsVmFsaWRhdGlvbi52YWxpZGF0ZU5vZGVzKG1vZGVsLm5vZGVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbW9kZWwubm9kZXMuc3BsaWNlKG1vZGVsLm5vZGVzLmluZGV4T2Yobm9kZSksIDEpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldENvbm5lY3Rvcklkcyhub2RlOiBGY05vZGUpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbm9kZS5jb25uZWN0b3JzLm1hcCgoY29ubmVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gY29ubmVjdG9yLmlkO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldE5vZGVCeUNvbm5lY3RvcklkKGNvbm5lY3RvcklkOiBzdHJpbmcpOiBGY05vZGUge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbFNlcnZpY2UubW9kZWw7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG1vZGVsLm5vZGVzKSB7XG4gICAgICBjb25zdCBjb25uZWN0b3JJZHMgPSB0aGlzLmdldENvbm5lY3Rvcklkcyhub2RlKTtcbiAgICAgIGlmIChjb25uZWN0b3JJZHMuaW5kZXhPZihjb25uZWN0b3JJZCkgPiAtMSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0SHRtbEVsZW1lbnQobm9kZUlkOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxTZXJ2aWNlLm5vZGVzSHRtbEVsZW1lbnRzW25vZGVJZF07XG4gIH1cblxuICBwdWJsaWMgc2V0SHRtbEVsZW1lbnQobm9kZUlkOiBzdHJpbmcsIGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXNIdG1sRWxlbWVudHNbbm9kZUlkXSA9IGVsZW1lbnQ7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbn1cblxuY2xhc3MgRWRnZXNNb2RlbCBleHRlbmRzIEFic3RyYWN0RmNNb2RlbDxGY0VkZ2U+IHtcblxuICBjb25zdHJ1Y3Rvcihtb2RlbFNlcnZpY2U6IEZjTW9kZWxTZXJ2aWNlKSB7XG4gICAgc3VwZXIobW9kZWxTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkeShlZGdlOiBGY0VkZ2UpOiBib29sZWFuIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLm1vZGVsU2VydmljZS5jb25uZWN0b3JzLmdldEh0bWxFbGVtZW50KGVkZ2Uuc291cmNlKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMubW9kZWxTZXJ2aWNlLmNvbm5lY3RvcnMuZ2V0SHRtbEVsZW1lbnQoZWRnZS5kZXN0aW5hdGlvbik7XG4gICAgcmV0dXJuIHNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIGRlc3RpbmF0aW9uICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc291cmNlQ29vcmQoZWRnZTogRmNFZGdlKTogRmNDb29yZHMge1xuICAgIHJldHVybiB0aGlzLm1vZGVsU2VydmljZS5jb25uZWN0b3JzLmdldENlbnRlcmVkQ29vcmQoZWRnZS5zb3VyY2UpO1xuICB9XG5cbiAgcHVibGljIGRlc3RDb29yZChlZGdlOiBGY0VkZ2UpOiBGY0Nvb3JkcyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxTZXJ2aWNlLmNvbm5lY3RvcnMuZ2V0Q2VudGVyZWRDb29yZChlZGdlLmRlc3RpbmF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUoZWRnZTogRmNFZGdlKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICBjb25zdCBpbmRleCA9IG1vZGVsLmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmllZCB0byBkZWxldGUgbm90IGV4aXN0aW5nIGVkZ2UnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChlZGdlKSkge1xuICAgICAgdGhpcy5kZXNlbGVjdChlZGdlKTtcbiAgICB9XG4gICAgbW9kZWwuZWRnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5ub3RpZnlNb2RlbENoYW5nZWQoKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlUmVtb3ZlZENhbGxiYWNrKGVkZ2UpO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkRWRnZXMoKTogQXJyYXk8RmNFZGdlPiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICByZXR1cm4gbW9kZWwuZWRnZXMuZmlsdGVyKChlZGdlKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuaXNTZWxlY3RlZChlZGdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVFZGdlTW91c2VDbGljayhlZGdlOiBGY0VkZ2UsIGN0cmxLZXk/OiBib29sZWFuKSB7XG4gICAgaWYgKGN0cmxLZXkpIHtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLmVkZ2VzLnRvZ2dsZVNlbGVjdGVkKGVkZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5kZXNlbGVjdEFsbCgpO1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuc2VsZWN0KGVkZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwdXRFZGdlKGVkZ2U6IEZjRWRnZSkge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbFNlcnZpY2UubW9kZWw7XG4gICAgbW9kZWwuZWRnZXMucHVzaChlZGdlKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5ub3RpZnlNb2RlbENoYW5nZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBfYWRkRWRnZShldmVudDogRXZlbnQsIHNvdXJjZUNvbm5lY3RvcjogRmNDb25uZWN0b3IsIGRlc3RDb25uZWN0b3I6IEZjQ29ubmVjdG9yLCBsYWJlbDogc3RyaW5nKSB7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlQ29ubmVjdG9yKHNvdXJjZUNvbm5lY3Rvcik7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlQ29ubmVjdG9yKGRlc3RDb25uZWN0b3IpO1xuICAgIGNvbnN0IGVkZ2U6IEZjRWRnZSA9IHt9O1xuICAgIGVkZ2Uuc291cmNlID0gc291cmNlQ29ubmVjdG9yLmlkO1xuICAgIGVkZ2UuZGVzdGluYXRpb24gPSBkZXN0Q29ubmVjdG9yLmlkO1xuICAgIGVkZ2UubGFiZWwgPSBsYWJlbDtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsO1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsVmFsaWRhdGlvbi52YWxpZGF0ZUVkZ2VzKG1vZGVsLmVkZ2VzLmNvbmNhdChbZWRnZV0pLCBtb2RlbC5ub2Rlcyk7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UuY3JlYXRlRWRnZShldmVudCwgZWRnZSkuc3Vic2NyaWJlKFxuICAgICAgKGNyZWF0ZWQpID0+IHtcbiAgICAgICAgbW9kZWwuZWRnZXMucHVzaChjcmVhdGVkKTtcbiAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2Uubm90aWZ5TW9kZWxDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLmVkZ2VBZGRlZENhbGxiYWNrKGNyZWF0ZWQpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.component.js b/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.component.js index 7974291..e20d10c 100644 --- a/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.component.js +++ b/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.component.js @@ -12,6 +12,8 @@ import { FcEdgeDraggingService } from './edge-dragging.service'; import { FcMouseOverService } from './mouseover.service'; import { FcRectangleSelectService } from './rectangleselect.service'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; +import { Subject } from 'rxjs'; +import { debounceTime } from 'rxjs/operators'; export class NgxFlowchartComponent { /** * @param {?} elementRef @@ -47,8 +49,15 @@ export class NgxFlowchartComponent { (index, item) => { return item; })); + this.detectChangesSubject = new Subject(); this.arrowDefId = 'arrow-' + Math.random(); this.arrowDefIdSelected = this.arrowDefId + '-selected'; + this.detectChangesSubject + .pipe(debounceTime(50)) + .subscribe((/** + * @return {?} + */ + () => this.cd.detectChanges())); } /** * @return {?} @@ -91,7 +100,7 @@ export class NgxFlowchartComponent { this.userNodeCallbacks = this.userCallbacks.nodeCallbacks; /** @type {?} */ const element = $(this.elementRef.nativeElement); - this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.cd, this.selectedObjects, this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved, this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg')); + this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.detectChangesSubject, this.selectedObjects, this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved, this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg')); if (this.dropTargetId) { this.modelService.dropTargetId = this.dropTargetId; } @@ -172,7 +181,7 @@ export class NgxFlowchartComponent { this.adjustCanvasSize(this.fitModelSizeByDefault); } if (nodesChanged || edgesChanged) { - this.cd.detectChanges(); + this.detectChangesSubject.next(); } } } @@ -431,6 +440,11 @@ if (false) { * @private */ NgxFlowchartComponent.prototype.edgesDiffer; + /** + * @type {?} + * @private + */ + NgxFlowchartComponent.prototype.detectChangesSubject; /** * @type {?} * @private @@ -459,4 +473,4 @@ if (false) { */ NgxFlowchartComponent.prototype.zone; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZsb3djaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZmxvd2NoYXJ0LyIsInNvdXJjZXMiOlsibGliL25neC1mbG93Y2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQzFDLFNBQVMsRUFFVCxVQUFVLEVBQUUsWUFBWSxFQUN4QixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFFTCxlQUFlLEVBQ2YsTUFBTSxFQUNFLE1BQU0sRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdDLGtCQUFrQixFQUFvQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVE5RCxNQUFNLE9BQU8scUJBQXFCOzs7Ozs7Ozs7SUFxRWhDLFlBQW9CLFVBQW1DLEVBQ25DLE9BQXdCLEVBQ3hCLGVBQXlDLEVBQzFDLGtCQUF3QyxFQUN2QyxFQUFxQixFQUNyQixJQUFZO1FBTFosZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFDeEIsb0JBQWUsR0FBZixlQUFlLENBQTBCO1FB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LEVBQUUsQ0FBQyxRQUFRLENBQUM7d0JBS3BDLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7c0JBS3BDLFlBQVksU0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Ozs7SUF6UW5DLHNDQUNlOztJQUVmLGdEQUN1Qjs7SUFFdkIsMENBQ2tCOztJQUVsQiw4Q0FDNkI7O0lBRTdCLGdEQUN5Qjs7SUFFekIsOENBQ3NCOztJQUV0QiwwQ0FDa0I7O0lBRWxCLDJDQUNtQjs7SUFFbkIsNkNBQ3FCOztJQUVyQiw2Q0FDa0M7Ozs7O0lBRWxDLDJEQUEwQzs7SUFTMUMsMENBQXVCOztJQUV2QixrREFBcUM7O0lBRXJDLDZDQUE2Qjs7SUFDN0Isb0RBQTJDOztJQUMzQyxvREFBMkM7O0lBQzNDLGlEQUFxQzs7SUFDckMsdURBQWlEOztJQUVqRCwyQ0FBbUI7O0lBQ25CLG1EQUEyQjs7SUFFM0IsbURBQXdDOzs7OztJQUV4Qyw0Q0FFRzs7Ozs7SUFFSCw0Q0FFRzs7Ozs7SUFFUywyQ0FBMkM7Ozs7O0lBQzNDLHdDQUFnQzs7Ozs7SUFDaEMsZ0RBQWlEOztJQUNqRCxtREFBK0M7Ozs7O0lBQy9DLG1DQUE2Qjs7Ozs7SUFDN0IscUNBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIEl0ZXJhYmxlRGlmZmVyLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIE5nWm9uZSxcbiAgT25Jbml0LCBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGY0NhbGxiYWNrcywgRmNFZGdlLCBGY01vZGVsLCBGY05vZGUsIEZsb3djaGFydENvbnN0YW50cywgVXNlckNhbGxiYWNrcywgVXNlck5vZGVDYWxsYmFja3MgfSBmcm9tICcuL25neC1mbG93Y2hhcnQubW9kZWxzJztcbmltcG9ydCB7IEZjTW9kZWxTZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbC5zZXJ2aWNlJztcbmltcG9ydCB7IEZjTW9kZWxWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vbW9kZWx2YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmNOb2RlRHJhZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi9ub2RlLWRyYWdnaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmNFZGdlRHJhd2luZ1NlcnZpY2UgfSBmcm9tICcuL2VkZ2UtZHJhd2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IEZjRWRnZURyYWdnaW5nU2VydmljZSB9IGZyb20gJy4vZWRnZS1kcmFnZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IEZjTW91c2VPdmVyU2VydmljZSB9IGZyb20gJy4vbW91c2VvdmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmNSZWN0YW5nbGVTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi9yZWN0YW5nbGVzZWxlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmYy1jYW52YXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LWZsb3djaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25neC1mbG93Y2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTmd4Rmxvd2NoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrIHtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuY2xhc3MnKVxuICBnZXQgY2FudmFzQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRmxvd2NoYXJ0Q29uc3RhbnRzLmNhbnZhc0NsYXNzO1xuICB9XG5cbiAgQElucHV0KClcbiAgbW9kZWw6IEZjTW9kZWw7XG5cbiAgQElucHV0KClcbiAgc2VsZWN0ZWRPYmplY3RzOiBhbnlbXTtcblxuICBASW5wdXQoKVxuICBlZGdlU3R5bGU6IHN0cmluZztcblxuICBASW5wdXQoKVxuICB1c2VyQ2FsbGJhY2tzOiBVc2VyQ2FsbGJhY2tzO1xuXG4gIEBJbnB1dCgpXG4gIGF1dG9tYXRpY1Jlc2l6ZTogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBkcmFnQW5pbWF0aW9uOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbm9kZVdpZHRoOiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgbm9kZUhlaWdodDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIGRyb3BUYXJnZXRJZDogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKVxuICBtb2RlbENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBmaXRNb2RlbFNpemVCeURlZmF1bHRWYWx1ZSA9IHRydWU7XG4gIGdldCBmaXRNb2RlbFNpemVCeURlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZml0TW9kZWxTaXplQnlEZWZhdWx0VmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGZpdE1vZGVsU2l6ZUJ5RGVmYXVsdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZml0TW9kZWxTaXplQnlEZWZhdWx0VmFsdWUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgY2FsbGJhY2tzOiBGY0NhbGxiYWNrcztcblxuICB1c2VyTm9kZUNhbGxiYWNrczogVXNlck5vZGVDYWxsYmFja3M7XG5cbiAgbW9kZWxTZXJ2aWNlOiBGY01vZGVsU2VydmljZTtcbiAgbm9kZURyYWdnaW5nU2VydmljZTogRmNOb2RlRHJhZ2dpbmdTZXJ2aWNlO1xuICBlZGdlRHJhZ2dpbmdTZXJ2aWNlOiBGY0VkZ2VEcmFnZ2luZ1NlcnZpY2U7XG4gIG1vdXNlb3ZlclNlcnZpY2U6IEZjTW91c2VPdmVyU2VydmljZTtcbiAgcmVjdGFuZ2xlU2VsZWN0U2VydmljZTogRmNSZWN0YW5nbGVTZWxlY3RTZXJ2aWNlO1xuXG4gIGFycm93RGVmSWQ6IHN0cmluZztcbiAgYXJyb3dEZWZJZFNlbGVjdGVkOiBzdHJpbmc7XG5cbiAgZmxvd2NoYXJ0Q29uc3RhbnRzID0gRmxvd2NoYXJ0Q29uc3RhbnRzO1xuXG4gIHByaXZhdGUgbm9kZXNEaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPEZjTm9kZT4gPSB0aGlzLmRpZmZlcnMuZmluZChbXSkuY3JlYXRlPEZjTm9kZT4oKGluZGV4LCBpdGVtKSA9PiB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH0pO1xuXG4gIHByaXZhdGUgZWRnZXNEaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPEZjRWRnZT4gPSB0aGlzLmRpZmZlcnMuZmluZChbXSkuY3JlYXRlPEZjRWRnZT4oKGluZGV4LCBpdGVtKSA9PiB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgICAgICAgIHByaXZhdGUgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGVsVmFsaWRhdGlvbjogRmNNb2RlbFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwdWJsaWMgZWRnZURyYXdpbmdTZXJ2aWNlOiBGY0VkZ2VEcmF3aW5nU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgem9uZTogTmdab25lKSB7XG4gICAgdGhpcy5hcnJvd0RlZklkID0gJ2Fycm93LScgKyBNYXRoLnJhbmRvbSgpO1xuICAgIHRoaXMuYXJyb3dEZWZJZFNlbGVjdGVkID0gdGhpcy5hcnJvd0RlZklkICsgJy1zZWxlY3RlZCc7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuZHJvcFRhcmdldElkICYmIHRoaXMuZWRnZVN0eWxlICE9PSBGbG93Y2hhcnRDb25zdGFudHMuY3VydmVkU3R5bGUgJiYgdGhpcy5lZGdlU3R5bGUgIT09IEZsb3djaGFydENvbnN0YW50cy5saW5lU3R5bGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZWRnZVN0eWxlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuICAgIHRoaXMubm9kZUhlaWdodCA9IHRoaXMubm9kZUhlaWdodCB8fCAyMDA7XG4gICAgdGhpcy5ub2RlV2lkdGggPSB0aGlzLm5vZGVXaWR0aCB8fCAyMDA7XG4gICAgdGhpcy5kcmFnQW5pbWF0aW9uID0gdGhpcy5kcmFnQW5pbWF0aW9uIHx8IEZsb3djaGFydENvbnN0YW50cy5kcmFnQW5pbWF0aW9uUmVwYWludDtcbiAgICB0aGlzLnVzZXJDYWxsYmFja3MgPSB0aGlzLnVzZXJDYWxsYmFja3MgfHwge307XG4gICAgdGhpcy5hdXRvbWF0aWNSZXNpemUgPSB0aGlzLmF1dG9tYXRpY1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudXNlckNhbGxiYWNrcykpIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy51c2VyQ2FsbGJhY2tzW2tleV07XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nICYmIGtleSAhPT0gJ25vZGVDYWxsYmFja3MnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQWxsIGNhbGxiYWNrcyBzaG91bGQgYmUgZnVuY3Rpb25zLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXNlck5vZGVDYWxsYmFja3MgPSB0aGlzLnVzZXJDYWxsYmFja3Mubm9kZUNhbGxiYWNrcztcblxuICAgIGNvbnN0IGVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIHRoaXMubW9kZWxTZXJ2aWNlID0gbmV3IEZjTW9kZWxTZXJ2aWNlKHRoaXMubW9kZWxWYWxpZGF0aW9uLCB0aGlzLm1vZGVsLCB0aGlzLm1vZGVsQ2hhbmdlZCwgdGhpcy5jZCwgdGhpcy5zZWxlY3RlZE9iamVjdHMsXG4gICAgICB0aGlzLnVzZXJDYWxsYmFja3MuZHJvcE5vZGUsIHRoaXMudXNlckNhbGxiYWNrcy5jcmVhdGVFZGdlLCB0aGlzLnVzZXJDYWxsYmFja3MuZWRnZUFkZGVkLCB0aGlzLnVzZXJDYWxsYmFja3Mubm9kZVJlbW92ZWQsXG4gICAgICB0aGlzLnVzZXJDYWxsYmFja3MuZWRnZVJlbW92ZWQsIGVsZW1lbnRbMF0sIGVsZW1lbnRbMF0ucXVlcnlTZWxlY3Rvcignc3ZnJykpO1xuXG4gICAgaWYgKHRoaXMuZHJvcFRhcmdldElkKSB7XG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5kcm9wVGFyZ2V0SWQgPSB0aGlzLmRyb3BUYXJnZXRJZDtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBseUZ1bmN0aW9uID0gdGhpcy56b25lLnJ1bi5iaW5kKHRoaXMuem9uZSk7XG5cbiAgICB0aGlzLm5vZGVEcmFnZ2luZ1NlcnZpY2UgPSBuZXcgRmNOb2RlRHJhZ2dpbmdTZXJ2aWNlKHRoaXMubW9kZWxTZXJ2aWNlLCBhcHBseUZ1bmN0aW9uLFxuICAgICAgICAgIHRoaXMuYXV0b21hdGljUmVzaXplLCB0aGlzLmRyYWdBbmltYXRpb24pO1xuXG4gICAgdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlID0gbmV3IEZjRWRnZURyYWdnaW5nU2VydmljZSh0aGlzLm1vZGVsVmFsaWRhdGlvbiwgdGhpcy5lZGdlRHJhd2luZ1NlcnZpY2UsIHRoaXMubW9kZWxTZXJ2aWNlLFxuICAgICAgdGhpcy5tb2RlbCwgdGhpcy51c2VyQ2FsbGJhY2tzLmlzVmFsaWRFZGdlIHx8IG51bGwsIGFwcGx5RnVuY3Rpb24sXG4gICAgICB0aGlzLmRyYWdBbmltYXRpb24sIHRoaXMuZWRnZVN0eWxlKTtcblxuICAgIHRoaXMubW91c2VvdmVyU2VydmljZSA9IG5ldyBGY01vdXNlT3ZlclNlcnZpY2UoYXBwbHlGdW5jdGlvbik7XG5cbiAgICB0aGlzLnJlY3RhbmdsZVNlbGVjdFNlcnZpY2UgPSBuZXcgRmNSZWN0YW5nbGVTZWxlY3RTZXJ2aWNlKHRoaXMubW9kZWxTZXJ2aWNlLFxuICAgICAgZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0LXJlY3RhbmdsZScpLCBhcHBseUZ1bmN0aW9uKTtcblxuICAgIHRoaXMuY2FsbGJhY2tzID0ge1xuICAgICAgbm9kZURyYWdzdGFydDogdGhpcy5ub2RlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdzdGFydC5iaW5kKHRoaXMubm9kZURyYWdnaW5nU2VydmljZSksXG4gICAgICBub2RlRHJhZ2VuZDogdGhpcy5ub2RlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdlbmQuYmluZCh0aGlzLm5vZGVEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgZWRnZURyYWdzdGFydDogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdzdGFydC5iaW5kKHRoaXMuZWRnZURyYWdnaW5nU2VydmljZSksXG4gICAgICBlZGdlRHJhZ2VuZDogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdlbmQuYmluZCh0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgZWRnZURyb3A6IHRoaXMuZWRnZURyYWdnaW5nU2VydmljZS5kcm9wLmJpbmQodGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIGVkZ2VEcmFnb3ZlckNvbm5lY3RvcjogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdvdmVyQ29ubmVjdG9yLmJpbmQodGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIGVkZ2VEcmFnb3Zlck1hZ25ldDogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdvdmVyTWFnbmV0LmJpbmQodGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIGVkZ2VEcmFnbGVhdmVNYWduZXQ6IHRoaXMuZWRnZURyYWdnaW5nU2VydmljZS5kcmFnbGVhdmVNYWduZXQuYmluZCh0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgbm9kZU1vdXNlT3ZlcjogdGhpcy5tb3VzZW92ZXJTZXJ2aWNlLm5vZGVNb3VzZU92ZXIuYmluZCh0aGlzLm1vdXNlb3ZlclNlcnZpY2UpLFxuICAgICAgbm9kZU1vdXNlT3V0OiB0aGlzLm1vdXNlb3ZlclNlcnZpY2Uubm9kZU1vdXNlT3V0LmJpbmQodGhpcy5tb3VzZW92ZXJTZXJ2aWNlKSxcbiAgICAgIGNvbm5lY3Rvck1vdXNlRW50ZXI6IHRoaXMubW91c2VvdmVyU2VydmljZS5jb25uZWN0b3JNb3VzZUVudGVyLmJpbmQodGhpcy5tb3VzZW92ZXJTZXJ2aWNlKSxcbiAgICAgIGNvbm5lY3Rvck1vdXNlTGVhdmU6IHRoaXMubW91c2VvdmVyU2VydmljZS5jb25uZWN0b3JNb3VzZUxlYXZlLmJpbmQodGhpcy5tb3VzZW92ZXJTZXJ2aWNlKSxcbiAgICAgIG5vZGVDbGlja2VkOiAoZXZlbnQsIG5vZGUpID0+IHtcbiAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXMuaGFuZGxlQ2xpY2tlZChub2RlLCBldmVudC5jdHJsS2V5KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmFkanVzdENhbnZhc1NpemUodGhpcy5maXRNb2RlbFNpemVCeURlZmF1bHQpO1xuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICBjb25zdCBub2Rlc0NoYW5nZSA9IHRoaXMubm9kZXNEaWZmZXIuZGlmZih0aGlzLm1vZGVsLm5vZGVzKTtcbiAgICAgIGNvbnN0IGVkZ2VzQ2hhbmdlID0gdGhpcy5lZGdlc0RpZmZlci5kaWZmKHRoaXMubW9kZWwuZWRnZXMpO1xuICAgICAgbGV0IG5vZGVzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgbGV0IGVkZ2VzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgaWYgKG5vZGVzQ2hhbmdlICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGVzQ2hhbmdlLmZvckVhY2hBZGRlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIG5vZGVzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBub2Rlc0NoYW5nZS5mb3JFYWNoUmVtb3ZlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIG5vZGVzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGVkZ2VzQ2hhbmdlICE9PSBudWxsKSB7XG4gICAgICAgIGVkZ2VzQ2hhbmdlLmZvckVhY2hBZGRlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIGVkZ2VzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGdlc0NoYW5nZS5mb3JFYWNoUmVtb3ZlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIGVkZ2VzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGVzQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLmFkanVzdENhbnZhc1NpemUodGhpcy5maXRNb2RlbFNpemVCeURlZmF1bHQpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGVzQ2hhbmdlZCB8fCBlZGdlc0NoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RWRnZURBdHRyaWJ1dGUoZWRnZTogRmNFZGdlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlRHJhd2luZ1NlcnZpY2UuZ2V0RWRnZURBdHRyaWJ1dGUodGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuc291cmNlQ29vcmQoZWRnZSksXG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5kZXN0Q29vcmQoZWRnZSksIHRoaXMuZWRnZVN0eWxlKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGp1c3RDYW52YXNTaXplKGZpdD86IGJvb2xlYW4pIHtcbiAgICBsZXQgbWF4WCA9IDA7XG4gICAgbGV0IG1heFkgPSAwO1xuICAgIGNvbnN0IGVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLm1vZGVsLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIG1heFggPSBNYXRoLm1heChub2RlLnggKyB0aGlzLm5vZGVXaWR0aCwgbWF4WCk7XG4gICAgICBtYXhZID0gTWF0aC5tYXgobm9kZS55ICsgdGhpcy5ub2RlSGVpZ2h0LCBtYXhZKTtcbiAgICB9KTtcbiAgICBsZXQgd2lkdGg7XG4gICAgbGV0IGhlaWdodDtcbiAgICBpZiAoZml0KSB7XG4gICAgICB3aWR0aCA9IG1heFg7XG4gICAgICBoZWlnaHQgPSBtYXhZO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWF4KG1heFgsIGVsZW1lbnQucHJvcCgnb2Zmc2V0V2lkdGgnKSk7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1heChtYXhZLCBlbGVtZW50LnByb3AoJ29mZnNldEhlaWdodCcpKTtcbiAgICB9XG4gICAgZWxlbWVudC5jc3MoJ3dpZHRoJywgd2lkdGggKyAncHgnKTtcbiAgICBlbGVtZW50LmNzcygnaGVpZ2h0JywgaGVpZ2h0ICsgJ3B4Jyk7XG4gIH1cblxuICBjYW52YXNDbGljayhldmVudDogTW91c2VFdmVudCkge31cblxuICBlZGdlTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGVkZ2VDbGljayhldmVudDogTW91c2VFdmVudCwgZWRnZTogRmNFZGdlKSB7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuaGFuZGxlRWRnZU1vdXNlQ2xpY2soZWRnZSwgZXZlbnQuY3RybEtleSk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGVkZ2VSZW1vdmUoZXZlbnQ6IEV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5kZWxldGUoZWRnZSk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGVkZ2VFZGl0KGV2ZW50OiBFdmVudCwgZWRnZTogRmNFZGdlKSB7XG4gICAgaWYgKHRoaXMudXNlckNhbGxiYWNrcy5lZGdlRWRpdCkge1xuICAgICAgdGhpcy51c2VyQ2FsbGJhY2tzLmVkZ2VFZGl0KGV2ZW50LCBlZGdlKTtcbiAgICB9XG4gIH1cblxuICBlZGdlRG91YmxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGVkZ2U6IEZjRWRnZSkge1xuICAgIGlmICh0aGlzLnVzZXJDYWxsYmFja3MuZWRnZURvdWJsZUNsaWNrKSB7XG4gICAgICB0aGlzLnVzZXJDYWxsYmFja3MuZWRnZURvdWJsZUNsaWNrKGV2ZW50LCBlZGdlKTtcbiAgICB9XG4gIH1cblxuICBlZGdlTW91c2VPdmVyKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICBpZiAodGhpcy51c2VyQ2FsbGJhY2tzLmVkZ2VNb3VzZU92ZXIpIHtcbiAgICAgIHRoaXMudXNlckNhbGxiYWNrcy5lZGdlTW91c2VPdmVyKGV2ZW50LCBlZGdlKTtcbiAgICB9XG4gIH1cblxuICBlZGdlTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCwgZWRnZTogRmNFZGdlKSB7XG4gICAgdGhpcy5tb3VzZW92ZXJTZXJ2aWNlLmVkZ2VNb3VzZUVudGVyKGV2ZW50LCBlZGdlKTtcbiAgfVxuXG4gIGVkZ2VNb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICB0aGlzLm1vdXNlb3ZlclNlcnZpY2UuZWRnZU1vdXNlTGVhdmUoZXZlbnQsIGVkZ2UpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxuICBkcmFnb3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgdGhpcy5ub2RlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdvdmVyKGV2ZW50KTtcbiAgICB0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UuZHJhZ292ZXIoZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXG4gIGRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMubm9kZURyYWdnaW5nU2VydmljZS5kcm9wKGV2ZW50KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG1vdXNlZG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMucmVjdGFuZ2xlU2VsZWN0U2VydmljZS5tb3VzZWRvd24oZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcbiAgbW91c2Vtb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5yZWN0YW5nbGVTZWxlY3RTZXJ2aWNlLm1vdXNlbW92ZShldmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJywgWyckZXZlbnQnXSlcbiAgbW91c2V1cChldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMucmVjdGFuZ2xlU2VsZWN0U2VydmljZS5tb3VzZXVwKGV2ZW50KTtcbiAgfVxuXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZsb3djaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZmxvd2NoYXJ0LyIsInNvdXJjZXMiOlsibGliL25neC1mbG93Y2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQzFDLFNBQVMsRUFFVCxVQUFVLEVBQUUsWUFBWSxFQUN4QixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFFTCxlQUFlLEVBQ2YsTUFBTSxFQUNFLE1BQU0sRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdDLGtCQUFrQixFQUFvQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE5QyxNQUFNLE9BQU8scUJBQXFCOzs7Ozs7Ozs7SUF1RWhDLFlBQW9CLFVBQW1DLEVBQ25DLE9BQXdCLEVBQ3hCLGVBQXlDLEVBQzFDLGtCQUF3QyxFQUN2QyxFQUFxQixFQUNyQixJQUFZ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QjtZQVMxQyxNQUFNOzs7MEJBdUJMLFdBQVcsU0FBQyxZQUFZO29CQUt4QixLQUFLOzhCQUdMLEtBQUs7d0JBR0wsS0FBSzs0QkFHTCxLQUFLOzhCQUdMLEtBQUs7NEJBR0wsS0FBSzt3QkFHTCxLQUFLO3lCQUdMLEtBQUs7MkJBR0wsS0FBSzsyQkFHTCxNQUFNO29DQU9OLEtBQUs7dUJBa05MLFlBQVksU0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7bUJBTW5DLFlBQVksU0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7d0JBVy9CLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7d0JBS3BDLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7c0JBS3BDLFlBQVksU0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Ozs7SUEvUW5DLHNDQUNlOztJQUVmLGdEQUN1Qjs7SUFFdkIsMENBQ2tCOztJQUVsQiw4Q0FDNkI7O0lBRTdCLGdEQUN5Qjs7SUFFekIsOENBQ3NCOztJQUV0QiwwQ0FDa0I7O0lBRWxCLDJDQUNtQjs7SUFFbkIsNkNBQ3FCOztJQUVyQiw2Q0FDa0M7Ozs7O0lBRWxDLDJEQUEwQzs7SUFTMUMsMENBQXVCOztJQUV2QixrREFBcUM7O0lBRXJDLDZDQUE2Qjs7SUFDN0Isb0RBQTJDOztJQUMzQyxvREFBMkM7O0lBQzNDLGlEQUFxQzs7SUFDckMsdURBQWlEOztJQUVqRCwyQ0FBbUI7O0lBQ25CLG1EQUEyQjs7SUFFM0IsbURBQXdDOzs7OztJQUV4Qyw0Q0FFRzs7Ozs7SUFFSCw0Q0FFRzs7Ozs7SUFFSCxxREFBMkQ7Ozs7O0lBRS9DLDJDQUEyQzs7Ozs7SUFDM0Msd0NBQWdDOzs7OztJQUNoQyxnREFBaUQ7O0lBQ2pELG1EQUErQzs7Ozs7SUFDL0MsbUNBQTZCOzs7OztJQUM3QixxQ0FBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgSXRlcmFibGVEaWZmZXIsXG4gIEl0ZXJhYmxlRGlmZmVycyxcbiAgTmdab25lLFxuICBPbkluaXQsIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZjQ2FsbGJhY2tzLCBGY0VkZ2UsIEZjTW9kZWwsIEZjTm9kZSwgRmxvd2NoYXJ0Q29uc3RhbnRzLCBVc2VyQ2FsbGJhY2tzLCBVc2VyTm9kZUNhbGxiYWNrcyB9IGZyb20gJy4vbmd4LWZsb3djaGFydC5tb2RlbHMnO1xuaW1wb3J0IHsgRmNNb2RlbFNlcnZpY2UgfSBmcm9tICcuL21vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmNNb2RlbFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbHZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGY05vZGVEcmFnZ2luZ1NlcnZpY2UgfSBmcm9tICcuL25vZGUtZHJhZ2dpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBGY0VkZ2VEcmF3aW5nU2VydmljZSB9IGZyb20gJy4vZWRnZS1kcmF3aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmNFZGdlRHJhZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi9lZGdlLWRyYWdnaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmNNb3VzZU92ZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb3VzZW92ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGY1JlY3RhbmdsZVNlbGVjdFNlcnZpY2UgfSBmcm9tICcuL3JlY3RhbmdsZXNlbGVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZjLWNhbnZhcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtZmxvd2NoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmd4LWZsb3djaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hGbG93Y2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIERvQ2hlY2sge1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5jbGFzcycpXG4gIGdldCBjYW52YXNDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBGbG93Y2hhcnRDb25zdGFudHMuY2FudmFzQ2xhc3M7XG4gIH1cblxuICBASW5wdXQoKVxuICBtb2RlbDogRmNNb2RlbDtcblxuICBASW5wdXQoKVxuICBzZWxlY3RlZE9iamVjdHM6IGFueVtdO1xuXG4gIEBJbnB1dCgpXG4gIGVkZ2VTdHlsZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJDYWxsYmFja3M6IFVzZXJDYWxsYmFja3M7XG5cbiAgQElucHV0KClcbiAgYXV0b21hdGljUmVzaXplOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGRyYWdBbmltYXRpb246IHN0cmluZztcblxuICBASW5wdXQoKVxuICBub2RlV2lkdGg6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBub2RlSGVpZ2h0OiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgZHJvcFRhcmdldElkOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpXG4gIG1vZGVsQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcml2YXRlIGZpdE1vZGVsU2l6ZUJ5RGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgZ2V0IGZpdE1vZGVsU2l6ZUJ5RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maXRNb2RlbFNpemVCeURlZmF1bHRWYWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZml0TW9kZWxTaXplQnlEZWZhdWx0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5maXRNb2RlbFNpemVCeURlZmF1bHRWYWx1ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBjYWxsYmFja3M6IEZjQ2FsbGJhY2tzO1xuXG4gIHVzZXJOb2RlQ2FsbGJhY2tzOiBVc2VyTm9kZUNhbGxiYWNrcztcblxuICBtb2RlbFNlcnZpY2U6IEZjTW9kZWxTZXJ2aWNlO1xuICBub2RlRHJhZ2dpbmdTZXJ2aWNlOiBGY05vZGVEcmFnZ2luZ1NlcnZpY2U7XG4gIGVkZ2VEcmFnZ2luZ1NlcnZpY2U6IEZjRWRnZURyYWdnaW5nU2VydmljZTtcbiAgbW91c2VvdmVyU2VydmljZTogRmNNb3VzZU92ZXJTZXJ2aWNlO1xuICByZWN0YW5nbGVTZWxlY3RTZXJ2aWNlOiBGY1JlY3RhbmdsZVNlbGVjdFNlcnZpY2U7XG5cbiAgYXJyb3dEZWZJZDogc3RyaW5nO1xuICBhcnJvd0RlZklkU2VsZWN0ZWQ6IHN0cmluZztcblxuICBmbG93Y2hhcnRDb25zdGFudHMgPSBGbG93Y2hhcnRDb25zdGFudHM7XG5cbiAgcHJpdmF0ZSBub2Rlc0RpZmZlcjogSXRlcmFibGVEaWZmZXI8RmNOb2RlPiA9IHRoaXMuZGlmZmVycy5maW5kKFtdKS5jcmVhdGU8RmNOb2RlPigoaW5kZXgsIGl0ZW0pID0+IHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBlZGdlc0RpZmZlcjogSXRlcmFibGVEaWZmZXI8RmNFZGdlPiA9IHRoaXMuZGlmZmVycy5maW5kKFtdKS5jcmVhdGU8RmNFZGdlPigoaW5kZXgsIGl0ZW0pID0+IHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXRlY3RDaGFuZ2VzU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICAgICAgICBwcml2YXRlIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBtb2RlbFZhbGlkYXRpb246IEZjTW9kZWxWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgcHVibGljIGVkZ2VEcmF3aW5nU2VydmljZTogRmNFZGdlRHJhd2luZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMuYXJyb3dEZWZJZCA9ICdhcnJvdy0nICsgTWF0aC5yYW5kb20oKTtcbiAgICB0aGlzLmFycm93RGVmSWRTZWxlY3RlZCA9IHRoaXMuYXJyb3dEZWZJZCArICctc2VsZWN0ZWQnO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlc1N1YmplY3RcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5kcm9wVGFyZ2V0SWQgJiYgdGhpcy5lZGdlU3R5bGUgIT09IEZsb3djaGFydENvbnN0YW50cy5jdXJ2ZWRTdHlsZSAmJiB0aGlzLmVkZ2VTdHlsZSAhPT0gRmxvd2NoYXJ0Q29uc3RhbnRzLmxpbmVTdHlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdlZGdlU3R5bGUgbm90IHN1cHBvcnRlZC4nKTtcbiAgICB9XG4gICAgdGhpcy5ub2RlSGVpZ2h0ID0gdGhpcy5ub2RlSGVpZ2h0IHx8IDIwMDtcbiAgICB0aGlzLm5vZGVXaWR0aCA9IHRoaXMubm9kZVdpZHRoIHx8IDIwMDtcbiAgICB0aGlzLmRyYWdBbmltYXRpb24gPSB0aGlzLmRyYWdBbmltYXRpb24gfHwgRmxvd2NoYXJ0Q29uc3RhbnRzLmRyYWdBbmltYXRpb25SZXBhaW50O1xuICAgIHRoaXMudXNlckNhbGxiYWNrcyA9IHRoaXMudXNlckNhbGxiYWNrcyB8fCB7fTtcbiAgICB0aGlzLmF1dG9tYXRpY1Jlc2l6ZSA9IHRoaXMuYXV0b21hdGljUmVzaXplIHx8IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy51c2VyQ2FsbGJhY2tzKSkge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLnVzZXJDYWxsYmFja3Nba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicgJiYga2V5ICE9PSAnbm9kZUNhbGxiYWNrcycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbGwgY2FsbGJhY2tzIHNob3VsZCBiZSBmdW5jdGlvbnMuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51c2VyTm9kZUNhbGxiYWNrcyA9IHRoaXMudXNlckNhbGxiYWNrcy5ub2RlQ2FsbGJhY2tzO1xuXG4gICAgY29uc3QgZWxlbWVudCA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgdGhpcy5tb2RlbFNlcnZpY2UgPSBuZXcgRmNNb2RlbFNlcnZpY2UodGhpcy5tb2RlbFZhbGlkYXRpb24sIHRoaXMubW9kZWwsIHRoaXMubW9kZWxDaGFuZ2VkLFxuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzU3ViamVjdCwgdGhpcy5zZWxlY3RlZE9iamVjdHMsXG4gICAgICB0aGlzLnVzZXJDYWxsYmFja3MuZHJvcE5vZGUsIHRoaXMudXNlckNhbGxiYWNrcy5jcmVhdGVFZGdlLCB0aGlzLnVzZXJDYWxsYmFja3MuZWRnZUFkZGVkLCB0aGlzLnVzZXJDYWxsYmFja3Mubm9kZVJlbW92ZWQsXG4gICAgICB0aGlzLnVzZXJDYWxsYmFja3MuZWRnZVJlbW92ZWQsIGVsZW1lbnRbMF0sIGVsZW1lbnRbMF0ucXVlcnlTZWxlY3Rvcignc3ZnJykpO1xuXG4gICAgaWYgKHRoaXMuZHJvcFRhcmdldElkKSB7XG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5kcm9wVGFyZ2V0SWQgPSB0aGlzLmRyb3BUYXJnZXRJZDtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBseUZ1bmN0aW9uID0gdGhpcy56b25lLnJ1bi5iaW5kKHRoaXMuem9uZSk7XG5cbiAgICB0aGlzLm5vZGVEcmFnZ2luZ1NlcnZpY2UgPSBuZXcgRmNOb2RlRHJhZ2dpbmdTZXJ2aWNlKHRoaXMubW9kZWxTZXJ2aWNlLCBhcHBseUZ1bmN0aW9uLFxuICAgICAgICAgIHRoaXMuYXV0b21hdGljUmVzaXplLCB0aGlzLmRyYWdBbmltYXRpb24pO1xuXG4gICAgdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlID0gbmV3IEZjRWRnZURyYWdnaW5nU2VydmljZSh0aGlzLm1vZGVsVmFsaWRhdGlvbiwgdGhpcy5lZGdlRHJhd2luZ1NlcnZpY2UsIHRoaXMubW9kZWxTZXJ2aWNlLFxuICAgICAgdGhpcy5tb2RlbCwgdGhpcy51c2VyQ2FsbGJhY2tzLmlzVmFsaWRFZGdlIHx8IG51bGwsIGFwcGx5RnVuY3Rpb24sXG4gICAgICB0aGlzLmRyYWdBbmltYXRpb24sIHRoaXMuZWRnZVN0eWxlKTtcblxuICAgIHRoaXMubW91c2VvdmVyU2VydmljZSA9IG5ldyBGY01vdXNlT3ZlclNlcnZpY2UoYXBwbHlGdW5jdGlvbik7XG5cbiAgICB0aGlzLnJlY3RhbmdsZVNlbGVjdFNlcnZpY2UgPSBuZXcgRmNSZWN0YW5nbGVTZWxlY3RTZXJ2aWNlKHRoaXMubW9kZWxTZXJ2aWNlLFxuICAgICAgZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0LXJlY3RhbmdsZScpLCBhcHBseUZ1bmN0aW9uKTtcblxuICAgIHRoaXMuY2FsbGJhY2tzID0ge1xuICAgICAgbm9kZURyYWdzdGFydDogdGhpcy5ub2RlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdzdGFydC5iaW5kKHRoaXMubm9kZURyYWdnaW5nU2VydmljZSksXG4gICAgICBub2RlRHJhZ2VuZDogdGhpcy5ub2RlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdlbmQuYmluZCh0aGlzLm5vZGVEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgZWRnZURyYWdzdGFydDogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdzdGFydC5iaW5kKHRoaXMuZWRnZURyYWdnaW5nU2VydmljZSksXG4gICAgICBlZGdlRHJhZ2VuZDogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdlbmQuYmluZCh0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgZWRnZURyb3A6IHRoaXMuZWRnZURyYWdnaW5nU2VydmljZS5kcm9wLmJpbmQodGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIGVkZ2VEcmFnb3ZlckNvbm5lY3RvcjogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdvdmVyQ29ubmVjdG9yLmJpbmQodGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIGVkZ2VEcmFnb3Zlck1hZ25ldDogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdvdmVyTWFnbmV0LmJpbmQodGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIGVkZ2VEcmFnbGVhdmVNYWduZXQ6IHRoaXMuZWRnZURyYWdnaW5nU2VydmljZS5kcmFnbGVhdmVNYWduZXQuYmluZCh0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgbm9kZU1vdXNlT3ZlcjogdGhpcy5tb3VzZW92ZXJTZXJ2aWNlLm5vZGVNb3VzZU92ZXIuYmluZCh0aGlzLm1vdXNlb3ZlclNlcnZpY2UpLFxuICAgICAgbm9kZU1vdXNlT3V0OiB0aGlzLm1vdXNlb3ZlclNlcnZpY2Uubm9kZU1vdXNlT3V0LmJpbmQodGhpcy5tb3VzZW92ZXJTZXJ2aWNlKSxcbiAgICAgIGNvbm5lY3Rvck1vdXNlRW50ZXI6IHRoaXMubW91c2VvdmVyU2VydmljZS5jb25uZWN0b3JNb3VzZUVudGVyLmJpbmQodGhpcy5tb3VzZW92ZXJTZXJ2aWNlKSxcbiAgICAgIGNvbm5lY3Rvck1vdXNlTGVhdmU6IHRoaXMubW91c2VvdmVyU2VydmljZS5jb25uZWN0b3JNb3VzZUxlYXZlLmJpbmQodGhpcy5tb3VzZW92ZXJTZXJ2aWNlKSxcbiAgICAgIG5vZGVDbGlja2VkOiAoZXZlbnQsIG5vZGUpID0+IHtcbiAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXMuaGFuZGxlQ2xpY2tlZChub2RlLCBldmVudC5jdHJsS2V5KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmFkanVzdENhbnZhc1NpemUodGhpcy5maXRNb2RlbFNpemVCeURlZmF1bHQpO1xuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICBjb25zdCBub2Rlc0NoYW5nZSA9IHRoaXMubm9kZXNEaWZmZXIuZGlmZih0aGlzLm1vZGVsLm5vZGVzKTtcbiAgICAgIGNvbnN0IGVkZ2VzQ2hhbmdlID0gdGhpcy5lZGdlc0RpZmZlci5kaWZmKHRoaXMubW9kZWwuZWRnZXMpO1xuICAgICAgbGV0IG5vZGVzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgbGV0IGVkZ2VzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgaWYgKG5vZGVzQ2hhbmdlICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGVzQ2hhbmdlLmZvckVhY2hBZGRlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIG5vZGVzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBub2Rlc0NoYW5nZS5mb3JFYWNoUmVtb3ZlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIG5vZGVzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGVkZ2VzQ2hhbmdlICE9PSBudWxsKSB7XG4gICAgICAgIGVkZ2VzQ2hhbmdlLmZvckVhY2hBZGRlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIGVkZ2VzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGdlc0NoYW5nZS5mb3JFYWNoUmVtb3ZlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIGVkZ2VzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGVzQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLmFkanVzdENhbnZhc1NpemUodGhpcy5maXRNb2RlbFNpemVCeURlZmF1bHQpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGVzQ2hhbmdlZCB8fCBlZGdlc0NoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzU3ViamVjdC5uZXh0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RWRnZURBdHRyaWJ1dGUoZWRnZTogRmNFZGdlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlRHJhd2luZ1NlcnZpY2UuZ2V0RWRnZURBdHRyaWJ1dGUodGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuc291cmNlQ29vcmQoZWRnZSksXG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5kZXN0Q29vcmQoZWRnZSksIHRoaXMuZWRnZVN0eWxlKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGp1c3RDYW52YXNTaXplKGZpdD86IGJvb2xlYW4pIHtcbiAgICBsZXQgbWF4WCA9IDA7XG4gICAgbGV0IG1heFkgPSAwO1xuICAgIGNvbnN0IGVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLm1vZGVsLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIG1heFggPSBNYXRoLm1heChub2RlLnggKyB0aGlzLm5vZGVXaWR0aCwgbWF4WCk7XG4gICAgICBtYXhZID0gTWF0aC5tYXgobm9kZS55ICsgdGhpcy5ub2RlSGVpZ2h0LCBtYXhZKTtcbiAgICB9KTtcbiAgICBsZXQgd2lkdGg7XG4gICAgbGV0IGhlaWdodDtcbiAgICBpZiAoZml0KSB7XG4gICAgICB3aWR0aCA9IG1heFg7XG4gICAgICBoZWlnaHQgPSBtYXhZO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWF4KG1heFgsIGVsZW1lbnQucHJvcCgnb2Zmc2V0V2lkdGgnKSk7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1heChtYXhZLCBlbGVtZW50LnByb3AoJ29mZnNldEhlaWdodCcpKTtcbiAgICB9XG4gICAgZWxlbWVudC5jc3MoJ3dpZHRoJywgd2lkdGggKyAncHgnKTtcbiAgICBlbGVtZW50LmNzcygnaGVpZ2h0JywgaGVpZ2h0ICsgJ3B4Jyk7XG4gIH1cblxuICBjYW52YXNDbGljayhldmVudDogTW91c2VFdmVudCkge31cblxuICBlZGdlTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGVkZ2VDbGljayhldmVudDogTW91c2VFdmVudCwgZWRnZTogRmNFZGdlKSB7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuaGFuZGxlRWRnZU1vdXNlQ2xpY2soZWRnZSwgZXZlbnQuY3RybEtleSk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGVkZ2VSZW1vdmUoZXZlbnQ6IEV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5kZWxldGUoZWRnZSk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGVkZ2VFZGl0KGV2ZW50OiBFdmVudCwgZWRnZTogRmNFZGdlKSB7XG4gICAgaWYgKHRoaXMudXNlckNhbGxiYWNrcy5lZGdlRWRpdCkge1xuICAgICAgdGhpcy51c2VyQ2FsbGJhY2tzLmVkZ2VFZGl0KGV2ZW50LCBlZGdlKTtcbiAgICB9XG4gIH1cblxuICBlZGdlRG91YmxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGVkZ2U6IEZjRWRnZSkge1xuICAgIGlmICh0aGlzLnVzZXJDYWxsYmFja3MuZWRnZURvdWJsZUNsaWNrKSB7XG4gICAgICB0aGlzLnVzZXJDYWxsYmFja3MuZWRnZURvdWJsZUNsaWNrKGV2ZW50LCBlZGdlKTtcbiAgICB9XG4gIH1cblxuICBlZGdlTW91c2VPdmVyKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICBpZiAodGhpcy51c2VyQ2FsbGJhY2tzLmVkZ2VNb3VzZU92ZXIpIHtcbiAgICAgIHRoaXMudXNlckNhbGxiYWNrcy5lZGdlTW91c2VPdmVyKGV2ZW50LCBlZGdlKTtcbiAgICB9XG4gIH1cblxuICBlZGdlTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCwgZWRnZTogRmNFZGdlKSB7XG4gICAgdGhpcy5tb3VzZW92ZXJTZXJ2aWNlLmVkZ2VNb3VzZUVudGVyKGV2ZW50LCBlZGdlKTtcbiAgfVxuXG4gIGVkZ2VNb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICB0aGlzLm1vdXNlb3ZlclNlcnZpY2UuZWRnZU1vdXNlTGVhdmUoZXZlbnQsIGVkZ2UpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxuICBkcmFnb3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgdGhpcy5ub2RlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdvdmVyKGV2ZW50KTtcbiAgICB0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UuZHJhZ292ZXIoZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXG4gIGRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMubm9kZURyYWdnaW5nU2VydmljZS5kcm9wKGV2ZW50KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG1vdXNlZG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMucmVjdGFuZ2xlU2VsZWN0U2VydmljZS5tb3VzZWRvd24oZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcbiAgbW91c2Vtb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5yZWN0YW5nbGVTZWxlY3RTZXJ2aWNlLm1vdXNlbW92ZShldmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJywgWyckZXZlbnQnXSlcbiAgbW91c2V1cChldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMucmVjdGFuZ2xlU2VsZWN0U2VydmljZS5tb3VzZXVwKGV2ZW50KTtcbiAgfVxuXG59XG4iXX0= \ No newline at end of file diff --git a/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.models.js b/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.models.js index eae59ff..16a6f40 100644 --- a/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.models.js +++ b/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.models.js @@ -211,7 +211,7 @@ class BaseError { Error.apply(this, arguments); } } -BaseError.prototype = new Error(); +Object.defineProperty(BaseError, 'prototype', new Error()); export class ModelvalidationError extends BaseError { /** * @param {?} message @@ -317,4 +317,4 @@ export function fcTopSort(graph) { return orderedNodes; } } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZsb3djaGFydC5tb2RlbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZmxvd2NoYXJ0LyIsInNvdXJjZXMiOlsibGliL25neC1mbG93Y2hhcnQubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFRLE1BQU0sZUFBZSxDQUFDOztBQUdyRCxNQUFNLE9BQU8sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQXdCLDBCQUEwQixDQUFDOzs7O0FBRTdHLDJDQUVDOzs7SUFEQyxrREFBeUM7OztNQUdyQyxVQUFVLEdBQUcsSUFBSTs7TUFDakIsaUJBQWlCLEdBQUcsZUFBZTs7TUFDbkMsa0JBQWtCLEdBQUcsZ0JBQWdCOztBQUUzQyxNQUFNLE9BQU8sa0JBQWtCLEdBQUc7SUFDaEMsVUFBVTtJQUNWLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsV0FBVyxFQUFFLFFBQVE7SUFDckIsU0FBUyxFQUFFLE1BQU07SUFDakIsb0JBQW9CLEVBQUUsU0FBUztJQUMvQixtQkFBbUIsRUFBRSxRQUFRO0lBQzdCLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxhQUFhLEVBQUUsVUFBVSxHQUFHLFdBQVc7SUFDdkMsU0FBUyxFQUFFLFVBQVUsR0FBRyxPQUFPO0lBQy9CLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxVQUFVLEVBQUUsVUFBVSxHQUFHLFFBQVE7SUFDakMsYUFBYSxFQUFFLFVBQVUsR0FBRyxXQUFXO0lBQ3ZDLFNBQVMsRUFBRSxVQUFVLEdBQUcsT0FBTztJQUMvQixjQUFjLEVBQUUsVUFBVSxHQUFHLGFBQWE7SUFDMUMsY0FBYyxFQUFFLFVBQVUsR0FBRyxZQUFZO0lBQ3pDLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxTQUFTLEVBQUUsVUFBVSxHQUFHLE9BQU87SUFDL0IsZ0JBQWdCLEVBQUUsVUFBVSxHQUFHLGVBQWU7SUFDOUMsa0JBQWtCLEVBQUUsVUFBVSxH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LENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRTtnQkFDaEQsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNuQztZQUNELFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvQyxDQUFDLEVBQUUsQ0FBQztTQUNMO1FBQ0QsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUMvQjs7UUFDRyxRQUFRLEdBQUcsS0FBSztJQUNwQixLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7O2NBQ3RDLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ2hDLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUU7WUFDeEIsUUFBUSxHQUFHLElBQUksQ0FBQztTQUNqQjtLQUNGO0lBQ0QsSUFBSSxRQUFRLEVBQUU7UUFDWixPQUFPLElBQUksQ0FBQztLQUNiO1NBQU07UUFDTCxPQUFPLFlBQVksQ0FBQztLQUNyQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmNOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBGQ19OT0RFX0NPTVBPTkVOVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48RmNOb2RlQ29tcG9uZW50Q29uZmlnPignZmMtbm9kZS5jb21wb25lbnQuY29uZmlnJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNOb2RlQ29tcG9uZW50Q29uZmlnIHtcbiAgbm9kZUNvbXBvbmVudFR5cGU6IFR5cGU8RmNOb2RlQ29tcG9uZW50Pjtcbn1cblxuY29uc3QgaHRtbFByZWZpeCA9ICdmYyc7XG5jb25zdCBsZWZ0Q29ubmVjdG9yVHlwZSA9ICdsZWZ0Q29ubmVjdG9yJztcbmNvbnN0IHJpZ2h0Q29ubmVjdG9yVHlwZSA9ICdyaWdodENvbm5lY3Rvcic7XG5cbmV4cG9ydCBjb25zdCBGbG93Y2hhcnRDb25zdGFudHMgPSB7XG4gIGh0bWxQcmVmaXgsXG4gIGxlZnRDb25uZWN0b3JUeXBlLFxuICByaWdodENvbm5lY3RvclR5cGUsXG4gIGN1cnZlZFN0eWxlOiAnY3VydmVkJyxcbiAgbGluZVN0eWxlOiAnbGluZScsXG4gIGRyYWdBbmltYXRpb25SZXBhaW50OiAncmVwYWludCcsXG4gIGRyYWdBbmltYXRpb25TaGFkb3c6ICdzaGFkb3cnLFxuICBjYW52YXNDbGFzczogaHRtbFByZWZpeCArICctY2FudmFzJyxcbiAgc2VsZWN0ZWRDbGFzczogaHRtbFByZWZpeCArICctc2VsZWN0ZWQnLFxuICBlZGl0Q2xhc3M6IGh0bWxQcmVmaXggKyAnLWVkaXQnLFxuICBhY3RpdmVDbGFzczogaHRtbFByZWZpeCArICctYWN0aXZlJyxcbiAgaG92ZXJDbGFzczogaHRtbFByZWZpeCArICctaG92ZXInLFxuICBkcmFnZ2luZ0NsYXNzOiBodG1sUHJlZml4ICsgJy1kcmFnZ2luZycsXG4gIGVkZ2VDbGFzczogaHRtbFByZWZpeCArICctZWRnZScsXG4gIGVkZ2VMYWJlbENsYXNzOiBodG1sUHJlZml4ICsgJy1lZGdlLWxhYmVsJyxcbiAgY29ubmVjdG9yQ2xhc3M6IGh0bWxQcmVmaXggKyAnLWNvbm5lY3RvcicsXG4gIG1hZ25ldENsYXNzOiBodG1sUHJlZml4ICsgJy1tYWduZXQnLFxuICBub2RlQ2xhc3M6IGh0bWxQcmVmaXggKyAnLW5vZGUnLFxuICBub2RlT3ZlcmxheUNsYXNzOiBodG1sUHJlZml4ICsgJy1ub2RlLW92ZXJsYXknLFxuICBsZWZ0Q29ubmVjdG9yQ2xhc3M6IGh0bWxQcmVmaXggKyAnLScgKyBsZWZ0Q29ubmVjdG9yVHlwZSArICdzJyxcbiAgcmlnaHRDb25uZWN0b3JDbGFzczogaHRtbFByZWZpeCArICctJyArIHJpZ2h0Q29ubmVjdG9yVHlwZSArICdzJyxcbiAgY2FudmFzUmVzaXplVGhyZXNob2xkOiAyMDAsXG4gIGNhbnZhc1Jlc2l6ZVN0ZXA6IDIwMFxufTtcblxuXG5leHBvcnQgaW50ZXJmYWNlIEZjQ29vcmRzIHtcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY1JlY3RCb3gge1xuICB0b3A6IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY0Nvbm5lY3RvciB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY05vZGUgZXh0ZW5kcyBGY0Nvb3JkcyB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgY29ubmVjdG9yczogQXJyYXk8RmNDb25uZWN0b3I+O1xuICByZWFkb25seT86IGJvb2xlYW47XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY0VkZ2Uge1xuICBsYWJlbD86IHN0cmluZztcbiAgc291cmNlPzogc3RyaW5nO1xuICBkZXN0aW5hdGlvbj86IHN0cmluZztcbiAgYWN0aXZlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY0l0ZW1JbmZvIHtcbiAgbm9kZT86IEZjTm9kZTtcbiAgZWRnZT86IEZjRWRnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY01vZGVsIHtcbiAgbm9kZXM6IEFycmF5PEZjTm9kZT47XG4gIGVkZ2VzOiBBcnJheTxGY0VkZ2U+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDYWxsYmFja3Mge1xuICBkcm9wTm9kZT86IChldmVudDogRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgY3JlYXRlRWRnZT86IChldmVudDogRXZlbnQsIGVkZ2U6IEZjRWRnZSkgPT4gT2JzZXJ2YWJsZTxGY0VkZ2U+O1xuICBlZGdlQWRkZWQ/OiAoZWRnZTogRmNFZGdlKSA9PiB2b2lkO1xuICBub2RlUmVtb3ZlZD86IChub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIGVkZ2VSZW1vdmVkPzogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcbiAgZWRnZURvdWJsZUNsaWNrPzogKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpID0+IHZvaWQ7XG4gIGVkZ2VNb3VzZU92ZXI/OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcbiAgaXNWYWxpZEVkZ2U/OiAoc291cmNlOiBGY0Nvbm5lY3RvciwgZGVzdGluYXRpb246IEZjQ29ubmVjdG9yKSA9PiBib29sZWFuO1xuICBlZGdlRWRpdD86IChldmVudDogRXZlbnQsIGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcbiAgbm9kZUNhbGxiYWNrcz86IFVzZXJOb2RlQ2FsbGJhY2tzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJOb2RlQ2FsbGJhY2tzIHtcbiAgbm9kZUVkaXQ/OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgZG91YmxlQ2xpY2s/OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgbW91c2VEb3duPzogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIG1vdXNlRW50ZXI/OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgbW91c2VMZWF2ZT86IChldmVudDogTW91c2VFdmVudCwgbm9kZTogRmNOb2RlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZjQ2FsbGJhY2tzIHtcbiAgbm9kZURyYWdzdGFydDogKGV2ZW50OiBEcmFnRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgbm9kZURyYWdlbmQ6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICBlZGdlRHJhZ3N0YXJ0OiAoZXZlbnQ6IERyYWdFdmVudCwgY29ubmVjdG9yOiBGY0Nvbm5lY3RvcikgPT4gdm9pZDtcbiAgZWRnZURyYWdlbmQ6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICBlZGdlRHJvcDogKGV2ZW50OiBEcmFnRXZlbnQsIHRhcmdldENvbm5lY3RvcjogRmNDb25uZWN0b3IpID0+IGJvb2xlYW47XG4gIGVkZ2VEcmFnb3ZlckNvbm5lY3RvcjogKGV2ZW50OiBEcmFnRXZlbnQsIGNvbm5lY3RvcjogRmNDb25uZWN0b3IpID0+IGJvb2xlYW47XG4gIGVkZ2VEcmFnb3Zlck1hZ25ldDogKGV2ZW50OiBEcmFnRXZlbnQsIGNvbm5lY3RvcjogRmNDb25uZWN0b3IpID0+IGJvb2xlYW47XG4gIGVkZ2VEcmFnbGVhdmVNYWduZXQ6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICBub2RlTW91c2VPdmVyOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgbm9kZU1vdXNlT3V0OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgY29ubmVjdG9yTW91c2VFbnRlcjogKGV2ZW50OiBNb3VzZUV2ZW50LCBjb25uZWN0b3I6IEZjQ29ubmVjdG9yKSA9PiB2b2lkO1xuICBjb25uZWN0b3JNb3VzZUxlYXZlOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNvbm5lY3RvcjogRmNDb25uZWN0b3IpID0+IHZvaWQ7XG4gIG5vZGVDbGlja2VkOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY0FkamFjZW50TGlzdCB7XG4gIFtpZDogc3RyaW5nXToge1xuICAgIGluY29taW5nOiBudW1iZXI7XG4gICAgb3V0Z29pbmc6IEFycmF5PHN0cmluZz47XG4gIH07XG59XG5cbmNsYXNzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIEVycm9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuQmFzZUVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgY2xhc3MgTW9kZWx2YWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmNUb3BTb3J0KGdyYXBoOiBGY01vZGVsKTogQXJyYXk8c3RyaW5nPiB8IG51bGwge1xuICBjb25zdCBhZGphY2VudExpc3Q6IEZjQWRqYWNlbnRMaXN0ID0ge307XG4gIGdyYXBoLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICBhZGphY2VudExpc3Rbbm9kZS5pZF0gPSB7aW5jb21pbmc6IDAsIG91dGdvaW5nOiBbXX07XG4gIH0pO1xuICBncmFwaC5lZGdlcy5mb3JFYWNoKChlZGdlKSA9PiB7XG4gICAgY29uc3Qgc291cmNlTm9kZSA9IGdyYXBoLm5vZGVzLmZpbHRlcigobm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUuY29ubmVjdG9ycy5zb21lKChjb25uZWN0b3IpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rvci5pZCA9PT0gZWRnZS5zb3VyY2U7XG4gICAgICB9KTtcbiAgICB9KVswXTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbk5vZGUgPSBncmFwaC5ub2Rlcy5maWx0ZXIoKG5vZGUpID0+IHtcbiAgICAgIHJldHVybiBub2RlLmNvbm5lY3RvcnMuc29tZSgoY29ubmVjdG9yKSA9PiB7XG4gICAgICAgIHJldHVybiBjb25uZWN0b3IuaWQgPT09IGVkZ2UuZGVzdGluYXRpb247XG4gICAgICB9KTtcbiAgICB9KVswXTtcbiAgICBhZGphY2VudExpc3Rbc291cmNlTm9kZS5pZF0ub3V0Z29pbmcucHVzaChkZXN0aW5hdGlvbk5vZGUuaWQpO1xuICAgIGFkamFjZW50TGlzdFtkZXN0aW5hdGlvbk5vZGUuaWRdLmluY29taW5nKys7XG4gIH0pO1xuICBjb25zdCBvcmRlcmVkTm9kZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNvdXJjZU5vZGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LmtleXMoYWRqYWNlbnRMaXN0KSkge1xuICAgIGNvbnN0IGVkZ2VzID0gYWRqYWNlbnRMaXN0W25vZGVdO1xuICAgIGlmIChlZGdlcy5pbmNvbWluZyA9PT0gMCkge1xuICAgICAgc291cmNlTm9kZXMucHVzaChub2RlKTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKHNvdXJjZU5vZGVzLmxlbmd0aCAhPT0gMCkge1xuICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBzb3VyY2VOb2Rlcy5wb3AoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkamFjZW50TGlzdFtzb3VyY2VOb2RlXS5vdXRnb2luZy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25Ob2RlID0gYWRqYWNlbnRMaXN0W3NvdXJjZU5vZGVdLm91dGdvaW5nW2ldO1xuICAgICAgYWRqYWNlbnRMaXN0W2Rlc3RpbmF0aW9uTm9kZV0uaW5jb21pbmctLTtcbiAgICAgIGlmIChhZGphY2VudExpc3RbZGVzdGluYXRpb25Ob2RlXS5pbmNvbWluZyA9PT0gMCkge1xuICAgICAgICBzb3VyY2VOb2Rlcy5wdXNoKGRlc3RpbmF0aW9uTm9kZSk7XG4gICAgICB9XG4gICAgICBhZGphY2VudExpc3Rbc291cmNlTm9kZV0ub3V0Z29pbmcuc3BsaWNlKGksIDEpO1xuICAgICAgaS0tO1xuICAgIH1cbiAgICBvcmRlcmVkTm9kZXMucHVzaChzb3VyY2VOb2RlKTtcbiAgfVxuICBsZXQgaGFzRWRnZXMgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBub2RlIG9mIE9iamVjdC5rZXlzKGFkamFjZW50TGlzdCkpIHtcbiAgICBjb25zdCBlZGdlcyA9IGFkamFjZW50TGlzdFtub2RlXTtcbiAgICBpZiAoZWRnZXMuaW5jb21pbmcgIT09IDApIHtcbiAgICAgIGhhc0VkZ2VzID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKGhhc0VkZ2VzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9yZGVyZWROb2RlcztcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZsb3djaGFydC5tb2RlbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZmxvd2NoYXJ0LyIsInNvdXJjZXMiOlsibGliL25neC1mbG93Y2hhcnQubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFRLE1BQU0sZUFBZSxDQUFDOztBQUdyRCxNQUFNLE9BQU8sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQXdCLDBCQUEwQixDQUFDOzs7O0FBRTdHLDJDQUVDOzs7SUFEQyxrREFBeUM7OztNQUdyQyxVQUFVLEdBQUcsSUFBSTs7TUFDakIsaUJBQWlCLEdBQUcsZUFBZTs7TUFDbkMsa0JBQWtCLEdBQUcsZ0JBQWdCOztBQUUzQyxNQUFNLE9BQU8sa0JBQWtCLEdBQUc7SUFDaEMsVUFBVTtJQUNWLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsV0FBVyxFQUFFLFFBQVE7SUFDckIsU0FBUyxFQUFFLE1BQU07SUFDakIsb0JBQW9CLEVBQUUsU0FBUztJQUMvQixtQkFBbUIsRUFBRSxRQUFRO0lBQzdCLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxhQUFhLEVBQUUsVUFBVSxHQUFHLFdBQVc7SUFDdkMsU0FBUyxFQUFFLFVBQVUsR0FBRyxPQUFPO0lBQy9CLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxVQUFVLEVBQUUsVUFBVSxHQUFHLFFBQVE7SUFDakMsYUFBYSxFQUFFLFVBQVUsR0FBRyxXQUFXO0lBQ3ZDLFNBQVMsRUFBRSxVQUFVLEdBQUcsT0FBTztJQUMvQixjQUFjLEVBQUUsVUFBVSxHQUFHLGFBQWE7SUFDMUMsY0FBYyxFQUFFLFVBQVUsR0FBRyxZQUFZO0lBQ3pDLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxTQUFTLEVBQUUsVUFBVSxHQUFHLE9BQU87SUFDL0IsZ0JBQWdCLEVBQUUsVUFBVSxHQUFHLGVBQWU7SUFDOUMsa0JBQWtCLEVBQUUsVUFBVSxH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LElBQUksWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hELFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDbkM7WUFDRCxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxFQUFFLENBQUM7U0FDTDtRQUNELFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDL0I7O1FBQ0csUUFBUSxHQUFHLEtBQUs7SUFDcEIsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFOztjQUN0QyxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDakI7S0FDRjtJQUNELElBQUksUUFBUSxFQUFFO1FBQ1osT0FBTyxJQUFJLENBQUM7S0FDYjtTQUFNO1FBQ0wsT0FBTyxZQUFZLENBQUM7S0FDckI7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZjTm9kZUNvbXBvbmVudCB9IGZyb20gJy4vbm9kZS5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgRkNfTk9ERV9DT01QT05FTlRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEZjTm9kZUNvbXBvbmVudENvbmZpZz4oJ2ZjLW5vZGUuY29tcG9uZW50LmNvbmZpZycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZjTm9kZUNvbXBvbmVudENvbmZpZyB7XG4gIG5vZGVDb21wb25lbnRUeXBlOiBUeXBlPEZjTm9kZUNvbXBvbmVudD47XG59XG5cbmNvbnN0IGh0bWxQcmVmaXggPSAnZmMnO1xuY29uc3QgbGVmdENvbm5lY3RvclR5cGUgPSAnbGVmdENvbm5lY3Rvcic7XG5jb25zdCByaWdodENvbm5lY3RvclR5cGUgPSAncmlnaHRDb25uZWN0b3InO1xuXG5leHBvcnQgY29uc3QgRmxvd2NoYXJ0Q29uc3RhbnRzID0ge1xuICBodG1sUHJlZml4LFxuICBsZWZ0Q29ubmVjdG9yVHlwZSxcbiAgcmlnaHRDb25uZWN0b3JUeXBlLFxuICBjdXJ2ZWRTdHlsZTogJ2N1cnZlZCcsXG4gIGxpbmVTdHlsZTogJ2xpbmUnLFxuICBkcmFnQW5pbWF0aW9uUmVwYWludDogJ3JlcGFpbnQnLFxuICBkcmFnQW5pbWF0aW9uU2hhZG93OiAnc2hhZG93JyxcbiAgY2FudmFzQ2xhc3M6IGh0bWxQcmVmaXggKyAnLWNhbnZhcycsXG4gIHNlbGVjdGVkQ2xhc3M6IGh0bWxQcmVmaXggKyAnLXNlbGVjdGVkJyxcbiAgZWRpdENsYXNzOiBodG1sUHJlZml4ICsgJy1lZGl0JyxcbiAgYWN0aXZlQ2xhc3M6IGh0bWxQcmVmaXggKyAnLWFjdGl2ZScsXG4gIGhvdmVyQ2xhc3M6IGh0bWxQcmVmaXggKyAnLWhvdmVyJyxcbiAgZHJhZ2dpbmdDbGFzczogaHRtbFByZWZpeCArICctZHJhZ2dpbmcnLFxuICBlZGdlQ2xhc3M6IGh0bWxQcmVmaXggKyAnLWVkZ2UnLFxuICBlZGdlTGFiZWxDbGFzczogaHRtbFByZWZpeCArICctZWRnZS1sYWJlbCcsXG4gIGNvbm5lY3RvckNsYXNzOiBodG1sUHJlZml4ICsgJy1jb25uZWN0b3InLFxuICBtYWduZXRDbGFzczogaHRtbFByZWZpeCArICctbWFnbmV0JyxcbiAgbm9kZUNsYXNzOiBodG1sUHJlZml4ICsgJy1ub2RlJyxcbiAgbm9kZU92ZXJsYXlDbGFzczogaHRtbFByZWZpeCArICctbm9kZS1vdmVybGF5JyxcbiAgbGVmdENvbm5lY3RvckNsYXNzOiBodG1sUHJlZml4ICsgJy0nICsgbGVmdENvbm5lY3RvclR5cGUgKyAncycsXG4gIHJpZ2h0Q29ubmVjdG9yQ2xhc3M6IGh0bWxQcmVmaXggKyAnLScgKyByaWdodENvbm5lY3RvclR5cGUgKyAncycsXG4gIGNhbnZhc1Jlc2l6ZVRocmVzaG9sZDogMjAwLFxuICBjYW52YXNSZXNpemVTdGVwOiAyMDBcbn07XG5cblxuZXhwb3J0IGludGVyZmFjZSBGY0Nvb3JkcyB7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNSZWN0Qm94IHtcbiAgdG9wOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgcmlnaHQ6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNDb25uZWN0b3Ige1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNOb2RlIGV4dGVuZHMgRmNDb29yZHMge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbm5lY3RvcnM6IEFycmF5PEZjQ29ubmVjdG9yPjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNFZGdlIHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHNvdXJjZT86IHN0cmluZztcbiAgZGVzdGluYXRpb24/OiBzdHJpbmc7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNJdGVtSW5mbyB7XG4gIG5vZGU/OiBGY05vZGU7XG4gIGVkZ2U/OiBGY0VkZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNNb2RlbCB7XG4gIG5vZGVzOiBBcnJheTxGY05vZGU+O1xuICBlZGdlczogQXJyYXk8RmNFZGdlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyQ2FsbGJhY2tzIHtcbiAgZHJvcE5vZGU/OiAoZXZlbnQ6IEV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIGNyZWF0ZUVkZ2U/OiAoZXZlbnQ6IEV2ZW50LCBlZGdlOiBGY0VkZ2UpID0+IE9ic2VydmFibGU8RmNFZGdlPjtcbiAgZWRnZUFkZGVkPzogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcbiAgbm9kZVJlbW92ZWQ/OiAobm9kZTogRmNOb2RlKSA9PiB2b2lkO1xuICBlZGdlUmVtb3ZlZD86IChlZGdlOiBGY0VkZ2UpID0+IHZvaWQ7XG4gIGVkZ2VEb3VibGVDbGljaz86IChldmVudDogTW91c2VFdmVudCwgZWRnZTogRmNFZGdlKSA9PiB2b2lkO1xuICBlZGdlTW91c2VPdmVyPzogKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpID0+IHZvaWQ7XG4gIGlzVmFsaWRFZGdlPzogKHNvdXJjZTogRmNDb25uZWN0b3IsIGRlc3RpbmF0aW9uOiBGY0Nvbm5lY3RvcikgPT4gYm9vbGVhbjtcbiAgZWRnZUVkaXQ/OiAoZXZlbnQ6IEV2ZW50LCBlZGdlOiBGY0VkZ2UpID0+IHZvaWQ7XG4gIG5vZGVDYWxsYmFja3M/OiBVc2VyTm9kZUNhbGxiYWNrcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyTm9kZUNhbGxiYWNrcyB7XG4gIG5vZGVFZGl0PzogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIGRvdWJsZUNsaWNrPzogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIG1vdXNlRG93bj86IChldmVudDogTW91c2VFdmVudCwgbm9kZTogRmNOb2RlKSA9PiB2b2lkO1xuICBtb3VzZUVudGVyPzogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIG1vdXNlTGVhdmU/OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY0NhbGxiYWNrcyB7XG4gIG5vZGVEcmFnc3RhcnQ6IChldmVudDogRHJhZ0V2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIG5vZGVEcmFnZW5kOiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgZWRnZURyYWdzdGFydDogKGV2ZW50OiBEcmFnRXZlbnQsIGNvbm5lY3RvcjogRmNDb25uZWN0b3IpID0+IHZvaWQ7XG4gIGVkZ2VEcmFnZW5kOiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgZWRnZURyb3A6IChldmVudDogRHJhZ0V2ZW50LCB0YXJnZXRDb25uZWN0b3I6IEZjQ29ubmVjdG9yKSA9PiBib29sZWFuO1xuICBlZGdlRHJhZ292ZXJDb25uZWN0b3I6IChldmVudDogRHJhZ0V2ZW50LCBjb25uZWN0b3I6IEZjQ29ubmVjdG9yKSA9PiBib29sZWFuO1xuICBlZGdlRHJhZ292ZXJNYWduZXQ6IChldmVudDogRHJhZ0V2ZW50LCBjb25uZWN0b3I6IEZjQ29ubmVjdG9yKSA9PiBib29sZWFuO1xuICBlZGdlRHJhZ2xlYXZlTWFnbmV0OiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgbm9kZU1vdXNlT3ZlcjogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIG5vZGVNb3VzZU91dDogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIGNvbm5lY3Rvck1vdXNlRW50ZXI6IChldmVudDogTW91c2VFdmVudCwgY29ubmVjdG9yOiBGY0Nvbm5lY3RvcikgPT4gdm9pZDtcbiAgY29ubmVjdG9yTW91c2VMZWF2ZTogKGV2ZW50OiBNb3VzZUV2ZW50LCBjb25uZWN0b3I6IEZjQ29ubmVjdG9yKSA9PiB2b2lkO1xuICBub2RlQ2xpY2tlZDogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNBZGphY2VudExpc3Qge1xuICBbaWQ6IHN0cmluZ106IHtcbiAgICBpbmNvbWluZzogbnVtYmVyO1xuICAgIG91dGdvaW5nOiBBcnJheTxzdHJpbmc+O1xuICB9O1xufVxuXG5jbGFzcyBCYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBFcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlRXJyb3IsICdwcm90b3R5cGUnLCBuZXcgRXJyb3IoKSk7XG5cbmV4cG9ydCBjbGFzcyBNb2RlbHZhbGlkYXRpb25FcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmY1RvcFNvcnQoZ3JhcGg6IEZjTW9kZWwpOiBBcnJheTxzdHJpbmc+IHwgbnVsbCB7XG4gIGNvbnN0IGFkamFjZW50TGlzdDogRmNBZGphY2VudExpc3QgPSB7fTtcbiAgZ3JhcGgubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgIGFkamFjZW50TGlzdFtub2RlLmlkXSA9IHtpbmNvbWluZzogMCwgb3V0Z29pbmc6IFtdfTtcbiAgfSk7XG4gIGdyYXBoLmVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICBjb25zdCBzb3VyY2VOb2RlID0gZ3JhcGgubm9kZXMuZmlsdGVyKChub2RlKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZS5jb25uZWN0b3JzLnNvbWUoKGNvbm5lY3RvcikgPT4ge1xuICAgICAgICByZXR1cm4gY29ubmVjdG9yLmlkID09PSBlZGdlLnNvdXJjZTtcbiAgICAgIH0pO1xuICAgIH0pWzBdO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uTm9kZSA9IGdyYXBoLm5vZGVzLmZpbHRlcigobm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUuY29ubmVjdG9ycy5zb21lKChjb25uZWN0b3IpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rvci5pZCA9PT0gZWRnZS5kZXN0aW5hdGlvbjtcbiAgICAgIH0pO1xuICAgIH0pWzBdO1xuICAgIGFkamFjZW50TGlzdFtzb3VyY2VOb2RlLmlkXS5vdXRnb2luZy5wdXNoKGRlc3RpbmF0aW9uTm9kZS5pZCk7XG4gICAgYWRqYWNlbnRMaXN0W2Rlc3RpbmF0aW9uTm9kZS5pZF0uaW5jb21pbmcrKztcbiAgfSk7XG4gIGNvbnN0IG9yZGVyZWROb2Rlczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc291cmNlTm9kZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBPYmplY3Qua2V5cyhhZGphY2VudExpc3QpKSB7XG4gICAgY29uc3QgZWRnZXMgPSBhZGphY2VudExpc3Rbbm9kZV07XG4gICAgaWYgKGVkZ2VzLmluY29taW5nID09PSAwKSB7XG4gICAgICBzb3VyY2VOb2Rlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoc291cmNlTm9kZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgY29uc3Qgc291cmNlTm9kZSA9IHNvdXJjZU5vZGVzLnBvcCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRqYWNlbnRMaXN0W3NvdXJjZU5vZGVdLm91dGdvaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbk5vZGUgPSBhZGphY2VudExpc3Rbc291cmNlTm9kZV0ub3V0Z29pbmdbaV07XG4gICAgICBhZGphY2VudExpc3RbZGVzdGluYXRpb25Ob2RlXS5pbmNvbWluZy0tO1xuICAgICAgaWYgKGFkamFjZW50TGlzdFtkZXN0aW5hdGlvbk5vZGVdLmluY29taW5nID09PSAwKSB7XG4gICAgICAgIHNvdXJjZU5vZGVzLnB1c2goZGVzdGluYXRpb25Ob2RlKTtcbiAgICAgIH1cbiAgICAgIGFkamFjZW50TGlzdFtzb3VyY2VOb2RlXS5vdXRnb2luZy5zcGxpY2UoaSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICAgIG9yZGVyZWROb2Rlcy5wdXNoKHNvdXJjZU5vZGUpO1xuICB9XG4gIGxldCBoYXNFZGdlcyA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LmtleXMoYWRqYWNlbnRMaXN0KSkge1xuICAgIGNvbnN0IGVkZ2VzID0gYWRqYWNlbnRMaXN0W25vZGVdO1xuICAgIGlmIChlZGdlcy5pbmNvbWluZyAhPT0gMCkge1xuICAgICAgaGFzRWRnZXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoaGFzRWRnZXMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb3JkZXJlZE5vZGVzO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/ngx-flowchart/esm5/lib/model.service.js b/dist/ngx-flowchart/esm5/lib/model.service.js index 68bafbf..5b8fdd4 100644 --- a/dist/ngx-flowchart/esm5/lib/model.service.js +++ b/dist/ngx-flowchart/esm5/lib/model.service.js @@ -6,7 +6,7 @@ import * as tslib_1 from "tslib"; import { of, Subject } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; var FcModelService = /** @class */ (function () { - function FcModelService(modelValidation, model, modelChanged, cd, selectedObjects, dropNode, createEdge, edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback, canvasHtmlElement, svgHtmlElement) { + function FcModelService(modelValidation, model, modelChanged, detectChangesSubject, selectedObjects, dropNode, createEdge, edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback, canvasHtmlElement, svgHtmlElement) { var _this = this; this.connectorsHtmlElements = {}; this.nodesHtmlElements = {}; @@ -17,7 +17,7 @@ var FcModelService = /** @class */ (function () { this.modelValidation = modelValidation; this.model = model; this.modelChanged = modelChanged; - this.cd = cd; + this.detectChangesSubject = detectChangesSubject; this.canvasHtmlElement = canvasHtmlElement; this.svgHtmlElement = svgHtmlElement; this.modelValidation.validateModel(this.model); @@ -75,7 +75,7 @@ var FcModelService = /** @class */ (function () { * @return {?} */ function () { - _this.cd.detectChanges(); + _this.detectChangesSubject.next(); }), 0); }; /** @@ -402,23 +402,6 @@ var FcModelService = /** @class */ (function () { } return this.dragImage; }; - /** - * @param {?} edgeAddedCallback - * @param {?} nodeRemovedCallback - * @param {?} edgeRemovedCallback - * @return {?} - */ - FcModelService.prototype.registerCallbacks = /** - * @param {?} edgeAddedCallback - * @param {?} nodeRemovedCallback - * @param {?} edgeRemovedCallback - * @return {?} - */ - function (edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback) { - this.edgeAddedCallback = edgeAddedCallback; - this.nodeRemovedCallback = nodeRemovedCallback; - this.edgeRemovedCallback = edgeRemovedCallback; - }; return FcModelService; }()); export { FcModelService }; @@ -427,8 +410,11 @@ if (false) { FcModelService.prototype.modelValidation; /** @type {?} */ FcModelService.prototype.model; - /** @type {?} */ - FcModelService.prototype.cd; + /** + * @type {?} + * @private + */ + FcModelService.prototype.detectChangesSubject; /** @type {?} */ FcModelService.prototype.selectedObjects; /** @type {?} */ @@ -1048,4 +1034,4 @@ var EdgesModel = /** @class */ (function (_super) { }; return EdgesModel; }(AbstractFcModel)); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1mbG93Y2hhcnQvIiwic291cmNlcyI6WyJsaWIvbW9kZWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QztJQTRCRSx3QkFBWSxlQUF5QyxFQUN6QyxLQUFjLEVBQ2QsWUFBK0IsRUFDL0IsRUFBcUIsRUFDckIsZUFBc0IsRUFDdEIsUUFBOEMsRUFDOUMsVUFBOEQsRUFDOUQsaUJBQXlDLEVBQ3pDLG1CQUEyQyxFQUMzQyxtQkFBMkMsRUFDM0MsaUJBQThCLEVBQzlCLGNBQTBCO1FBWHRDLGlCQW1DQztRQXhERCwyQkFBc0IsR0FBbUIsRUFBRSxDQUFDO1FBQzVDLHNCQUFpQixHQUFtQixFQUFFLENBQUM7UUFDdkMsc0JBQWlCLEdBQWdCLElBQUksQ0FBQztRQUN0QyxjQUFTLEdBQXFCLElBQUksQ0FBQztRQUNuQyxtQkFBYyxHQUFlLElBQUksQ0FBQztRQVdqQixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQW1COUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFDM0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBRXZD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QUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN2QyxLQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLENBQUMsRUFDRixDQUFDO0lBQ0osQ0FBQztJQUNILGlCQUFDO0FBQUQsQ0FBQyxBQXpFRCxDQUF5QixlQUFlLEdBeUV2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZjTW9kZWxWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vbW9kZWx2YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmNDb25uZWN0b3IsIEZjQ29vcmRzLCBGY0VkZ2UsIEZjSXRlbUluZm8sIEZjTW9kZWwsIEZjTm9kZSwgRmNSZWN0Qm94IH0gZnJvbSAnLi9uZ3gtZmxvd2NoYXJ0Lm1vZGVscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgRmNNb2RlbFNlcnZpY2Uge1xuXG4gIG1vZGVsVmFsaWRhdGlvbjogRmNNb2RlbFZhbGlkYXRpb25TZXJ2aWNlO1xuICBtb2RlbDogRmNNb2RlbDtcbiAgY2Q6IENoYW5nZURldGVjdG9yUmVmO1xuICBzZWxlY3RlZE9iamVjdHM6IGFueVtdO1xuXG4gIGNvbm5lY3RvcnNIdG1sRWxlbWVudHM6IEh0bWxFbGVtZW50TWFwID0ge307XG4gIG5vZGVzSHRtbEVsZW1lbnRzOiBIdG1sRWxlbWVudE1hcCA9IHt9O1xuICBjYW52YXNIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQgPSBudWxsO1xuICBkcmFnSW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgPSBudWxsO1xuICBzdmdIdG1sRWxlbWVudDogU1ZHRWxlbWVudCA9IG51bGw7XG5cbiAgZHJvcE5vZGU6IChldmVudDogRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgY3JlYXRlRWRnZTogKGV2ZW50OiBFdmVudCwgZWRnZTogRmNFZGdlKSA9PiBPYnNlcnZhYmxlPEZjRWRnZT47XG4gIGVkZ2VBZGRlZENhbGxiYWNrOiAoZWRnZTogRmNFZGdlKSA9PiB2b2lkO1xuICBub2RlUmVtb3ZlZENhbGxiYWNrOiAobm9kZTogRmNOb2RlKSA9PiB2b2lkO1xuICBlZGdlUmVtb3ZlZENhbGxiYWNrOiAoZWRnZTogRmNFZGdlKSA9PiB2b2lkO1xuXG4gIGRyb3BUYXJnZXRJZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kZWxDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWJvdW5jZXIgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgY29ubmVjdG9yczogQ29ubmVjdG9yc01vZGVsO1xuICBub2RlczogTm9kZXNNb2RlbDtcbiAgZWRnZXM6IEVkZ2VzTW9kZWw7XG5cbiAgY29uc3RydWN0b3IobW9kZWxWYWxpZGF0aW9uOiBGY01vZGVsVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIG1vZGVsOiBGY01vZGVsLFxuICAgICAgICAgICAgICBtb2RlbENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+LFxuICAgICAgICAgICAgICBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHNlbGVjdGVkT2JqZWN0czogYW55W10sXG4gICAgICAgICAgICAgIGRyb3BOb2RlOiAoZXZlbnQ6IEV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQsXG4gICAgICAgICAgICAgIGNyZWF0ZUVkZ2U6IChldmVudDogRXZlbnQsIGVkZ2U6IEZjRWRnZSkgPT4gT2JzZXJ2YWJsZTxGY0VkZ2U+LFxuICAgICAgICAgICAgICBlZGdlQWRkZWRDYWxsYmFjazogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZCxcbiAgICAgICAgICAgICAgbm9kZVJlbW92ZWRDYWxsYmFjazogKG5vZGU6IEZjTm9kZSkgPT4gdm9pZCxcbiAgICAgICAgICAgICAgZWRnZVJlbW92ZWRDYWxsYmFjazogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZCxcbiAgICAgICAgICAgICAgY2FudmFzSHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBzdmdIdG1sRWxlbWVudDogU1ZHRWxlbWVudCkge1xuXG4gICAgdGhpcy5tb2RlbFZhbGlkYXRpb24gPSBtb2RlbFZhbGlkYXRpb247XG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuICAgIHRoaXMubW9kZWxDaGFuZ2VkID0gbW9kZWxDaGFuZ2VkO1xuICAgIHRoaXMuY2QgPSBjZDtcbiAgICB0aGlzLmNhbnZhc0h0bWxFbGVtZW50ID0gY2FudmFzSHRtbEVsZW1lbnQ7XG4gICAgdGhpcy5zdmdIdG1sRWxlbWVudCA9IHN2Z0h0bWxFbGVtZW50O1xuICAgIHRoaXMubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlTW9kZWwodGhpcy5tb2RlbCk7XG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdHMgPSBzZWxlY3RlZE9iamVjdHM7XG5cbiAgICB0aGlzLmRyb3BOb2RlID0gZHJvcE5vZGUgfHwgKCgpID0+IHt9KTtcbiAgICB0aGlzLmNyZWF0ZUVkZ2UgPSBjcmVhdGVFZGdlIHx8ICgoZXZlbnQsIGVkZ2UpID0+IG9mKHsuLi5lZGdlLCBsYWJlbDogJ2xhYmVsJ30pKTtcbiAgICB0aGlzLmVkZ2VBZGRlZENhbGxiYWNrID0gZWRnZUFkZGVkQ2FsbGJhY2sgfHwgKCgpID0+IHt9KTtcbiAgICB0aGlzLm5vZGVSZW1vdmVkQ2FsbGJhY2sgPSBub2RlUmVtb3ZlZENhbGxiYWNrIHx8ICgoKSA9PiB7fSk7XG4gICAgdGhpcy5lZGdlUmVtb3ZlZENhbGxiYWNrID0gZWRnZVJlbW92ZWRDYWxsYmFjayB8fCAoKCkgPT4ge30pO1xuXG4gICAgdGhpcy5jb25uZWN0b3JzID0gbmV3IENvbm5lY3RvcnNNb2RlbCh0aGlzKTtcbiAgICB0aGlzLm5vZGVzID0gbmV3IE5vZGVzTW9kZWwodGhpcyk7XG4gICAgdGhpcy5lZGdlcyA9IG5ldyBFZGdlc01vZGVsKHRoaXMpO1xuXG4gICAgdGhpcy5kZWJvdW5jZXJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm1vZGVsQ2hhbmdlZC5lbWl0KCkpO1xuICB9XG5cbiAgcHVibGljIG5vdGlmeU1vZGVsQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmRlYm91bmNlci5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdE9iamVjdChvYmplY3Q6IGFueSkge1xuICAgIGlmICh0aGlzLmlzRWRpdGFibGUoKSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3RzLmluZGV4T2Yob2JqZWN0KSA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdHMucHVzaChvYmplY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZXNlbGVjdE9iamVjdChvYmplY3Q6IGFueSkge1xuICAgIGlmICh0aGlzLmlzRWRpdGFibGUoKSkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkT2JqZWN0cy5pbmRleE9mKG9iamVjdCk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHJpZWQgdG8gZGVzZWxlY3QgYW4gdW5zZWxlY3RlZCBvYmplY3QnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlbGVjdGVkT2JqZWN0KG9iamVjdDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZE9iamVjdChvYmplY3QpKSB7XG4gICAgICB0aGlzLmRlc2VsZWN0T2JqZWN0KG9iamVjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG9iamVjdCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzU2VsZWN0ZWRPYmplY3Qob2JqZWN0OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9iamVjdHMuaW5kZXhPZihvYmplY3QpICE9PSAtMTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5tb2RlbC5ub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgaWYgKCFub2RlLnJlYWRvbmx5KSB7XG4gICAgICAgIHRoaXMubm9kZXMuc2VsZWN0KG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubW9kZWwuZWRnZXMuZm9yRWFjaChlZGdlID0+IHtcbiAgICAgIHRoaXMuZWRnZXMuc2VsZWN0KGVkZ2UpO1xuICAgIH0pO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RzLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkT2JqZWN0cy5sZW5ndGgpO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIGlzRWRpdE9iamVjdChvYmplY3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT2JqZWN0cy5sZW5ndGggPT09IDEgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RzLmluZGV4T2Yob2JqZWN0KSAhPT0gLTE7XG4gIH1cblxuICBwcml2YXRlIGluUmVjdEJveCh4OiBudW1iZXIsIHk6IG51bWJlciwgcmVjdEJveDogRmNSZWN0Qm94KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHggPj0gcmVjdEJveC5sZWZ0ICYmIHggPD0gcmVjdEJveC5yaWdodCAmJlxuICAgICAgeSA+PSByZWN0Qm94LnRvcCAmJiB5IDw9IHJlY3RCb3guYm90dG9tO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1JbmZvQXRQb2ludCh4OiBudW1iZXIsIHk6IG51bWJlcik6IEZjSXRlbUluZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBub2RlOiB0aGlzLmdldE5vZGVBdFBvaW50KHgsIHkpLFxuICAgICAgZWRnZTogdGhpcy5nZXRFZGdlQXRQb2ludCh4LCB5KVxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZUF0UG9pbnQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBGY05vZGUge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLm1vZGVsLm5vZGVzKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5ub2Rlcy5nZXRIdG1sRWxlbWVudChub2RlLmlkKTtcbiAgICAgIGNvbnN0IG5vZGVFbGVtZW50Qm94ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmICh4ID49IG5vZGVFbGVtZW50Qm94LmxlZnQgJiYgeCA8PSBub2RlRWxlbWVudEJveC5yaWdodFxuICAgICAgICAmJiB5ID49IG5vZGVFbGVtZW50Qm94LnRvcCAmJiB5IDw9IG5vZGVFbGVtZW50Qm94LmJvdHRvbSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0RWRnZUF0UG9pbnQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBGY0VkZ2Uge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpO1xuICAgIGNvbnN0IGlkID0gZWxlbWVudC5pZDtcbiAgICBsZXQgZWRnZUluZGV4ID0gLTE7XG4gICAgaWYgKGlkKSB7XG4gICAgICBpZiAoaWQuc3RhcnRzV2l0aCgnZmMtZWRnZS1wYXRoLScpKSB7XG4gICAgICAgIGVkZ2VJbmRleCA9IE51bWJlcihpZC5zdWJzdHJpbmcoJ2ZjLWVkZ2UtcGF0aC0nLmxlbmd0aCkpO1xuICAgICAgfSBlbHNlIGlmIChpZC5zdGFydHNXaXRoKCdmYy1lZGdlLWxhYmVsLScpKSB7XG4gICAgICAgIGVkZ2VJbmRleCA9IE51bWJlcihpZC5zdWJzdHJpbmcoJ2ZjLWVkZ2UtbGFiZWwtJy5sZW5ndGgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVkZ2VJbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlbC5lZGdlc1tlZGdlSW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbGxJblJlY3QocmVjdEJveDogRmNSZWN0Qm94KSB7XG4gICAgdGhpcy5tb2RlbC5ub2Rlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMubm9kZXMuZ2V0SHRtbEVsZW1lbnQodmFsdWUuaWQpO1xuICAgICAgY29uc3Qgbm9kZUVsZW1lbnRCb3ggPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKCF2YWx1ZS5yZWFkb25seSkge1xuICAgICAgICBjb25zdCB4ID0gbm9kZUVsZW1lbnRCb3gubGVmdCArIG5vZGVFbGVtZW50Qm94LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgeSA9IG5vZGVFbGVtZW50Qm94LnRvcCArIG5vZGVFbGVtZW50Qm94LmhlaWdodCAvIDI7XG4gICAgICAgIGlmICh0aGlzLmluUmVjdEJveCh4LCB5LCByZWN0Qm94KSkge1xuICAgICAgICAgIHRoaXMubm9kZXMuc2VsZWN0KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5pc1NlbGVjdGVkKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5ub2Rlcy5kZXNlbGVjdCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgY2FudmFzRWxlbWVudEJveCA9IHRoaXMuY2FudmFzSHRtbEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5tb2RlbC5lZGdlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmVkZ2VzLnNvdXJjZUNvb3JkKHZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZCA9IHRoaXMuZWRnZXMuZGVzdENvb3JkKHZhbHVlKTtcbiAgICAgIGNvbnN0IHggPSAoc3RhcnQueCArIGVuZC54KSAvIDIgKyBjYW52YXNFbGVtZW50Qm94LmxlZnQ7XG4gICAgICBjb25zdCB5ID0gKHN0YXJ0LnkgKyBlbmQueSkgLyAyICsgY2FudmFzRWxlbWVudEJveC50b3A7XG4gICAgICBpZiAodGhpcy5pblJlY3RCb3goeCwgeSwgcmVjdEJveCkpIHtcbiAgICAgICAgdGhpcy5lZGdlcy5zZWxlY3QodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZWRnZXMuaXNTZWxlY3RlZCh2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLmVkZ2VzLmRlc2VsZWN0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZVNlbGVjdGVkKCkge1xuICAgIGNvbnN0IGVkZ2VzVG9EZWxldGUgPSB0aGlzLmVkZ2VzLmdldFNlbGVjdGVkRWRnZXMoKTtcbiAgICBlZGdlc1RvRGVsZXRlLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICAgIHRoaXMuZWRnZXMuZGVsZXRlKGVkZ2UpO1xuICAgIH0pO1xuICAgIGNvbnN0IG5vZGVzVG9EZWxldGUgPSB0aGlzLm5vZGVzLmdldFNlbGVjdGVkTm9kZXMoKTtcbiAgICBub2Rlc1RvRGVsZXRlLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIHRoaXMubm9kZXMuZGVsZXRlKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGlzRWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcFRhcmdldElkID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgaXNEcm9wU291cmNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRyb3BUYXJnZXRJZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdldERyYWdJbWFnZSgpOiBIVE1MSW1hZ2VFbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZHJhZ0ltYWdlKSB7XG4gICAgICB0aGlzLmRyYWdJbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgdGhpcy5kcmFnSW1hZ2Uuc3JjID0gJ2RhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFBQUFQLy8veUg1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlCUkFBNyc7XG4gICAgICB0aGlzLmRyYWdJbWFnZS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRyYWdJbWFnZTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckNhbGxiYWNrcyhlZGdlQWRkZWRDYWxsYmFjazogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVSZW1vdmVkQ2FsbGJhY2s6IChub2RlOiBGY05vZGUpID0+IHZvaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlUmVtb3ZlZENhbGxiYWNrOiAoZWRnZTogRmNFZGdlKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5lZGdlQWRkZWRDYWxsYmFjayA9IGVkZ2VBZGRlZENhbGxiYWNrO1xuICAgIHRoaXMubm9kZVJlbW92ZWRDYWxsYmFjayA9IG5vZGVSZW1vdmVkQ2FsbGJhY2s7XG4gICAgdGhpcy5lZGdlUmVtb3ZlZENhbGxiYWNrID0gZWRnZVJlbW92ZWRDYWxsYmFjaztcbiAgfVxuXG59XG5cbmludGVyZmFjZSBIdG1sRWxlbWVudE1hcCB7IFtpZDogc3RyaW5nXTogSFRNTEVsZW1lbnQ7IH1cblxuYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RGY01vZGVsPFQ+IHtcblxuICBtb2RlbFNlcnZpY2U6IEZjTW9kZWxTZXJ2aWNlO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihtb2RlbFNlcnZpY2U6IEZjTW9kZWxTZXJ2aWNlKSB7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UgPSBtb2RlbFNlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0KG9iamVjdDogVCkge1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLnNlbGVjdE9iamVjdChvYmplY3QpO1xuICB9XG5cbiAgcHVibGljIGRlc2VsZWN0KG9iamVjdDogVCkge1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLmRlc2VsZWN0T2JqZWN0KG9iamVjdCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0ZWQob2JqZWN0OiBUKSB7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UudG9nZ2xlU2VsZWN0ZWRPYmplY3Qob2JqZWN0KTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGVjdGVkKG9iamVjdDogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGVsU2VydmljZS5pc1NlbGVjdGVkT2JqZWN0KG9iamVjdCk7XG4gIH1cblxuICBwdWJsaWMgaXNFZGl0KG9iamVjdDogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGVsU2VydmljZS5pc0VkaXRPYmplY3Qob2JqZWN0KTtcbiAgfVxufVxuXG5jbGFzcyBDb25uZWN0b3JzTW9kZWwgZXh0ZW5kcyBBYnN0cmFjdEZjTW9kZWw8RmNDb25uZWN0b3I+IHtcblxuICBjb25zdHJ1Y3Rvcihtb2RlbFNlcnZpY2U6IEZjTW9kZWxTZXJ2aWNlKSB7XG4gICAgc3VwZXIobW9kZWxTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25uZWN0b3IoY29ubmVjdG9ySWQ6IHN0cmluZyk6IEZjQ29ubmVjdG9yIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBtb2RlbC5ub2Rlcykge1xuICAgICAgZm9yIChjb25zdCBjb25uZWN0b3Igb2Ygbm9kZS5jb25uZWN0b3JzKSB7XG4gICAgICAgIGlmIChjb25uZWN0b3IuaWQgPT09IGNvbm5lY3RvcklkKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbm5lY3RvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRIdG1sRWxlbWVudChjb25uZWN0b3JJZDogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLm1vZGVsU2VydmljZS5jb25uZWN0b3JzSHRtbEVsZW1lbnRzW2Nvbm5lY3RvcklkXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIdG1sRWxlbWVudChjb25uZWN0b3JJZDogc3RyaW5nLCBlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLmNvbm5lY3RvcnNIdG1sRWxlbWVudHNbY29ubmVjdG9ySWRdID0gZWxlbWVudDtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRDb29yZHMoY29ubmVjdG9ySWQ6IHN0cmluZywgY2VudGVyZWQ/OiBib29sZWFuKTogRmNDb29yZHMge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldEh0bWxFbGVtZW50KGNvbm5lY3RvcklkKTtcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLm1vZGVsU2VydmljZS5jYW52YXNIdG1sRWxlbWVudDtcbiAgICBpZiAoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB1bmRlZmluZWQgfHwgY2FudmFzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge3g6IDAsIHk6IDB9O1xuICAgIH1cbiAgICBjb25zdCBjb25uZWN0b3JFbGVtZW50Qm94ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjYW52YXNFbGVtZW50Qm94ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCBjb29yZHM6IEZjQ29vcmRzID0ge1xuICAgICAgeDogY29ubmVjdG9yRWxlbWVudEJveC5sZWZ0IC0gY2FudmFzRWxlbWVudEJveC5sZWZ0LFxuICAgICAgeTogY29ubmVjdG9yRWxlbWVudEJveC50b3AgLSBjYW52YXNFbGVtZW50Qm94LnRvcFxuICAgIH07XG4gICAgaWYgKGNlbnRlcmVkKSB7XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IE1hdGgucm91bmQoY29vcmRzLnggKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMiksXG4gICAgICAgIHk6IE1hdGgucm91bmQoY29vcmRzLnkgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gY29vcmRzO1xuICB9XG5cbiAgcHVibGljIGdldENvb3Jkcyhjb25uZWN0b3JJZDogc3RyaW5nKTogRmNDb29yZHMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDb29yZHMoY29ubmVjdG9ySWQsIGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDZW50ZXJlZENvb3JkKGNvbm5lY3RvcklkOiBzdHJpbmcpOiBGY0Nvb3JkcyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENvb3Jkcyhjb25uZWN0b3JJZCwgdHJ1ZSk7XG4gIH1cbn1cblxuY2xhc3MgTm9kZXNNb2RlbCBleHRlbmRzIEFic3RyYWN0RmNNb2RlbDxGY05vZGU+IHtcblxuICBjb25zdHJ1Y3Rvcihtb2RlbFNlcnZpY2U6IEZjTW9kZWxTZXJ2aWNlKSB7XG4gICAgc3VwZXIobW9kZWxTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25uZWN0b3JzQnlUeXBlKG5vZGU6IEZjTm9kZSwgdHlwZTogc3RyaW5nKTogQXJyYXk8RmNDb25uZWN0b3I+IHtcbiAgICByZXR1cm4gbm9kZS5jb25uZWN0b3JzLmZpbHRlcigoY29ubmVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gY29ubmVjdG9yLnR5cGUgPT09IHR5cGU7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hZGRDb25uZWN0b3Iobm9kZTogRmNOb2RlLCBjb25uZWN0b3I6IEZjQ29ubmVjdG9yKSB7XG4gICAgbm9kZS5jb25uZWN0b3JzLnB1c2goY29ubmVjdG9yKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2UubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlTm9kZShub2RlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbm9kZS5jb25uZWN0b3JzLnNwbGljZShub2RlLmNvbm5lY3RvcnMuaW5kZXhPZihjb25uZWN0b3IpLCAxKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUobm9kZTogRmNOb2RlKSB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgdGhpcy5kZXNlbGVjdChub2RlKTtcbiAgICB9XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICBjb25zdCBpbmRleCA9IG1vZGVsLm5vZGVzLmluZGV4T2Yobm9kZSk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bhc3NlZCB1bmRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJpZWQgdG8gZGVsZXRlIG5vdCBleGlzdGluZyBub2RlJyk7XG4gICAgfVxuICAgIGNvbnN0IGNvbm5lY3RvcklkcyA9IHRoaXMuZ2V0Q29ubmVjdG9ySWRzKG5vZGUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kZWwuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBtb2RlbC5lZGdlc1tpXTtcbiAgICAgIGlmIChjb25uZWN0b3JJZHMuaW5kZXhPZihlZGdlLnNvdXJjZSkgIT09IC0xIHx8IGNvbm5lY3Rvcklkcy5pbmRleE9mKGVkZ2UuZGVzdGluYXRpb24pICE9PSAtMSkge1xuICAgICAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5kZWxldGUoZWRnZSk7XG4gICAgICAgIGktLTtcbiAgICAgIH1cbiAgICB9XG4gICAgbW9kZWwubm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5ub3RpZnlNb2RlbENoYW5nZWQoKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5ub2RlUmVtb3ZlZENhbGxiYWNrKG5vZGUpO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkTm9kZXMoKTogQXJyYXk8RmNOb2RlPiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICByZXR1cm4gbW9kZWwubm9kZXMuZmlsdGVyKChub2RlKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXMuaXNTZWxlY3RlZChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDbGlja2VkKG5vZGU6IEZjTm9kZSwgY3RybEtleT86IGJvb2xlYW4pIHtcbiAgICBpZiAoY3RybEtleSkge1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXMudG9nZ2xlU2VsZWN0ZWQobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLmRlc2VsZWN0QWxsKCk7XG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5ub2Rlcy5zZWxlY3Qobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYWRkTm9kZShub2RlOiBGY05vZGUpIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsO1xuICAgIHRyeSB7XG4gICAgICBtb2RlbC5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2UubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlTm9kZXMobW9kZWwubm9kZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBtb2RlbC5ub2Rlcy5zcGxpY2UobW9kZWwubm9kZXMuaW5kZXhPZihub2RlKSwgMSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29ubmVjdG9ySWRzKG5vZGU6IEZjTm9kZSk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBub2RlLmNvbm5lY3RvcnMubWFwKChjb25uZWN0b3IpID0+IHtcbiAgICAgIHJldHVybiBjb25uZWN0b3IuaWQ7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZUJ5Q29ubmVjdG9ySWQoY29ubmVjdG9ySWQ6IHN0cmluZyk6IEZjTm9kZSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbW9kZWwubm9kZXMpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3RvcklkcyA9IHRoaXMuZ2V0Q29ubmVjdG9ySWRzKG5vZGUpO1xuICAgICAgaWYgKGNvbm5lY3Rvcklkcy5pbmRleE9mKGNvbm5lY3RvcklkKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRIdG1sRWxlbWVudChub2RlSWQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXNIdG1sRWxlbWVudHNbbm9kZUlkXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIdG1sRWxlbWVudChub2RlSWQ6IHN0cmluZywgZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5ub2Rlc0h0bWxFbGVtZW50c1tub2RlSWRdID0gZWxlbWVudDtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxufVxuXG5jbGFzcyBFZGdlc01vZGVsIGV4dGVuZHMgQWJzdHJhY3RGY01vZGVsPEZjRWRnZT4ge1xuXG4gIGNvbnN0cnVjdG9yKG1vZGVsU2VydmljZTogRmNNb2RlbFNlcnZpY2UpIHtcbiAgICBzdXBlcihtb2RlbFNlcnZpY2UpO1xuICB9XG5cbiAgcHVibGljIHJlYWR5KGVkZ2U6IEZjRWRnZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMubW9kZWxTZXJ2aWNlLmNvbm5lY3RvcnMuZ2V0SHRtbEVsZW1lbnQoZWRnZS5zb3VyY2UpO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gdGhpcy5tb2RlbFNlcnZpY2UuY29ubmVjdG9ycy5nZXRIdG1sRWxlbWVudChlZGdlLmRlc3RpbmF0aW9uKTtcbiAgICByZXR1cm4gc291cmNlICE9PSB1bmRlZmluZWQgJiYgZGVzdGluYXRpb24gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzb3VyY2VDb29yZChlZGdlOiBGY0VkZ2UpOiBGY0Nvb3JkcyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxTZXJ2aWNlLmNvbm5lY3RvcnMuZ2V0Q2VudGVyZWRDb29yZChlZGdlLnNvdXJjZSk7XG4gIH1cblxuICBwdWJsaWMgZGVzdENvb3JkKGVkZ2U6IEZjRWRnZSk6IEZjQ29vcmRzIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2UuY29ubmVjdG9ycy5nZXRDZW50ZXJlZENvb3JkKGVkZ2UuZGVzdGluYXRpb24pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZShlZGdlOiBGY0VkZ2UpIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsO1xuICAgIGNvbnN0IGluZGV4ID0gbW9kZWwuZWRnZXMuaW5kZXhPZihlZGdlKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyaWVkIHRvIGRlbGV0ZSBub3QgZXhpc3RpbmcgZWRnZScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKGVkZ2UpKSB7XG4gICAgICB0aGlzLmRlc2VsZWN0KGVkZ2UpO1xuICAgIH1cbiAgICBtb2RlbC5lZGdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLm5vdGlmeU1vZGVsQ2hhbmdlZCgpO1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLmVkZ2VSZW1vdmVkQ2FsbGJhY2soZWRnZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRFZGdlcygpOiBBcnJheTxGY0VkZ2U+IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsO1xuICAgIHJldHVybiBtb2RlbC5lZGdlcy5maWx0ZXIoKGVkZ2UpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5pc1NlbGVjdGVkKGVkZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUVkZ2VNb3VzZUNsaWNrKGVkZ2U6IEZjRWRnZSwgY3RybEtleT86IGJvb2xlYW4pIHtcbiAgICBpZiAoY3RybEtleSkge1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMudG9nZ2xlU2VsZWN0ZWQoZWRnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLmRlc2VsZWN0QWxsKCk7XG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5zZWxlY3QoZWRnZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHB1dEVkZ2UoZWRnZTogRmNFZGdlKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICBtb2RlbC5lZGdlcy5wdXNoKGVkZ2UpO1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLm5vdGlmeU1vZGVsQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHVibGljIF9hZGRFZGdlKGV2ZW50OiBFdmVudCwgc291cmNlQ29ubmVjdG9yOiBGY0Nvbm5lY3RvciwgZGVzdENvbm5lY3RvcjogRmNDb25uZWN0b3IsIGxhYmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5tb2RlbFZhbGlkYXRpb24udmFsaWRhdGVDb25uZWN0b3Ioc291cmNlQ29ubmVjdG9yKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5tb2RlbFZhbGlkYXRpb24udmFsaWRhdGVDb25uZWN0b3IoZGVzdENvbm5lY3Rvcik7XG4gICAgY29uc3QgZWRnZTogRmNFZGdlID0ge307XG4gICAgZWRnZS5zb3VyY2UgPSBzb3VyY2VDb25uZWN0b3IuaWQ7XG4gICAgZWRnZS5kZXN0aW5hdGlvbiA9IGRlc3RDb25uZWN0b3IuaWQ7XG4gICAgZWRnZS5sYWJlbCA9IGxhYmVsO1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbFNlcnZpY2UubW9kZWw7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlRWRnZXMobW9kZWwuZWRnZXMuY29uY2F0KFtlZGdlXSksIG1vZGVsLm5vZGVzKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5jcmVhdGVFZGdlKGV2ZW50LCBlZGdlKS5zdWJzY3JpYmUoXG4gICAgICAoY3JlYXRlZCkgPT4ge1xuICAgICAgICBtb2RlbC5lZGdlcy5wdXNoKGNyZWF0ZWQpO1xuICAgICAgICB0aGlzLm1vZGVsU2VydmljZS5ub3RpZnlNb2RlbENoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2UuZWRnZUFkZGVkQ2FsbGJhY2soY3JlYXRlZCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1mbG93Y2hhcnQvIiwic291cmNlcyI6WyJsaWIvbW9kZWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QztJQTRCRSx3QkFBWSxlQUF5QyxFQUN6QyxLQUFjLEVBQ2QsWUFBK0IsRUFDL0Isb0JBQWtDLEVBQ2xDLGVBQXNCLEVBQ3RCLFFBQThDLEVBQzlDLFVBQThELEVBQzlELGlCQUF5QyxFQUN6QyxtQkFBMkMsRUFDM0MsbUJBQTJDLEVBQzNDLGlCQUE4QixFQUM5QixjQUEwQjtRQVh0QyxpQkFtQ0M7UUF4REQsMkJBQXNCLEdBQW1CLEVBQUUsQ0FBQztRQUM1QyxzQkFBaUIsR0FBbUIsRUFBRSxDQUFDO1FBQ3ZDLHNCQUFpQixHQUFnQixJQUFJLENBQUM7UUFDdEMsY0FBUyxHQUFxQixJQUFJLENBQUM7UUFDbkMsbUJBQWMsR0FBZSxJQUFJLENBQUM7UUFXakIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFtQjlDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFDM0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFD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aWRhdGlvblNlcnZpY2UgfSBmcm9tICcuL21vZGVsdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZjQ29ubmVjdG9yLCBGY0Nvb3JkcywgRmNFZGdlLCBGY0l0ZW1JbmZvLCBGY01vZGVsLCBGY05vZGUsIEZjUmVjdEJveCB9IGZyb20gJy4vbmd4LWZsb3djaGFydC5tb2RlbHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGNsYXNzIEZjTW9kZWxTZXJ2aWNlIHtcblxuICBtb2RlbFZhbGlkYXRpb246IEZjTW9kZWxWYWxpZGF0aW9uU2VydmljZTtcbiAgbW9kZWw6IEZjTW9kZWw7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGV0ZWN0Q2hhbmdlc1N1YmplY3Q6IFN1YmplY3Q8YW55PjtcbiAgc2VsZWN0ZWRPYmplY3RzOiBhbnlbXTtcblxuICBjb25uZWN0b3JzSHRtbEVsZW1lbnRzOiBIdG1sRWxlbWVudE1hcCA9IHt9O1xuICBub2Rlc0h0bWxFbGVtZW50czogSHRtbEVsZW1lbnRNYXAgPSB7fTtcbiAgY2FudmFzSHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gbnVsbDtcbiAgZHJhZ0ltYWdlOiBIVE1MSW1hZ2VFbGVtZW50ID0gbnVsbDtcbiAgc3ZnSHRtbEVsZW1lbnQ6IFNWR0VsZW1lbnQgPSBudWxsO1xuXG4gIGRyb3BOb2RlOiAoZXZlbnQ6IEV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIGNyZWF0ZUVkZ2U6IChldmVudDogRXZlbnQsIGVkZ2U6IEZjRWRnZSkgPT4gT2JzZXJ2YWJsZTxGY0VkZ2U+O1xuICBlZGdlQWRkZWRDYWxsYmFjazogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcbiAgbm9kZVJlbW92ZWRDYWxsYmFjazogKG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgZWRnZVJlbW92ZWRDYWxsYmFjazogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcblxuICBkcm9wVGFyZ2V0SWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IG1vZGVsQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VyID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIGNvbm5lY3RvcnM6IENvbm5lY3RvcnNNb2RlbDtcbiAgbm9kZXM6IE5vZGVzTW9kZWw7XG4gIGVkZ2VzOiBFZGdlc01vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKG1vZGVsVmFsaWRhdGlvbjogRmNNb2RlbFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBtb2RlbDogRmNNb2RlbCxcbiAgICAgICAgICAgICAgbW9kZWxDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PixcbiAgICAgICAgICAgICAgZGV0ZWN0Q2hhbmdlc1N1YmplY3Q6IFN1YmplY3Q8YW55PixcbiAgICAgICAgICAgICAgc2VsZWN0ZWRPYmplY3RzOiBhbnlbXSxcbiAgICAgICAgICAgICAgZHJvcE5vZGU6IChldmVudDogRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZCxcbiAgICAgICAgICAgICAgY3JlYXRlRWRnZTogKGV2ZW50OiBFdmVudCwgZWRnZTogRmNFZGdlKSA9PiBPYnNlcnZhYmxlPEZjRWRnZT4sXG4gICAgICAgICAgICAgIGVkZ2VBZGRlZENhbGxiYWNrOiAoZWRnZTogRmNFZGdlKSA9PiB2b2lkLFxuICAgICAgICAgICAgICBub2RlUmVtb3ZlZENhbGxiYWNrOiAobm9kZTogRmNOb2RlKSA9PiB2b2lkLFxuICAgICAgICAgICAgICBlZGdlUmVtb3ZlZENhbGxiYWNrOiAoZWRnZTogRmNFZGdlKSA9PiB2b2lkLFxuICAgICAgICAgICAgICBjYW52YXNIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICAgIHN2Z0h0bWxFbGVtZW50OiBTVkdFbGVtZW50KSB7XG5cbiAgICB0aGlzLm1vZGVsVmFsaWRhdGlvbiA9IG1vZGVsVmFsaWRhdGlvbjtcbiAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5tb2RlbENoYW5nZWQgPSBtb2RlbENoYW5nZWQ7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzU3ViamVjdCA9IGRldGVjdENoYW5nZXNTdWJqZWN0O1xuICAgIHRoaXMuY2FudmFzSHRtbEVsZW1lbnQgPSBjYW52YXNIdG1sRWxlbWVudDtcbiAgICB0aGlzLnN2Z0h0bWxFbGVtZW50ID0gc3ZnSHRtbEVsZW1lbnQ7XG4gICAgdGhpcy5tb2RlbFZhbGlkYXRpb24udmFsaWRhdGVNb2RlbCh0aGlzLm1vZGVsKTtcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0cyA9IHNlbGVjdGVkT2JqZWN0cztcblxuICAgIHRoaXMuZHJvcE5vZGUgPSBkcm9wTm9kZSB8fCAoKCkgPT4ge30pO1xuICAgIHRoaXMuY3JlYXRlRWRnZSA9IGNyZWF0ZUVkZ2UgfHwgKChldmVudCwgZWRnZSkgPT4gb2Yoey4uLmVkZ2UsIGxhYmVsOiAnbGFiZWwnfSkpO1xuICAgIHRoaXMuZWRnZUFkZGVkQ2FsbGJhY2sgPSBlZGdlQWRkZWRDYWxsYmFjayB8fCAoKCkgPT4ge30pO1xuICAgIHRoaXMubm9kZVJlbW92ZWRDYWxsYmFjayA9IG5vZGVSZW1vdmVkQ2FsbGJhY2sgfHwgKCgpID0+IHt9KTtcbiAgICB0aGlzLmVkZ2VSZW1vdmVkQ2FsbGJhY2sgPSBlZGdlUmVtb3ZlZENhbGxiYWNrIHx8ICgoKSA9PiB7fSk7XG5cbiAgICB0aGlzLmNvbm5lY3RvcnMgPSBuZXcgQ29ubmVjdG9yc01vZGVsKHRoaXMpO1xuICAgIHRoaXMubm9kZXMgPSBuZXcgTm9kZXNNb2RlbCh0aGlzKTtcbiAgICB0aGlzLmVkZ2VzID0gbmV3IEVkZ2VzTW9kZWwodGhpcyk7XG5cbiAgICB0aGlzLmRlYm91bmNlclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubW9kZWxDaGFuZ2VkLmVtaXQoKSk7XG4gIH1cblxuICBwdWJsaWMgbm90aWZ5TW9kZWxDaGFuZ2VkKCkge1xuICAgIHRoaXMuZGVib3VuY2VyLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXRlY3RDaGFuZ2VzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzU3ViamVjdC5uZXh0KCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0T2JqZWN0KG9iamVjdDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNFZGl0YWJsZSgpKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdHMuaW5kZXhPZihvYmplY3QpID09PSAtMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0cy5wdXNoKG9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlc2VsZWN0T2JqZWN0KG9iamVjdDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNFZGl0YWJsZSgpKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRPYmplY3RzLmluZGV4T2Yob2JqZWN0KTtcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmllZCB0byBkZXNlbGVjdCBhbiB1bnNlbGVjdGVkIG9iamVjdCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0ZWRPYmplY3Qob2JqZWN0OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHRoaXMuZGVzZWxlY3RPYmplY3Qob2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RPYmplY3Qob2JqZWN0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNTZWxlY3RlZE9iamVjdChvYmplY3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT2JqZWN0cy5pbmRleE9mKG9iamVjdCkgIT09IC0xO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLm1vZGVsLm5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBpZiAoIW5vZGUucmVhZG9ubHkpIHtcbiAgICAgICAgdGhpcy5ub2Rlcy5zZWxlY3Qobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5tb2RlbC5lZGdlcy5mb3JFYWNoKGVkZ2UgPT4ge1xuICAgICAgdGhpcy5lZGdlcy5zZWxlY3QoZWRnZSk7XG4gICAgfSk7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgZGVzZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdHMuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWRPYmplY3RzLmxlbmd0aCk7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgaXNFZGl0T2JqZWN0KG9iamVjdDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPYmplY3RzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdHMuaW5kZXhPZihvYmplY3QpICE9PSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgaW5SZWN0Qm94KHg6IG51bWJlciwgeTogbnVtYmVyLCByZWN0Qm94OiBGY1JlY3RCb3gpOiBib29sZWFuIHtcbiAgICByZXR1cm4geCA+PSByZWN0Qm94LmxlZnQgJiYgeCA8PSByZWN0Qm94LnJpZ2h0ICYmXG4gICAgICB5ID49IHJlY3RCb3gudG9wICYmIHkgPD0gcmVjdEJveC5ib3R0b207XG4gIH1cblxuICBwdWJsaWMgZ2V0SXRlbUluZm9BdFBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyKTogRmNJdGVtSW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5vZGU6IHRoaXMuZ2V0Tm9kZUF0UG9pbnQoeCwgeSksXG4gICAgICBlZGdlOiB0aGlzLmdldEVkZ2VBdFBvaW50KHgsIHkpXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROb2RlQXRQb2ludCh4OiBudW1iZXIsIHk6IG51bWJlcik6IEZjTm9kZSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMubW9kZWwubm9kZXMpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLm5vZGVzLmdldEh0bWxFbGVtZW50KG5vZGUuaWQpO1xuICAgICAgY29uc3Qgbm9kZUVsZW1lbnRCb3ggPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHggPj0gbm9kZUVsZW1lbnRCb3gubGVmdCAmJiB4IDw9IG5vZGVFbGVtZW50Qm94LnJpZ2h0XG4gICAgICAgICYmIHkgPj0gbm9kZUVsZW1lbnRCb3gudG9wICYmIHkgPD0gbm9kZUVsZW1lbnRCb3guYm90dG9tKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFZGdlQXRQb2ludCh4OiBudW1iZXIsIHk6IG51bWJlcik6IEZjRWRnZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSk7XG4gICAgY29uc3QgaWQgPSBlbGVtZW50LmlkO1xuICAgIGxldCBlZGdlSW5kZXggPSAtMTtcbiAgICBpZiAoaWQpIHtcbiAgICAgIGlmIChpZC5zdGFydHNXaXRoKCdmYy1lZGdlLXBhdGgtJykpIHtcbiAgICAgICAgZWRnZUluZGV4ID0gTnVtYmVyKGlkLnN1YnN0cmluZygnZmMtZWRnZS1wYXRoLScubGVuZ3RoKSk7XG4gICAgICB9IGVsc2UgaWYgKGlkLnN0YXJ0c1dpdGgoJ2ZjLWVkZ2UtbGFiZWwtJykpIHtcbiAgICAgICAgZWRnZUluZGV4ID0gTnVtYmVyKGlkLnN1YnN0cmluZygnZmMtZWRnZS1sYWJlbC0nLmxlbmd0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZWRnZUluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGVsLmVkZ2VzW2VkZ2VJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdEFsbEluUmVjdChyZWN0Qm94OiBGY1JlY3RCb3gpIHtcbiAgICB0aGlzLm1vZGVsLm5vZGVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5ub2Rlcy5nZXRIdG1sRWxlbWVudCh2YWx1ZS5pZCk7XG4gICAgICBjb25zdCBub2RlRWxlbWVudEJveCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAoIXZhbHVlLnJlYWRvbmx5KSB7XG4gICAgICAgIGNvbnN0IHggPSBub2RlRWxlbWVudEJveC5sZWZ0ICsgbm9kZUVsZW1lbnRCb3gud2lkdGggLyAyO1xuICAgICAgICBjb25zdCB5ID0gbm9kZUVsZW1lbnRCb3gudG9wICsgbm9kZUVsZW1lbnRCb3guaGVpZ2h0IC8gMjtcbiAgICAgICAgaWYgKHRoaXMuaW5SZWN0Qm94KHgsIHksIHJlY3RCb3gpKSB7XG4gICAgICAgICAgdGhpcy5ub2Rlcy5zZWxlY3QodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm5vZGVzLmlzU2VsZWN0ZWQodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVzLmRlc2VsZWN0KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjYW52YXNFbGVtZW50Qm94ID0gdGhpcy5jYW52YXNIdG1sRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLm1vZGVsLmVkZ2VzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IHRoaXMuZWRnZXMuc291cmNlQ29vcmQodmFsdWUpO1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5lZGdlcy5kZXN0Q29vcmQodmFsdWUpO1xuICAgICAgY29uc3QgeCA9IChzdGFydC54ICsgZW5kLngpIC8gMiArIGNhbnZhc0VsZW1lbnRCb3gubGVmdDtcbiAgICAgIGNvbnN0IHkgPSAoc3RhcnQueSArIGVuZC55KSAvIDIgKyBjYW52YXNFbGVtZW50Qm94LnRvcDtcbiAgICAgIGlmICh0aGlzLmluUmVjdEJveCh4LCB5LCByZWN0Qm94KSkge1xuICAgICAgICB0aGlzLmVkZ2VzLnNlbGVjdCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5lZGdlcy5pc1NlbGVjdGVkKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXMuZWRnZXMuZGVzZWxlY3QodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlU2VsZWN0ZWQoKSB7XG4gICAgY29uc3QgZWRnZXNUb0RlbGV0ZSA9IHRoaXMuZWRnZXMuZ2V0U2VsZWN0ZWRFZGdlcygpO1xuICAgIGVkZ2VzVG9EZWxldGUuZm9yRWFjaCgoZWRnZSkgPT4ge1xuICAgICAgdGhpcy5lZGdlcy5kZWxldGUoZWRnZSk7XG4gICAgfSk7XG4gICAgY29uc3Qgbm9kZXNUb0RlbGV0ZSA9IHRoaXMubm9kZXMuZ2V0U2VsZWN0ZWROb2RlcygpO1xuICAgIG5vZGVzVG9EZWxldGUuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgdGhpcy5ub2Rlcy5kZWxldGUobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaXNFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wVGFyZ2V0SWQgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBpc0Ryb3BTb3VyY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcFRhcmdldElkICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0RHJhZ0ltYWdlKCk6IEhUTUxJbWFnZUVsZW1lbnQge1xuICAgIGlmICghdGhpcy5kcmFnSW1hZ2UpIHtcbiAgICAgIHRoaXMuZHJhZ0ltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICB0aGlzLmRyYWdJbWFnZS5zcmMgPSAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3JztcbiAgICAgIHRoaXMuZHJhZ0ltYWdlLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZHJhZ0ltYWdlO1xuICB9XG59XG5cbmludGVyZmFjZSBIdG1sRWxlbWVudE1hcCB7IFtpZDogc3RyaW5nXTogSFRNTEVsZW1lbnQ7IH1cblxuYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RGY01vZGVsPFQ+IHtcblxuICBtb2RlbFNlcnZpY2U6IEZjTW9kZWxTZXJ2aWNlO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihtb2RlbFNlcnZpY2U6IEZjTW9kZWxTZXJ2aWNlKSB7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UgPSBtb2RlbFNlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0KG9iamVjdDogVCkge1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLnNlbGVjdE9iamVjdChvYmplY3QpO1xuICB9XG5cbiAgcHVibGljIGRlc2VsZWN0KG9iamVjdDogVCkge1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLmRlc2VsZWN0T2JqZWN0KG9iamVjdCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0ZWQob2JqZWN0OiBUKSB7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UudG9nZ2xlU2VsZWN0ZWRPYmplY3Qob2JqZWN0KTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGVjdGVkKG9iamVjdDogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGVsU2VydmljZS5pc1NlbGVjdGVkT2JqZWN0KG9iamVjdCk7XG4gIH1cblxuICBwdWJsaWMgaXNFZGl0KG9iamVjdDogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGVsU2VydmljZS5pc0VkaXRPYmplY3Qob2JqZWN0KTtcbiAgfVxufVxuXG5jbGFzcyBDb25uZWN0b3JzTW9kZWwgZXh0ZW5kcyBBYnN0cmFjdEZjTW9kZWw8RmNDb25uZWN0b3I+IHtcblxuICBjb25zdHJ1Y3Rvcihtb2RlbFNlcnZpY2U6IEZjTW9kZWxTZXJ2aWNlKSB7XG4gICAgc3VwZXIobW9kZWxTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25uZWN0b3IoY29ubmVjdG9ySWQ6IHN0cmluZyk6IEZjQ29ubmVjdG9yIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBtb2RlbC5ub2Rlcykge1xuICAgICAgZm9yIChjb25zdCBjb25uZWN0b3Igb2Ygbm9kZS5jb25uZWN0b3JzKSB7XG4gICAgICAgIGlmIChjb25uZWN0b3IuaWQgPT09IGNvbm5lY3RvcklkKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbm5lY3RvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRIdG1sRWxlbWVudChjb25uZWN0b3JJZDogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLm1vZGVsU2VydmljZS5jb25uZWN0b3JzSHRtbEVsZW1lbnRzW2Nvbm5lY3RvcklkXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIdG1sRWxlbWVudChjb25uZWN0b3JJZDogc3RyaW5nLCBlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLmNvbm5lY3RvcnNIdG1sRWxlbWVudHNbY29ubmVjdG9ySWRdID0gZWxlbWVudDtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRDb29yZHMoY29ubmVjdG9ySWQ6IHN0cmluZywgY2VudGVyZWQ/OiBib29sZWFuKTogRmNDb29yZHMge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldEh0bWxFbGVtZW50KGNvbm5lY3RvcklkKTtcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLm1vZGVsU2VydmljZS5jYW52YXNIdG1sRWxlbWVudDtcbiAgICBpZiAoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB1bmRlZmluZWQgfHwgY2FudmFzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge3g6IDAsIHk6IDB9O1xuICAgIH1cbiAgICBjb25zdCBjb25uZWN0b3JFbGVtZW50Qm94ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjYW52YXNFbGVtZW50Qm94ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCBjb29yZHM6IEZjQ29vcmRzID0ge1xuICAgICAgeDogY29ubmVjdG9yRWxlbWVudEJveC5sZWZ0IC0gY2FudmFzRWxlbWVudEJveC5sZWZ0LFxuICAgICAgeTogY29ubmVjdG9yRWxlbWVudEJveC50b3AgLSBjYW52YXNFbGVtZW50Qm94LnRvcFxuICAgIH07XG4gICAgaWYgKGNlbnRlcmVkKSB7XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IE1hdGgucm91bmQoY29vcmRzLnggKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMiksXG4gICAgICAgIHk6IE1hdGgucm91bmQoY29vcmRzLnkgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gY29vcmRzO1xuICB9XG5cbiAgcHVibGljIGdldENvb3Jkcyhjb25uZWN0b3JJZDogc3RyaW5nKTogRmNDb29yZHMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDb29yZHMoY29ubmVjdG9ySWQsIGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDZW50ZXJlZENvb3JkKGNvbm5lY3RvcklkOiBzdHJpbmcpOiBGY0Nvb3JkcyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENvb3Jkcyhjb25uZWN0b3JJZCwgdHJ1ZSk7XG4gIH1cbn1cblxuY2xhc3MgTm9kZXNNb2RlbCBleHRlbmRzIEFic3RyYWN0RmNNb2RlbDxGY05vZGU+IHtcblxuICBjb25zdHJ1Y3Rvcihtb2RlbFNlcnZpY2U6IEZjTW9kZWxTZXJ2aWNlKSB7XG4gICAgc3VwZXIobW9kZWxTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25uZWN0b3JzQnlUeXBlKG5vZGU6IEZjTm9kZSwgdHlwZTogc3RyaW5nKTogQXJyYXk8RmNDb25uZWN0b3I+IHtcbiAgICByZXR1cm4gbm9kZS5jb25uZWN0b3JzLmZpbHRlcigoY29ubmVjdG9yKSA9PiB7XG4gICAgICByZXR1cm4gY29ubmVjdG9yLnR5cGUgPT09IHR5cGU7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hZGRDb25uZWN0b3Iobm9kZTogRmNOb2RlLCBjb25uZWN0b3I6IEZjQ29ubmVjdG9yKSB7XG4gICAgbm9kZS5jb25uZWN0b3JzLnB1c2goY29ubmVjdG9yKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2UubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlTm9kZShub2RlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbm9kZS5jb25uZWN0b3JzLnNwbGljZShub2RlLmNvbm5lY3RvcnMuaW5kZXhPZihjb25uZWN0b3IpLCAxKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUobm9kZTogRmNOb2RlKSB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgdGhpcy5kZXNlbGVjdChub2RlKTtcbiAgICB9XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICBjb25zdCBpbmRleCA9IG1vZGVsLm5vZGVzLmluZGV4T2Yobm9kZSk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bhc3NlZCB1bmRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJpZWQgdG8gZGVsZXRlIG5vdCBleGlzdGluZyBub2RlJyk7XG4gICAgfVxuICAgIGNvbnN0IGNvbm5lY3RvcklkcyA9IHRoaXMuZ2V0Q29ubmVjdG9ySWRzKG5vZGUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kZWwuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBtb2RlbC5lZGdlc1tpXTtcbiAgICAgIGlmIChjb25uZWN0b3JJZHMuaW5kZXhPZihlZGdlLnNvdXJjZSkgIT09IC0xIHx8IGNvbm5lY3Rvcklkcy5pbmRleE9mKGVkZ2UuZGVzdGluYXRpb24pICE9PSAtMSkge1xuICAgICAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5kZWxldGUoZWRnZSk7XG4gICAgICAgIGktLTtcbiAgICAgIH1cbiAgICB9XG4gICAgbW9kZWwubm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5ub3RpZnlNb2RlbENoYW5nZWQoKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5ub2RlUmVtb3ZlZENhbGxiYWNrKG5vZGUpO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkTm9kZXMoKTogQXJyYXk8RmNOb2RlPiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICByZXR1cm4gbW9kZWwubm9kZXMuZmlsdGVyKChub2RlKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXMuaXNTZWxlY3RlZChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDbGlja2VkKG5vZGU6IEZjTm9kZSwgY3RybEtleT86IGJvb2xlYW4pIHtcbiAgICBpZiAoY3RybEtleSkge1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXMudG9nZ2xlU2VsZWN0ZWQobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLmRlc2VsZWN0QWxsKCk7XG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5ub2Rlcy5zZWxlY3Qobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYWRkTm9kZShub2RlOiBGY05vZGUpIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsO1xuICAgIHRyeSB7XG4gICAgICBtb2RlbC5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2UubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlTm9kZXMobW9kZWwubm9kZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBtb2RlbC5ub2Rlcy5zcGxpY2UobW9kZWwubm9kZXMuaW5kZXhPZihub2RlKSwgMSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29ubmVjdG9ySWRzKG5vZGU6IEZjTm9kZSk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBub2RlLmNvbm5lY3RvcnMubWFwKChjb25uZWN0b3IpID0+IHtcbiAgICAgIHJldHVybiBjb25uZWN0b3IuaWQ7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZUJ5Q29ubmVjdG9ySWQoY29ubmVjdG9ySWQ6IHN0cmluZyk6IEZjTm9kZSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbW9kZWwubm9kZXMpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3RvcklkcyA9IHRoaXMuZ2V0Q29ubmVjdG9ySWRzKG5vZGUpO1xuICAgICAgaWYgKGNvbm5lY3Rvcklkcy5pbmRleE9mKGNvbm5lY3RvcklkKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRIdG1sRWxlbWVudChub2RlSWQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXNIdG1sRWxlbWVudHNbbm9kZUlkXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIdG1sRWxlbWVudChub2RlSWQ6IHN0cmluZywgZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5ub2Rlc0h0bWxFbGVtZW50c1tub2RlSWRdID0gZWxlbWVudDtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxufVxuXG5jbGFzcyBFZGdlc01vZGVsIGV4dGVuZHMgQWJzdHJhY3RGY01vZGVsPEZjRWRnZT4ge1xuXG4gIGNvbnN0cnVjdG9yKG1vZGVsU2VydmljZTogRmNNb2RlbFNlcnZpY2UpIHtcbiAgICBzdXBlcihtb2RlbFNlcnZpY2UpO1xuICB9XG5cbiAgcHVibGljIHJlYWR5KGVkZ2U6IEZjRWRnZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMubW9kZWxTZXJ2aWNlLmNvbm5lY3RvcnMuZ2V0SHRtbEVsZW1lbnQoZWRnZS5zb3VyY2UpO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gdGhpcy5tb2RlbFNlcnZpY2UuY29ubmVjdG9ycy5nZXRIdG1sRWxlbWVudChlZGdlLmRlc3RpbmF0aW9uKTtcbiAgICByZXR1cm4gc291cmNlICE9PSB1bmRlZmluZWQgJiYgZGVzdGluYXRpb24gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzb3VyY2VDb29yZChlZGdlOiBGY0VkZ2UpOiBGY0Nvb3JkcyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxTZXJ2aWNlLmNvbm5lY3RvcnMuZ2V0Q2VudGVyZWRDb29yZChlZGdlLnNvdXJjZSk7XG4gIH1cblxuICBwdWJsaWMgZGVzdENvb3JkKGVkZ2U6IEZjRWRnZSk6IEZjQ29vcmRzIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFNlcnZpY2UuY29ubmVjdG9ycy5nZXRDZW50ZXJlZENvb3JkKGVkZ2UuZGVzdGluYXRpb24pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZShlZGdlOiBGY0VkZ2UpIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsO1xuICAgIGNvbnN0IGluZGV4ID0gbW9kZWwuZWRnZXMuaW5kZXhPZihlZGdlKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyaWVkIHRvIGRlbGV0ZSBub3QgZXhpc3RpbmcgZWRnZScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKGVkZ2UpKSB7XG4gICAgICB0aGlzLmRlc2VsZWN0KGVkZ2UpO1xuICAgIH1cbiAgICBtb2RlbC5lZGdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLm5vdGlmeU1vZGVsQ2hhbmdlZCgpO1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLmVkZ2VSZW1vdmVkQ2FsbGJhY2soZWRnZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRFZGdlcygpOiBBcnJheTxGY0VkZ2U+IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxTZXJ2aWNlLm1vZGVsO1xuICAgIHJldHVybiBtb2RlbC5lZGdlcy5maWx0ZXIoKGVkZ2UpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5pc1NlbGVjdGVkKGVkZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUVkZ2VNb3VzZUNsaWNrKGVkZ2U6IEZjRWRnZSwgY3RybEtleT86IGJvb2xlYW4pIHtcbiAgICBpZiAoY3RybEtleSkge1xuICAgICAgdGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMudG9nZ2xlU2VsZWN0ZWQoZWRnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLmRlc2VsZWN0QWxsKCk7XG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5zZWxlY3QoZWRnZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHB1dEVkZ2UoZWRnZTogRmNFZGdlKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsU2VydmljZS5tb2RlbDtcbiAgICBtb2RlbC5lZGdlcy5wdXNoKGVkZ2UpO1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLm5vdGlmeU1vZGVsQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHVibGljIF9hZGRFZGdlKGV2ZW50OiBFdmVudCwgc291cmNlQ29ubmVjdG9yOiBGY0Nvbm5lY3RvciwgZGVzdENvbm5lY3RvcjogRmNDb25uZWN0b3IsIGxhYmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5tb2RlbFZhbGlkYXRpb24udmFsaWRhdGVDb25uZWN0b3Ioc291cmNlQ29ubmVjdG9yKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5tb2RlbFZhbGlkYXRpb24udmFsaWRhdGVDb25uZWN0b3IoZGVzdENvbm5lY3Rvcik7XG4gICAgY29uc3QgZWRnZTogRmNFZGdlID0ge307XG4gICAgZWRnZS5zb3VyY2UgPSBzb3VyY2VDb25uZWN0b3IuaWQ7XG4gICAgZWRnZS5kZXN0aW5hdGlvbiA9IGRlc3RDb25uZWN0b3IuaWQ7XG4gICAgZWRnZS5sYWJlbCA9IGxhYmVsO1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbFNlcnZpY2UubW9kZWw7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UubW9kZWxWYWxpZGF0aW9uLnZhbGlkYXRlRWRnZXMobW9kZWwuZWRnZXMuY29uY2F0KFtlZGdlXSksIG1vZGVsLm5vZGVzKTtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5jcmVhdGVFZGdlKGV2ZW50LCBlZGdlKS5zdWJzY3JpYmUoXG4gICAgICAoY3JlYXRlZCkgPT4ge1xuICAgICAgICBtb2RlbC5lZGdlcy5wdXNoKGNyZWF0ZWQpO1xuICAgICAgICB0aGlzLm1vZGVsU2VydmljZS5ub3RpZnlNb2RlbENoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2UuZWRnZUFkZGVkQ2FsbGJhY2soY3JlYXRlZCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/ngx-flowchart/esm5/lib/ngx-flowchart.component.js b/dist/ngx-flowchart/esm5/lib/ngx-flowchart.component.js index 916bb28..ae4a496 100644 --- a/dist/ngx-flowchart/esm5/lib/ngx-flowchart.component.js +++ b/dist/ngx-flowchart/esm5/lib/ngx-flowchart.component.js @@ -13,8 +13,11 @@ import { FcEdgeDraggingService } from './edge-dragging.service'; import { FcMouseOverService } from './mouseover.service'; import { FcRectangleSelectService } from './rectangleselect.service'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; +import { Subject } from 'rxjs'; +import { debounceTime } from 'rxjs/operators'; var NgxFlowchartComponent = /** @class */ (function () { function NgxFlowchartComponent(elementRef, differs, modelValidation, edgeDrawingService, cd, zone) { + var _this = this; this.elementRef = elementRef; this.differs = differs; this.modelValidation = modelValidation; @@ -40,8 +43,15 @@ var NgxFlowchartComponent = /** @class */ (function () { function (index, item) { return item; })); + this.detectChangesSubject = new Subject(); this.arrowDefId = 'arrow-' + Math.random(); this.arrowDefIdSelected = this.arrowDefId + '-selected'; + this.detectChangesSubject + .pipe(debounceTime(50)) + .subscribe((/** + * @return {?} + */ + function () { return _this.cd.detectChanges(); })); } Object.defineProperty(NgxFlowchartComponent.prototype, "canvasClass", { get: /** @@ -107,7 +117,7 @@ var NgxFlowchartComponent = /** @class */ (function () { this.userNodeCallbacks = this.userCallbacks.nodeCallbacks; /** @type {?} */ var element = $(this.elementRef.nativeElement); - this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.cd, this.selectedObjects, this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved, this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg')); + this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.detectChangesSubject, this.selectedObjects, this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved, this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg')); if (this.dropTargetId) { this.modelService.dropTargetId = this.dropTargetId; } @@ -191,7 +201,7 @@ var NgxFlowchartComponent = /** @class */ (function () { this.adjustCanvasSize(this.fitModelSizeByDefault); } if (nodesChanged_1 || edgesChanged_1) { - this.cd.detectChanges(); + this.detectChangesSubject.next(); } } }; @@ -525,6 +535,11 @@ if (false) { * @private */ NgxFlowchartComponent.prototype.edgesDiffer; + /** + * @type {?} + * @private + */ + NgxFlowchartComponent.prototype.detectChangesSubject; /** * @type {?} * @private @@ -553,4 +568,4 @@ if (false) { */ NgxFlowchartComponent.prototype.zone; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZsb3djaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZmxvd2NoYXJ0LyIsInNvdXJjZXMiOlsibGliL25neC1mbG93Y2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUMxQyxTQUFTLEVBRVQsVUFBVSxFQUFFLFlBQVksRUFDeEIsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsZUFBZSxFQUNmLE1BQU0sRUFDRSxNQUFNLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QyxrQkFBa0IsRUFBb0MsTUFBTSx3QkFBd0IsQ0FBQztBQUNwSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQ7SUEyRUUsK0JBQW9CLFVBQW1DLEVBQ25DLE9BQXdCLEVBQ3hCLGVBQXlDLEVBQzFDLGtCQUF3QyxFQUN2QyxFQUFxQixFQUNyQixJQUFZO1FBTFosZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFDeEIsb0JBQWUsR0FBZixlQUFlLENBQTBCO1FBQzFDLHVCQUFrQixHQUFsQixrQkFBa0Is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QUs7NEJBR0wsS0FBSzs2QkFHTCxLQUFLOytCQUdMLEtBQUs7K0JBR0wsTUFBTTt3Q0FPTixLQUFLOzJCQTRNTCxZQUFZLFNBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO3VCQU1uQyxZQUFZLFNBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDOzRCQVcvQixZQUFZLFNBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOzRCQUtwQyxZQUFZLFNBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOzBCQUtwQyxZQUFZLFNBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDOztJQUtyQyw0QkFBQztDQUFBLEFBM1JELElBMlJDO1NBclJZLHFCQUFxQjs7O0lBT2hDLHNDQUNlOztJQUVmLGdEQUN1Qjs7SUFFdkIsMENBQ2tCOztJQUVsQiw4Q0FDNkI7O0lBRTdCLGdEQUN5Qjs7SUFFekIsOENBQ3NCOztJQUV0QiwwQ0FDa0I7O0lBRWxCLDJDQUNtQjs7SUFFbkIsNkNBQ3FCOztJQUVyQiw2Q0FDa0M7Ozs7O0lBRWxDLDJEQUEwQzs7SUFTMUMsMENBQXVCOztJQUV2QixrREFBcUM7O0lBRXJDLDZDQUE2Qjs7SUFDN0Isb0RBQTJDOztJQUMzQyxvREFBMkM7O0lBQzNDLGlEQUFxQzs7SUFDckMsdURBQWlEOztJQUVqRCwyQ0FBbUI7O0lBQ25CLG1EQUEyQjs7SUFFM0IsbURBQXdDOzs7OztJQUV4Qyw0Q0FFRzs7Ozs7SUFFSCw0Q0FFRzs7Ozs7SUFFUywyQ0FBMkM7Ozs7O0lBQzNDLHdDQUFnQzs7Ozs7SUFDaEMsZ0RBQWlEOztJQUNqRCxtREFBK0M7Ozs7O0lBQy9DLG1DQUE2Qjs7Ozs7SUFDN0IscUNBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIEl0ZXJhYmxlRGlmZmVyLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIE5nWm9uZSxcbiAgT25Jbml0LCBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGY0NhbGxiYWNrcywgRmNFZGdlLCBGY01vZGVsLCBGY05vZGUsIEZsb3djaGFydENvbnN0YW50cywgVXNlckNhbGxiYWNrcywgVXNlck5vZGVDYWxsYmFja3MgfSBmcm9tICcuL25neC1mbG93Y2hhcnQubW9kZWxzJztcbmltcG9ydCB7IEZjTW9kZWxTZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbC5zZXJ2aWNlJztcbmltcG9ydCB7IEZjTW9kZWxWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vbW9kZWx2YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmNOb2RlRHJhZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi9ub2RlLWRyYWdnaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmNFZGdlRHJhd2luZ1NlcnZpY2UgfSBmcm9tICcuL2VkZ2UtZHJhd2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IEZjRWRnZURyYWdnaW5nU2VydmljZSB9IGZyb20gJy4vZWRnZS1kcmFnZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IEZjTW91c2VPdmVyU2VydmljZSB9IGZyb20gJy4vbW91c2VvdmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmNSZWN0YW5nbGVTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi9yZWN0YW5nbGVzZWxlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmYy1jYW52YXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LWZsb3djaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25neC1mbG93Y2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTmd4Rmxvd2NoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrIHtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuY2xhc3MnKVxuICBnZXQgY2FudmFzQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRmxvd2NoYXJ0Q29uc3RhbnRzLmNhbnZhc0NsYXNzO1xuICB9XG5cbiAgQElucHV0KClcbiAgbW9kZWw6IEZjTW9kZWw7XG5cbiAgQElucHV0KClcbiAgc2VsZWN0ZWRPYmplY3RzOiBhbnlbXTtcblxuICBASW5wdXQoKVxuICBlZGdlU3R5bGU6IHN0cmluZztcblxuICBASW5wdXQoKVxuICB1c2VyQ2FsbGJhY2tzOiBVc2VyQ2FsbGJhY2tzO1xuXG4gIEBJbnB1dCgpXG4gIGF1dG9tYXRpY1Jlc2l6ZTogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBkcmFnQW5pbWF0aW9uOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbm9kZVdpZHRoOiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgbm9kZUhlaWdodDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIGRyb3BUYXJnZXRJZDogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKVxuICBtb2RlbENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBmaXRNb2RlbFNpemVCeURlZmF1bHRWYWx1ZSA9IHRydWU7XG4gIGdldCBmaXRNb2RlbFNpemVCeURlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZml0TW9kZWxTaXplQnlEZWZhdWx0VmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGZpdE1vZGVsU2l6ZUJ5RGVmYXVsdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZml0TW9kZWxTaXplQnlEZWZhdWx0VmFsdWUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgY2FsbGJhY2tzOiBGY0NhbGxiYWNrcztcblxuICB1c2VyTm9kZUNhbGxiYWNrczogVXNlck5vZGVDYWxsYmFja3M7XG5cbiAgbW9kZWxTZXJ2aWNlOiBGY01vZGVsU2VydmljZTtcbiAgbm9kZURyYWdnaW5nU2VydmljZTogRmNOb2RlRHJhZ2dpbmdTZXJ2aWNlO1xuICBlZGdlRHJhZ2dpbmdTZXJ2aWNlOiBGY0VkZ2VEcmFnZ2luZ1NlcnZpY2U7XG4gIG1vdXNlb3ZlclNlcnZpY2U6IEZjTW91c2VPdmVyU2VydmljZTtcbiAgcmVjdGFuZ2xlU2VsZWN0U2VydmljZTogRmNSZWN0YW5nbGVTZWxlY3RTZXJ2aWNlO1xuXG4gIGFycm93RGVmSWQ6IHN0cmluZztcbiAgYXJyb3dEZWZJZFNlbGVjdGVkOiBzdHJpbmc7XG5cbiAgZmxvd2NoYXJ0Q29uc3RhbnRzID0gRmxvd2NoYXJ0Q29uc3RhbnRzO1xuXG4gIHByaXZhdGUgbm9kZXNEaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPEZjTm9kZT4gPSB0aGlzLmRpZmZlcnMuZmluZChbXSkuY3JlYXRlPEZjTm9kZT4oKGluZGV4LCBpdGVtKSA9PiB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH0pO1xuXG4gIHByaXZhdGUgZWRnZXNEaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPEZjRWRnZT4gPSB0aGlzLmRpZmZlcnMuZmluZChbXSkuY3JlYXRlPEZjRWRnZT4oKGluZGV4LCBpdGVtKSA9PiB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgICAgICAgIHByaXZhdGUgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGVsVmFsaWRhdGlvbjogRmNNb2RlbFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwdWJsaWMgZWRnZURyYXdpbmdTZXJ2aWNlOiBGY0VkZ2VEcmF3aW5nU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgem9uZTogTmdab25lKSB7XG4gICAgdGhpcy5hcnJvd0RlZklkID0gJ2Fycm93LScgKyBNYXRoLnJhbmRvbSgpO1xuICAgIHRoaXMuYXJyb3dEZWZJZFNlbGVjdGVkID0gdGhpcy5hcnJvd0RlZklkICsgJy1zZWxlY3RlZCc7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuZHJvcFRhcmdldElkICYmIHRoaXMuZWRnZVN0eWxlICE9PSBGbG93Y2hhcnRDb25zdGFudHMuY3VydmVkU3R5bGUgJiYgdGhpcy5lZGdlU3R5bGUgIT09IEZsb3djaGFydENvbnN0YW50cy5saW5lU3R5bGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZWRnZVN0eWxlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuICAgIHRoaXMubm9kZUhlaWdodCA9IHRoaXMubm9kZUhlaWdodCB8fCAyMDA7XG4gICAgdGhpcy5ub2RlV2lkdGggPSB0aGlzLm5vZGVXaWR0aCB8fCAyMDA7XG4gICAgdGhpcy5kcmFnQW5pbWF0aW9uID0gdGhpcy5kcmFnQW5pbWF0aW9uIHx8IEZsb3djaGFydENvbnN0YW50cy5kcmFnQW5pbWF0aW9uUmVwYWludDtcbiAgICB0aGlzLnVzZXJDYWxsYmFja3MgPSB0aGlzLnVzZXJDYWxsYmFja3MgfHwge307XG4gICAgdGhpcy5hdXRvbWF0aWNSZXNpemUgPSB0aGlzLmF1dG9tYXRpY1Jlc2l6ZSB8fCBmYWxzZTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudXNlckNhbGxiYWNrcykpIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy51c2VyQ2FsbGJhY2tzW2tleV07XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nICYmIGtleSAhPT0gJ25vZGVDYWxsYmFja3MnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQWxsIGNhbGxiYWNrcyBzaG91bGQgYmUgZnVuY3Rpb25zLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXNlck5vZGVDYWxsYmFja3MgPSB0aGlzLnVzZXJDYWxsYmFja3Mubm9kZUNhbGxiYWNrcztcblxuICAgIGNvbnN0IGVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIHRoaXMubW9kZWxTZXJ2aWNlID0gbmV3IEZjTW9kZWxTZXJ2aWNlKHRoaXMubW9kZWxWYWxpZGF0aW9uLCB0aGlzLm1vZGVsLCB0aGlzLm1vZGVsQ2hhbmdlZCwgdGhpcy5jZCwgdGhpcy5zZWxlY3RlZE9iamVjdHMsXG4gICAgICB0aGlzLnVzZXJDYWxsYmFja3MuZHJvcE5vZGUsIHRoaXMudXNlckNhbGxiYWNrcy5jcmVhdGVFZGdlLCB0aGlzLnVzZXJDYWxsYmFja3MuZWRnZUFkZGVkLCB0aGlzLnVzZXJDYWxsYmFja3Mubm9kZVJlbW92ZWQsXG4gICAgICB0aGlzLnVzZXJDYWxsYmFja3MuZWRnZVJlbW92ZWQsIGVsZW1lbnRbMF0sIGVsZW1lbnRbMF0ucXVlcnlTZWxlY3Rvcignc3ZnJykpO1xuXG4gICAgaWYgKHRoaXMuZHJvcFRhcmdldElkKSB7XG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5kcm9wVGFyZ2V0SWQgPSB0aGlzLmRyb3BUYXJnZXRJZDtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBseUZ1bmN0aW9uID0gdGhpcy56b25lLnJ1bi5iaW5kKHRoaXMuem9uZSk7XG5cbiAgICB0aGlzLm5vZGVEcmFnZ2luZ1NlcnZpY2UgPSBuZXcgRmNOb2RlRHJhZ2dpbmdTZXJ2aWNlKHRoaXMubW9kZWxTZXJ2aWNlLCBhcHBseUZ1bmN0aW9uLFxuICAgICAgICAgIHRoaXMuYXV0b21hdGljUmVzaXplLCB0aGlzLmRyYWdBbmltYXRpb24pO1xuXG4gICAgdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlID0gbmV3IEZjRWRnZURyYWdnaW5nU2VydmljZSh0aGlzLm1vZGVsVmFsaWRhdGlvbiwgdGhpcy5lZGdlRHJhd2luZ1NlcnZpY2UsIHRoaXMubW9kZWxTZXJ2aWNlLFxuICAgICAgdGhpcy5tb2RlbCwgdGhpcy51c2VyQ2FsbGJhY2tzLmlzVmFsaWRFZGdlIHx8IG51bGwsIGFwcGx5RnVuY3Rpb24sXG4gICAgICB0aGlzLmRyYWdBbmltYXRpb24sIHRoaXMuZWRnZVN0eWxlKTtcblxuICAgIHRoaXMubW91c2VvdmVyU2VydmljZSA9IG5ldyBGY01vdXNlT3ZlclNlcnZpY2UoYXBwbHlGdW5jdGlvbik7XG5cbiAgICB0aGlzLnJlY3RhbmdsZVNlbGVjdFNlcnZpY2UgPSBuZXcgRmNSZWN0YW5nbGVTZWxlY3RTZXJ2aWNlKHRoaXMubW9kZWxTZXJ2aWNlLFxuICAgICAgZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0LXJlY3RhbmdsZScpLCBhcHBseUZ1bmN0aW9uKTtcblxuICAgIHRoaXMuY2FsbGJhY2tzID0ge1xuICAgICAgbm9kZURyYWdzdGFydDogdGhpcy5ub2RlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdzdGFydC5iaW5kKHRoaXMubm9kZURyYWdnaW5nU2VydmljZSksXG4gICAgICBub2RlRHJhZ2VuZDogdGhpcy5ub2RlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdlbmQuYmluZCh0aGlzLm5vZGVEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgZWRnZURyYWdzdGFydDogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdzdGFydC5iaW5kKHRoaXMuZWRnZURyYWdnaW5nU2VydmljZSksXG4gICAgICBlZGdlRHJhZ2VuZDogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdlbmQuYmluZCh0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgZWRnZURyb3A6IHRoaXMuZWRnZURyYWdnaW5nU2VydmljZS5kcm9wLmJpbmQodGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIGVkZ2VEcmFnb3ZlckNvbm5lY3RvcjogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdvdmVyQ29ubmVjdG9yLmJpbmQodGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIGVkZ2VEcmFnb3Zlck1hZ25ldDogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdvdmVyTWFnbmV0LmJpbmQodGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIGVkZ2VEcmFnbGVhdmVNYWduZXQ6IHRoaXMuZWRnZURyYWdnaW5nU2VydmljZS5kcmFnbGVhdmVNYWduZXQuYmluZCh0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgbm9kZU1vdXNlT3ZlcjogdGhpcy5tb3VzZW92ZXJTZXJ2aWNlLm5vZGVNb3VzZU92ZXIuYmluZCh0aGlzLm1vdXNlb3ZlclNlcnZpY2UpLFxuICAgICAgbm9kZU1vdXNlT3V0OiB0aGlzLm1vdXNlb3ZlclNlcnZpY2Uubm9kZU1vdXNlT3V0LmJpbmQodGhpcy5tb3VzZW92ZXJTZXJ2aWNlKSxcbiAgICAgIGNvbm5lY3Rvck1vdXNlRW50ZXI6IHRoaXMubW91c2VvdmVyU2VydmljZS5jb25uZWN0b3JNb3VzZUVudGVyLmJpbmQodGhpcy5tb3VzZW92ZXJTZXJ2aWNlKSxcbiAgICAgIGNvbm5lY3Rvck1vdXNlTGVhdmU6IHRoaXMubW91c2VvdmVyU2VydmljZS5jb25uZWN0b3JNb3VzZUxlYXZlLmJpbmQodGhpcy5tb3VzZW92ZXJTZXJ2aWNlKSxcbiAgICAgIG5vZGVDbGlja2VkOiAoZXZlbnQsIG5vZGUpID0+IHtcbiAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2Uubm9kZXMuaGFuZGxlQ2xpY2tlZChub2RlLCBldmVudC5jdHJsS2V5KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmFkanVzdENhbnZhc1NpemUodGhpcy5maXRNb2RlbFNpemVCeURlZmF1bHQpO1xuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICBjb25zdCBub2Rlc0NoYW5nZSA9IHRoaXMubm9kZXNEaWZmZXIuZGlmZih0aGlzLm1vZGVsLm5vZGVzKTtcbiAgICAgIGNvbnN0IGVkZ2VzQ2hhbmdlID0gdGhpcy5lZGdlc0RpZmZlci5kaWZmKHRoaXMubW9kZWwuZWRnZXMpO1xuICAgICAgbGV0IG5vZGVzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgbGV0IGVkZ2VzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgaWYgKG5vZGVzQ2hhbmdlICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGVzQ2hhbmdlLmZvckVhY2hBZGRlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIG5vZGVzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBub2Rlc0NoYW5nZS5mb3JFYWNoUmVtb3ZlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIG5vZGVzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGVkZ2VzQ2hhbmdlICE9PSBudWxsKSB7XG4gICAgICAgIGVkZ2VzQ2hhbmdlLmZvckVhY2hBZGRlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIGVkZ2VzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBlZGdlc0NoYW5nZS5mb3JFYWNoUmVtb3ZlZEl0ZW0oKCkgPT4ge1xuICAgICAgICAgIGVkZ2VzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGVzQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLmFkanVzdENhbnZhc1NpemUodGhpcy5maXRNb2RlbFNpemVCeURlZmF1bHQpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGVzQ2hhbmdlZCB8fCBlZGdlc0NoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RWRnZURBdHRyaWJ1dGUoZWRnZTogRmNFZGdlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlRHJhd2luZ1NlcnZpY2UuZ2V0RWRnZURBdHRyaWJ1dGUodGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuc291cmNlQ29vcmQoZWRnZSksXG4gICAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5kZXN0Q29vcmQoZWRnZSksIHRoaXMuZWRnZVN0eWxlKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGp1c3RDYW52YXNTaXplKGZpdD86IGJvb2xlYW4pIHtcbiAgICBsZXQgbWF4WCA9IDA7XG4gICAgbGV0IG1heFkgPSAwO1xuICAgIGNvbnN0IGVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLm1vZGVsLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIG1heFggPSBNYXRoLm1heChub2RlLnggKyB0aGlzLm5vZGVXaWR0aCwgbWF4WCk7XG4gICAgICBtYXhZID0gTWF0aC5tYXgobm9kZS55ICsgdGhpcy5ub2RlSGVpZ2h0LCBtYXhZKTtcbiAgICB9KTtcbiAgICBsZXQgd2lkdGg7XG4gICAgbGV0IGhlaWdodDtcbiAgICBpZiAoZml0KSB7XG4gICAgICB3aWR0aCA9IG1heFg7XG4gICAgICBoZWlnaHQgPSBtYXhZO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWF4KG1heFgsIGVsZW1lbnQucHJvcCgnb2Zmc2V0V2lkdGgnKSk7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1heChtYXhZLCBlbGVtZW50LnByb3AoJ29mZnNldEhlaWdodCcpKTtcbiAgICB9XG4gICAgZWxlbWVudC5jc3MoJ3dpZHRoJywgd2lkdGggKyAncHgnKTtcbiAgICBlbGVtZW50LmNzcygnaGVpZ2h0JywgaGVpZ2h0ICsgJ3B4Jyk7XG4gIH1cblxuICBjYW52YXNDbGljayhldmVudDogTW91c2VFdmVudCkge31cblxuICBlZGdlTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGVkZ2VDbGljayhldmVudDogTW91c2VFdmVudCwgZWRnZTogRmNFZGdlKSB7XG4gICAgdGhpcy5tb2RlbFNlcnZpY2UuZWRnZXMuaGFuZGxlRWRnZU1vdXNlQ2xpY2soZWRnZSwgZXZlbnQuY3RybEtleSk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGVkZ2VSZW1vdmUoZXZlbnQ6IEV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5kZWxldGUoZWRnZSk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGVkZ2VFZGl0KGV2ZW50OiBFdmVudCwgZWRnZTogRmNFZGdlKSB7XG4gICAgaWYgKHRoaXMudXNlckNhbGxiYWNrcy5lZGdlRWRpdCkge1xuICAgICAgdGhpcy51c2VyQ2FsbGJhY2tzLmVkZ2VFZGl0KGV2ZW50LCBlZGdlKTtcbiAgICB9XG4gIH1cblxuICBlZGdlRG91YmxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGVkZ2U6IEZjRWRnZSkge1xuICAgIGlmICh0aGlzLnVzZXJDYWxsYmFja3MuZWRnZURvdWJsZUNsaWNrKSB7XG4gICAgICB0aGlzLnVzZXJDYWxsYmFja3MuZWRnZURvdWJsZUNsaWNrKGV2ZW50LCBlZGdlKTtcbiAgICB9XG4gIH1cblxuICBlZGdlTW91c2VPdmVyKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICBpZiAodGhpcy51c2VyQ2FsbGJhY2tzLmVkZ2VNb3VzZU92ZXIpIHtcbiAgICAgIHRoaXMudXNlckNhbGxiYWNrcy5lZGdlTW91c2VPdmVyKGV2ZW50LCBlZGdlKTtcbiAgICB9XG4gIH1cblxuICBlZGdlTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCwgZWRnZTogRmNFZGdlKSB7XG4gICAgdGhpcy5tb3VzZW92ZXJTZXJ2aWNlLmVkZ2VNb3VzZUVudGVyKGV2ZW50LCBlZGdlKTtcbiAgfVxuXG4gIGVkZ2VNb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICB0aGlzLm1vdXNlb3ZlclNlcnZpY2UuZWRnZU1vdXNlTGVhdmUoZXZlbnQsIGVkZ2UpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxuICBkcmFnb3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgdGhpcy5ub2RlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdvdmVyKGV2ZW50KTtcbiAgICB0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UuZHJhZ292ZXIoZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXG4gIGRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMubm9kZURyYWdnaW5nU2VydmljZS5kcm9wKGV2ZW50KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG1vdXNlZG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMucmVjdGFuZ2xlU2VsZWN0U2VydmljZS5tb3VzZWRvd24oZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcbiAgbW91c2Vtb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5yZWN0YW5nbGVTZWxlY3RTZXJ2aWNlLm1vdXNlbW92ZShldmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJywgWyckZXZlbnQnXSlcbiAgbW91c2V1cChldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMucmVjdGFuZ2xlU2VsZWN0U2VydmljZS5tb3VzZXVwKGV2ZW50KTtcbiAgfVxuXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZsb3djaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZmxvd2NoYXJ0LyIsInNvdXJjZXMiOlsibGliL25neC1mbG93Y2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUMxQyxTQUFTLEVBRVQsVUFBVSxFQUFFLFlBQVksRUFDeEIsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsZUFBZSxFQUNmLE1BQU0sRUFDRSxNQUFNLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QyxrQkFBa0IsRUFBb0MsTUFBTSx3QkFBd0IsQ0FBQztBQUNwSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUM7SUE2RUUsK0JBQW9CLFVBQW1DLEVBQ25DLE9BQXdCLEVBQ3hCLGVBQXlDLEVBQzFDLGtCQUF3QyxFQUN2QyxFQUFxQixFQUNyQixJQUFZO1FBTGhDLGlCQVdDO1FBWG1CLGVBQVUs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LDRDQUVHOzs7OztJQUVILDRDQUVHOzs7OztJQUVILHFEQUEyRDs7Ozs7SUFFL0MsMkNBQTJDOzs7OztJQUMzQyx3Q0FBZ0M7Ozs7O0lBQ2hDLGdEQUFpRDs7SUFDakQsbURBQStDOzs7OztJQUMvQyxtQ0FBNkI7Ozs7O0lBQzdCLHFDQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBOZ1pvbmUsXG4gIE9uSW5pdCwgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmNDYWxsYmFja3MsIEZjRWRnZSwgRmNNb2RlbCwgRmNOb2RlLCBGbG93Y2hhcnRDb25zdGFudHMsIFVzZXJDYWxsYmFja3MsIFVzZXJOb2RlQ2FsbGJhY2tzIH0gZnJvbSAnLi9uZ3gtZmxvd2NoYXJ0Lm1vZGVscyc7XG5pbXBvcnQgeyBGY01vZGVsU2VydmljZSB9IGZyb20gJy4vbW9kZWwuc2VydmljZSc7XG5pbXBvcnQgeyBGY01vZGVsVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuL21vZGVsdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZjTm9kZURyYWdnaW5nU2VydmljZSB9IGZyb20gJy4vbm9kZS1kcmFnZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IEZjRWRnZURyYXdpbmdTZXJ2aWNlIH0gZnJvbSAnLi9lZGdlLWRyYXdpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBGY0VkZ2VEcmFnZ2luZ1NlcnZpY2UgfSBmcm9tICcuL2VkZ2UtZHJhZ2dpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBGY01vdXNlT3ZlclNlcnZpY2UgfSBmcm9tICcuL21vdXNlb3Zlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZjUmVjdGFuZ2xlU2VsZWN0U2VydmljZSB9IGZyb20gJy4vcmVjdGFuZ2xlc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZmMtY2FudmFzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25neC1mbG93Y2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uZ3gtZmxvd2NoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5neEZsb3djaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVjayB7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmNsYXNzJylcbiAgZ2V0IGNhbnZhc0NsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZsb3djaGFydENvbnN0YW50cy5jYW52YXNDbGFzcztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIG1vZGVsOiBGY01vZGVsO1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdGVkT2JqZWN0czogYW55W107XG5cbiAgQElucHV0KClcbiAgZWRnZVN0eWxlOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgdXNlckNhbGxiYWNrczogVXNlckNhbGxiYWNrcztcblxuICBASW5wdXQoKVxuICBhdXRvbWF0aWNSZXNpemU6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgZHJhZ0FuaW1hdGlvbjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIG5vZGVXaWR0aDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIG5vZGVIZWlnaHQ6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBkcm9wVGFyZ2V0SWQ6IHN0cmluZztcblxuICBAT3V0cHV0KClcbiAgbW9kZWxDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgZml0TW9kZWxTaXplQnlEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICBnZXQgZml0TW9kZWxTaXplQnlEZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpdE1vZGVsU2l6ZUJ5RGVmYXVsdFZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBmaXRNb2RlbFNpemVCeURlZmF1bHQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZpdE1vZGVsU2l6ZUJ5RGVmYXVsdFZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGNhbGxiYWNrczogRmNDYWxsYmFja3M7XG5cbiAgdXNlck5vZGVDYWxsYmFja3M6IFVzZXJOb2RlQ2FsbGJhY2tzO1xuXG4gIG1vZGVsU2VydmljZTogRmNNb2RlbFNlcnZpY2U7XG4gIG5vZGVEcmFnZ2luZ1NlcnZpY2U6IEZjTm9kZURyYWdnaW5nU2VydmljZTtcbiAgZWRnZURyYWdnaW5nU2VydmljZTogRmNFZGdlRHJhZ2dpbmdTZXJ2aWNlO1xuICBtb3VzZW92ZXJTZXJ2aWNlOiBGY01vdXNlT3ZlclNlcnZpY2U7XG4gIHJlY3RhbmdsZVNlbGVjdFNlcnZpY2U6IEZjUmVjdGFuZ2xlU2VsZWN0U2VydmljZTtcblxuICBhcnJvd0RlZklkOiBzdHJpbmc7XG4gIGFycm93RGVmSWRTZWxlY3RlZDogc3RyaW5nO1xuXG4gIGZsb3djaGFydENvbnN0YW50cyA9IEZsb3djaGFydENvbnN0YW50cztcblxuICBwcml2YXRlIG5vZGVzRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxGY05vZGU+ID0gdGhpcy5kaWZmZXJzLmZpbmQoW10pLmNyZWF0ZTxGY05vZGU+KChpbmRleCwgaXRlbSkgPT4ge1xuICAgIHJldHVybiBpdGVtO1xuICB9KTtcblxuICBwcml2YXRlIGVkZ2VzRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxGY0VkZ2U+ID0gdGhpcy5kaWZmZXJzLmZpbmQoW10pLmNyZWF0ZTxGY0VkZ2U+KChpbmRleCwgaXRlbSkgPT4ge1xuICAgIHJldHVybiBpdGVtO1xuICB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRldGVjdENoYW5nZXNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgICAgICAgIHByaXZhdGUgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGVsVmFsaWRhdGlvbjogRmNNb2RlbFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwdWJsaWMgZWRnZURyYXdpbmdTZXJ2aWNlOiBGY0VkZ2VEcmF3aW5nU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgem9uZTogTmdab25lKSB7XG4gICAgdGhpcy5hcnJvd0RlZklkID0gJ2Fycm93LScgKyBNYXRoLnJhbmRvbSgpO1xuICAgIHRoaXMuYXJyb3dEZWZJZFNlbGVjdGVkID0gdGhpcy5hcnJvd0RlZklkICsgJy1zZWxlY3RlZCc7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCkpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmRyb3BUYXJnZXRJZCAmJiB0aGlzLmVkZ2VTdHlsZSAhPT0gRmxvd2NoYXJ0Q29uc3RhbnRzLmN1cnZlZFN0eWxlICYmIHRoaXMuZWRnZVN0eWxlICE9PSBGbG93Y2hhcnRDb25zdGFudHMubGluZVN0eWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VkZ2VTdHlsZSBub3Qgc3VwcG9ydGVkLicpO1xuICAgIH1cbiAgICB0aGlzLm5vZGVIZWlnaHQgPSB0aGlzLm5vZGVIZWlnaHQgfHwgMjAwO1xuICAgIHRoaXMubm9kZVdpZHRoID0gdGhpcy5ub2RlV2lkdGggfHwgMjAwO1xuICAgIHRoaXMuZHJhZ0FuaW1hdGlvbiA9IHRoaXMuZHJhZ0FuaW1hdGlvbiB8fCBGbG93Y2hhcnRDb25zdGFudHMuZHJhZ0FuaW1hdGlvblJlcGFpbnQ7XG4gICAgdGhpcy51c2VyQ2FsbGJhY2tzID0gdGhpcy51c2VyQ2FsbGJhY2tzIHx8IHt9O1xuICAgIHRoaXMuYXV0b21hdGljUmVzaXplID0gdGhpcy5hdXRvbWF0aWNSZXNpemUgfHwgZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLnVzZXJDYWxsYmFja3MpKSB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMudXNlckNhbGxiYWNrc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJyAmJiBrZXkgIT09ICdub2RlQ2FsbGJhY2tzJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FsbCBjYWxsYmFja3Mgc2hvdWxkIGJlIGZ1bmN0aW9ucy4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVzZXJOb2RlQ2FsbGJhY2tzID0gdGhpcy51c2VyQ2FsbGJhY2tzLm5vZGVDYWxsYmFja3M7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICB0aGlzLm1vZGVsU2VydmljZSA9IG5ldyBGY01vZGVsU2VydmljZSh0aGlzLm1vZGVsVmFsaWRhdGlvbiwgdGhpcy5tb2RlbCwgdGhpcy5tb2RlbENoYW5nZWQsXG4gICAgICB0aGlzLmRldGVjdENoYW5nZXNTdWJqZWN0LCB0aGlzLnNlbGVjdGVkT2JqZWN0cyxcbiAgICAgIHRoaXMudXNlckNhbGxiYWNrcy5kcm9wTm9kZSwgdGhpcy51c2VyQ2FsbGJhY2tzLmNyZWF0ZUVkZ2UsIHRoaXMudXNlckNhbGxiYWNrcy5lZGdlQWRkZWQsIHRoaXMudXNlckNhbGxiYWNrcy5ub2RlUmVtb3ZlZCxcbiAgICAgIHRoaXMudXNlckNhbGxiYWNrcy5lZGdlUmVtb3ZlZCwgZWxlbWVudFswXSwgZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKCdzdmcnKSk7XG5cbiAgICBpZiAodGhpcy5kcm9wVGFyZ2V0SWQpIHtcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLmRyb3BUYXJnZXRJZCA9IHRoaXMuZHJvcFRhcmdldElkO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcGx5RnVuY3Rpb24gPSB0aGlzLnpvbmUucnVuLmJpbmQodGhpcy56b25lKTtcblxuICAgIHRoaXMubm9kZURyYWdnaW5nU2VydmljZSA9IG5ldyBGY05vZGVEcmFnZ2luZ1NlcnZpY2UodGhpcy5tb2RlbFNlcnZpY2UsIGFwcGx5RnVuY3Rpb24sXG4gICAgICAgICAgdGhpcy5hdXRvbWF0aWNSZXNpemUsIHRoaXMuZHJhZ0FuaW1hdGlvbik7XG5cbiAgICB0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UgPSBuZXcgRmNFZGdlRHJhZ2dpbmdTZXJ2aWNlKHRoaXMubW9kZWxWYWxpZGF0aW9uLCB0aGlzLmVkZ2VEcmF3aW5nU2VydmljZSwgdGhpcy5tb2RlbFNlcnZpY2UsXG4gICAgICB0aGlzLm1vZGVsLCB0aGlzLnVzZXJDYWxsYmFja3MuaXNWYWxpZEVkZ2UgfHwgbnVsbCwgYXBwbHlGdW5jdGlvbixcbiAgICAgIHRoaXMuZHJhZ0FuaW1hdGlvbiwgdGhpcy5lZGdlU3R5bGUpO1xuXG4gICAgdGhpcy5tb3VzZW92ZXJTZXJ2aWNlID0gbmV3IEZjTW91c2VPdmVyU2VydmljZShhcHBseUZ1bmN0aW9uKTtcblxuICAgIHRoaXMucmVjdGFuZ2xlU2VsZWN0U2VydmljZSA9IG5ldyBGY1JlY3RhbmdsZVNlbGVjdFNlcnZpY2UodGhpcy5tb2RlbFNlcnZpY2UsXG4gICAgICBlbGVtZW50WzBdLnF1ZXJ5U2VsZWN0b3IoJyNzZWxlY3QtcmVjdGFuZ2xlJyksIGFwcGx5RnVuY3Rpb24pO1xuXG4gICAgdGhpcy5jYWxsYmFja3MgPSB7XG4gICAgICBub2RlRHJhZ3N0YXJ0OiB0aGlzLm5vZGVEcmFnZ2luZ1NlcnZpY2UuZHJhZ3N0YXJ0LmJpbmQodGhpcy5ub2RlRHJhZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIG5vZGVEcmFnZW5kOiB0aGlzLm5vZGVEcmFnZ2luZ1NlcnZpY2UuZHJhZ2VuZC5iaW5kKHRoaXMubm9kZURyYWdnaW5nU2VydmljZSksXG4gICAgICBlZGdlRHJhZ3N0YXJ0OiB0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UuZHJhZ3N0YXJ0LmJpbmQodGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlKSxcbiAgICAgIGVkZ2VEcmFnZW5kOiB0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UuZHJhZ2VuZC5iaW5kKHRoaXMuZWRnZURyYWdnaW5nU2VydmljZSksXG4gICAgICBlZGdlRHJvcDogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyb3AuYmluZCh0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgZWRnZURyYWdvdmVyQ29ubmVjdG9yOiB0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UuZHJhZ292ZXJDb25uZWN0b3IuYmluZCh0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgZWRnZURyYWdvdmVyTWFnbmV0OiB0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UuZHJhZ292ZXJNYWduZXQuYmluZCh0aGlzLmVkZ2VEcmFnZ2luZ1NlcnZpY2UpLFxuICAgICAgZWRnZURyYWdsZWF2ZU1hZ25ldDogdGhpcy5lZGdlRHJhZ2dpbmdTZXJ2aWNlLmRyYWdsZWF2ZU1hZ25ldC5iaW5kKHRoaXMuZWRnZURyYWdnaW5nU2VydmljZSksXG4gICAgICBub2RlTW91c2VPdmVyOiB0aGlzLm1vdXNlb3ZlclNlcnZpY2Uubm9kZU1vdXNlT3Zlci5iaW5kKHRoaXMubW91c2VvdmVyU2VydmljZSksXG4gICAgICBub2RlTW91c2VPdXQ6IHRoaXMubW91c2VvdmVyU2VydmljZS5ub2RlTW91c2VPdXQuYmluZCh0aGlzLm1vdXNlb3ZlclNlcnZpY2UpLFxuICAgICAgY29ubmVjdG9yTW91c2VFbnRlcjogdGhpcy5tb3VzZW92ZXJTZXJ2aWNlLmNvbm5lY3Rvck1vdXNlRW50ZXIuYmluZCh0aGlzLm1vdXNlb3ZlclNlcnZpY2UpLFxuICAgICAgY29ubmVjdG9yTW91c2VMZWF2ZTogdGhpcy5tb3VzZW92ZXJTZXJ2aWNlLmNvbm5lY3Rvck1vdXNlTGVhdmUuYmluZCh0aGlzLm1vdXNlb3ZlclNlcnZpY2UpLFxuICAgICAgbm9kZUNsaWNrZWQ6IChldmVudCwgbm9kZSkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVsU2VydmljZS5ub2Rlcy5oYW5kbGVDbGlja2VkKG5vZGUsIGV2ZW50LmN0cmxLZXkpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuYWRqdXN0Q2FudmFzU2l6ZSh0aGlzLmZpdE1vZGVsU2l6ZUJ5RGVmYXVsdCk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kZWwpIHtcbiAgICAgIGNvbnN0IG5vZGVzQ2hhbmdlID0gdGhpcy5ub2Rlc0RpZmZlci5kaWZmKHRoaXMubW9kZWwubm9kZXMpO1xuICAgICAgY29uc3QgZWRnZXNDaGFuZ2UgPSB0aGlzLmVkZ2VzRGlmZmVyLmRpZmYodGhpcy5tb2RlbC5lZGdlcyk7XG4gICAgICBsZXQgbm9kZXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICBsZXQgZWRnZXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICBpZiAobm9kZXNDaGFuZ2UgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZXNDaGFuZ2UuZm9yRWFjaEFkZGVkSXRlbSgoKSA9PiB7XG4gICAgICAgICAgbm9kZXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIG5vZGVzQ2hhbmdlLmZvckVhY2hSZW1vdmVkSXRlbSgoKSA9PiB7XG4gICAgICAgICAgbm9kZXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZWRnZXNDaGFuZ2UgIT09IG51bGwpIHtcbiAgICAgICAgZWRnZXNDaGFuZ2UuZm9yRWFjaEFkZGVkSXRlbSgoKSA9PiB7XG4gICAgICAgICAgZWRnZXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVkZ2VzQ2hhbmdlLmZvckVhY2hSZW1vdmVkSXRlbSgoKSA9PiB7XG4gICAgICAgICAgZWRnZXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAobm9kZXNDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuYWRqdXN0Q2FudmFzU2l6ZSh0aGlzLmZpdE1vZGVsU2l6ZUJ5RGVmYXVsdCk7XG4gICAgICB9XG4gICAgICBpZiAobm9kZXNDaGFuZ2VkIHx8IGVkZ2VzQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXNTdWJqZWN0Lm5leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRFZGdlREF0dHJpYnV0ZShlZGdlOiBGY0VkZ2UpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkZ2VEcmF3aW5nU2VydmljZS5nZXRFZGdlREF0dHJpYnV0ZSh0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5zb3VyY2VDb29yZChlZGdlKSxcbiAgICAgIHRoaXMubW9kZWxTZXJ2aWNlLmVkZ2VzLmRlc3RDb29yZChlZGdlKSwgdGhpcy5lZGdlU3R5bGUpO1xuICB9XG5cbiAgcHVibGljIGFkanVzdENhbnZhc1NpemUoZml0PzogYm9vbGVhbikge1xuICAgIGxldCBtYXhYID0gMDtcbiAgICBsZXQgbWF4WSA9IDA7XG4gICAgY29uc3QgZWxlbWVudCA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMubW9kZWwubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgbWF4WCA9IE1hdGgubWF4KG5vZGUueCArIHRoaXMubm9kZVdpZHRoLCBtYXhYKTtcbiAgICAgIG1heFkgPSBNYXRoLm1heChub2RlLnkgKyB0aGlzLm5vZGVIZWlnaHQsIG1heFkpO1xuICAgIH0pO1xuICAgIGxldCB3aWR0aDtcbiAgICBsZXQgaGVpZ2h0O1xuICAgIGlmIChmaXQpIHtcbiAgICAgIHdpZHRoID0gbWF4WDtcbiAgICAgIGhlaWdodCA9IG1heFk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gTWF0aC5tYXgobWF4WCwgZWxlbWVudC5wcm9wKCdvZmZzZXRXaWR0aCcpKTtcbiAgICAgIGhlaWdodCA9IE1hdGgubWF4KG1heFksIGVsZW1lbnQucHJvcCgnb2Zmc2V0SGVpZ2h0JykpO1xuICAgIH1cbiAgICBlbGVtZW50LmNzcygnd2lkdGgnLCB3aWR0aCArICdweCcpO1xuICAgIGVsZW1lbnQuY3NzKCdoZWlnaHQnLCBoZWlnaHQgKyAncHgnKTtcbiAgfVxuXG4gIGNhbnZhc0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7fVxuXG4gIGVkZ2VNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIGVkZ2U6IEZjRWRnZSkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgZWRnZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICB0aGlzLm1vZGVsU2VydmljZS5lZGdlcy5oYW5kbGVFZGdlTW91c2VDbGljayhlZGdlLCBldmVudC5jdHJsS2V5KTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgZWRnZVJlbW92ZShldmVudDogRXZlbnQsIGVkZ2U6IEZjRWRnZSkge1xuICAgIHRoaXMubW9kZWxTZXJ2aWNlLmVkZ2VzLmRlbGV0ZShlZGdlKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgZWRnZUVkaXQoZXZlbnQ6IEV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICBpZiAodGhpcy51c2VyQ2FsbGJhY2tzLmVkZ2VFZGl0KSB7XG4gICAgICB0aGlzLnVzZXJDYWxsYmFja3MuZWRnZUVkaXQoZXZlbnQsIGVkZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGVkZ2VEb3VibGVDbGljayhldmVudDogTW91c2VFdmVudCwgZWRnZTogRmNFZGdlKSB7XG4gICAgaWYgKHRoaXMudXNlckNhbGxiYWNrcy5lZGdlRG91YmxlQ2xpY2spIHtcbiAgICAgIHRoaXMudXNlckNhbGxiYWNrcy5lZGdlRG91YmxlQ2xpY2soZXZlbnQsIGVkZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGVkZ2VNb3VzZU92ZXIoZXZlbnQ6IE1vdXNlRXZlbnQsIGVkZ2U6IEZjRWRnZSkge1xuICAgIGlmICh0aGlzLnVzZXJDYWxsYmFja3MuZWRnZU1vdXNlT3Zlcikge1xuICAgICAgdGhpcy51c2VyQ2FsbGJhY2tzLmVkZ2VNb3VzZU92ZXIoZXZlbnQsIGVkZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGVkZ2VNb3VzZUVudGVyKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpIHtcbiAgICB0aGlzLm1vdXNlb3ZlclNlcnZpY2UuZWRnZU1vdXNlRW50ZXIoZXZlbnQsIGVkZ2UpO1xuICB9XG5cbiAgZWRnZU1vdXNlTGVhdmUoZXZlbnQ6IE1vdXNlRXZlbnQsIGVkZ2U6IEZjRWRnZSkge1xuICAgIHRoaXMubW91c2VvdmVyU2VydmljZS5lZGdlTW91c2VMZWF2ZShldmVudCwgZWRnZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXG4gIGRyYWdvdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICB0aGlzLm5vZGVEcmFnZ2luZ1NlcnZpY2UuZHJhZ292ZXIoZXZlbnQpO1xuICAgIHRoaXMuZWRnZURyYWdnaW5nU2VydmljZS5kcmFnb3ZlcihldmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSlcbiAgZHJvcChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy5ub2RlRHJhZ2dpbmdTZXJ2aWNlLmRyb3AoZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgbW91c2Vkb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5yZWN0YW5nbGVTZWxlY3RTZXJ2aWNlLm1vdXNlZG93bihldmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICBtb3VzZW1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLnJlY3RhbmdsZVNlbGVjdFNlcnZpY2UubW91c2Vtb3ZlKGV2ZW50KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnLCBbJyRldmVudCddKVxuICBtb3VzZXVwKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5yZWN0YW5nbGVTZWxlY3RTZXJ2aWNlLm1vdXNldXAoZXZlbnQpO1xuICB9XG5cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/ngx-flowchart/esm5/lib/ngx-flowchart.models.js b/dist/ngx-flowchart/esm5/lib/ngx-flowchart.models.js index 4be65c8..f9bea36 100644 --- a/dist/ngx-flowchart/esm5/lib/ngx-flowchart.models.js +++ b/dist/ngx-flowchart/esm5/lib/ngx-flowchart.models.js @@ -213,7 +213,7 @@ var BaseError = /** @class */ (function () { } return BaseError; }()); -BaseError.prototype = new Error(); +Object.defineProperty(BaseError, 'prototype', new Error()); var ModelvalidationError = /** @class */ (function (_super) { tslib_1.__extends(ModelvalidationError, _super); function ModelvalidationError(message) { @@ -341,4 +341,4 @@ export function fcTopSort(graph) { return orderedNodes; } } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZsb3djaGFydC5tb2RlbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZmxvd2NoYXJ0LyIsInNvdXJjZXMiOlsibGliL25neC1mbG93Y2hhcnQubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQzs7QUFHckQsTUFBTSxLQUFPLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUF3QiwwQkFBMEIsQ0FBQzs7OztBQUU3RywyQ0FFQzs7O0lBREMsa0RBQXlDOzs7SUFHckMsVUFBVSxHQUFHLElBQUk7O0lBQ2pCLGlCQUFpQixHQUFHLGVBQWU7O0lBQ25DLGtCQUFrQixHQUFHLGdCQUFnQjs7QUFFM0MsTUFBTSxLQUFPLGtCQUFrQixHQUFHO0lBQ2hDLFVBQVUsWUFBQTtJQUNWLGlCQUFpQixtQkFBQTtJQUNqQixrQkFBa0Isb0JBQUE7SUFDbEIsV0FBVyxFQUFFLFFBQVE7SUFDckIsU0FBUyxFQUFFLE1BQU07SUFDakIsb0JBQW9CLEVBQUUsU0FBUztJQUMvQixtQkFBbUIsRUFBRSxRQUFRO0lBQzdCLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxhQUFhLEVBQUUsVUFBVSxHQUFHLFdBQVc7SUFDdkMsU0FBUyxFQUFFLFVBQVUsR0FBRyxPQUFPO0lBQy9CLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxVQUFVLEVBQUUsVUFBVSxHQUFHLFFBQVE7SUFDakMsYUFBYSxFQUFFLFVBQVUsR0FBRyxXQUFXO0lBQ3ZDLFNBQVMsRUFBRSxVQUFVLEdBQUcsT0FBTztJQUMvQixjQUFjLEVBQUUsVUFBVSxHQUFHLGFBQWE7SUFDMUMsY0FBYyxFQUFFLFVBQVUsR0FBRyxZQUFZO0lBQ3pDLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxTQUFTLEVBQUUsVUFBVSxHQUFHLE9BQU87SUFDL0IsZ0JBQWdCLEVBQUUsVUFBVSxHQUFHLGVBQWU7SUFDOUMs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UUFBUSxFQUFFLENBQUM7WUFDekMsSUFBSSxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRTtnQkFDaEQsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNuQztZQUNELFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvQyxDQUFDLEVBQUUsQ0FBQztTQUNMO1FBQ0QsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUMvQjs7UUFDRyxRQUFRLEdBQUcsS0FBSzs7UUFDcEIsS0FBbUIsSUFBQSxLQUFBLGlCQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUEsZ0JBQUEsNEJBQUU7WUFBekMsSUFBTSxJQUFJLFdBQUE7O2dCQUNQLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ2hDLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLFFBQVEsR0FBRyxJQUFJLENBQUM7YUFDakI7U0FDRjs7Ozs7Ozs7O0lBQ0QsSUFBSSxRQUFRLEVBQUU7UUFDWixPQUFPLElBQUksQ0FBQztLQUNiO1NBQU07UUFDTCxPQUFPLFlBQVksQ0FBQztLQUNyQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmNOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBGQ19OT0RFX0NPTVBPTkVOVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48RmNOb2RlQ29tcG9uZW50Q29uZmlnPignZmMtbm9kZS5jb21wb25lbnQuY29uZmlnJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNOb2RlQ29tcG9uZW50Q29uZmlnIHtcbiAgbm9kZUNvbXBvbmVudFR5cGU6IFR5cGU8RmNOb2RlQ29tcG9uZW50Pjtcbn1cblxuY29uc3QgaHRtbFByZWZpeCA9ICdmYyc7XG5jb25zdCBsZWZ0Q29ubmVjdG9yVHlwZSA9ICdsZWZ0Q29ubmVjdG9yJztcbmNvbnN0IHJpZ2h0Q29ubmVjdG9yVHlwZSA9ICdyaWdodENvbm5lY3Rvcic7XG5cbmV4cG9ydCBjb25zdCBGbG93Y2hhcnRDb25zdGFudHMgPSB7XG4gIGh0bWxQcmVmaXgsXG4gIGxlZnRDb25uZWN0b3JUeXBlLFxuICByaWdodENvbm5lY3RvclR5cGUsXG4gIGN1cnZlZFN0eWxlOiAnY3VydmVkJyxcbiAgbGluZVN0eWxlOiAnbGluZScsXG4gIGRyYWdBbmltYXRpb25SZXBhaW50OiAncmVwYWludCcsXG4gIGRyYWdBbmltYXRpb25TaGFkb3c6ICdzaGFkb3cnLFxuICBjYW52YXNDbGFzczogaHRtbFByZWZpeCArICctY2FudmFzJyxcbiAgc2VsZWN0ZWRDbGFzczogaHRtbFByZWZpeCArICctc2VsZWN0ZWQnLFxuICBlZGl0Q2xhc3M6IGh0bWxQcmVmaXggKyAnLWVkaXQnLFxuICBhY3RpdmVDbGFzczogaHRtbFByZWZpeCArICctYWN0aXZlJyxcbiAgaG92ZXJDbGFzczogaHRtbFByZWZpeCArICctaG92ZXInLFxuICBkcmFnZ2luZ0NsYXNzOiBodG1sUHJlZml4ICsgJy1kcmFnZ2luZycsXG4gIGVkZ2VDbGFzczogaHRtbFByZWZpeCArICctZWRnZScsXG4gIGVkZ2VMYWJlbENsYXNzOiBodG1sUHJlZml4ICsgJy1lZGdlLWxhYmVsJyxcbiAgY29ubmVjdG9yQ2xhc3M6IGh0bWxQcmVmaXggKyAnLWNvbm5lY3RvcicsXG4gIG1hZ25ldENsYXNzOiBodG1sUHJlZml4ICsgJy1tYWduZXQnLFxuICBub2RlQ2xhc3M6IGh0bWxQcmVmaXggKyAnLW5vZGUnLFxuICBub2RlT3ZlcmxheUNsYXNzOiBodG1sUHJlZml4ICsgJy1ub2RlLW92ZXJsYXknLFxuICBsZWZ0Q29ubmVjdG9yQ2xhc3M6IGh0bWxQcmVmaXggKyAnLScgKyBsZWZ0Q29ubmVjdG9yVHlwZSArICdzJyxcbiAgcmlnaHRDb25uZWN0b3JDbGFzczogaHRtbFByZWZpeCArICctJyArIHJpZ2h0Q29ubmVjdG9yVHlwZSArICdzJyxcbiAgY2FudmFzUmVzaXplVGhyZXNob2xkOiAyMDAsXG4gIGNhbnZhc1Jlc2l6ZVN0ZXA6IDIwMFxufTtcblxuXG5leHBvcnQgaW50ZXJmYWNlIEZjQ29vcmRzIHtcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY1JlY3RCb3gge1xuICB0b3A6IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY0Nvbm5lY3RvciB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY05vZGUgZXh0ZW5kcyBGY0Nvb3JkcyB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgY29ubmVjdG9yczogQXJyYXk8RmNDb25uZWN0b3I+O1xuICByZWFkb25seT86IGJvb2xlYW47XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY0VkZ2Uge1xuICBsYWJlbD86IHN0cmluZztcbiAgc291cmNlPzogc3RyaW5nO1xuICBkZXN0aW5hdGlvbj86IHN0cmluZztcbiAgYWN0aXZlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY0l0ZW1JbmZvIHtcbiAgbm9kZT86IEZjTm9kZTtcbiAgZWRnZT86IEZjRWRnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY01vZGVsIHtcbiAgbm9kZXM6IEFycmF5PEZjTm9kZT47XG4gIGVkZ2VzOiBBcnJheTxGY0VkZ2U+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDYWxsYmFja3Mge1xuICBkcm9wTm9kZT86IChldmVudDogRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgY3JlYXRlRWRnZT86IChldmVudDogRXZlbnQsIGVkZ2U6IEZjRWRnZSkgPT4gT2JzZXJ2YWJsZTxGY0VkZ2U+O1xuICBlZGdlQWRkZWQ/OiAoZWRnZTogRmNFZGdlKSA9PiB2b2lkO1xuICBub2RlUmVtb3ZlZD86IChub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIGVkZ2VSZW1vdmVkPzogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcbiAgZWRnZURvdWJsZUNsaWNrPzogKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpID0+IHZvaWQ7XG4gIGVkZ2VNb3VzZU92ZXI/OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcbiAgaXNWYWxpZEVkZ2U/OiAoc291cmNlOiBGY0Nvbm5lY3RvciwgZGVzdGluYXRpb246IEZjQ29ubmVjdG9yKSA9PiBib29sZWFuO1xuICBlZGdlRWRpdD86IChldmVudDogRXZlbnQsIGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcbiAgbm9kZUNhbGxiYWNrcz86IFVzZXJOb2RlQ2FsbGJhY2tzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJOb2RlQ2FsbGJhY2tzIHtcbiAgbm9kZUVkaXQ/OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgZG91YmxlQ2xpY2s/OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgbW91c2VEb3duPzogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIG1vdXNlRW50ZXI/OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgbW91c2VMZWF2ZT86IChldmVudDogTW91c2VFdmVudCwgbm9kZTogRmNOb2RlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZjQ2FsbGJhY2tzIHtcbiAgbm9kZURyYWdzdGFydDogKGV2ZW50OiBEcmFnRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgbm9kZURyYWdlbmQ6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICBlZGdlRHJhZ3N0YXJ0OiAoZXZlbnQ6IERyYWdFdmVudCwgY29ubmVjdG9yOiBGY0Nvbm5lY3RvcikgPT4gdm9pZDtcbiAgZWRnZURyYWdlbmQ6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICBlZGdlRHJvcDogKGV2ZW50OiBEcmFnRXZlbnQsIHRhcmdldENvbm5lY3RvcjogRmNDb25uZWN0b3IpID0+IGJvb2xlYW47XG4gIGVkZ2VEcmFnb3ZlckNvbm5lY3RvcjogKGV2ZW50OiBEcmFnRXZlbnQsIGNvbm5lY3RvcjogRmNDb25uZWN0b3IpID0+IGJvb2xlYW47XG4gIGVkZ2VEcmFnb3Zlck1hZ25ldDogKGV2ZW50OiBEcmFnRXZlbnQsIGNvbm5lY3RvcjogRmNDb25uZWN0b3IpID0+IGJvb2xlYW47XG4gIGVkZ2VEcmFnbGVhdmVNYWduZXQ6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICBub2RlTW91c2VPdmVyOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgbm9kZU1vdXNlT3V0OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbiAgY29ubmVjdG9yTW91c2VFbnRlcjogKGV2ZW50OiBNb3VzZUV2ZW50LCBjb25uZWN0b3I6IEZjQ29ubmVjdG9yKSA9PiB2b2lkO1xuICBjb25uZWN0b3JNb3VzZUxlYXZlOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNvbm5lY3RvcjogRmNDb25uZWN0b3IpID0+IHZvaWQ7XG4gIG5vZGVDbGlja2VkOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY0FkamFjZW50TGlzdCB7XG4gIFtpZDogc3RyaW5nXToge1xuICAgIGluY29taW5nOiBudW1iZXI7XG4gICAgb3V0Z29pbmc6IEFycmF5PHN0cmluZz47XG4gIH07XG59XG5cbmNsYXNzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIEVycm9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuQmFzZUVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgY2xhc3MgTW9kZWx2YWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmNUb3BTb3J0KGdyYXBoOiBGY01vZGVsKTogQXJyYXk8c3RyaW5nPiB8IG51bGwge1xuICBjb25zdCBhZGphY2VudExpc3Q6IEZjQWRqYWNlbnRMaXN0ID0ge307XG4gIGdyYXBoLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICBhZGphY2VudExpc3Rbbm9kZS5pZF0gPSB7aW5jb21pbmc6IDAsIG91dGdvaW5nOiBbXX07XG4gIH0pO1xuICBncmFwaC5lZGdlcy5mb3JFYWNoKChlZGdlKSA9PiB7XG4gICAgY29uc3Qgc291cmNlTm9kZSA9IGdyYXBoLm5vZGVzLmZpbHRlcigobm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUuY29ubmVjdG9ycy5zb21lKChjb25uZWN0b3IpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rvci5pZCA9PT0gZWRnZS5zb3VyY2U7XG4gICAgICB9KTtcbiAgICB9KVswXTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbk5vZGUgPSBncmFwaC5ub2Rlcy5maWx0ZXIoKG5vZGUpID0+IHtcbiAgICAgIHJldHVybiBub2RlLmNvbm5lY3RvcnMuc29tZSgoY29ubmVjdG9yKSA9PiB7XG4gICAgICAgIHJldHVybiBjb25uZWN0b3IuaWQgPT09IGVkZ2UuZGVzdGluYXRpb247XG4gICAgICB9KTtcbiAgICB9KVswXTtcbiAgICBhZGphY2VudExpc3Rbc291cmNlTm9kZS5pZF0ub3V0Z29pbmcucHVzaChkZXN0aW5hdGlvbk5vZGUuaWQpO1xuICAgIGFkamFjZW50TGlzdFtkZXN0aW5hdGlvbk5vZGUuaWRdLmluY29taW5nKys7XG4gIH0pO1xuICBjb25zdCBvcmRlcmVkTm9kZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNvdXJjZU5vZGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LmtleXMoYWRqYWNlbnRMaXN0KSkge1xuICAgIGNvbnN0IGVkZ2VzID0gYWRqYWNlbnRMaXN0W25vZGVdO1xuICAgIGlmIChlZGdlcy5pbmNvbWluZyA9PT0gMCkge1xuICAgICAgc291cmNlTm9kZXMucHVzaChub2RlKTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKHNvdXJjZU5vZGVzLmxlbmd0aCAhPT0gMCkge1xuICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBzb3VyY2VOb2Rlcy5wb3AoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkamFjZW50TGlzdFtzb3VyY2VOb2RlXS5vdXRnb2luZy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25Ob2RlID0gYWRqYWNlbnRMaXN0W3NvdXJjZU5vZGVdLm91dGdvaW5nW2ldO1xuICAgICAgYWRqYWNlbnRMaXN0W2Rlc3RpbmF0aW9uTm9kZV0uaW5jb21pbmctLTtcbiAgICAgIGlmIChhZGphY2VudExpc3RbZGVzdGluYXRpb25Ob2RlXS5pbmNvbWluZyA9PT0gMCkge1xuICAgICAgICBzb3VyY2VOb2Rlcy5wdXNoKGRlc3RpbmF0aW9uTm9kZSk7XG4gICAgICB9XG4gICAgICBhZGphY2VudExpc3Rbc291cmNlTm9kZV0ub3V0Z29pbmcuc3BsaWNlKGksIDEpO1xuICAgICAgaS0tO1xuICAgIH1cbiAgICBvcmRlcmVkTm9kZXMucHVzaChzb3VyY2VOb2RlKTtcbiAgfVxuICBsZXQgaGFzRWRnZXMgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBub2RlIG9mIE9iamVjdC5rZXlzKGFkamFjZW50TGlzdCkpIHtcbiAgICBjb25zdCBlZGdlcyA9IGFkamFjZW50TGlzdFtub2RlXTtcbiAgICBpZiAoZWRnZXMuaW5jb21pbmcgIT09IDApIHtcbiAgICAgIGhhc0VkZ2VzID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKGhhc0VkZ2VzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9yZGVyZWROb2RlcztcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZsb3djaGFydC5tb2RlbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZmxvd2NoYXJ0LyIsInNvdXJjZXMiOlsibGliL25neC1mbG93Y2hhcnQubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQzs7QUFHckQsTUFBTSxLQUFPLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUF3QiwwQkFBMEIsQ0FBQzs7OztBQUU3RywyQ0FFQzs7O0lBREMsa0RBQXlDOzs7SUFHckMsVUFBVSxHQUFHLElBQUk7O0lBQ2pCLGlCQUFpQixHQUFHLGVBQWU7O0lBQ25DLGtCQUFrQixHQUFHLGdCQUFnQjs7QUFFM0MsTUFBTSxLQUFPLGtCQUFrQixHQUFHO0lBQ2hDLFVBQVUsWUFBQTtJQUNWLGlCQUFpQixtQkFBQTtJQUNqQixrQkFBa0Isb0JBQUE7SUFDbEIsV0FBVyxFQUFFLFFBQVE7SUFDckIsU0FBUyxFQUFFLE1BQU07SUFDakIsb0JBQW9CLEVBQUUsU0FBUztJQUMvQixtQkFBbUIsRUFBRSxRQUFRO0lBQzdCLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxhQUFhLEVBQUUsVUFBVSxHQUFHLFdBQVc7SUFDdkMsU0FBUyxFQUFFLFVBQVUsR0FBRyxPQUFPO0lBQy9CLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxVQUFVLEVBQUUsVUFBVSxHQUFHLFFBQVE7SUFDakMsYUFBYSxFQUFFLFVBQVUsR0FBRyxXQUFXO0lBQ3ZDLFNBQVMsRUFBRSxVQUFVLEdBQUcsT0FBTztJQUMvQixjQUFjLEVBQUUsVUFBVSxHQUFHLGFBQWE7SUFDMUMsY0FBYyxFQUFFLFVBQVUsR0FBRyxZQUFZO0lBQ3pDLFdBQVcsRUFBRSxVQUFVLEdBQUcsU0FBUztJQUNuQyxTQUFTLEVBQUUsVUFBVSxHQUFHLE9BQU87SUFDL0IsZ0JBQWdCLEVBQUUsVUFBVSxHQUFHLGVBQWU7SUFDOUMs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WUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLElBQUksWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hELFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDbkM7WUFDRCxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxFQUFFLENBQUM7U0FDTDtRQUNELFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDL0I7O1FBQ0csUUFBUSxHQUFHLEtBQUs7O1FBQ3BCLEtBQW1CLElBQUEsS0FBQSxpQkFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBLGdCQUFBLDRCQUFFO1lBQXpDLElBQU0sSUFBSSxXQUFBOztnQkFDUCxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNoQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQ2pCO1NBQ0Y7Ozs7Ozs7OztJQUNELElBQUksUUFBUSxFQUFFO1FBQ1osT0FBTyxJQUFJLENBQUM7S0FDYjtTQUFNO1FBQ0wsT0FBTyxZQUFZLENBQUM7S0FDckI7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZjTm9kZUNvbXBvbmVudCB9IGZyb20gJy4vbm9kZS5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgRkNfTk9ERV9DT01QT05FTlRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEZjTm9kZUNvbXBvbmVudENvbmZpZz4oJ2ZjLW5vZGUuY29tcG9uZW50LmNvbmZpZycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZjTm9kZUNvbXBvbmVudENvbmZpZyB7XG4gIG5vZGVDb21wb25lbnRUeXBlOiBUeXBlPEZjTm9kZUNvbXBvbmVudD47XG59XG5cbmNvbnN0IGh0bWxQcmVmaXggPSAnZmMnO1xuY29uc3QgbGVmdENvbm5lY3RvclR5cGUgPSAnbGVmdENvbm5lY3Rvcic7XG5jb25zdCByaWdodENvbm5lY3RvclR5cGUgPSAncmlnaHRDb25uZWN0b3InO1xuXG5leHBvcnQgY29uc3QgRmxvd2NoYXJ0Q29uc3RhbnRzID0ge1xuICBodG1sUHJlZml4LFxuICBsZWZ0Q29ubmVjdG9yVHlwZSxcbiAgcmlnaHRDb25uZWN0b3JUeXBlLFxuICBjdXJ2ZWRTdHlsZTogJ2N1cnZlZCcsXG4gIGxpbmVTdHlsZTogJ2xpbmUnLFxuICBkcmFnQW5pbWF0aW9uUmVwYWludDogJ3JlcGFpbnQnLFxuICBkcmFnQW5pbWF0aW9uU2hhZG93OiAnc2hhZG93JyxcbiAgY2FudmFzQ2xhc3M6IGh0bWxQcmVmaXggKyAnLWNhbnZhcycsXG4gIHNlbGVjdGVkQ2xhc3M6IGh0bWxQcmVmaXggKyAnLXNlbGVjdGVkJyxcbiAgZWRpdENsYXNzOiBodG1sUHJlZml4ICsgJy1lZGl0JyxcbiAgYWN0aXZlQ2xhc3M6IGh0bWxQcmVmaXggKyAnLWFjdGl2ZScsXG4gIGhvdmVyQ2xhc3M6IGh0bWxQcmVmaXggKyAnLWhvdmVyJyxcbiAgZHJhZ2dpbmdDbGFzczogaHRtbFByZWZpeCArICctZHJhZ2dpbmcnLFxuICBlZGdlQ2xhc3M6IGh0bWxQcmVmaXggKyAnLWVkZ2UnLFxuICBlZGdlTGFiZWxDbGFzczogaHRtbFByZWZpeCArICctZWRnZS1sYWJlbCcsXG4gIGNvbm5lY3RvckNsYXNzOiBodG1sUHJlZml4ICsgJy1jb25uZWN0b3InLFxuICBtYWduZXRDbGFzczogaHRtbFByZWZpeCArICctbWFnbmV0JyxcbiAgbm9kZUNsYXNzOiBodG1sUHJlZml4ICsgJy1ub2RlJyxcbiAgbm9kZU92ZXJsYXlDbGFzczogaHRtbFByZWZpeCArICctbm9kZS1vdmVybGF5JyxcbiAgbGVmdENvbm5lY3RvckNsYXNzOiBodG1sUHJlZml4ICsgJy0nICsgbGVmdENvbm5lY3RvclR5cGUgKyAncycsXG4gIHJpZ2h0Q29ubmVjdG9yQ2xhc3M6IGh0bWxQcmVmaXggKyAnLScgKyByaWdodENvbm5lY3RvclR5cGUgKyAncycsXG4gIGNhbnZhc1Jlc2l6ZVRocmVzaG9sZDogMjAwLFxuICBjYW52YXNSZXNpemVTdGVwOiAyMDBcbn07XG5cblxuZXhwb3J0IGludGVyZmFjZSBGY0Nvb3JkcyB7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNSZWN0Qm94IHtcbiAgdG9wOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgcmlnaHQ6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNDb25uZWN0b3Ige1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNOb2RlIGV4dGVuZHMgRmNDb29yZHMge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbm5lY3RvcnM6IEFycmF5PEZjQ29ubmVjdG9yPjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNFZGdlIHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHNvdXJjZT86IHN0cmluZztcbiAgZGVzdGluYXRpb24/OiBzdHJpbmc7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNJdGVtSW5mbyB7XG4gIG5vZGU/OiBGY05vZGU7XG4gIGVkZ2U/OiBGY0VkZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNNb2RlbCB7XG4gIG5vZGVzOiBBcnJheTxGY05vZGU+O1xuICBlZGdlczogQXJyYXk8RmNFZGdlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyQ2FsbGJhY2tzIHtcbiAgZHJvcE5vZGU/OiAoZXZlbnQ6IEV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIGNyZWF0ZUVkZ2U/OiAoZXZlbnQ6IEV2ZW50LCBlZGdlOiBGY0VkZ2UpID0+IE9ic2VydmFibGU8RmNFZGdlPjtcbiAgZWRnZUFkZGVkPzogKGVkZ2U6IEZjRWRnZSkgPT4gdm9pZDtcbiAgbm9kZVJlbW92ZWQ/OiAobm9kZTogRmNOb2RlKSA9PiB2b2lkO1xuICBlZGdlUmVtb3ZlZD86IChlZGdlOiBGY0VkZ2UpID0+IHZvaWQ7XG4gIGVkZ2VEb3VibGVDbGljaz86IChldmVudDogTW91c2VFdmVudCwgZWRnZTogRmNFZGdlKSA9PiB2b2lkO1xuICBlZGdlTW91c2VPdmVyPzogKGV2ZW50OiBNb3VzZUV2ZW50LCBlZGdlOiBGY0VkZ2UpID0+IHZvaWQ7XG4gIGlzVmFsaWRFZGdlPzogKHNvdXJjZTogRmNDb25uZWN0b3IsIGRlc3RpbmF0aW9uOiBGY0Nvbm5lY3RvcikgPT4gYm9vbGVhbjtcbiAgZWRnZUVkaXQ/OiAoZXZlbnQ6IEV2ZW50LCBlZGdlOiBGY0VkZ2UpID0+IHZvaWQ7XG4gIG5vZGVDYWxsYmFja3M/OiBVc2VyTm9kZUNhbGxiYWNrcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyTm9kZUNhbGxiYWNrcyB7XG4gIG5vZGVFZGl0PzogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIGRvdWJsZUNsaWNrPzogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIG1vdXNlRG93bj86IChldmVudDogTW91c2VFdmVudCwgbm9kZTogRmNOb2RlKSA9PiB2b2lkO1xuICBtb3VzZUVudGVyPzogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIG1vdXNlTGVhdmU/OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IEZjTm9kZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGY0NhbGxiYWNrcyB7XG4gIG5vZGVEcmFnc3RhcnQ6IChldmVudDogRHJhZ0V2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIG5vZGVEcmFnZW5kOiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgZWRnZURyYWdzdGFydDogKGV2ZW50OiBEcmFnRXZlbnQsIGNvbm5lY3RvcjogRmNDb25uZWN0b3IpID0+IHZvaWQ7XG4gIGVkZ2VEcmFnZW5kOiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgZWRnZURyb3A6IChldmVudDogRHJhZ0V2ZW50LCB0YXJnZXRDb25uZWN0b3I6IEZjQ29ubmVjdG9yKSA9PiBib29sZWFuO1xuICBlZGdlRHJhZ292ZXJDb25uZWN0b3I6IChldmVudDogRHJhZ0V2ZW50LCBjb25uZWN0b3I6IEZjQ29ubmVjdG9yKSA9PiBib29sZWFuO1xuICBlZGdlRHJhZ292ZXJNYWduZXQ6IChldmVudDogRHJhZ0V2ZW50LCBjb25uZWN0b3I6IEZjQ29ubmVjdG9yKSA9PiBib29sZWFuO1xuICBlZGdlRHJhZ2xlYXZlTWFnbmV0OiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgbm9kZU1vdXNlT3ZlcjogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIG5vZGVNb3VzZU91dDogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG4gIGNvbm5lY3Rvck1vdXNlRW50ZXI6IChldmVudDogTW91c2VFdmVudCwgY29ubmVjdG9yOiBGY0Nvbm5lY3RvcikgPT4gdm9pZDtcbiAgY29ubmVjdG9yTW91c2VMZWF2ZTogKGV2ZW50OiBNb3VzZUV2ZW50LCBjb25uZWN0b3I6IEZjQ29ubmVjdG9yKSA9PiB2b2lkO1xuICBub2RlQ2xpY2tlZDogKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBGY05vZGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmNBZGphY2VudExpc3Qge1xuICBbaWQ6IHN0cmluZ106IHtcbiAgICBpbmNvbWluZzogbnVtYmVyO1xuICAgIG91dGdvaW5nOiBBcnJheTxzdHJpbmc+O1xuICB9O1xufVxuXG5jbGFzcyBCYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBFcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlRXJyb3IsICdwcm90b3R5cGUnLCBuZXcgRXJyb3IoKSk7XG5cbmV4cG9ydCBjbGFzcyBNb2RlbHZhbGlkYXRpb25FcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmY1RvcFNvcnQoZ3JhcGg6IEZjTW9kZWwpOiBBcnJheTxzdHJpbmc+IHwgbnVsbCB7XG4gIGNvbnN0IGFkamFjZW50TGlzdDogRmNBZGphY2VudExpc3QgPSB7fTtcbiAgZ3JhcGgubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgIGFkamFjZW50TGlzdFtub2RlLmlkXSA9IHtpbmNvbWluZzogMCwgb3V0Z29pbmc6IFtdfTtcbiAgfSk7XG4gIGdyYXBoLmVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICBjb25zdCBzb3VyY2VOb2RlID0gZ3JhcGgubm9kZXMuZmlsdGVyKChub2RlKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZS5jb25uZWN0b3JzLnNvbWUoKGNvbm5lY3RvcikgPT4ge1xuICAgICAgICByZXR1cm4gY29ubmVjdG9yLmlkID09PSBlZGdlLnNvdXJjZTtcbiAgICAgIH0pO1xuICAgIH0pWzBdO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uTm9kZSA9IGdyYXBoLm5vZGVzLmZpbHRlcigobm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUuY29ubmVjdG9ycy5zb21lKChjb25uZWN0b3IpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rvci5pZCA9PT0gZWRnZS5kZXN0aW5hdGlvbjtcbiAgICAgIH0pO1xuICAgIH0pWzBdO1xuICAgIGFkamFjZW50TGlzdFtzb3VyY2VOb2RlLmlkXS5vdXRnb2luZy5wdXNoKGRlc3RpbmF0aW9uTm9kZS5pZCk7XG4gICAgYWRqYWNlbnRMaXN0W2Rlc3RpbmF0aW9uTm9kZS5pZF0uaW5jb21pbmcrKztcbiAgfSk7XG4gIGNvbnN0IG9yZGVyZWROb2Rlczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc291cmNlTm9kZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBPYmplY3Qua2V5cyhhZGphY2VudExpc3QpKSB7XG4gICAgY29uc3QgZWRnZXMgPSBhZGphY2VudExpc3Rbbm9kZV07XG4gICAgaWYgKGVkZ2VzLmluY29taW5nID09PSAwKSB7XG4gICAgICBzb3VyY2VOb2Rlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoc291cmNlTm9kZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgY29uc3Qgc291cmNlTm9kZSA9IHNvdXJjZU5vZGVzLnBvcCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRqYWNlbnRMaXN0W3NvdXJjZU5vZGVdLm91dGdvaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbk5vZGUgPSBhZGphY2VudExpc3Rbc291cmNlTm9kZV0ub3V0Z29pbmdbaV07XG4gICAgICBhZGphY2VudExpc3RbZGVzdGluYXRpb25Ob2RlXS5pbmNvbWluZy0tO1xuICAgICAgaWYgKGFkamFjZW50TGlzdFtkZXN0aW5hdGlvbk5vZGVdLmluY29taW5nID09PSAwKSB7XG4gICAgICAgIHNvdXJjZU5vZGVzLnB1c2goZGVzdGluYXRpb25Ob2RlKTtcbiAgICAgIH1cbiAgICAgIGFkamFjZW50TGlzdFtzb3VyY2VOb2RlXS5vdXRnb2luZy5zcGxpY2UoaSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICAgIG9yZGVyZWROb2Rlcy5wdXNoKHNvdXJjZU5vZGUpO1xuICB9XG4gIGxldCBoYXNFZGdlcyA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LmtleXMoYWRqYWNlbnRMaXN0KSkge1xuICAgIGNvbnN0IGVkZ2VzID0gYWRqYWNlbnRMaXN0W25vZGVdO1xuICAgIGlmIChlZGdlcy5pbmNvbWluZyAhPT0gMCkge1xuICAgICAgaGFzRWRnZXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoaGFzRWRnZXMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb3JkZXJlZE5vZGVzO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/ngx-flowchart/fesm2015/ngx-flowchart.js b/dist/ngx-flowchart/fesm2015/ngx-flowchart.js index de29da0..45f0eb5 100644 --- a/dist/ngx-flowchart/fesm2015/ngx-flowchart.js +++ b/dist/ngx-flowchart/fesm2015/ngx-flowchart.js @@ -216,7 +216,7 @@ class BaseError { Error.apply(this, arguments); } } -BaseError.prototype = new Error(); +Object.defineProperty(BaseError, 'prototype', new Error()); class ModelvalidationError extends BaseError { /** * @param {?} message @@ -332,7 +332,7 @@ class FcModelService { * @param {?} modelValidation * @param {?} model * @param {?} modelChanged - * @param {?} cd + * @param {?} detectChangesSubject * @param {?} selectedObjects * @param {?} dropNode * @param {?} createEdge @@ -342,7 +342,7 @@ class FcModelService { * @param {?} canvasHtmlElement * @param {?} svgHtmlElement */ - constructor(modelValidation, model, modelChanged, cd, selectedObjects, dropNode, createEdge, edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback, canvasHtmlElement, svgHtmlElement) { + constructor(modelValidation, model, modelChanged, detectChangesSubject, selectedObjects, dropNode, createEdge, edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback, canvasHtmlElement, svgHtmlElement) { this.connectorsHtmlElements = {}; this.nodesHtmlElements = {}; this.canvasHtmlElement = null; @@ -352,7 +352,7 @@ class FcModelService { this.modelValidation = modelValidation; this.model = model; this.modelChanged = modelChanged; - this.cd = cd; + this.detectChangesSubject = detectChangesSubject; this.canvasHtmlElement = canvasHtmlElement; this.svgHtmlElement = svgHtmlElement; this.modelValidation.validateModel(this.model); @@ -403,7 +403,7 @@ class FcModelService { * @return {?} */ () => { - this.cd.detectChanges(); + this.detectChangesSubject.next(); }), 0); } /** @@ -652,25 +652,17 @@ class FcModelService { } return this.dragImage; } - /** - * @param {?} edgeAddedCallback - * @param {?} nodeRemovedCallback - * @param {?} edgeRemovedCallback - * @return {?} - */ - registerCallbacks(edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback) { - this.edgeAddedCallback = edgeAddedCallback; - this.nodeRemovedCallback = nodeRemovedCallback; - this.edgeRemovedCallback = edgeRemovedCallback; - } } if (false) { /** @type {?} */ FcModelService.prototype.modelValidation; /** @type {?} */ FcModelService.prototype.model; - /** @type {?} */ - FcModelService.prototype.cd; + /** + * @type {?} + * @private + */ + FcModelService.prototype.detectChangesSubject; /** @type {?} */ FcModelService.prototype.selectedObjects; /** @type {?} */ @@ -2646,8 +2638,15 @@ class NgxFlowchartComponent { (index, item) => { return item; })); + this.detectChangesSubject = new Subject(); this.arrowDefId = 'arrow-' + Math.random(); this.arrowDefIdSelected = this.arrowDefId + '-selected'; + this.detectChangesSubject + .pipe(debounceTime(50)) + .subscribe((/** + * @return {?} + */ + () => this.cd.detectChanges())); } /** * @return {?} @@ -2690,7 +2689,7 @@ class NgxFlowchartComponent { this.userNodeCallbacks = this.userCallbacks.nodeCallbacks; /** @type {?} */ const element = $(this.elementRef.nativeElement); - this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.cd, this.selectedObjects, this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved, this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg')); + this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.detectChangesSubject, this.selectedObjects, this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved, this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg')); if (this.dropTargetId) { this.modelService.dropTargetId = this.dropTargetId; } @@ -2771,7 +2770,7 @@ class NgxFlowchartComponent { this.adjustCanvasSize(this.fitModelSizeByDefault); } if (nodesChanged || edgesChanged) { - this.cd.detectChanges(); + this.detectChangesSubject.next(); } } } @@ -3030,6 +3029,11 @@ if (false) { * @private */ NgxFlowchartComponent.prototype.edgesDiffer; + /** + * @type {?} + * @private + */ + NgxFlowchartComponent.prototype.detectChangesSubject; /** * @type {?} * @private diff --git a/dist/ngx-flowchart/fesm2015/ngx-flowchart.js.map b/dist/ngx-flowchart/fesm2015/ngx-flowchart.js.map index 22f2e7c..d9674d8 100644 --- a/dist/ngx-flowchart/fesm2015/ngx-flowchart.js.map +++ b/dist/ngx-flowchart/fesm2015/ngx-flowchart.js.map @@ -1 +1 @@ -{"version":3,"file":"ngx-flowchart.js","sources":["ng://ngx-flowchart/lib/ngx-flowchart.models.ts","ng://ngx-flowchart/lib/model.service.ts","ng://ngx-flowchart/lib/modelvalidation.service.ts","ng://ngx-flowchart/lib/node-dragging.service.ts","ng://ngx-flowchart/lib/edge-drawing.service.ts","ng://ngx-flowchart/lib/edge-dragging.service.ts","ng://ngx-flowchart/lib/mouseover.service.ts","ng://ngx-flowchart/lib/scrollparent.ts","ng://ngx-flowchart/lib/rectangleselect.service.ts","ng://ngx-flowchart/lib/ngx-flowchart.component.ts","ng://ngx-flowchart/lib/magnet.directive.ts","ng://ngx-flowchart/lib/connector.directive.ts","ng://ngx-flowchart/lib/node.component.ts","ng://ngx-flowchart/lib/default-node.component.ts","ng://ngx-flowchart/lib/ngx-flowchart.module.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { InjectionToken, Type } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\nexport const FC_NODE_COMPONENT_CONFIG = new InjectionToken('fc-node.component.config');\n\nexport interface FcNodeComponentConfig {\n nodeComponentType: Type;\n}\n\nconst htmlPrefix = 'fc';\nconst leftConnectorType = 'leftConnector';\nconst rightConnectorType = 'rightConnector';\n\nexport const FlowchartConstants = {\n htmlPrefix,\n leftConnectorType,\n rightConnectorType,\n curvedStyle: 'curved',\n lineStyle: 'line',\n dragAnimationRepaint: 'repaint',\n dragAnimationShadow: 'shadow',\n canvasClass: htmlPrefix + '-canvas',\n selectedClass: htmlPrefix + '-selected',\n editClass: htmlPrefix + '-edit',\n activeClass: htmlPrefix + '-active',\n hoverClass: htmlPrefix + '-hover',\n draggingClass: htmlPrefix + '-dragging',\n edgeClass: htmlPrefix + '-edge',\n edgeLabelClass: htmlPrefix + '-edge-label',\n connectorClass: htmlPrefix + '-connector',\n magnetClass: htmlPrefix + '-magnet',\n nodeClass: htmlPrefix + '-node',\n nodeOverlayClass: htmlPrefix + '-node-overlay',\n leftConnectorClass: htmlPrefix + '-' + leftConnectorType + 's',\n rightConnectorClass: htmlPrefix + '-' + rightConnectorType + 's',\n canvasResizeThreshold: 200,\n canvasResizeStep: 200\n};\n\n\nexport interface FcCoords {\n x?: number;\n y?: number;\n}\n\nexport interface FcRectBox {\n top: number;\n left: number;\n right: number;\n bottom: number;\n}\n\nexport interface FcConnector {\n id: string;\n type: string;\n}\n\nexport interface FcNode extends FcCoords {\n id: string;\n name: string;\n connectors: Array;\n readonly?: boolean;\n [key: string]: any;\n}\n\nexport interface FcEdge {\n label?: string;\n source?: string;\n destination?: string;\n active?: boolean;\n}\n\nexport interface FcItemInfo {\n node?: FcNode;\n edge?: FcEdge;\n}\n\nexport interface FcModel {\n nodes: Array;\n edges: Array;\n}\n\nexport interface UserCallbacks {\n dropNode?: (event: Event, node: FcNode) => void;\n createEdge?: (event: Event, edge: FcEdge) => Observable;\n edgeAdded?: (edge: FcEdge) => void;\n nodeRemoved?: (node: FcNode) => void;\n edgeRemoved?: (edge: FcEdge) => void;\n edgeDoubleClick?: (event: MouseEvent, edge: FcEdge) => void;\n edgeMouseOver?: (event: MouseEvent, edge: FcEdge) => void;\n isValidEdge?: (source: FcConnector, destination: FcConnector) => boolean;\n edgeEdit?: (event: Event, edge: FcEdge) => void;\n nodeCallbacks?: UserNodeCallbacks;\n}\n\nexport interface UserNodeCallbacks {\n nodeEdit?: (event: MouseEvent, node: FcNode) => void;\n doubleClick?: (event: MouseEvent, node: FcNode) => void;\n mouseDown?: (event: MouseEvent, node: FcNode) => void;\n mouseEnter?: (event: MouseEvent, node: FcNode) => void;\n mouseLeave?: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcCallbacks {\n nodeDragstart: (event: DragEvent, node: FcNode) => void;\n nodeDragend: (event: DragEvent) => void;\n edgeDragstart: (event: DragEvent, connector: FcConnector) => void;\n edgeDragend: (event: DragEvent) => void;\n edgeDrop: (event: DragEvent, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: DragEvent) => void;\n nodeMouseOver: (event: MouseEvent, node: FcNode) => void;\n nodeMouseOut: (event: MouseEvent, node: FcNode) => void;\n connectorMouseEnter: (event: MouseEvent, connector: FcConnector) => void;\n connectorMouseLeave: (event: MouseEvent, connector: FcConnector) => void;\n nodeClicked: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcAdjacentList {\n [id: string]: {\n incoming: number;\n outgoing: Array;\n };\n}\n\nclass BaseError {\n constructor() {\n Error.apply(this, arguments);\n }\n}\n\nBaseError.prototype = new Error();\n\nexport class ModelvalidationError extends BaseError {\n constructor(public message: string) {\n super();\n }\n}\n\nexport function fcTopSort(graph: FcModel): Array | null {\n const adjacentList: FcAdjacentList = {};\n graph.nodes.forEach((node) => {\n adjacentList[node.id] = {incoming: 0, outgoing: []};\n });\n graph.edges.forEach((edge) => {\n const sourceNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.source;\n });\n })[0];\n const destinationNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.destination;\n });\n })[0];\n adjacentList[sourceNode.id].outgoing.push(destinationNode.id);\n adjacentList[destinationNode.id].incoming++;\n });\n const orderedNodes: string[] = [];\n const sourceNodes: string[] = [];\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming === 0) {\n sourceNodes.push(node);\n }\n }\n while (sourceNodes.length !== 0) {\n const sourceNode = sourceNodes.pop();\n for (let i = 0; i < adjacentList[sourceNode].outgoing.length; i++) {\n const destinationNode = adjacentList[sourceNode].outgoing[i];\n adjacentList[destinationNode].incoming--;\n if (adjacentList[destinationNode].incoming === 0) {\n sourceNodes.push(destinationNode);\n }\n adjacentList[sourceNode].outgoing.splice(i, 1);\n i--;\n }\n orderedNodes.push(sourceNode);\n }\n let hasEdges = false;\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming !== 0) {\n hasEdges = true;\n }\n }\n if (hasEdges) {\n return null;\n } else {\n return orderedNodes;\n }\n}\n","import { FcModelValidationService } from './modelvalidation.service';\nimport { FcConnector, FcCoords, FcEdge, FcItemInfo, FcModel, FcNode, FcRectBox } from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { ChangeDetectorRef, EventEmitter } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\nexport class FcModelService {\n\n modelValidation: FcModelValidationService;\n model: FcModel;\n cd: ChangeDetectorRef;\n selectedObjects: any[];\n\n connectorsHtmlElements: HtmlElementMap = {};\n nodesHtmlElements: HtmlElementMap = {};\n canvasHtmlElement: HTMLElement = null;\n dragImage: HTMLImageElement = null;\n svgHtmlElement: SVGElement = null;\n\n dropNode: (event: Event, node: FcNode) => void;\n createEdge: (event: Event, edge: FcEdge) => Observable;\n edgeAddedCallback: (edge: FcEdge) => void;\n nodeRemovedCallback: (node: FcNode) => void;\n edgeRemovedCallback: (edge: FcEdge) => void;\n\n dropTargetId: string;\n\n private readonly modelChanged: EventEmitter;\n private readonly debouncer = new Subject();\n\n connectors: ConnectorsModel;\n nodes: NodesModel;\n edges: EdgesModel;\n\n constructor(modelValidation: FcModelValidationService,\n model: FcModel,\n modelChanged: EventEmitter,\n cd: ChangeDetectorRef,\n selectedObjects: any[],\n dropNode: (event: Event, node: FcNode) => void,\n createEdge: (event: Event, edge: FcEdge) => Observable,\n edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void,\n canvasHtmlElement: HTMLElement,\n svgHtmlElement: SVGElement) {\n\n this.modelValidation = modelValidation;\n this.model = model;\n this.modelChanged = modelChanged;\n this.cd = cd;\n this.canvasHtmlElement = canvasHtmlElement;\n this.svgHtmlElement = svgHtmlElement;\n this.modelValidation.validateModel(this.model);\n this.selectedObjects = selectedObjects;\n\n this.dropNode = dropNode || (() => {});\n this.createEdge = createEdge || ((event, edge) => of({...edge, label: 'label'}));\n this.edgeAddedCallback = edgeAddedCallback || (() => {});\n this.nodeRemovedCallback = nodeRemovedCallback || (() => {});\n this.edgeRemovedCallback = edgeRemovedCallback || (() => {});\n\n this.connectors = new ConnectorsModel(this);\n this.nodes = new NodesModel(this);\n this.edges = new EdgesModel(this);\n\n this.debouncer\n .pipe(debounceTime(100))\n .subscribe(() => this.modelChanged.emit());\n }\n\n public notifyModelChanged() {\n this.debouncer.next();\n }\n\n public detectChanges() {\n setTimeout(() => {\n this.cd.detectChanges();\n }, 0);\n }\n\n public selectObject(object: any) {\n if (this.isEditable()) {\n if (this.selectedObjects.indexOf(object) === -1) {\n this.selectedObjects.push(object);\n }\n }\n }\n\n public deselectObject(object: any) {\n if (this.isEditable()) {\n const index = this.selectedObjects.indexOf(object);\n if (index === -1) {\n throw new Error('Tried to deselect an unselected object');\n }\n this.selectedObjects.splice(index, 1);\n }\n }\n\n public toggleSelectedObject(object: any) {\n if (this.isSelectedObject(object)) {\n this.deselectObject(object);\n } else {\n this.selectObject(object);\n }\n }\n\n public isSelectedObject(object: any): boolean {\n return this.selectedObjects.indexOf(object) !== -1;\n }\n\n public selectAll() {\n this.model.nodes.forEach(node => {\n if (!node.readonly) {\n this.nodes.select(node);\n }\n });\n this.model.edges.forEach(edge => {\n this.edges.select(edge);\n });\n this.detectChanges();\n }\n\n public deselectAll() {\n this.selectedObjects.splice(0, this.selectedObjects.length);\n this.detectChanges();\n }\n\n public isEditObject(object: any): boolean {\n return this.selectedObjects.length === 1 &&\n this.selectedObjects.indexOf(object) !== -1;\n }\n\n private inRectBox(x: number, y: number, rectBox: FcRectBox): boolean {\n return x >= rectBox.left && x <= rectBox.right &&\n y >= rectBox.top && y <= rectBox.bottom;\n }\n\n public getItemInfoAtPoint(x: number, y: number): FcItemInfo {\n return {\n node: this.getNodeAtPoint(x, y),\n edge: this.getEdgeAtPoint(x, y)\n };\n }\n\n public getNodeAtPoint(x: number, y: number): FcNode {\n for (const node of this.model.nodes) {\n const element = this.nodes.getHtmlElement(node.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (x >= nodeElementBox.left && x <= nodeElementBox.right\n && y >= nodeElementBox.top && y <= nodeElementBox.bottom) {\n return node;\n }\n }\n return null;\n }\n\n public getEdgeAtPoint(x: number, y: number): FcEdge {\n const element = document.elementFromPoint(x, y);\n const id = element.id;\n let edgeIndex = -1;\n if (id) {\n if (id.startsWith('fc-edge-path-')) {\n edgeIndex = Number(id.substring('fc-edge-path-'.length));\n } else if (id.startsWith('fc-edge-label-')) {\n edgeIndex = Number(id.substring('fc-edge-label-'.length));\n }\n }\n if (edgeIndex > -1) {\n return this.model.edges[edgeIndex];\n }\n return null;\n }\n\n public selectAllInRect(rectBox: FcRectBox) {\n this.model.nodes.forEach((value) => {\n const element = this.nodes.getHtmlElement(value.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (!value.readonly) {\n const x = nodeElementBox.left + nodeElementBox.width / 2;\n const y = nodeElementBox.top + nodeElementBox.height / 2;\n if (this.inRectBox(x, y, rectBox)) {\n this.nodes.select(value);\n } else {\n if (this.nodes.isSelected(value)) {\n this.nodes.deselect(value);\n }\n }\n }\n });\n const canvasElementBox = this.canvasHtmlElement.getBoundingClientRect();\n this.model.edges.forEach((value) => {\n const start = this.edges.sourceCoord(value);\n const end = this.edges.destCoord(value);\n const x = (start.x + end.x) / 2 + canvasElementBox.left;\n const y = (start.y + end.y) / 2 + canvasElementBox.top;\n if (this.inRectBox(x, y, rectBox)) {\n this.edges.select(value);\n } else {\n if (this.edges.isSelected(value)) {\n this.edges.deselect(value);\n }\n }\n });\n }\n\n public deleteSelected() {\n const edgesToDelete = this.edges.getSelectedEdges();\n edgesToDelete.forEach((edge) => {\n this.edges.delete(edge);\n });\n const nodesToDelete = this.nodes.getSelectedNodes();\n nodesToDelete.forEach((node) => {\n this.nodes.delete(node);\n });\n }\n\n public isEditable(): boolean {\n return this.dropTargetId === undefined;\n }\n\n public isDropSource(): boolean {\n return this.dropTargetId !== undefined;\n }\n\n public getDragImage(): HTMLImageElement {\n if (!this.dragImage) {\n this.dragImage = new Image();\n this.dragImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n this.dragImage.style.visibility = 'hidden';\n }\n return this.dragImage;\n }\n\n public registerCallbacks(edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void) {\n this.edgeAddedCallback = edgeAddedCallback;\n this.nodeRemovedCallback = nodeRemovedCallback;\n this.edgeRemovedCallback = edgeRemovedCallback;\n }\n\n}\n\ninterface HtmlElementMap { [id: string]: HTMLElement; }\n\nabstract class AbstractFcModel {\n\n modelService: FcModelService;\n\n protected constructor(modelService: FcModelService) {\n this.modelService = modelService;\n }\n\n public select(object: T) {\n this.modelService.selectObject(object);\n }\n\n public deselect(object: T) {\n this.modelService.deselectObject(object);\n }\n\n public toggleSelected(object: T) {\n this.modelService.toggleSelectedObject(object);\n }\n\n public isSelected(object: T): boolean {\n return this.modelService.isSelectedObject(object);\n }\n\n public isEdit(object: T): boolean {\n return this.modelService.isEditObject(object);\n }\n}\n\nclass ConnectorsModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnector(connectorId: string): FcConnector {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n for (const connector of node.connectors) {\n if (connector.id === connectorId) {\n return connector;\n }\n }\n }\n }\n\n public getHtmlElement(connectorId: string): HTMLElement {\n return this.modelService.connectorsHtmlElements[connectorId];\n }\n\n public setHtmlElement(connectorId: string, element: HTMLElement) {\n this.modelService.connectorsHtmlElements[connectorId] = element;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const element = this.getHtmlElement(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (element === null || element === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n const connectorElementBox = element.getBoundingClientRect();\n const canvasElementBox = canvas.getBoundingClientRect();\n let coords: FcCoords = {\n x: connectorElementBox.left - canvasElementBox.left,\n y: connectorElementBox.top - canvasElementBox.top\n };\n if (centered) {\n coords = {\n x: Math.round(coords.x + element.offsetWidth / 2),\n y: Math.round(coords.y + element.offsetHeight / 2)\n };\n }\n return coords;\n }\n\n public getCoords(connectorId: string): FcCoords {\n return this._getCoords(connectorId, false);\n }\n\n public getCenteredCoord(connectorId: string): FcCoords {\n return this._getCoords(connectorId, true);\n }\n}\n\nclass NodesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnectorsByType(node: FcNode, type: string): Array {\n return node.connectors.filter((connector) => {\n return connector.type === type;\n });\n }\n\n private _addConnector(node: FcNode, connector: FcConnector) {\n node.connectors.push(connector);\n try {\n this.modelService.modelValidation.validateNode(node);\n } catch (error) {\n node.connectors.splice(node.connectors.indexOf(connector), 1);\n throw error;\n }\n }\n\n public delete(node: FcNode) {\n if (this.isSelected(node)) {\n this.deselect(node);\n }\n const model = this.modelService.model;\n const index = model.nodes.indexOf(node);\n if (index === -1) {\n if (node === undefined) {\n throw new Error('Passed undefined');\n }\n throw new Error('Tried to delete not existing node');\n }\n const connectorIds = this.getConnectorIds(node);\n for (let i = 0; i < model.edges.length; i++) {\n const edge = model.edges[i];\n if (connectorIds.indexOf(edge.source) !== -1 || connectorIds.indexOf(edge.destination) !== -1) {\n this.modelService.edges.delete(edge);\n i--;\n }\n }\n model.nodes.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.nodeRemovedCallback(node);\n }\n\n public getSelectedNodes(): Array {\n const model = this.modelService.model;\n return model.nodes.filter((node) => {\n return this.modelService.nodes.isSelected(node);\n });\n }\n\n public handleClicked(node: FcNode, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.nodes.toggleSelected(node);\n } else {\n this.modelService.deselectAll();\n this.modelService.nodes.select(node);\n }\n }\n\n private _addNode(node: FcNode) {\n const model = this.modelService.model;\n try {\n model.nodes.push(node);\n this.modelService.modelValidation.validateNodes(model.nodes);\n } catch (error) {\n model.nodes.splice(model.nodes.indexOf(node), 1);\n throw error;\n }\n }\n\n public getConnectorIds(node: FcNode): Array {\n return node.connectors.map((connector) => {\n return connector.id;\n });\n }\n\n public getNodeByConnectorId(connectorId: string): FcNode {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n const connectorIds = this.getConnectorIds(node);\n if (connectorIds.indexOf(connectorId) > -1) {\n return node;\n }\n }\n return null;\n }\n\n public getHtmlElement(nodeId: string): HTMLElement {\n return this.modelService.nodesHtmlElements[nodeId];\n }\n\n public setHtmlElement(nodeId: string, element: HTMLElement) {\n this.modelService.nodesHtmlElements[nodeId] = element;\n this.modelService.detectChanges();\n }\n\n}\n\nclass EdgesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public ready(edge: FcEdge): boolean {\n const source = this.modelService.connectors.getHtmlElement(edge.source);\n const destination = this.modelService.connectors.getHtmlElement(edge.destination);\n return source !== undefined && destination !== undefined;\n }\n\n public sourceCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.source);\n }\n\n public destCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.destination);\n }\n\n public delete(edge: FcEdge) {\n const model = this.modelService.model;\n const index = model.edges.indexOf(edge);\n if (index === -1) {\n throw new Error('Tried to delete not existing edge');\n }\n if (this.isSelected(edge)) {\n this.deselect(edge);\n }\n model.edges.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.edgeRemovedCallback(edge);\n }\n\n public getSelectedEdges(): Array {\n const model = this.modelService.model;\n return model.edges.filter((edge) => {\n return this.modelService.edges.isSelected(edge);\n });\n }\n\n public handleEdgeMouseClick(edge: FcEdge, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.edges.toggleSelected(edge);\n } else {\n this.modelService.deselectAll();\n this.modelService.edges.select(edge);\n }\n }\n\n public putEdge(edge: FcEdge) {\n const model = this.modelService.model;\n model.edges.push(edge);\n this.modelService.notifyModelChanged();\n }\n\n public _addEdge(event: Event, sourceConnector: FcConnector, destConnector: FcConnector, label: string) {\n this.modelService.modelValidation.validateConnector(sourceConnector);\n this.modelService.modelValidation.validateConnector(destConnector);\n const edge: FcEdge = {};\n edge.source = sourceConnector.id;\n edge.destination = destConnector.id;\n edge.label = label;\n const model = this.modelService.model;\n this.modelService.modelValidation.validateEdges(model.edges.concat([edge]), model.nodes);\n this.modelService.createEdge(event, edge).subscribe(\n (created) => {\n model.edges.push(created);\n this.modelService.notifyModelChanged();\n this.modelService.edgeAddedCallback(created);\n }\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FcConnector, FcEdge, FcModel, FcNode, fcTopSort, ModelvalidationError } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcModelValidationService {\n\n constructor() { }\n\n public validateModel(model: FcModel): FcModel {\n this.validateNodes(model.nodes);\n this._validateEdges(model.edges, model.nodes);\n return model;\n }\n\n public validateNodes(nodes: Array): Array {\n const ids: string[] = [];\n nodes.forEach((node) => {\n this.validateNode(node);\n if (ids.indexOf(node.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n ids.push(node.id);\n });\n const connectorIds: string[] = [];\n nodes.forEach((node) => {\n node.connectors.forEach((connector) => {\n if (connectorIds.indexOf(connector.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n connectorIds.push(connector.id);\n });\n });\n return nodes;\n }\n\n public validateNode(node: FcNode): FcNode {\n if (node.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (typeof node.name !== 'string') {\n throw new ModelvalidationError('Name not valid.');\n }\n if (typeof node.x !== 'number' || node.x < 0 || Math.round(node.x) !== node.x) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (typeof node.y !== 'number' || node.y < 0 || Math.round(node.y) !== node.y) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (!Array.isArray(node.connectors)) {\n throw new ModelvalidationError('Connectors not valid.');\n }\n node.connectors.forEach((connector) => {\n this.validateConnector(connector);\n });\n return node;\n }\n\n private _validateEdges(edges: Array, nodes: Array): Array {\n edges.forEach((edge) => {\n this._validateEdge(edge, nodes);\n });\n edges.forEach((edge1, index1) => {\n edges.forEach((edge2, index2) => {\n if (index1 !== index2) {\n if ((edge1.source === edge2.source && edge1.destination === edge2.destination) ||\n (edge1.source === edge2.destination && edge1.destination === edge2.source)) {\n throw new ModelvalidationError('Duplicated edge.');\n }\n }\n });\n });\n if (fcTopSort({nodes, edges}) === null) {\n throw new ModelvalidationError('Graph has a circle.');\n }\n return edges;\n }\n\n public validateEdges(edges: Array, nodes: Array): Array {\n this.validateNodes(nodes);\n return this._validateEdges(edges, nodes);\n }\n\n private _validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n if (edge.source === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n if (edge.destination === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (edge.source === edge.destination) {\n throw new ModelvalidationError('Edge with same source and destination connectors.');\n }\n const sourceNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.source))[0];\n if (sourceNode === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n const destinationNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.destination))[0];\n if (destinationNode === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (sourceNode === destinationNode) {\n throw new ModelvalidationError('Edge with same source and destination nodes.');\n }\n return edge;\n }\n\n public validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n this.validateNodes(nodes);\n return this._validateEdge(edge, nodes);\n }\n\n public validateConnector(connector: FcConnector): FcConnector {\n if (connector.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (connector.type === undefined || connector.type === null || typeof connector.type !== 'string') {\n throw new ModelvalidationError('Type not valid.');\n }\n return connector;\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcCoords, FcNode, FlowchartConstants } from './ngx-flowchart.models';\n\nconst nodeDropScope: NodeDropScope = {\n dropElement: null\n};\n\nexport class FcNodeDraggingService {\n\n nodeDraggingScope: NodeDraggingScope = {\n shadowDragStarted: false,\n dropElement: null,\n draggedNodes: [],\n shadowElements: []\n };\n\n private dragOffsets: FcCoords[] = [];\n private draggedElements: HTMLElement[] = [];\n\n private destinationHtmlElements: HTMLElement[] = [];\n private oldDisplayStyles: string[] = [];\n\n private readonly modelService: FcModelService;\n private readonly automaticResize: boolean;\n private readonly dragAnimation: string;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n applyFunction: (fn: (...args: any[]) => T) => T,\n automaticResize: boolean, dragAnimation: string) {\n this.modelService = modelService;\n this.automaticResize = automaticResize;\n this.dragAnimation = dragAnimation;\n this.applyFunction = applyFunction;\n }\n\n private getCoordinate(coordinate: number, max: number): number {\n coordinate = Math.max(coordinate, 0);\n coordinate = Math.min(coordinate, max);\n return coordinate;\n }\n\n private getXCoordinate(x: number): number {\n return this.getCoordinate(x, this.modelService.canvasHtmlElement.offsetWidth);\n }\n\n private getYCoordinate(y: number): number {\n return this.getCoordinate(y, this.modelService.canvasHtmlElement.offsetHeight);\n }\n\n private resizeCanvas(draggedNode: FcNode, nodeElement: HTMLElement) {\n if (this.automaticResize && !this.modelService.isDropSource()) {\n const canvasElement = this.modelService.canvasHtmlElement;\n if (canvasElement.offsetWidth < draggedNode.x + nodeElement.offsetWidth + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.width = canvasElement.offsetWidth + FlowchartConstants.canvasResizeStep + 'px';\n }\n if (canvasElement.offsetHeight < draggedNode.y + nodeElement.offsetHeight + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.height = canvasElement.offsetHeight + FlowchartConstants.canvasResizeStep + 'px';\n }\n }\n }\n\n public isDraggingNode(node: FcNode): boolean {\n return this.nodeDraggingScope.draggedNodes.includes(node);\n }\n\n public dragstart(event: DragEvent, node: FcNode) {\n if (node.readonly) {\n return;\n }\n this.dragOffsets.length = 0;\n this.draggedElements.length = 0;\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.nodeDraggingScope.shadowElements.length = 0;\n this.destinationHtmlElements.length = 0;\n this.oldDisplayStyles.length = 0;\n const elements: Array> = [];\n const nodes: Array = [];\n if (this.modelService.nodes.isSelected(node)) {\n const selectedNodes = this.modelService.nodes.getSelectedNodes();\n for (const selectedNode of selectedNodes) {\n const element = $(this.modelService.nodes.getHtmlElement(selectedNode.id));\n elements.push(element);\n nodes.push(selectedNode);\n }\n } else {\n elements.push($(event.target as HTMLElement));\n nodes.push(node);\n }\n const offsetsX: number[] = [];\n const offsetsY: number[] = [];\n for (const element of elements) {\n offsetsX.push(parseInt(element.css('left'), 10) - event.clientX);\n offsetsY.push(parseInt(element.css('top'), 10) - event.clientY);\n }\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n if (this.modelService.isDropSource()) {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n nodeDropScope.dropElement = elements[0][0].cloneNode(true) as NodeDropElement;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n nodeDropScope.dropElement.offsetInfo = {\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n nodeDropScope.dropElement.style.position = 'absolute';\n nodeDropScope.dropElement.style.pointerEvents = 'none';\n nodeDropScope.dropElement.style.zIndex = '9999';\n\n document.body.appendChild(nodeDropScope.dropElement);\n const dropNodeInfo: DropNodeInfo = {\n node,\n dropTargetId: this.modelService.dropTargetId,\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n originalEvent.dataTransfer.setData('text', JSON.stringify(dropNodeInfo));\n\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n const target: HTMLElement = event.target as HTMLElement;\n this.destinationHtmlElements.push(target);\n this.oldDisplayStyles.push(target.style.display);\n target.style.display = 'none';\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n return;\n }\n this.nodeDraggingScope.draggedNodes = nodes;\n for (let i = 0; i < elements.length; i++) {\n this.draggedElements.push(elements[i][0]);\n this.dragOffsets.push(\n {\n x: offsetsX[i],\n y: offsetsY[i]\n }\n );\n }\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n for (let i = 0; i < this.draggedElements.length; i++) {\n const dragOffset = this.dragOffsets[i];\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = $(`
` +\n `

${draggedNode.name}

`);\n const targetInnerNode = $(this.draggedElements[i]).children()[0];\n shadowElement.children()[0].style.backgroundColor = targetInnerNode.style.backgroundColor;\n this.nodeDraggingScope.shadowElements.push(shadowElement);\n this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[i][0]);\n }\n }\n originalEvent.dataTransfer.setData('text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n for (let i = 0; i < this.draggedElements.length; i++) {\n this.destinationHtmlElements.push(this.draggedElements[i]);\n this.oldDisplayStyles.push(this.destinationHtmlElements[i].style.display);\n this.destinationHtmlElements[i].style.display = 'none';\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: DragEvent): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n const infoText = originalEvent.dataTransfer.getData('text');\n if (infoText) {\n let dropNodeInfo: DropNodeInfo = null;\n try {\n dropNodeInfo = JSON.parse(infoText);\n } catch (e) {}\n if (dropNodeInfo && dropNodeInfo.dropTargetId) {\n if (this.modelService.canvasHtmlElement.id &&\n this.modelService.canvasHtmlElement.id === dropNodeInfo.dropTargetId) {\n dropNode = dropNodeInfo.node;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n const x = event.clientX - offset.left;\n const y = event.clientY - offset.top;\n dropNode.x = Math.round(this.getXCoordinate(dropNodeInfo.offsetX + x));\n dropNode.y = Math.round(this.getYCoordinate(dropNodeInfo.offsetY + y));\n }\n }\n }\n if (dropNode) {\n this.modelService.dropNode(event, dropNode);\n event.preventDefault();\n return false;\n } else if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = Math.round(this.getXCoordinate(dragOffset.x + event.clientX));\n draggedNode.y = Math.round(this.getYCoordinate(dragOffset.y + event.clientY));\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n }\n\n public dragover(event: DragEvent) {\n if (nodeDropScope.dropElement) {\n const offsetInfo = nodeDropScope.dropElement.offsetInfo;\n nodeDropScope.dropElement.style.left = (offsetInfo.offsetX + event.clientX) + 'px';\n nodeDropScope.dropElement.style.top = (offsetInfo.offsetY + event.clientY) + 'px';\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n this.destinationHtmlElements[0].style.display = this.oldDisplayStyles[0];\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n event.preventDefault();\n return;\n }\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return;\n }\n if (!this.nodeDraggingScope.draggedNodes.length) {\n event.preventDefault();\n return;\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = this.getXCoordinate(dragOffset.x + event.clientX);\n draggedNode.y = this.getYCoordinate(dragOffset.y + event.clientY);\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n this.destinationHtmlElements[i].style.display = this.oldDisplayStyles[i];\n }\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n this.nodeDraggingScope.shadowElements[i].css('left', this.getXCoordinate(dragOffset.x + event.clientX) + 'px');\n this.nodeDraggingScope.shadowElements[i].css('top', this.getYCoordinate(dragOffset.y + event.clientY) + 'px');\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n }\n }\n }\n\n public dragend(event: DragEvent) {\n this.applyFunction(() => {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n if (this.modelService.isDropSource()) {\n return;\n }\n if (this.nodeDraggingScope.shadowElements.length) {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = this.nodeDraggingScope.shadowElements[i];\n draggedNode.x = parseInt(shadowElement.css('left').replace('px', ''), 10);\n draggedNode.y = parseInt(shadowElement.css('top').replace('px', ''), 10);\n this.modelService.canvasHtmlElement.removeChild(shadowElement[0]);\n }\n this.nodeDraggingScope.shadowElements.length = 0;\n this.modelService.notifyModelChanged();\n }\n\n if (this.nodeDraggingScope.draggedNodes.length) {\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.draggedElements.length = 0;\n this.dragOffsets.length = 0;\n }\n });\n }\n\n}\n\nexport interface NodeDraggingScope {\n draggedNodes: Array;\n shadowElements: Array>;\n shadowDragStarted: boolean;\n dropElement: HTMLElement;\n}\n\nexport interface NodeDropElement extends HTMLElement {\n offsetInfo?: {\n offsetX: number;\n offsetY: number;\n };\n}\n\nexport interface NodeDropScope {\n dropElement: NodeDropElement;\n}\n\nexport interface DropNodeInfo {\n node: FcNode;\n dropTargetId: string;\n offsetX: number;\n offsetY: number;\n}\n","import { Injectable } from '@angular/core';\nimport { FcCoords, FlowchartConstants } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcEdgeDrawingService {\n\n constructor() {\n }\n\n public getEdgeDAttribute(pt1: FcCoords, pt2: FcCoords, style: string): string {\n let dAddribute = `M ${pt1.x}, ${pt1.y} `;\n if (style === FlowchartConstants.curvedStyle) {\n const sourceTangent = this.computeEdgeSourceTangent(pt1, pt2);\n const destinationTangent = this.computeEdgeDestinationTangent(pt1, pt2);\n dAddribute += `C ${sourceTangent.x}, ${sourceTangent.y} ${(destinationTangent.x - 50)}, ${destinationTangent.y} ${pt2.x}, ${pt2.y}`;\n } else {\n dAddribute += `L ${pt2.x}, ${pt2.y}`;\n }\n return dAddribute;\n }\n\n public getEdgeCenter(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: (pt1.x + pt2.x) / 2,\n y: (pt1.y + pt2.y) / 2\n };\n }\n\n private computeEdgeTangentOffset(pt1: FcCoords, pt2: FcCoords): number {\n return (pt2.y - pt1.y) / 2;\n }\n\n private computeEdgeSourceTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt1.x,\n y: pt1.y + this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n private computeEdgeDestinationTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt2.x,\n y: pt2.y - this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcConnector, FcCoords, FcEdge, FcModel, FlowchartConstants, ModelvalidationError } from './ngx-flowchart.models';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcModelValidationService } from './modelvalidation.service';\n\nexport class FcEdgeDraggingService {\n\n edgeDragging: EdgeDragging = {\n isDragging: false,\n dragPoint1: null,\n dragPoint2: null,\n shadowDragStarted: false\n };\n\n private draggedEdgeSource: FcConnector = null;\n private dragOffset: FcCoords = {};\n private destinationHtmlElement: HTMLElement = null;\n private oldDisplayStyle = '';\n\n private readonly modelValidation: FcModelValidationService;\n private readonly edgeDrawingService: FcEdgeDrawingService;\n private readonly modelService: FcModelService;\n private readonly model: FcModel;\n private readonly isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n private readonly dragAnimation: string;\n private readonly edgeStyle: string;\n\n constructor(modelValidation: FcModelValidationService,\n edgeDrawingService: FcEdgeDrawingService,\n modelService: FcModelService,\n model: FcModel,\n isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean,\n applyFunction: (fn: (...args: any[]) => T) => T,\n dragAnimation: string,\n edgeStyle: string) {\n this.modelValidation = modelValidation;\n this.edgeDrawingService = edgeDrawingService;\n this.modelService = modelService;\n this.model = model;\n this.isValidEdgeCallback = isValidEdgeCallback || (() => true);\n this.applyFunction = applyFunction;\n this.dragAnimation = dragAnimation;\n this.edgeStyle = edgeStyle;\n }\n\n public dragstart(event: DragEvent, connector: FcConnector) {\n let swapConnector: FcConnector;\n let dragLabel: string;\n let prevEdge: FcEdge;\n if (connector.type === FlowchartConstants.leftConnectorType) {\n for (const edge of this.model.edges) {\n if (edge.destination === connector.id) {\n swapConnector = this.modelService.connectors.getConnector(edge.source);\n dragLabel = edge.label;\n prevEdge = edge;\n this.applyFunction(() => {\n this.modelService.edges.delete(edge);\n });\n break;\n }\n }\n }\n this.edgeDragging.isDragging = true;\n if (swapConnector !== undefined) {\n this.draggedEdgeSource = swapConnector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(swapConnector.id);\n this.edgeDragging.dragLabel = dragLabel;\n this.edgeDragging.prevEdge = prevEdge;\n } else {\n this.draggedEdgeSource = connector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(connector.id);\n }\n const canvas = this.modelService.canvasHtmlElement;\n if (!canvas) {\n throw new Error('No canvas while edgedraggingService found.');\n }\n this.dragOffset.x = -canvas.getBoundingClientRect().left;\n this.dragOffset.y = -canvas.getBoundingClientRect().top;\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n\n originalEvent.dataTransfer.setData('Text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n this.destinationHtmlElement = event.target as HTMLElement;\n this.oldDisplayStyle = this.destinationHtmlElement.style.display;\n this.destinationHtmlElement.style.display = 'none';\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.shadowDragStarted = true;\n }\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.edgeDragging.gElement === undefined) {\n this.edgeDragging.gElement = $(document.querySelectorAll('.shadow-svg-class'));\n this.edgeDragging.pathElement = $(document.querySelectorAll('.shadow-svg-class')).find('path');\n this.edgeDragging.circleElement = $(document.querySelectorAll('.shadow-svg-class')).find('circle');\n }\n\n this.edgeDragging.gElement.css('display', 'block');\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n }\n event.stopPropagation();\n }\n\n public dragover(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n if (!this.edgeDragging.magnetActive && this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n if (this.edgeDragging.shadowDragStarted) {\n this.applyFunction(() => {\n this.edgeDragging.shadowDragStarted = false;\n });\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n });\n }\n }\n }\n\n public dragoverConnector(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n }\n }\n\n public dragleaveMagnet(event: DragEvent) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n\n this.edgeDragging.magnetActive = true;\n\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n event.preventDefault();\n event.stopPropagation();\n return false;\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n event.preventDefault();\n event.stopPropagation();\n return false;\n });\n }\n }\n }\n }\n\n public dragend(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n this.edgeDragging.isDragging = false;\n this.edgeDragging.dragPoint1 = null;\n this.edgeDragging.dragPoint2 = null;\n this.edgeDragging.dragLabel = null;\n event.stopPropagation();\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.gElement.css('display', 'none');\n }\n if (this.edgeDragging.prevEdge) {\n const edge = this.edgeDragging.prevEdge;\n this.edgeDragging.prevEdge = null;\n this.applyFunction(() => {\n this.modelService.edges.putEdge(edge);\n });\n }\n }\n }\n\n public drop(event: DragEvent, targetConnector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: targetConnector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n\n if (this.isValidEdgeCallback(this.draggedEdgeSource, targetConnector)) {\n this.edgeDragging.prevEdge = null;\n this.modelService.edges._addEdge(event, this.draggedEdgeSource, targetConnector, this.edgeDragging.dragLabel);\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n }\n }\n}\n\nexport interface EdgeDragging {\n isDragging: boolean;\n shadowDragStarted: boolean;\n dragPoint1: FcCoords;\n dragPoint2: FcCoords;\n dragLabel?: string;\n prevEdge?: FcEdge;\n magnetActive?: boolean;\n gElement?: JQuery;\n pathElement?: JQuery;\n circleElement?: JQuery;\n}\n","import { FcConnector, FcEdge, FcNode } from './ngx-flowchart.models';\n\nexport class FcMouseOverService {\n\n mouseoverscope: MouseOverScope = {\n connector: null,\n edge: null,\n node: null\n };\n\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(applyFunction: (fn: (...args: any[]) => T) => T) {\n this.applyFunction = applyFunction;\n }\n\n public nodeMouseOver(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = node;\n });\n }\n\n public nodeMouseOut(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = null;\n });\n }\n\n public connectorMouseEnter(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = connector;\n });\n }\n\n public connectorMouseLeave(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = null;\n });\n }\n\n public edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = edge;\n }\n\n public edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = null;\n }\n}\n\nexport interface MouseOverScope {\n connector: FcConnector;\n edge: FcEdge;\n node: FcNode;\n}\n","const regex = /(auto|scroll)/;\n\nconst style = (node: Element, prop: string): string =>\n getComputedStyle(node, null).getPropertyValue(prop);\n\nconst scroll = (node: Element) =>\n regex.test(\n style(node, 'overflow') +\n style(node, 'overflow-y') +\n style(node, 'overflow-x'));\n\nconst scrollparent = (node: HTMLElement): HTMLElement =>\n !node || node === document.body\n ? document.body\n : scroll(node)\n ? node\n : scrollparent(node.parentNode as HTMLElement);\n\nexport default scrollparent;\n","import { FcModelService } from './model.service';\nimport { FcRectBox } from './ngx-flowchart.models';\nimport scrollparent from './scrollparent';\n\ninterface Rectangle {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport class FcRectangleSelectService {\n\n private readonly selectRect: Rectangle = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n\n private readonly modelService: FcModelService;\n private readonly selectElement: HTMLElement;\n private readonly $canvasElement: JQuery;\n private readonly $scrollParent: JQuery;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n selectElement: HTMLElement,\n applyFunction: (fn: (...args: any[]) => T) => T) {\n this.modelService = modelService;\n this.selectElement = selectElement;\n this.$canvasElement = $(this.modelService.canvasHtmlElement);\n this.$scrollParent = $(scrollparent(this.modelService.canvasHtmlElement));\n this.applyFunction = applyFunction;\n }\n\n public mousedown(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && this.selectElement.hidden) {\n this.selectElement.hidden = false;\n const offset = this.$canvasElement.offset();\n this.selectRect.x1 = Math.round(e.pageX - offset.left);\n this.selectRect.y1 = Math.round(e.pageY - offset.top);\n this.selectRect.x2 = this.selectRect.x1;\n this.selectRect.y2 = this.selectRect.y1;\n this.updateSelectRect();\n }\n }\n\n public mousemove(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const offset = this.$canvasElement.offset();\n this.selectRect.x2 = Math.round(e.pageX - offset.left);\n this.selectRect.y2 = Math.round(e.pageY - offset.top);\n this.updateScroll(offset);\n this.updateSelectRect();\n }\n }\n\n private updateScroll(offset: JQuery.Coordinates) {\n const rect = this.$scrollParent[0].getBoundingClientRect();\n const bottom = rect.bottom - offset.top;\n const right = rect.right - offset.left;\n const top = rect.top - offset.top;\n const left = rect.left - offset.left;\n if (this.selectRect.y2 - top < 25) {\n const topScroll = 25 - (this.selectRect.y2 - top);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll - topScroll);\n } else if (bottom - this.selectRect.y2 < 40) {\n const bottomScroll = 40 - (bottom - this.selectRect.y2);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll + bottomScroll);\n }\n if (this.selectRect.x2 - left < 25) {\n const leftScroll = 25 - (this.selectRect.x2 - left);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll - leftScroll);\n } else if (right - this.selectRect.x2 < 40) {\n const rightScroll = 40 - (right - this.selectRect.x2);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll + rightScroll);\n }\n }\n\n public mouseup(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const rectBox = this.selectElement.getBoundingClientRect() as FcRectBox;\n this.selectElement.hidden = true;\n this.selectObjects(rectBox);\n }\n }\n\n private updateSelectRect() {\n const x3 = Math.min(this.selectRect.x1, this.selectRect.x2);\n const x4 = Math.max(this.selectRect.x1, this.selectRect.x2);\n const y3 = Math.min(this.selectRect.y1, this.selectRect.y2);\n const y4 = Math.max(this.selectRect.y1, this.selectRect.y2);\n this.selectElement.style.left = x3 + 'px';\n this.selectElement.style.top = y3 + 'px';\n this.selectElement.style.width = x4 - x3 + 'px';\n this.selectElement.style.height = y4 - y3 + 'px';\n }\n\n private selectObjects(rectBox: FcRectBox) {\n this.applyFunction(() => {\n this.modelService.selectAllInRect(rectBox);\n });\n }\n\n}\n\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef, EventEmitter,\n HostBinding,\n HostListener,\n Input,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnInit, Output\n} from '@angular/core';\nimport { FcCallbacks, FcEdge, FcModel, FcNode, FlowchartConstants, UserCallbacks, UserNodeCallbacks } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcNodeDraggingService } from './node-dragging.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcEdgeDraggingService } from './edge-dragging.service';\nimport { FcMouseOverService } from './mouseover.service';\nimport { FcRectangleSelectService } from './rectangleselect.service';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'fc-canvas',\n templateUrl: './ngx-flowchart.component.html',\n styleUrls: ['./ngx-flowchart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxFlowchartComponent implements OnInit, DoCheck {\n\n @HostBinding('attr.class')\n get canvasClass(): string {\n return FlowchartConstants.canvasClass;\n }\n\n @Input()\n model: FcModel;\n\n @Input()\n selectedObjects: any[];\n\n @Input()\n edgeStyle: string;\n\n @Input()\n userCallbacks: UserCallbacks;\n\n @Input()\n automaticResize: boolean;\n\n @Input()\n dragAnimation: string;\n\n @Input()\n nodeWidth: number;\n\n @Input()\n nodeHeight: number;\n\n @Input()\n dropTargetId: string;\n\n @Output()\n modelChanged = new EventEmitter();\n\n private fitModelSizeByDefaultValue = true;\n get fitModelSizeByDefault(): boolean {\n return this.fitModelSizeByDefaultValue;\n }\n @Input()\n set fitModelSizeByDefault(value: boolean) {\n this.fitModelSizeByDefaultValue = coerceBooleanProperty(value);\n }\n\n callbacks: FcCallbacks;\n\n userNodeCallbacks: UserNodeCallbacks;\n\n modelService: FcModelService;\n nodeDraggingService: FcNodeDraggingService;\n edgeDraggingService: FcEdgeDraggingService;\n mouseoverService: FcMouseOverService;\n rectangleSelectService: FcRectangleSelectService;\n\n arrowDefId: string;\n arrowDefIdSelected: string;\n\n flowchartConstants = FlowchartConstants;\n\n private nodesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private edgesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n constructor(private elementRef: ElementRef,\n private differs: IterableDiffers,\n private modelValidation: FcModelValidationService,\n public edgeDrawingService: FcEdgeDrawingService,\n private cd: ChangeDetectorRef,\n private zone: NgZone) {\n this.arrowDefId = 'arrow-' + Math.random();\n this.arrowDefIdSelected = this.arrowDefId + '-selected';\n }\n\n ngOnInit() {\n if (!this.dropTargetId && this.edgeStyle !== FlowchartConstants.curvedStyle && this.edgeStyle !== FlowchartConstants.lineStyle) {\n throw new Error('edgeStyle not supported.');\n }\n this.nodeHeight = this.nodeHeight || 200;\n this.nodeWidth = this.nodeWidth || 200;\n this.dragAnimation = this.dragAnimation || FlowchartConstants.dragAnimationRepaint;\n this.userCallbacks = this.userCallbacks || {};\n this.automaticResize = this.automaticResize || false;\n\n for (const key of Object.keys(this.userCallbacks)) {\n const callback = this.userCallbacks[key];\n if (typeof callback !== 'function' && key !== 'nodeCallbacks') {\n throw new Error('All callbacks should be functions.');\n }\n }\n\n this.userNodeCallbacks = this.userCallbacks.nodeCallbacks;\n\n const element = $(this.elementRef.nativeElement);\n\n this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.cd, this.selectedObjects,\n this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved,\n this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg'));\n\n if (this.dropTargetId) {\n this.modelService.dropTargetId = this.dropTargetId;\n }\n\n const applyFunction = this.zone.run.bind(this.zone);\n\n this.nodeDraggingService = new FcNodeDraggingService(this.modelService, applyFunction,\n this.automaticResize, this.dragAnimation);\n\n this.edgeDraggingService = new FcEdgeDraggingService(this.modelValidation, this.edgeDrawingService, this.modelService,\n this.model, this.userCallbacks.isValidEdge || null, applyFunction,\n this.dragAnimation, this.edgeStyle);\n\n this.mouseoverService = new FcMouseOverService(applyFunction);\n\n this.rectangleSelectService = new FcRectangleSelectService(this.modelService,\n element[0].querySelector('#select-rectangle'), applyFunction);\n\n this.callbacks = {\n nodeDragstart: this.nodeDraggingService.dragstart.bind(this.nodeDraggingService),\n nodeDragend: this.nodeDraggingService.dragend.bind(this.nodeDraggingService),\n edgeDragstart: this.edgeDraggingService.dragstart.bind(this.edgeDraggingService),\n edgeDragend: this.edgeDraggingService.dragend.bind(this.edgeDraggingService),\n edgeDrop: this.edgeDraggingService.drop.bind(this.edgeDraggingService),\n edgeDragoverConnector: this.edgeDraggingService.dragoverConnector.bind(this.edgeDraggingService),\n edgeDragoverMagnet: this.edgeDraggingService.dragoverMagnet.bind(this.edgeDraggingService),\n edgeDragleaveMagnet: this.edgeDraggingService.dragleaveMagnet.bind(this.edgeDraggingService),\n nodeMouseOver: this.mouseoverService.nodeMouseOver.bind(this.mouseoverService),\n nodeMouseOut: this.mouseoverService.nodeMouseOut.bind(this.mouseoverService),\n connectorMouseEnter: this.mouseoverService.connectorMouseEnter.bind(this.mouseoverService),\n connectorMouseLeave: this.mouseoverService.connectorMouseLeave.bind(this.mouseoverService),\n nodeClicked: (event, node) => {\n this.modelService.nodes.handleClicked(node, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n };\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n\n ngDoCheck(): void {\n if (this.model) {\n const nodesChange = this.nodesDiffer.diff(this.model.nodes);\n const edgesChange = this.edgesDiffer.diff(this.model.edges);\n let nodesChanged = false;\n let edgesChanged = false;\n if (nodesChange !== null) {\n nodesChange.forEachAddedItem(() => {\n nodesChanged = true;\n });\n nodesChange.forEachRemovedItem(() => {\n nodesChanged = true;\n });\n }\n if (edgesChange !== null) {\n edgesChange.forEachAddedItem(() => {\n edgesChanged = true;\n });\n edgesChange.forEachRemovedItem(() => {\n edgesChanged = true;\n });\n }\n if (nodesChanged) {\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n if (nodesChanged || edgesChanged) {\n this.cd.detectChanges();\n }\n }\n }\n\n getEdgeDAttribute(edge: FcEdge): string {\n return this.edgeDrawingService.getEdgeDAttribute(this.modelService.edges.sourceCoord(edge),\n this.modelService.edges.destCoord(edge), this.edgeStyle);\n }\n\n public adjustCanvasSize(fit?: boolean) {\n let maxX = 0;\n let maxY = 0;\n const element = $(this.elementRef.nativeElement);\n this.model.nodes.forEach((node) => {\n maxX = Math.max(node.x + this.nodeWidth, maxX);\n maxY = Math.max(node.y + this.nodeHeight, maxY);\n });\n let width;\n let height;\n if (fit) {\n width = maxX;\n height = maxY;\n } else {\n width = Math.max(maxX, element.prop('offsetWidth'));\n height = Math.max(maxY, element.prop('offsetHeight'));\n }\n element.css('width', width + 'px');\n element.css('height', height + 'px');\n }\n\n canvasClick(event: MouseEvent) {}\n\n edgeMouseDown(event: MouseEvent, edge: FcEdge) {\n event.stopPropagation();\n }\n\n edgeClick(event: MouseEvent, edge: FcEdge) {\n this.modelService.edges.handleEdgeMouseClick(edge, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeRemove(event: Event, edge: FcEdge) {\n this.modelService.edges.delete(edge);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeEdit(event: Event, edge: FcEdge) {\n if (this.userCallbacks.edgeEdit) {\n this.userCallbacks.edgeEdit(event, edge);\n }\n }\n\n edgeDoubleClick(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeDoubleClick) {\n this.userCallbacks.edgeDoubleClick(event, edge);\n }\n }\n\n edgeMouseOver(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeMouseOver) {\n this.userCallbacks.edgeMouseOver(event, edge);\n }\n }\n\n edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseEnter(event, edge);\n }\n\n edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseLeave(event, edge);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n this.nodeDraggingService.drop(event);\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n this.rectangleSelectService.mousedown(event);\n }\n\n @HostListener('mousemove', ['$event'])\n mousemove(event: MouseEvent) {\n this.rectangleSelectService.mousemove(event);\n }\n\n @HostListener('mouseup', ['$event'])\n mouseup(event: MouseEvent) {\n this.rectangleSelectService.mouseup(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-magnet]'\n})\nexport class FcMagnetDirective implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n connector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.magnetClass);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: DragEvent) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-connector]'\n})\nexport class FcConnectorDirective implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n connector: FcConnector;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.connectorClass);\n if (this.modelservice.isEditable()) {\n element.attr('draggable', 'true');\n this.updateConnectorClass();\n }\n this.modelservice.connectors.setHtmlElement(this.connector.id, element[0]);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateConnector = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (propName === 'mouseOverConnector') {\n updateConnector = true;\n }\n }\n }\n if (updateConnector && this.modelservice.isEditable()) {\n this.updateConnectorClass();\n }\n }\n\n private updateConnectorClass() {\n const element = $(this.elementRef.nativeElement);\n if (this.connector === this.mouseOverConnector) {\n element.addClass(FlowchartConstants.hoverClass);\n } else {\n element.removeClass(FlowchartConstants.hoverClass);\n }\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n // Skip - conflict with magnet\n /* if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDragoverConnector(event, this.connector);\n }*/\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragstart(event, this.connector);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n mouseenter(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseEnter(event, this.connector);\n }\n }\n\n @HostListener('mouseleave', ['$event'])\n mouseleave(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseLeave(event, this.connector);\n }\n }\n\n}\n","import {\n Component,\n ComponentFactoryResolver, Directive,\n ElementRef, HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {\n FC_NODE_COMPONENT_CONFIG,\n FcCallbacks,\n FcConnector,\n FcNode,\n FcNodeComponentConfig,\n FlowchartConstants,\n UserNodeCallbacks\n} from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Component({\n selector: 'fc-node',\n template: '',\n styleUrls: ['./node.component.scss']\n})\nexport class FcNodeContainerComponent implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n @HostBinding('attr.id')\n get nodeId(): string {\n return this.node.id;\n }\n\n @HostBinding('style.top')\n get top(): string {\n return this.node.y + 'px';\n }\n\n @HostBinding('style.left')\n get left(): string {\n return this.node.x + 'px';\n }\n\n nodeComponent: FcNodeComponent;\n\n @ViewChild('nodeContent', {read: ViewContainerRef, static: true}) nodeContentContainer: ViewContainerRef;\n\n constructor(@Inject(FC_NODE_COMPONENT_CONFIG) private nodeComponentConfig: FcNodeComponentConfig,\n private elementRef: ElementRef,\n private componentFactoryResolver: ComponentFactoryResolver) {\n }\n\n ngOnInit(): void {\n if (!this.userNodeCallbacks) {\n this.userNodeCallbacks = {};\n }\n this.userNodeCallbacks.nodeEdit = this.userNodeCallbacks.nodeEdit || (() => {});\n this.userNodeCallbacks.doubleClick = this.userNodeCallbacks.doubleClick || (() => {});\n this.userNodeCallbacks.mouseDown = this.userNodeCallbacks.mouseDown || (() => {});\n this.userNodeCallbacks.mouseEnter = this.userNodeCallbacks.mouseEnter || (() => {});\n this.userNodeCallbacks.mouseLeave = this.userNodeCallbacks.mouseLeave || (() => {});\n\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.nodeClass);\n if (!this.node.readonly) {\n element.attr('draggable', 'true');\n }\n this.updateNodeClass();\n this.modelservice.nodes.setHtmlElement(this.node.id, element[0]);\n this.nodeContentContainer.clear();\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.nodeComponentConfig.nodeComponentType);\n const componentRef = this.nodeContentContainer.createComponent(componentFactory);\n this.nodeComponent = componentRef.instance;\n this.nodeComponent.callbacks = this.callbacks;\n this.nodeComponent.userNodeCallbacks = this.userNodeCallbacks;\n this.nodeComponent.node = this.node;\n this.nodeComponent.modelservice = this.modelservice;\n this.updateNodeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateNode = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (['selected', 'edit', 'underMouse', 'mouseOverConnector', 'dragging'].includes(propName)) {\n updateNode = true;\n }\n }\n }\n if (updateNode) {\n this.updateNodeClass();\n this.updateNodeComponent();\n }\n }\n\n private updateNodeClass() {\n const element = $(this.elementRef.nativeElement);\n this.toggleClass(element, FlowchartConstants.selectedClass, this.selected);\n this.toggleClass(element, FlowchartConstants.editClass, this.edit);\n this.toggleClass(element, FlowchartConstants.hoverClass, this.underMouse);\n this.toggleClass(element, FlowchartConstants.draggingClass, this.dragging);\n }\n\n private updateNodeComponent() {\n this.nodeComponent.selected = this.selected;\n this.nodeComponent.edit = this.edit;\n this.nodeComponent.underMouse = this.underMouse;\n this.nodeComponent.mouseOverConnector = this.mouseOverConnector;\n this.nodeComponent.dragging = this.dragging;\n }\n\n private toggleClass(element: JQuery, clazz: string, set: boolean) {\n if (set) {\n element.addClass(clazz);\n } else {\n element.removeClass(clazz);\n }\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragend(event);\n }\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeClicked(event, this.node);\n }\n }\n\n @HostListener('mouseover', ['$event'])\n mouseover(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOver(event, this.node);\n }\n }\n\n @HostListener('mouseout', ['$event'])\n mouseout(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOut(event, this.node);\n }\n }\n\n}\n\nexport abstract class FcNodeComponent implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n flowchartConstants = FlowchartConstants;\n\n ngOnInit(): void {\n }\n\n}\n","import { Component } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\n@Component({\n selector: 'fc-default-node',\n templateUrl: './default-node.component.html',\n styleUrls: ['./default-node.component.scss']\n})\nexport class DefaultFcNodeComponent extends FcNodeComponent {\n\n constructor() {\n super();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { NgxFlowchartComponent } from './ngx-flowchart.component';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { CommonModule } from '@angular/common';\nimport { FcMagnetDirective } from './magnet.directive';\nimport { FcConnectorDirective } from './connector.directive';\nimport { FcNodeContainerComponent } from './node.component';\nimport { FC_NODE_COMPONENT_CONFIG } from './ngx-flowchart.models';\nimport { DefaultFcNodeComponent } from './default-node.component';\n\n@NgModule({\n entryComponents: [\n DefaultFcNodeComponent\n ],\n declarations: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n FcNodeContainerComponent,\n DefaultFcNodeComponent],\n providers: [\n FcModelValidationService,\n FcEdgeDrawingService,\n {\n provide: FC_NODE_COMPONENT_CONFIG,\n useValue: {\n nodeComponentType: DefaultFcNodeComponent\n }\n }\n ],\n imports: [\n CommonModule\n ],\n exports: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n DefaultFcNodeComponent]\n})\nexport class NgxFlowchartModule { }\n"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ngx-flowchart.js","sources":["ng://ngx-flowchart/lib/ngx-flowchart.models.ts","ng://ngx-flowchart/lib/model.service.ts","ng://ngx-flowchart/lib/modelvalidation.service.ts","ng://ngx-flowchart/lib/node-dragging.service.ts","ng://ngx-flowchart/lib/edge-drawing.service.ts","ng://ngx-flowchart/lib/edge-dragging.service.ts","ng://ngx-flowchart/lib/mouseover.service.ts","ng://ngx-flowchart/lib/scrollparent.ts","ng://ngx-flowchart/lib/rectangleselect.service.ts","ng://ngx-flowchart/lib/ngx-flowchart.component.ts","ng://ngx-flowchart/lib/magnet.directive.ts","ng://ngx-flowchart/lib/connector.directive.ts","ng://ngx-flowchart/lib/node.component.ts","ng://ngx-flowchart/lib/default-node.component.ts","ng://ngx-flowchart/lib/ngx-flowchart.module.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { InjectionToken, Type } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\nexport const FC_NODE_COMPONENT_CONFIG = new InjectionToken('fc-node.component.config');\n\nexport interface FcNodeComponentConfig {\n nodeComponentType: Type;\n}\n\nconst htmlPrefix = 'fc';\nconst leftConnectorType = 'leftConnector';\nconst rightConnectorType = 'rightConnector';\n\nexport const FlowchartConstants = {\n htmlPrefix,\n leftConnectorType,\n rightConnectorType,\n curvedStyle: 'curved',\n lineStyle: 'line',\n dragAnimationRepaint: 'repaint',\n dragAnimationShadow: 'shadow',\n canvasClass: htmlPrefix + '-canvas',\n selectedClass: htmlPrefix + '-selected',\n editClass: htmlPrefix + '-edit',\n activeClass: htmlPrefix + '-active',\n hoverClass: htmlPrefix + '-hover',\n draggingClass: htmlPrefix + '-dragging',\n edgeClass: htmlPrefix + '-edge',\n edgeLabelClass: htmlPrefix + '-edge-label',\n connectorClass: htmlPrefix + '-connector',\n magnetClass: htmlPrefix + '-magnet',\n nodeClass: htmlPrefix + '-node',\n nodeOverlayClass: htmlPrefix + '-node-overlay',\n leftConnectorClass: htmlPrefix + '-' + leftConnectorType + 's',\n rightConnectorClass: htmlPrefix + '-' + rightConnectorType + 's',\n canvasResizeThreshold: 200,\n canvasResizeStep: 200\n};\n\n\nexport interface FcCoords {\n x?: number;\n y?: number;\n}\n\nexport interface FcRectBox {\n top: number;\n left: number;\n right: number;\n bottom: number;\n}\n\nexport interface FcConnector {\n id: string;\n type: string;\n}\n\nexport interface FcNode extends FcCoords {\n id: string;\n name: string;\n connectors: Array;\n readonly?: boolean;\n [key: string]: any;\n}\n\nexport interface FcEdge {\n label?: string;\n source?: string;\n destination?: string;\n active?: boolean;\n}\n\nexport interface FcItemInfo {\n node?: FcNode;\n edge?: FcEdge;\n}\n\nexport interface FcModel {\n nodes: Array;\n edges: Array;\n}\n\nexport interface UserCallbacks {\n dropNode?: (event: Event, node: FcNode) => void;\n createEdge?: (event: Event, edge: FcEdge) => Observable;\n edgeAdded?: (edge: FcEdge) => void;\n nodeRemoved?: (node: FcNode) => void;\n edgeRemoved?: (edge: FcEdge) => void;\n edgeDoubleClick?: (event: MouseEvent, edge: FcEdge) => void;\n edgeMouseOver?: (event: MouseEvent, edge: FcEdge) => void;\n isValidEdge?: (source: FcConnector, destination: FcConnector) => boolean;\n edgeEdit?: (event: Event, edge: FcEdge) => void;\n nodeCallbacks?: UserNodeCallbacks;\n}\n\nexport interface UserNodeCallbacks {\n nodeEdit?: (event: MouseEvent, node: FcNode) => void;\n doubleClick?: (event: MouseEvent, node: FcNode) => void;\n mouseDown?: (event: MouseEvent, node: FcNode) => void;\n mouseEnter?: (event: MouseEvent, node: FcNode) => void;\n mouseLeave?: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcCallbacks {\n nodeDragstart: (event: DragEvent, node: FcNode) => void;\n nodeDragend: (event: DragEvent) => void;\n edgeDragstart: (event: DragEvent, connector: FcConnector) => void;\n edgeDragend: (event: DragEvent) => void;\n edgeDrop: (event: DragEvent, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: DragEvent) => void;\n nodeMouseOver: (event: MouseEvent, node: FcNode) => void;\n nodeMouseOut: (event: MouseEvent, node: FcNode) => void;\n connectorMouseEnter: (event: MouseEvent, connector: FcConnector) => void;\n connectorMouseLeave: (event: MouseEvent, connector: FcConnector) => void;\n nodeClicked: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcAdjacentList {\n [id: string]: {\n incoming: number;\n outgoing: Array;\n };\n}\n\nclass BaseError {\n constructor() {\n Error.apply(this, arguments);\n }\n}\n\nObject.defineProperty(BaseError, 'prototype', new Error());\n\nexport class ModelvalidationError extends BaseError {\n constructor(public message: string) {\n super();\n }\n}\n\nexport function fcTopSort(graph: FcModel): Array | null {\n const adjacentList: FcAdjacentList = {};\n graph.nodes.forEach((node) => {\n adjacentList[node.id] = {incoming: 0, outgoing: []};\n });\n graph.edges.forEach((edge) => {\n const sourceNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.source;\n });\n })[0];\n const destinationNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.destination;\n });\n })[0];\n adjacentList[sourceNode.id].outgoing.push(destinationNode.id);\n adjacentList[destinationNode.id].incoming++;\n });\n const orderedNodes: string[] = [];\n const sourceNodes: string[] = [];\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming === 0) {\n sourceNodes.push(node);\n }\n }\n while (sourceNodes.length !== 0) {\n const sourceNode = sourceNodes.pop();\n for (let i = 0; i < adjacentList[sourceNode].outgoing.length; i++) {\n const destinationNode = adjacentList[sourceNode].outgoing[i];\n adjacentList[destinationNode].incoming--;\n if (adjacentList[destinationNode].incoming === 0) {\n sourceNodes.push(destinationNode);\n }\n adjacentList[sourceNode].outgoing.splice(i, 1);\n i--;\n }\n orderedNodes.push(sourceNode);\n }\n let hasEdges = false;\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming !== 0) {\n hasEdges = true;\n }\n }\n if (hasEdges) {\n return null;\n } else {\n return orderedNodes;\n }\n}\n","import { FcModelValidationService } from './modelvalidation.service';\nimport { FcConnector, FcCoords, FcEdge, FcItemInfo, FcModel, FcNode, FcRectBox } from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { ChangeDetectorRef, EventEmitter } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\nexport class FcModelService {\n\n modelValidation: FcModelValidationService;\n model: FcModel;\n private readonly detectChangesSubject: Subject;\n selectedObjects: any[];\n\n connectorsHtmlElements: HtmlElementMap = {};\n nodesHtmlElements: HtmlElementMap = {};\n canvasHtmlElement: HTMLElement = null;\n dragImage: HTMLImageElement = null;\n svgHtmlElement: SVGElement = null;\n\n dropNode: (event: Event, node: FcNode) => void;\n createEdge: (event: Event, edge: FcEdge) => Observable;\n edgeAddedCallback: (edge: FcEdge) => void;\n nodeRemovedCallback: (node: FcNode) => void;\n edgeRemovedCallback: (edge: FcEdge) => void;\n\n dropTargetId: string;\n\n private readonly modelChanged: EventEmitter;\n private readonly debouncer = new Subject();\n\n connectors: ConnectorsModel;\n nodes: NodesModel;\n edges: EdgesModel;\n\n constructor(modelValidation: FcModelValidationService,\n model: FcModel,\n modelChanged: EventEmitter,\n detectChangesSubject: Subject,\n selectedObjects: any[],\n dropNode: (event: Event, node: FcNode) => void,\n createEdge: (event: Event, edge: FcEdge) => Observable,\n edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void,\n canvasHtmlElement: HTMLElement,\n svgHtmlElement: SVGElement) {\n\n this.modelValidation = modelValidation;\n this.model = model;\n this.modelChanged = modelChanged;\n this.detectChangesSubject = detectChangesSubject;\n this.canvasHtmlElement = canvasHtmlElement;\n this.svgHtmlElement = svgHtmlElement;\n this.modelValidation.validateModel(this.model);\n this.selectedObjects = selectedObjects;\n\n this.dropNode = dropNode || (() => {});\n this.createEdge = createEdge || ((event, edge) => of({...edge, label: 'label'}));\n this.edgeAddedCallback = edgeAddedCallback || (() => {});\n this.nodeRemovedCallback = nodeRemovedCallback || (() => {});\n this.edgeRemovedCallback = edgeRemovedCallback || (() => {});\n\n this.connectors = new ConnectorsModel(this);\n this.nodes = new NodesModel(this);\n this.edges = new EdgesModel(this);\n\n this.debouncer\n .pipe(debounceTime(100))\n .subscribe(() => this.modelChanged.emit());\n }\n\n public notifyModelChanged() {\n this.debouncer.next();\n }\n\n public detectChanges() {\n setTimeout(() => {\n this.detectChangesSubject.next();\n }, 0);\n }\n\n public selectObject(object: any) {\n if (this.isEditable()) {\n if (this.selectedObjects.indexOf(object) === -1) {\n this.selectedObjects.push(object);\n }\n }\n }\n\n public deselectObject(object: any) {\n if (this.isEditable()) {\n const index = this.selectedObjects.indexOf(object);\n if (index === -1) {\n throw new Error('Tried to deselect an unselected object');\n }\n this.selectedObjects.splice(index, 1);\n }\n }\n\n public toggleSelectedObject(object: any) {\n if (this.isSelectedObject(object)) {\n this.deselectObject(object);\n } else {\n this.selectObject(object);\n }\n }\n\n public isSelectedObject(object: any): boolean {\n return this.selectedObjects.indexOf(object) !== -1;\n }\n\n public selectAll() {\n this.model.nodes.forEach(node => {\n if (!node.readonly) {\n this.nodes.select(node);\n }\n });\n this.model.edges.forEach(edge => {\n this.edges.select(edge);\n });\n this.detectChanges();\n }\n\n public deselectAll() {\n this.selectedObjects.splice(0, this.selectedObjects.length);\n this.detectChanges();\n }\n\n public isEditObject(object: any): boolean {\n return this.selectedObjects.length === 1 &&\n this.selectedObjects.indexOf(object) !== -1;\n }\n\n private inRectBox(x: number, y: number, rectBox: FcRectBox): boolean {\n return x >= rectBox.left && x <= rectBox.right &&\n y >= rectBox.top && y <= rectBox.bottom;\n }\n\n public getItemInfoAtPoint(x: number, y: number): FcItemInfo {\n return {\n node: this.getNodeAtPoint(x, y),\n edge: this.getEdgeAtPoint(x, y)\n };\n }\n\n public getNodeAtPoint(x: number, y: number): FcNode {\n for (const node of this.model.nodes) {\n const element = this.nodes.getHtmlElement(node.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (x >= nodeElementBox.left && x <= nodeElementBox.right\n && y >= nodeElementBox.top && y <= nodeElementBox.bottom) {\n return node;\n }\n }\n return null;\n }\n\n public getEdgeAtPoint(x: number, y: number): FcEdge {\n const element = document.elementFromPoint(x, y);\n const id = element.id;\n let edgeIndex = -1;\n if (id) {\n if (id.startsWith('fc-edge-path-')) {\n edgeIndex = Number(id.substring('fc-edge-path-'.length));\n } else if (id.startsWith('fc-edge-label-')) {\n edgeIndex = Number(id.substring('fc-edge-label-'.length));\n }\n }\n if (edgeIndex > -1) {\n return this.model.edges[edgeIndex];\n }\n return null;\n }\n\n public selectAllInRect(rectBox: FcRectBox) {\n this.model.nodes.forEach((value) => {\n const element = this.nodes.getHtmlElement(value.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (!value.readonly) {\n const x = nodeElementBox.left + nodeElementBox.width / 2;\n const y = nodeElementBox.top + nodeElementBox.height / 2;\n if (this.inRectBox(x, y, rectBox)) {\n this.nodes.select(value);\n } else {\n if (this.nodes.isSelected(value)) {\n this.nodes.deselect(value);\n }\n }\n }\n });\n const canvasElementBox = this.canvasHtmlElement.getBoundingClientRect();\n this.model.edges.forEach((value) => {\n const start = this.edges.sourceCoord(value);\n const end = this.edges.destCoord(value);\n const x = (start.x + end.x) / 2 + canvasElementBox.left;\n const y = (start.y + end.y) / 2 + canvasElementBox.top;\n if (this.inRectBox(x, y, rectBox)) {\n this.edges.select(value);\n } else {\n if (this.edges.isSelected(value)) {\n this.edges.deselect(value);\n }\n }\n });\n }\n\n public deleteSelected() {\n const edgesToDelete = this.edges.getSelectedEdges();\n edgesToDelete.forEach((edge) => {\n this.edges.delete(edge);\n });\n const nodesToDelete = this.nodes.getSelectedNodes();\n nodesToDelete.forEach((node) => {\n this.nodes.delete(node);\n });\n }\n\n public isEditable(): boolean {\n return this.dropTargetId === undefined;\n }\n\n public isDropSource(): boolean {\n return this.dropTargetId !== undefined;\n }\n\n public getDragImage(): HTMLImageElement {\n if (!this.dragImage) {\n this.dragImage = new Image();\n this.dragImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n this.dragImage.style.visibility = 'hidden';\n }\n return this.dragImage;\n }\n}\n\ninterface HtmlElementMap { [id: string]: HTMLElement; }\n\nabstract class AbstractFcModel {\n\n modelService: FcModelService;\n\n protected constructor(modelService: FcModelService) {\n this.modelService = modelService;\n }\n\n public select(object: T) {\n this.modelService.selectObject(object);\n }\n\n public deselect(object: T) {\n this.modelService.deselectObject(object);\n }\n\n public toggleSelected(object: T) {\n this.modelService.toggleSelectedObject(object);\n }\n\n public isSelected(object: T): boolean {\n return this.modelService.isSelectedObject(object);\n }\n\n public isEdit(object: T): boolean {\n return this.modelService.isEditObject(object);\n }\n}\n\nclass ConnectorsModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnector(connectorId: string): FcConnector {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n for (const connector of node.connectors) {\n if (connector.id === connectorId) {\n return connector;\n }\n }\n }\n }\n\n public getHtmlElement(connectorId: string): HTMLElement {\n return this.modelService.connectorsHtmlElements[connectorId];\n }\n\n public setHtmlElement(connectorId: string, element: HTMLElement) {\n this.modelService.connectorsHtmlElements[connectorId] = element;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const element = this.getHtmlElement(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (element === null || element === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n const connectorElementBox = element.getBoundingClientRect();\n const canvasElementBox = canvas.getBoundingClientRect();\n let coords: FcCoords = {\n x: connectorElementBox.left - canvasElementBox.left,\n y: connectorElementBox.top - canvasElementBox.top\n };\n if (centered) {\n coords = {\n x: Math.round(coords.x + element.offsetWidth / 2),\n y: Math.round(coords.y + element.offsetHeight / 2)\n };\n }\n return coords;\n }\n\n public getCoords(connectorId: string): FcCoords {\n return this._getCoords(connectorId, false);\n }\n\n public getCenteredCoord(connectorId: string): FcCoords {\n return this._getCoords(connectorId, true);\n }\n}\n\nclass NodesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnectorsByType(node: FcNode, type: string): Array {\n return node.connectors.filter((connector) => {\n return connector.type === type;\n });\n }\n\n private _addConnector(node: FcNode, connector: FcConnector) {\n node.connectors.push(connector);\n try {\n this.modelService.modelValidation.validateNode(node);\n } catch (error) {\n node.connectors.splice(node.connectors.indexOf(connector), 1);\n throw error;\n }\n }\n\n public delete(node: FcNode) {\n if (this.isSelected(node)) {\n this.deselect(node);\n }\n const model = this.modelService.model;\n const index = model.nodes.indexOf(node);\n if (index === -1) {\n if (node === undefined) {\n throw new Error('Passed undefined');\n }\n throw new Error('Tried to delete not existing node');\n }\n const connectorIds = this.getConnectorIds(node);\n for (let i = 0; i < model.edges.length; i++) {\n const edge = model.edges[i];\n if (connectorIds.indexOf(edge.source) !== -1 || connectorIds.indexOf(edge.destination) !== -1) {\n this.modelService.edges.delete(edge);\n i--;\n }\n }\n model.nodes.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.nodeRemovedCallback(node);\n }\n\n public getSelectedNodes(): Array {\n const model = this.modelService.model;\n return model.nodes.filter((node) => {\n return this.modelService.nodes.isSelected(node);\n });\n }\n\n public handleClicked(node: FcNode, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.nodes.toggleSelected(node);\n } else {\n this.modelService.deselectAll();\n this.modelService.nodes.select(node);\n }\n }\n\n private _addNode(node: FcNode) {\n const model = this.modelService.model;\n try {\n model.nodes.push(node);\n this.modelService.modelValidation.validateNodes(model.nodes);\n } catch (error) {\n model.nodes.splice(model.nodes.indexOf(node), 1);\n throw error;\n }\n }\n\n public getConnectorIds(node: FcNode): Array {\n return node.connectors.map((connector) => {\n return connector.id;\n });\n }\n\n public getNodeByConnectorId(connectorId: string): FcNode {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n const connectorIds = this.getConnectorIds(node);\n if (connectorIds.indexOf(connectorId) > -1) {\n return node;\n }\n }\n return null;\n }\n\n public getHtmlElement(nodeId: string): HTMLElement {\n return this.modelService.nodesHtmlElements[nodeId];\n }\n\n public setHtmlElement(nodeId: string, element: HTMLElement) {\n this.modelService.nodesHtmlElements[nodeId] = element;\n this.modelService.detectChanges();\n }\n\n}\n\nclass EdgesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public ready(edge: FcEdge): boolean {\n const source = this.modelService.connectors.getHtmlElement(edge.source);\n const destination = this.modelService.connectors.getHtmlElement(edge.destination);\n return source !== undefined && destination !== undefined;\n }\n\n public sourceCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.source);\n }\n\n public destCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.destination);\n }\n\n public delete(edge: FcEdge) {\n const model = this.modelService.model;\n const index = model.edges.indexOf(edge);\n if (index === -1) {\n throw new Error('Tried to delete not existing edge');\n }\n if (this.isSelected(edge)) {\n this.deselect(edge);\n }\n model.edges.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.edgeRemovedCallback(edge);\n }\n\n public getSelectedEdges(): Array {\n const model = this.modelService.model;\n return model.edges.filter((edge) => {\n return this.modelService.edges.isSelected(edge);\n });\n }\n\n public handleEdgeMouseClick(edge: FcEdge, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.edges.toggleSelected(edge);\n } else {\n this.modelService.deselectAll();\n this.modelService.edges.select(edge);\n }\n }\n\n public putEdge(edge: FcEdge) {\n const model = this.modelService.model;\n model.edges.push(edge);\n this.modelService.notifyModelChanged();\n }\n\n public _addEdge(event: Event, sourceConnector: FcConnector, destConnector: FcConnector, label: string) {\n this.modelService.modelValidation.validateConnector(sourceConnector);\n this.modelService.modelValidation.validateConnector(destConnector);\n const edge: FcEdge = {};\n edge.source = sourceConnector.id;\n edge.destination = destConnector.id;\n edge.label = label;\n const model = this.modelService.model;\n this.modelService.modelValidation.validateEdges(model.edges.concat([edge]), model.nodes);\n this.modelService.createEdge(event, edge).subscribe(\n (created) => {\n model.edges.push(created);\n this.modelService.notifyModelChanged();\n this.modelService.edgeAddedCallback(created);\n }\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FcConnector, FcEdge, FcModel, FcNode, fcTopSort, ModelvalidationError } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcModelValidationService {\n\n constructor() { }\n\n public validateModel(model: FcModel): FcModel {\n this.validateNodes(model.nodes);\n this._validateEdges(model.edges, model.nodes);\n return model;\n }\n\n public validateNodes(nodes: Array): Array {\n const ids: string[] = [];\n nodes.forEach((node) => {\n this.validateNode(node);\n if (ids.indexOf(node.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n ids.push(node.id);\n });\n const connectorIds: string[] = [];\n nodes.forEach((node) => {\n node.connectors.forEach((connector) => {\n if (connectorIds.indexOf(connector.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n connectorIds.push(connector.id);\n });\n });\n return nodes;\n }\n\n public validateNode(node: FcNode): FcNode {\n if (node.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (typeof node.name !== 'string') {\n throw new ModelvalidationError('Name not valid.');\n }\n if (typeof node.x !== 'number' || node.x < 0 || Math.round(node.x) !== node.x) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (typeof node.y !== 'number' || node.y < 0 || Math.round(node.y) !== node.y) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (!Array.isArray(node.connectors)) {\n throw new ModelvalidationError('Connectors not valid.');\n }\n node.connectors.forEach((connector) => {\n this.validateConnector(connector);\n });\n return node;\n }\n\n private _validateEdges(edges: Array, nodes: Array): Array {\n edges.forEach((edge) => {\n this._validateEdge(edge, nodes);\n });\n edges.forEach((edge1, index1) => {\n edges.forEach((edge2, index2) => {\n if (index1 !== index2) {\n if ((edge1.source === edge2.source && edge1.destination === edge2.destination) ||\n (edge1.source === edge2.destination && edge1.destination === edge2.source)) {\n throw new ModelvalidationError('Duplicated edge.');\n }\n }\n });\n });\n if (fcTopSort({nodes, edges}) === null) {\n throw new ModelvalidationError('Graph has a circle.');\n }\n return edges;\n }\n\n public validateEdges(edges: Array, nodes: Array): Array {\n this.validateNodes(nodes);\n return this._validateEdges(edges, nodes);\n }\n\n private _validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n if (edge.source === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n if (edge.destination === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (edge.source === edge.destination) {\n throw new ModelvalidationError('Edge with same source and destination connectors.');\n }\n const sourceNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.source))[0];\n if (sourceNode === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n const destinationNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.destination))[0];\n if (destinationNode === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (sourceNode === destinationNode) {\n throw new ModelvalidationError('Edge with same source and destination nodes.');\n }\n return edge;\n }\n\n public validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n this.validateNodes(nodes);\n return this._validateEdge(edge, nodes);\n }\n\n public validateConnector(connector: FcConnector): FcConnector {\n if (connector.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (connector.type === undefined || connector.type === null || typeof connector.type !== 'string') {\n throw new ModelvalidationError('Type not valid.');\n }\n return connector;\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcCoords, FcNode, FlowchartConstants } from './ngx-flowchart.models';\n\nconst nodeDropScope: NodeDropScope = {\n dropElement: null\n};\n\nexport class FcNodeDraggingService {\n\n nodeDraggingScope: NodeDraggingScope = {\n shadowDragStarted: false,\n dropElement: null,\n draggedNodes: [],\n shadowElements: []\n };\n\n private dragOffsets: FcCoords[] = [];\n private draggedElements: HTMLElement[] = [];\n\n private destinationHtmlElements: HTMLElement[] = [];\n private oldDisplayStyles: string[] = [];\n\n private readonly modelService: FcModelService;\n private readonly automaticResize: boolean;\n private readonly dragAnimation: string;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n applyFunction: (fn: (...args: any[]) => T) => T,\n automaticResize: boolean, dragAnimation: string) {\n this.modelService = modelService;\n this.automaticResize = automaticResize;\n this.dragAnimation = dragAnimation;\n this.applyFunction = applyFunction;\n }\n\n private getCoordinate(coordinate: number, max: number): number {\n coordinate = Math.max(coordinate, 0);\n coordinate = Math.min(coordinate, max);\n return coordinate;\n }\n\n private getXCoordinate(x: number): number {\n return this.getCoordinate(x, this.modelService.canvasHtmlElement.offsetWidth);\n }\n\n private getYCoordinate(y: number): number {\n return this.getCoordinate(y, this.modelService.canvasHtmlElement.offsetHeight);\n }\n\n private resizeCanvas(draggedNode: FcNode, nodeElement: HTMLElement) {\n if (this.automaticResize && !this.modelService.isDropSource()) {\n const canvasElement = this.modelService.canvasHtmlElement;\n if (canvasElement.offsetWidth < draggedNode.x + nodeElement.offsetWidth + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.width = canvasElement.offsetWidth + FlowchartConstants.canvasResizeStep + 'px';\n }\n if (canvasElement.offsetHeight < draggedNode.y + nodeElement.offsetHeight + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.height = canvasElement.offsetHeight + FlowchartConstants.canvasResizeStep + 'px';\n }\n }\n }\n\n public isDraggingNode(node: FcNode): boolean {\n return this.nodeDraggingScope.draggedNodes.includes(node);\n }\n\n public dragstart(event: DragEvent, node: FcNode) {\n if (node.readonly) {\n return;\n }\n this.dragOffsets.length = 0;\n this.draggedElements.length = 0;\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.nodeDraggingScope.shadowElements.length = 0;\n this.destinationHtmlElements.length = 0;\n this.oldDisplayStyles.length = 0;\n const elements: Array> = [];\n const nodes: Array = [];\n if (this.modelService.nodes.isSelected(node)) {\n const selectedNodes = this.modelService.nodes.getSelectedNodes();\n for (const selectedNode of selectedNodes) {\n const element = $(this.modelService.nodes.getHtmlElement(selectedNode.id));\n elements.push(element);\n nodes.push(selectedNode);\n }\n } else {\n elements.push($(event.target as HTMLElement));\n nodes.push(node);\n }\n const offsetsX: number[] = [];\n const offsetsY: number[] = [];\n for (const element of elements) {\n offsetsX.push(parseInt(element.css('left'), 10) - event.clientX);\n offsetsY.push(parseInt(element.css('top'), 10) - event.clientY);\n }\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n if (this.modelService.isDropSource()) {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n nodeDropScope.dropElement = elements[0][0].cloneNode(true) as NodeDropElement;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n nodeDropScope.dropElement.offsetInfo = {\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n nodeDropScope.dropElement.style.position = 'absolute';\n nodeDropScope.dropElement.style.pointerEvents = 'none';\n nodeDropScope.dropElement.style.zIndex = '9999';\n\n document.body.appendChild(nodeDropScope.dropElement);\n const dropNodeInfo: DropNodeInfo = {\n node,\n dropTargetId: this.modelService.dropTargetId,\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n originalEvent.dataTransfer.setData('text', JSON.stringify(dropNodeInfo));\n\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n const target: HTMLElement = event.target as HTMLElement;\n this.destinationHtmlElements.push(target);\n this.oldDisplayStyles.push(target.style.display);\n target.style.display = 'none';\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n return;\n }\n this.nodeDraggingScope.draggedNodes = nodes;\n for (let i = 0; i < elements.length; i++) {\n this.draggedElements.push(elements[i][0]);\n this.dragOffsets.push(\n {\n x: offsetsX[i],\n y: offsetsY[i]\n }\n );\n }\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n for (let i = 0; i < this.draggedElements.length; i++) {\n const dragOffset = this.dragOffsets[i];\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = $(`
` +\n `

${draggedNode.name}

`);\n const targetInnerNode = $(this.draggedElements[i]).children()[0];\n shadowElement.children()[0].style.backgroundColor = targetInnerNode.style.backgroundColor;\n this.nodeDraggingScope.shadowElements.push(shadowElement);\n this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[i][0]);\n }\n }\n originalEvent.dataTransfer.setData('text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n for (let i = 0; i < this.draggedElements.length; i++) {\n this.destinationHtmlElements.push(this.draggedElements[i]);\n this.oldDisplayStyles.push(this.destinationHtmlElements[i].style.display);\n this.destinationHtmlElements[i].style.display = 'none';\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: DragEvent): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n const infoText = originalEvent.dataTransfer.getData('text');\n if (infoText) {\n let dropNodeInfo: DropNodeInfo = null;\n try {\n dropNodeInfo = JSON.parse(infoText);\n } catch (e) {}\n if (dropNodeInfo && dropNodeInfo.dropTargetId) {\n if (this.modelService.canvasHtmlElement.id &&\n this.modelService.canvasHtmlElement.id === dropNodeInfo.dropTargetId) {\n dropNode = dropNodeInfo.node;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n const x = event.clientX - offset.left;\n const y = event.clientY - offset.top;\n dropNode.x = Math.round(this.getXCoordinate(dropNodeInfo.offsetX + x));\n dropNode.y = Math.round(this.getYCoordinate(dropNodeInfo.offsetY + y));\n }\n }\n }\n if (dropNode) {\n this.modelService.dropNode(event, dropNode);\n event.preventDefault();\n return false;\n } else if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = Math.round(this.getXCoordinate(dragOffset.x + event.clientX));\n draggedNode.y = Math.round(this.getYCoordinate(dragOffset.y + event.clientY));\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n }\n\n public dragover(event: DragEvent) {\n if (nodeDropScope.dropElement) {\n const offsetInfo = nodeDropScope.dropElement.offsetInfo;\n nodeDropScope.dropElement.style.left = (offsetInfo.offsetX + event.clientX) + 'px';\n nodeDropScope.dropElement.style.top = (offsetInfo.offsetY + event.clientY) + 'px';\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n this.destinationHtmlElements[0].style.display = this.oldDisplayStyles[0];\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n event.preventDefault();\n return;\n }\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return;\n }\n if (!this.nodeDraggingScope.draggedNodes.length) {\n event.preventDefault();\n return;\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = this.getXCoordinate(dragOffset.x + event.clientX);\n draggedNode.y = this.getYCoordinate(dragOffset.y + event.clientY);\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n this.destinationHtmlElements[i].style.display = this.oldDisplayStyles[i];\n }\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n this.nodeDraggingScope.shadowElements[i].css('left', this.getXCoordinate(dragOffset.x + event.clientX) + 'px');\n this.nodeDraggingScope.shadowElements[i].css('top', this.getYCoordinate(dragOffset.y + event.clientY) + 'px');\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n }\n }\n }\n\n public dragend(event: DragEvent) {\n this.applyFunction(() => {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n if (this.modelService.isDropSource()) {\n return;\n }\n if (this.nodeDraggingScope.shadowElements.length) {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = this.nodeDraggingScope.shadowElements[i];\n draggedNode.x = parseInt(shadowElement.css('left').replace('px', ''), 10);\n draggedNode.y = parseInt(shadowElement.css('top').replace('px', ''), 10);\n this.modelService.canvasHtmlElement.removeChild(shadowElement[0]);\n }\n this.nodeDraggingScope.shadowElements.length = 0;\n this.modelService.notifyModelChanged();\n }\n\n if (this.nodeDraggingScope.draggedNodes.length) {\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.draggedElements.length = 0;\n this.dragOffsets.length = 0;\n }\n });\n }\n\n}\n\nexport interface NodeDraggingScope {\n draggedNodes: Array;\n shadowElements: Array>;\n shadowDragStarted: boolean;\n dropElement: HTMLElement;\n}\n\nexport interface NodeDropElement extends HTMLElement {\n offsetInfo?: {\n offsetX: number;\n offsetY: number;\n };\n}\n\nexport interface NodeDropScope {\n dropElement: NodeDropElement;\n}\n\nexport interface DropNodeInfo {\n node: FcNode;\n dropTargetId: string;\n offsetX: number;\n offsetY: number;\n}\n","import { Injectable } from '@angular/core';\nimport { FcCoords, FlowchartConstants } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcEdgeDrawingService {\n\n constructor() {\n }\n\n public getEdgeDAttribute(pt1: FcCoords, pt2: FcCoords, style: string): string {\n let dAddribute = `M ${pt1.x}, ${pt1.y} `;\n if (style === FlowchartConstants.curvedStyle) {\n const sourceTangent = this.computeEdgeSourceTangent(pt1, pt2);\n const destinationTangent = this.computeEdgeDestinationTangent(pt1, pt2);\n dAddribute += `C ${sourceTangent.x}, ${sourceTangent.y} ${(destinationTangent.x - 50)}, ${destinationTangent.y} ${pt2.x}, ${pt2.y}`;\n } else {\n dAddribute += `L ${pt2.x}, ${pt2.y}`;\n }\n return dAddribute;\n }\n\n public getEdgeCenter(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: (pt1.x + pt2.x) / 2,\n y: (pt1.y + pt2.y) / 2\n };\n }\n\n private computeEdgeTangentOffset(pt1: FcCoords, pt2: FcCoords): number {\n return (pt2.y - pt1.y) / 2;\n }\n\n private computeEdgeSourceTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt1.x,\n y: pt1.y + this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n private computeEdgeDestinationTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt2.x,\n y: pt2.y - this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcConnector, FcCoords, FcEdge, FcModel, FlowchartConstants, ModelvalidationError } from './ngx-flowchart.models';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcModelValidationService } from './modelvalidation.service';\n\nexport class FcEdgeDraggingService {\n\n edgeDragging: EdgeDragging = {\n isDragging: false,\n dragPoint1: null,\n dragPoint2: null,\n shadowDragStarted: false\n };\n\n private draggedEdgeSource: FcConnector = null;\n private dragOffset: FcCoords = {};\n private destinationHtmlElement: HTMLElement = null;\n private oldDisplayStyle = '';\n\n private readonly modelValidation: FcModelValidationService;\n private readonly edgeDrawingService: FcEdgeDrawingService;\n private readonly modelService: FcModelService;\n private readonly model: FcModel;\n private readonly isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n private readonly dragAnimation: string;\n private readonly edgeStyle: string;\n\n constructor(modelValidation: FcModelValidationService,\n edgeDrawingService: FcEdgeDrawingService,\n modelService: FcModelService,\n model: FcModel,\n isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean,\n applyFunction: (fn: (...args: any[]) => T) => T,\n dragAnimation: string,\n edgeStyle: string) {\n this.modelValidation = modelValidation;\n this.edgeDrawingService = edgeDrawingService;\n this.modelService = modelService;\n this.model = model;\n this.isValidEdgeCallback = isValidEdgeCallback || (() => true);\n this.applyFunction = applyFunction;\n this.dragAnimation = dragAnimation;\n this.edgeStyle = edgeStyle;\n }\n\n public dragstart(event: DragEvent, connector: FcConnector) {\n let swapConnector: FcConnector;\n let dragLabel: string;\n let prevEdge: FcEdge;\n if (connector.type === FlowchartConstants.leftConnectorType) {\n for (const edge of this.model.edges) {\n if (edge.destination === connector.id) {\n swapConnector = this.modelService.connectors.getConnector(edge.source);\n dragLabel = edge.label;\n prevEdge = edge;\n this.applyFunction(() => {\n this.modelService.edges.delete(edge);\n });\n break;\n }\n }\n }\n this.edgeDragging.isDragging = true;\n if (swapConnector !== undefined) {\n this.draggedEdgeSource = swapConnector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(swapConnector.id);\n this.edgeDragging.dragLabel = dragLabel;\n this.edgeDragging.prevEdge = prevEdge;\n } else {\n this.draggedEdgeSource = connector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(connector.id);\n }\n const canvas = this.modelService.canvasHtmlElement;\n if (!canvas) {\n throw new Error('No canvas while edgedraggingService found.');\n }\n this.dragOffset.x = -canvas.getBoundingClientRect().left;\n this.dragOffset.y = -canvas.getBoundingClientRect().top;\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n\n originalEvent.dataTransfer.setData('Text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n this.destinationHtmlElement = event.target as HTMLElement;\n this.oldDisplayStyle = this.destinationHtmlElement.style.display;\n this.destinationHtmlElement.style.display = 'none';\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.shadowDragStarted = true;\n }\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.edgeDragging.gElement === undefined) {\n this.edgeDragging.gElement = $(document.querySelectorAll('.shadow-svg-class'));\n this.edgeDragging.pathElement = $(document.querySelectorAll('.shadow-svg-class')).find('path');\n this.edgeDragging.circleElement = $(document.querySelectorAll('.shadow-svg-class')).find('circle');\n }\n\n this.edgeDragging.gElement.css('display', 'block');\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n }\n event.stopPropagation();\n }\n\n public dragover(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n if (!this.edgeDragging.magnetActive && this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n if (this.edgeDragging.shadowDragStarted) {\n this.applyFunction(() => {\n this.edgeDragging.shadowDragStarted = false;\n });\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n });\n }\n }\n }\n\n public dragoverConnector(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n }\n }\n\n public dragleaveMagnet(event: DragEvent) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n\n this.edgeDragging.magnetActive = true;\n\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n event.preventDefault();\n event.stopPropagation();\n return false;\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n event.preventDefault();\n event.stopPropagation();\n return false;\n });\n }\n }\n }\n }\n\n public dragend(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n this.edgeDragging.isDragging = false;\n this.edgeDragging.dragPoint1 = null;\n this.edgeDragging.dragPoint2 = null;\n this.edgeDragging.dragLabel = null;\n event.stopPropagation();\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.gElement.css('display', 'none');\n }\n if (this.edgeDragging.prevEdge) {\n const edge = this.edgeDragging.prevEdge;\n this.edgeDragging.prevEdge = null;\n this.applyFunction(() => {\n this.modelService.edges.putEdge(edge);\n });\n }\n }\n }\n\n public drop(event: DragEvent, targetConnector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: targetConnector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n\n if (this.isValidEdgeCallback(this.draggedEdgeSource, targetConnector)) {\n this.edgeDragging.prevEdge = null;\n this.modelService.edges._addEdge(event, this.draggedEdgeSource, targetConnector, this.edgeDragging.dragLabel);\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n }\n }\n}\n\nexport interface EdgeDragging {\n isDragging: boolean;\n shadowDragStarted: boolean;\n dragPoint1: FcCoords;\n dragPoint2: FcCoords;\n dragLabel?: string;\n prevEdge?: FcEdge;\n magnetActive?: boolean;\n gElement?: JQuery;\n pathElement?: JQuery;\n circleElement?: JQuery;\n}\n","import { FcConnector, FcEdge, FcNode } from './ngx-flowchart.models';\n\nexport class FcMouseOverService {\n\n mouseoverscope: MouseOverScope = {\n connector: null,\n edge: null,\n node: null\n };\n\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(applyFunction: (fn: (...args: any[]) => T) => T) {\n this.applyFunction = applyFunction;\n }\n\n public nodeMouseOver(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = node;\n });\n }\n\n public nodeMouseOut(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = null;\n });\n }\n\n public connectorMouseEnter(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = connector;\n });\n }\n\n public connectorMouseLeave(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = null;\n });\n }\n\n public edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = edge;\n }\n\n public edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = null;\n }\n}\n\nexport interface MouseOverScope {\n connector: FcConnector;\n edge: FcEdge;\n node: FcNode;\n}\n","const regex = /(auto|scroll)/;\n\nconst style = (node: Element, prop: string): string =>\n getComputedStyle(node, null).getPropertyValue(prop);\n\nconst scroll = (node: Element) =>\n regex.test(\n style(node, 'overflow') +\n style(node, 'overflow-y') +\n style(node, 'overflow-x'));\n\nconst scrollparent = (node: HTMLElement): HTMLElement =>\n !node || node === document.body\n ? document.body\n : scroll(node)\n ? node\n : scrollparent(node.parentNode as HTMLElement);\n\nexport default scrollparent;\n","import { FcModelService } from './model.service';\nimport { FcRectBox } from './ngx-flowchart.models';\nimport scrollparent from './scrollparent';\n\ninterface Rectangle {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport class FcRectangleSelectService {\n\n private readonly selectRect: Rectangle = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n\n private readonly modelService: FcModelService;\n private readonly selectElement: HTMLElement;\n private readonly $canvasElement: JQuery;\n private readonly $scrollParent: JQuery;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n selectElement: HTMLElement,\n applyFunction: (fn: (...args: any[]) => T) => T) {\n this.modelService = modelService;\n this.selectElement = selectElement;\n this.$canvasElement = $(this.modelService.canvasHtmlElement);\n this.$scrollParent = $(scrollparent(this.modelService.canvasHtmlElement));\n this.applyFunction = applyFunction;\n }\n\n public mousedown(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && this.selectElement.hidden) {\n this.selectElement.hidden = false;\n const offset = this.$canvasElement.offset();\n this.selectRect.x1 = Math.round(e.pageX - offset.left);\n this.selectRect.y1 = Math.round(e.pageY - offset.top);\n this.selectRect.x2 = this.selectRect.x1;\n this.selectRect.y2 = this.selectRect.y1;\n this.updateSelectRect();\n }\n }\n\n public mousemove(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const offset = this.$canvasElement.offset();\n this.selectRect.x2 = Math.round(e.pageX - offset.left);\n this.selectRect.y2 = Math.round(e.pageY - offset.top);\n this.updateScroll(offset);\n this.updateSelectRect();\n }\n }\n\n private updateScroll(offset: JQuery.Coordinates) {\n const rect = this.$scrollParent[0].getBoundingClientRect();\n const bottom = rect.bottom - offset.top;\n const right = rect.right - offset.left;\n const top = rect.top - offset.top;\n const left = rect.left - offset.left;\n if (this.selectRect.y2 - top < 25) {\n const topScroll = 25 - (this.selectRect.y2 - top);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll - topScroll);\n } else if (bottom - this.selectRect.y2 < 40) {\n const bottomScroll = 40 - (bottom - this.selectRect.y2);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll + bottomScroll);\n }\n if (this.selectRect.x2 - left < 25) {\n const leftScroll = 25 - (this.selectRect.x2 - left);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll - leftScroll);\n } else if (right - this.selectRect.x2 < 40) {\n const rightScroll = 40 - (right - this.selectRect.x2);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll + rightScroll);\n }\n }\n\n public mouseup(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const rectBox = this.selectElement.getBoundingClientRect() as FcRectBox;\n this.selectElement.hidden = true;\n this.selectObjects(rectBox);\n }\n }\n\n private updateSelectRect() {\n const x3 = Math.min(this.selectRect.x1, this.selectRect.x2);\n const x4 = Math.max(this.selectRect.x1, this.selectRect.x2);\n const y3 = Math.min(this.selectRect.y1, this.selectRect.y2);\n const y4 = Math.max(this.selectRect.y1, this.selectRect.y2);\n this.selectElement.style.left = x3 + 'px';\n this.selectElement.style.top = y3 + 'px';\n this.selectElement.style.width = x4 - x3 + 'px';\n this.selectElement.style.height = y4 - y3 + 'px';\n }\n\n private selectObjects(rectBox: FcRectBox) {\n this.applyFunction(() => {\n this.modelService.selectAllInRect(rectBox);\n });\n }\n\n}\n\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef, EventEmitter,\n HostBinding,\n HostListener,\n Input,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnInit, Output\n} from '@angular/core';\nimport { FcCallbacks, FcEdge, FcModel, FcNode, FlowchartConstants, UserCallbacks, UserNodeCallbacks } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcNodeDraggingService } from './node-dragging.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcEdgeDraggingService } from './edge-dragging.service';\nimport { FcMouseOverService } from './mouseover.service';\nimport { FcRectangleSelectService } from './rectangleselect.service';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Component({\n selector: 'fc-canvas',\n templateUrl: './ngx-flowchart.component.html',\n styleUrls: ['./ngx-flowchart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxFlowchartComponent implements OnInit, DoCheck {\n\n @HostBinding('attr.class')\n get canvasClass(): string {\n return FlowchartConstants.canvasClass;\n }\n\n @Input()\n model: FcModel;\n\n @Input()\n selectedObjects: any[];\n\n @Input()\n edgeStyle: string;\n\n @Input()\n userCallbacks: UserCallbacks;\n\n @Input()\n automaticResize: boolean;\n\n @Input()\n dragAnimation: string;\n\n @Input()\n nodeWidth: number;\n\n @Input()\n nodeHeight: number;\n\n @Input()\n dropTargetId: string;\n\n @Output()\n modelChanged = new EventEmitter();\n\n private fitModelSizeByDefaultValue = true;\n get fitModelSizeByDefault(): boolean {\n return this.fitModelSizeByDefaultValue;\n }\n @Input()\n set fitModelSizeByDefault(value: boolean) {\n this.fitModelSizeByDefaultValue = coerceBooleanProperty(value);\n }\n\n callbacks: FcCallbacks;\n\n userNodeCallbacks: UserNodeCallbacks;\n\n modelService: FcModelService;\n nodeDraggingService: FcNodeDraggingService;\n edgeDraggingService: FcEdgeDraggingService;\n mouseoverService: FcMouseOverService;\n rectangleSelectService: FcRectangleSelectService;\n\n arrowDefId: string;\n arrowDefIdSelected: string;\n\n flowchartConstants = FlowchartConstants;\n\n private nodesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private edgesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private readonly detectChangesSubject = new Subject();\n\n constructor(private elementRef: ElementRef,\n private differs: IterableDiffers,\n private modelValidation: FcModelValidationService,\n public edgeDrawingService: FcEdgeDrawingService,\n private cd: ChangeDetectorRef,\n private zone: NgZone) {\n this.arrowDefId = 'arrow-' + Math.random();\n this.arrowDefIdSelected = this.arrowDefId + '-selected';\n this.detectChangesSubject\n .pipe(debounceTime(50))\n .subscribe(() => this.cd.detectChanges());\n }\n\n ngOnInit() {\n if (!this.dropTargetId && this.edgeStyle !== FlowchartConstants.curvedStyle && this.edgeStyle !== FlowchartConstants.lineStyle) {\n throw new Error('edgeStyle not supported.');\n }\n this.nodeHeight = this.nodeHeight || 200;\n this.nodeWidth = this.nodeWidth || 200;\n this.dragAnimation = this.dragAnimation || FlowchartConstants.dragAnimationRepaint;\n this.userCallbacks = this.userCallbacks || {};\n this.automaticResize = this.automaticResize || false;\n\n for (const key of Object.keys(this.userCallbacks)) {\n const callback = this.userCallbacks[key];\n if (typeof callback !== 'function' && key !== 'nodeCallbacks') {\n throw new Error('All callbacks should be functions.');\n }\n }\n\n this.userNodeCallbacks = this.userCallbacks.nodeCallbacks;\n\n const element = $(this.elementRef.nativeElement);\n\n this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged,\n this.detectChangesSubject, this.selectedObjects,\n this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved,\n this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg'));\n\n if (this.dropTargetId) {\n this.modelService.dropTargetId = this.dropTargetId;\n }\n\n const applyFunction = this.zone.run.bind(this.zone);\n\n this.nodeDraggingService = new FcNodeDraggingService(this.modelService, applyFunction,\n this.automaticResize, this.dragAnimation);\n\n this.edgeDraggingService = new FcEdgeDraggingService(this.modelValidation, this.edgeDrawingService, this.modelService,\n this.model, this.userCallbacks.isValidEdge || null, applyFunction,\n this.dragAnimation, this.edgeStyle);\n\n this.mouseoverService = new FcMouseOverService(applyFunction);\n\n this.rectangleSelectService = new FcRectangleSelectService(this.modelService,\n element[0].querySelector('#select-rectangle'), applyFunction);\n\n this.callbacks = {\n nodeDragstart: this.nodeDraggingService.dragstart.bind(this.nodeDraggingService),\n nodeDragend: this.nodeDraggingService.dragend.bind(this.nodeDraggingService),\n edgeDragstart: this.edgeDraggingService.dragstart.bind(this.edgeDraggingService),\n edgeDragend: this.edgeDraggingService.dragend.bind(this.edgeDraggingService),\n edgeDrop: this.edgeDraggingService.drop.bind(this.edgeDraggingService),\n edgeDragoverConnector: this.edgeDraggingService.dragoverConnector.bind(this.edgeDraggingService),\n edgeDragoverMagnet: this.edgeDraggingService.dragoverMagnet.bind(this.edgeDraggingService),\n edgeDragleaveMagnet: this.edgeDraggingService.dragleaveMagnet.bind(this.edgeDraggingService),\n nodeMouseOver: this.mouseoverService.nodeMouseOver.bind(this.mouseoverService),\n nodeMouseOut: this.mouseoverService.nodeMouseOut.bind(this.mouseoverService),\n connectorMouseEnter: this.mouseoverService.connectorMouseEnter.bind(this.mouseoverService),\n connectorMouseLeave: this.mouseoverService.connectorMouseLeave.bind(this.mouseoverService),\n nodeClicked: (event, node) => {\n this.modelService.nodes.handleClicked(node, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n };\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n\n ngDoCheck(): void {\n if (this.model) {\n const nodesChange = this.nodesDiffer.diff(this.model.nodes);\n const edgesChange = this.edgesDiffer.diff(this.model.edges);\n let nodesChanged = false;\n let edgesChanged = false;\n if (nodesChange !== null) {\n nodesChange.forEachAddedItem(() => {\n nodesChanged = true;\n });\n nodesChange.forEachRemovedItem(() => {\n nodesChanged = true;\n });\n }\n if (edgesChange !== null) {\n edgesChange.forEachAddedItem(() => {\n edgesChanged = true;\n });\n edgesChange.forEachRemovedItem(() => {\n edgesChanged = true;\n });\n }\n if (nodesChanged) {\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n if (nodesChanged || edgesChanged) {\n this.detectChangesSubject.next();\n }\n }\n }\n\n getEdgeDAttribute(edge: FcEdge): string {\n return this.edgeDrawingService.getEdgeDAttribute(this.modelService.edges.sourceCoord(edge),\n this.modelService.edges.destCoord(edge), this.edgeStyle);\n }\n\n public adjustCanvasSize(fit?: boolean) {\n let maxX = 0;\n let maxY = 0;\n const element = $(this.elementRef.nativeElement);\n this.model.nodes.forEach((node) => {\n maxX = Math.max(node.x + this.nodeWidth, maxX);\n maxY = Math.max(node.y + this.nodeHeight, maxY);\n });\n let width;\n let height;\n if (fit) {\n width = maxX;\n height = maxY;\n } else {\n width = Math.max(maxX, element.prop('offsetWidth'));\n height = Math.max(maxY, element.prop('offsetHeight'));\n }\n element.css('width', width + 'px');\n element.css('height', height + 'px');\n }\n\n canvasClick(event: MouseEvent) {}\n\n edgeMouseDown(event: MouseEvent, edge: FcEdge) {\n event.stopPropagation();\n }\n\n edgeClick(event: MouseEvent, edge: FcEdge) {\n this.modelService.edges.handleEdgeMouseClick(edge, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeRemove(event: Event, edge: FcEdge) {\n this.modelService.edges.delete(edge);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeEdit(event: Event, edge: FcEdge) {\n if (this.userCallbacks.edgeEdit) {\n this.userCallbacks.edgeEdit(event, edge);\n }\n }\n\n edgeDoubleClick(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeDoubleClick) {\n this.userCallbacks.edgeDoubleClick(event, edge);\n }\n }\n\n edgeMouseOver(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeMouseOver) {\n this.userCallbacks.edgeMouseOver(event, edge);\n }\n }\n\n edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseEnter(event, edge);\n }\n\n edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseLeave(event, edge);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n this.nodeDraggingService.drop(event);\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n this.rectangleSelectService.mousedown(event);\n }\n\n @HostListener('mousemove', ['$event'])\n mousemove(event: MouseEvent) {\n this.rectangleSelectService.mousemove(event);\n }\n\n @HostListener('mouseup', ['$event'])\n mouseup(event: MouseEvent) {\n this.rectangleSelectService.mouseup(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-magnet]'\n})\nexport class FcMagnetDirective implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n connector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.magnetClass);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: DragEvent) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-connector]'\n})\nexport class FcConnectorDirective implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n connector: FcConnector;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.connectorClass);\n if (this.modelservice.isEditable()) {\n element.attr('draggable', 'true');\n this.updateConnectorClass();\n }\n this.modelservice.connectors.setHtmlElement(this.connector.id, element[0]);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateConnector = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (propName === 'mouseOverConnector') {\n updateConnector = true;\n }\n }\n }\n if (updateConnector && this.modelservice.isEditable()) {\n this.updateConnectorClass();\n }\n }\n\n private updateConnectorClass() {\n const element = $(this.elementRef.nativeElement);\n if (this.connector === this.mouseOverConnector) {\n element.addClass(FlowchartConstants.hoverClass);\n } else {\n element.removeClass(FlowchartConstants.hoverClass);\n }\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n // Skip - conflict with magnet\n /* if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDragoverConnector(event, this.connector);\n }*/\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragstart(event, this.connector);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n mouseenter(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseEnter(event, this.connector);\n }\n }\n\n @HostListener('mouseleave', ['$event'])\n mouseleave(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseLeave(event, this.connector);\n }\n }\n\n}\n","import {\n Component,\n ComponentFactoryResolver, Directive,\n ElementRef, HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {\n FC_NODE_COMPONENT_CONFIG,\n FcCallbacks,\n FcConnector,\n FcNode,\n FcNodeComponentConfig,\n FlowchartConstants,\n UserNodeCallbacks\n} from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Component({\n selector: 'fc-node',\n template: '',\n styleUrls: ['./node.component.scss']\n})\nexport class FcNodeContainerComponent implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n @HostBinding('attr.id')\n get nodeId(): string {\n return this.node.id;\n }\n\n @HostBinding('style.top')\n get top(): string {\n return this.node.y + 'px';\n }\n\n @HostBinding('style.left')\n get left(): string {\n return this.node.x + 'px';\n }\n\n nodeComponent: FcNodeComponent;\n\n @ViewChild('nodeContent', {read: ViewContainerRef, static: true}) nodeContentContainer: ViewContainerRef;\n\n constructor(@Inject(FC_NODE_COMPONENT_CONFIG) private nodeComponentConfig: FcNodeComponentConfig,\n private elementRef: ElementRef,\n private componentFactoryResolver: ComponentFactoryResolver) {\n }\n\n ngOnInit(): void {\n if (!this.userNodeCallbacks) {\n this.userNodeCallbacks = {};\n }\n this.userNodeCallbacks.nodeEdit = this.userNodeCallbacks.nodeEdit || (() => {});\n this.userNodeCallbacks.doubleClick = this.userNodeCallbacks.doubleClick || (() => {});\n this.userNodeCallbacks.mouseDown = this.userNodeCallbacks.mouseDown || (() => {});\n this.userNodeCallbacks.mouseEnter = this.userNodeCallbacks.mouseEnter || (() => {});\n this.userNodeCallbacks.mouseLeave = this.userNodeCallbacks.mouseLeave || (() => {});\n\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.nodeClass);\n if (!this.node.readonly) {\n element.attr('draggable', 'true');\n }\n this.updateNodeClass();\n this.modelservice.nodes.setHtmlElement(this.node.id, element[0]);\n this.nodeContentContainer.clear();\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.nodeComponentConfig.nodeComponentType);\n const componentRef = this.nodeContentContainer.createComponent(componentFactory);\n this.nodeComponent = componentRef.instance;\n this.nodeComponent.callbacks = this.callbacks;\n this.nodeComponent.userNodeCallbacks = this.userNodeCallbacks;\n this.nodeComponent.node = this.node;\n this.nodeComponent.modelservice = this.modelservice;\n this.updateNodeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateNode = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (['selected', 'edit', 'underMouse', 'mouseOverConnector', 'dragging'].includes(propName)) {\n updateNode = true;\n }\n }\n }\n if (updateNode) {\n this.updateNodeClass();\n this.updateNodeComponent();\n }\n }\n\n private updateNodeClass() {\n const element = $(this.elementRef.nativeElement);\n this.toggleClass(element, FlowchartConstants.selectedClass, this.selected);\n this.toggleClass(element, FlowchartConstants.editClass, this.edit);\n this.toggleClass(element, FlowchartConstants.hoverClass, this.underMouse);\n this.toggleClass(element, FlowchartConstants.draggingClass, this.dragging);\n }\n\n private updateNodeComponent() {\n this.nodeComponent.selected = this.selected;\n this.nodeComponent.edit = this.edit;\n this.nodeComponent.underMouse = this.underMouse;\n this.nodeComponent.mouseOverConnector = this.mouseOverConnector;\n this.nodeComponent.dragging = this.dragging;\n }\n\n private toggleClass(element: JQuery, clazz: string, set: boolean) {\n if (set) {\n element.addClass(clazz);\n } else {\n element.removeClass(clazz);\n }\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragend(event);\n }\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeClicked(event, this.node);\n }\n }\n\n @HostListener('mouseover', ['$event'])\n mouseover(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOver(event, this.node);\n }\n }\n\n @HostListener('mouseout', ['$event'])\n mouseout(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOut(event, this.node);\n }\n }\n\n}\n\nexport abstract class FcNodeComponent implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n flowchartConstants = FlowchartConstants;\n\n ngOnInit(): void {\n }\n\n}\n","import { Component } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\n@Component({\n selector: 'fc-default-node',\n templateUrl: './default-node.component.html',\n styleUrls: ['./default-node.component.scss']\n})\nexport class DefaultFcNodeComponent extends FcNodeComponent {\n\n constructor() {\n super();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { NgxFlowchartComponent } from './ngx-flowchart.component';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { CommonModule } from '@angular/common';\nimport { FcMagnetDirective } from './magnet.directive';\nimport { FcConnectorDirective } from './connector.directive';\nimport { FcNodeContainerComponent } from './node.component';\nimport { FC_NODE_COMPONENT_CONFIG } from './ngx-flowchart.models';\nimport { DefaultFcNodeComponent } from './default-node.component';\n\n@NgModule({\n entryComponents: [\n DefaultFcNodeComponent\n ],\n declarations: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n FcNodeContainerComponent,\n DefaultFcNodeComponent],\n providers: [\n FcModelValidationService,\n FcEdgeDrawingService,\n {\n provide: FC_NODE_COMPONENT_CONFIG,\n useValue: {\n nodeComponentType: DefaultFcNodeComponent\n }\n }\n ],\n imports: [\n CommonModule\n ],\n exports: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n DefaultFcNodeComponent]\n})\nexport class NgxFlowchartModule { }\n"],"names":[],"mappings":";;;;;;;;;;AACA;AAGA,MAAa,wBAAwB,GAAG,IAAI,cAAc,CAAwB,0BAA0B,CAAC;;;;AAE7G,oCAEC;;;IADC,kDAAyC;;;MAGrC,UAAU,GAAG,IAAI;;MACjB,iBAAiB,GAAG,eAAe;;MACnC,kBAAkB,GAAG,gBAAgB;;AAE3C,MAAa,kBAAkB,GAAG;IAChC,UAAU;IACV,iBAAiB;IACjB,kBAAkB;IAClB,WAAW,EAAE,QAAQ;IACrB,SAAS,EAAE,MAAM;IACjB,oBAAoB,EAAE,SAAS;IAC/B,mBAAmB,EAAE,QAAQ;IAC7B,WAAW,EAAE,UAAU,GAAG,SAAS;IACnC,aAAa,EAAE,UAAU,GAAG,WAAW;IACvC,SAAS,EAAE,UAAU,GAAG,OAAO;IAC/B,WAAW,EAAE,UAAU,GAAG,SAAS;IACnC,UAAU,EAAE,UAAU,GAAG,QAAQ;IACjC,aAAa,EAAE,UAAU,GAAG,WAAW;IACvC,SAAS,EAAE,UAAU,GAAG,OAAO;IAC/B,cAAc,EAAE,UAAU,GAAG,aAAa;IAC1C,cAAc,EAAE,UAAU,GAAG,YAAY;IACzC,WAAW,EAAE,UAAU,GAAG,SAAS;IACnC,SAAS,EAAE,UAAU,GAAG,OAAO;IAC/B,gBAAgB,EAAE,UAAU,GAAG,eAAe;IAC9C,kBAAkB,EAAE,UAAU,GAAG,GAAG,GAAG,iBAAiB,GAAG,GAAG;IAC9D,mBAAmB,EAAE,UAAU,GAAG,GAAG,GAAG,kBAAkB,GAAG,GAAG;IAChE,qBAAqB,EAAE,GAAG;IAC1B,gBAAgB,EAAE,GAAG;CACtB;;;;AAGD,uBAGC;;;IAFC,qBAAW;;IACX,qBAAW;;;;;AAGb,wBAKC;;;IAJC,wBAAY;;IACZ,yBAAa;;IACb,0BAAc;;IACd,2BAAe;;;;;AAGjB,0BAGC;;;IAFC,yBAAW;;IACX,2BAAa;;;;;AAGf,qBAMC;;;IALC,oBAAW;;IACX,sBAAa;;IACb,4BAA+B;;IAC/B,0BAAmB;;;;;;AAIrB,qBAKC;;;IAJC,uBAAe;;IACf,wBAAgB;;IAChB,6BAAqB;;IACrB,wBAAiB;;;;;AAGnB,yBAGC;;;IAFC,0BAAc;;IACd,0BAAc;;;;;AAGhB,sBAGC;;;IAFC,wBAAqB;;IACrB,wBAAqB;;;;;AAGvB,4BAWC;;;IAVC,iCAAgD;;IAChD,mCAAgE;;IAChE,kCAAmC;;IACnC,oCAAqC;;IACrC,oCAAqC;;IACrC,wCAA4D;;IAC5D,sCAA0D;;IAC1D,oCAAyE;;IACzE,iCAAgD;;IAChD,sCAAkC;;;;;AAGpC,gCAMC;;;IALC,qCAAqD;;IACrD,wCAAwD;;IACxD,sCAAsD;;IACtD,uCAAuD;;IACvD,uCAAuD;;;;;AAGzD,0BAcC;;;IAbC,oCAAwD;;IACxD,kCAAwC;;IACxC,oCAAkE;;IAClE,kCAAwC;;IACxC,+BAAsE;;IACtE,4CAA6E;;IAC7E,yCAA0E;;IAC1E,0CAAgD;;IAChD,oCAAyD;;IACzD,mCAAwD;;IACxD,0CAAyE;;IACzE,0CAAyE;;IACzE,kCAAuD;;;;;AAGzD,6BAKC;AAED,MAAM,SAAS;IACb;QACE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KAC9B;CACF;AAED,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;AAE3D,MAAa,oBAAqB,SAAQ,SAAS;;;;IACjD,YAAmB,OAAe;QAChC,KAAK,EAAE,CAAC;QADS,YAAO,GAAP,OAAO,CAAQ;KAEjC;CACF;;;IAHa,uCAAsB;;;;;;AAKpC,SAAgB,SAAS,CAAC,KAAc;;UAChC,YAAY,GAAmB,EAAE;IACvC,KAAK,CAAC,KAAK,CAAC,OAAO;;;;IAAC,CAAC,IAAI;QACvB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAC,CAAC;KACrD,EAAC,CAAC;IACH,KAAK,CAAC,KAAK,CAAC,OAAO;;;;IAAC,CAAC,IAAI;;cACjB,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;;;;QAAC,CAAC,IAAI;YACzC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI;;;;YAAC,CAAC,SAAS;gBACpC,OAAO,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC;aACrC,EAAC,CAAC;SACJ,EAAC,CAAC,CAAC,CAAC;;cACC,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;;;;QAAC,CAAC,IAAI;YAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI;;;;YAAC,CAAC,SAAS;gBACpC,OAAO,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC;aAC1C,EAAC,CAAC;SACJ,EAAC,CAAC,CAAC,CAAC;QACL,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC9D,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;KAC7C,EAAC,CAAC;;UACG,YAAY,GAAa,EAAE;;UAC3B,WAAW,GAAa,EAAE;IAChC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;;cACtC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC;QAChC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE;YACxB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxB;KACF;IACD,OAAO,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;;cACzB,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;kBAC3D,eAAe,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5D,YAAY,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzC,IAAI,YAAY,CAAC,eAAe,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE;gBAChD,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aACnC;YACD,YAAY,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,CAAC,EAAE,CAAC;SACL;QACD,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC/B;;QACG,QAAQ,GAAG,KAAK;IACpB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;;cACtC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC;QAChC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE;YACxB,QAAQ,GAAG,IAAI,CAAC;SACjB;KACF;IACD,IAAI,QAAQ,EAAE;QACZ,OAAO,IAAI,CAAC;KACb;SAAM;QACL,OAAO,YAAY,CAAC;KACrB;CACF;;;;;;AC/LD,MAIa,cAAc;;;;;;;;;;;;;;;IA4BzB,YAAY,eAAyC,EACzC,KAAc,EACd,YAA+B,EAC/B,oBAAkC,EAClC,eAAsB,EACtB,QAA8C,EAC9C,UAA8D,EAC9D,iBAAyC,EACzC,mBAA2C,EAC3C,mBAA2C,EAC3C,iBAA8B,EAC9B,cAA0B;QAhCtC,2BAAsB,GAAmB,EAAE,CAAC;QAC5C,sBAAiB,GAAmB,EAAE,CAAC;QACvC,sBAAiB,GAAgB,IAAI,CAAC;QACtC,cAAS,GAAqB,IAAI,CAAC;QACnC,mBAAc,GAAe,IAAI,CAAC;QAWjB,cAAS,GAAG,IAAI,OAAO,EAAO,CAAC;QAmB9C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAEvC,IAAI,CAAC,QAAQ,GAAG,QAAQ;;;QAAK,SAAQ,EAAC,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU;;;;;QAAK,CAAC,KAAK,EAAE,IAAI,KAAK,EAAE,mBAAK,IAAI,IAAE,KAAK,EAAE,OAAO,IAAE,EAAC,CAAC;QACjF,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;;;QAAK,SAAQ,EAAC,CAAC;QACzD,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;;;QAAK,SAAQ,EAAC,CAAC;QAC7D,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;;;QAAK,SAAQ,EAAC,CAAC;QAE7D,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,SAAS;aACX,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;aACvB,SAAS;;;QAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAC,CAAC;KAC9C;;;;IAEM,kBAAkB;QACvB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACvB;;;;IAEM,aAAa;QAClB,UAAU;;;QAAC;YACT,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;SAClC,GAAE,CAAC,CAAC,CAAC;KACP;;;;;IAEM,YAAY,CAAC,MAAW;QAC7B,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC/C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACnC;SACF;KACF;;;;;IAEM,cAAc,CAAC,MAAW;QAC/B,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;;kBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;YAClD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;aAC3D;YACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACvC;KACF;;;;;IAEM,oBAAoB,CAAC,MAAW;QACrC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YACjC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;SAC7B;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAC3B;KACF;;;;;IAEM,gBAAgB,CAAC,MAAW;QACjC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KACpD;;;;IAEM,SAAS;QACd,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;;;;QAAC,IAAI;YAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aACzB;SACF,EAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;;;;QAAC,IAAI;YAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACzB,EAAC,CAAC;QACH,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;;;;IAEM,WAAW;QAChB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;;;;;IAEM,YAAY,CAAC,MAAW;QAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;YACtC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KAC/C;;;;;;;;IAEO,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,OAAkB;QACxD,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK;YAC5C,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C;;;;;;IAEM,kBAAkB,CAAC,CAAS,EAAE,CAAS;QAC5C,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;SAChC,CAAC;KACH;;;;;;IAEM,cAAc,CAAC,CAAS,EAAE,CAAS;QACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;;kBAC7B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;;kBAC5C,cAAc,GAAG,OAAO,CAAC,qBAAqB,EAAE;YACtD,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,cAAc,CAAC,KAAK;mBACpD,CAAC,IAAI,cAAc,CAAC,GAAG,IAAI,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE;gBAC1D,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,IAAI,CAAC;KACb;;;;;;IAEM,cAAc,CAAC,CAAS,EAAE,CAAS;;cAClC,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;;cACzC,EAAE,GAAG,OAAO,CAAC,EAAE;;YACjB,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,EAAE,EAAE;YACN,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;gBAClC,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;aAC1D;iBAAM,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;gBAC1C,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;aAC3D;SACF;QACD,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;YAClB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;SACpC;QACD,OAAO,IAAI,CAAC;KACb;;;;;IAEM,eAAe,CAAC,OAAkB;QACvC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;;;;QAAC,CAAC,KAAK;;kBACvB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;;kBAC7C,cAAc,GAAG,OAAO,CAAC,qBAAqB,EAAE;YACtD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;;sBACb,CAAC,GAAG,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC;;sBAClD,CAAC,GAAG,cAAc,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;gBACxD,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;oBACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBAC1B;qBAAM;oBACL,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;wBAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;qBAC5B;iBACF;aACF;SACF,EAAC,CAAC;;cACG,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE;QACvE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;;;;QAAC,CAAC,KAAK;;kBACvB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;;kBACrC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;;kBACjC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,IAAI;;kBACjD,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG;YACtD,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;gBACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC1B;iBAAM;gBACL,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;oBAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;iBAC5B;aACF;SACF,EAAC,CAAC;KACJ;;;;IAEM,cAAc;;cACb,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;QACnD,aAAa,CAAC,OAAO;;;;QAAC,CAAC,IAAI;YACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACzB,EAAC,CAAC;;cACG,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;QACnD,aAAa,CAAC,OAAO;;;;QAAC,CAAC,IAAI;YACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACzB,EAAC,CAAC;KACJ;;;;IAEM,UAAU;QACf,OAAO,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC;KACxC;;;;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC;KACxC;;;;IAEM,YAAY;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,gFAAgF,CAAC;YACtG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;SAC5C;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;CACF;;;IAjOC,yCAA0C;;IAC1C,+BAAe;;;;;IACf,8CAAoD;;IACpD,yCAAuB;;IAEvB,gDAA4C;;IAC5C,2CAAuC;;IACvC,2CAAsC;;IACtC,mCAAmC;;IACnC,wCAAkC;;IAElC,kCAA+C;;IAC/C,oCAA+D;;IAC/D,2CAA0C;;IAC1C,6CAA4C;;IAC5C,6CAA4C;;IAE5C,sCAAqB;;;;;IAErB,sCAAiD;;;;;IACjD,mCAAgD;;IAEhD,oCAA4B;;IAC5B,+BAAkB;;IAClB,+BAAkB;;;;;AA2MpB,6BAAuD;;;;;AAEvD,MAAe,eAAe;;;;;IAI5B,YAAsB,YAA4B;QAChD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;KAClC;;;;;IAEM,MAAM,CAAC,MAAS;QACrB,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KACxC;;;;;IAEM,QAAQ,CAAC,MAAS;QACvB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;KAC1C;;;;;IAEM,cAAc,CAAC,MAAS;QAC7B,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;KAChD;;;;;IAEM,UAAU,CAAC,MAAS;QACzB,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;KACnD;;;;;IAEM,MAAM,CAAC,MAAS;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KAC/C;CACF;;;IAzBC,uCAA6B;;AA2B/B,MAAM,eAAgB,SAAQ,eAA4B;;;;IAExD,YAAY,YAA4B;QACtC,KAAK,CAAC,YAAY,CAAC,CAAC;KACrB;;;;;IAEM,YAAY,CAAC,WAAmB;;cAC/B,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;YAC9B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;gBACvC,IAAI,SAAS,CAAC,EAAE,KAAK,WAAW,EAAE;oBAChC,OAAO,SAAS,CAAC;iBAClB;aACF;SACF;KACF;;;;;IAEM,cAAc,CAAC,WAAmB;QACvC,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;KAC9D;;;;;;IAEM,cAAc,CAAC,WAAmB,EAAE,OAAoB;QAC7D,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;QAChE,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;KACnC;;;;;;;IAEO,UAAU,CAAC,WAAmB,EAAE,QAAkB;;cAClD,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;;cAC1C,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB;QAClD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE;YAChE,OAAO,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC;SACrB;;cACK,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,EAAE;;cACrD,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,EAAE;;YACnD,MAAM,GAAa;YACrB,CAAC,EAAE,mBAAmB,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI;YACnD,CAAC,EAAE,mBAAmB,CAAC,GAAG,GAAG,gBAAgB,CAAC,GAAG;SAClD;QACD,IAAI,QAAQ,EAAE;YACZ,MAAM,GAAG;gBACP,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;gBACjD,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;aACnD,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;;;;;IAEM,SAAS,CAAC,WAAmB;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KAC5C;;;;;IAEM,gBAAgB,CAAC,WAAmB;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KAC3C;CACF;AAED,MAAM,UAAW,SAAQ,eAAuB;;;;IAE9C,YAAY,YAA4B;QACtC,KAAK,CAAC,YAAY,CAAC,CAAC;KACrB;;;;;;IAEM,mBAAmB,CAAC,IAAY,EAAE,IAAY;QACnD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM;;;;QAAC,CAAC,SAAS;YACtC,OAAO,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC;SAChC,EAAC,CAAC;KACJ;;;;;;;IAEO,aAAa,CAAC,IAAY,EAAE,SAAsB;QACxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI;YACF,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SACtD;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC;SACb;KACF;;;;;IAEM,MAAM,CAAC,IAAY;QACxB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACrB;;cACK,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;;cAC/B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACvC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;aACrC;YACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACtD;;cACK,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;kBACrC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3B,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC7F,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC,EAAE,CAAC;aACL;SACF;QACD,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;QACvC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;KAC7C;;;;IAEM,gBAAgB;;cACf,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;QACrC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM;;;;QAAC,CAAC,IAAI;YAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACjD,EAAC,CAAC;KACJ;;;;;;IAEM,aAAa,CAAC,IAAY,EAAE,OAAiB;QAClD,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SAC9C;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACtC;KACF;;;;;;IAEO,QAAQ,CAAC,IAAY;;cACrB,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;QACrC,IAAI;YACF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC9D;QAAC,OAAO,KAAK,EAAE;YACd,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;SACb;KACF;;;;;IAEM,eAAe,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG;;;;QAAC,CAAC,SAAS;YACnC,OAAO,SAAS,CAAC,EAAE,CAAC;SACrB,EAAC,CAAC;KACJ;;;;;IAEM,oBAAoB,CAAC,WAAmB;;cACvC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;;kBACxB,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAC/C,IAAI,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC1C,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,IAAI,CAAC;KACb;;;;;IAEM,cAAc,CAAC,MAAc;QAClC,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;KACpD;;;;;;IAEM,cAAc,CAAC,MAAc,EAAE,OAAoB;QACxD,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;QACtD,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;KACnC;CAEF;AAED,MAAM,UAAW,SAAQ,eAAuB;;;;IAE9C,YAAY,YAA4B;QACtC,KAAK,CAAC,YAAY,CAAC,CAAC;KACrB;;;;;IAEM,KAAK,CAAC,IAAY;;cACjB,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;;cACjE,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;QACjF,OAAO,MAAM,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,CAAC;KAC1D;;;;;IAEM,WAAW,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACnE;;;;;IAEM,SAAS,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACxE;;;;;IAEM,MAAM,CAAC,IAAY;;cAClB,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;;cAC/B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACvC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACtD;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACrB;QACD,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;QACvC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;KAC7C;;;;IAEM,gBAAgB;;cACf,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;QACrC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM;;;;QAAC,CAAC,IAAI;YAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACjD,EAAC,CAAC;KACJ;;;;;;IAEM,oBAAoB,CAAC,IAAY,EAAE,OAAiB;QACzD,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SAC9C;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACtC;KACF;;;;;IAEM,OAAO,CAAC,IAAY;;cACnB,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;QACrC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;KACxC;;;;;;;;IAEM,QAAQ,CAAC,KAAY,EAAE,eAA4B,EAAE,aAA0B,EAAE,KAAa;QACnG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;;cAC7D,IAAI,GAAW,EAAE;QACvB,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;cACb,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;QACrC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACzF,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,SAAS;;;;QACjD,CAAC,OAAO;YACN,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;YACvC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;SAC9C,EACF,CAAC;KACH;CACF;;;;;;ACjfD,MAIa,wBAAwB;IAEnC,iBAAiB;;;;;IAEV,aAAa,CAAC,KAAc;QACjC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC;KACd;;;;;IAEM,aAAa,CAAC,KAAoB;;cACjC,GAAG,GAAa,EAAE;QACxB,KAAK,CAAC,OAAO;;;;QAAC,CAAC,IAAI;YACjB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC/B,MAAM,IAAI,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;aAClD;YACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnB,EAAC,CAAC;;cACG,YAAY,GAAa,EAAE;QACjC,KAAK,CAAC,OAAO;;;;QAAC,CAAC,IAAI;YACjB,IAAI,CAAC,UAAU,CAAC,OAAO;;;;YAAC,CAAC,SAAS;gBAChC,IAAI,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC7C,MAAM,IAAI,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;iBAClD;gBACD,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;aACjC,EAAC,CAAC;SACJ,EAAC,CAAC;QACH,OAAO,KAAK,CAAC;KACd;;;;;IAEM,YAAY,CAAC,IAAY;QAC9B,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,oBAAoB,CAAC,eAAe,CAAC,CAAC;SACjD;QACD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YACjC,MAAM,IAAI,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;SACnD;QACD,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE;YAC7E,MAAM,IAAI,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;SAC1D;QACD,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE;YAC7E,MAAM,IAAI,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;SAC1D;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACnC,MAAM,IAAI,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;SACzD;QACD,IAAI,CAAC,UAAU,CAAC,OAAO;;;;QAAC,CAAC,SAAS;YAChC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;SACnC,EAAC,CAAC;QACH,OAAO,IAAI,CAAC;KACb;;;;;;;IAEO,cAAc,CAAC,KAAoB,EAAE,KAAoB;QAC/D,KAAK,CAAC,OAAO;;;;QAAC,CAAC,IAAI;YACjB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACjC,EAAC,CAAC;QACH,KAAK,CAAC,OAAO;;;;;QAAC,CAAC,KAAK,EAAE,MAAM;YAC1B,KAAK,CAAC,OAAO;;;;;YAAC,CAAC,KAAK,EAAE,MAAM;gBAC1B,IAAI,MAAM,KAAK,MAAM,EAAE;oBACrB,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;yBAC1E,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE;wBAC5E,MAAM,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;qBACpD;iBACF;aACF,EAAC,CAAC;SACJ,EAAC,CAAC;QACH,IAAI,SAAS,CAAC,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC,KAAK,IAAI,EAAE;YACtC,MAAM,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;SACvD;QACD,OAAO,KAAK,CAAC;KACd;;;;;;IAEM,aAAa,CAAC,KAAoB,EAAE,KAAoB;QAC7D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KAC1C;;;;;;;IAEO,aAAa,CAAC,IAAY,EAAE,KAAoB;QACtD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;SACrD;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAClC,MAAM,IAAI,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;SAC1D;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE;YACpC,MAAM,IAAI,oBAAoB,CAAC,mDAAmD,CAAC,CAAC;SACrF;;cACK,UAAU,GAAG,KAAK,CAAC,MAAM;;;;QAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI;;;;QAAC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,EAAC,EAAC,CAAC,CAAC,CAAC;QAC/G,IAAI,UAAU,KAAK,SAAS,EAAE;YAC5B,MAAM,IAAI,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;SACrD;;cACK,eAAe,GAAG,KAAK,CAAC,MAAM;;;;QAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI;;;;QAAC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,EAAC,EAAC,CAAC,CAAC,CAAC;QACzH,IAAI,eAAe,KAAK,SAAS,EAAE;YACjC,MAAM,IAAI,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;SAC1D;QACD,IAAI,UAAU,KAAK,eAAe,EAAE;YAClC,MAAM,IAAI,oBAAoB,CAAC,8CAA8C,CAAC,CAAC;SAChF;QACD,OAAO,IAAI,CAAC;KACb;;;;;;IAEM,YAAY,CAAC,IAAY,EAAE,KAAoB;QACpD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACxC;;;;;IAEM,iBAAiB,CAAC,SAAsB;QAC7C,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,EAAE;YAC9B,MAAM,IAAI,oBAAoB,CAAC,eAAe,CAAC,CAAC;SACjD;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;YACjG,MAAM,IAAI,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;SACnD;QACD,OAAO,SAAS,CAAC;KAClB;;;YApHF,UAAU;;;;;;;;;ACFX;MAEM,aAAa,GAAkB;IACnC,WAAW,EAAE,IAAI;CAClB;AAED,MAAa,qBAAqB;;;;;;;IAoBhC,YAAY,YAA4B,EAC5B,aAAkD,EAClD,eAAwB,EAAE,aAAqB;QApB3D,sBAAiB,GAAsB;YACrC,iBAAiB,EAAE,KAAK;YACxB,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,EAAE;SACnB,CAAC;QAEM,gBAAW,GAAe,EAAE,CAAC;QAC7B,oBAAe,GAAkB,EAAE,CAAC;QAEpC,4BAAuB,GAAkB,EAAE,CAAC;QAC5C,qBAAgB,GAAa,EAAE,CAAC;QAUtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;KACpC;;;;;;;IAEO,aAAa,CAAC,UAAkB,EAAE,GAAW;QACnD,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACrC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACvC,OAAO,UAAU,CAAC;KACnB;;;;;;IAEO,cAAc,CAAC,CAAS;QAC9B,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;KAC/E;;;;;;IAEO,cAAc,CAAC,CAAS;QAC9B,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAChF;;;;;;;IAEO,YAAY,CAAC,WAAmB,EAAE,WAAwB;QAChE,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE;;kBACvD,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB;YACzD,IAAI,aAAa,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,WAAW,GAAG,kBAAkB,CAAC,qBAAqB,EAAE;gBAClH,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,WAAW,GAAG,kBAAkB,CAAC,gBAAgB,GAAG,IAAI,CAAC;aACpG;YACD,IAAI,aAAa,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,YAAY,GAAG,kBAAkB,CAAC,qBAAqB,EAAE;gBACpH,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,YAAY,GAAG,kBAAkB,CAAC,gBAAgB,GAAG,IAAI,CAAC;aACtG;SACF;KACF;;;;;IAEM,cAAc,CAAC,IAAY;QAChC,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC3D;;;;;;IAEM,SAAS,CAAC,KAAgB,EAAE,IAAY;QAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;SACR;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;;cAC3B,QAAQ,GAA+B,EAAE;;cACzC,KAAK,GAAkB,EAAE;QAC/B,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;;kBACtC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,EAAE;YAChE,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;;sBAClC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAC1E,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAC1B;SACF;aAAM;YACL,QAAQ,CAAC,IAAI,CAAC,CAAC,oBAAC,KAAK,CAAC,MAAM,GAAgB,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClB;;cACK,QAAQ,GAAa,EAAE;;cACvB,QAAQ,GAAa,EAAE;QAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YACjE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;SACjE;;cACK,aAAa,GAAc,oBAAC,KAAK,IAAS,aAAa,IAAI,KAAK;QACtE,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE;YACpC,IAAI,aAAa,CAAC,WAAW,EAAE;gBAC7B,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBAC5E,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;aAClC;YACD,aAAa,CAAC,WAAW,sBAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAmB,CAAC;;kBACxE,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE;YAC9D,aAAa,CAAC,WAAW,CAAC,UAAU,GAAG;gBACrC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC9C,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;aAC9C,CAAC;YACF,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YACtD,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;YACvD,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAEhD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;;kBAC/C,YAAY,GAAiB;gBACjC,IAAI;gBACJ,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY;gBAC5C,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC9C,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;aAC9C;YACD,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;YAEzE,IAAI,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE;gBAC3C,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aACjF;iBAAM;;sBACC,MAAM,sBAAgB,KAAK,CAAC,MAAM,EAAe;gBACvD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACjD,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBAC9B,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,GAAG,IAAI,CAAC;aACjD;YACD,OAAO;SACR;QACD,IAAI,CAAC,iBAAiB,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB;gBACE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACd,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;aACf,CACF,CAAC;SACH;QAED,IAAI,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,mBAAmB,EAAE;YACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;sBAC9C,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;;sBAChC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC;;sBACpD,aAAa,GAAG,CAAC,CAAC,gDAAgD;oBAChD,QAAQ,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM;oBAC/D,SAAS,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ;oBAClE,sDAAsD,WAAW,CAAC,IAAI,mBAAmB,CAAC;;sBAC5G,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAChE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC;gBAC1F,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC1D,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9F;SACF;QACD,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QACtE,IAAI,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE;YAC3C,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACjF;aAAM;YACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1E,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;aACxD;YACD,IAAI,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,mBAAmB,EAAE;gBACjE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,GAAG,IAAI,CAAC;aACjD;SACF;KACF;;;;;IAEM,IAAI,CAAC,KAAgB;QAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;SACd;;YACG,QAAQ,GAAW,IAAI;;cACrB,aAAa,GAAc,oBAAC,KAAK,IAAS,aAAa,IAAI,KAAK;;cAChE,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3D,IAAI,QAAQ,EAAE;;gBACR,YAAY,GAAiB,IAAI;YACrC,IAAI;gBACF,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;aACrC;YAAC,OAAO,CAAC,EAAE,GAAE;YACd,IAAI,YAAY,IAAI,YAAY,CAAC,YAAY,EAAE;gBAC7C,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE;oBACxC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,KAAK,YAAY,CAAC,YAAY,EAAE;oBACtE,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC;;0BACvB,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE;;0BACxD,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI;;0BAC/B,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG;oBACpC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;iBACxE;aACF;SACF;QACD,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC5C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;SACd;aAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE;YACrD,OAAO,IAAI,CAAC,aAAa;;;YAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;0BAC7D,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC;;0BACpD,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;oBACtC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC9E,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;iBAC/E;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;gBACvC,OAAO,KAAK,CAAC;aACd,EAAC,CAAC;SACJ;KACF;;;;;IAEM,QAAQ,CAAC,KAAgB;QAC9B,IAAI,aAAa,CAAC,WAAW,EAAE;;kBACvB,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,UAAU;YACvD,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC;YACnF,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC;YAClF,IAAI,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;gBAC5C,IAAI,CAAC,aAAa;;;gBAAC;oBACjB,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBACzE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,GAAG,KAAK,CAAC;iBAClD,EAAC,CAAC;aACJ;YACD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;SACR;QACD,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE;YAC/C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;SACR;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,oBAAoB,EAAE;YAClE,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE;gBAC9C,OAAO,IAAI,CAAC,aAAa;;;gBAAC;oBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;8BAC7D,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC;;8BACpD,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;wBACtC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;wBAClE,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;wBAClE,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;qBACzD;oBACD,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;oBACvC,OAAO,KAAK,CAAC;iBACd,EAAC,CAAC;aACJ;SACF;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,mBAAmB,EAAE;YACxE,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE;gBAC9C,IAAI,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;oBAC5C,IAAI,CAAC,aAAa;;;oBAAC;wBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BACnE,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;yBAC1E;wBACD,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,GAAG,KAAK,CAAC;qBAClD,EAAC,CAAC;iBACJ;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;0BAC7D,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC;;0BACpD,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;oBACtC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC/G,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC9G,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;iBACzD;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;aACxB;SACF;KACF;;;;;IAEM,OAAO,CAAC,KAAgB;QAC7B,IAAI,CAAC,aAAa;;;QAAC;YACjB,IAAI,aAAa,CAAC,WAAW,EAAE;gBAC7B,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBAC5E,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;aAClC;YACD,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE;gBACpC,OAAO;aACR;YACD,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,EAAE;gBAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;0BAC7D,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC;;0BACpD,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;oBAC9D,WAAW,CAAC,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1E,WAAW,CAAC,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzE,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;iBACnE;gBACD,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;gBACjD,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;aACxC;YAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE;gBAC9C,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC/C,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;aAC7B;SACF,EAAC,CAAC;KACJ;CAEF;;;IAtSC,kDAKE;;;;;IAEF,4CAAqC;;;;;IACrC,gDAA4C;;;;;IAE5C,wDAAoD;;;;;IACpD,iDAAwC;;;;;IAExC,6CAA8C;;;;;IAC9C,gDAA0C;;;;;IAC1C,8CAAuC;;;;;IACvC,8CAAoE;;;;;AAwRtE,gCAKC;;;IAJC,yCAA4B;;IAC5B,2CAA2C;;IAC3C,8CAA2B;;IAC3B,wCAAyB;;;;;AAG3B,8BAKC;;;IAJC,qCAGE;;;;;AAGJ,4BAEC;;;IADC,oCAA6B;;;;;AAG/B,2BAKC;;;IAJC,4BAAa;;IACb,oCAAqB;;IACrB,+BAAgB;;IAChB,+BAAgB;;;;;;;ACvUlB,MAIa,oBAAoB;IAE/B;KACC;;;;;;;IAEM,iBAAiB,CAAC,GAAa,EAAE,GAAa,EAAE,KAAa;;YAC9D,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG;QACxC,IAAI,KAAK,KAAK,kBAAkB,CAAC,WAAW,EAAE;;kBACtC,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC;;kBACvD,kBAAkB,GAAG,IAAI,CAAC,6BAA6B,CAAC,GAAG,EAAE,GAAG,CAAC;YACvE,UAAU,IAAI,KAAK,aAAa,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,KAAK,kBAAkB,CAAC,CAAC,GAAG,EAAE,MAAM,kBAAkB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;SACrI;aAAM;YACL,UAAU,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;SACtC;QACD,OAAO,UAAU,CAAC;KACnB;;;;;;IAEM,aAAa,CAAC,GAAa,EAAE,GAAa;QAC/C,OAAO;YACL,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;YACtB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;SACvB,CAAC;KACH;;;;;;;IAEO,wBAAwB,CAAC,GAAa,EAAE,GAAa;QAC3D,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;KAC5B;;;;;;;IAEO,wBAAwB,CAAC,GAAa,EAAE,GAAa;QAC3D,OAAO;YACL,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC;SACnD,CAAC;KACH;;;;;;;IAEO,6BAA6B,CAAC,GAAa,EAAE,GAAa;QAChE,OAAO;YACL,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC;SACnD,CAAC;KACH;;;YAzCF,UAAU;;;;;;;;;ACFX,MAIa,qBAAqB;;;;;;;;;;;IAuBhC,YAAY,eAAyC,EACzC,kBAAwC,EACxC,YAA4B,EAC5B,KAAc,EACd,mBAA+E,EAC/E,aAAkD,EAClD,aAAqB,EACrB,SAAiB;QA5B7B,iBAAY,GAAiB;YAC3B,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,KAAK;SACzB,CAAC;QAEM,sBAAiB,GAAgB,IAAI,CAAC;QACtC,eAAU,GAAa,EAAE,CAAC;QAC1B,2BAAsB,GAAgB,IAAI,CAAC;QAC3C,oBAAe,GAAG,EAAE,CAAC;QAmB3B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;;;QAAK,MAAM,IAAI,EAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;;;;;;IAEM,SAAS,CAAC,KAAgB,EAAE,SAAsB;;YACnD,aAA0B;;YAC1B,SAAiB;;YACjB,QAAgB;QACpB,IAAI,SAAS,CAAC,IAAI,KAAK,kBAAkB,CAAC,iBAAiB,EAAE;YAC3D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBACnC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,EAAE,EAAE;oBACrC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACvE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;oBACvB,QAAQ,GAAG,IAAI,CAAC;oBAChB,IAAI,CAAC,aAAa;;;oBAAC;wBACjB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;qBACtC,EAAC,CAAC;oBACH,MAAM;iBACP;aACF;SACF;QACD,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC;QACpC,IAAI,aAAa,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC;YACvC,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC/F,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;SACvC;aAAM;YACL,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACnC,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;SAC5F;;cACK,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB;QAClD,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;SAC/D;QACD,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;QAExD,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG;YAC7B,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;SACrC,CAAC;;cACI,aAAa,GAAc,oBAAC,KAAK,IAAS,aAAa,IAAI,KAAK;QAEtE,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QACtE,IAAI,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE;YAC3C,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACjF;aAAM;YACL,IAAI,CAAC,sBAAsB,sBAAG,KAAK,CAAC,MAAM,EAAe,CAAC;YAC1D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC;YACjE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACnD,IAAI,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,mBAAmB,EAAE;gBACjE,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,IAAI,CAAC;aAC5C;SACF;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,mBAAmB,EAAE;YACjE,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,KAAK,SAAS,EAAE;gBAC5C,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAC/E,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/F,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACpG;YAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EACpC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACzH,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3E,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SAC5E;QACD,KAAK,CAAC,eAAe,EAAE,CAAC;KACzB;;;;;IAEM,QAAQ,CAAC,KAAgB;QAC9B,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,mBAAmB,EAAE;gBACpG,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,EAAE;oBACxC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;iBAClE;gBAED,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE;oBACvC,IAAI,CAAC,aAAa;;;oBAAC;wBACjB,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,KAAK,CAAC;qBAC7C,EAAC,CAAC;iBACJ;gBAED,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG;oBAC7B,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;oBACpC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;iBACrC,CAAC;gBAEF,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EACpC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzH,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC3E,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aAE5E;iBAAM,IAAI,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,oBAAoB,EAAE;gBACzE,OAAO,IAAI,CAAC,aAAa;;;gBAAC;oBACxB,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,EAAE;wBACxC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;qBAClE;oBAED,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG;wBAC7B,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;wBACpC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;qBACrC,CAAC;iBACH,EAAC,CAAC;aACJ;SACF;KACF;;;;;;IAEM,iBAAiB,CAAC,KAAgB,EAAE,SAAsB;QAC/D,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI;gBACF,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC1D,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE;wBACjC,WAAW,EAAE,SAAS,CAAC,EAAE;qBAC1B,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACxB;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,KAAK,YAAY,oBAAoB,EAAE;oBACzC,OAAO,IAAI,CAAC;iBACb;qBAAM;oBACL,MAAM,KAAK,CAAC;iBACb;aACF;YACD,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE;gBAC/D,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,OAAO,KAAK,CAAC;aACd;SACF;KACF;;;;;IAEM,eAAe,CAAC,KAAgB;QACrC,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;KACxC;;;;;;IAEM,cAAc,CAAC,KAAgB,EAAE,SAAsB;QAC5D,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI;gBACF,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC1D,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE;wBACjC,WAAW,EAAE,SAAS,CAAC,EAAE;qBAC1B,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACxB;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,KAAK,YAAY,oBAAoB,EAAE;oBACzC,OAAO,IAAI,CAAC;iBACb;qBAAM;oBACL,MAAM,KAAK,CAAC;iBACb;aACF;YACD,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE;gBAC/D,IAAI,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,mBAAmB,EAAE;oBAEjE,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;oBAEtC,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oBAC3F,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EACpC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;oBACzH,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC3E,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAE3E,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;oBACxB,OAAO,KAAK,CAAC;iBACd;qBAAM,IAAI,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,oBAAoB,EAAE;oBACzE,OAAO,IAAI,CAAC,aAAa;;;oBAAC;wBACxB,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;wBAC3F,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;wBACxB,OAAO,KAAK,CAAC;qBACd,EAAC,CAAC;iBACJ;aACF;SACF;KACF;;;;;IAEM,OAAO,CAAC,KAAgB;QAC7B,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;YAChC,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC;YACrC,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;YACnC,KAAK,CAAC,eAAe,EAAE,CAAC;YAExB,IAAI,IAAI,CAAC,aAAa,KAAK,kBAAkB,CAAC,mBAAmB,EAAE;gBACjE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;aACnD;YACD,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;;sBACxB,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;gBACvC,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAClC,IAAI,CAAC,aAAa;;;gBAAC;oBACjB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBACvC,EAAC,CAAC;aACJ;SACF;KACF;;;;;;IAEM,IAAI,CAAC,KAAgB,EAAE,eAA4B;QACxD,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;YAChC,IAAI;gBACF,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC1D,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE;wBACjC,WAAW,EAAE,eAAe,CAAC,EAAE;qBAChC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACxB;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,KAAK,YAAY,oBAAoB,EAAE;oBACzC,OAAO,IAAI,CAAC;iBACb;qBAAM;oBACL,MAAM,KAAK,CAAC;iBACb;aACF;YAED,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAAE;gBACrE,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAClC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC9G,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC;aACd;SACF;KACF;CACF;;;IAjQC,6CAKE;;;;;IAEF,kDAA8C;;;;;IAC9C,2CAAkC;;;;;IAClC,uDAAmD;;;;;IACnD,gDAA6B;;;;;IAE7B,gDAA2D;;;;;IAC3D,mDAA0D;;;;;IAC1D,6CAA8C;;;;;IAC9C,sCAAgC;;;;;IAChC,oDAAiG;;;;;IACjG,8CAAoE;;;;;IACpE,8CAAuC;;;;;IACvC,0CAAmC;;;;;AAgPrC,2BAWC;;;IAVC,kCAAoB;;IACpB,yCAA2B;;IAC3B,kCAAqB;;IACrB,kCAAqB;;IACrB,iCAAmB;;IACnB,gCAAkB;;IAClB,oCAAuB;;IACvB,gCAA2B;;IAC3B,mCAA8B;;IAC9B,qCAAgC;;;;;;;AClRlC,MAAa,kBAAkB;;;;IAU7B,YAAY,aAAkD;QAR9D,mBAAc,GAAmB;YAC/B,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI;SACX,CAAC;QAKA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;KACpC;;;;;;IAEM,aAAa,CAAC,KAAiB,EAAE,IAAY;QAClD,OAAO,IAAI,CAAC,aAAa;;;QAAC;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;SACjC,EAAC,CAAC;KACJ;;;;;;IAEM,YAAY,CAAC,KAAiB,EAAE,IAAY;QACjD,OAAO,IAAI,CAAC,aAAa;;;QAAC;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;SACjC,EAAC,CAAC;KACJ;;;;;;IAEM,mBAAmB,CAAC,KAAiB,EAAE,SAAsB;QAClE,OAAO,IAAI,CAAC,aAAa;;;QAAC;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,SAAS,CAAC;SAC3C,EAAC,CAAC;KACJ;;;;;;IAEM,mBAAmB,CAAC,KAAiB,EAAE,SAAsB;QAClE,OAAO,IAAI,CAAC,aAAa;;;QAAC;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC;SACtC,EAAC,CAAC;KACJ;;;;;;IAEM,cAAc,CAAC,KAAiB,EAAE,IAAY;QACnD,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;KACjC;;;;;;IAEM,cAAc,CAAC,KAAiB,EAAE,IAAY;QACnD,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;KACjC;CACF;;;IA3CC,4CAIE;;;;;IAEF,2CAAoE;;;;;AAuCtE,6BAIC;;;IAHC,mCAAuB;;IACvB,8BAAa;;IACb,8BAAa;;;;;;;;MCpDT,KAAK,GAAG,eAAe;;MAEvB,KAAK;;;;;AAAG,CAAC,IAAa,EAAE,IAAY,KACxC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;;;MAE/C,MAAM;;;;AAAG,CAAC,IAAa,KAC3B,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC;IACzB,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAA;;;MAExB,YAAY;;;;AAAG,CAAC,IAAiB,KACrC,CAAC,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI;MAC3B,QAAQ,CAAC,IAAI;MACb,MAAM,CAAC,IAAI,CAAC;UACZ,IAAI;UACJ,YAAY,oBAAC,IAAI,CAAC,UAAU,GAAgB,CAAA;;;;;;;ACdlD;;;AAEA,wBAKC;;;IAJC,uBAAW;;IACX,uBAAW;;IACX,uBAAW;;IACX,uBAAW;;AAGb,MAAa,wBAAwB;;;;;;IAenC,YAAY,YAA4B,EAC5B,aAA0B,EAC1B,aAAkD;QAf7C,eAAU,GAAc;YACvC,EAAE,EAAE,CAAC;YACL,EAAE,EAAE,CAAC;YACL,EAAE,EAAE,CAAC;YACL,EAAE,EAAE,CAAC;SACN,CAAC;QAWA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAC7D,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;KACpC;;;;;IAEM,SAAS,CAAC,CAAa;QAC5B,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;eAC3E,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC9B,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,KAAK,CAAC;;kBAC5B,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtD,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;KACF;;;;;IAEM,SAAS,CAAC,CAAa;QAC5B,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;eAC3E,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;;kBACzB,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;KACF;;;;;;IAEO,YAAY,CAAC,MAA0B;;cACvC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE;;cACpD,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG;;cACjC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI;;cAChC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG;;cAC3B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;QACpC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE;;kBAC3B,SAAS,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,CAAC;;kBAC3C,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;YAC7C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;SAClD;aAAM,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE;;kBACrC,YAAY,GAAG,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;;kBACjD,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;YAC7C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;SACrD;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,GAAG,EAAE,EAAE;;kBAC5B,UAAU,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC;;kBAC7C,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;YAC9C,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;SACpD;aAAM,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE;;kBACpC,WAAW,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;;kBAC/C,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;YAC9C,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;SACrD;KACF;;;;;IAEM,OAAO,CAAC,CAAa;QAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;eAC3E,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;;kBACzB,OAAO,sBAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,EAAa;YACvE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SAC7B;KACF;;;;;IAEO,gBAAgB;;cAChB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;;cACrD,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;;cACrD,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;;cACrD,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC;QAC1C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;KAClD;;;;;;IAEO,aAAa,CAAC,OAAkB;QACtC,IAAI,CAAC,aAAa;;;QAAC;YACjB,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;SAC5C,EAAC,CAAC;KACJ;CAEF;;;;;;IAnGC,8CAKE;;;;;IAEF,gDAA8C;;;;;IAC9C,iDAA4C;;;;;IAC5C,kDAAqD;;;;;IACrD,iDAAoD;;;;;IACpD,iDAAoE;;;;;;;ACxBtE,MA+Ba,qBAAqB;;;;;;;;;IAuEhC,YAAoB,UAAmC,EACnC,OAAwB,EACxB,eAAyC,EAC1C,kBAAwC,EACvC,EAAqB,EACrB,IAAY;QALZ,eAAU,GAAV,UAAU,CAAyB;QACnC,YAAO,GAAP,OAAO,CAAiB;QACxB,oBAAe,GAAf,eAAe,CAA0B;QAC1C,uBAAkB,GAAlB,kBAAkB,CAAsB;QACvC,OAAE,GAAF,EAAE,CAAmB;QACrB,SAAI,GAAJ,IAAI,CAAQ;QAzChC,iBAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAE1B,+BAA0B,GAAG,IAAI,CAAC;QAsB1C,uBAAkB,GAAG,kBAAkB,CAAC;QAEhC,gBAAW,GAA2B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM;;;;;QAAS,CAAC,KAAK,EAAE,IAAI;YAC7F,OAAO,IAAI,CAAC;SACb,EAAC,CAAC;QAEK,gBAAW,GAA2B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM;;;;;QAAS,CAAC,KAAK,EAAE,IAAI;YAC7F,OAAO,IAAI,CAAC;SACb,EAAC,CAAC;QAEc,yBAAoB,GAAG,IAAI,OAAO,EAAO,CAAC;QAQzD,IAAI,CAAC,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC;QACxD,IAAI,CAAC,oBAAoB;aACtB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;aACtB,SAAS;;;QAAC,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAC,CAAC;KAC7C;;;;IAhFD,IACI,WAAW;QACb,OAAO,kBAAkB,CAAC,WAAW,CAAC;KACvC;;;;IAiCD,IAAI,qBAAqB;QACvB,OAAO,IAAI,CAAC,0BAA0B,CAAC;KACxC;;;;;IACD,IACI,qBAAqB,CAAC,KAAc;QACtC,IAAI,CAAC,0BAA0B,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KAChE;;;;IAwCD,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,CAAC,SAAS,EAAE;YAC9H,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC7C;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,kBAAkB,CAAC,oBAAoB,CAAC;QACnF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC;QAErD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;;kBAC3C,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YACxC,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,GAAG,KAAK,eAAe,EAAE;gBAC7D,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;aACvD;SACF;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;;cAEpD,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAEhD,IAAI,CAAC,YAAY,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EACxF,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,eAAe,EAC/C,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,EACxH,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAE/E,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;SACpD;;cAEK,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAEnD,IAAI,CAAC,mBAAmB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,EAC/E,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEhD,IAAI,CAAC,mBAAmB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,EACnH,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI,EAAE,aAAa,EACjE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAE9D,IAAI,CAAC,sBAAsB,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAC1E,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE,aAAa,CAAC,CAAC;QAEhE,IAAI,CAAC,SAAS,GAAG;YACf,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAChF,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC5E,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAChF,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC5E,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;YACtE,qBAAqB,EAAE,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAChG,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC1F,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC5F,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAC9E,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAC5E,mBAAmB,EAAE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAC1F,mBAAmB,EAAE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAC1F,WAAW;;;;;YAAE,CAAC,KAAK,EAAE,IAAI;gBACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3D,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;aACxB,CAAA;SACF,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;KACnD;;;;IAED,SAAS;QACP,IAAI,IAAI,CAAC,KAAK,EAAE;;kBACR,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;kBACrD,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;gBACvD,YAAY,GAAG,KAAK;;gBACpB,YAAY,GAAG,KAAK;YACxB,IAAI,WAAW,KAAK,IAAI,EAAE;gBACxB,WAAW,CAAC,gBAAgB;;;gBAAC;oBAC3B,YAAY,GAAG,IAAI,CAAC;iBACrB,EAAC,CAAC;gBACH,WAAW,CAAC,kBAAkB;;;gBAAC;oBAC7B,YAAY,GAAG,IAAI,CAAC;iBACrB,EAAC,CAAC;aACJ;YACD,IAAI,WAAW,KAAK,IAAI,EAAE;gBACxB,WAAW,CAAC,gBAAgB;;;gBAAC;oBAC3B,YAAY,GAAG,IAAI,CAAC;iBACrB,EAAC,CAAC;gBACH,WAAW,CAAC,kBAAkB;;;gBAAC;oBAC7B,YAAY,GAAG,IAAI,CAAC;iBACrB,EAAC,CAAC;aACJ;YACD,IAAI,YAAY,EAAE;gBAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;aACnD;YACD,IAAI,YAAY,IAAI,YAAY,EAAE;gBAChC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;aAClC;SACF;KACF;;;;;IAED,iBAAiB,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EACxF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;KAC5D;;;;;IAEM,gBAAgB,CAAC,GAAa;;YAC/B,IAAI,GAAG,CAAC;;YACR,IAAI,GAAG,CAAC;;cACN,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;;;;QAAC,CAAC,IAAI;YAC5B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC/C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACjD,EAAC,CAAC;;YACC,KAAK;;YACL,MAAM;QACV,IAAI,GAAG,EAAE;YACP,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,GAAG,IAAI,CAAC;SACf;aAAM;YACL,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YACpD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;SACvD;QACD,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;KACtC;;;;;IAED,WAAW,CAAC,KAAiB,KAAI;;;;;;IAEjC,aAAa,CAAC,KAAiB,EAAE,IAAY;QAC3C,KAAK,CAAC,eAAe,EAAE,CAAC;KACzB;;;;;;IAED,SAAS,CAAC,KAAiB,EAAE,IAAY;QACvC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAClE,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;;;;;;IAED,UAAU,CAAC,KAAY,EAAE,IAAY;QACnC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;;;;;;IAED,QAAQ,CAAC,KAAY,EAAE,IAAY;QACjC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAC1C;KACF;;;;;;IAED,eAAe,CAAC,KAAiB,EAAE,IAAY;QAC7C,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;YACtC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SACjD;KACF;;;;;;IAED,aAAa,CAAC,KAAiB,EAAE,IAAY;QAC3C,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;YACpC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAC/C;KACF;;;;;;IAED,cAAc,CAAC,KAAiB,EAAE,IAAY;QAC5C,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACnD;;;;;;IAED,cAAc,CAAC,KAAiB,EAAE,IAAY;QAC5C,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACnD;;;;;IAGD,QAAQ,CAAC,KAAgB;QACvB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC1C;;;;;IAGD,IAAI,CAAC,KAAgB;QACnB,IAAI,KAAK,CAAC,cAAc,EAAE;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;QACD,IAAI,KAAK,CAAC,eAAe,EAAE;YACzB,KAAK,CAAC,eAAe,EAAE,CAAC;SACzB;QACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACtC;;;;;IAGD,SAAS,CAAC,KAAiB;QACzB,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAC9C;;;;;IAGD,SAAS,CAAC,KAAiB;QACzB,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAC9C;;;;;IAGD,OAAO,CAAC,KAAiB;QACvB,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC5C;;;YA/RF,SAAS,SAAC;gBACT,QAAQ,EAAE,WAAW;gBACrB,k2LAA6C;gBAE7C,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;;YA1BC,UAAU;YAKV,eAAe;YAMR,wBAAwB;YAExB,oBAAoB;YAhBF,iBAAiB;YAS1C,MAAM;;;0BAuBL,WAAW,SAAC,YAAY;oBAKxB,KAAK;8BAGL,KAAK;wBAGL,KAAK;4BAGL,KAAK;8BAGL,KAAK;4BAGL,KAAK;wBAGL,KAAK;yBAGL,KAAK;2BAGL,KAAK;2BAGL,MAAM;oCAON,KAAK;uBAkNL,YAAY,SAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;mBAMnC,YAAY,SAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;wBAW/B,YAAY,SAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;wBAKpC,YAAY,SAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;sBAKpC,YAAY,SAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;;IA/QnC,sCACe;;IAEf,gDACuB;;IAEvB,0CACkB;;IAElB,8CAC6B;;IAE7B,gDACyB;;IAEzB,8CACsB;;IAEtB,0CACkB;;IAElB,2CACmB;;IAEnB,6CACqB;;IAErB,6CACkC;;;;;IAElC,2DAA0C;;IAS1C,0CAAuB;;IAEvB,kDAAqC;;IAErC,6CAA6B;;IAC7B,oDAA2C;;IAC3C,oDAA2C;;IAC3C,iDAAqC;;IACrC,uDAAiD;;IAEjD,2CAAmB;;IACnB,mDAA2B;;IAE3B,mDAAwC;;;;;IAExC,4CAEG;;;;;IAEH,4CAEG;;;;;IAEH,qDAA2D;;;;;IAE/C,2CAA2C;;;;;IAC3C,wCAAgC;;;;;IAChC,gDAAiD;;IACjD,mDAA+C;;;;;IAC/C,mCAA6B;;;;;IAC7B,qCAAoB;;;;;;;AC3GlC,MAOa,iBAAiB;;;;IAQ5B,YAAmB,UAAmC;QAAnC,eAAU,GAAV,UAAU,CAAyB;KACrD;;;;IAED,QAAQ;;cACA,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;KAClD;;;;;IAGD,QAAQ,CAAC,KAAgB;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;KACjE;;;;;IAGD,SAAS,CAAC,KAAgB;QACxB,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;KAC3C;;;;;IAGD,IAAI,CAAC,KAAgB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;KACvD;;;;;IAGD,OAAO,CAAC,KAAgB;QACtB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACnC;;;YAtCF,SAAS,SAAC;;gBAET,QAAQ,EAAE,aAAa;aACxB;;;;YANmB,UAAU;;;wBAS3B,KAAK;wBAGL,KAAK;uBAWL,YAAY,SAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;wBAKnC,YAAY,SAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;mBAKpC,YAAY,SAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;sBAK/B,YAAY,SAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;;IA7BnC,sCACuB;;IAEvB,sCACuB;;IAEX,uCAA0C;;;;;;;ACfxD,MAQa,oBAAoB;;;;IAc/B,YAAmB,UAAmC;QAAnC,eAAU,GAAV,UAAU,CAAyB;KACrD;;;;IAED,QAAQ;;cACA,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE;YAClC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;QACD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;KAC5E;;;;;IAED,WAAW,CAAC,OAAsB;;YAC5B,eAAe,GAAG,KAAK;QAC3B,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;;kBACrC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,aAAa,EAAE;gBACvE,IAAI,QAAQ,KAAK,oBAAoB,EAAE;oBACrC,eAAe,GAAG,IAAI,CAAC;iBACxB;aACF;SACF;QACD,IAAI,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE;YACrD,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;KACF;;;;;IAEO,oBAAoB;;cACpB,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAChD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,kBAAkB,EAAE;YAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;SACjD;aAAM;YACL,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;SACpD;KACF;;;;;IAGD,QAAQ,CAAC,KAAgB;;;;;KAKxB;;;;;IAGD,IAAI,CAAC,KAAgB;QACnB,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;SACvD;KACF;;;;;IAGD,OAAO,CAAC,KAAgB;QACtB,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACnC;KACF;;;;;IAGD,SAAS,CAAC,KAAgB;QACxB,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;SACrD;KACF;;;;;IAGD,UAAU,CAAC,KAAiB;QAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;SAC3D;KACF;;;;;IAGD,UAAU,CAAC,KAAiB;QAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;SAC3D;KACF;;;YAhGF,SAAS,SAAC;;gBAET,QAAQ,EAAE,gBAAgB;aAC3B;;;;YAPmB,UAAU;;;wBAU3B,KAAK;2BAGL,KAAK;wBAGL,KAAK;iCAGL,KAAK;uBAwCL,YAAY,SAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;mBAQnC,YAAY,SAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;sBAO/B,YAAY,SAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;wBAOlC,YAAY,SAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;yBAOpC,YAAY,SAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;yBAOrC,YAAY,SAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;;;;IArFtC,yCACuB;;IAEvB,4CAC6B;;IAE7B,yCACuB;;IAEvB,kDACgC;;IAEpB,0CAA0C;;;;;;;ACtBxD,MA6Ba,wBAAwB;;;;;;IAgDnC,YAAsD,mBAA0C,EAC5E,UAAmC,EACnC,wBAAkD;QAFhB,wBAAmB,GAAnB,mBAAmB,CAAuB;QAC5E,eAAU,GAAV,UAAU,CAAyB;QACnC,6BAAwB,GAAxB,wBAAwB,CAA0B;KACrE;;;;IAtBD,IACI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;KACrB;;;;IAED,IACI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;KAC3B;;;;IAED,IACI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;KAC3B;;;;IAWD,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;SAC7B;QACD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ;;;QAAK,SAAQ,EAAC,CAAC;QAChF,IAAI,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW;;;QAAK,SAAQ,EAAC,CAAC;QACtF,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS;;;QAAK,SAAQ,EAAC,CAAC;QAClF,IAAI,CAAC,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU;;;QAAK,SAAQ,EAAC,CAAC;QACpF,IAAI,CAAC,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU;;;QAAK,SAAQ,EAAC,CAAC;;cAE9E,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;SACnC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;;cAC5B,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;;cACpH,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,gBAAgB,CAAC;QAChF,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC9D,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACpD,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;;;;;IAED,WAAW,CAAC,OAAsB;;YAC5B,UAAU,GAAG,KAAK;QACtB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;;kBACrC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,aAAa,EAAE;gBACvE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBAC3F,UAAU,GAAG,IAAI,CAAC;iBACnB;aACF;SACF;QACD,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;KACF;;;;;IAEO,eAAe;;cACf,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC5E;;;;;IAEO,mBAAmB;QACzB,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAChE,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;KAC7C;;;;;;;;IAEO,WAAW,CAAC,OAA4B,EAAE,KAAa,EAAE,GAAY;QAC3E,IAAI,GAAG,EAAE;YACP,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACzB;aAAM;YACL,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC5B;KACF;;;;;IAGD,SAAS,CAAC,KAAiB;QACzB,KAAK,CAAC,eAAe,EAAE,CAAC;KACzB;;;;;IAGD,SAAS,CAAC,KAAgB;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SAChD;KACF;;;;;IAGD,OAAO,CAAC,KAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACnC;KACF;;;;;IAGD,KAAK,CAAC,KAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9C;KACF;;;;;IAGD,SAAS,CAAC,KAAiB;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SAChD;KACF;;;;;IAGD,QAAQ,CAAC,KAAiB;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/C;KACF;;;YApKF,SAAS,SAAC;gBACT,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,0CAA0C;;aAErD;;;;4CAiDc,MAAM,SAAC,wBAAwB;YA1E5C,UAAU;YADV,wBAAwB;;;wBA6BvB,KAAK;gCAGL,KAAK;mBAGL,KAAK;uBAGL,KAAK;mBAGL,KAAK;yBAGL,KAAK;iCAGL,KAAK;2BAGL,KAAK;uBAGL,KAAK;qBAGL,WAAW,SAAC,SAAS;kBAKrB,WAAW,SAAC,WAAW;mBAKvB,WAAW,SAAC,YAAY;mCAOxB,SAAS,SAAC,aAAa,EAAE,EAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAC;wBA2E/D,YAAY,SAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;wBAKpC,YAAY,SAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;sBAOpC,YAAY,SAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;oBAOlC,YAAY,SAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;wBAOhC,YAAY,SAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;uBAOpC,YAAY,SAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;;;IAxJpC,6CACuB;;IAEvB,qDACqC;;IAErC,wCACa;;IAEb,4CACkB;;IAElB,wCACc;;IAEd,8CACoB;;IAEpB,sDACgC;;IAEhC,gDAC6B;;IAE7B,4CACkB;;IAiBlB,iDAA+B;;IAE/B,wDAAyG;;;;;IAE7F,uDAAoF;;;;;IACpF,8CAA2C;;;;;IAC3C,4DAA0D;;;;;AAiHxE,MAAsB,eAAe;IAArC;QA6BE,uBAAkB,GAAG,kBAAkB,CAAC;KAKzC;;;;IAHC,QAAQ;KACP;;;wBA9BA,KAAK;gCAGL,KAAK;mBAGL,KAAK;uBAGL,KAAK;mBAGL,KAAK;yBAGL,KAAK;iCAGL,KAAK;2BAGL,KAAK;uBAGL,KAAK;;;;IAxBN,oCACuB;;IAEvB,4CACqC;;IAErC,+BACa;;IAEb,mCACkB;;IAElB,+BACc;;IAEd,qCACoB;;IAEpB,6CACgC;;IAEhC,uCAC6B;;IAE7B,mCACkB;;IAElB,6CAAwC;;;;;;;AC7N1C,MAQa,sBAAuB,SAAQ,eAAe;IAEzD;QACE,KAAK,EAAE,CAAC;KACT;;;YATF,SAAS,SAAC;gBACT,QAAQ,EAAE,iBAAiB;gBAC3B,8hDAA4C;;aAE7C;;;;;;;;;ACPD,aAyBgB;IACR,iBAAiB,EAAE,sBAAsB;CAC1C;AAWP,MAAa,kBAAkB;;;YA3B9B,QAAQ,SAAC;gBACR,eAAe,EAAE;oBACf,sBAAsB;iBACvB;gBACD,YAAY,EAAE,CAAC,qBAAqB;oBAClC,iBAAiB;oBACjB,oBAAoB;oBACpB,wBAAwB;oBACxB,sBAAsB,CAAC;gBACzB,SAAS,EAAE;oBACT,wBAAwB;oBACxB,oBAAoB;oBACpB;wBACE,OAAO,EAAE,wBAAwB;wBACjC,QAAQ,MAEP;qBACF;iBACF;gBACD,OAAO,EAAE;oBACP,YAAY;iBACb;gBACD,OAAO,EAAE,CAAC,qBAAqB;oBAC7B,iBAAiB;oBACjB,oBAAoB;oBACpB,sBAAsB,CAAC;aAC1B;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/dist/ngx-flowchart/fesm5/ngx-flowchart.js b/dist/ngx-flowchart/fesm5/ngx-flowchart.js index f778dff..2c06c95 100644 --- a/dist/ngx-flowchart/fesm5/ngx-flowchart.js +++ b/dist/ngx-flowchart/fesm5/ngx-flowchart.js @@ -218,7 +218,7 @@ var BaseError = /** @class */ (function () { } return BaseError; }()); -BaseError.prototype = new Error(); +Object.defineProperty(BaseError, 'prototype', new Error()); var ModelvalidationError = /** @class */ (function (_super) { __extends(ModelvalidationError, _super); function ModelvalidationError(message) { @@ -351,7 +351,7 @@ function fcTopSort(graph) { * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FcModelService = /** @class */ (function () { - function FcModelService(modelValidation, model, modelChanged, cd, selectedObjects, dropNode, createEdge, edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback, canvasHtmlElement, svgHtmlElement) { + function FcModelService(modelValidation, model, modelChanged, detectChangesSubject, selectedObjects, dropNode, createEdge, edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback, canvasHtmlElement, svgHtmlElement) { var _this = this; this.connectorsHtmlElements = {}; this.nodesHtmlElements = {}; @@ -362,7 +362,7 @@ var FcModelService = /** @class */ (function () { this.modelValidation = modelValidation; this.model = model; this.modelChanged = modelChanged; - this.cd = cd; + this.detectChangesSubject = detectChangesSubject; this.canvasHtmlElement = canvasHtmlElement; this.svgHtmlElement = svgHtmlElement; this.modelValidation.validateModel(this.model); @@ -420,7 +420,7 @@ var FcModelService = /** @class */ (function () { * @return {?} */ function () { - _this.cd.detectChanges(); + _this.detectChangesSubject.next(); }), 0); }; /** @@ -747,23 +747,6 @@ var FcModelService = /** @class */ (function () { } return this.dragImage; }; - /** - * @param {?} edgeAddedCallback - * @param {?} nodeRemovedCallback - * @param {?} edgeRemovedCallback - * @return {?} - */ - FcModelService.prototype.registerCallbacks = /** - * @param {?} edgeAddedCallback - * @param {?} nodeRemovedCallback - * @param {?} edgeRemovedCallback - * @return {?} - */ - function (edgeAddedCallback, nodeRemovedCallback, edgeRemovedCallback) { - this.edgeAddedCallback = edgeAddedCallback; - this.nodeRemovedCallback = nodeRemovedCallback; - this.edgeRemovedCallback = edgeRemovedCallback; - }; return FcModelService; }()); if (false) { @@ -771,8 +754,11 @@ if (false) { FcModelService.prototype.modelValidation; /** @type {?} */ FcModelService.prototype.model; - /** @type {?} */ - FcModelService.prototype.cd; + /** + * @type {?} + * @private + */ + FcModelService.prototype.detectChangesSubject; /** @type {?} */ FcModelService.prototype.selectedObjects; /** @type {?} */ @@ -3115,6 +3101,7 @@ if (false) { */ var NgxFlowchartComponent = /** @class */ (function () { function NgxFlowchartComponent(elementRef, differs, modelValidation, edgeDrawingService, cd, zone) { + var _this = this; this.elementRef = elementRef; this.differs = differs; this.modelValidation = modelValidation; @@ -3140,8 +3127,15 @@ var NgxFlowchartComponent = /** @class */ (function () { function (index, item) { return item; })); + this.detectChangesSubject = new Subject(); this.arrowDefId = 'arrow-' + Math.random(); this.arrowDefIdSelected = this.arrowDefId + '-selected'; + this.detectChangesSubject + .pipe(debounceTime(50)) + .subscribe((/** + * @return {?} + */ + function () { return _this.cd.detectChanges(); })); } Object.defineProperty(NgxFlowchartComponent.prototype, "canvasClass", { get: /** @@ -3207,7 +3201,7 @@ var NgxFlowchartComponent = /** @class */ (function () { this.userNodeCallbacks = this.userCallbacks.nodeCallbacks; /** @type {?} */ var element = $(this.elementRef.nativeElement); - this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.cd, this.selectedObjects, this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved, this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg')); + this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.detectChangesSubject, this.selectedObjects, this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved, this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg')); if (this.dropTargetId) { this.modelService.dropTargetId = this.dropTargetId; } @@ -3291,7 +3285,7 @@ var NgxFlowchartComponent = /** @class */ (function () { this.adjustCanvasSize(this.fitModelSizeByDefault); } if (nodesChanged_1 || edgesChanged_1) { - this.cd.detectChanges(); + this.detectChangesSubject.next(); } } }; @@ -3624,6 +3618,11 @@ if (false) { * @private */ NgxFlowchartComponent.prototype.edgesDiffer; + /** + * @type {?} + * @private + */ + NgxFlowchartComponent.prototype.detectChangesSubject; /** * @type {?} * @private diff --git a/dist/ngx-flowchart/fesm5/ngx-flowchart.js.map b/dist/ngx-flowchart/fesm5/ngx-flowchart.js.map index 93561dc..50af876 100644 --- a/dist/ngx-flowchart/fesm5/ngx-flowchart.js.map +++ b/dist/ngx-flowchart/fesm5/ngx-flowchart.js.map @@ -1 +1 @@ -{"version":3,"file":"ngx-flowchart.js","sources":["ng://ngx-flowchart/lib/ngx-flowchart.models.ts","ng://ngx-flowchart/lib/model.service.ts","ng://ngx-flowchart/lib/modelvalidation.service.ts","ng://ngx-flowchart/lib/node-dragging.service.ts","ng://ngx-flowchart/lib/edge-drawing.service.ts","ng://ngx-flowchart/lib/edge-dragging.service.ts","ng://ngx-flowchart/lib/mouseover.service.ts","ng://ngx-flowchart/lib/scrollparent.ts","ng://ngx-flowchart/lib/rectangleselect.service.ts","ng://ngx-flowchart/lib/ngx-flowchart.component.ts","ng://ngx-flowchart/lib/magnet.directive.ts","ng://ngx-flowchart/lib/connector.directive.ts","ng://ngx-flowchart/lib/node.component.ts","ng://ngx-flowchart/lib/default-node.component.ts","ng://ngx-flowchart/lib/ngx-flowchart.module.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { InjectionToken, Type } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\nexport const FC_NODE_COMPONENT_CONFIG = new InjectionToken('fc-node.component.config');\n\nexport interface FcNodeComponentConfig {\n nodeComponentType: Type;\n}\n\nconst htmlPrefix = 'fc';\nconst leftConnectorType = 'leftConnector';\nconst rightConnectorType = 'rightConnector';\n\nexport const FlowchartConstants = {\n htmlPrefix,\n leftConnectorType,\n rightConnectorType,\n curvedStyle: 'curved',\n lineStyle: 'line',\n dragAnimationRepaint: 'repaint',\n dragAnimationShadow: 'shadow',\n canvasClass: htmlPrefix + '-canvas',\n selectedClass: htmlPrefix + '-selected',\n editClass: htmlPrefix + '-edit',\n activeClass: htmlPrefix + '-active',\n hoverClass: htmlPrefix + '-hover',\n draggingClass: htmlPrefix + '-dragging',\n edgeClass: htmlPrefix + '-edge',\n edgeLabelClass: htmlPrefix + '-edge-label',\n connectorClass: htmlPrefix + '-connector',\n magnetClass: htmlPrefix + '-magnet',\n nodeClass: htmlPrefix + '-node',\n nodeOverlayClass: htmlPrefix + '-node-overlay',\n leftConnectorClass: htmlPrefix + '-' + leftConnectorType + 's',\n rightConnectorClass: htmlPrefix + '-' + rightConnectorType + 's',\n canvasResizeThreshold: 200,\n canvasResizeStep: 200\n};\n\n\nexport interface FcCoords {\n x?: number;\n y?: number;\n}\n\nexport interface FcRectBox {\n top: number;\n left: number;\n right: number;\n bottom: number;\n}\n\nexport interface FcConnector {\n id: string;\n type: string;\n}\n\nexport interface FcNode extends FcCoords {\n id: string;\n name: string;\n connectors: Array;\n readonly?: boolean;\n [key: string]: any;\n}\n\nexport interface FcEdge {\n label?: string;\n source?: string;\n destination?: string;\n active?: boolean;\n}\n\nexport interface FcItemInfo {\n node?: FcNode;\n edge?: FcEdge;\n}\n\nexport interface FcModel {\n nodes: Array;\n edges: Array;\n}\n\nexport interface UserCallbacks {\n dropNode?: (event: Event, node: FcNode) => void;\n createEdge?: (event: Event, edge: FcEdge) => Observable;\n edgeAdded?: (edge: FcEdge) => void;\n nodeRemoved?: (node: FcNode) => void;\n edgeRemoved?: (edge: FcEdge) => void;\n edgeDoubleClick?: (event: MouseEvent, edge: FcEdge) => void;\n edgeMouseOver?: (event: MouseEvent, edge: FcEdge) => void;\n isValidEdge?: (source: FcConnector, destination: FcConnector) => boolean;\n edgeEdit?: (event: Event, edge: FcEdge) => void;\n nodeCallbacks?: UserNodeCallbacks;\n}\n\nexport interface UserNodeCallbacks {\n nodeEdit?: (event: MouseEvent, node: FcNode) => void;\n doubleClick?: (event: MouseEvent, node: FcNode) => void;\n mouseDown?: (event: MouseEvent, node: FcNode) => void;\n mouseEnter?: (event: MouseEvent, node: FcNode) => void;\n mouseLeave?: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcCallbacks {\n nodeDragstart: (event: DragEvent, node: FcNode) => void;\n nodeDragend: (event: DragEvent) => void;\n edgeDragstart: (event: DragEvent, connector: FcConnector) => void;\n edgeDragend: (event: DragEvent) => void;\n edgeDrop: (event: DragEvent, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: DragEvent) => void;\n nodeMouseOver: (event: MouseEvent, node: FcNode) => void;\n nodeMouseOut: (event: MouseEvent, node: FcNode) => void;\n connectorMouseEnter: (event: MouseEvent, connector: FcConnector) => void;\n connectorMouseLeave: (event: MouseEvent, connector: FcConnector) => void;\n nodeClicked: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcAdjacentList {\n [id: string]: {\n incoming: number;\n outgoing: Array;\n };\n}\n\nclass BaseError {\n constructor() {\n Error.apply(this, arguments);\n }\n}\n\nBaseError.prototype = new Error();\n\nexport class ModelvalidationError extends BaseError {\n constructor(public message: string) {\n super();\n }\n}\n\nexport function fcTopSort(graph: FcModel): Array | null {\n const adjacentList: FcAdjacentList = {};\n graph.nodes.forEach((node) => {\n adjacentList[node.id] = {incoming: 0, outgoing: []};\n });\n graph.edges.forEach((edge) => {\n const sourceNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.source;\n });\n })[0];\n const destinationNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.destination;\n });\n })[0];\n adjacentList[sourceNode.id].outgoing.push(destinationNode.id);\n adjacentList[destinationNode.id].incoming++;\n });\n const orderedNodes: string[] = [];\n const sourceNodes: string[] = [];\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming === 0) {\n sourceNodes.push(node);\n }\n }\n while (sourceNodes.length !== 0) {\n const sourceNode = sourceNodes.pop();\n for (let i = 0; i < adjacentList[sourceNode].outgoing.length; i++) {\n const destinationNode = adjacentList[sourceNode].outgoing[i];\n adjacentList[destinationNode].incoming--;\n if (adjacentList[destinationNode].incoming === 0) {\n sourceNodes.push(destinationNode);\n }\n adjacentList[sourceNode].outgoing.splice(i, 1);\n i--;\n }\n orderedNodes.push(sourceNode);\n }\n let hasEdges = false;\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming !== 0) {\n hasEdges = true;\n }\n }\n if (hasEdges) {\n return null;\n } else {\n return orderedNodes;\n }\n}\n","import { FcModelValidationService } from './modelvalidation.service';\nimport { FcConnector, FcCoords, FcEdge, FcItemInfo, FcModel, FcNode, FcRectBox } from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { ChangeDetectorRef, EventEmitter } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\nexport class FcModelService {\n\n modelValidation: FcModelValidationService;\n model: FcModel;\n cd: ChangeDetectorRef;\n selectedObjects: any[];\n\n connectorsHtmlElements: HtmlElementMap = {};\n nodesHtmlElements: HtmlElementMap = {};\n canvasHtmlElement: HTMLElement = null;\n dragImage: HTMLImageElement = null;\n svgHtmlElement: SVGElement = null;\n\n dropNode: (event: Event, node: FcNode) => void;\n createEdge: (event: Event, edge: FcEdge) => Observable;\n edgeAddedCallback: (edge: FcEdge) => void;\n nodeRemovedCallback: (node: FcNode) => void;\n edgeRemovedCallback: (edge: FcEdge) => void;\n\n dropTargetId: string;\n\n private readonly modelChanged: EventEmitter;\n private readonly debouncer = new Subject();\n\n connectors: ConnectorsModel;\n nodes: NodesModel;\n edges: EdgesModel;\n\n constructor(modelValidation: FcModelValidationService,\n model: FcModel,\n modelChanged: EventEmitter,\n cd: ChangeDetectorRef,\n selectedObjects: any[],\n dropNode: (event: Event, node: FcNode) => void,\n createEdge: (event: Event, edge: FcEdge) => Observable,\n edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void,\n canvasHtmlElement: HTMLElement,\n svgHtmlElement: SVGElement) {\n\n this.modelValidation = modelValidation;\n this.model = model;\n this.modelChanged = modelChanged;\n this.cd = cd;\n this.canvasHtmlElement = canvasHtmlElement;\n this.svgHtmlElement = svgHtmlElement;\n this.modelValidation.validateModel(this.model);\n this.selectedObjects = selectedObjects;\n\n this.dropNode = dropNode || (() => {});\n this.createEdge = createEdge || ((event, edge) => of({...edge, label: 'label'}));\n this.edgeAddedCallback = edgeAddedCallback || (() => {});\n this.nodeRemovedCallback = nodeRemovedCallback || (() => {});\n this.edgeRemovedCallback = edgeRemovedCallback || (() => {});\n\n this.connectors = new ConnectorsModel(this);\n this.nodes = new NodesModel(this);\n this.edges = new EdgesModel(this);\n\n this.debouncer\n .pipe(debounceTime(100))\n .subscribe(() => this.modelChanged.emit());\n }\n\n public notifyModelChanged() {\n this.debouncer.next();\n }\n\n public detectChanges() {\n setTimeout(() => {\n this.cd.detectChanges();\n }, 0);\n }\n\n public selectObject(object: any) {\n if (this.isEditable()) {\n if (this.selectedObjects.indexOf(object) === -1) {\n this.selectedObjects.push(object);\n }\n }\n }\n\n public deselectObject(object: any) {\n if (this.isEditable()) {\n const index = this.selectedObjects.indexOf(object);\n if (index === -1) {\n throw new Error('Tried to deselect an unselected object');\n }\n this.selectedObjects.splice(index, 1);\n }\n }\n\n public toggleSelectedObject(object: any) {\n if (this.isSelectedObject(object)) {\n this.deselectObject(object);\n } else {\n this.selectObject(object);\n }\n }\n\n public isSelectedObject(object: any): boolean {\n return this.selectedObjects.indexOf(object) !== -1;\n }\n\n public selectAll() {\n this.model.nodes.forEach(node => {\n if (!node.readonly) {\n this.nodes.select(node);\n }\n });\n this.model.edges.forEach(edge => {\n this.edges.select(edge);\n });\n this.detectChanges();\n }\n\n public deselectAll() {\n this.selectedObjects.splice(0, this.selectedObjects.length);\n this.detectChanges();\n }\n\n public isEditObject(object: any): boolean {\n return this.selectedObjects.length === 1 &&\n this.selectedObjects.indexOf(object) !== -1;\n }\n\n private inRectBox(x: number, y: number, rectBox: FcRectBox): boolean {\n return x >= rectBox.left && x <= rectBox.right &&\n y >= rectBox.top && y <= rectBox.bottom;\n }\n\n public getItemInfoAtPoint(x: number, y: number): FcItemInfo {\n return {\n node: this.getNodeAtPoint(x, y),\n edge: this.getEdgeAtPoint(x, y)\n };\n }\n\n public getNodeAtPoint(x: number, y: number): FcNode {\n for (const node of this.model.nodes) {\n const element = this.nodes.getHtmlElement(node.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (x >= nodeElementBox.left && x <= nodeElementBox.right\n && y >= nodeElementBox.top && y <= nodeElementBox.bottom) {\n return node;\n }\n }\n return null;\n }\n\n public getEdgeAtPoint(x: number, y: number): FcEdge {\n const element = document.elementFromPoint(x, y);\n const id = element.id;\n let edgeIndex = -1;\n if (id) {\n if (id.startsWith('fc-edge-path-')) {\n edgeIndex = Number(id.substring('fc-edge-path-'.length));\n } else if (id.startsWith('fc-edge-label-')) {\n edgeIndex = Number(id.substring('fc-edge-label-'.length));\n }\n }\n if (edgeIndex > -1) {\n return this.model.edges[edgeIndex];\n }\n return null;\n }\n\n public selectAllInRect(rectBox: FcRectBox) {\n this.model.nodes.forEach((value) => {\n const element = this.nodes.getHtmlElement(value.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (!value.readonly) {\n const x = nodeElementBox.left + nodeElementBox.width / 2;\n const y = nodeElementBox.top + nodeElementBox.height / 2;\n if (this.inRectBox(x, y, rectBox)) {\n this.nodes.select(value);\n } else {\n if (this.nodes.isSelected(value)) {\n this.nodes.deselect(value);\n }\n }\n }\n });\n const canvasElementBox = this.canvasHtmlElement.getBoundingClientRect();\n this.model.edges.forEach((value) => {\n const start = this.edges.sourceCoord(value);\n const end = this.edges.destCoord(value);\n const x = (start.x + end.x) / 2 + canvasElementBox.left;\n const y = (start.y + end.y) / 2 + canvasElementBox.top;\n if (this.inRectBox(x, y, rectBox)) {\n this.edges.select(value);\n } else {\n if (this.edges.isSelected(value)) {\n this.edges.deselect(value);\n }\n }\n });\n }\n\n public deleteSelected() {\n const edgesToDelete = this.edges.getSelectedEdges();\n edgesToDelete.forEach((edge) => {\n this.edges.delete(edge);\n });\n const nodesToDelete = this.nodes.getSelectedNodes();\n nodesToDelete.forEach((node) => {\n this.nodes.delete(node);\n });\n }\n\n public isEditable(): boolean {\n return this.dropTargetId === undefined;\n }\n\n public isDropSource(): boolean {\n return this.dropTargetId !== undefined;\n }\n\n public getDragImage(): HTMLImageElement {\n if (!this.dragImage) {\n this.dragImage = new Image();\n this.dragImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n this.dragImage.style.visibility = 'hidden';\n }\n return this.dragImage;\n }\n\n public registerCallbacks(edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void) {\n this.edgeAddedCallback = edgeAddedCallback;\n this.nodeRemovedCallback = nodeRemovedCallback;\n this.edgeRemovedCallback = edgeRemovedCallback;\n }\n\n}\n\ninterface HtmlElementMap { [id: string]: HTMLElement; }\n\nabstract class AbstractFcModel {\n\n modelService: FcModelService;\n\n protected constructor(modelService: FcModelService) {\n this.modelService = modelService;\n }\n\n public select(object: T) {\n this.modelService.selectObject(object);\n }\n\n public deselect(object: T) {\n this.modelService.deselectObject(object);\n }\n\n public toggleSelected(object: T) {\n this.modelService.toggleSelectedObject(object);\n }\n\n public isSelected(object: T): boolean {\n return this.modelService.isSelectedObject(object);\n }\n\n public isEdit(object: T): boolean {\n return this.modelService.isEditObject(object);\n }\n}\n\nclass ConnectorsModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnector(connectorId: string): FcConnector {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n for (const connector of node.connectors) {\n if (connector.id === connectorId) {\n return connector;\n }\n }\n }\n }\n\n public getHtmlElement(connectorId: string): HTMLElement {\n return this.modelService.connectorsHtmlElements[connectorId];\n }\n\n public setHtmlElement(connectorId: string, element: HTMLElement) {\n this.modelService.connectorsHtmlElements[connectorId] = element;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const element = this.getHtmlElement(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (element === null || element === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n const connectorElementBox = element.getBoundingClientRect();\n const canvasElementBox = canvas.getBoundingClientRect();\n let coords: FcCoords = {\n x: connectorElementBox.left - canvasElementBox.left,\n y: connectorElementBox.top - canvasElementBox.top\n };\n if (centered) {\n coords = {\n x: Math.round(coords.x + element.offsetWidth / 2),\n y: Math.round(coords.y + element.offsetHeight / 2)\n };\n }\n return coords;\n }\n\n public getCoords(connectorId: string): FcCoords {\n return this._getCoords(connectorId, false);\n }\n\n public getCenteredCoord(connectorId: string): FcCoords {\n return this._getCoords(connectorId, true);\n }\n}\n\nclass NodesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnectorsByType(node: FcNode, type: string): Array {\n return node.connectors.filter((connector) => {\n return connector.type === type;\n });\n }\n\n private _addConnector(node: FcNode, connector: FcConnector) {\n node.connectors.push(connector);\n try {\n this.modelService.modelValidation.validateNode(node);\n } catch (error) {\n node.connectors.splice(node.connectors.indexOf(connector), 1);\n throw error;\n }\n }\n\n public delete(node: FcNode) {\n if (this.isSelected(node)) {\n this.deselect(node);\n }\n const model = this.modelService.model;\n const index = model.nodes.indexOf(node);\n if (index === -1) {\n if (node === undefined) {\n throw new Error('Passed undefined');\n }\n throw new Error('Tried to delete not existing node');\n }\n const connectorIds = this.getConnectorIds(node);\n for (let i = 0; i < model.edges.length; i++) {\n const edge = model.edges[i];\n if (connectorIds.indexOf(edge.source) !== -1 || connectorIds.indexOf(edge.destination) !== -1) {\n this.modelService.edges.delete(edge);\n i--;\n }\n }\n model.nodes.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.nodeRemovedCallback(node);\n }\n\n public getSelectedNodes(): Array {\n const model = this.modelService.model;\n return model.nodes.filter((node) => {\n return this.modelService.nodes.isSelected(node);\n });\n }\n\n public handleClicked(node: FcNode, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.nodes.toggleSelected(node);\n } else {\n this.modelService.deselectAll();\n this.modelService.nodes.select(node);\n }\n }\n\n private _addNode(node: FcNode) {\n const model = this.modelService.model;\n try {\n model.nodes.push(node);\n this.modelService.modelValidation.validateNodes(model.nodes);\n } catch (error) {\n model.nodes.splice(model.nodes.indexOf(node), 1);\n throw error;\n }\n }\n\n public getConnectorIds(node: FcNode): Array {\n return node.connectors.map((connector) => {\n return connector.id;\n });\n }\n\n public getNodeByConnectorId(connectorId: string): FcNode {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n const connectorIds = this.getConnectorIds(node);\n if (connectorIds.indexOf(connectorId) > -1) {\n return node;\n }\n }\n return null;\n }\n\n public getHtmlElement(nodeId: string): HTMLElement {\n return this.modelService.nodesHtmlElements[nodeId];\n }\n\n public setHtmlElement(nodeId: string, element: HTMLElement) {\n this.modelService.nodesHtmlElements[nodeId] = element;\n this.modelService.detectChanges();\n }\n\n}\n\nclass EdgesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public ready(edge: FcEdge): boolean {\n const source = this.modelService.connectors.getHtmlElement(edge.source);\n const destination = this.modelService.connectors.getHtmlElement(edge.destination);\n return source !== undefined && destination !== undefined;\n }\n\n public sourceCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.source);\n }\n\n public destCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.destination);\n }\n\n public delete(edge: FcEdge) {\n const model = this.modelService.model;\n const index = model.edges.indexOf(edge);\n if (index === -1) {\n throw new Error('Tried to delete not existing edge');\n }\n if (this.isSelected(edge)) {\n this.deselect(edge);\n }\n model.edges.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.edgeRemovedCallback(edge);\n }\n\n public getSelectedEdges(): Array {\n const model = this.modelService.model;\n return model.edges.filter((edge) => {\n return this.modelService.edges.isSelected(edge);\n });\n }\n\n public handleEdgeMouseClick(edge: FcEdge, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.edges.toggleSelected(edge);\n } else {\n this.modelService.deselectAll();\n this.modelService.edges.select(edge);\n }\n }\n\n public putEdge(edge: FcEdge) {\n const model = this.modelService.model;\n model.edges.push(edge);\n this.modelService.notifyModelChanged();\n }\n\n public _addEdge(event: Event, sourceConnector: FcConnector, destConnector: FcConnector, label: string) {\n this.modelService.modelValidation.validateConnector(sourceConnector);\n this.modelService.modelValidation.validateConnector(destConnector);\n const edge: FcEdge = {};\n edge.source = sourceConnector.id;\n edge.destination = destConnector.id;\n edge.label = label;\n const model = this.modelService.model;\n this.modelService.modelValidation.validateEdges(model.edges.concat([edge]), model.nodes);\n this.modelService.createEdge(event, edge).subscribe(\n (created) => {\n model.edges.push(created);\n this.modelService.notifyModelChanged();\n this.modelService.edgeAddedCallback(created);\n }\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FcConnector, FcEdge, FcModel, FcNode, fcTopSort, ModelvalidationError } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcModelValidationService {\n\n constructor() { }\n\n public validateModel(model: FcModel): FcModel {\n this.validateNodes(model.nodes);\n this._validateEdges(model.edges, model.nodes);\n return model;\n }\n\n public validateNodes(nodes: Array): Array {\n const ids: string[] = [];\n nodes.forEach((node) => {\n this.validateNode(node);\n if (ids.indexOf(node.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n ids.push(node.id);\n });\n const connectorIds: string[] = [];\n nodes.forEach((node) => {\n node.connectors.forEach((connector) => {\n if (connectorIds.indexOf(connector.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n connectorIds.push(connector.id);\n });\n });\n return nodes;\n }\n\n public validateNode(node: FcNode): FcNode {\n if (node.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (typeof node.name !== 'string') {\n throw new ModelvalidationError('Name not valid.');\n }\n if (typeof node.x !== 'number' || node.x < 0 || Math.round(node.x) !== node.x) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (typeof node.y !== 'number' || node.y < 0 || Math.round(node.y) !== node.y) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (!Array.isArray(node.connectors)) {\n throw new ModelvalidationError('Connectors not valid.');\n }\n node.connectors.forEach((connector) => {\n this.validateConnector(connector);\n });\n return node;\n }\n\n private _validateEdges(edges: Array, nodes: Array): Array {\n edges.forEach((edge) => {\n this._validateEdge(edge, nodes);\n });\n edges.forEach((edge1, index1) => {\n edges.forEach((edge2, index2) => {\n if (index1 !== index2) {\n if ((edge1.source === edge2.source && edge1.destination === edge2.destination) ||\n (edge1.source === edge2.destination && edge1.destination === edge2.source)) {\n throw new ModelvalidationError('Duplicated edge.');\n }\n }\n });\n });\n if (fcTopSort({nodes, edges}) === null) {\n throw new ModelvalidationError('Graph has a circle.');\n }\n return edges;\n }\n\n public validateEdges(edges: Array, nodes: Array): Array {\n this.validateNodes(nodes);\n return this._validateEdges(edges, nodes);\n }\n\n private _validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n if (edge.source === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n if (edge.destination === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (edge.source === edge.destination) {\n throw new ModelvalidationError('Edge with same source and destination connectors.');\n }\n const sourceNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.source))[0];\n if (sourceNode === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n const destinationNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.destination))[0];\n if (destinationNode === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (sourceNode === destinationNode) {\n throw new ModelvalidationError('Edge with same source and destination nodes.');\n }\n return edge;\n }\n\n public validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n this.validateNodes(nodes);\n return this._validateEdge(edge, nodes);\n }\n\n public validateConnector(connector: FcConnector): FcConnector {\n if (connector.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (connector.type === undefined || connector.type === null || typeof connector.type !== 'string') {\n throw new ModelvalidationError('Type not valid.');\n }\n return connector;\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcCoords, FcNode, FlowchartConstants } from './ngx-flowchart.models';\n\nconst nodeDropScope: NodeDropScope = {\n dropElement: null\n};\n\nexport class FcNodeDraggingService {\n\n nodeDraggingScope: NodeDraggingScope = {\n shadowDragStarted: false,\n dropElement: null,\n draggedNodes: [],\n shadowElements: []\n };\n\n private dragOffsets: FcCoords[] = [];\n private draggedElements: HTMLElement[] = [];\n\n private destinationHtmlElements: HTMLElement[] = [];\n private oldDisplayStyles: string[] = [];\n\n private readonly modelService: FcModelService;\n private readonly automaticResize: boolean;\n private readonly dragAnimation: string;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n applyFunction: (fn: (...args: any[]) => T) => T,\n automaticResize: boolean, dragAnimation: string) {\n this.modelService = modelService;\n this.automaticResize = automaticResize;\n this.dragAnimation = dragAnimation;\n this.applyFunction = applyFunction;\n }\n\n private getCoordinate(coordinate: number, max: number): number {\n coordinate = Math.max(coordinate, 0);\n coordinate = Math.min(coordinate, max);\n return coordinate;\n }\n\n private getXCoordinate(x: number): number {\n return this.getCoordinate(x, this.modelService.canvasHtmlElement.offsetWidth);\n }\n\n private getYCoordinate(y: number): number {\n return this.getCoordinate(y, this.modelService.canvasHtmlElement.offsetHeight);\n }\n\n private resizeCanvas(draggedNode: FcNode, nodeElement: HTMLElement) {\n if (this.automaticResize && !this.modelService.isDropSource()) {\n const canvasElement = this.modelService.canvasHtmlElement;\n if (canvasElement.offsetWidth < draggedNode.x + nodeElement.offsetWidth + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.width = canvasElement.offsetWidth + FlowchartConstants.canvasResizeStep + 'px';\n }\n if (canvasElement.offsetHeight < draggedNode.y + nodeElement.offsetHeight + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.height = canvasElement.offsetHeight + FlowchartConstants.canvasResizeStep + 'px';\n }\n }\n }\n\n public isDraggingNode(node: FcNode): boolean {\n return this.nodeDraggingScope.draggedNodes.includes(node);\n }\n\n public dragstart(event: DragEvent, node: FcNode) {\n if (node.readonly) {\n return;\n }\n this.dragOffsets.length = 0;\n this.draggedElements.length = 0;\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.nodeDraggingScope.shadowElements.length = 0;\n this.destinationHtmlElements.length = 0;\n this.oldDisplayStyles.length = 0;\n const elements: Array> = [];\n const nodes: Array = [];\n if (this.modelService.nodes.isSelected(node)) {\n const selectedNodes = this.modelService.nodes.getSelectedNodes();\n for (const selectedNode of selectedNodes) {\n const element = $(this.modelService.nodes.getHtmlElement(selectedNode.id));\n elements.push(element);\n nodes.push(selectedNode);\n }\n } else {\n elements.push($(event.target as HTMLElement));\n nodes.push(node);\n }\n const offsetsX: number[] = [];\n const offsetsY: number[] = [];\n for (const element of elements) {\n offsetsX.push(parseInt(element.css('left'), 10) - event.clientX);\n offsetsY.push(parseInt(element.css('top'), 10) - event.clientY);\n }\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n if (this.modelService.isDropSource()) {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n nodeDropScope.dropElement = elements[0][0].cloneNode(true) as NodeDropElement;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n nodeDropScope.dropElement.offsetInfo = {\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n nodeDropScope.dropElement.style.position = 'absolute';\n nodeDropScope.dropElement.style.pointerEvents = 'none';\n nodeDropScope.dropElement.style.zIndex = '9999';\n\n document.body.appendChild(nodeDropScope.dropElement);\n const dropNodeInfo: DropNodeInfo = {\n node,\n dropTargetId: this.modelService.dropTargetId,\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n originalEvent.dataTransfer.setData('text', JSON.stringify(dropNodeInfo));\n\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n const target: HTMLElement = event.target as HTMLElement;\n this.destinationHtmlElements.push(target);\n this.oldDisplayStyles.push(target.style.display);\n target.style.display = 'none';\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n return;\n }\n this.nodeDraggingScope.draggedNodes = nodes;\n for (let i = 0; i < elements.length; i++) {\n this.draggedElements.push(elements[i][0]);\n this.dragOffsets.push(\n {\n x: offsetsX[i],\n y: offsetsY[i]\n }\n );\n }\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n for (let i = 0; i < this.draggedElements.length; i++) {\n const dragOffset = this.dragOffsets[i];\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = $(`
` +\n `

${draggedNode.name}

`);\n const targetInnerNode = $(this.draggedElements[i]).children()[0];\n shadowElement.children()[0].style.backgroundColor = targetInnerNode.style.backgroundColor;\n this.nodeDraggingScope.shadowElements.push(shadowElement);\n this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[i][0]);\n }\n }\n originalEvent.dataTransfer.setData('text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n for (let i = 0; i < this.draggedElements.length; i++) {\n this.destinationHtmlElements.push(this.draggedElements[i]);\n this.oldDisplayStyles.push(this.destinationHtmlElements[i].style.display);\n this.destinationHtmlElements[i].style.display = 'none';\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: DragEvent): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n const infoText = originalEvent.dataTransfer.getData('text');\n if (infoText) {\n let dropNodeInfo: DropNodeInfo = null;\n try {\n dropNodeInfo = JSON.parse(infoText);\n } catch (e) {}\n if (dropNodeInfo && dropNodeInfo.dropTargetId) {\n if (this.modelService.canvasHtmlElement.id &&\n this.modelService.canvasHtmlElement.id === dropNodeInfo.dropTargetId) {\n dropNode = dropNodeInfo.node;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n const x = event.clientX - offset.left;\n const y = event.clientY - offset.top;\n dropNode.x = Math.round(this.getXCoordinate(dropNodeInfo.offsetX + x));\n dropNode.y = Math.round(this.getYCoordinate(dropNodeInfo.offsetY + y));\n }\n }\n }\n if (dropNode) {\n this.modelService.dropNode(event, dropNode);\n event.preventDefault();\n return false;\n } else if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = Math.round(this.getXCoordinate(dragOffset.x + event.clientX));\n draggedNode.y = Math.round(this.getYCoordinate(dragOffset.y + event.clientY));\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n }\n\n public dragover(event: DragEvent) {\n if (nodeDropScope.dropElement) {\n const offsetInfo = nodeDropScope.dropElement.offsetInfo;\n nodeDropScope.dropElement.style.left = (offsetInfo.offsetX + event.clientX) + 'px';\n nodeDropScope.dropElement.style.top = (offsetInfo.offsetY + event.clientY) + 'px';\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n this.destinationHtmlElements[0].style.display = this.oldDisplayStyles[0];\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n event.preventDefault();\n return;\n }\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return;\n }\n if (!this.nodeDraggingScope.draggedNodes.length) {\n event.preventDefault();\n return;\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = this.getXCoordinate(dragOffset.x + event.clientX);\n draggedNode.y = this.getYCoordinate(dragOffset.y + event.clientY);\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n this.destinationHtmlElements[i].style.display = this.oldDisplayStyles[i];\n }\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n this.nodeDraggingScope.shadowElements[i].css('left', this.getXCoordinate(dragOffset.x + event.clientX) + 'px');\n this.nodeDraggingScope.shadowElements[i].css('top', this.getYCoordinate(dragOffset.y + event.clientY) + 'px');\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n }\n }\n }\n\n public dragend(event: DragEvent) {\n this.applyFunction(() => {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n if (this.modelService.isDropSource()) {\n return;\n }\n if (this.nodeDraggingScope.shadowElements.length) {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = this.nodeDraggingScope.shadowElements[i];\n draggedNode.x = parseInt(shadowElement.css('left').replace('px', ''), 10);\n draggedNode.y = parseInt(shadowElement.css('top').replace('px', ''), 10);\n this.modelService.canvasHtmlElement.removeChild(shadowElement[0]);\n }\n this.nodeDraggingScope.shadowElements.length = 0;\n this.modelService.notifyModelChanged();\n }\n\n if (this.nodeDraggingScope.draggedNodes.length) {\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.draggedElements.length = 0;\n this.dragOffsets.length = 0;\n }\n });\n }\n\n}\n\nexport interface NodeDraggingScope {\n draggedNodes: Array;\n shadowElements: Array>;\n shadowDragStarted: boolean;\n dropElement: HTMLElement;\n}\n\nexport interface NodeDropElement extends HTMLElement {\n offsetInfo?: {\n offsetX: number;\n offsetY: number;\n };\n}\n\nexport interface NodeDropScope {\n dropElement: NodeDropElement;\n}\n\nexport interface DropNodeInfo {\n node: FcNode;\n dropTargetId: string;\n offsetX: number;\n offsetY: number;\n}\n","import { Injectable } from '@angular/core';\nimport { FcCoords, FlowchartConstants } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcEdgeDrawingService {\n\n constructor() {\n }\n\n public getEdgeDAttribute(pt1: FcCoords, pt2: FcCoords, style: string): string {\n let dAddribute = `M ${pt1.x}, ${pt1.y} `;\n if (style === FlowchartConstants.curvedStyle) {\n const sourceTangent = this.computeEdgeSourceTangent(pt1, pt2);\n const destinationTangent = this.computeEdgeDestinationTangent(pt1, pt2);\n dAddribute += `C ${sourceTangent.x}, ${sourceTangent.y} ${(destinationTangent.x - 50)}, ${destinationTangent.y} ${pt2.x}, ${pt2.y}`;\n } else {\n dAddribute += `L ${pt2.x}, ${pt2.y}`;\n }\n return dAddribute;\n }\n\n public getEdgeCenter(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: (pt1.x + pt2.x) / 2,\n y: (pt1.y + pt2.y) / 2\n };\n }\n\n private computeEdgeTangentOffset(pt1: FcCoords, pt2: FcCoords): number {\n return (pt2.y - pt1.y) / 2;\n }\n\n private computeEdgeSourceTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt1.x,\n y: pt1.y + this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n private computeEdgeDestinationTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt2.x,\n y: pt2.y - this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcConnector, FcCoords, FcEdge, FcModel, FlowchartConstants, ModelvalidationError } from './ngx-flowchart.models';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcModelValidationService } from './modelvalidation.service';\n\nexport class FcEdgeDraggingService {\n\n edgeDragging: EdgeDragging = {\n isDragging: false,\n dragPoint1: null,\n dragPoint2: null,\n shadowDragStarted: false\n };\n\n private draggedEdgeSource: FcConnector = null;\n private dragOffset: FcCoords = {};\n private destinationHtmlElement: HTMLElement = null;\n private oldDisplayStyle = '';\n\n private readonly modelValidation: FcModelValidationService;\n private readonly edgeDrawingService: FcEdgeDrawingService;\n private readonly modelService: FcModelService;\n private readonly model: FcModel;\n private readonly isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n private readonly dragAnimation: string;\n private readonly edgeStyle: string;\n\n constructor(modelValidation: FcModelValidationService,\n edgeDrawingService: FcEdgeDrawingService,\n modelService: FcModelService,\n model: FcModel,\n isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean,\n applyFunction: (fn: (...args: any[]) => T) => T,\n dragAnimation: string,\n edgeStyle: string) {\n this.modelValidation = modelValidation;\n this.edgeDrawingService = edgeDrawingService;\n this.modelService = modelService;\n this.model = model;\n this.isValidEdgeCallback = isValidEdgeCallback || (() => true);\n this.applyFunction = applyFunction;\n this.dragAnimation = dragAnimation;\n this.edgeStyle = edgeStyle;\n }\n\n public dragstart(event: DragEvent, connector: FcConnector) {\n let swapConnector: FcConnector;\n let dragLabel: string;\n let prevEdge: FcEdge;\n if (connector.type === FlowchartConstants.leftConnectorType) {\n for (const edge of this.model.edges) {\n if (edge.destination === connector.id) {\n swapConnector = this.modelService.connectors.getConnector(edge.source);\n dragLabel = edge.label;\n prevEdge = edge;\n this.applyFunction(() => {\n this.modelService.edges.delete(edge);\n });\n break;\n }\n }\n }\n this.edgeDragging.isDragging = true;\n if (swapConnector !== undefined) {\n this.draggedEdgeSource = swapConnector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(swapConnector.id);\n this.edgeDragging.dragLabel = dragLabel;\n this.edgeDragging.prevEdge = prevEdge;\n } else {\n this.draggedEdgeSource = connector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(connector.id);\n }\n const canvas = this.modelService.canvasHtmlElement;\n if (!canvas) {\n throw new Error('No canvas while edgedraggingService found.');\n }\n this.dragOffset.x = -canvas.getBoundingClientRect().left;\n this.dragOffset.y = -canvas.getBoundingClientRect().top;\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n\n originalEvent.dataTransfer.setData('Text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n this.destinationHtmlElement = event.target as HTMLElement;\n this.oldDisplayStyle = this.destinationHtmlElement.style.display;\n this.destinationHtmlElement.style.display = 'none';\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.shadowDragStarted = true;\n }\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.edgeDragging.gElement === undefined) {\n this.edgeDragging.gElement = $(document.querySelectorAll('.shadow-svg-class'));\n this.edgeDragging.pathElement = $(document.querySelectorAll('.shadow-svg-class')).find('path');\n this.edgeDragging.circleElement = $(document.querySelectorAll('.shadow-svg-class')).find('circle');\n }\n\n this.edgeDragging.gElement.css('display', 'block');\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n }\n event.stopPropagation();\n }\n\n public dragover(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n if (!this.edgeDragging.magnetActive && this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n if (this.edgeDragging.shadowDragStarted) {\n this.applyFunction(() => {\n this.edgeDragging.shadowDragStarted = false;\n });\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n });\n }\n }\n }\n\n public dragoverConnector(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n }\n }\n\n public dragleaveMagnet(event: DragEvent) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n\n this.edgeDragging.magnetActive = true;\n\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n event.preventDefault();\n event.stopPropagation();\n return false;\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n event.preventDefault();\n event.stopPropagation();\n return false;\n });\n }\n }\n }\n }\n\n public dragend(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n this.edgeDragging.isDragging = false;\n this.edgeDragging.dragPoint1 = null;\n this.edgeDragging.dragPoint2 = null;\n this.edgeDragging.dragLabel = null;\n event.stopPropagation();\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.gElement.css('display', 'none');\n }\n if (this.edgeDragging.prevEdge) {\n const edge = this.edgeDragging.prevEdge;\n this.edgeDragging.prevEdge = null;\n this.applyFunction(() => {\n this.modelService.edges.putEdge(edge);\n });\n }\n }\n }\n\n public drop(event: DragEvent, targetConnector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: targetConnector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n\n if (this.isValidEdgeCallback(this.draggedEdgeSource, targetConnector)) {\n this.edgeDragging.prevEdge = null;\n this.modelService.edges._addEdge(event, this.draggedEdgeSource, targetConnector, this.edgeDragging.dragLabel);\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n }\n }\n}\n\nexport interface EdgeDragging {\n isDragging: boolean;\n shadowDragStarted: boolean;\n dragPoint1: FcCoords;\n dragPoint2: FcCoords;\n dragLabel?: string;\n prevEdge?: FcEdge;\n magnetActive?: boolean;\n gElement?: JQuery;\n pathElement?: JQuery;\n circleElement?: JQuery;\n}\n","import { FcConnector, FcEdge, FcNode } from './ngx-flowchart.models';\n\nexport class FcMouseOverService {\n\n mouseoverscope: MouseOverScope = {\n connector: null,\n edge: null,\n node: null\n };\n\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(applyFunction: (fn: (...args: any[]) => T) => T) {\n this.applyFunction = applyFunction;\n }\n\n public nodeMouseOver(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = node;\n });\n }\n\n public nodeMouseOut(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = null;\n });\n }\n\n public connectorMouseEnter(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = connector;\n });\n }\n\n public connectorMouseLeave(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = null;\n });\n }\n\n public edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = edge;\n }\n\n public edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = null;\n }\n}\n\nexport interface MouseOverScope {\n connector: FcConnector;\n edge: FcEdge;\n node: FcNode;\n}\n","const regex = /(auto|scroll)/;\n\nconst style = (node: Element, prop: string): string =>\n getComputedStyle(node, null).getPropertyValue(prop);\n\nconst scroll = (node: Element) =>\n regex.test(\n style(node, 'overflow') +\n style(node, 'overflow-y') +\n style(node, 'overflow-x'));\n\nconst scrollparent = (node: HTMLElement): HTMLElement =>\n !node || node === document.body\n ? document.body\n : scroll(node)\n ? node\n : scrollparent(node.parentNode as HTMLElement);\n\nexport default scrollparent;\n","import { FcModelService } from './model.service';\nimport { FcRectBox } from './ngx-flowchart.models';\nimport scrollparent from './scrollparent';\n\ninterface Rectangle {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport class FcRectangleSelectService {\n\n private readonly selectRect: Rectangle = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n\n private readonly modelService: FcModelService;\n private readonly selectElement: HTMLElement;\n private readonly $canvasElement: JQuery;\n private readonly $scrollParent: JQuery;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n selectElement: HTMLElement,\n applyFunction: (fn: (...args: any[]) => T) => T) {\n this.modelService = modelService;\n this.selectElement = selectElement;\n this.$canvasElement = $(this.modelService.canvasHtmlElement);\n this.$scrollParent = $(scrollparent(this.modelService.canvasHtmlElement));\n this.applyFunction = applyFunction;\n }\n\n public mousedown(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && this.selectElement.hidden) {\n this.selectElement.hidden = false;\n const offset = this.$canvasElement.offset();\n this.selectRect.x1 = Math.round(e.pageX - offset.left);\n this.selectRect.y1 = Math.round(e.pageY - offset.top);\n this.selectRect.x2 = this.selectRect.x1;\n this.selectRect.y2 = this.selectRect.y1;\n this.updateSelectRect();\n }\n }\n\n public mousemove(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const offset = this.$canvasElement.offset();\n this.selectRect.x2 = Math.round(e.pageX - offset.left);\n this.selectRect.y2 = Math.round(e.pageY - offset.top);\n this.updateScroll(offset);\n this.updateSelectRect();\n }\n }\n\n private updateScroll(offset: JQuery.Coordinates) {\n const rect = this.$scrollParent[0].getBoundingClientRect();\n const bottom = rect.bottom - offset.top;\n const right = rect.right - offset.left;\n const top = rect.top - offset.top;\n const left = rect.left - offset.left;\n if (this.selectRect.y2 - top < 25) {\n const topScroll = 25 - (this.selectRect.y2 - top);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll - topScroll);\n } else if (bottom - this.selectRect.y2 < 40) {\n const bottomScroll = 40 - (bottom - this.selectRect.y2);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll + bottomScroll);\n }\n if (this.selectRect.x2 - left < 25) {\n const leftScroll = 25 - (this.selectRect.x2 - left);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll - leftScroll);\n } else if (right - this.selectRect.x2 < 40) {\n const rightScroll = 40 - (right - this.selectRect.x2);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll + rightScroll);\n }\n }\n\n public mouseup(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const rectBox = this.selectElement.getBoundingClientRect() as FcRectBox;\n this.selectElement.hidden = true;\n this.selectObjects(rectBox);\n }\n }\n\n private updateSelectRect() {\n const x3 = Math.min(this.selectRect.x1, this.selectRect.x2);\n const x4 = Math.max(this.selectRect.x1, this.selectRect.x2);\n const y3 = Math.min(this.selectRect.y1, this.selectRect.y2);\n const y4 = Math.max(this.selectRect.y1, this.selectRect.y2);\n this.selectElement.style.left = x3 + 'px';\n this.selectElement.style.top = y3 + 'px';\n this.selectElement.style.width = x4 - x3 + 'px';\n this.selectElement.style.height = y4 - y3 + 'px';\n }\n\n private selectObjects(rectBox: FcRectBox) {\n this.applyFunction(() => {\n this.modelService.selectAllInRect(rectBox);\n });\n }\n\n}\n\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef, EventEmitter,\n HostBinding,\n HostListener,\n Input,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnInit, Output\n} from '@angular/core';\nimport { FcCallbacks, FcEdge, FcModel, FcNode, FlowchartConstants, UserCallbacks, UserNodeCallbacks } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcNodeDraggingService } from './node-dragging.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcEdgeDraggingService } from './edge-dragging.service';\nimport { FcMouseOverService } from './mouseover.service';\nimport { FcRectangleSelectService } from './rectangleselect.service';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'fc-canvas',\n templateUrl: './ngx-flowchart.component.html',\n styleUrls: ['./ngx-flowchart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxFlowchartComponent implements OnInit, DoCheck {\n\n @HostBinding('attr.class')\n get canvasClass(): string {\n return FlowchartConstants.canvasClass;\n }\n\n @Input()\n model: FcModel;\n\n @Input()\n selectedObjects: any[];\n\n @Input()\n edgeStyle: string;\n\n @Input()\n userCallbacks: UserCallbacks;\n\n @Input()\n automaticResize: boolean;\n\n @Input()\n dragAnimation: string;\n\n @Input()\n nodeWidth: number;\n\n @Input()\n nodeHeight: number;\n\n @Input()\n dropTargetId: string;\n\n @Output()\n modelChanged = new EventEmitter();\n\n private fitModelSizeByDefaultValue = true;\n get fitModelSizeByDefault(): boolean {\n return this.fitModelSizeByDefaultValue;\n }\n @Input()\n set fitModelSizeByDefault(value: boolean) {\n this.fitModelSizeByDefaultValue = coerceBooleanProperty(value);\n }\n\n callbacks: FcCallbacks;\n\n userNodeCallbacks: UserNodeCallbacks;\n\n modelService: FcModelService;\n nodeDraggingService: FcNodeDraggingService;\n edgeDraggingService: FcEdgeDraggingService;\n mouseoverService: FcMouseOverService;\n rectangleSelectService: FcRectangleSelectService;\n\n arrowDefId: string;\n arrowDefIdSelected: string;\n\n flowchartConstants = FlowchartConstants;\n\n private nodesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private edgesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n constructor(private elementRef: ElementRef,\n private differs: IterableDiffers,\n private modelValidation: FcModelValidationService,\n public edgeDrawingService: FcEdgeDrawingService,\n private cd: ChangeDetectorRef,\n private zone: NgZone) {\n this.arrowDefId = 'arrow-' + Math.random();\n this.arrowDefIdSelected = this.arrowDefId + '-selected';\n }\n\n ngOnInit() {\n if (!this.dropTargetId && this.edgeStyle !== FlowchartConstants.curvedStyle && this.edgeStyle !== FlowchartConstants.lineStyle) {\n throw new Error('edgeStyle not supported.');\n }\n this.nodeHeight = this.nodeHeight || 200;\n this.nodeWidth = this.nodeWidth || 200;\n this.dragAnimation = this.dragAnimation || FlowchartConstants.dragAnimationRepaint;\n this.userCallbacks = this.userCallbacks || {};\n this.automaticResize = this.automaticResize || false;\n\n for (const key of Object.keys(this.userCallbacks)) {\n const callback = this.userCallbacks[key];\n if (typeof callback !== 'function' && key !== 'nodeCallbacks') {\n throw new Error('All callbacks should be functions.');\n }\n }\n\n this.userNodeCallbacks = this.userCallbacks.nodeCallbacks;\n\n const element = $(this.elementRef.nativeElement);\n\n this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.cd, this.selectedObjects,\n this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved,\n this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg'));\n\n if (this.dropTargetId) {\n this.modelService.dropTargetId = this.dropTargetId;\n }\n\n const applyFunction = this.zone.run.bind(this.zone);\n\n this.nodeDraggingService = new FcNodeDraggingService(this.modelService, applyFunction,\n this.automaticResize, this.dragAnimation);\n\n this.edgeDraggingService = new FcEdgeDraggingService(this.modelValidation, this.edgeDrawingService, this.modelService,\n this.model, this.userCallbacks.isValidEdge || null, applyFunction,\n this.dragAnimation, this.edgeStyle);\n\n this.mouseoverService = new FcMouseOverService(applyFunction);\n\n this.rectangleSelectService = new FcRectangleSelectService(this.modelService,\n element[0].querySelector('#select-rectangle'), applyFunction);\n\n this.callbacks = {\n nodeDragstart: this.nodeDraggingService.dragstart.bind(this.nodeDraggingService),\n nodeDragend: this.nodeDraggingService.dragend.bind(this.nodeDraggingService),\n edgeDragstart: this.edgeDraggingService.dragstart.bind(this.edgeDraggingService),\n edgeDragend: this.edgeDraggingService.dragend.bind(this.edgeDraggingService),\n edgeDrop: this.edgeDraggingService.drop.bind(this.edgeDraggingService),\n edgeDragoverConnector: this.edgeDraggingService.dragoverConnector.bind(this.edgeDraggingService),\n edgeDragoverMagnet: this.edgeDraggingService.dragoverMagnet.bind(this.edgeDraggingService),\n edgeDragleaveMagnet: this.edgeDraggingService.dragleaveMagnet.bind(this.edgeDraggingService),\n nodeMouseOver: this.mouseoverService.nodeMouseOver.bind(this.mouseoverService),\n nodeMouseOut: this.mouseoverService.nodeMouseOut.bind(this.mouseoverService),\n connectorMouseEnter: this.mouseoverService.connectorMouseEnter.bind(this.mouseoverService),\n connectorMouseLeave: this.mouseoverService.connectorMouseLeave.bind(this.mouseoverService),\n nodeClicked: (event, node) => {\n this.modelService.nodes.handleClicked(node, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n };\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n\n ngDoCheck(): void {\n if (this.model) {\n const nodesChange = this.nodesDiffer.diff(this.model.nodes);\n const edgesChange = this.edgesDiffer.diff(this.model.edges);\n let nodesChanged = false;\n let edgesChanged = false;\n if (nodesChange !== null) {\n nodesChange.forEachAddedItem(() => {\n nodesChanged = true;\n });\n nodesChange.forEachRemovedItem(() => {\n nodesChanged = true;\n });\n }\n if (edgesChange !== null) {\n edgesChange.forEachAddedItem(() => {\n edgesChanged = true;\n });\n edgesChange.forEachRemovedItem(() => {\n edgesChanged = true;\n });\n }\n if (nodesChanged) {\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n if (nodesChanged || edgesChanged) {\n this.cd.detectChanges();\n }\n }\n }\n\n getEdgeDAttribute(edge: FcEdge): string {\n return this.edgeDrawingService.getEdgeDAttribute(this.modelService.edges.sourceCoord(edge),\n this.modelService.edges.destCoord(edge), this.edgeStyle);\n }\n\n public adjustCanvasSize(fit?: boolean) {\n let maxX = 0;\n let maxY = 0;\n const element = $(this.elementRef.nativeElement);\n this.model.nodes.forEach((node) => {\n maxX = Math.max(node.x + this.nodeWidth, maxX);\n maxY = Math.max(node.y + this.nodeHeight, maxY);\n });\n let width;\n let height;\n if (fit) {\n width = maxX;\n height = maxY;\n } else {\n width = Math.max(maxX, element.prop('offsetWidth'));\n height = Math.max(maxY, element.prop('offsetHeight'));\n }\n element.css('width', width + 'px');\n element.css('height', height + 'px');\n }\n\n canvasClick(event: MouseEvent) {}\n\n edgeMouseDown(event: MouseEvent, edge: FcEdge) {\n event.stopPropagation();\n }\n\n edgeClick(event: MouseEvent, edge: FcEdge) {\n this.modelService.edges.handleEdgeMouseClick(edge, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeRemove(event: Event, edge: FcEdge) {\n this.modelService.edges.delete(edge);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeEdit(event: Event, edge: FcEdge) {\n if (this.userCallbacks.edgeEdit) {\n this.userCallbacks.edgeEdit(event, edge);\n }\n }\n\n edgeDoubleClick(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeDoubleClick) {\n this.userCallbacks.edgeDoubleClick(event, edge);\n }\n }\n\n edgeMouseOver(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeMouseOver) {\n this.userCallbacks.edgeMouseOver(event, edge);\n }\n }\n\n edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseEnter(event, edge);\n }\n\n edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseLeave(event, edge);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n this.nodeDraggingService.drop(event);\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n this.rectangleSelectService.mousedown(event);\n }\n\n @HostListener('mousemove', ['$event'])\n mousemove(event: MouseEvent) {\n this.rectangleSelectService.mousemove(event);\n }\n\n @HostListener('mouseup', ['$event'])\n mouseup(event: MouseEvent) {\n this.rectangleSelectService.mouseup(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-magnet]'\n})\nexport class FcMagnetDirective implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n connector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.magnetClass);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: DragEvent) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-connector]'\n})\nexport class FcConnectorDirective implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n connector: FcConnector;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.connectorClass);\n if (this.modelservice.isEditable()) {\n element.attr('draggable', 'true');\n this.updateConnectorClass();\n }\n this.modelservice.connectors.setHtmlElement(this.connector.id, element[0]);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateConnector = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (propName === 'mouseOverConnector') {\n updateConnector = true;\n }\n }\n }\n if (updateConnector && this.modelservice.isEditable()) {\n this.updateConnectorClass();\n }\n }\n\n private updateConnectorClass() {\n const element = $(this.elementRef.nativeElement);\n if (this.connector === this.mouseOverConnector) {\n element.addClass(FlowchartConstants.hoverClass);\n } else {\n element.removeClass(FlowchartConstants.hoverClass);\n }\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n // Skip - conflict with magnet\n /* if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDragoverConnector(event, this.connector);\n }*/\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragstart(event, this.connector);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n mouseenter(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseEnter(event, this.connector);\n }\n }\n\n @HostListener('mouseleave', ['$event'])\n mouseleave(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseLeave(event, this.connector);\n }\n }\n\n}\n","import {\n Component,\n ComponentFactoryResolver, Directive,\n ElementRef, HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {\n FC_NODE_COMPONENT_CONFIG,\n FcCallbacks,\n FcConnector,\n FcNode,\n FcNodeComponentConfig,\n FlowchartConstants,\n UserNodeCallbacks\n} from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Component({\n selector: 'fc-node',\n template: '',\n styleUrls: ['./node.component.scss']\n})\nexport class FcNodeContainerComponent implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n @HostBinding('attr.id')\n get nodeId(): string {\n return this.node.id;\n }\n\n @HostBinding('style.top')\n get top(): string {\n return this.node.y + 'px';\n }\n\n @HostBinding('style.left')\n get left(): string {\n return this.node.x + 'px';\n }\n\n nodeComponent: FcNodeComponent;\n\n @ViewChild('nodeContent', {read: ViewContainerRef, static: true}) nodeContentContainer: ViewContainerRef;\n\n constructor(@Inject(FC_NODE_COMPONENT_CONFIG) private nodeComponentConfig: FcNodeComponentConfig,\n private elementRef: ElementRef,\n private componentFactoryResolver: ComponentFactoryResolver) {\n }\n\n ngOnInit(): void {\n if (!this.userNodeCallbacks) {\n this.userNodeCallbacks = {};\n }\n this.userNodeCallbacks.nodeEdit = this.userNodeCallbacks.nodeEdit || (() => {});\n this.userNodeCallbacks.doubleClick = this.userNodeCallbacks.doubleClick || (() => {});\n this.userNodeCallbacks.mouseDown = this.userNodeCallbacks.mouseDown || (() => {});\n this.userNodeCallbacks.mouseEnter = this.userNodeCallbacks.mouseEnter || (() => {});\n this.userNodeCallbacks.mouseLeave = this.userNodeCallbacks.mouseLeave || (() => {});\n\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.nodeClass);\n if (!this.node.readonly) {\n element.attr('draggable', 'true');\n }\n this.updateNodeClass();\n this.modelservice.nodes.setHtmlElement(this.node.id, element[0]);\n this.nodeContentContainer.clear();\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.nodeComponentConfig.nodeComponentType);\n const componentRef = this.nodeContentContainer.createComponent(componentFactory);\n this.nodeComponent = componentRef.instance;\n this.nodeComponent.callbacks = this.callbacks;\n this.nodeComponent.userNodeCallbacks = this.userNodeCallbacks;\n this.nodeComponent.node = this.node;\n this.nodeComponent.modelservice = this.modelservice;\n this.updateNodeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateNode = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (['selected', 'edit', 'underMouse', 'mouseOverConnector', 'dragging'].includes(propName)) {\n updateNode = true;\n }\n }\n }\n if (updateNode) {\n this.updateNodeClass();\n this.updateNodeComponent();\n }\n }\n\n private updateNodeClass() {\n const element = $(this.elementRef.nativeElement);\n this.toggleClass(element, FlowchartConstants.selectedClass, this.selected);\n this.toggleClass(element, FlowchartConstants.editClass, this.edit);\n this.toggleClass(element, FlowchartConstants.hoverClass, this.underMouse);\n this.toggleClass(element, FlowchartConstants.draggingClass, this.dragging);\n }\n\n private updateNodeComponent() {\n this.nodeComponent.selected = this.selected;\n this.nodeComponent.edit = this.edit;\n this.nodeComponent.underMouse = this.underMouse;\n this.nodeComponent.mouseOverConnector = this.mouseOverConnector;\n this.nodeComponent.dragging = this.dragging;\n }\n\n private toggleClass(element: JQuery, clazz: string, set: boolean) {\n if (set) {\n element.addClass(clazz);\n } else {\n element.removeClass(clazz);\n }\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragend(event);\n }\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeClicked(event, this.node);\n }\n }\n\n @HostListener('mouseover', ['$event'])\n mouseover(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOver(event, this.node);\n }\n }\n\n @HostListener('mouseout', ['$event'])\n mouseout(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOut(event, this.node);\n }\n }\n\n}\n\nexport abstract class FcNodeComponent implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n flowchartConstants = FlowchartConstants;\n\n ngOnInit(): void {\n }\n\n}\n","import { Component } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\n@Component({\n selector: 'fc-default-node',\n templateUrl: './default-node.component.html',\n styleUrls: ['./default-node.component.scss']\n})\nexport class DefaultFcNodeComponent extends FcNodeComponent {\n\n constructor() {\n super();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { NgxFlowchartComponent } from './ngx-flowchart.component';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { CommonModule } from '@angular/common';\nimport { FcMagnetDirective } from './magnet.directive';\nimport { FcConnectorDirective } from './connector.directive';\nimport { FcNodeContainerComponent } from './node.component';\nimport { FC_NODE_COMPONENT_CONFIG } from './ngx-flowchart.models';\nimport { DefaultFcNodeComponent } from './default-node.component';\n\n@NgModule({\n entryComponents: [\n DefaultFcNodeComponent\n ],\n declarations: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n FcNodeContainerComponent,\n DefaultFcNodeComponent],\n providers: [\n FcModelValidationService,\n FcEdgeDrawingService,\n {\n provide: FC_NODE_COMPONENT_CONFIG,\n useValue: {\n nodeComponentType: DefaultFcNodeComponent\n }\n }\n ],\n imports: [\n CommonModule\n ],\n exports: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n DefaultFcNodeComponent]\n})\nexport class NgxFlowchartModule { }\n"],"names":["tslib_1.__extends","tslib_1.__values"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ngx-flowchart.js","sources":["ng://ngx-flowchart/lib/ngx-flowchart.models.ts","ng://ngx-flowchart/lib/model.service.ts","ng://ngx-flowchart/lib/modelvalidation.service.ts","ng://ngx-flowchart/lib/node-dragging.service.ts","ng://ngx-flowchart/lib/edge-drawing.service.ts","ng://ngx-flowchart/lib/edge-dragging.service.ts","ng://ngx-flowchart/lib/mouseover.service.ts","ng://ngx-flowchart/lib/scrollparent.ts","ng://ngx-flowchart/lib/rectangleselect.service.ts","ng://ngx-flowchart/lib/ngx-flowchart.component.ts","ng://ngx-flowchart/lib/magnet.directive.ts","ng://ngx-flowchart/lib/connector.directive.ts","ng://ngx-flowchart/lib/node.component.ts","ng://ngx-flowchart/lib/default-node.component.ts","ng://ngx-flowchart/lib/ngx-flowchart.module.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { InjectionToken, Type } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\nexport const FC_NODE_COMPONENT_CONFIG = new InjectionToken('fc-node.component.config');\n\nexport interface FcNodeComponentConfig {\n nodeComponentType: Type;\n}\n\nconst htmlPrefix = 'fc';\nconst leftConnectorType = 'leftConnector';\nconst rightConnectorType = 'rightConnector';\n\nexport const FlowchartConstants = {\n htmlPrefix,\n leftConnectorType,\n rightConnectorType,\n curvedStyle: 'curved',\n lineStyle: 'line',\n dragAnimationRepaint: 'repaint',\n dragAnimationShadow: 'shadow',\n canvasClass: htmlPrefix + '-canvas',\n selectedClass: htmlPrefix + '-selected',\n editClass: htmlPrefix + '-edit',\n activeClass: htmlPrefix + '-active',\n hoverClass: htmlPrefix + '-hover',\n draggingClass: htmlPrefix + '-dragging',\n edgeClass: htmlPrefix + '-edge',\n edgeLabelClass: htmlPrefix + '-edge-label',\n connectorClass: htmlPrefix + '-connector',\n magnetClass: htmlPrefix + '-magnet',\n nodeClass: htmlPrefix + '-node',\n nodeOverlayClass: htmlPrefix + '-node-overlay',\n leftConnectorClass: htmlPrefix + '-' + leftConnectorType + 's',\n rightConnectorClass: htmlPrefix + '-' + rightConnectorType + 's',\n canvasResizeThreshold: 200,\n canvasResizeStep: 200\n};\n\n\nexport interface FcCoords {\n x?: number;\n y?: number;\n}\n\nexport interface FcRectBox {\n top: number;\n left: number;\n right: number;\n bottom: number;\n}\n\nexport interface FcConnector {\n id: string;\n type: string;\n}\n\nexport interface FcNode extends FcCoords {\n id: string;\n name: string;\n connectors: Array;\n readonly?: boolean;\n [key: string]: any;\n}\n\nexport interface FcEdge {\n label?: string;\n source?: string;\n destination?: string;\n active?: boolean;\n}\n\nexport interface FcItemInfo {\n node?: FcNode;\n edge?: FcEdge;\n}\n\nexport interface FcModel {\n nodes: Array;\n edges: Array;\n}\n\nexport interface UserCallbacks {\n dropNode?: (event: Event, node: FcNode) => void;\n createEdge?: (event: Event, edge: FcEdge) => Observable;\n edgeAdded?: (edge: FcEdge) => void;\n nodeRemoved?: (node: FcNode) => void;\n edgeRemoved?: (edge: FcEdge) => void;\n edgeDoubleClick?: (event: MouseEvent, edge: FcEdge) => void;\n edgeMouseOver?: (event: MouseEvent, edge: FcEdge) => void;\n isValidEdge?: (source: FcConnector, destination: FcConnector) => boolean;\n edgeEdit?: (event: Event, edge: FcEdge) => void;\n nodeCallbacks?: UserNodeCallbacks;\n}\n\nexport interface UserNodeCallbacks {\n nodeEdit?: (event: MouseEvent, node: FcNode) => void;\n doubleClick?: (event: MouseEvent, node: FcNode) => void;\n mouseDown?: (event: MouseEvent, node: FcNode) => void;\n mouseEnter?: (event: MouseEvent, node: FcNode) => void;\n mouseLeave?: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcCallbacks {\n nodeDragstart: (event: DragEvent, node: FcNode) => void;\n nodeDragend: (event: DragEvent) => void;\n edgeDragstart: (event: DragEvent, connector: FcConnector) => void;\n edgeDragend: (event: DragEvent) => void;\n edgeDrop: (event: DragEvent, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: DragEvent, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: DragEvent) => void;\n nodeMouseOver: (event: MouseEvent, node: FcNode) => void;\n nodeMouseOut: (event: MouseEvent, node: FcNode) => void;\n connectorMouseEnter: (event: MouseEvent, connector: FcConnector) => void;\n connectorMouseLeave: (event: MouseEvent, connector: FcConnector) => void;\n nodeClicked: (event: MouseEvent, node: FcNode) => void;\n}\n\nexport interface FcAdjacentList {\n [id: string]: {\n incoming: number;\n outgoing: Array;\n };\n}\n\nclass BaseError {\n constructor() {\n Error.apply(this, arguments);\n }\n}\n\nObject.defineProperty(BaseError, 'prototype', new Error());\n\nexport class ModelvalidationError extends BaseError {\n constructor(public message: string) {\n super();\n }\n}\n\nexport function fcTopSort(graph: FcModel): Array | null {\n const adjacentList: FcAdjacentList = {};\n graph.nodes.forEach((node) => {\n adjacentList[node.id] = {incoming: 0, outgoing: []};\n });\n graph.edges.forEach((edge) => {\n const sourceNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.source;\n });\n })[0];\n const destinationNode = graph.nodes.filter((node) => {\n return node.connectors.some((connector) => {\n return connector.id === edge.destination;\n });\n })[0];\n adjacentList[sourceNode.id].outgoing.push(destinationNode.id);\n adjacentList[destinationNode.id].incoming++;\n });\n const orderedNodes: string[] = [];\n const sourceNodes: string[] = [];\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming === 0) {\n sourceNodes.push(node);\n }\n }\n while (sourceNodes.length !== 0) {\n const sourceNode = sourceNodes.pop();\n for (let i = 0; i < adjacentList[sourceNode].outgoing.length; i++) {\n const destinationNode = adjacentList[sourceNode].outgoing[i];\n adjacentList[destinationNode].incoming--;\n if (adjacentList[destinationNode].incoming === 0) {\n sourceNodes.push(destinationNode);\n }\n adjacentList[sourceNode].outgoing.splice(i, 1);\n i--;\n }\n orderedNodes.push(sourceNode);\n }\n let hasEdges = false;\n for (const node of Object.keys(adjacentList)) {\n const edges = adjacentList[node];\n if (edges.incoming !== 0) {\n hasEdges = true;\n }\n }\n if (hasEdges) {\n return null;\n } else {\n return orderedNodes;\n }\n}\n","import { FcModelValidationService } from './modelvalidation.service';\nimport { FcConnector, FcCoords, FcEdge, FcItemInfo, FcModel, FcNode, FcRectBox } from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { ChangeDetectorRef, EventEmitter } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\nexport class FcModelService {\n\n modelValidation: FcModelValidationService;\n model: FcModel;\n private readonly detectChangesSubject: Subject;\n selectedObjects: any[];\n\n connectorsHtmlElements: HtmlElementMap = {};\n nodesHtmlElements: HtmlElementMap = {};\n canvasHtmlElement: HTMLElement = null;\n dragImage: HTMLImageElement = null;\n svgHtmlElement: SVGElement = null;\n\n dropNode: (event: Event, node: FcNode) => void;\n createEdge: (event: Event, edge: FcEdge) => Observable;\n edgeAddedCallback: (edge: FcEdge) => void;\n nodeRemovedCallback: (node: FcNode) => void;\n edgeRemovedCallback: (edge: FcEdge) => void;\n\n dropTargetId: string;\n\n private readonly modelChanged: EventEmitter;\n private readonly debouncer = new Subject();\n\n connectors: ConnectorsModel;\n nodes: NodesModel;\n edges: EdgesModel;\n\n constructor(modelValidation: FcModelValidationService,\n model: FcModel,\n modelChanged: EventEmitter,\n detectChangesSubject: Subject,\n selectedObjects: any[],\n dropNode: (event: Event, node: FcNode) => void,\n createEdge: (event: Event, edge: FcEdge) => Observable,\n edgeAddedCallback: (edge: FcEdge) => void,\n nodeRemovedCallback: (node: FcNode) => void,\n edgeRemovedCallback: (edge: FcEdge) => void,\n canvasHtmlElement: HTMLElement,\n svgHtmlElement: SVGElement) {\n\n this.modelValidation = modelValidation;\n this.model = model;\n this.modelChanged = modelChanged;\n this.detectChangesSubject = detectChangesSubject;\n this.canvasHtmlElement = canvasHtmlElement;\n this.svgHtmlElement = svgHtmlElement;\n this.modelValidation.validateModel(this.model);\n this.selectedObjects = selectedObjects;\n\n this.dropNode = dropNode || (() => {});\n this.createEdge = createEdge || ((event, edge) => of({...edge, label: 'label'}));\n this.edgeAddedCallback = edgeAddedCallback || (() => {});\n this.nodeRemovedCallback = nodeRemovedCallback || (() => {});\n this.edgeRemovedCallback = edgeRemovedCallback || (() => {});\n\n this.connectors = new ConnectorsModel(this);\n this.nodes = new NodesModel(this);\n this.edges = new EdgesModel(this);\n\n this.debouncer\n .pipe(debounceTime(100))\n .subscribe(() => this.modelChanged.emit());\n }\n\n public notifyModelChanged() {\n this.debouncer.next();\n }\n\n public detectChanges() {\n setTimeout(() => {\n this.detectChangesSubject.next();\n }, 0);\n }\n\n public selectObject(object: any) {\n if (this.isEditable()) {\n if (this.selectedObjects.indexOf(object) === -1) {\n this.selectedObjects.push(object);\n }\n }\n }\n\n public deselectObject(object: any) {\n if (this.isEditable()) {\n const index = this.selectedObjects.indexOf(object);\n if (index === -1) {\n throw new Error('Tried to deselect an unselected object');\n }\n this.selectedObjects.splice(index, 1);\n }\n }\n\n public toggleSelectedObject(object: any) {\n if (this.isSelectedObject(object)) {\n this.deselectObject(object);\n } else {\n this.selectObject(object);\n }\n }\n\n public isSelectedObject(object: any): boolean {\n return this.selectedObjects.indexOf(object) !== -1;\n }\n\n public selectAll() {\n this.model.nodes.forEach(node => {\n if (!node.readonly) {\n this.nodes.select(node);\n }\n });\n this.model.edges.forEach(edge => {\n this.edges.select(edge);\n });\n this.detectChanges();\n }\n\n public deselectAll() {\n this.selectedObjects.splice(0, this.selectedObjects.length);\n this.detectChanges();\n }\n\n public isEditObject(object: any): boolean {\n return this.selectedObjects.length === 1 &&\n this.selectedObjects.indexOf(object) !== -1;\n }\n\n private inRectBox(x: number, y: number, rectBox: FcRectBox): boolean {\n return x >= rectBox.left && x <= rectBox.right &&\n y >= rectBox.top && y <= rectBox.bottom;\n }\n\n public getItemInfoAtPoint(x: number, y: number): FcItemInfo {\n return {\n node: this.getNodeAtPoint(x, y),\n edge: this.getEdgeAtPoint(x, y)\n };\n }\n\n public getNodeAtPoint(x: number, y: number): FcNode {\n for (const node of this.model.nodes) {\n const element = this.nodes.getHtmlElement(node.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (x >= nodeElementBox.left && x <= nodeElementBox.right\n && y >= nodeElementBox.top && y <= nodeElementBox.bottom) {\n return node;\n }\n }\n return null;\n }\n\n public getEdgeAtPoint(x: number, y: number): FcEdge {\n const element = document.elementFromPoint(x, y);\n const id = element.id;\n let edgeIndex = -1;\n if (id) {\n if (id.startsWith('fc-edge-path-')) {\n edgeIndex = Number(id.substring('fc-edge-path-'.length));\n } else if (id.startsWith('fc-edge-label-')) {\n edgeIndex = Number(id.substring('fc-edge-label-'.length));\n }\n }\n if (edgeIndex > -1) {\n return this.model.edges[edgeIndex];\n }\n return null;\n }\n\n public selectAllInRect(rectBox: FcRectBox) {\n this.model.nodes.forEach((value) => {\n const element = this.nodes.getHtmlElement(value.id);\n const nodeElementBox = element.getBoundingClientRect();\n if (!value.readonly) {\n const x = nodeElementBox.left + nodeElementBox.width / 2;\n const y = nodeElementBox.top + nodeElementBox.height / 2;\n if (this.inRectBox(x, y, rectBox)) {\n this.nodes.select(value);\n } else {\n if (this.nodes.isSelected(value)) {\n this.nodes.deselect(value);\n }\n }\n }\n });\n const canvasElementBox = this.canvasHtmlElement.getBoundingClientRect();\n this.model.edges.forEach((value) => {\n const start = this.edges.sourceCoord(value);\n const end = this.edges.destCoord(value);\n const x = (start.x + end.x) / 2 + canvasElementBox.left;\n const y = (start.y + end.y) / 2 + canvasElementBox.top;\n if (this.inRectBox(x, y, rectBox)) {\n this.edges.select(value);\n } else {\n if (this.edges.isSelected(value)) {\n this.edges.deselect(value);\n }\n }\n });\n }\n\n public deleteSelected() {\n const edgesToDelete = this.edges.getSelectedEdges();\n edgesToDelete.forEach((edge) => {\n this.edges.delete(edge);\n });\n const nodesToDelete = this.nodes.getSelectedNodes();\n nodesToDelete.forEach((node) => {\n this.nodes.delete(node);\n });\n }\n\n public isEditable(): boolean {\n return this.dropTargetId === undefined;\n }\n\n public isDropSource(): boolean {\n return this.dropTargetId !== undefined;\n }\n\n public getDragImage(): HTMLImageElement {\n if (!this.dragImage) {\n this.dragImage = new Image();\n this.dragImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n this.dragImage.style.visibility = 'hidden';\n }\n return this.dragImage;\n }\n}\n\ninterface HtmlElementMap { [id: string]: HTMLElement; }\n\nabstract class AbstractFcModel {\n\n modelService: FcModelService;\n\n protected constructor(modelService: FcModelService) {\n this.modelService = modelService;\n }\n\n public select(object: T) {\n this.modelService.selectObject(object);\n }\n\n public deselect(object: T) {\n this.modelService.deselectObject(object);\n }\n\n public toggleSelected(object: T) {\n this.modelService.toggleSelectedObject(object);\n }\n\n public isSelected(object: T): boolean {\n return this.modelService.isSelectedObject(object);\n }\n\n public isEdit(object: T): boolean {\n return this.modelService.isEditObject(object);\n }\n}\n\nclass ConnectorsModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnector(connectorId: string): FcConnector {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n for (const connector of node.connectors) {\n if (connector.id === connectorId) {\n return connector;\n }\n }\n }\n }\n\n public getHtmlElement(connectorId: string): HTMLElement {\n return this.modelService.connectorsHtmlElements[connectorId];\n }\n\n public setHtmlElement(connectorId: string, element: HTMLElement) {\n this.modelService.connectorsHtmlElements[connectorId] = element;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const element = this.getHtmlElement(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (element === null || element === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n const connectorElementBox = element.getBoundingClientRect();\n const canvasElementBox = canvas.getBoundingClientRect();\n let coords: FcCoords = {\n x: connectorElementBox.left - canvasElementBox.left,\n y: connectorElementBox.top - canvasElementBox.top\n };\n if (centered) {\n coords = {\n x: Math.round(coords.x + element.offsetWidth / 2),\n y: Math.round(coords.y + element.offsetHeight / 2)\n };\n }\n return coords;\n }\n\n public getCoords(connectorId: string): FcCoords {\n return this._getCoords(connectorId, false);\n }\n\n public getCenteredCoord(connectorId: string): FcCoords {\n return this._getCoords(connectorId, true);\n }\n}\n\nclass NodesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public getConnectorsByType(node: FcNode, type: string): Array {\n return node.connectors.filter((connector) => {\n return connector.type === type;\n });\n }\n\n private _addConnector(node: FcNode, connector: FcConnector) {\n node.connectors.push(connector);\n try {\n this.modelService.modelValidation.validateNode(node);\n } catch (error) {\n node.connectors.splice(node.connectors.indexOf(connector), 1);\n throw error;\n }\n }\n\n public delete(node: FcNode) {\n if (this.isSelected(node)) {\n this.deselect(node);\n }\n const model = this.modelService.model;\n const index = model.nodes.indexOf(node);\n if (index === -1) {\n if (node === undefined) {\n throw new Error('Passed undefined');\n }\n throw new Error('Tried to delete not existing node');\n }\n const connectorIds = this.getConnectorIds(node);\n for (let i = 0; i < model.edges.length; i++) {\n const edge = model.edges[i];\n if (connectorIds.indexOf(edge.source) !== -1 || connectorIds.indexOf(edge.destination) !== -1) {\n this.modelService.edges.delete(edge);\n i--;\n }\n }\n model.nodes.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.nodeRemovedCallback(node);\n }\n\n public getSelectedNodes(): Array {\n const model = this.modelService.model;\n return model.nodes.filter((node) => {\n return this.modelService.nodes.isSelected(node);\n });\n }\n\n public handleClicked(node: FcNode, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.nodes.toggleSelected(node);\n } else {\n this.modelService.deselectAll();\n this.modelService.nodes.select(node);\n }\n }\n\n private _addNode(node: FcNode) {\n const model = this.modelService.model;\n try {\n model.nodes.push(node);\n this.modelService.modelValidation.validateNodes(model.nodes);\n } catch (error) {\n model.nodes.splice(model.nodes.indexOf(node), 1);\n throw error;\n }\n }\n\n public getConnectorIds(node: FcNode): Array {\n return node.connectors.map((connector) => {\n return connector.id;\n });\n }\n\n public getNodeByConnectorId(connectorId: string): FcNode {\n const model = this.modelService.model;\n for (const node of model.nodes) {\n const connectorIds = this.getConnectorIds(node);\n if (connectorIds.indexOf(connectorId) > -1) {\n return node;\n }\n }\n return null;\n }\n\n public getHtmlElement(nodeId: string): HTMLElement {\n return this.modelService.nodesHtmlElements[nodeId];\n }\n\n public setHtmlElement(nodeId: string, element: HTMLElement) {\n this.modelService.nodesHtmlElements[nodeId] = element;\n this.modelService.detectChanges();\n }\n\n}\n\nclass EdgesModel extends AbstractFcModel {\n\n constructor(modelService: FcModelService) {\n super(modelService);\n }\n\n public ready(edge: FcEdge): boolean {\n const source = this.modelService.connectors.getHtmlElement(edge.source);\n const destination = this.modelService.connectors.getHtmlElement(edge.destination);\n return source !== undefined && destination !== undefined;\n }\n\n public sourceCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.source);\n }\n\n public destCoord(edge: FcEdge): FcCoords {\n return this.modelService.connectors.getCenteredCoord(edge.destination);\n }\n\n public delete(edge: FcEdge) {\n const model = this.modelService.model;\n const index = model.edges.indexOf(edge);\n if (index === -1) {\n throw new Error('Tried to delete not existing edge');\n }\n if (this.isSelected(edge)) {\n this.deselect(edge);\n }\n model.edges.splice(index, 1);\n this.modelService.notifyModelChanged();\n this.modelService.edgeRemovedCallback(edge);\n }\n\n public getSelectedEdges(): Array {\n const model = this.modelService.model;\n return model.edges.filter((edge) => {\n return this.modelService.edges.isSelected(edge);\n });\n }\n\n public handleEdgeMouseClick(edge: FcEdge, ctrlKey?: boolean) {\n if (ctrlKey) {\n this.modelService.edges.toggleSelected(edge);\n } else {\n this.modelService.deselectAll();\n this.modelService.edges.select(edge);\n }\n }\n\n public putEdge(edge: FcEdge) {\n const model = this.modelService.model;\n model.edges.push(edge);\n this.modelService.notifyModelChanged();\n }\n\n public _addEdge(event: Event, sourceConnector: FcConnector, destConnector: FcConnector, label: string) {\n this.modelService.modelValidation.validateConnector(sourceConnector);\n this.modelService.modelValidation.validateConnector(destConnector);\n const edge: FcEdge = {};\n edge.source = sourceConnector.id;\n edge.destination = destConnector.id;\n edge.label = label;\n const model = this.modelService.model;\n this.modelService.modelValidation.validateEdges(model.edges.concat([edge]), model.nodes);\n this.modelService.createEdge(event, edge).subscribe(\n (created) => {\n model.edges.push(created);\n this.modelService.notifyModelChanged();\n this.modelService.edgeAddedCallback(created);\n }\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FcConnector, FcEdge, FcModel, FcNode, fcTopSort, ModelvalidationError } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcModelValidationService {\n\n constructor() { }\n\n public validateModel(model: FcModel): FcModel {\n this.validateNodes(model.nodes);\n this._validateEdges(model.edges, model.nodes);\n return model;\n }\n\n public validateNodes(nodes: Array): Array {\n const ids: string[] = [];\n nodes.forEach((node) => {\n this.validateNode(node);\n if (ids.indexOf(node.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n ids.push(node.id);\n });\n const connectorIds: string[] = [];\n nodes.forEach((node) => {\n node.connectors.forEach((connector) => {\n if (connectorIds.indexOf(connector.id) !== -1) {\n throw new ModelvalidationError('Id not unique.');\n }\n connectorIds.push(connector.id);\n });\n });\n return nodes;\n }\n\n public validateNode(node: FcNode): FcNode {\n if (node.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (typeof node.name !== 'string') {\n throw new ModelvalidationError('Name not valid.');\n }\n if (typeof node.x !== 'number' || node.x < 0 || Math.round(node.x) !== node.x) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (typeof node.y !== 'number' || node.y < 0 || Math.round(node.y) !== node.y) {\n throw new ModelvalidationError('Coordinates not valid.');\n }\n if (!Array.isArray(node.connectors)) {\n throw new ModelvalidationError('Connectors not valid.');\n }\n node.connectors.forEach((connector) => {\n this.validateConnector(connector);\n });\n return node;\n }\n\n private _validateEdges(edges: Array, nodes: Array): Array {\n edges.forEach((edge) => {\n this._validateEdge(edge, nodes);\n });\n edges.forEach((edge1, index1) => {\n edges.forEach((edge2, index2) => {\n if (index1 !== index2) {\n if ((edge1.source === edge2.source && edge1.destination === edge2.destination) ||\n (edge1.source === edge2.destination && edge1.destination === edge2.source)) {\n throw new ModelvalidationError('Duplicated edge.');\n }\n }\n });\n });\n if (fcTopSort({nodes, edges}) === null) {\n throw new ModelvalidationError('Graph has a circle.');\n }\n return edges;\n }\n\n public validateEdges(edges: Array, nodes: Array): Array {\n this.validateNodes(nodes);\n return this._validateEdges(edges, nodes);\n }\n\n private _validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n if (edge.source === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n if (edge.destination === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (edge.source === edge.destination) {\n throw new ModelvalidationError('Edge with same source and destination connectors.');\n }\n const sourceNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.source))[0];\n if (sourceNode === undefined) {\n throw new ModelvalidationError('Source not valid.');\n }\n const destinationNode = nodes.filter((node) => node.connectors.some((connector) => connector.id === edge.destination))[0];\n if (destinationNode === undefined) {\n throw new ModelvalidationError('Destination not valid.');\n }\n if (sourceNode === destinationNode) {\n throw new ModelvalidationError('Edge with same source and destination nodes.');\n }\n return edge;\n }\n\n public validateEdge(edge: FcEdge, nodes: Array): FcEdge {\n this.validateNodes(nodes);\n return this._validateEdge(edge, nodes);\n }\n\n public validateConnector(connector: FcConnector): FcConnector {\n if (connector.id === undefined) {\n throw new ModelvalidationError('Id not valid.');\n }\n if (connector.type === undefined || connector.type === null || typeof connector.type !== 'string') {\n throw new ModelvalidationError('Type not valid.');\n }\n return connector;\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcCoords, FcNode, FlowchartConstants } from './ngx-flowchart.models';\n\nconst nodeDropScope: NodeDropScope = {\n dropElement: null\n};\n\nexport class FcNodeDraggingService {\n\n nodeDraggingScope: NodeDraggingScope = {\n shadowDragStarted: false,\n dropElement: null,\n draggedNodes: [],\n shadowElements: []\n };\n\n private dragOffsets: FcCoords[] = [];\n private draggedElements: HTMLElement[] = [];\n\n private destinationHtmlElements: HTMLElement[] = [];\n private oldDisplayStyles: string[] = [];\n\n private readonly modelService: FcModelService;\n private readonly automaticResize: boolean;\n private readonly dragAnimation: string;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n applyFunction: (fn: (...args: any[]) => T) => T,\n automaticResize: boolean, dragAnimation: string) {\n this.modelService = modelService;\n this.automaticResize = automaticResize;\n this.dragAnimation = dragAnimation;\n this.applyFunction = applyFunction;\n }\n\n private getCoordinate(coordinate: number, max: number): number {\n coordinate = Math.max(coordinate, 0);\n coordinate = Math.min(coordinate, max);\n return coordinate;\n }\n\n private getXCoordinate(x: number): number {\n return this.getCoordinate(x, this.modelService.canvasHtmlElement.offsetWidth);\n }\n\n private getYCoordinate(y: number): number {\n return this.getCoordinate(y, this.modelService.canvasHtmlElement.offsetHeight);\n }\n\n private resizeCanvas(draggedNode: FcNode, nodeElement: HTMLElement) {\n if (this.automaticResize && !this.modelService.isDropSource()) {\n const canvasElement = this.modelService.canvasHtmlElement;\n if (canvasElement.offsetWidth < draggedNode.x + nodeElement.offsetWidth + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.width = canvasElement.offsetWidth + FlowchartConstants.canvasResizeStep + 'px';\n }\n if (canvasElement.offsetHeight < draggedNode.y + nodeElement.offsetHeight + FlowchartConstants.canvasResizeThreshold) {\n canvasElement.style.height = canvasElement.offsetHeight + FlowchartConstants.canvasResizeStep + 'px';\n }\n }\n }\n\n public isDraggingNode(node: FcNode): boolean {\n return this.nodeDraggingScope.draggedNodes.includes(node);\n }\n\n public dragstart(event: DragEvent, node: FcNode) {\n if (node.readonly) {\n return;\n }\n this.dragOffsets.length = 0;\n this.draggedElements.length = 0;\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.nodeDraggingScope.shadowElements.length = 0;\n this.destinationHtmlElements.length = 0;\n this.oldDisplayStyles.length = 0;\n const elements: Array> = [];\n const nodes: Array = [];\n if (this.modelService.nodes.isSelected(node)) {\n const selectedNodes = this.modelService.nodes.getSelectedNodes();\n for (const selectedNode of selectedNodes) {\n const element = $(this.modelService.nodes.getHtmlElement(selectedNode.id));\n elements.push(element);\n nodes.push(selectedNode);\n }\n } else {\n elements.push($(event.target as HTMLElement));\n nodes.push(node);\n }\n const offsetsX: number[] = [];\n const offsetsY: number[] = [];\n for (const element of elements) {\n offsetsX.push(parseInt(element.css('left'), 10) - event.clientX);\n offsetsY.push(parseInt(element.css('top'), 10) - event.clientY);\n }\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n if (this.modelService.isDropSource()) {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n nodeDropScope.dropElement = elements[0][0].cloneNode(true) as NodeDropElement;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n nodeDropScope.dropElement.offsetInfo = {\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n nodeDropScope.dropElement.style.position = 'absolute';\n nodeDropScope.dropElement.style.pointerEvents = 'none';\n nodeDropScope.dropElement.style.zIndex = '9999';\n\n document.body.appendChild(nodeDropScope.dropElement);\n const dropNodeInfo: DropNodeInfo = {\n node,\n dropTargetId: this.modelService.dropTargetId,\n offsetX: Math.round(offsetsX[0] + offset.left),\n offsetY: Math.round(offsetsY[0] + offset.top)\n };\n originalEvent.dataTransfer.setData('text', JSON.stringify(dropNodeInfo));\n\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n const target: HTMLElement = event.target as HTMLElement;\n this.destinationHtmlElements.push(target);\n this.oldDisplayStyles.push(target.style.display);\n target.style.display = 'none';\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n return;\n }\n this.nodeDraggingScope.draggedNodes = nodes;\n for (let i = 0; i < elements.length; i++) {\n this.draggedElements.push(elements[i][0]);\n this.dragOffsets.push(\n {\n x: offsetsX[i],\n y: offsetsY[i]\n }\n );\n }\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n for (let i = 0; i < this.draggedElements.length; i++) {\n const dragOffset = this.dragOffsets[i];\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = $(`
` +\n `

${draggedNode.name}

`);\n const targetInnerNode = $(this.draggedElements[i]).children()[0];\n shadowElement.children()[0].style.backgroundColor = targetInnerNode.style.backgroundColor;\n this.nodeDraggingScope.shadowElements.push(shadowElement);\n this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[i][0]);\n }\n }\n originalEvent.dataTransfer.setData('text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n for (let i = 0; i < this.draggedElements.length; i++) {\n this.destinationHtmlElements.push(this.draggedElements[i]);\n this.oldDisplayStyles.push(this.destinationHtmlElements[i].style.display);\n this.destinationHtmlElements[i].style.display = 'none';\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: DragEvent): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n const infoText = originalEvent.dataTransfer.getData('text');\n if (infoText) {\n let dropNodeInfo: DropNodeInfo = null;\n try {\n dropNodeInfo = JSON.parse(infoText);\n } catch (e) {}\n if (dropNodeInfo && dropNodeInfo.dropTargetId) {\n if (this.modelService.canvasHtmlElement.id &&\n this.modelService.canvasHtmlElement.id === dropNodeInfo.dropTargetId) {\n dropNode = dropNodeInfo.node;\n const offset = $(this.modelService.canvasHtmlElement).offset();\n const x = event.clientX - offset.left;\n const y = event.clientY - offset.top;\n dropNode.x = Math.round(this.getXCoordinate(dropNodeInfo.offsetX + x));\n dropNode.y = Math.round(this.getYCoordinate(dropNodeInfo.offsetY + y));\n }\n }\n }\n if (dropNode) {\n this.modelService.dropNode(event, dropNode);\n event.preventDefault();\n return false;\n } else if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = Math.round(this.getXCoordinate(dragOffset.x + event.clientX));\n draggedNode.y = Math.round(this.getYCoordinate(dragOffset.y + event.clientY));\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n }\n\n public dragover(event: DragEvent) {\n if (nodeDropScope.dropElement) {\n const offsetInfo = nodeDropScope.dropElement.offsetInfo;\n nodeDropScope.dropElement.style.left = (offsetInfo.offsetX + event.clientX) + 'px';\n nodeDropScope.dropElement.style.top = (offsetInfo.offsetY + event.clientY) + 'px';\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n this.destinationHtmlElements[0].style.display = this.oldDisplayStyles[0];\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n event.preventDefault();\n return;\n }\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return;\n }\n if (!this.nodeDraggingScope.draggedNodes.length) {\n event.preventDefault();\n return;\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n return this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n draggedNode.x = this.getXCoordinate(dragOffset.x + event.clientX);\n draggedNode.y = this.getYCoordinate(dragOffset.y + event.clientY);\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n this.modelService.notifyModelChanged();\n return false;\n });\n }\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.nodeDraggingScope.draggedNodes.length) {\n if (this.nodeDraggingScope.shadowDragStarted) {\n this.applyFunction(() => {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n this.destinationHtmlElements[i].style.display = this.oldDisplayStyles[i];\n }\n this.nodeDraggingScope.shadowDragStarted = false;\n });\n }\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const dragOffset = this.dragOffsets[i];\n this.nodeDraggingScope.shadowElements[i].css('left', this.getXCoordinate(dragOffset.x + event.clientX) + 'px');\n this.nodeDraggingScope.shadowElements[i].css('top', this.getYCoordinate(dragOffset.y + event.clientY) + 'px');\n this.resizeCanvas(draggedNode, this.draggedElements[i]);\n }\n event.preventDefault();\n }\n }\n }\n\n public dragend(event: DragEvent) {\n this.applyFunction(() => {\n if (nodeDropScope.dropElement) {\n nodeDropScope.dropElement.parentNode.removeChild(nodeDropScope.dropElement);\n nodeDropScope.dropElement = null;\n }\n if (this.modelService.isDropSource()) {\n return;\n }\n if (this.nodeDraggingScope.shadowElements.length) {\n for (let i = 0; i < this.nodeDraggingScope.draggedNodes.length; i++) {\n const draggedNode = this.nodeDraggingScope.draggedNodes[i];\n const shadowElement = this.nodeDraggingScope.shadowElements[i];\n draggedNode.x = parseInt(shadowElement.css('left').replace('px', ''), 10);\n draggedNode.y = parseInt(shadowElement.css('top').replace('px', ''), 10);\n this.modelService.canvasHtmlElement.removeChild(shadowElement[0]);\n }\n this.nodeDraggingScope.shadowElements.length = 0;\n this.modelService.notifyModelChanged();\n }\n\n if (this.nodeDraggingScope.draggedNodes.length) {\n this.nodeDraggingScope.draggedNodes.length = 0;\n this.draggedElements.length = 0;\n this.dragOffsets.length = 0;\n }\n });\n }\n\n}\n\nexport interface NodeDraggingScope {\n draggedNodes: Array;\n shadowElements: Array>;\n shadowDragStarted: boolean;\n dropElement: HTMLElement;\n}\n\nexport interface NodeDropElement extends HTMLElement {\n offsetInfo?: {\n offsetX: number;\n offsetY: number;\n };\n}\n\nexport interface NodeDropScope {\n dropElement: NodeDropElement;\n}\n\nexport interface DropNodeInfo {\n node: FcNode;\n dropTargetId: string;\n offsetX: number;\n offsetY: number;\n}\n","import { Injectable } from '@angular/core';\nimport { FcCoords, FlowchartConstants } from './ngx-flowchart.models';\n\n@Injectable()\nexport class FcEdgeDrawingService {\n\n constructor() {\n }\n\n public getEdgeDAttribute(pt1: FcCoords, pt2: FcCoords, style: string): string {\n let dAddribute = `M ${pt1.x}, ${pt1.y} `;\n if (style === FlowchartConstants.curvedStyle) {\n const sourceTangent = this.computeEdgeSourceTangent(pt1, pt2);\n const destinationTangent = this.computeEdgeDestinationTangent(pt1, pt2);\n dAddribute += `C ${sourceTangent.x}, ${sourceTangent.y} ${(destinationTangent.x - 50)}, ${destinationTangent.y} ${pt2.x}, ${pt2.y}`;\n } else {\n dAddribute += `L ${pt2.x}, ${pt2.y}`;\n }\n return dAddribute;\n }\n\n public getEdgeCenter(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: (pt1.x + pt2.x) / 2,\n y: (pt1.y + pt2.y) / 2\n };\n }\n\n private computeEdgeTangentOffset(pt1: FcCoords, pt2: FcCoords): number {\n return (pt2.y - pt1.y) / 2;\n }\n\n private computeEdgeSourceTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt1.x,\n y: pt1.y + this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n private computeEdgeDestinationTangent(pt1: FcCoords, pt2: FcCoords): FcCoords {\n return {\n x: pt2.x,\n y: pt2.y - this.computeEdgeTangentOffset(pt1, pt2)\n };\n }\n\n}\n","import { FcModelService } from './model.service';\nimport { FcConnector, FcCoords, FcEdge, FcModel, FlowchartConstants, ModelvalidationError } from './ngx-flowchart.models';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcModelValidationService } from './modelvalidation.service';\n\nexport class FcEdgeDraggingService {\n\n edgeDragging: EdgeDragging = {\n isDragging: false,\n dragPoint1: null,\n dragPoint2: null,\n shadowDragStarted: false\n };\n\n private draggedEdgeSource: FcConnector = null;\n private dragOffset: FcCoords = {};\n private destinationHtmlElement: HTMLElement = null;\n private oldDisplayStyle = '';\n\n private readonly modelValidation: FcModelValidationService;\n private readonly edgeDrawingService: FcEdgeDrawingService;\n private readonly modelService: FcModelService;\n private readonly model: FcModel;\n private readonly isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n private readonly dragAnimation: string;\n private readonly edgeStyle: string;\n\n constructor(modelValidation: FcModelValidationService,\n edgeDrawingService: FcEdgeDrawingService,\n modelService: FcModelService,\n model: FcModel,\n isValidEdgeCallback: (source: FcConnector, destination: FcConnector) => boolean,\n applyFunction: (fn: (...args: any[]) => T) => T,\n dragAnimation: string,\n edgeStyle: string) {\n this.modelValidation = modelValidation;\n this.edgeDrawingService = edgeDrawingService;\n this.modelService = modelService;\n this.model = model;\n this.isValidEdgeCallback = isValidEdgeCallback || (() => true);\n this.applyFunction = applyFunction;\n this.dragAnimation = dragAnimation;\n this.edgeStyle = edgeStyle;\n }\n\n public dragstart(event: DragEvent, connector: FcConnector) {\n let swapConnector: FcConnector;\n let dragLabel: string;\n let prevEdge: FcEdge;\n if (connector.type === FlowchartConstants.leftConnectorType) {\n for (const edge of this.model.edges) {\n if (edge.destination === connector.id) {\n swapConnector = this.modelService.connectors.getConnector(edge.source);\n dragLabel = edge.label;\n prevEdge = edge;\n this.applyFunction(() => {\n this.modelService.edges.delete(edge);\n });\n break;\n }\n }\n }\n this.edgeDragging.isDragging = true;\n if (swapConnector !== undefined) {\n this.draggedEdgeSource = swapConnector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(swapConnector.id);\n this.edgeDragging.dragLabel = dragLabel;\n this.edgeDragging.prevEdge = prevEdge;\n } else {\n this.draggedEdgeSource = connector;\n this.edgeDragging.dragPoint1 = this.modelService.connectors.getCenteredCoord(connector.id);\n }\n const canvas = this.modelService.canvasHtmlElement;\n if (!canvas) {\n throw new Error('No canvas while edgedraggingService found.');\n }\n this.dragOffset.x = -canvas.getBoundingClientRect().left;\n this.dragOffset.y = -canvas.getBoundingClientRect().top;\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n const originalEvent: DragEvent = (event as any).originalEvent || event;\n\n originalEvent.dataTransfer.setData('Text', 'Just to support firefox');\n if (originalEvent.dataTransfer.setDragImage) {\n originalEvent.dataTransfer.setDragImage(this.modelService.getDragImage(), 0, 0);\n } else {\n this.destinationHtmlElement = event.target as HTMLElement;\n this.oldDisplayStyle = this.destinationHtmlElement.style.display;\n this.destinationHtmlElement.style.display = 'none';\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.shadowDragStarted = true;\n }\n }\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.edgeDragging.gElement === undefined) {\n this.edgeDragging.gElement = $(document.querySelectorAll('.shadow-svg-class'));\n this.edgeDragging.pathElement = $(document.querySelectorAll('.shadow-svg-class')).find('path');\n this.edgeDragging.circleElement = $(document.querySelectorAll('.shadow-svg-class')).find('circle');\n }\n\n this.edgeDragging.gElement.css('display', 'block');\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n }\n event.stopPropagation();\n }\n\n public dragover(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n if (!this.edgeDragging.magnetActive && this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n if (this.edgeDragging.shadowDragStarted) {\n this.applyFunction(() => {\n this.edgeDragging.shadowDragStarted = false;\n });\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n if (this.destinationHtmlElement !== null) {\n this.destinationHtmlElement.style.display = this.oldDisplayStyle;\n }\n\n this.edgeDragging.dragPoint2 = {\n x: event.clientX + this.dragOffset.x,\n y: event.clientY + this.dragOffset.y\n };\n });\n }\n }\n }\n\n public dragoverConnector(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n }\n }\n\n public dragleaveMagnet(event: DragEvent) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: DragEvent, connector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n this.dragover(event);\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: connector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n if (this.isValidEdgeCallback(this.draggedEdgeSource, connector)) {\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n\n this.edgeDragging.magnetActive = true;\n\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n this.edgeDragging.pathElement.attr('d',\n this.edgeDrawingService.getEdgeDAttribute(this.edgeDragging.dragPoint1, this.edgeDragging.dragPoint2, this.edgeStyle));\n this.edgeDragging.circleElement.attr('cx', this.edgeDragging.dragPoint2.x);\n this.edgeDragging.circleElement.attr('cy', this.edgeDragging.dragPoint2.y);\n\n event.preventDefault();\n event.stopPropagation();\n return false;\n } else if (this.dragAnimation === FlowchartConstants.dragAnimationRepaint) {\n return this.applyFunction(() => {\n this.edgeDragging.dragPoint2 = this.modelService.connectors.getCenteredCoord(connector.id);\n event.preventDefault();\n event.stopPropagation();\n return false;\n });\n }\n }\n }\n }\n\n public dragend(event: DragEvent) {\n if (this.edgeDragging.isDragging) {\n this.edgeDragging.isDragging = false;\n this.edgeDragging.dragPoint1 = null;\n this.edgeDragging.dragPoint2 = null;\n this.edgeDragging.dragLabel = null;\n event.stopPropagation();\n\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\n this.edgeDragging.gElement.css('display', 'none');\n }\n if (this.edgeDragging.prevEdge) {\n const edge = this.edgeDragging.prevEdge;\n this.edgeDragging.prevEdge = null;\n this.applyFunction(() => {\n this.modelService.edges.putEdge(edge);\n });\n }\n }\n }\n\n public drop(event: DragEvent, targetConnector: FcConnector): boolean {\n if (this.edgeDragging.isDragging) {\n try {\n this.modelValidation.validateEdges(this.model.edges.concat([{\n source: this.draggedEdgeSource.id,\n destination: targetConnector.id\n }]), this.model.nodes);\n } catch (error) {\n if (error instanceof ModelvalidationError) {\n return true;\n } else {\n throw error;\n }\n }\n\n if (this.isValidEdgeCallback(this.draggedEdgeSource, targetConnector)) {\n this.edgeDragging.prevEdge = null;\n this.modelService.edges._addEdge(event, this.draggedEdgeSource, targetConnector, this.edgeDragging.dragLabel);\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n }\n }\n}\n\nexport interface EdgeDragging {\n isDragging: boolean;\n shadowDragStarted: boolean;\n dragPoint1: FcCoords;\n dragPoint2: FcCoords;\n dragLabel?: string;\n prevEdge?: FcEdge;\n magnetActive?: boolean;\n gElement?: JQuery;\n pathElement?: JQuery;\n circleElement?: JQuery;\n}\n","import { FcConnector, FcEdge, FcNode } from './ngx-flowchart.models';\n\nexport class FcMouseOverService {\n\n mouseoverscope: MouseOverScope = {\n connector: null,\n edge: null,\n node: null\n };\n\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(applyFunction: (fn: (...args: any[]) => T) => T) {\n this.applyFunction = applyFunction;\n }\n\n public nodeMouseOver(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = node;\n });\n }\n\n public nodeMouseOut(event: MouseEvent, node: FcNode) {\n return this.applyFunction(() => {\n this.mouseoverscope.node = null;\n });\n }\n\n public connectorMouseEnter(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = connector;\n });\n }\n\n public connectorMouseLeave(event: MouseEvent, connector: FcConnector) {\n return this.applyFunction(() => {\n this.mouseoverscope.connector = null;\n });\n }\n\n public edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = edge;\n }\n\n public edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverscope.edge = null;\n }\n}\n\nexport interface MouseOverScope {\n connector: FcConnector;\n edge: FcEdge;\n node: FcNode;\n}\n","const regex = /(auto|scroll)/;\n\nconst style = (node: Element, prop: string): string =>\n getComputedStyle(node, null).getPropertyValue(prop);\n\nconst scroll = (node: Element) =>\n regex.test(\n style(node, 'overflow') +\n style(node, 'overflow-y') +\n style(node, 'overflow-x'));\n\nconst scrollparent = (node: HTMLElement): HTMLElement =>\n !node || node === document.body\n ? document.body\n : scroll(node)\n ? node\n : scrollparent(node.parentNode as HTMLElement);\n\nexport default scrollparent;\n","import { FcModelService } from './model.service';\nimport { FcRectBox } from './ngx-flowchart.models';\nimport scrollparent from './scrollparent';\n\ninterface Rectangle {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport class FcRectangleSelectService {\n\n private readonly selectRect: Rectangle = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n\n private readonly modelService: FcModelService;\n private readonly selectElement: HTMLElement;\n private readonly $canvasElement: JQuery;\n private readonly $scrollParent: JQuery;\n private readonly applyFunction: (fn: (...args: any[]) => T) => T;\n\n constructor(modelService: FcModelService,\n selectElement: HTMLElement,\n applyFunction: (fn: (...args: any[]) => T) => T) {\n this.modelService = modelService;\n this.selectElement = selectElement;\n this.$canvasElement = $(this.modelService.canvasHtmlElement);\n this.$scrollParent = $(scrollparent(this.modelService.canvasHtmlElement));\n this.applyFunction = applyFunction;\n }\n\n public mousedown(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && this.selectElement.hidden) {\n this.selectElement.hidden = false;\n const offset = this.$canvasElement.offset();\n this.selectRect.x1 = Math.round(e.pageX - offset.left);\n this.selectRect.y1 = Math.round(e.pageY - offset.top);\n this.selectRect.x2 = this.selectRect.x1;\n this.selectRect.y2 = this.selectRect.y1;\n this.updateSelectRect();\n }\n }\n\n public mousemove(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const offset = this.$canvasElement.offset();\n this.selectRect.x2 = Math.round(e.pageX - offset.left);\n this.selectRect.y2 = Math.round(e.pageY - offset.top);\n this.updateScroll(offset);\n this.updateSelectRect();\n }\n }\n\n private updateScroll(offset: JQuery.Coordinates) {\n const rect = this.$scrollParent[0].getBoundingClientRect();\n const bottom = rect.bottom - offset.top;\n const right = rect.right - offset.left;\n const top = rect.top - offset.top;\n const left = rect.left - offset.left;\n if (this.selectRect.y2 - top < 25) {\n const topScroll = 25 - (this.selectRect.y2 - top);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll - topScroll);\n } else if (bottom - this.selectRect.y2 < 40) {\n const bottomScroll = 40 - (bottom - this.selectRect.y2);\n const scroll = this.$scrollParent.scrollTop();\n this.$scrollParent.scrollTop(scroll + bottomScroll);\n }\n if (this.selectRect.x2 - left < 25) {\n const leftScroll = 25 - (this.selectRect.x2 - left);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll - leftScroll);\n } else if (right - this.selectRect.x2 < 40) {\n const rightScroll = 40 - (right - this.selectRect.x2);\n const scroll = this.$scrollParent.scrollLeft();\n this.$scrollParent.scrollLeft(scroll + rightScroll);\n }\n }\n\n public mouseup(e: MouseEvent) {\n if (this.modelService.isEditable() && !e.ctrlKey && !e.metaKey && e.button === 0\n && !this.selectElement.hidden) {\n const rectBox = this.selectElement.getBoundingClientRect() as FcRectBox;\n this.selectElement.hidden = true;\n this.selectObjects(rectBox);\n }\n }\n\n private updateSelectRect() {\n const x3 = Math.min(this.selectRect.x1, this.selectRect.x2);\n const x4 = Math.max(this.selectRect.x1, this.selectRect.x2);\n const y3 = Math.min(this.selectRect.y1, this.selectRect.y2);\n const y4 = Math.max(this.selectRect.y1, this.selectRect.y2);\n this.selectElement.style.left = x3 + 'px';\n this.selectElement.style.top = y3 + 'px';\n this.selectElement.style.width = x4 - x3 + 'px';\n this.selectElement.style.height = y4 - y3 + 'px';\n }\n\n private selectObjects(rectBox: FcRectBox) {\n this.applyFunction(() => {\n this.modelService.selectAllInRect(rectBox);\n });\n }\n\n}\n\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef, EventEmitter,\n HostBinding,\n HostListener,\n Input,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnInit, Output\n} from '@angular/core';\nimport { FcCallbacks, FcEdge, FcModel, FcNode, FlowchartConstants, UserCallbacks, UserNodeCallbacks } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcNodeDraggingService } from './node-dragging.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { FcEdgeDraggingService } from './edge-dragging.service';\nimport { FcMouseOverService } from './mouseover.service';\nimport { FcRectangleSelectService } from './rectangleselect.service';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Component({\n selector: 'fc-canvas',\n templateUrl: './ngx-flowchart.component.html',\n styleUrls: ['./ngx-flowchart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxFlowchartComponent implements OnInit, DoCheck {\n\n @HostBinding('attr.class')\n get canvasClass(): string {\n return FlowchartConstants.canvasClass;\n }\n\n @Input()\n model: FcModel;\n\n @Input()\n selectedObjects: any[];\n\n @Input()\n edgeStyle: string;\n\n @Input()\n userCallbacks: UserCallbacks;\n\n @Input()\n automaticResize: boolean;\n\n @Input()\n dragAnimation: string;\n\n @Input()\n nodeWidth: number;\n\n @Input()\n nodeHeight: number;\n\n @Input()\n dropTargetId: string;\n\n @Output()\n modelChanged = new EventEmitter();\n\n private fitModelSizeByDefaultValue = true;\n get fitModelSizeByDefault(): boolean {\n return this.fitModelSizeByDefaultValue;\n }\n @Input()\n set fitModelSizeByDefault(value: boolean) {\n this.fitModelSizeByDefaultValue = coerceBooleanProperty(value);\n }\n\n callbacks: FcCallbacks;\n\n userNodeCallbacks: UserNodeCallbacks;\n\n modelService: FcModelService;\n nodeDraggingService: FcNodeDraggingService;\n edgeDraggingService: FcEdgeDraggingService;\n mouseoverService: FcMouseOverService;\n rectangleSelectService: FcRectangleSelectService;\n\n arrowDefId: string;\n arrowDefIdSelected: string;\n\n flowchartConstants = FlowchartConstants;\n\n private nodesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private edgesDiffer: IterableDiffer = this.differs.find([]).create((index, item) => {\n return item;\n });\n\n private readonly detectChangesSubject = new Subject();\n\n constructor(private elementRef: ElementRef,\n private differs: IterableDiffers,\n private modelValidation: FcModelValidationService,\n public edgeDrawingService: FcEdgeDrawingService,\n private cd: ChangeDetectorRef,\n private zone: NgZone) {\n this.arrowDefId = 'arrow-' + Math.random();\n this.arrowDefIdSelected = this.arrowDefId + '-selected';\n this.detectChangesSubject\n .pipe(debounceTime(50))\n .subscribe(() => this.cd.detectChanges());\n }\n\n ngOnInit() {\n if (!this.dropTargetId && this.edgeStyle !== FlowchartConstants.curvedStyle && this.edgeStyle !== FlowchartConstants.lineStyle) {\n throw new Error('edgeStyle not supported.');\n }\n this.nodeHeight = this.nodeHeight || 200;\n this.nodeWidth = this.nodeWidth || 200;\n this.dragAnimation = this.dragAnimation || FlowchartConstants.dragAnimationRepaint;\n this.userCallbacks = this.userCallbacks || {};\n this.automaticResize = this.automaticResize || false;\n\n for (const key of Object.keys(this.userCallbacks)) {\n const callback = this.userCallbacks[key];\n if (typeof callback !== 'function' && key !== 'nodeCallbacks') {\n throw new Error('All callbacks should be functions.');\n }\n }\n\n this.userNodeCallbacks = this.userCallbacks.nodeCallbacks;\n\n const element = $(this.elementRef.nativeElement);\n\n this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged,\n this.detectChangesSubject, this.selectedObjects,\n this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved,\n this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg'));\n\n if (this.dropTargetId) {\n this.modelService.dropTargetId = this.dropTargetId;\n }\n\n const applyFunction = this.zone.run.bind(this.zone);\n\n this.nodeDraggingService = new FcNodeDraggingService(this.modelService, applyFunction,\n this.automaticResize, this.dragAnimation);\n\n this.edgeDraggingService = new FcEdgeDraggingService(this.modelValidation, this.edgeDrawingService, this.modelService,\n this.model, this.userCallbacks.isValidEdge || null, applyFunction,\n this.dragAnimation, this.edgeStyle);\n\n this.mouseoverService = new FcMouseOverService(applyFunction);\n\n this.rectangleSelectService = new FcRectangleSelectService(this.modelService,\n element[0].querySelector('#select-rectangle'), applyFunction);\n\n this.callbacks = {\n nodeDragstart: this.nodeDraggingService.dragstart.bind(this.nodeDraggingService),\n nodeDragend: this.nodeDraggingService.dragend.bind(this.nodeDraggingService),\n edgeDragstart: this.edgeDraggingService.dragstart.bind(this.edgeDraggingService),\n edgeDragend: this.edgeDraggingService.dragend.bind(this.edgeDraggingService),\n edgeDrop: this.edgeDraggingService.drop.bind(this.edgeDraggingService),\n edgeDragoverConnector: this.edgeDraggingService.dragoverConnector.bind(this.edgeDraggingService),\n edgeDragoverMagnet: this.edgeDraggingService.dragoverMagnet.bind(this.edgeDraggingService),\n edgeDragleaveMagnet: this.edgeDraggingService.dragleaveMagnet.bind(this.edgeDraggingService),\n nodeMouseOver: this.mouseoverService.nodeMouseOver.bind(this.mouseoverService),\n nodeMouseOut: this.mouseoverService.nodeMouseOut.bind(this.mouseoverService),\n connectorMouseEnter: this.mouseoverService.connectorMouseEnter.bind(this.mouseoverService),\n connectorMouseLeave: this.mouseoverService.connectorMouseLeave.bind(this.mouseoverService),\n nodeClicked: (event, node) => {\n this.modelService.nodes.handleClicked(node, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n };\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n\n ngDoCheck(): void {\n if (this.model) {\n const nodesChange = this.nodesDiffer.diff(this.model.nodes);\n const edgesChange = this.edgesDiffer.diff(this.model.edges);\n let nodesChanged = false;\n let edgesChanged = false;\n if (nodesChange !== null) {\n nodesChange.forEachAddedItem(() => {\n nodesChanged = true;\n });\n nodesChange.forEachRemovedItem(() => {\n nodesChanged = true;\n });\n }\n if (edgesChange !== null) {\n edgesChange.forEachAddedItem(() => {\n edgesChanged = true;\n });\n edgesChange.forEachRemovedItem(() => {\n edgesChanged = true;\n });\n }\n if (nodesChanged) {\n this.adjustCanvasSize(this.fitModelSizeByDefault);\n }\n if (nodesChanged || edgesChanged) {\n this.detectChangesSubject.next();\n }\n }\n }\n\n getEdgeDAttribute(edge: FcEdge): string {\n return this.edgeDrawingService.getEdgeDAttribute(this.modelService.edges.sourceCoord(edge),\n this.modelService.edges.destCoord(edge), this.edgeStyle);\n }\n\n public adjustCanvasSize(fit?: boolean) {\n let maxX = 0;\n let maxY = 0;\n const element = $(this.elementRef.nativeElement);\n this.model.nodes.forEach((node) => {\n maxX = Math.max(node.x + this.nodeWidth, maxX);\n maxY = Math.max(node.y + this.nodeHeight, maxY);\n });\n let width;\n let height;\n if (fit) {\n width = maxX;\n height = maxY;\n } else {\n width = Math.max(maxX, element.prop('offsetWidth'));\n height = Math.max(maxY, element.prop('offsetHeight'));\n }\n element.css('width', width + 'px');\n element.css('height', height + 'px');\n }\n\n canvasClick(event: MouseEvent) {}\n\n edgeMouseDown(event: MouseEvent, edge: FcEdge) {\n event.stopPropagation();\n }\n\n edgeClick(event: MouseEvent, edge: FcEdge) {\n this.modelService.edges.handleEdgeMouseClick(edge, event.ctrlKey);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeRemove(event: Event, edge: FcEdge) {\n this.modelService.edges.delete(edge);\n event.stopPropagation();\n event.preventDefault();\n }\n\n edgeEdit(event: Event, edge: FcEdge) {\n if (this.userCallbacks.edgeEdit) {\n this.userCallbacks.edgeEdit(event, edge);\n }\n }\n\n edgeDoubleClick(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeDoubleClick) {\n this.userCallbacks.edgeDoubleClick(event, edge);\n }\n }\n\n edgeMouseOver(event: MouseEvent, edge: FcEdge) {\n if (this.userCallbacks.edgeMouseOver) {\n this.userCallbacks.edgeMouseOver(event, edge);\n }\n }\n\n edgeMouseEnter(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseEnter(event, edge);\n }\n\n edgeMouseLeave(event: MouseEvent, edge: FcEdge) {\n this.mouseoverService.edgeMouseLeave(event, edge);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n this.nodeDraggingService.drop(event);\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n this.rectangleSelectService.mousedown(event);\n }\n\n @HostListener('mousemove', ['$event'])\n mousemove(event: MouseEvent) {\n this.rectangleSelectService.mousemove(event);\n }\n\n @HostListener('mouseup', ['$event'])\n mouseup(event: MouseEvent) {\n this.rectangleSelectService.mouseup(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-magnet]'\n})\nexport class FcMagnetDirective implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n connector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.magnetClass);\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: DragEvent) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FlowchartConstants } from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[fc-connector]'\n})\nexport class FcConnectorDirective implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n connector: FcConnector;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n constructor(public elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.connectorClass);\n if (this.modelservice.isEditable()) {\n element.attr('draggable', 'true');\n this.updateConnectorClass();\n }\n this.modelservice.connectors.setHtmlElement(this.connector.id, element[0]);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateConnector = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (propName === 'mouseOverConnector') {\n updateConnector = true;\n }\n }\n }\n if (updateConnector && this.modelservice.isEditable()) {\n this.updateConnectorClass();\n }\n }\n\n private updateConnectorClass() {\n const element = $(this.elementRef.nativeElement);\n if (this.connector === this.mouseOverConnector) {\n element.addClass(FlowchartConstants.hoverClass);\n } else {\n element.removeClass(FlowchartConstants.hoverClass);\n }\n }\n\n @HostListener('dragover', ['$event'])\n dragover(event: DragEvent) {\n // Skip - conflict with magnet\n /* if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDragoverConnector(event, this.connector);\n }*/\n }\n\n @HostListener('drop', ['$event'])\n drop(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragstart(event, this.connector);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n mouseenter(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseEnter(event, this.connector);\n }\n }\n\n @HostListener('mouseleave', ['$event'])\n mouseleave(event: MouseEvent) {\n if (this.modelservice.isEditable()) {\n this.callbacks.connectorMouseLeave(event, this.connector);\n }\n }\n\n}\n","import {\n Component,\n ComponentFactoryResolver, Directive,\n ElementRef, HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {\n FC_NODE_COMPONENT_CONFIG,\n FcCallbacks,\n FcConnector,\n FcNode,\n FcNodeComponentConfig,\n FlowchartConstants,\n UserNodeCallbacks\n} from './ngx-flowchart.models';\nimport { FcModelService } from './model.service';\n\n@Component({\n selector: 'fc-node',\n template: '',\n styleUrls: ['./node.component.scss']\n})\nexport class FcNodeContainerComponent implements OnInit, OnChanges {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n @HostBinding('attr.id')\n get nodeId(): string {\n return this.node.id;\n }\n\n @HostBinding('style.top')\n get top(): string {\n return this.node.y + 'px';\n }\n\n @HostBinding('style.left')\n get left(): string {\n return this.node.x + 'px';\n }\n\n nodeComponent: FcNodeComponent;\n\n @ViewChild('nodeContent', {read: ViewContainerRef, static: true}) nodeContentContainer: ViewContainerRef;\n\n constructor(@Inject(FC_NODE_COMPONENT_CONFIG) private nodeComponentConfig: FcNodeComponentConfig,\n private elementRef: ElementRef,\n private componentFactoryResolver: ComponentFactoryResolver) {\n }\n\n ngOnInit(): void {\n if (!this.userNodeCallbacks) {\n this.userNodeCallbacks = {};\n }\n this.userNodeCallbacks.nodeEdit = this.userNodeCallbacks.nodeEdit || (() => {});\n this.userNodeCallbacks.doubleClick = this.userNodeCallbacks.doubleClick || (() => {});\n this.userNodeCallbacks.mouseDown = this.userNodeCallbacks.mouseDown || (() => {});\n this.userNodeCallbacks.mouseEnter = this.userNodeCallbacks.mouseEnter || (() => {});\n this.userNodeCallbacks.mouseLeave = this.userNodeCallbacks.mouseLeave || (() => {});\n\n const element = $(this.elementRef.nativeElement);\n element.addClass(FlowchartConstants.nodeClass);\n if (!this.node.readonly) {\n element.attr('draggable', 'true');\n }\n this.updateNodeClass();\n this.modelservice.nodes.setHtmlElement(this.node.id, element[0]);\n this.nodeContentContainer.clear();\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.nodeComponentConfig.nodeComponentType);\n const componentRef = this.nodeContentContainer.createComponent(componentFactory);\n this.nodeComponent = componentRef.instance;\n this.nodeComponent.callbacks = this.callbacks;\n this.nodeComponent.userNodeCallbacks = this.userNodeCallbacks;\n this.nodeComponent.node = this.node;\n this.nodeComponent.modelservice = this.modelservice;\n this.updateNodeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateNode = false;\n for (const propName of Object.keys(changes)) {\n const change = changes[propName];\n if (!change.firstChange && change.currentValue !== change.previousValue) {\n if (['selected', 'edit', 'underMouse', 'mouseOverConnector', 'dragging'].includes(propName)) {\n updateNode = true;\n }\n }\n }\n if (updateNode) {\n this.updateNodeClass();\n this.updateNodeComponent();\n }\n }\n\n private updateNodeClass() {\n const element = $(this.elementRef.nativeElement);\n this.toggleClass(element, FlowchartConstants.selectedClass, this.selected);\n this.toggleClass(element, FlowchartConstants.editClass, this.edit);\n this.toggleClass(element, FlowchartConstants.hoverClass, this.underMouse);\n this.toggleClass(element, FlowchartConstants.draggingClass, this.dragging);\n }\n\n private updateNodeComponent() {\n this.nodeComponent.selected = this.selected;\n this.nodeComponent.edit = this.edit;\n this.nodeComponent.underMouse = this.underMouse;\n this.nodeComponent.mouseOverConnector = this.mouseOverConnector;\n this.nodeComponent.dragging = this.dragging;\n }\n\n private toggleClass(element: JQuery, clazz: string, set: boolean) {\n if (set) {\n element.addClass(clazz);\n } else {\n element.removeClass(clazz);\n }\n }\n\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: DragEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragend(event);\n }\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeClicked(event, this.node);\n }\n }\n\n @HostListener('mouseover', ['$event'])\n mouseover(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOver(event, this.node);\n }\n }\n\n @HostListener('mouseout', ['$event'])\n mouseout(event: MouseEvent) {\n if (!this.node.readonly) {\n this.callbacks.nodeMouseOut(event, this.node);\n }\n }\n\n}\n\nexport abstract class FcNodeComponent implements OnInit {\n\n @Input()\n callbacks: FcCallbacks;\n\n @Input()\n userNodeCallbacks: UserNodeCallbacks;\n\n @Input()\n node: FcNode;\n\n @Input()\n selected: boolean;\n\n @Input()\n edit: boolean;\n\n @Input()\n underMouse: boolean;\n\n @Input()\n mouseOverConnector: FcConnector;\n\n @Input()\n modelservice: FcModelService;\n\n @Input()\n dragging: boolean;\n\n flowchartConstants = FlowchartConstants;\n\n ngOnInit(): void {\n }\n\n}\n","import { Component } from '@angular/core';\nimport { FcNodeComponent } from './node.component';\n\n@Component({\n selector: 'fc-default-node',\n templateUrl: './default-node.component.html',\n styleUrls: ['./default-node.component.scss']\n})\nexport class DefaultFcNodeComponent extends FcNodeComponent {\n\n constructor() {\n super();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { NgxFlowchartComponent } from './ngx-flowchart.component';\nimport { FcModelValidationService } from './modelvalidation.service';\nimport { FcEdgeDrawingService } from './edge-drawing.service';\nimport { CommonModule } from '@angular/common';\nimport { FcMagnetDirective } from './magnet.directive';\nimport { FcConnectorDirective } from './connector.directive';\nimport { FcNodeContainerComponent } from './node.component';\nimport { FC_NODE_COMPONENT_CONFIG } from './ngx-flowchart.models';\nimport { DefaultFcNodeComponent } from './default-node.component';\n\n@NgModule({\n entryComponents: [\n DefaultFcNodeComponent\n ],\n declarations: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n FcNodeContainerComponent,\n DefaultFcNodeComponent],\n providers: [\n FcModelValidationService,\n FcEdgeDrawingService,\n {\n provide: FC_NODE_COMPONENT_CONFIG,\n useValue: {\n nodeComponentType: DefaultFcNodeComponent\n }\n }\n ],\n imports: [\n CommonModule\n ],\n exports: [NgxFlowchartComponent,\n FcMagnetDirective,\n FcConnectorDirective,\n DefaultFcNodeComponent]\n})\nexport class NgxFlowchartModule { }\n"],"names":["tslib_1.__extends","tslib_1.__values"],"mappings":"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"} \ No newline at end of file diff --git a/dist/ngx-flowchart/lib/model.service.d.ts b/dist/ngx-flowchart/lib/model.service.d.ts index 4723dc0..e39dc6f 100644 --- a/dist/ngx-flowchart/lib/model.service.d.ts +++ b/dist/ngx-flowchart/lib/model.service.d.ts @@ -1,11 +1,11 @@ import { FcModelValidationService } from './modelvalidation.service'; import { FcConnector, FcCoords, FcEdge, FcItemInfo, FcModel, FcNode, FcRectBox } from './ngx-flowchart.models'; -import { Observable } from 'rxjs'; -import { ChangeDetectorRef, EventEmitter } from '@angular/core'; +import { Observable, Subject } from 'rxjs'; +import { EventEmitter } from '@angular/core'; export declare class FcModelService { modelValidation: FcModelValidationService; model: FcModel; - cd: ChangeDetectorRef; + private readonly detectChangesSubject; selectedObjects: any[]; connectorsHtmlElements: HtmlElementMap; nodesHtmlElements: HtmlElementMap; @@ -23,7 +23,7 @@ export declare class FcModelService { connectors: ConnectorsModel; nodes: NodesModel; edges: EdgesModel; - constructor(modelValidation: FcModelValidationService, model: FcModel, modelChanged: EventEmitter, cd: ChangeDetectorRef, selectedObjects: any[], dropNode: (event: Event, node: FcNode) => void, createEdge: (event: Event, edge: FcEdge) => Observable, edgeAddedCallback: (edge: FcEdge) => void, nodeRemovedCallback: (node: FcNode) => void, edgeRemovedCallback: (edge: FcEdge) => void, canvasHtmlElement: HTMLElement, svgHtmlElement: SVGElement); + constructor(modelValidation: FcModelValidationService, model: FcModel, modelChanged: EventEmitter, detectChangesSubject: Subject, selectedObjects: any[], dropNode: (event: Event, node: FcNode) => void, createEdge: (event: Event, edge: FcEdge) => Observable, edgeAddedCallback: (edge: FcEdge) => void, nodeRemovedCallback: (node: FcNode) => void, edgeRemovedCallback: (edge: FcEdge) => void, canvasHtmlElement: HTMLElement, svgHtmlElement: SVGElement); notifyModelChanged(): void; detectChanges(): void; selectObject(object: any): void; @@ -42,7 +42,6 @@ export declare class FcModelService { isEditable(): boolean; isDropSource(): boolean; getDragImage(): HTMLImageElement; - registerCallbacks(edgeAddedCallback: (edge: FcEdge) => void, nodeRemovedCallback: (node: FcNode) => void, edgeRemovedCallback: (edge: FcEdge) => void): void; } interface HtmlElementMap { [id: string]: HTMLElement; diff --git a/dist/ngx-flowchart/lib/ngx-flowchart.component.d.ts b/dist/ngx-flowchart/lib/ngx-flowchart.component.d.ts index 2a07bfa..30772e4 100644 --- a/dist/ngx-flowchart/lib/ngx-flowchart.component.d.ts +++ b/dist/ngx-flowchart/lib/ngx-flowchart.component.d.ts @@ -63,6 +63,7 @@ export declare class NgxFlowchartComponent implements OnInit, DoCheck { }; private nodesDiffer; private edgesDiffer; + private readonly detectChangesSubject; constructor(elementRef: ElementRef, differs: IterableDiffers, modelValidation: FcModelValidationService, edgeDrawingService: FcEdgeDrawingService, cd: ChangeDetectorRef, zone: NgZone); ngOnInit(): void; ngDoCheck(): void; diff --git a/dist/ngx-flowchart/ngx-flowchart.metadata.json b/dist/ngx-flowchart/ngx-flowchart.metadata.json index 46de629..c2dbb76 100644 --- a/dist/ngx-flowchart/ngx-flowchart.metadata.json +++ b/dist/ngx-flowchart/ngx-flowchart.metadata.json @@ -1 +1 @@ -{"__symbolic":"module","version":4,"metadata":{"NgxFlowchartComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":23,"character":1},"arguments":[{"selector":"fc-canvas","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":27,"character":19},"member":"OnPush"},"template":"
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n {{edgeDraggingService.edgeDragging.dragLabel}}\n
\n
\n \n
\n
\n \n
\n
\n ×\n
\n {{edge.label}}\n
\n
\n \n\n","styles":[":host{display:block;position:relative;width:100%;height:100%;background-size:25px 25px;background-image:linear-gradient(to right,rgba(0,0,0,.1) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.1) 1px,transparent 1px);background-color:transparent;min-width:100%;min-height:100%;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host .fc-canvas-container{display:block;position:relative;width:100%;height:100%}:host .fc-canvas-container svg.fc-canvas-svg{display:block;position:relative;width:100%;height:100%}:host .fc-edge{stroke:gray;stroke-width:4;transition:stroke-width .2s;fill:transparent}:host .fc-edge.fc-hover{stroke:gray;stroke-width:6;fill:transparent}:host .fc-edge.fc-selected{stroke:red;stroke-width:4;fill:transparent}:host .fc-edge.fc-active{-webkit-animation:3s linear infinite dash;animation:3s linear infinite dash;stroke-dasharray:20}:host .fc-edge.fc-dragging{pointer-events:none}:host .fc-arrow-marker polygon{stroke:gray;fill:gray}:host .fc-arrow-marker-selected polygon{stroke:red;fill:red}:host .edge-endpoint{fill:gray}:host .fc-noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host .fc-edge-label{position:absolute;opacity:.8;transition:transform .2s;transform-origin:bottom left;margin:0 auto}:host .fc-edge-label .fc-edge-label-text{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;text-align:center;font-size:16px}:host .fc-edge-label .fc-edge-label-text span{cursor:default;border:solid #ff3d00;border-radius:10px;color:#ff3d00;background-color:#fff;padding:3px 5px}:host .fc-edge-label .fc-nodeedit{top:-30px;right:14px}:host .fc-edge-label .fc-nodedelete{top:-30px;right:-13px}:host .fc-edge-label.fc-hover{transform:scale(1.25)}:host .fc-edge-label.fc-edit .fc-edge-label-text span,:host .fc-edge-label.fc-selected .fc-edge-label-text span{border:solid red;color:#fff;font-weight:600;background-color:red}:host .fc-select-rectangle{border:2px dashed #5262ff;position:absolute;background:rgba(20,125,255,.1);z-index:2}@-webkit-keyframes dash{from{stroke-dashoffset:500}}@keyframes dash{from{stroke-dashoffset:500}}:host ::ng-deep .fc-nodeedit{display:none;font-size:15px}:host ::ng-deep .fc-nodedelete{display:none;font-size:18px}:host ::ng-deep .fc-edit .fc-nodedelete,:host ::ng-deep .fc-edit .fc-nodeedit{display:block;position:absolute;border:2px solid #eee;border-radius:50%;font-weight:600;line-height:20px;height:20px;padding-top:2px;width:22px;background:#494949;color:#fff;text-align:center;vertical-align:bottom;cursor:pointer}:host ::ng-deep .fc-edit .fc-nodeedit{top:-24px;right:16px}:host ::ng-deep .fc-edit .fc-nodedelete{top:-24px;right:-13px}"]}]}],"members":{"canvasClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":31,"character":3},"arguments":["attr.class"]}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":36,"character":3}}]}],"selectedObjects":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":39,"character":3}}]}],"edgeStyle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":42,"character":3}}]}],"userCallbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":3}}]}],"automaticResize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":48,"character":3}}]}],"dragAnimation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":51,"character":3}}]}],"nodeWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":54,"character":3}}]}],"nodeHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":57,"character":3}}]}],"dropTargetId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"modelChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":63,"character":3}}]}],"fitModelSizeByDefault":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":70,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":98,"character":45,"context":{"typeName":"HTMLElement"},"module":"./lib/ngx-flowchart.component"}]},{"__symbolic":"reference","module":"@angular/core","name":"IterableDiffers","line":99,"character":31},{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":102,"character":26},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":103,"character":28}]}],"ngOnInit":[{"__symbolic":"method"}],"ngDoCheck":[{"__symbolic":"method"}],"getEdgeDAttribute":[{"__symbolic":"method"}],"adjustCanvasSize":[{"__symbolic":"method"}],"canvasClick":[{"__symbolic":"method"}],"edgeMouseDown":[{"__symbolic":"method"}],"edgeClick":[{"__symbolic":"method"}],"edgeRemove":[{"__symbolic":"method"}],"edgeEdit":[{"__symbolic":"method"}],"edgeDoubleClick":[{"__symbolic":"method"}],"edgeMouseOver":[{"__symbolic":"method"}],"edgeMouseEnter":[{"__symbolic":"method"}],"edgeMouseLeave":[{"__symbolic":"method"}],"dragover":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":274,"character":3},"arguments":["dragover",["$event"]]}]}],"drop":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":280,"character":3},"arguments":["drop",["$event"]]}]}],"mousedown":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":291,"character":3},"arguments":["mousedown",["$event"]]}]}],"mousemove":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":296,"character":3},"arguments":["mousemove",["$event"]]}]}],"mouseup":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":301,"character":3},"arguments":["mouseup",["$event"]]}]}]}},"NgxFlowchartModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{"entryComponents":[{"__symbolic":"reference","name":"ɵd"}],"declarations":[{"__symbolic":"reference","name":"NgxFlowchartComponent"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ɵd"}],"providers":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"},{"provide":{"__symbolic":"reference","name":"FC_NODE_COMPONENT_CONFIG"},"useValue":{"nodeComponentType":{"__symbolic":"reference","name":"ɵd"}}}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":31,"character":4}],"exports":[{"__symbolic":"reference","name":"NgxFlowchartComponent"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵd"}]}]}],"members":{}},"FC_NODE_COMPONENT_CONFIG":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":4,"character":44},"arguments":["fc-node.component.config"]},"FcNodeComponentConfig":{"__symbolic":"interface"},"FlowchartConstants":{"htmlPrefix":"fc","leftConnectorType":"leftConnector","rightConnectorType":"rightConnector","curvedStyle":"curved","lineStyle":"line","dragAnimationRepaint":"repaint","dragAnimationShadow":"shadow","canvasClass":"fc-canvas","selectedClass":"fc-selected","editClass":"fc-edit","activeClass":"fc-active","hoverClass":"fc-hover","draggingClass":"fc-dragging","edgeClass":"fc-edge","edgeLabelClass":"fc-edge-label","connectorClass":"fc-connector","magnetClass":"fc-magnet","nodeClass":"fc-node","nodeOverlayClass":"fc-node-overlay","leftConnectorClass":"fc-leftConnectors","rightConnectorClass":"fc-rightConnectors","canvasResizeThreshold":200,"canvasResizeStep":200},"FcCoords":{"__symbolic":"interface"},"FcRectBox":{"__symbolic":"interface"},"FcConnector":{"__symbolic":"interface"},"FcNode":{"__symbolic":"interface"},"FcEdge":{"__symbolic":"interface"},"FcItemInfo":{"__symbolic":"interface"},"FcModel":{"__symbolic":"interface"},"UserCallbacks":{"__symbolic":"interface"},"UserNodeCallbacks":{"__symbolic":"interface"},"FcCallbacks":{"__symbolic":"interface"},"FcAdjacentList":{"__symbolic":"interface"},"ModelvalidationError":{"__symbolic":"class","extends":{"__symbolic":"error","message":"Reference to non-exported class","line":127,"character":0,"context":{"className":"BaseError"},"module":"./lib/ngx-flowchart.models"},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"}]}]}},"fcTopSort":{"__symbolic":"function"},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":24,"character":1},"arguments":[{"selector":"fc-node","template":"","styles":[":host{position:absolute;z-index:1}:host.fc-dragging{z-index:10}:host ::ng-deep .fc-leftConnectors,:host ::ng-deep .fc-rightConnectors{position:absolute;top:0;height:100%;display:flex;flex-direction:column;z-index:-10}:host ::ng-deep .fc-leftConnectors .fc-magnet,:host ::ng-deep .fc-rightConnectors .fc-magnet{align-items:center}:host ::ng-deep .fc-leftConnectors{left:-20px}:host ::ng-deep .fc-rightConnectors{right:-20px}:host ::ng-deep .fc-magnet{display:flex;flex-grow:1;height:60px;justify-content:center}:host ::ng-deep .fc-connector{width:18px;height:18px;border:10px solid transparent;-moz-background-clip:padding;-webkit-background-clip:padding;background-clip:padding-box;border-radius:50%;background-color:#f7a789;color:#fff;pointer-events:all}:host ::ng-deep .fc-connector.fc-hover{background-color:#000}"]}]}],"members":{"callbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":3}}]}],"userNodeCallbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":34,"character":3}}]}],"node":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":37,"character":3}}]}],"selected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":40,"character":3}}]}],"edit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"underMouse":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":46,"character":3}}]}],"mouseOverConnector":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":49,"character":3}}]}],"modelservice":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":52,"character":3}}]}],"dragging":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"nodeId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":58,"character":3},"arguments":["attr.id"]}]}],"top":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":63,"character":3},"arguments":["style.top"]}]}],"left":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":68,"character":3},"arguments":["style.left"]}]}],"nodeContentContainer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":75,"character":3},"arguments":["nodeContent",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":75,"character":35},"static":true}]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":77,"character":15},"arguments":[{"__symbolic":"reference","name":"FC_NODE_COMPONENT_CONFIG"}]}],null,null],"parameters":[{"__symbolic":"reference","name":"FcNodeComponentConfig"},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":78,"character":45,"context":{"typeName":"HTMLElement"},"module":"./lib/node.component"}]},{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":79,"character":48}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"updateNodeClass":[{"__symbolic":"method"}],"updateNodeComponent":[{"__symbolic":"method"}],"toggleClass":[{"__symbolic":"method"}],"mousedown":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":150,"character":3},"arguments":["mousedown",["$event"]]}]}],"dragstart":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":155,"character":3},"arguments":["dragstart",["$event"]]}]}],"dragend":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":162,"character":3},"arguments":["dragend",["$event"]]}]}],"click":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":169,"character":3},"arguments":["click",["$event"]]}]}],"mouseover":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":176,"character":3},"arguments":["mouseover",["$event"]]}]}],"mouseout":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":183,"character":3},"arguments":["mouseout",["$event"]]}]}]}},"FcNodeComponent":{"__symbolic":"class","members":{"callbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":194,"character":3}}]}],"userNodeCallbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":197,"character":3}}]}],"node":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":200,"character":3}}]}],"selected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":203,"character":3}}]}],"edit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":206,"character":3}}]}],"underMouse":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":209,"character":3}}]}],"mouseOverConnector":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":212,"character":3}}]}],"modelservice":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":215,"character":3}}]}],"dragging":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":218,"character":3}}]}],"ngOnInit":[{"__symbolic":"method"}]}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"validateModel":[{"__symbolic":"method"}],"validateNodes":[{"__symbolic":"method"}],"validateNode":[{"__symbolic":"method"}],"_validateEdges":[{"__symbolic":"method"}],"validateEdges":[{"__symbolic":"method"}],"_validateEdge":[{"__symbolic":"method"}],"validateEdge":[{"__symbolic":"method"}],"validateConnector":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"getEdgeDAttribute":[{"__symbolic":"method"}],"getEdgeCenter":[{"__symbolic":"method"}],"computeEdgeTangentOffset":[{"__symbolic":"method"}],"computeEdgeSourceTangent":[{"__symbolic":"method"}],"computeEdgeDestinationTangent":[{"__symbolic":"method"}]}},"ɵd":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"FcNodeComponent"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"fc-default-node","template":"\n
\n
\n

{{ node.name }}

\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n ×\n
\n\n","styles":[":host .fc-node-overlay{position:absolute;pointer-events:none;left:0;top:0;right:0;bottom:0;background-color:#000;opacity:0}:host :host-context(.fc-hover) .fc-node-overlay{opacity:.25;transition:opacity .2s}:host :host-context(.fc-selected) .fc-node-overlay{opacity:.25}:host .innerNode{display:flex;justify-content:center;align-items:center;min-width:100px;border-radius:5px;background-color:#f15b26;color:#fff;font-size:16px;pointer-events:none}:host .innerNode p{padding:0 15px;text-align:center}"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":3,"character":1},"arguments":[{"selector":"[fc-magnet]"}]}],"members":{"callbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":9,"character":3}}]}],"connector":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":12,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":15,"character":44,"context":{"typeName":"HTMLElement"},"module":"./lib/magnet.directive"}]}]}],"ngOnInit":[{"__symbolic":"method"}],"dragover":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":23,"character":3},"arguments":["dragover",["$event"]]}]}],"dragleave":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":28,"character":3},"arguments":["dragleave",["$event"]]}]}],"drop":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":33,"character":3},"arguments":["drop",["$event"]]}]}],"dragend":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":38,"character":3},"arguments":["dragend",["$event"]]}]}]}},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":4,"character":1},"arguments":[{"selector":"[fc-connector]"}]}],"members":{"callbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":3}}]}],"modelservice":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"connector":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"mouseOverConnector":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":19,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":22,"character":44,"context":{"typeName":"HTMLElement"},"module":"./lib/connector.directive"}]}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"updateConnectorClass":[{"__symbolic":"method"}],"dragover":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":59,"character":3},"arguments":["dragover",["$event"]]}]}],"drop":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":67,"character":3},"arguments":["drop",["$event"]]}]}],"dragend":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":74,"character":3},"arguments":["dragend",["$event"]]}]}],"dragstart":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":81,"character":3},"arguments":["dragstart",["$event"]]}]}],"mouseenter":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":88,"character":3},"arguments":["mouseenter",["$event"]]}]}],"mouseleave":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":95,"character":3},"arguments":["mouseleave",["$event"]]}]}]}}},"origins":{"NgxFlowchartComponent":"./lib/ngx-flowchart.component","NgxFlowchartModule":"./lib/ngx-flowchart.module","FC_NODE_COMPONENT_CONFIG":"./lib/ngx-flowchart.models","FcNodeComponentConfig":"./lib/ngx-flowchart.models","FlowchartConstants":"./lib/ngx-flowchart.models","FcCoords":"./lib/ngx-flowchart.models","FcRectBox":"./lib/ngx-flowchart.models","FcConnector":"./lib/ngx-flowchart.models","FcNode":"./lib/ngx-flowchart.models","FcEdge":"./lib/ngx-flowchart.models","FcItemInfo":"./lib/ngx-flowchart.models","FcModel":"./lib/ngx-flowchart.models","UserCallbacks":"./lib/ngx-flowchart.models","UserNodeCallbacks":"./lib/ngx-flowchart.models","FcCallbacks":"./lib/ngx-flowchart.models","FcAdjacentList":"./lib/ngx-flowchart.models","ModelvalidationError":"./lib/ngx-flowchart.models","fcTopSort":"./lib/ngx-flowchart.models","ɵa":"./lib/node.component","FcNodeComponent":"./lib/node.component","ɵb":"./lib/modelvalidation.service","ɵc":"./lib/edge-drawing.service","ɵd":"./lib/default-node.component","ɵe":"./lib/magnet.directive","ɵf":"./lib/connector.directive"},"importAs":"ngx-flowchart"} \ No newline at end of file +{"__symbolic":"module","version":4,"metadata":{"NgxFlowchartComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":25,"character":1},"arguments":[{"selector":"fc-canvas","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":29,"character":19},"member":"OnPush"},"template":"
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n {{edgeDraggingService.edgeDragging.dragLabel}}\n
\n
\n \n
\n
\n \n
\n
\n ×\n
\n {{edge.label}}\n
\n
\n \n\n","styles":[":host{display:block;position:relative;width:100%;height:100%;background-size:25px 25px;background-image:linear-gradient(to right,rgba(0,0,0,.1) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.1) 1px,transparent 1px);background-color:transparent;min-width:100%;min-height:100%;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host .fc-canvas-container{display:block;position:relative;width:100%;height:100%}:host .fc-canvas-container svg.fc-canvas-svg{display:block;position:relative;width:100%;height:100%}:host .fc-edge{stroke:gray;stroke-width:4;transition:stroke-width .2s;fill:transparent}:host .fc-edge.fc-hover{stroke:gray;stroke-width:6;fill:transparent}:host .fc-edge.fc-selected{stroke:red;stroke-width:4;fill:transparent}:host .fc-edge.fc-active{-webkit-animation:3s linear infinite dash;animation:3s linear infinite dash;stroke-dasharray:20}:host .fc-edge.fc-dragging{pointer-events:none}:host .fc-arrow-marker polygon{stroke:gray;fill:gray}:host .fc-arrow-marker-selected polygon{stroke:red;fill:red}:host .edge-endpoint{fill:gray}:host .fc-noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host .fc-edge-label{position:absolute;opacity:.8;transition:transform .2s;transform-origin:bottom left;margin:0 auto}:host .fc-edge-label .fc-edge-label-text{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;text-align:center;font-size:16px}:host .fc-edge-label .fc-edge-label-text span{cursor:default;border:solid #ff3d00;border-radius:10px;color:#ff3d00;background-color:#fff;padding:3px 5px}:host .fc-edge-label .fc-nodeedit{top:-30px;right:14px}:host .fc-edge-label .fc-nodedelete{top:-30px;right:-13px}:host .fc-edge-label.fc-hover{transform:scale(1.25)}:host .fc-edge-label.fc-edit .fc-edge-label-text span,:host .fc-edge-label.fc-selected .fc-edge-label-text span{border:solid red;color:#fff;font-weight:600;background-color:red}:host .fc-select-rectangle{border:2px dashed #5262ff;position:absolute;background:rgba(20,125,255,.1);z-index:2}@-webkit-keyframes dash{from{stroke-dashoffset:500}}@keyframes dash{from{stroke-dashoffset:500}}:host ::ng-deep .fc-nodeedit{display:none;font-size:15px}:host ::ng-deep .fc-nodedelete{display:none;font-size:18px}:host ::ng-deep .fc-edit .fc-nodedelete,:host ::ng-deep .fc-edit .fc-nodeedit{display:block;position:absolute;border:2px solid #eee;border-radius:50%;font-weight:600;line-height:20px;height:20px;padding-top:2px;width:22px;background:#494949;color:#fff;text-align:center;vertical-align:bottom;cursor:pointer}:host ::ng-deep .fc-edit .fc-nodeedit{top:-24px;right:16px}:host ::ng-deep .fc-edit .fc-nodedelete{top:-24px;right:-13px}"]}]}],"members":{"canvasClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":33,"character":3},"arguments":["attr.class"]}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":3}}]}],"selectedObjects":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"edgeStyle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":44,"character":3}}]}],"userCallbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":47,"character":3}}]}],"automaticResize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"dragAnimation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":3}}]}],"nodeWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":56,"character":3}}]}],"nodeHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":59,"character":3}}]}],"dropTargetId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":62,"character":3}}]}],"modelChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":65,"character":3}}]}],"fitModelSizeByDefault":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":102,"character":45,"context":{"typeName":"HTMLElement"},"module":"./lib/ngx-flowchart.component"}]},{"__symbolic":"reference","module":"@angular/core","name":"IterableDiffers","line":103,"character":31},{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":106,"character":26},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":107,"character":28}]}],"ngOnInit":[{"__symbolic":"method"}],"ngDoCheck":[{"__symbolic":"method"}],"getEdgeDAttribute":[{"__symbolic":"method"}],"adjustCanvasSize":[{"__symbolic":"method"}],"canvasClick":[{"__symbolic":"method"}],"edgeMouseDown":[{"__symbolic":"method"}],"edgeClick":[{"__symbolic":"method"}],"edgeRemove":[{"__symbolic":"method"}],"edgeEdit":[{"__symbolic":"method"}],"edgeDoubleClick":[{"__symbolic":"method"}],"edgeMouseOver":[{"__symbolic":"method"}],"edgeMouseEnter":[{"__symbolic":"method"}],"edgeMouseLeave":[{"__symbolic":"method"}],"dragover":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":282,"character":3},"arguments":["dragover",["$event"]]}]}],"drop":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":288,"character":3},"arguments":["drop",["$event"]]}]}],"mousedown":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":299,"character":3},"arguments":["mousedown",["$event"]]}]}],"mousemove":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":304,"character":3},"arguments":["mousemove",["$event"]]}]}],"mouseup":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":309,"character":3},"arguments":["mouseup",["$event"]]}]}]}},"NgxFlowchartModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{"entryComponents":[{"__symbolic":"reference","name":"ɵd"}],"declarations":[{"__symbolic":"reference","name":"NgxFlowchartComponent"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ɵd"}],"providers":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"},{"provide":{"__symbolic":"reference","name":"FC_NODE_COMPONENT_CONFIG"},"useValue":{"nodeComponentType":{"__symbolic":"reference","name":"ɵd"}}}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":31,"character":4}],"exports":[{"__symbolic":"reference","name":"NgxFlowchartComponent"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵd"}]}]}],"members":{}},"FC_NODE_COMPONENT_CONFIG":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":4,"character":44},"arguments":["fc-node.component.config"]},"FcNodeComponentConfig":{"__symbolic":"interface"},"FlowchartConstants":{"htmlPrefix":"fc","leftConnectorType":"leftConnector","rightConnectorType":"rightConnector","curvedStyle":"curved","lineStyle":"line","dragAnimationRepaint":"repaint","dragAnimationShadow":"shadow","canvasClass":"fc-canvas","selectedClass":"fc-selected","editClass":"fc-edit","activeClass":"fc-active","hoverClass":"fc-hover","draggingClass":"fc-dragging","edgeClass":"fc-edge","edgeLabelClass":"fc-edge-label","connectorClass":"fc-connector","magnetClass":"fc-magnet","nodeClass":"fc-node","nodeOverlayClass":"fc-node-overlay","leftConnectorClass":"fc-leftConnectors","rightConnectorClass":"fc-rightConnectors","canvasResizeThreshold":200,"canvasResizeStep":200},"FcCoords":{"__symbolic":"interface"},"FcRectBox":{"__symbolic":"interface"},"FcConnector":{"__symbolic":"interface"},"FcNode":{"__symbolic":"interface"},"FcEdge":{"__symbolic":"interface"},"FcItemInfo":{"__symbolic":"interface"},"FcModel":{"__symbolic":"interface"},"UserCallbacks":{"__symbolic":"interface"},"UserNodeCallbacks":{"__symbolic":"interface"},"FcCallbacks":{"__symbolic":"interface"},"FcAdjacentList":{"__symbolic":"interface"},"ModelvalidationError":{"__symbolic":"class","extends":{"__symbolic":"error","message":"Reference to non-exported class","line":127,"character":0,"context":{"className":"BaseError"},"module":"./lib/ngx-flowchart.models"},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"}]}]}},"fcTopSort":{"__symbolic":"function"},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":24,"character":1},"arguments":[{"selector":"fc-node","template":"","styles":[":host{position:absolute;z-index:1}:host.fc-dragging{z-index:10}:host ::ng-deep .fc-leftConnectors,:host ::ng-deep .fc-rightConnectors{position:absolute;top:0;height:100%;display:flex;flex-direction:column;z-index:-10}:host ::ng-deep .fc-leftConnectors .fc-magnet,:host ::ng-deep .fc-rightConnectors .fc-magnet{align-items:center}:host ::ng-deep .fc-leftConnectors{left:-20px}:host ::ng-deep .fc-rightConnectors{right:-20px}:host ::ng-deep .fc-magnet{display:flex;flex-grow:1;height:60px;justify-content:center}:host ::ng-deep .fc-connector{width:18px;height:18px;border:10px solid transparent;-moz-background-clip:padding;-webkit-background-clip:padding;background-clip:padding-box;border-radius:50%;background-color:#f7a789;color:#fff;pointer-events:all}:host ::ng-deep .fc-connector.fc-hover{background-color:#000}"]}]}],"members":{"callbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":3}}]}],"userNodeCallbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":34,"character":3}}]}],"node":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":37,"character":3}}]}],"selected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":40,"character":3}}]}],"edit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"underMouse":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":46,"character":3}}]}],"mouseOverConnector":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":49,"character":3}}]}],"modelservice":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":52,"character":3}}]}],"dragging":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"nodeId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":58,"character":3},"arguments":["attr.id"]}]}],"top":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":63,"character":3},"arguments":["style.top"]}]}],"left":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":68,"character":3},"arguments":["style.left"]}]}],"nodeContentContainer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":75,"character":3},"arguments":["nodeContent",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":75,"character":35},"static":true}]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":77,"character":15},"arguments":[{"__symbolic":"reference","name":"FC_NODE_COMPONENT_CONFIG"}]}],null,null],"parameters":[{"__symbolic":"reference","name":"FcNodeComponentConfig"},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":78,"character":45,"context":{"typeName":"HTMLElement"},"module":"./lib/node.component"}]},{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":79,"character":48}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"updateNodeClass":[{"__symbolic":"method"}],"updateNodeComponent":[{"__symbolic":"method"}],"toggleClass":[{"__symbolic":"method"}],"mousedown":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":150,"character":3},"arguments":["mousedown",["$event"]]}]}],"dragstart":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":155,"character":3},"arguments":["dragstart",["$event"]]}]}],"dragend":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":162,"character":3},"arguments":["dragend",["$event"]]}]}],"click":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":169,"character":3},"arguments":["click",["$event"]]}]}],"mouseover":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":176,"character":3},"arguments":["mouseover",["$event"]]}]}],"mouseout":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":183,"character":3},"arguments":["mouseout",["$event"]]}]}]}},"FcNodeComponent":{"__symbolic":"class","members":{"callbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":194,"character":3}}]}],"userNodeCallbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":197,"character":3}}]}],"node":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":200,"character":3}}]}],"selected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":203,"character":3}}]}],"edit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":206,"character":3}}]}],"underMouse":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":209,"character":3}}]}],"mouseOverConnector":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":212,"character":3}}]}],"modelservice":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":215,"character":3}}]}],"dragging":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":218,"character":3}}]}],"ngOnInit":[{"__symbolic":"method"}]}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"validateModel":[{"__symbolic":"method"}],"validateNodes":[{"__symbolic":"method"}],"validateNode":[{"__symbolic":"method"}],"_validateEdges":[{"__symbolic":"method"}],"validateEdges":[{"__symbolic":"method"}],"_validateEdge":[{"__symbolic":"method"}],"validateEdge":[{"__symbolic":"method"}],"validateConnector":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"getEdgeDAttribute":[{"__symbolic":"method"}],"getEdgeCenter":[{"__symbolic":"method"}],"computeEdgeTangentOffset":[{"__symbolic":"method"}],"computeEdgeSourceTangent":[{"__symbolic":"method"}],"computeEdgeDestinationTangent":[{"__symbolic":"method"}]}},"ɵd":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"FcNodeComponent"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"fc-default-node","template":"\n
\n
\n

{{ node.name }}

\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n ×\n
\n\n","styles":[":host .fc-node-overlay{position:absolute;pointer-events:none;left:0;top:0;right:0;bottom:0;background-color:#000;opacity:0}:host :host-context(.fc-hover) .fc-node-overlay{opacity:.25;transition:opacity .2s}:host :host-context(.fc-selected) .fc-node-overlay{opacity:.25}:host .innerNode{display:flex;justify-content:center;align-items:center;min-width:100px;border-radius:5px;background-color:#f15b26;color:#fff;font-size:16px;pointer-events:none}:host .innerNode p{padding:0 15px;text-align:center}"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":3,"character":1},"arguments":[{"selector":"[fc-magnet]"}]}],"members":{"callbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":9,"character":3}}]}],"connector":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":12,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":15,"character":44,"context":{"typeName":"HTMLElement"},"module":"./lib/magnet.directive"}]}]}],"ngOnInit":[{"__symbolic":"method"}],"dragover":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":23,"character":3},"arguments":["dragover",["$event"]]}]}],"dragleave":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":28,"character":3},"arguments":["dragleave",["$event"]]}]}],"drop":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":33,"character":3},"arguments":["drop",["$event"]]}]}],"dragend":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":38,"character":3},"arguments":["dragend",["$event"]]}]}]}},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":4,"character":1},"arguments":[{"selector":"[fc-connector]"}]}],"members":{"callbacks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":3}}]}],"modelservice":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"connector":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"mouseOverConnector":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":19,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":22,"character":44,"context":{"typeName":"HTMLElement"},"module":"./lib/connector.directive"}]}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"updateConnectorClass":[{"__symbolic":"method"}],"dragover":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":59,"character":3},"arguments":["dragover",["$event"]]}]}],"drop":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":67,"character":3},"arguments":["drop",["$event"]]}]}],"dragend":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":74,"character":3},"arguments":["dragend",["$event"]]}]}],"dragstart":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":81,"character":3},"arguments":["dragstart",["$event"]]}]}],"mouseenter":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":88,"character":3},"arguments":["mouseenter",["$event"]]}]}],"mouseleave":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":95,"character":3},"arguments":["mouseleave",["$event"]]}]}]}}},"origins":{"NgxFlowchartComponent":"./lib/ngx-flowchart.component","NgxFlowchartModule":"./lib/ngx-flowchart.module","FC_NODE_COMPONENT_CONFIG":"./lib/ngx-flowchart.models","FcNodeComponentConfig":"./lib/ngx-flowchart.models","FlowchartConstants":"./lib/ngx-flowchart.models","FcCoords":"./lib/ngx-flowchart.models","FcRectBox":"./lib/ngx-flowchart.models","FcConnector":"./lib/ngx-flowchart.models","FcNode":"./lib/ngx-flowchart.models","FcEdge":"./lib/ngx-flowchart.models","FcItemInfo":"./lib/ngx-flowchart.models","FcModel":"./lib/ngx-flowchart.models","UserCallbacks":"./lib/ngx-flowchart.models","UserNodeCallbacks":"./lib/ngx-flowchart.models","FcCallbacks":"./lib/ngx-flowchart.models","FcAdjacentList":"./lib/ngx-flowchart.models","ModelvalidationError":"./lib/ngx-flowchart.models","fcTopSort":"./lib/ngx-flowchart.models","ɵa":"./lib/node.component","FcNodeComponent":"./lib/node.component","ɵb":"./lib/modelvalidation.service","ɵc":"./lib/edge-drawing.service","ɵd":"./lib/default-node.component","ɵe":"./lib/magnet.directive","ɵf":"./lib/connector.directive"},"importAs":"ngx-flowchart"} \ No newline at end of file diff --git a/projects/ngx-flowchart/src/lib/model.service.ts b/projects/ngx-flowchart/src/lib/model.service.ts index 8b572b0..c63780b 100644 --- a/projects/ngx-flowchart/src/lib/model.service.ts +++ b/projects/ngx-flowchart/src/lib/model.service.ts @@ -8,7 +8,7 @@ export class FcModelService { modelValidation: FcModelValidationService; model: FcModel; - cd: ChangeDetectorRef; + private readonly detectChangesSubject: Subject; selectedObjects: any[]; connectorsHtmlElements: HtmlElementMap = {}; @@ -35,7 +35,7 @@ export class FcModelService { constructor(modelValidation: FcModelValidationService, model: FcModel, modelChanged: EventEmitter, - cd: ChangeDetectorRef, + detectChangesSubject: Subject, selectedObjects: any[], dropNode: (event: Event, node: FcNode) => void, createEdge: (event: Event, edge: FcEdge) => Observable, @@ -48,7 +48,7 @@ export class FcModelService { this.modelValidation = modelValidation; this.model = model; this.modelChanged = modelChanged; - this.cd = cd; + this.detectChangesSubject = detectChangesSubject; this.canvasHtmlElement = canvasHtmlElement; this.svgHtmlElement = svgHtmlElement; this.modelValidation.validateModel(this.model); @@ -75,7 +75,7 @@ export class FcModelService { public detectChanges() { setTimeout(() => { - this.cd.detectChanges(); + this.detectChangesSubject.next(); }, 0); } @@ -231,15 +231,6 @@ export class FcModelService { } return this.dragImage; } - - public registerCallbacks(edgeAddedCallback: (edge: FcEdge) => void, - nodeRemovedCallback: (node: FcNode) => void, - edgeRemovedCallback: (edge: FcEdge) => void) { - this.edgeAddedCallback = edgeAddedCallback; - this.nodeRemovedCallback = nodeRemovedCallback; - this.edgeRemovedCallback = edgeRemovedCallback; - } - } interface HtmlElementMap { [id: string]: HTMLElement; } diff --git a/projects/ngx-flowchart/src/lib/ngx-flowchart.component.ts b/projects/ngx-flowchart/src/lib/ngx-flowchart.component.ts index 084bb8d..e54cd90 100644 --- a/projects/ngx-flowchart/src/lib/ngx-flowchart.component.ts +++ b/projects/ngx-flowchart/src/lib/ngx-flowchart.component.ts @@ -20,6 +20,8 @@ import { FcEdgeDraggingService } from './edge-dragging.service'; import { FcMouseOverService } from './mouseover.service'; import { FcRectangleSelectService } from './rectangleselect.service'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; +import { Subject } from 'rxjs'; +import { debounceTime } from 'rxjs/operators'; @Component({ selector: 'fc-canvas', @@ -96,6 +98,8 @@ export class NgxFlowchartComponent implements OnInit, DoCheck { return item; }); + private readonly detectChangesSubject = new Subject(); + constructor(private elementRef: ElementRef, private differs: IterableDiffers, private modelValidation: FcModelValidationService, @@ -104,6 +108,9 @@ export class NgxFlowchartComponent implements OnInit, DoCheck { private zone: NgZone) { this.arrowDefId = 'arrow-' + Math.random(); this.arrowDefIdSelected = this.arrowDefId + '-selected'; + this.detectChangesSubject + .pipe(debounceTime(50)) + .subscribe(() => this.cd.detectChanges()); } ngOnInit() { @@ -127,7 +134,8 @@ export class NgxFlowchartComponent implements OnInit, DoCheck { const element = $(this.elementRef.nativeElement); - this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, this.cd, this.selectedObjects, + this.modelService = new FcModelService(this.modelValidation, this.model, this.modelChanged, + this.detectChangesSubject, this.selectedObjects, this.userCallbacks.dropNode, this.userCallbacks.createEdge, this.userCallbacks.edgeAdded, this.userCallbacks.nodeRemoved, this.userCallbacks.edgeRemoved, element[0], element[0].querySelector('svg')); @@ -197,7 +205,7 @@ export class NgxFlowchartComponent implements OnInit, DoCheck { this.adjustCanvasSize(this.fitModelSizeByDefault); } if (nodesChanged || edgesChanged) { - this.cd.detectChanges(); + this.detectChangesSubject.next(); } } } diff --git a/projects/ngx-flowchart/src/lib/ngx-flowchart.models.ts b/projects/ngx-flowchart/src/lib/ngx-flowchart.models.ts index 5903d52..c967f35 100644 --- a/projects/ngx-flowchart/src/lib/ngx-flowchart.models.ts +++ b/projects/ngx-flowchart/src/lib/ngx-flowchart.models.ts @@ -131,7 +131,7 @@ class BaseError { } } -BaseError.prototype = new Error(); +Object.defineProperty(BaseError, 'prototype', new Error()); export class ModelvalidationError extends BaseError { constructor(public message: string) {