lemon-ngx-trend
Version:
ngx-trend Angular component for Lemoncloud
36 lines • 6.34 kB
JavaScript
import * as tslib_1 from "tslib";
import { checkForCollinearPoints, getDistanceBetween, moveTo, } from './math.helpers';
export var buildLinearPath = function (data) {
return data.reduce(function (path, point, index) {
// The very first instruction needs to be a "move".
// The rest will be a "line".
var isFirstInstruction = index === 0;
var instruction = isFirstInstruction ? 'M' : 'L';
return "" + path + instruction + " " + point.x + "," + point.y + "\n";
}, '');
};
export function buildSmoothPath(data, radius) {
var _a = tslib_1.__read(data), firstPoint = _a[0], otherPoints = _a.slice(1);
return otherPoints.reduce(function (path, point, index) {
var next = otherPoints[index + 1];
var prev = otherPoints[index - 1] || firstPoint;
var isCollinear = next && checkForCollinearPoints(prev, point, next);
if (!next || isCollinear) {
// The very last line in the sequence can just be a regular line.
return path + "\nL " + point.x + "," + point.y;
}
var distanceFromPrev = getDistanceBetween(prev, point);
var distanceFromNext = getDistanceBetween(next, point);
var threshold = Math.min(distanceFromPrev, distanceFromNext);
var isTooCloseForRadius = threshold / 2 < radius;
var radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius;
var before = moveTo(prev, point, radiusForPoint);
var after = moveTo(next, point, radiusForPoint);
return [
path,
"L " + before.x + "," + before.y,
"S " + point.x + "," + point.y + " " + after.x + "," + after.y,
].join('\n');
}, "M " + firstPoint.x + "," + firstPoint.y);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRE9NLmhlbHBlcnMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9sZW1vbi1uZ3gtdHJlbmQvIiwic291cmNlcyI6WyJoZWxwZXJzL0RPTS5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQixNQUFNLEdBRVAsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLENBQUMsSUFBTSxlQUFlLEdBQUcsVUFBQyxJQUFhO0lBQzNDLE9BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSztRQUM3QixtREFBbUQ7UUFDbkQsNkJBQTZCO1FBQzdCLElBQU0sa0JBQWtCLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFFbkQsT0FBTyxLQUFHLElBQUksR0FBRyxXQUFXLFNBQUksS0FBSyxDQUFDLENBQUMsU0FBSSxLQUFLLENBQUMsQ0FBQyxPQUFJLENBQUM7SUFDekQsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQVBOLENBT00sQ0FBQztBQUVULE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBYSxFQUFFLE1BQWM7SUFDckQsSUFBQSx5QkFBbUMsRUFBbEMsa0JBQVUsRUFBRSx5QkFBc0IsQ0FBQztJQUUxQyxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUs7UUFDM0MsSUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwQyxJQUFNLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQztRQUVsRCxJQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksdUJBQXVCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV2RSxJQUFJLENBQUMsSUFBSSxJQUFJLFdBQVcsRUFBRTtZQUN4QixpRUFBaUU7WUFDakUsT0FBVSxJQUFJLFlBQU8sS0FBSyxDQUFDLENBQUMsU0FBSSxLQUFLLENBQUMsQ0FBRyxDQUFDO1NBQzNDO1FBRUQsSUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRS9ELElBQU0sbUJBQW1CLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7UUFFbkQsSUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUVwRSxJQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNuRCxJQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVsRCxPQUFPO1lBQ0wsSUFBSTtZQUNKLE9BQUssTUFBTSxDQUFDLENBQUMsU0FBSSxNQUFNLENBQUMsQ0FBRztZQUMzQixPQUFLLEtBQUssQ0FBQyxDQUFDLFNBQUksS0FBSyxDQUFDLENBQUMsU0FBSSxLQUFLLENBQUMsQ0FBQyxTQUFJLEtBQUssQ0FBQyxDQUFHO1NBQ2hELENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQyxFQUFFLE9BQUssVUFBVSxDQUFDLENBQUMsU0FBSSxVQUFVLENBQUMsQ0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNoZWNrRm9yQ29sbGluZWFyUG9pbnRzLFxuICBnZXREaXN0YW5jZUJldHdlZW4sXG4gIG1vdmVUbyxcbiAgUG9pbnQsXG59IGZyb20gJy4vbWF0aC5oZWxwZXJzJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkTGluZWFyUGF0aCA9IChkYXRhOiBQb2ludFtdKSA9PlxuICBkYXRhLnJlZHVjZSgocGF0aCwgcG9pbnQsIGluZGV4KSA9PiB7XG4gICAgLy8gVGhlIHZlcnkgZmlyc3QgaW5zdHJ1Y3Rpb24gbmVlZHMgdG8gYmUgYSBcIm1vdmVcIi5cbiAgICAvLyBUaGUgcmVzdCB3aWxsIGJlIGEgXCJsaW5lXCIuXG4gICAgY29uc3QgaXNGaXJzdEluc3RydWN0aW9uID0gaW5kZXggPT09IDA7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBpc0ZpcnN0SW5zdHJ1Y3Rpb24gPyAnTScgOiAnTCc7XG5cbiAgICByZXR1cm4gYCR7cGF0aH0ke2luc3RydWN0aW9ufSAke3BvaW50Lnh9LCR7cG9pbnQueX1cXG5gO1xuICB9LCAnJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFNtb290aFBhdGgoZGF0YTogUG9pbnRbXSwgcmFkaXVzOiBudW1iZXIpIHtcbiAgY29uc3QgW2ZpcnN0UG9pbnQsIC4uLm90aGVyUG9pbnRzXSA9IGRhdGE7XG5cbiAgcmV0dXJuIG90aGVyUG9pbnRzLnJlZHVjZSgocGF0aCwgcG9pbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IG90aGVyUG9pbnRzW2luZGV4ICsgMV07XG4gICAgY29uc3QgcHJldiA9IG90aGVyUG9pbnRzW2luZGV4IC0gMV0gfHwgZmlyc3RQb2ludDtcblxuICAgIGNvbnN0IGlzQ29sbGluZWFyID0gbmV4dCAmJiBjaGVja0ZvckNvbGxpbmVhclBvaW50cyhwcmV2LCBwb2ludCwgbmV4dCk7XG5cbiAgICBpZiAoIW5leHQgfHwgaXNDb2xsaW5lYXIpIHtcbiAgICAgIC8vIFRoZSB2ZXJ5IGxhc3QgbGluZSBpbiB0aGUgc2VxdWVuY2UgY2FuIGp1c3QgYmUgYSByZWd1bGFyIGxpbmUuXG4gICAgICByZXR1cm4gYCR7cGF0aH1cXG5MICR7cG9pbnQueH0sJHtwb2ludC55fWA7XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tUHJldiA9IGdldERpc3RhbmNlQmV0d2VlbihwcmV2LCBwb2ludCk7XG4gICAgY29uc3QgZGlzdGFuY2VGcm9tTmV4dCA9IGdldERpc3RhbmNlQmV0d2VlbihuZXh0LCBwb2ludCk7XG4gICAgY29uc3QgdGhyZXNob2xkID0gTWF0aC5taW4oZGlzdGFuY2VGcm9tUHJldiwgZGlzdGFuY2VGcm9tTmV4dCk7XG5cbiAgICBjb25zdCBpc1Rvb0Nsb3NlRm9yUmFkaXVzID0gdGhyZXNob2xkIC8gMiA8IHJhZGl1cztcblxuICAgIGNvbnN0IHJhZGl1c0ZvclBvaW50ID0gaXNUb29DbG9zZUZvclJhZGl1cyA/IHRocmVzaG9sZCAvIDIgOiByYWRpdXM7XG5cbiAgICBjb25zdCBiZWZvcmUgPSBtb3ZlVG8ocHJldiwgcG9pbnQsIHJhZGl1c0ZvclBvaW50KTtcbiAgICBjb25zdCBhZnRlciA9IG1vdmVUbyhuZXh0LCBwb2ludCwgcmFkaXVzRm9yUG9pbnQpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHBhdGgsXG4gICAgICBgTCAke2JlZm9yZS54fSwke2JlZm9yZS55fWAsXG4gICAgICBgUyAke3BvaW50Lnh9LCR7cG9pbnQueX0gJHthZnRlci54fSwke2FmdGVyLnl9YCxcbiAgICBdLmpvaW4oJ1xcbicpO1xuICB9LCBgTSAke2ZpcnN0UG9pbnQueH0sJHtmaXJzdFBvaW50Lnl9YCk7XG59XG4iXX0=