angular-sunburst-radar-chart
Version:
A Sunburst Radar chart with SVG,No Dependencies
63 lines • 14.4 kB
JavaScript
import { __read } from "tslib";
import { getLargeArcFlag, polarToCartesian } from './trignometry';
import { convertToPercentage } from './math';
import { createPathForBar } from './elements';
import { getItemTitle } from './utils';
export function createOuterChartBarWithInArc(_a) {
var item = _a.item, startAngle = _a.startAngle, endAngle = _a.endAngle, middleAngle = _a.middleAngle, color = _a.color, middleRadius = _a.middleRadius, maxScore = _a.maxScore, innerRadiusBorder = _a.innerRadiusBorder, center = _a.center;
var _b = __read([center.x, center.y], 2), centerX = _b[0], centerY = _b[1];
var currentVal = item.value;
var totalRadiusInside = middleRadius - innerRadiusBorder;
var innerRadius = convertToPercentage({ plotMax: totalRadiusInside, actualScore: currentVal, maxScore: maxScore });
var radiusFromCenter = innerRadius + innerRadiusBorder;
var firstPoint = polarToCartesian(centerX, centerY, radiusFromCenter, startAngle);
var secondPoint = polarToCartesian(centerX, centerY, radiusFromCenter, endAngle);
var startPoint = polarToCartesian(centerX, centerY, innerRadiusBorder, startAngle);
var endPoint = polarToCartesian(centerX, centerY, innerRadiusBorder, endAngle);
var startMiddlePoint = polarToCartesian(centerX, centerY, innerRadiusBorder, middleAngle);
var distFromStartToFirst = Math.sqrt(Math.pow((startPoint.x - firstPoint.x), 2) + Math.pow((startPoint.y - firstPoint.y), 2));
var distFromStartToSecond = Math.sqrt(Math.pow((startPoint.x - secondPoint.x), 2) + Math.pow((startPoint.y - secondPoint.y), 2));
var _c = getUpdatedPoints(firstPoint, secondPoint, distFromStartToFirst, distFromStartToSecond), updatedFirstPoint = _c.updatedFirstPoint, updatedSecondPoint = _c.updatedSecondPoint;
var d = getDrawPositions(updatedFirstPoint, middleRadius, updatedSecondPoint, endPoint, startMiddlePoint, startPoint);
var title = getItemTitle(item);
return createPathForBar({ d: d.join(' '), stroke: 'none', fill: color, "fill-opacity": '0.5', title: title });
}
function getDrawPositions(firstPoint, middleRadius, secondPoint, endPoint, startMiddlePoint, startPoint) {
var d = [
'M', firstPoint.x, firstPoint.y,
'A', middleRadius, middleRadius, 0, 0, 1, secondPoint.x, secondPoint.y,
'L', endPoint.x, endPoint.y,
'C', endPoint.x, endPoint.y, startMiddlePoint.x, startMiddlePoint.y, startPoint.x, startPoint.y,
'L', firstPoint.x, firstPoint.y,
'Z'
];
return d;
}
export function getUpdatedPoints(firstPoint, secondPoint, distFromStartToFirst, distFromStartToSecond) {
var _a = __read([firstPoint, secondPoint], 2), updatedFirstPoint = _a[0], updatedSecondPoint = _a[1];
if (distFromStartToSecond < distFromStartToFirst) {
updatedSecondPoint = firstPoint;
updatedFirstPoint = secondPoint;
}
return { updatedSecondPoint: updatedSecondPoint, updatedFirstPoint: updatedFirstPoint };
}
export function createInnerChartBarWithInArc(_a) {
var startPoint = _a.startPoint, item = _a.item, radius = _a.radius, startAngle = _a.startAngle, endAngle = _a.endAngle, maxScore = _a.maxScore;
var _b = __read([startPoint.x, startPoint.y], 2), centerX = _b[0], centerY = _b[1];
var currentVal = item.value;
var color = item.color;
var arcRadius = convertToPercentage({ plotMax: radius, actualScore: currentVal, maxScore: maxScore });
var start = polarToCartesian(centerX, centerY, arcRadius, endAngle);
var end = polarToCartesian(centerX, centerY, arcRadius, startAngle);
var largeArcFlag = getLargeArcFlag(startAngle, endAngle);
//const largeArcFlag = endAngle - startAngle <= 180 ? '0' : '1';
var d = [
'M', centerX, centerY,
'L', start.x, start.y,
'A', arcRadius, arcRadius, 0, largeArcFlag, 0, end.x, end.y
].join(' ');
var title = getItemTitle(item);
var arcForInnerChart = createPathForBar({ d: d, fill: color, title: title });
return arcForInnerChart;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjLWJhci1jaGFydHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXN1bmJ1cnN0LXJhZGFyLWNoYXJ0LyIsInNvdXJjZXMiOlsibGliL3V0aWxzL2FyYy1iYXItY2hhcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQWEsZ0JBQWdCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUdyQyxNQUFNLFVBQVUsNEJBQTRCLENBQUMsRUFBa0c7UUFBakcsY0FBSSxFQUFFLDBCQUFVLEVBQUUsc0JBQVEsRUFBRSw0QkFBVyxFQUFFLGdCQUFLLEVBQUUsOEJBQVksRUFBQyxzQkFBUSxFQUFFLHdDQUFpQixFQUFFLGtCQUFNO0lBR3RJLElBQUEsb0NBQXlDLEVBQXhDLGVBQU8sRUFBRSxlQUErQixDQUFDO0lBR2hELElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7SUFHOUIsSUFBTSxpQkFBaUIsR0FBRyxZQUFZLEdBQUcsaUJBQWlCLENBQUM7SUFFM0QsSUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLFVBQUEsRUFBQyxDQUFDLENBQUM7SUFDekcsSUFBTSxnQkFBZ0IsR0FBRyxXQUFXLEdBQUcsaUJBQWlCLENBQUM7SUFHekQsSUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNwRixJQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEs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LElBQUksQ0FBQyxDQUFDO0lBR2pDLElBQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsRUFBQyxDQUFDLEdBQUEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssT0FBQSxFQUFDLENBQUMsQ0FBQztJQUVuRSxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldExhcmdlQXJjRmxhZywgcG9sYXJUb0NhcnRlc2lhbn0gZnJvbSAnLi90cmlnbm9tZXRyeSc7XHJcbmltcG9ydCB7Y29udmVydFRvUGVyY2VudGFnZX0gZnJvbSAnLi9tYXRoJztcclxuaW1wb3J0IHtjcmVhdGVQYXRoLCBjcmVhdGVQYXRoRm9yQmFyfSBmcm9tICcuL2VsZW1lbnRzJztcclxuaW1wb3J0IHtnZXRJdGVtVGl0bGV9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQge1BvaW50fSBmcm9tICcuL3Bvc2l0aW9ucyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3V0ZXJDaGFydEJhcldpdGhJbkFyYyh7aXRlbSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIG1pZGRsZUFuZ2xlLCBjb2xvciwgbWlkZGxlUmFkaXVzLG1heFNjb3JlLCBpbm5lclJhZGl1c0JvcmRlciwgY2VudGVyfSkge1xyXG5cclxuXHJcbiAgY29uc3QgW2NlbnRlclgsIGNlbnRlclldID0gW2NlbnRlci54LCBjZW50ZXIueV07XHJcblxyXG5cclxuICBjb25zdCBjdXJyZW50VmFsID0gaXRlbS52YWx1ZTtcclxuXHJcblxyXG4gIGNvbnN0IHRvdGFsUmFkaXVzSW5zaWRlID0gbWlkZGxlUmFkaXVzIC0gaW5uZXJSYWRpdXNCb3JkZXI7XHJcblxyXG4gIGNvbnN0IGlubmVyUmFkaXVzID0gY29udmVydFRvUGVyY2VudGFnZSh7cGxvdE1heDogdG90YWxSYWRpdXNJbnNpZGUsIGFjdHVhbFNjb3JlOiBjdXJyZW50VmFsLCBtYXhTY29yZX0pO1xyXG4gIGNvbnN0IHJhZGl1c0Zyb21DZW50ZXIgPSBpbm5lclJhZGl1cyArIGlubmVyUmFkaXVzQm9yZGVyO1xyXG5cclxuXHJcbiAgY29uc3QgZmlyc3RQb2ludCA9IHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzRnJvbUNlbnRlciwgc3RhcnRBbmdsZSk7XHJcbiAgY29uc3Qgc2Vjb25kUG9pbnQgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIHJhZGl1c0Zyb21DZW50ZXIsIGVuZEFuZ2xlKTtcclxuXHJcblxyXG4gIGNvbnN0IHN0YXJ0UG9pbnQgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIGlubmVyUmFkaXVzQm9yZGVyLCBzdGFydEFuZ2xlKTtcclxuICBjb25zdCBlbmRQb2ludCA9IHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgaW5uZXJSYWRpdXNCb3JkZXIsIGVuZEFuZ2xlKTtcclxuXHJcblxyXG4gIGNvbnN0IHN0YXJ0TWlkZGxlUG9pbnQgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIGlubmVyUmFkaXVzQm9yZGVyLCBtaWRkbGVBbmdsZSk7XHJcblxyXG4gIGNvbnN0IGRpc3RGcm9tU3RhcnRUb0ZpcnN0ID0gTWF0aC5zcXJ0KE1hdGgucG93KChzdGFydFBvaW50LnggLSBmaXJzdFBvaW50LngpLCAyKSArIE1hdGgucG93KChzdGFydFBvaW50LnkgLSBmaXJzdFBvaW50LnkpLCAyKSk7XHJcbiAgY29uc3QgZGlzdEZyb21TdGFydFRvU2Vjb25kID0gTWF0aC5zcXJ0KE1hdGgucG93KChzdGFydFBvaW50LnggLSBzZWNvbmRQb2ludC54KSwgMikgKyBNYXRoLnBvdygoc3RhcnRQb2ludC55IC0gc2Vjb25kUG9pbnQueSksIDIpKTtcclxuXHJcblxyXG4gIGNvbnN0IHt1cGRhdGVkRmlyc3RQb2ludCwgdXBkYXRlZFNlY29uZFBvaW50fSA9IGdldFVwZGF0ZWRQb2ludHMoZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQsIGRpc3RGcm9tU3RhcnRUb0ZpcnN0LCBkaXN0RnJvbVN0YXJ0VG9TZWNvbmQpO1xyXG5cclxuXHJcbiAgY29uc3QgZCA9IGdldERyYXdQb3NpdGlvbnModXBkYXRlZEZpcnN0UG9pbnQsIG1pZGRsZVJhZGl1cywgdXBkYXRlZFNlY29uZFBvaW50LCBlbmRQb2ludCwgc3RhcnRNaWRkbGVQb2ludCwgc3RhcnRQb2ludCk7XHJcblxyXG5cclxuICBjb25zdCB0aXRsZSA9IGdldEl0ZW1UaXRsZShpdGVtKTtcclxuXHJcbiAgcmV0dXJuIGNyZWF0ZVBhdGhGb3JCYXIoe2Q6IGQuam9pbignICcpLCBzdHJva2U6ICdub25lJywgZmlsbDogY29sb3IsXCJmaWxsLW9wYWNpdHlcIjonMC41JywgdGl0bGV9KTtcclxuXHJcbn1cclxuZnVuY3Rpb24gZ2V0RHJhd1Bvc2l0aW9ucyhmaXJzdFBvaW50OiB7IHg6IGFueTsgeTogYW55IH0sIG1pZGRsZVJhZGl1cywgc2Vjb25kUG9pbnQ6IHsgeDogYW55OyB5OiBhbnkgfSwgZW5kUG9pbnQ6IHsgeDogYW55OyB5OiBhbnkgfSwgc3RhcnRNaWRkbGVQb2ludDogeyB4OiBhbnk7IHk6IGFueSB9LCBzdGFydFBvaW50OiB7IHg6IGFueTsgeTogYW55IH0pIHtcclxuICBjb25zdCBkID0gW1xyXG5cclxuICAgICdNJywgZmlyc3RQb2ludC54LCBmaXJzdFBvaW50LnksXHJcbiAgICAnQScsIG1pZGRsZVJhZGl1cywgbWlkZGxlUmFkaXVzLCAwLCAwLCAxLCBzZWNvbmRQb2ludC54LCBzZWNvbmRQb2ludC55LFxyXG4gICAgJ0wnLCBlbmRQb2ludC54LCBlbmRQb2ludC55LFxyXG4gICAgJ0MnLCBlbmRQb2ludC54LCBlbmRQb2ludC55LCBzdGFydE1pZGRsZVBvaW50LngsIHN0YXJ0TWlkZGxlUG9pbnQueSwgc3RhcnRQb2ludC54LCBzdGFydFBvaW50LnksXHJcbiAgICAnTCcsIGZpcnN0UG9pbnQueCwgZmlyc3RQb2ludC55LFxyXG4gICAgJ1onXHJcblxyXG5cclxuICBdO1xyXG4gIHJldHVybiBkO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZWRQb2ludHMoZmlyc3RQb2ludDogUG9pbnQsIHNlY29uZFBvaW50OiBQb2ludCwgZGlzdEZyb21TdGFydFRvRmlyc3QsIGRpc3RGcm9tU3RhcnRUb1NlY29uZCkge1xyXG5cclxuICBsZXQgW3VwZGF0ZWRGaXJzdFBvaW50LCB1cGRhdGVkU2Vjb25kUG9pbnRdID0gW2ZpcnN0UG9pbnQsIHNlY29uZFBvaW50XTtcclxuXHJcbiAgaWYgKGRpc3RGcm9tU3RhcnRUb1NlY29uZCA8IGRpc3RGcm9tU3RhcnRUb0ZpcnN0KSB7XHJcbiAgICB1cGRhdGVkU2Vjb25kUG9pbnQgPSBmaXJzdFBvaW50O1xyXG4gICAgdXBkYXRlZEZpcnN0UG9pbnQgPSBzZWNvbmRQb2ludDtcclxuXHJcblxyXG4gIH1cclxuICByZXR1cm4ge3VwZGF0ZWRTZWNvbmRQb2ludCwgdXBkYXRlZEZpcnN0UG9pbnR9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5uZXJDaGFydEJhcldpdGhJbkFyYyh7c3RhcnRQb2ludCwgaXRlbSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSxtYXhTY29yZX0pIHtcclxuXHJcbiAgY29uc3QgW2NlbnRlclgsIGNlbnRlclldID0gW3N0YXJ0UG9pbnQueCwgc3RhcnRQb2ludC55XTtcclxuXHJcbiAgY29uc3QgY3VycmVudFZhbCA9IGl0ZW0udmFsdWU7XHJcbiAgY29uc3QgY29sb3IgPSBpdGVtLmNvbG9yO1xyXG4gIGNvbnN0IGFyY1JhZGl1cyA9IGNvbnZlcnRUb1BlcmNlbnRhZ2Uoe3Bsb3RNYXg6IHJhZGl1cywgYWN0dWFsU2NvcmU6IGN1cnJlbnRWYWwsbWF4U2NvcmV9KTtcclxuXHJcblxyXG4gIGNvbnN0IHN0YXJ0ID0gcG9sYXJUb0NhcnRlc2lhbihjZW50ZXJYLCBjZW50ZXJZLCBhcmNSYWRpdXMsIGVuZEFuZ2xlKTtcclxuICBjb25zdCBlbmQgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIGFyY1JhZGl1cywgc3RhcnRBbmdsZSk7XHJcblxyXG4gIGNvbnN0IGxhcmdlQXJjRmxhZyA9IGdldExhcmdlQXJjRmxhZyhzdGFydEFuZ2xlLGVuZEFuZ2xlKVxyXG4gIC8vY29uc3QgbGFyZ2VBcmNGbGFnID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlIDw9IDE4MCA/ICcwJyA6ICcxJztcclxuXHJcbiAgY29uc3QgZCA9IFtcclxuICAgICdNJywgY2VudGVyWCwgY2VudGVyWSxcclxuICAgICdMJywgc3RhcnQueCwgc3RhcnQueSxcclxuICAgICdBJywgYXJjUmFkaXVzLCBhcmNSYWRpdXMsIDAsIGxhcmdlQXJjRmxhZywgMCwgZW5kLngsIGVuZC55XHJcbiAgXS5qb2luKCcgJyk7XHJcblxyXG5cclxuICBjb25zdCB0aXRsZSA9IGdldEl0ZW1UaXRsZShpdGVtKTtcclxuXHJcblxyXG4gIGNvbnN0IGFyY0ZvcklubmVyQ2hhcnQgPSBjcmVhdGVQYXRoRm9yQmFyKHtkLCBmaWxsOiBjb2xvciwgdGl0bGV9KTtcclxuXHJcbiAgcmV0dXJuIGFyY0ZvcklubmVyQ2hhcnQ7XHJcbn1cclxuIl19