diff --git a/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js b/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js
index 888199d..aab80bf 100644
--- a/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js
+++ b/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js
@@ -72,10 +72,11 @@
}
function __awaiter(thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
@@ -113,14 +114,15 @@
}
function __values(o) {
- var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
- return {
+ if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}
function __read(o, n) {
@@ -199,6 +201,21 @@
function __importDefault(mod) {
return (mod && mod.__esModule) ? mod : { default: mod };
+ }
+
+ function __classPrivateFieldGet(receiver, privateMap) {
+ if (!privateMap.has(receiver)) {
+ throw new TypeError("attempted to get private field on non-instance");
+ }
+ return privateMap.get(receiver);
+ }
+
+ function __classPrivateFieldSet(receiver, privateMap, value) {
+ if (!privateMap.has(receiver)) {
+ throw new TypeError("attempted to set private field on non-instance");
+ }
+ privateMap.set(receiver, value);
+ return value;
}
var FC_NODE_COMPONENT_CONFIG = new core.InjectionToken('fc-node.component.config');
@@ -1965,7 +1982,7 @@
selector: 'fc-canvas',
template: "
\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
\n",
changeDetection: core.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;-webkit-transition:stroke-width .2s;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;-webkit-transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s;-webkit-transform-origin:bottom left;transform-origin:bottom left;margin:0 auto}:host .fc-edge-label .fc-edge-label-text{position:absolute;-webkit-transform:translate(-50%,-50%);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{-webkit-transform:scale(1.25);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}"]
+ 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}"]
}),
__metadata("design:paramtypes", [core.ElementRef,
core.IterableDiffers,
@@ -2430,7 +2447,7 @@
core.Component({
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:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;z-index:-10}:host ::ng-deep .fc-leftConnectors .fc-magnet,:host ::ng-deep .fc-rightConnectors .fc-magnet{-webkit-box-align:center;align-items:center}:host ::ng-deep .fc-leftConnectors{left:-20px}:host ::ng-deep .fc-rightConnectors{right:-20px}:host ::ng-deep .fc-magnet{display:-webkit-box;display:flex;-webkit-box-flex:1;flex-grow:1;height:60px;-webkit-box-pack:center;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}"]
+ 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}"]
}),
__param(0, core.Inject(FC_NODE_COMPONENT_CONFIG)),
__metadata("design:paramtypes", [Object, core.ElementRef,
@@ -2516,7 +2533,7 @@
core.Component({
selector: 'fc-default-node',
template: "\n
\n
\n
{{ node.name }}
\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;-webkit-transition:opacity .2s;transition:opacity .2s}:host :host-context(.fc-selected) .fc-node-overlay{opacity:.25}:host .innerNode{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align: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}"]
+ 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}"]
}),
__metadata("design:paramtypes", [])
], DefaultFcNodeComponent);
diff --git a/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js.map b/dist/ngx-flowchart/bundles/ngx-flowchart.umd.js.map
index 492935d..c075f7c 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 FcNodeRectInfo {\n width(): number;\n height(): number;\n top(): number;\n left(): number;\n right(): number;\n bottom(): number;\n}\n\nexport interface FcConnectorRectInfo {\n type: string;\n width: number;\n height: number;\n nodeRectInfo: FcNodeRectInfo;\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: Event | any, node: FcNode) => void;\n nodeDragend: (event: Event | any) => void;\n edgeDragstart: (event: Event | any, connector: FcConnector) => void;\n edgeDragend: (event: Event | any) => void;\n edgeDrop: (event: Event | any, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: Event | any, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: Event | any, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: Event | any) => 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 {\n FcConnector,\n FcConnectorRectInfo,\n FcCoords,\n FcEdge,\n FcItemInfo,\n FcModel,\n FcNode,\n FcRectBox,\n FlowchartConstants\n} from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { 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 connectorsRectInfos: ConnectorRectInfoMap = {};\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\ninterface ConnectorRectInfoMap { [id: string]: FcConnectorRectInfo; }\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 getConnectorRectInfo(connectorId: string): FcConnectorRectInfo {\n return this.modelService.connectorsRectInfos[connectorId];\n }\n\n public setConnectorRectInfo(connectorId: string, connectorRectInfo: FcConnectorRectInfo) {\n this.modelService.connectorsRectInfos[connectorId] = connectorRectInfo;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const connectorRectInfo = this.getConnectorRectInfo(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (connectorRectInfo === null || connectorRectInfo === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n let x = connectorRectInfo.type === FlowchartConstants.leftConnectorType ?\n connectorRectInfo.nodeRectInfo.left() : connectorRectInfo.nodeRectInfo.right();\n let y = connectorRectInfo.nodeRectInfo.top() + connectorRectInfo.nodeRectInfo.height() / 2;\n if (!centered) {\n x -= connectorRectInfo.width / 2;\n y -= connectorRectInfo.height / 2;\n }\n const coords: FcCoords = {\n x: Math.round(x),\n y: Math.round(y)\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 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: Event | any, 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: Event | any = (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 const cloneNode = target.cloneNode(true);\n target.parentNode.insertBefore(cloneNode, target);\n target.style.visibility = 'collapse';\n setTimeout(() => {\n target.parentNode.removeChild(cloneNode);\n target.style.visibility = 'visible';\n }, 0);\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 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 this.draggedElements.forEach((draggedElement) => {\n const cloneNode = draggedElement.cloneNode(true);\n draggedElement.parentNode.insertBefore(cloneNode, draggedElement);\n draggedElement.style.visibility = 'collapse';\n setTimeout(() => {\n draggedElement.parentNode.removeChild(cloneNode);\n draggedElement.style.visibility = 'visible';\n }, 0);\n });\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\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 this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: Event | any): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: Event | any = (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: Event | any) {\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: Event | any) {\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: Event | any, 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: Event | any = (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: Event | any) {\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: Event | any, 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: Event | any) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: Event | any, 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: Event | any) {\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: Event | any, 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: Event | any) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: Event | any) {\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: Event | any) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: Event | any) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: Event | any) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FcConnectorRectInfo, FcNodeRectInfo, 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 nodeRectInfo: FcNodeRectInfo;\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 const connectorRectInfo: FcConnectorRectInfo = {\n type: this.connector.type,\n width: this.elementRef.nativeElement.offsetWidth,\n height: this.elementRef.nativeElement.offsetHeight,\n nodeRectInfo: this.nodeRectInfo\n };\n this.modelservice.connectors.setConnectorRectInfo(this.connector.id, connectorRectInfo);\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: Event | any) {\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: Event | any) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: Event | any) {\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 AfterViewInit,\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, FcNodeRectInfo,\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, AfterViewInit, 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 this.nodeComponent.width = this.elementRef.nativeElement.offsetWidth;\n this.nodeComponent.height = this.elementRef.nativeElement.offsetHeight;\n }\n\n ngAfterViewInit(): void {\n this.nodeComponent.width = this.elementRef.nativeElement.offsetWidth;\n this.nodeComponent.height = this.elementRef.nativeElement.offsetHeight;\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: Event | any) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\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\n@Directive()\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 width: number;\n\n height: number;\n\n nodeRectInfo: FcNodeRectInfo = {\n top: () => {\n return this.node.y;\n },\n\n left: () => {\n return this.node.x;\n },\n\n bottom: () => {\n return this.node.y + this.height;\n },\n\n right: () => {\n return this.node.x + this.width;\n },\n\n width: () => {\n return this.width;\n },\n\n height: () => {\n return this.height;\n }\n };\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","Subject","of","debounceTime","Injectable","EventEmitter","coerceBooleanProperty","ElementRef","IterableDiffers","ChangeDetectorRef","NgZone","HostBinding","Input","Output","HostListener","Component","ChangeDetectionStrategy","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 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\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) : adopt(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 s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") 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 throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\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\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\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 FcNodeRectInfo {\n width(): number;\n height(): number;\n top(): number;\n left(): number;\n right(): number;\n bottom(): number;\n}\n\nexport interface FcConnectorRectInfo {\n type: string;\n width: number;\n height: number;\n nodeRectInfo: FcNodeRectInfo;\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: Event | any, node: FcNode) => void;\n nodeDragend: (event: Event | any) => void;\n edgeDragstart: (event: Event | any, connector: FcConnector) => void;\n edgeDragend: (event: Event | any) => void;\n edgeDrop: (event: Event | any, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: Event | any, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: Event | any, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: Event | any) => 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 {\n FcConnector,\n FcConnectorRectInfo,\n FcCoords,\n FcEdge,\n FcItemInfo,\n FcModel,\n FcNode,\n FcRectBox,\n FlowchartConstants\n} from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { 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 connectorsRectInfos: ConnectorRectInfoMap = {};\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\ninterface ConnectorRectInfoMap { [id: string]: FcConnectorRectInfo; }\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 getConnectorRectInfo(connectorId: string): FcConnectorRectInfo {\n return this.modelService.connectorsRectInfos[connectorId];\n }\n\n public setConnectorRectInfo(connectorId: string, connectorRectInfo: FcConnectorRectInfo) {\n this.modelService.connectorsRectInfos[connectorId] = connectorRectInfo;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const connectorRectInfo = this.getConnectorRectInfo(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (connectorRectInfo === null || connectorRectInfo === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n let x = connectorRectInfo.type === FlowchartConstants.leftConnectorType ?\n connectorRectInfo.nodeRectInfo.left() : connectorRectInfo.nodeRectInfo.right();\n let y = connectorRectInfo.nodeRectInfo.top() + connectorRectInfo.nodeRectInfo.height() / 2;\n if (!centered) {\n x -= connectorRectInfo.width / 2;\n y -= connectorRectInfo.height / 2;\n }\n const coords: FcCoords = {\n x: Math.round(x),\n y: Math.round(y)\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 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: Event | any, 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: Event | any = (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 const cloneNode = target.cloneNode(true);\n target.parentNode.insertBefore(cloneNode, target);\n target.style.visibility = 'collapse';\n setTimeout(() => {\n target.parentNode.removeChild(cloneNode);\n target.style.visibility = 'visible';\n }, 0);\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 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 this.draggedElements.forEach((draggedElement) => {\n const cloneNode = draggedElement.cloneNode(true);\n draggedElement.parentNode.insertBefore(cloneNode, draggedElement);\n draggedElement.style.visibility = 'collapse';\n setTimeout(() => {\n draggedElement.parentNode.removeChild(cloneNode);\n draggedElement.style.visibility = 'visible';\n }, 0);\n });\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\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 this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: Event | any): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: Event | any = (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: Event | any) {\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: Event | any) {\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: Event | any, 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: Event | any = (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: Event | any) {\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: Event | any, 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: Event | any) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: Event | any, 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: Event | any) {\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: Event | any, 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: Event | any) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: Event | any) {\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: Event | any) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: Event | any) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: Event | any) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FcConnectorRectInfo, FcNodeRectInfo, 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 nodeRectInfo: FcNodeRectInfo;\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 const connectorRectInfo: FcConnectorRectInfo = {\n type: this.connector.type,\n width: this.elementRef.nativeElement.offsetWidth,\n height: this.elementRef.nativeElement.offsetHeight,\n nodeRectInfo: this.nodeRectInfo\n };\n this.modelservice.connectors.setConnectorRectInfo(this.connector.id, connectorRectInfo);\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: Event | any) {\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: Event | any) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: Event | any) {\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 AfterViewInit,\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, FcNodeRectInfo,\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, AfterViewInit, 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 this.nodeComponent.width = this.elementRef.nativeElement.offsetWidth;\n this.nodeComponent.height = this.elementRef.nativeElement.offsetHeight;\n }\n\n ngAfterViewInit(): void {\n this.nodeComponent.width = this.elementRef.nativeElement.offsetWidth;\n this.nodeComponent.height = this.elementRef.nativeElement.offsetHeight;\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: Event | any) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\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\n@Directive()\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 width: number;\n\n height: number;\n\n nodeRectInfo: FcNodeRectInfo = {\n top: () => {\n return this.node.y;\n },\n\n left: () => {\n return this.node.x;\n },\n\n bottom: () => {\n return this.node.y + this.height;\n },\n\n right: () => {\n return this.node.x + this.width;\n },\n\n width: () => {\n return this.width;\n },\n\n height: () => {\n return this.height;\n }\n };\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","Subject","of","debounceTime","Injectable","EventEmitter","coerceBooleanProperty","ElementRef","IterableDiffers","ChangeDetectorRef","NgZone","HostBinding","Input","Output","HostListener","Component","ChangeDetectionStrategy","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 de7166c..ba53d88 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 d(e,t){function n(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return(a=Object.assign||function(e){for(var t,n=1,o=arguments.length;n=0;d--)(i=e[d])&&(s=(r<3?i(s):r>3?i(t,n,s):i(t,n))||s);return r>3&&s&&Object.defineProperty(t,n,s),s}function c(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function g(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}var p=new t.InjectionToken("fc-node.component.config"),h={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},u=function(){Error.apply(this,arguments)};Object.defineProperty(u,"prototype",new Error);var f=function(e){function t(t){var n=e.call(this)||this;return n.message=t,n}return d(t,e),t}(u);function v(e){var t,n,o,i,r={};e.nodes.forEach((function(e){r[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];r[n.id].outgoing.push(o.id),r[o.id].incoming++}));var s=[],d=[];try{for(var a=g(Object.keys(r)),l=a.next();!l.done;l=a.next()){var c=l.value;0===r[c].incoming&&d.push(c)}}catch(e){t={error:e}}finally{try{l&&!l.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}for(;0!==d.length;){for(var p=d.pop(),h=0;h=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 i=g(this.model.nodes),r=i.next();!r.done;r=i.next()){var s=r.value,d=this.nodes.getHtmlElement(s.id).getBoundingClientRect();if(e>=d.left&&e<=d.right&&t>=d.top&&t<=d.bottom)return s}}catch(e){n={error:e}}finally{try{r&&!r.done&&(o=i.return)&&o.call(i)}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 i=o.left+o.width/2,r=o.top+o.height/2;t.inRectBox(i,r,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 i=t.edges.sourceCoord(o),r=t.edges.destCoord(o),s=(i.x+r.x)/2+n.left,d=(i.y+r.y)/2+n.top;t.inRectBox(s,d,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}(),y=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}(),b=function(e){function t(t){return e.call(this,t)||this}return d(t,e),t.prototype.getConnector=function(e){var t,n,o,i,r=this.modelService.model;try{for(var s=g(r.nodes),d=s.next();!d.done;d=s.next()){var a=d.value;try{for(var l=(o=void 0,g(a.connectors)),c=l.next();!c.done;c=l.next()){var p=c.value;if(p.id===e)return p}}catch(e){o={error:e}}finally{try{c&&!c.done&&(i=l.return)&&i.call(l)}finally{if(o)throw o.error}}}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}},t.prototype.getConnectorRectInfo=function(e){return this.modelService.connectorsRectInfos[e]},t.prototype.setConnectorRectInfo=function(e,t){this.modelService.connectorsRectInfos[e]=t,this.modelService.detectChanges()},t.prototype._getCoords=function(e,t){var n=this.getConnectorRectInfo(e),o=this.modelService.canvasHtmlElement;if(null==n||null===o)return{x:0,y:0};var i=n.type===h.leftConnectorType?n.nodeRectInfo.left():n.nodeRectInfo.right(),r=n.nodeRectInfo.top()+n.nodeRectInfo.height()/2;return t||(i-=n.width/2,r-=n.height/2),{x:Math.round(i),y:Math.round(r)}},t.prototype.getCoords=function(e){return this._getCoords(e,!1)},t.prototype.getCenteredCoord=function(e){return this._getCoords(e,!0)},t}(y),C=function(e){function t(t){return e.call(this,t)||this}return d(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),i=0;i-1)return s}}catch(e){t={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}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}(y),S=function(e){function t(t){return e.call(this,t)||this}return d(t,e),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 i=this;this.modelService.modelValidation.validateConnector(t),this.modelService.modelValidation.validateConnector(n);var r={};r.source=t.id,r.destination=n.id,r.label=o;var s=this.modelService.model;this.modelService.modelValidation.validateEdges(s.edges.concat([r]),s.nodes),this.modelService.createEdge(e,r).subscribe((function(e){s.edges.push(e),i.modelService.notifyModelChanged(),i.modelService.edgeAddedCallback(e)}))},t}(y),D=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 f("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 f("Id not unique.");o.push(e.id)}))})),e},e.prototype.validateNode=function(e){var t=this;if(void 0===e.id)throw new f("Id not valid.");if("string"!=typeof e.name)throw new f("Name not valid.");if("number"!=typeof e.x||e.x<0||Math.round(e.x)!==e.x)throw new f("Coordinates not valid.");if("number"!=typeof e.y||e.y<0||Math.round(e.y)!==e.y)throw new f("Coordinates not valid.");if(!Array.isArray(e.connectors))throw new f("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 f("Duplicated edge.")}))})),null===v({nodes:t,edges:e}))throw new f("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 f("Source not valid.");if(void 0===e.destination)throw new f("Destination not valid.");if(e.source===e.destination)throw new f("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 f("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 f("Destination not valid.");if(n===o)throw new f("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 f("Id not valid.");if(void 0===e.type||null===e.type||"string"!=typeof e.type)throw new f("Type not valid.");return e},e=l([t.Injectable(),c("design:paramtypes",[])],e)}(),E={dropElement:null},w=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"),R=$(this.draggedElements[x]).children()[0];I.children()[0].style.backgroundColor=R.style.backgroundColor,this.nodeDraggingScope.shadowElements.push(I),this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[x][0])}if(b.dataTransfer.setData("text","Just to support firefox"),b.dataTransfer.setDragImage)b.dataTransfer.setDragImage(this.modelService.getDragImage(),0,0);else if(this.draggedElements.forEach((function(e){var t=e.cloneNode(!0);e.parentNode.insertBefore(t,e),e.style.visibility="collapse",setTimeout((function(){e.parentNode.removeChild(t),e.style.visibility="visible"}),0)})),this.dragAnimation===h.dragAnimationShadow){for(x=0;x\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\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;-webkit-transition:stroke-width .2s;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;-webkit-transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s;-webkit-transform-origin:bottom left;transform-origin:bottom left;margin:0 auto}:host .fc-edge-label .fc-edge-label-text{position:absolute;-webkit-transform:translate(-50%,-50%);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{-webkit-transform:scale(1.25);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}"]}),c("design:paramtypes",[t.ElementRef,t.IterableDiffers,D,x,t.ChangeDetectorRef,t.NgZone])],e)}(),P=function(){function e(e){this.elementRef=e}return e.prototype.ngOnInit=function(){$(this.elementRef.nativeElement).addClass(h.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.ctorParameters=function(){return[{type:t.ElementRef}]},l([t.Input(),c("design:type",Object)],e.prototype,"callbacks",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"connector",void 0),l([t.HostListener("dragover",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragover",null),l([t.HostListener("dragleave",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragleave",null),l([t.HostListener("drop",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"drop",null),l([t.HostListener("dragend",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragend",null),e=l([t.Directive({selector:"[fc-magnet]"}),c("design:paramtypes",[t.ElementRef])],e)}(),H=function(){function e(e){this.elementRef=e}return e.prototype.ngOnInit=function(){var e=$(this.elementRef.nativeElement);e.addClass(h.connectorClass),this.modelservice.isEditable()&&(e.attr("draggable","true"),this.updateConnectorClass());var t={type:this.connector.type,width:this.elementRef.nativeElement.offsetWidth,height:this.elementRef.nativeElement.offsetHeight,nodeRectInfo:this.nodeRectInfo};this.modelservice.connectors.setConnectorRectInfo(this.connector.id,t)},e.prototype.ngOnChanges=function(e){var t,n,o=!1;try{for(var i=g(Object.keys(e)),r=i.next();!r.done;r=i.next()){var s=r.value,d=e[s];d.firstChange||d.currentValue===d.previousValue||"mouseOverConnector"===s&&(o=!0)}}catch(e){t={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}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(h.hoverClass):e.removeClass(h.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.ctorParameters=function(){return[{type:t.ElementRef}]},l([t.Input(),c("design:type",Object)],e.prototype,"callbacks",void 0),l([t.Input(),c("design:type",m)],e.prototype,"modelservice",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"connector",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"nodeRectInfo",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"mouseOverConnector",void 0),l([t.HostListener("dragover",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragover",null),l([t.HostListener("drop",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"drop",null),l([t.HostListener("dragend",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragend",null),l([t.HostListener("dragstart",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragstart",null),l([t.HostListener("mouseenter",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"mouseenter",null),l([t.HostListener("mouseleave",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"mouseleave",null),e=l([t.Directive({selector:"[fc-connector]"}),c("design:paramtypes",[t.ElementRef])],e)}(),F=function(){function e(e,t,n){this.nodeComponentConfig=e,this.elementRef=t,this.componentFactoryResolver=n}var n,o;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(h.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(),this.nodeComponent.width=this.elementRef.nativeElement.offsetWidth,this.nodeComponent.height=this.elementRef.nativeElement.offsetHeight},e.prototype.ngAfterViewInit=function(){this.nodeComponent.width=this.elementRef.nativeElement.offsetWidth,this.nodeComponent.height=this.elementRef.nativeElement.offsetHeight},e.prototype.ngOnChanges=function(e){var t,n,o=!1;try{for(var i=g(Object.keys(e)),r=i.next();!r.done;r=i.next()){var s=r.value,d=e[s];d.firstChange||d.currentValue===d.previousValue||["selected","edit","underMouse","mouseOverConnector","dragging"].includes(s)&&(o=!0)}}catch(e){t={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}o&&(this.updateNodeClass(),this.updateNodeComponent())},e.prototype.updateNodeClass=function(){var e=$(this.elementRef.nativeElement);this.toggleClass(e,h.selectedClass,this.selected),this.toggleClass(e,h.editClass,this.edit),this.toggleClass(e,h.hoverClass,this.underMouse),this.toggleClass(e,h.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.ctorParameters=function(){return[{type:void 0,decorators:[{type:t.Inject,args:[p]}]},{type:t.ElementRef},{type:t.ComponentFactoryResolver}]},l([t.Input(),c("design:type",Object)],e.prototype,"callbacks",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"userNodeCallbacks",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"node",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"selected",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"edit",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"underMouse",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"mouseOverConnector",void 0),l([t.Input(),c("design:type",m)],e.prototype,"modelservice",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"dragging",void 0),l([t.HostBinding("attr.id"),c("design:type",String),c("design:paramtypes",[])],e.prototype,"nodeId",null),l([t.HostBinding("style.top"),c("design:type",String),c("design:paramtypes",[])],e.prototype,"top",null),l([t.HostBinding("style.left"),c("design:type",String),c("design:paramtypes",[])],e.prototype,"left",null),l([t.ViewChild("nodeContent",{read:t.ViewContainerRef,static:!0}),c("design:type",t.ViewContainerRef)],e.prototype,"nodeContentContainer",void 0),l([t.HostListener("mousedown",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"mousedown",null),l([t.HostListener("dragstart",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragstart",null),l([t.HostListener("dragend",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragend",null),l([t.HostListener("click",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"click",null),l([t.HostListener("mouseover",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"mouseover",null),l([t.HostListener("mouseout",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"mouseout",null),e=l([t.Component({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:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;z-index:-10}:host ::ng-deep .fc-leftConnectors .fc-magnet,:host ::ng-deep .fc-rightConnectors .fc-magnet{-webkit-box-align:center;align-items:center}:host ::ng-deep .fc-leftConnectors{left:-20px}:host ::ng-deep .fc-rightConnectors{right:-20px}:host ::ng-deep .fc-magnet{display:-webkit-box;display:flex;-webkit-box-flex:1;flex-grow:1;height:60px;-webkit-box-pack:center;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}"]}),(n=0,o=t.Inject(p),function(e,t){o(e,t,n)}),c("design:paramtypes",[Object,t.ElementRef,t.ComponentFactoryResolver])],e)}(),T=function(){function e(){var e=this;this.flowchartConstants=h,this.nodeRectInfo={top:function(){return e.node.y},left:function(){return e.node.x},bottom:function(){return e.node.y+e.height},right:function(){return e.node.x+e.width},width:function(){return e.width},height:function(){return e.height}}}return e.prototype.ngOnInit=function(){},l([t.Input(),c("design:type",Object)],e.prototype,"callbacks",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"userNodeCallbacks",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"node",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"selected",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"edit",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"underMouse",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"mouseOverConnector",void 0),l([t.Input(),c("design:type",m)],e.prototype,"modelservice",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"dragging",void 0),e=l([t.Directive()],e)}(),L=function(e){function n(){return e.call(this)||this}return d(n,e),n=l([t.Component({selector:"fc-default-node",template:'\n
\n
\n
{{ node.name }}
\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;-webkit-transition:opacity .2s;transition:opacity .2s}:host :host-context(.fc-selected) .fc-node-overlay{opacity:.25}:host .innerNode{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align: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}"]}),c("design:paramtypes",[])],n)}(T),B={nodeComponentType:L},z=function(){function e(){}return e=l([t.NgModule({entryComponents:[L],declarations:[N,P,H,F,L],providers:[D,x,{provide:p,useValue:B}],imports:[r.CommonModule],exports:[N,P,H,L]})],e)}();e.DefaultFcNodeComponent=L,e.FC_NODE_COMPONENT_CONFIG=p,e.FcConnectorDirective=H,e.FcMagnetDirective=P,e.FcNodeComponent=T,e.FlowchartConstants=h,e.ModelvalidationError=f,e.NgxFlowchartComponent=N,e.NgxFlowchartModule=z,e.fcTopSort=v,e.ɵ0=B,e.ɵa=F,e.ɵb=D,e.ɵc=x,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 d(e,t){function n(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return(a=Object.assign||function(e){for(var t,n=1,o=arguments.length;n=0;d--)(i=e[d])&&(s=(r<3?i(s):r>3?i(t,n,s):i(t,n))||s);return r>3&&s&&Object.defineProperty(t,n,s),s}function c(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function g(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],o=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&o>=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}var p=new t.InjectionToken("fc-node.component.config"),h={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},u=function(){Error.apply(this,arguments)};Object.defineProperty(u,"prototype",new Error);var f=function(e){function t(t){var n=e.call(this)||this;return n.message=t,n}return d(t,e),t}(u);function v(e){var t,n,o,i,r={};e.nodes.forEach((function(e){r[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];r[n.id].outgoing.push(o.id),r[o.id].incoming++}));var s=[],d=[];try{for(var a=g(Object.keys(r)),l=a.next();!l.done;l=a.next()){var c=l.value;0===r[c].incoming&&d.push(c)}}catch(e){t={error:e}}finally{try{l&&!l.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}for(;0!==d.length;){for(var p=d.pop(),h=0;h=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 i=g(this.model.nodes),r=i.next();!r.done;r=i.next()){var s=r.value,d=this.nodes.getHtmlElement(s.id).getBoundingClientRect();if(e>=d.left&&e<=d.right&&t>=d.top&&t<=d.bottom)return s}}catch(e){n={error:e}}finally{try{r&&!r.done&&(o=i.return)&&o.call(i)}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 i=o.left+o.width/2,r=o.top+o.height/2;t.inRectBox(i,r,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 i=t.edges.sourceCoord(o),r=t.edges.destCoord(o),s=(i.x+r.x)/2+n.left,d=(i.y+r.y)/2+n.top;t.inRectBox(s,d,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}(),y=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}(),C=function(e){function t(t){return e.call(this,t)||this}return d(t,e),t.prototype.getConnector=function(e){var t,n,o,i,r=this.modelService.model;try{for(var s=g(r.nodes),d=s.next();!d.done;d=s.next()){var a=d.value;try{for(var l=(o=void 0,g(a.connectors)),c=l.next();!c.done;c=l.next()){var p=c.value;if(p.id===e)return p}}catch(e){o={error:e}}finally{try{c&&!c.done&&(i=l.return)&&i.call(l)}finally{if(o)throw o.error}}}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}},t.prototype.getConnectorRectInfo=function(e){return this.modelService.connectorsRectInfos[e]},t.prototype.setConnectorRectInfo=function(e,t){this.modelService.connectorsRectInfos[e]=t,this.modelService.detectChanges()},t.prototype._getCoords=function(e,t){var n=this.getConnectorRectInfo(e),o=this.modelService.canvasHtmlElement;if(null==n||null===o)return{x:0,y:0};var i=n.type===h.leftConnectorType?n.nodeRectInfo.left():n.nodeRectInfo.right(),r=n.nodeRectInfo.top()+n.nodeRectInfo.height()/2;return t||(i-=n.width/2,r-=n.height/2),{x:Math.round(i),y:Math.round(r)}},t.prototype.getCoords=function(e){return this._getCoords(e,!1)},t.prototype.getCenteredCoord=function(e){return this._getCoords(e,!0)},t}(y),b=function(e){function t(t){return e.call(this,t)||this}return d(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),i=0;i-1)return s}}catch(e){t={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}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}(y),S=function(e){function t(t){return e.call(this,t)||this}return d(t,e),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 i=this;this.modelService.modelValidation.validateConnector(t),this.modelService.modelValidation.validateConnector(n);var r={};r.source=t.id,r.destination=n.id,r.label=o;var s=this.modelService.model;this.modelService.modelValidation.validateEdges(s.edges.concat([r]),s.nodes),this.modelService.createEdge(e,r).subscribe((function(e){s.edges.push(e),i.modelService.notifyModelChanged(),i.modelService.edgeAddedCallback(e)}))},t}(y),D=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 f("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 f("Id not unique.");o.push(e.id)}))})),e},e.prototype.validateNode=function(e){var t=this;if(void 0===e.id)throw new f("Id not valid.");if("string"!=typeof e.name)throw new f("Name not valid.");if("number"!=typeof e.x||e.x<0||Math.round(e.x)!==e.x)throw new f("Coordinates not valid.");if("number"!=typeof e.y||e.y<0||Math.round(e.y)!==e.y)throw new f("Coordinates not valid.");if(!Array.isArray(e.connectors))throw new f("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 f("Duplicated edge.")}))})),null===v({nodes:t,edges:e}))throw new f("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 f("Source not valid.");if(void 0===e.destination)throw new f("Destination not valid.");if(e.source===e.destination)throw new f("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 f("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 f("Destination not valid.");if(n===o)throw new f("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 f("Id not valid.");if(void 0===e.type||null===e.type||"string"!=typeof e.type)throw new f("Type not valid.");return e},e=l([t.Injectable(),c("design:paramtypes",[])],e)}(),E={dropElement:null},w=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"),R=$(this.draggedElements[x]).children()[0];I.children()[0].style.backgroundColor=R.style.backgroundColor,this.nodeDraggingScope.shadowElements.push(I),this.modelService.canvasHtmlElement.appendChild(this.nodeDraggingScope.shadowElements[x][0])}if(C.dataTransfer.setData("text","Just to support firefox"),C.dataTransfer.setDragImage)C.dataTransfer.setDragImage(this.modelService.getDragImage(),0,0);else if(this.draggedElements.forEach((function(e){var t=e.cloneNode(!0);e.parentNode.insertBefore(t,e),e.style.visibility="collapse",setTimeout((function(){e.parentNode.removeChild(t),e.style.visibility="visible"}),0)})),this.dragAnimation===h.dragAnimationShadow){for(x=0;x\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\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}"]}),c("design:paramtypes",[t.ElementRef,t.IterableDiffers,D,x,t.ChangeDetectorRef,t.NgZone])],e)}(),P=function(){function e(e){this.elementRef=e}return e.prototype.ngOnInit=function(){$(this.elementRef.nativeElement).addClass(h.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.ctorParameters=function(){return[{type:t.ElementRef}]},l([t.Input(),c("design:type",Object)],e.prototype,"callbacks",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"connector",void 0),l([t.HostListener("dragover",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragover",null),l([t.HostListener("dragleave",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragleave",null),l([t.HostListener("drop",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"drop",null),l([t.HostListener("dragend",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragend",null),e=l([t.Directive({selector:"[fc-magnet]"}),c("design:paramtypes",[t.ElementRef])],e)}(),H=function(){function e(e){this.elementRef=e}return e.prototype.ngOnInit=function(){var e=$(this.elementRef.nativeElement);e.addClass(h.connectorClass),this.modelservice.isEditable()&&(e.attr("draggable","true"),this.updateConnectorClass());var t={type:this.connector.type,width:this.elementRef.nativeElement.offsetWidth,height:this.elementRef.nativeElement.offsetHeight,nodeRectInfo:this.nodeRectInfo};this.modelservice.connectors.setConnectorRectInfo(this.connector.id,t)},e.prototype.ngOnChanges=function(e){var t,n,o=!1;try{for(var i=g(Object.keys(e)),r=i.next();!r.done;r=i.next()){var s=r.value,d=e[s];d.firstChange||d.currentValue===d.previousValue||"mouseOverConnector"===s&&(o=!0)}}catch(e){t={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}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(h.hoverClass):e.removeClass(h.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.ctorParameters=function(){return[{type:t.ElementRef}]},l([t.Input(),c("design:type",Object)],e.prototype,"callbacks",void 0),l([t.Input(),c("design:type",m)],e.prototype,"modelservice",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"connector",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"nodeRectInfo",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"mouseOverConnector",void 0),l([t.HostListener("dragover",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragover",null),l([t.HostListener("drop",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"drop",null),l([t.HostListener("dragend",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragend",null),l([t.HostListener("dragstart",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragstart",null),l([t.HostListener("mouseenter",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"mouseenter",null),l([t.HostListener("mouseleave",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"mouseleave",null),e=l([t.Directive({selector:"[fc-connector]"}),c("design:paramtypes",[t.ElementRef])],e)}(),F=function(){function e(e,t,n){this.nodeComponentConfig=e,this.elementRef=t,this.componentFactoryResolver=n}var n,o;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(h.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(),this.nodeComponent.width=this.elementRef.nativeElement.offsetWidth,this.nodeComponent.height=this.elementRef.nativeElement.offsetHeight},e.prototype.ngAfterViewInit=function(){this.nodeComponent.width=this.elementRef.nativeElement.offsetWidth,this.nodeComponent.height=this.elementRef.nativeElement.offsetHeight},e.prototype.ngOnChanges=function(e){var t,n,o=!1;try{for(var i=g(Object.keys(e)),r=i.next();!r.done;r=i.next()){var s=r.value,d=e[s];d.firstChange||d.currentValue===d.previousValue||["selected","edit","underMouse","mouseOverConnector","dragging"].includes(s)&&(o=!0)}}catch(e){t={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}o&&(this.updateNodeClass(),this.updateNodeComponent())},e.prototype.updateNodeClass=function(){var e=$(this.elementRef.nativeElement);this.toggleClass(e,h.selectedClass,this.selected),this.toggleClass(e,h.editClass,this.edit),this.toggleClass(e,h.hoverClass,this.underMouse),this.toggleClass(e,h.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.ctorParameters=function(){return[{type:void 0,decorators:[{type:t.Inject,args:[p]}]},{type:t.ElementRef},{type:t.ComponentFactoryResolver}]},l([t.Input(),c("design:type",Object)],e.prototype,"callbacks",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"userNodeCallbacks",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"node",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"selected",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"edit",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"underMouse",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"mouseOverConnector",void 0),l([t.Input(),c("design:type",m)],e.prototype,"modelservice",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"dragging",void 0),l([t.HostBinding("attr.id"),c("design:type",String),c("design:paramtypes",[])],e.prototype,"nodeId",null),l([t.HostBinding("style.top"),c("design:type",String),c("design:paramtypes",[])],e.prototype,"top",null),l([t.HostBinding("style.left"),c("design:type",String),c("design:paramtypes",[])],e.prototype,"left",null),l([t.ViewChild("nodeContent",{read:t.ViewContainerRef,static:!0}),c("design:type",t.ViewContainerRef)],e.prototype,"nodeContentContainer",void 0),l([t.HostListener("mousedown",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"mousedown",null),l([t.HostListener("dragstart",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragstart",null),l([t.HostListener("dragend",["$event"]),c("design:type",Function),c("design:paramtypes",[Object]),c("design:returntype",void 0)],e.prototype,"dragend",null),l([t.HostListener("click",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"click",null),l([t.HostListener("mouseover",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"mouseover",null),l([t.HostListener("mouseout",["$event"]),c("design:type",Function),c("design:paramtypes",[MouseEvent]),c("design:returntype",void 0)],e.prototype,"mouseout",null),e=l([t.Component({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}"]}),(n=0,o=t.Inject(p),function(e,t){o(e,t,n)}),c("design:paramtypes",[Object,t.ElementRef,t.ComponentFactoryResolver])],e)}(),T=function(){function e(){var e=this;this.flowchartConstants=h,this.nodeRectInfo={top:function(){return e.node.y},left:function(){return e.node.x},bottom:function(){return e.node.y+e.height},right:function(){return e.node.x+e.width},width:function(){return e.width},height:function(){return e.height}}}return e.prototype.ngOnInit=function(){},l([t.Input(),c("design:type",Object)],e.prototype,"callbacks",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"userNodeCallbacks",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"node",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"selected",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"edit",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"underMouse",void 0),l([t.Input(),c("design:type",Object)],e.prototype,"mouseOverConnector",void 0),l([t.Input(),c("design:type",m)],e.prototype,"modelservice",void 0),l([t.Input(),c("design:type",Boolean)],e.prototype,"dragging",void 0),e=l([t.Directive()],e)}(),L=function(e){function n(){return e.call(this)||this}return d(n,e),n=l([t.Component({selector:"fc-default-node",template:'\n
\n
\n
{{ node.name }}
\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}"]}),c("design:paramtypes",[])],n)}(T),B={nodeComponentType:L},z=function(){function e(){}return e=l([t.NgModule({entryComponents:[L],declarations:[N,P,H,F,L],providers:[D,x,{provide:p,useValue:B}],imports:[r.CommonModule],exports:[N,P,H,L]})],e)}();e.DefaultFcNodeComponent=L,e.FC_NODE_COMPONENT_CONFIG=p,e.FcConnectorDirective=H,e.FcMagnetDirective=P,e.FcNodeComponent=T,e.FlowchartConstants=h,e.ModelvalidationError=f,e.NgxFlowchartComponent=N,e.NgxFlowchartModule=z,e.fcTopSort=v,e.ɵ0=B,e.ɵa=F,e.ɵb=D,e.ɵc=x,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 98ebe52..07d71fd 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","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__metadata","metadataKey","metadataValue","metadata","__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","message","_this","_super","fcTopSort","graph","adjacentList","nodes","forEach","node","id","incoming","outgoing","edges","edge","sourceNode","filter","connectors","some","connector","source","destinationNode","destination","push","orderedNodes","sourceNodes","_c","keys","_d","pop","splice","hasEdges","_e","_f","FcModelService","modelValidation","model","modelChanged","detectChangesSubject","selectedObjects","dropNode","createEdge","edgeAddedCallback","nodeRemovedCallback","edgeRemovedCallback","canvasHtmlElement","svgHtmlElement","connectorsRectInfos","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","getConnectorRectInfo","setConnectorRectInfo","connectorRectInfo","_getCoords","centered","canvas","type","nodeRectInfo","Math","round","getCoords","getCenteredCoord","getConnectorsByType","_addConnector","validateNode","error","connectorIds","getConnectorIds","handleClicked","ctrlKey","_addNode","validateNodes","map","getNodeByConnectorId","nodeId","setHtmlElement","element","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","offsetWidth","getYCoordinate","offsetHeight","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_1","cloneNode_1","insertBefore","dragOffset","shadowElement","targetInnerNode","children","backgroundColor","draggedElement","display","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","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","ElementRef","IterableDiffers","ChangeDetectorRef","NgZone","HostBinding","Input","Output","HostListener","MouseEvent","Component","selector","template","changeDetection","ChangeDetectionStrategy","OnPush","FcMagnetDirective","addClass","dragleave","Directive","FcConnectorDirective","modelservice","updateConnectorClass","ngOnChanges","changes","updateConnector","propName","change","firstChange","currentValue","previousValue","mouseOverConnector","removeClass","mouseenter","mouseleave","FcNodeContainerComponent","nodeComponentConfig","componentFactoryResolver","paramIndex","decorator","nodeEdit","doubleClick","mouseDown","mouseEnter","mouseLeave","updateNodeClass","nodeContentContainer","clear","componentFactory","resolveComponentFactory","nodeComponentType","componentRef","createComponent","nodeComponent","instance","updateNodeComponent","ngAfterViewInit","updateNode","toggleClass","selected","edit","underMouse","dragging","clazz","set","click","mouseover","mouseout","Inject","args","ComponentFactoryResolver","ViewChild","read","ViewContainerRef","static","FcNodeComponent","DefaultFcNodeComponent","NgxFlowchartModule","NgModule","entryComponents","declarations","providers","provide","useValue","ɵ0$1","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 FcNodeRectInfo {\n width(): number;\n height(): number;\n top(): number;\n left(): number;\n right(): number;\n bottom(): number;\n}\n\nexport interface FcConnectorRectInfo {\n type: string;\n width: number;\n height: number;\n nodeRectInfo: FcNodeRectInfo;\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: Event | any, node: FcNode) => void;\n nodeDragend: (event: Event | any) => void;\n edgeDragstart: (event: Event | any, connector: FcConnector) => void;\n edgeDragend: (event: Event | any) => void;\n edgeDrop: (event: Event | any, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: Event | any, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: Event | any, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: Event | any) => 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 {\n FcConnector,\n FcConnectorRectInfo,\n FcCoords,\n FcEdge,\n FcItemInfo,\n FcModel,\n FcNode,\n FcRectBox,\n FlowchartConstants\n} from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { 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 connectorsRectInfos: ConnectorRectInfoMap = {};\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\ninterface ConnectorRectInfoMap { [id: string]: FcConnectorRectInfo; }\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 getConnectorRectInfo(connectorId: string): FcConnectorRectInfo {\n return this.modelService.connectorsRectInfos[connectorId];\n }\n\n public setConnectorRectInfo(connectorId: string, connectorRectInfo: FcConnectorRectInfo) {\n this.modelService.connectorsRectInfos[connectorId] = connectorRectInfo;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const connectorRectInfo = this.getConnectorRectInfo(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (connectorRectInfo === null || connectorRectInfo === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n let x = connectorRectInfo.type === FlowchartConstants.leftConnectorType ?\n connectorRectInfo.nodeRectInfo.left() : connectorRectInfo.nodeRectInfo.right();\n let y = connectorRectInfo.nodeRectInfo.top() + connectorRectInfo.nodeRectInfo.height() / 2;\n if (!centered) {\n x -= connectorRectInfo.width / 2;\n y -= connectorRectInfo.height / 2;\n }\n const coords: FcCoords = {\n x: Math.round(x),\n y: Math.round(y)\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 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: Event | any, 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: Event | any = (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 const cloneNode = target.cloneNode(true);\n target.parentNode.insertBefore(cloneNode, target);\n target.style.visibility = 'collapse';\n setTimeout(() => {\n target.parentNode.removeChild(cloneNode);\n target.style.visibility = 'visible';\n }, 0);\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 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 this.draggedElements.forEach((draggedElement) => {\n const cloneNode = draggedElement.cloneNode(true);\n draggedElement.parentNode.insertBefore(cloneNode, draggedElement);\n draggedElement.style.visibility = 'collapse';\n setTimeout(() => {\n draggedElement.parentNode.removeChild(cloneNode);\n draggedElement.style.visibility = 'visible';\n }, 0);\n });\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\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 this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: Event | any): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: Event | any = (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: Event | any) {\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: Event | any) {\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: Event | any, 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: Event | any = (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: Event | any) {\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: Event | any, 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: Event | any) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: Event | any, 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: Event | any) {\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: Event | any, 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: Event | any) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: Event | any) {\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: Event | any) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: Event | any) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: Event | any) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FcConnectorRectInfo, FcNodeRectInfo, 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 nodeRectInfo: FcNodeRectInfo;\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 const connectorRectInfo: FcConnectorRectInfo = {\n type: this.connector.type,\n width: this.elementRef.nativeElement.offsetWidth,\n height: this.elementRef.nativeElement.offsetHeight,\n nodeRectInfo: this.nodeRectInfo\n };\n this.modelservice.connectors.setConnectorRectInfo(this.connector.id, connectorRectInfo);\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: Event | any) {\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: Event | any) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: Event | any) {\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 AfterViewInit,\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, FcNodeRectInfo,\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, AfterViewInit, 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 this.nodeComponent.width = this.elementRef.nativeElement.offsetWidth;\n this.nodeComponent.height = this.elementRef.nativeElement.offsetHeight;\n }\n\n ngAfterViewInit(): void {\n this.nodeComponent.width = this.elementRef.nativeElement.offsetWidth;\n this.nodeComponent.height = this.elementRef.nativeElement.offsetHeight;\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: Event | any) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\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\n@Directive()\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 width: number;\n\n height: number;\n\n nodeRectInfo: FcNodeRectInfo = {\n top: () => {\n return this.node.y;\n },\n\n left: () => {\n return this.node.x;\n },\n\n bottom: () => {\n return this.node.y + this.height;\n },\n\n right: () => {\n return this.node.x + this.width;\n },\n\n width: () => {\n return this.width;\n },\n\n height: () => {\n return this.height;\n }\n };\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","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__metadata","metadataKey","metadataValue","metadata","__values","o","Symbol","iterator","m","next","value","done","TypeError","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","message","_this","_super","fcTopSort","graph","adjacentList","nodes","forEach","node","id","incoming","outgoing","edges","edge","sourceNode","filter","connectors","some","connector","source","destinationNode","destination","push","orderedNodes","sourceNodes","_c","keys","_d","pop","splice","hasEdges","_e","_f","FcModelService","modelValidation","model","modelChanged","detectChangesSubject","selectedObjects","dropNode","createEdge","edgeAddedCallback","nodeRemovedCallback","edgeRemovedCallback","canvasHtmlElement","svgHtmlElement","connectorsRectInfos","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","getConnectorRectInfo","setConnectorRectInfo","connectorRectInfo","_getCoords","centered","canvas","type","nodeRectInfo","Math","round","getCoords","getCenteredCoord","getConnectorsByType","_addConnector","validateNode","error","connectorIds","getConnectorIds","handleClicked","ctrlKey","_addNode","validateNodes","map","getNodeByConnectorId","nodeId","setHtmlElement","element","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","offsetWidth","getYCoordinate","offsetHeight","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_1","cloneNode_1","insertBefore","dragOffset","shadowElement","targetInnerNode","children","backgroundColor","draggedElement","display","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","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","ElementRef","IterableDiffers","ChangeDetectorRef","NgZone","HostBinding","Input","Output","HostListener","MouseEvent","Component","selector","template","changeDetection","ChangeDetectionStrategy","OnPush","FcMagnetDirective","addClass","dragleave","Directive","FcConnectorDirective","modelservice","updateConnectorClass","ngOnChanges","changes","updateConnector","propName","change","firstChange","currentValue","previousValue","mouseOverConnector","removeClass","mouseenter","mouseleave","FcNodeContainerComponent","nodeComponentConfig","componentFactoryResolver","paramIndex","decorator","nodeEdit","doubleClick","mouseDown","mouseEnter","mouseLeave","updateNodeClass","nodeContentContainer","clear","componentFactory","resolveComponentFactory","nodeComponentType","componentRef","createComponent","nodeComponent","instance","updateNodeComponent","ngAfterViewInit","updateNode","toggleClass","selected","edit","underMouse","dragging","clazz","set","click","mouseover","mouseout","Inject","args","ComponentFactoryResolver","ViewChild","read","ViewContainerRef","static","FcNodeComponent","DefaultFcNodeComponent","NgxFlowchartModule","NgModule","entryComponents","declarations","providers","provide","useValue","ɵ0$1","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 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\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) : adopt(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 s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") 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 throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\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\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\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 FcNodeRectInfo {\n width(): number;\n height(): number;\n top(): number;\n left(): number;\n right(): number;\n bottom(): number;\n}\n\nexport interface FcConnectorRectInfo {\n type: string;\n width: number;\n height: number;\n nodeRectInfo: FcNodeRectInfo;\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: Event | any, node: FcNode) => void;\n nodeDragend: (event: Event | any) => void;\n edgeDragstart: (event: Event | any, connector: FcConnector) => void;\n edgeDragend: (event: Event | any) => void;\n edgeDrop: (event: Event | any, targetConnector: FcConnector) => boolean;\n edgeDragoverConnector: (event: Event | any, connector: FcConnector) => boolean;\n edgeDragoverMagnet: (event: Event | any, connector: FcConnector) => boolean;\n edgeDragleaveMagnet: (event: Event | any) => 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 {\n FcConnector,\n FcConnectorRectInfo,\n FcCoords,\n FcEdge,\n FcItemInfo,\n FcModel,\n FcNode,\n FcRectBox,\n FlowchartConstants\n} from './ngx-flowchart.models';\nimport { Observable, of, Subject } from 'rxjs';\nimport { 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 connectorsRectInfos: ConnectorRectInfoMap = {};\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\ninterface ConnectorRectInfoMap { [id: string]: FcConnectorRectInfo; }\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 getConnectorRectInfo(connectorId: string): FcConnectorRectInfo {\n return this.modelService.connectorsRectInfos[connectorId];\n }\n\n public setConnectorRectInfo(connectorId: string, connectorRectInfo: FcConnectorRectInfo) {\n this.modelService.connectorsRectInfos[connectorId] = connectorRectInfo;\n this.modelService.detectChanges();\n }\n\n private _getCoords(connectorId: string, centered?: boolean): FcCoords {\n const connectorRectInfo = this.getConnectorRectInfo(connectorId);\n const canvas = this.modelService.canvasHtmlElement;\n if (connectorRectInfo === null || connectorRectInfo === undefined || canvas === null) {\n return {x: 0, y: 0};\n }\n let x = connectorRectInfo.type === FlowchartConstants.leftConnectorType ?\n connectorRectInfo.nodeRectInfo.left() : connectorRectInfo.nodeRectInfo.right();\n let y = connectorRectInfo.nodeRectInfo.top() + connectorRectInfo.nodeRectInfo.height() / 2;\n if (!centered) {\n x -= connectorRectInfo.width / 2;\n y -= connectorRectInfo.height / 2;\n }\n const coords: FcCoords = {\n x: Math.round(x),\n y: Math.round(y)\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 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: Event | any, 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: Event | any = (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 const cloneNode = target.cloneNode(true);\n target.parentNode.insertBefore(cloneNode, target);\n target.style.visibility = 'collapse';\n setTimeout(() => {\n target.parentNode.removeChild(cloneNode);\n target.style.visibility = 'visible';\n }, 0);\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 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 this.draggedElements.forEach((draggedElement) => {\n const cloneNode = draggedElement.cloneNode(true);\n draggedElement.parentNode.insertBefore(cloneNode, draggedElement);\n draggedElement.style.visibility = 'collapse';\n setTimeout(() => {\n draggedElement.parentNode.removeChild(cloneNode);\n draggedElement.style.visibility = 'visible';\n }, 0);\n });\n if (this.dragAnimation === FlowchartConstants.dragAnimationShadow) {\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 this.nodeDraggingScope.shadowDragStarted = true;\n }\n }\n }\n\n public drop(event: Event | any): boolean {\n if (this.modelService.isDropSource()) {\n event.preventDefault();\n return false;\n }\n let dropNode: FcNode = null;\n const originalEvent: Event | any = (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: Event | any) {\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: Event | any) {\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: Event | any, 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: Event | any = (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: Event | any) {\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: Event | any, 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: Event | any) {\n this.edgeDragging.magnetActive = false;\n }\n\n public dragoverMagnet(event: Event | any, 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: Event | any) {\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: Event | any, 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: Event | any) {\n this.nodeDraggingService.dragover(event);\n this.edgeDraggingService.dragover(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: Event | any) {\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: Event | any) {\n return this.callbacks.edgeDragoverMagnet(event, this.connector);\n }\n\n @HostListener('dragleave', ['$event'])\n dragleave(event: Event | any) {\n this.callbacks.edgeDragleaveMagnet(event);\n }\n\n @HostListener('drop', ['$event'])\n drop(event: Event | any) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\n this.callbacks.edgeDragend(event);\n }\n\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FcCallbacks, FcConnector, FcConnectorRectInfo, FcNodeRectInfo, 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 nodeRectInfo: FcNodeRectInfo;\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 const connectorRectInfo: FcConnectorRectInfo = {\n type: this.connector.type,\n width: this.elementRef.nativeElement.offsetWidth,\n height: this.elementRef.nativeElement.offsetHeight,\n nodeRectInfo: this.nodeRectInfo\n };\n this.modelservice.connectors.setConnectorRectInfo(this.connector.id, connectorRectInfo);\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: Event | any) {\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: Event | any) {\n if (this.modelservice.isEditable()) {\n return this.callbacks.edgeDrop(event, this.connector);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\n if (this.modelservice.isEditable()) {\n this.callbacks.edgeDragend(event);\n }\n }\n\n @HostListener('dragstart', ['$event'])\n dragstart(event: Event | any) {\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 AfterViewInit,\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, FcNodeRectInfo,\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, AfterViewInit, 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 this.nodeComponent.width = this.elementRef.nativeElement.offsetWidth;\n this.nodeComponent.height = this.elementRef.nativeElement.offsetHeight;\n }\n\n ngAfterViewInit(): void {\n this.nodeComponent.width = this.elementRef.nativeElement.offsetWidth;\n this.nodeComponent.height = this.elementRef.nativeElement.offsetHeight;\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: Event | any) {\n if (!this.node.readonly) {\n this.callbacks.nodeDragstart(event, this.node);\n }\n }\n\n @HostListener('dragend', ['$event'])\n dragend(event: Event | any) {\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\n@Directive()\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 width: number;\n\n height: number;\n\n nodeRectInfo: FcNodeRectInfo = {\n top: () => {\n return this.node.y;\n },\n\n left: () => {\n return this.node.x;\n },\n\n bottom: () => {\n return this.node.y + this.height;\n },\n\n right: () => {\n return this.node.x + this.width;\n },\n\n width: () => {\n return this.width;\n },\n\n height: () => {\n return this.height;\n }\n };\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/default-node.component.js b/dist/ngx-flowchart/esm2015/lib/default-node.component.js
index 7a2372f..c2356cc 100644
--- a/dist/ngx-flowchart/esm2015/lib/default-node.component.js
+++ b/dist/ngx-flowchart/esm2015/lib/default-node.component.js
@@ -10,7 +10,7 @@ DefaultFcNodeComponent = __decorate([
Component({
selector: 'fc-default-node',
template: "\n
\n
\n
{{ node.name }}
\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;-webkit-transition:opacity .2s;transition:opacity .2s}:host :host-context(.fc-selected) .fc-node-overlay{opacity:.25}:host .innerNode{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align: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}"]
+ 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}"]
}),
__metadata("design:paramtypes", [])
], DefaultFcNodeComponent);
diff --git a/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.component.js b/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.component.js
index 05a6256..d39b0c3 100644
--- a/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.component.js
+++ b/dist/ngx-flowchart/esm2015/lib/ngx-flowchart.component.js
@@ -296,7 +296,7 @@ NgxFlowchartComponent = __decorate([
selector: 'fc-canvas',
template: "\n