UNPKG

lemon-ngx-trend

Version:

ngx-trend Angular component for Lemoncloud

33 lines 6.25 kB
import { checkForCollinearPoints, getDistanceBetween, moveTo, } from './math.helpers'; export const buildLinearPath = (data) => data.reduce((path, point, index) => { // The very first instruction needs to be a "move". // The rest will be a "line". const isFirstInstruction = index === 0; const instruction = isFirstInstruction ? 'M' : 'L'; return `${path}${instruction} ${point.x},${point.y}\n`; }, ''); export function buildSmoothPath(data, radius) { const [firstPoint, ...otherPoints] = data; return otherPoints.reduce((path, point, index) => { const next = otherPoints[index + 1]; const prev = otherPoints[index - 1] || firstPoint; const 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}`; } const distanceFromPrev = getDistanceBetween(prev, point); const distanceFromNext = getDistanceBetween(next, point); const threshold = Math.min(distanceFromPrev, distanceFromNext); const isTooCloseForRadius = threshold / 2 < radius; const radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius; const before = moveTo(prev, point, radiusForPoint); const 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRE9NLmhlbHBlcnMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9sZW1vbi1uZ3gtdHJlbmQvIiwic291cmNlcyI6WyJoZWxwZXJzL0RPTS5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLE1BQU0sR0FFUCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ2pDLG1EQUFtRDtJQUNuRCw2QkFBNkI7SUFDN0IsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUVuRCxPQUFPLEdBQUcsSUFBSSxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN6RCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFVCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQWEsRUFBRSxNQUFjO0lBQzNELE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7SUFFMUMsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUMvQyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDO1FBRWxELE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxJQUFJLElBQUksV0FBVyxFQUFFO1lBQ3hCLGlFQUFpRTtZQUNqRSxPQUFPLEdBQUcsSUFBSSxPQUFPLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzNDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7UUFFbkQsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUVwRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNuRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVsRCxPQUFPO1lBQ0wsSUFBSTtZQUNKLEtBQUssTUFBTSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFO1lBQzNCLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRTtTQUNoRCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNmLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNoZWNrRm9yQ29sbGluZWFyUG9pbnRzLFxuICBnZXREaXN0YW5jZUJldHdlZW4sXG4gIG1vdmVUbyxcbiAgUG9pbnQsXG59IGZyb20gJy4vbWF0aC5oZWxwZXJzJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkTGluZWFyUGF0aCA9IChkYXRhOiBQb2ludFtdKSA9PlxuICBkYXRhLnJlZHVjZSgocGF0aCwgcG9pbnQsIGluZGV4KSA9PiB7XG4gICAgLy8gVGhlIHZlcnkgZmlyc3QgaW5zdHJ1Y3Rpb24gbmVlZHMgdG8gYmUgYSBcIm1vdmVcIi5cbiAgICAvLyBUaGUgcmVzdCB3aWxsIGJlIGEgXCJsaW5lXCIuXG4gICAgY29uc3QgaXNGaXJzdEluc3RydWN0aW9uID0gaW5kZXggPT09IDA7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBpc0ZpcnN0SW5zdHJ1Y3Rpb24gPyAnTScgOiAnTCc7XG5cbiAgICByZXR1cm4gYCR7cGF0aH0ke2luc3RydWN0aW9ufSAke3BvaW50Lnh9LCR7cG9pbnQueX1cXG5gO1xuICB9LCAnJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFNtb290aFBhdGgoZGF0YTogUG9pbnRbXSwgcmFkaXVzOiBudW1iZXIpIHtcbiAgY29uc3QgW2ZpcnN0UG9pbnQsIC4uLm90aGVyUG9pbnRzXSA9IGRhdGE7XG5cbiAgcmV0dXJuIG90aGVyUG9pbnRzLnJlZHVjZSgocGF0aCwgcG9pbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IG90aGVyUG9pbnRzW2luZGV4ICsgMV07XG4gICAgY29uc3QgcHJldiA9IG90aGVyUG9pbnRzW2luZGV4IC0gMV0gfHwgZmlyc3RQb2ludDtcblxuICAgIGNvbnN0IGlzQ29sbGluZWFyID0gbmV4dCAmJiBjaGVja0ZvckNvbGxpbmVhclBvaW50cyhwcmV2LCBwb2ludCwgbmV4dCk7XG5cbiAgICBpZiAoIW5leHQgfHwgaXNDb2xsaW5lYXIpIHtcbiAgICAgIC8vIFRoZSB2ZXJ5IGxhc3QgbGluZSBpbiB0aGUgc2VxdWVuY2UgY2FuIGp1c3QgYmUgYSByZWd1bGFyIGxpbmUuXG4gICAgICByZXR1cm4gYCR7cGF0aH1cXG5MICR7cG9pbnQueH0sJHtwb2ludC55fWA7XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tUHJldiA9IGdldERpc3RhbmNlQmV0d2VlbihwcmV2LCBwb2ludCk7XG4gICAgY29uc3QgZGlzdGFuY2VGcm9tTmV4dCA9IGdldERpc3RhbmNlQmV0d2VlbihuZXh0LCBwb2ludCk7XG4gICAgY29uc3QgdGhyZXNob2xkID0gTWF0aC5taW4oZGlzdGFuY2VGcm9tUHJldiwgZGlzdGFuY2VGcm9tTmV4dCk7XG5cbiAgICBjb25zdCBpc1Rvb0Nsb3NlRm9yUmFkaXVzID0gdGhyZXNob2xkIC8gMiA8IHJhZGl1cztcblxuICAgIGNvbnN0IHJhZGl1c0ZvclBvaW50ID0gaXNUb29DbG9zZUZvclJhZGl1cyA/IHRocmVzaG9sZCAvIDIgOiByYWRpdXM7XG5cbiAgICBjb25zdCBiZWZvcmUgPSBtb3ZlVG8ocHJldiwgcG9pbnQsIHJhZGl1c0ZvclBvaW50KTtcbiAgICBjb25zdCBhZnRlciA9IG1vdmVUbyhuZXh0LCBwb2ludCwgcmFkaXVzRm9yUG9pbnQpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHBhdGgsXG4gICAgICBgTCAke2JlZm9yZS54fSwke2JlZm9yZS55fWAsXG4gICAgICBgUyAke3BvaW50Lnh9LCR7cG9pbnQueX0gJHthZnRlci54fSwke2FmdGVyLnl9YCxcbiAgICBdLmpvaW4oJ1xcbicpO1xuICB9LCBgTSAke2ZpcnN0UG9pbnQueH0sJHtmaXJzdFBvaW50Lnl9YCk7XG59XG4iXX0=