ngx-diagrams
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.
217 lines • 14.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/utils/tool-kit.util.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
// tslint:disable no-bitwise
// import { ROUTING_SCALING_FACTOR } from './routing/path-finding.service';
// import * as Path from 'paths-js/path';
/**
* Utility pathing and routing service
*/
import { tap } from 'rxjs/operators';
/** @enum {number} */
var LOG_LEVEL = {
'LOG': 0,
'ERROR': 1,
};
export { LOG_LEVEL };
LOG_LEVEL[LOG_LEVEL['LOG']] = 'LOG';
LOG_LEVEL[LOG_LEVEL['ERROR']] = 'ERROR';
// @internal
/** @type {?} */
export var __DEV__ = true;
// @internal
/** @type {?} */
export var __LOG__ = LOG_LEVEL.ERROR;
/**
* @return {?}
*/
export function enableDiagramProdMode() {
__DEV__ = false;
}
// @internal
/**
* @param {?} level
* @return {?}
*/
export function setLogLevel(level) {
__LOG__ = level;
}
// @internal
/**
* @return {?}
*/
export function isDev() {
return __DEV__;
}
// @internal
/**
* @param {?} message
* @param {?=} level
* @param {...?} args
* @return {?}
*/
export function log(message, level) {
if (level === void 0) { level = LOG_LEVEL.LOG; }
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
if (isDev() && __LOG__ === level) {
if (__LOG__ === LOG_LEVEL.ERROR) {
console.error.apply(console, tslib_1.__spread([message], args));
}
console.log.apply(console, tslib_1.__spread([message], args));
}
}
/**
* rxjs log operator
* \@internal
* @param {?} message
* @param {?=} level
* @param {...?} args
* @return {?}
*/
export function withLog(message, level) {
if (level === void 0) { level = LOG_LEVEL.LOG; }
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
return (/**
* @template T
* @param {?} source
* @return {?}
*/
function (source) { return (isDev() ? source.pipe(tap((/**
* @param {?} val
* @return {?}
*/
function (val) { return log.apply(void 0, tslib_1.__spread([message, level, val], args)); }))) : source); });
}
/**
* Generates a unique ID
* @return {?}
*/
export function UID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (/**
* @param {?} c
* @return {?}
*/
function (c) {
/** @type {?} */
var r = (Math.random() * 16) | 0;
/** @type {?} */
var v = c === 'x' ? r : (r & 0x3) | 0x8;
return v.toString(16);
}));
}
/**
* @template T
* @param {?} val
* @return {?}
*/
export function isArray(val) {
return Array.isArray(val);
}
/**
* @param {?} val
* @return {?}
*/
export function isString(val) {
return typeof val === 'string';
}
/**
* @param {?} val
* @return {?}
*/
export function isFunction(val) {
return typeof val === 'function';
}
// @internal
/**
* @param {?} v
* @return {?}
*/
export function isNil(v) {
return v === null || v === undefined;
}
/**
* @template T
* @param {?} value
* @return {?}
*/
export function coerceArray(value) {
if (isNil(value)) {
return [];
}
return Array.isArray(value) ? value : [value];
}
/**
* @template T
* @param {?} map
* @return {?}
*/
export function mapToArray(map) {
/** @type {?} */
var result = [];
for (var key in map) {
if (!isNil(map[key])) {
result.push(map[key]);
}
}
return result;
}
/**
* @template T
* @param {?} arr
* @return {?}
*/
export function arrayToMap(arr) {
var e_1, _a;
/** @type {?} */
var result = {};
try {
for (var arr_1 = tslib_1.__values(arr), arr_1_1 = arr_1.next(); !arr_1_1.done; arr_1_1 = arr_1.next()) {
var val = arr_1_1.value;
if (!isNil(val)) {
result[val.id] = val;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) _a.call(arr_1);
}
finally { if (e_1) throw e_1.error; }
}
return result;
}
/**
* @param {?} firstPoint
* @param {?} lastPoint
* @return {?}
*/
export function generateLinePath(firstPoint, lastPoint) {
return "M" + firstPoint.x$ + "," + firstPoint.y + " L " + lastPoint.x$ + "," + lastPoint.y;
}
/**
* @param {?} firstPoint
* @param {?} lastPoint
* @param {?=} curvy
* @return {?}
*/
export function generateCurvePath(firstPoint, lastPoint, curvy) {
if (curvy === void 0) { curvy = 0; }
/** @type {?} */
var isHorizontal = Math.abs(firstPoint.x - lastPoint.x) > Math.abs(firstPoint.y - lastPoint.y);
/** @type {?} */
var curvyX = isHorizontal ? curvy : 0;
/** @type {?} */
var curvyY = isHorizontal ? 0 : curvy;
return "M" + firstPoint.x + "," + firstPoint.y + " C " + (firstPoint.x + curvyX) + "," + (firstPoint.y + curvyY) + "\n " + (lastPoint.x - curvyX) + "," + (lastPoint.y - curvyY) + " " + lastPoint.x + "," + lastPoint.y;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1raXQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1kaWFncmFtcy8iLCJzb3VyY2VzIjpbImxpYi91dGlscy90b29sLWtpdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVNBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHckMsSUFBWSxTQUFTO0lBQ3BCLEtBQUssR0FBQTtJQUNMLE9BQU8sR0FBQTtFQUNQOztvQkFGQSxLQUFLLEtBQUwsS0FBSztvQkFDTCxPQUFPLEtBQVAsT0FBTzs7O0FBSVIsTUFBTSxLQUFLLE9BQU8sR0FBRyxJQUFJOzs7QUFFekIsTUFBTSxLQUFLLE9BQU8sR0FBYyxTQUFTLENBQUMsS0FBSzs7OztBQUUvQyxNQUFNLFVBQVUscUJBQXFCO0lBQ3BDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDakIsQ0FBQzs7Ozs7O0FBR0QsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFnQjtJQUMzQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLENBQUM7Ozs7O0FBR0QsTUFBTSxVQUFVLEtBQUs7SUFDcEIsT0FBTyxPQUFPLENBQUM7QUFDaEIsQ0FBQzs7Ozs7Ozs7QUFHRCxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQWUsRUFBRSxLQUFnQztJQUFoQyxzQkFBQSxFQUFBLFFBQW1CLFNBQVMsQ0FBQyxHQUFHO0lBQUUsY0FBYztTQUFkLFVBQWMsRUFBZCxxQkFBYyxFQUFkLElBQWM7UUFBZCw2QkFBYzs7SUFDcEYsSUFBSSxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFO1FBQ2pDLElBQUksT0FBTyxLQUFLLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDaEMsT0FBTyxDQUFDLEtBQUssT0FBYixPQUFPLG9CQUFPLE9BQU8sR0FBSyxJQUFJLEdBQUU7U0FDaEM7UUFDRCxPQUFPLENBQUMsR0FBRyxPQUFYLE9BQU8sb0JBQUssT0FBTyxHQUFLLElBQUksR0FBRTtL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QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsVUFBZSxFQUFFLFNBQWM7SUFDL0QsT0FBTyxNQUFJLFVBQVUsQ0FBQyxFQUFFLFNBQUksVUFBVSxDQUFDLENBQUMsV0FBTSxTQUFTLENBQUMsRUFBRSxTQUFJLFNBQVMsQ0FBQyxDQUFHLENBQUM7QUFDN0UsQ0FBQzs7Ozs7OztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxVQUFrQixFQUFFLFNBQWlCLEVBQUUsS0FBaUI7SUFBakIsc0JBQUEsRUFBQSxTQUFpQjs7UUFDbkYsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7O1FBQzFGLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFDakMsTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO0lBRXZDLE9BQU8sTUFBSSxVQUFVLENBQUMsQ0FBQyxTQUFJLFVBQVUsQ0FBQyxDQUFDLFlBQU0sVUFBVSxDQUFDLENBQUMsR0FBRyxNQUFNLFdBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxNQUFNLGdCQUN0RixTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sV0FBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sVUFBSSxTQUFTLENBQUMsQ0FBQyxTQUFJLFNBQVMsQ0FBQyxDQUFHLENBQUM7QUFDbkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlIG5vLWJpdHdpc2Vcbi8vIGltcG9ydCB7IFJPVVRJTkdfU0NBTElOR19GQUNUT1IgfSBmcm9tICcuL3JvdXRpbmcvcGF0aC1maW5kaW5nLnNlcnZpY2UnO1xuLy8gaW1wb3J0ICogYXMgUGF0aCBmcm9tICdwYXRocy1qcy9wYXRoJztcblxuLyoqXG4gKiBVdGlsaXR5IHBhdGhpbmcgYW5kIHJvdXRpbmcgc2VydmljZVxuICovXG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvb3JkcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29vcmRzLmludGVyZmFjZSc7XG5cbmV4cG9ydCBlbnVtIExPR19MRVZFTCB7XG5cdCdMT0cnLFxuXHQnRVJST1InXG59XG5cbi8vIEBpbnRlcm5hbFxuZXhwb3J0IGxldCBfX0RFVl9fID0gdHJ1ZTtcbi8vIEBpbnRlcm5hbFxuZXhwb3J0IGxldCBfX0xPR19fOiBMT0dfTEVWRUwgPSBMT0dfTEVWRUwuRVJST1I7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVEaWFncmFtUHJvZE1vZGUoKTogdm9pZCB7XG5cdF9fREVWX18gPSBmYWxzZTtcbn1cblxuLy8gQGludGVybmFsXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nTGV2ZWwobGV2ZWw6IExPR19MRVZFTCk6IHZvaWQge1xuXHRfX0xPR19fID0gbGV2ZWw7XG59XG5cbi8vIEBpbnRlcm5hbFxuZXhwb3J0IGZ1bmN0aW9uIGlzRGV2KCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gX19ERVZfXztcbn1cblxuLy8gQGludGVybmFsXG5leHBvcnQgZnVuY3Rpb24gbG9nKG1lc3NhZ2U6IHN0cmluZywgbGV2ZWw6IExPR19MRVZFTCA9IExPR19MRVZFTC5MT0csIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG5cdGlmIChpc0RldigpICYmIF9fTE9HX18gPT09IGxldmVsKSB7XG5cdFx0aWYgKF9fTE9HX18gPT09IExPR19MRVZFTC5FUlJPUikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihtZXNzYWdlLCAuLi5hcmdzKTtcblx0XHR9XG5cdFx0Y29uc29sZS5sb2cobWVzc2FnZSwgLi4uYXJncyk7XG5cdH1cbn1cblxuLyoqXG4gKiByeGpzIGxvZyBvcGVyYXRvclxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTG9nKG1lc3NhZ2U6IHN0cmluZywgbGV2ZWw6IExPR19MRVZFTCA9IExPR19MRVZFTC5MT0csIC4uLmFyZ3M6IGFueSkge1xuXHRyZXR1cm4gPFQ+KHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gKGlzRGV2KCkgPyBzb3VyY2UucGlwZSh0YXAodmFsID0+IGxvZyhtZXNzYWdlLCBsZXZlbCwgdmFsLCAuLi5hcmdzKSkpIDogc291cmNlKTtcbn1cblxuZXhwb3J0IHR5cGUgSUQgPSBzdHJpbmc7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgdW5pcXVlIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBVSUQoKTogSUQge1xuXHRyZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBjID0+IHtcblx0XHRjb25zdCByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwO1xuXHRcdGNvbnN0IHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMpIHwgMHg4O1xuXHRcdHJldHVybiB2LnRvU3RyaW5nKDE2KTtcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5PFQ+KHZhbDogYW55KTogdmFsIGlzIFRbXSB7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWw6IGFueSk6IHZhbCBpcyBzdHJpbmcge1xuXHRyZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbDogYW55KTogdmFsIGlzICguLi5hcmdzOiBhbnkpID0+IGFueSB7XG5cdHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nO1xufVxuXG4vLyBAaW50ZXJuYWxcbmV4cG9ydCBmdW5jdGlvbiBpc05pbCh2OiBhbnkpIHtcblx0cmV0dXJuIHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29lcmNlQXJyYXk8VD4odmFsdWU6IFQgfCBUW10pOiBUW10ge1xuXHRpZiAoaXNOaWwodmFsdWUpKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvQXJyYXk8VD4obWFwOiB7IFtrZXk6IHN0cmluZ106IFQgfSk6IFRbXSB7XG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBtYXApIHtcblx0XHRpZiAoIWlzTmlsKG1hcFtrZXldKSkge1xuXHRcdFx0cmVzdWx0LnB1c2gobWFwW2tleV0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVRvTWFwPFQ+KGFycjogQXJyYXk8eyBpZDogSUQgfSAmIFQ+KTogeyBba2V5OiBzdHJpbmddOiBUIH0ge1xuXHRjb25zdCByZXN1bHQgPSB7fTtcblx0Zm9yIChjb25zdCB2YWwgb2YgYXJyKSB7XG5cdFx0aWYgKCFpc05pbCh2YWwpKSB7XG5cdFx0XHRyZXN1bHRbdmFsLmlkXSA9IHZhbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVMaW5lUGF0aChmaXJzdFBvaW50OiBhbnksIGxhc3RQb2ludDogYW55KTogc3RyaW5nIHtcblx0cmV0dXJuIGBNJHtmaXJzdFBvaW50LngkfSwke2ZpcnN0UG9pbnQueX0gTCAke2xhc3RQb2ludC54JH0sJHtsYXN0UG9pbnQueX1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDdXJ2ZVBhdGgoZmlyc3RQb2ludDogQ29vcmRzLCBsYXN0UG9pbnQ6IENvb3JkcywgY3Vydnk6IG51bWJlciA9IDApOiBzdHJpbmcge1xuXHRjb25zdCBpc0hvcml6b250YWwgPSBNYXRoLmFicyhmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgPiBNYXRoLmFicyhmaXJzdFBvaW50LnkgLSBsYXN0UG9pbnQueSk7XG5cdGNvbnN0IGN1cnZ5WCA9IGlzSG9yaXpvbnRhbCA/IGN1cnZ5IDogMDtcblx0Y29uc3QgY3VydnlZID0gaXNIb3Jpem9udGFsID8gMCA6IGN1cnZ5O1xuXG5cdHJldHVybiBgTSR7Zmlyc3RQb2ludC54fSwke2ZpcnN0UG9pbnQueX0gQyAke2ZpcnN0UG9pbnQueCArIGN1cnZ5WH0sJHtmaXJzdFBvaW50LnkgKyBjdXJ2eVl9XG4gICAgJHtsYXN0UG9pbnQueCAtIGN1cnZ5WH0sJHtsYXN0UG9pbnQueSAtIGN1cnZ5WX0gJHtsYXN0UG9pbnQueH0sJHtsYXN0UG9pbnQueX1gO1xufVxuXG4vLyBleHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEeW5hbWljUGF0aChwYXRoQ29vcmRzOiBudW1iZXJbXVtdKSB7XG4vLyAgICAgbGV0IHBhdGggPSBQYXRoKCk7XG4vLyAgICAgcGF0aCA9IHBhdGgubW92ZXRvKHBhdGhDb29yZHNbMF1bMF0gKiBST1VUSU5HX1NDQUxJTkdfRkFDVE9SLCBwYXRoQ29vcmRzWzBdWzFdICogUk9VVElOR19TQ0FMSU5HX0ZBQ1RPUik7XG4vLyAgICAgcGF0aENvb3Jkcy5zbGljZSgxKS5mb3JFYWNoKGNvb3JkcyA9PiB7XG4vLyAgICAgICAgIHBhdGggPSBwYXRoLmxpbmV0byhjb29yZHNbMF0gKiBST1VUSU5HX1NDQUxJTkdfRkFDVE9SLCBjb29yZHNbMV0gKiBST1VUSU5HX1NDQUxJTkdfRkFDVE9SKTtcbi8vICAgICB9KTtcbi8vICAgICByZXR1cm4gcGF0aC5wcmludCgpO1xuLy8gfVxuIl19