UNPKG

lemon-ngx-trend

Version:

ngx-trend Angular component for Lemoncloud

36 lines 6.34 kB
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=