angular-sunburst-radar-chart
Version:
A Sunburst Radar chart with SVG,No Dependencies
67 lines • 11.3 kB
JavaScript
import { __read, __spread } from "tslib";
import { polarToCartesian } from './trignometry';
function getRadiusForBorderAndText(radius, borderHeight) {
var borderRadius = radius + borderHeight;
var textRadius = radius + ((borderRadius - radius) / 2);
return [borderRadius, textRadius];
}
export function getMaxDepth(items, currentLevel) {
if (currentLevel === void 0) { currentLevel = 0; }
var depths = [];
if (items && items.length > 0) {
var nextLevel_1 = currentLevel + 1;
depths = items
.filter(function (item) { return !!item.children; })
.filter(function (item) { return item.children.length > 0; })
.map(function (item) { return getMaxDepth(item.children, nextLevel_1); });
}
return depths.length !== 0 ? Math.max.apply(Math, __spread(depths)) : currentLevel;
}
export function getGlobalPositions(_a) {
var size = _a.size, maxScore = _a.maxScore, items = _a.items;
var center = { x: size / 2, y: size / 2 };
var maxDepth = getMaxDepth(items);
var totalLevels = maxDepth + 1;
var innerCircleRadius = Math.abs(size / 5.33);
var totalRadiusToBeDrawn = 2 * Math.abs(size / 5.33);
var borderHeight = 0.0375 * size;
var everyLevelRadius = totalRadiusToBeDrawn / totalLevels;
var levels = [];
for (var i = 1; i <= totalLevels; i++) {
var startRadius = i * everyLevelRadius;
var _b = __read(getRadiusForBorderAndText(startRadius, borderHeight), 2), endRadius = _b[0], textRadius = _b[1];
levels.push({ startRadius: startRadius, endRadius: endRadius, textRadius: textRadius });
}
var innerRadius = innerCircleRadius;
var _c = __read(getRadiusForBorderAndText(innerRadius, borderHeight), 2), innerRadiusBorder = _c[0], innerTextRadius = _c[1];
var middleRadius = innerCircleRadius * 2;
var _d = __read(getRadiusForBorderAndText(middleRadius, borderHeight), 2), middleRadiusBorder = _d[0], middleTextRadius = _d[1];
var outerRadius = middleRadius + borderHeight;
var _e = __read(getRadiusForBorderAndText(outerRadius, borderHeight * 2), 2), outerRadiusBorder = _e[0], outerTextRadius = _e[1];
var textSize = 0.0175 * size;
var outerTextSize = 0.0225 * size;
var result = {
textSize: textSize,
outerTextSize: outerTextSize,
levels: levels,
innerRadius: innerRadius,
innerRadiusBorder: innerRadiusBorder,
innerTextRadius: innerTextRadius,
middleRadius: middleRadius,
middleTextRadius: middleTextRadius,
middleRadiusBorder: middleRadiusBorder,
outerRadius: outerRadius,
outerRadiusBorder: outerRadiusBorder,
outerTextRadius: outerTextRadius,
center: center
};
return result;
}
export function calculatePointBetween(_a) {
var centerX = _a.centerX, centerY = _a.centerY, startAngle = _a.startAngle, middleAngle = _a.middleAngle, endAngle = _a.endAngle, radius = _a.radius;
var start = polarToCartesian(centerX, centerY, radius, startAngle);
var middle = polarToCartesian(centerX, centerY, radius, middleAngle);
var end = polarToCartesian(centerX, centerY, radius, endAngle);
return { start: start, middle: middle, end: end };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb25zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1zdW5idXJzdC1yYWRhci1jaGFydC8iLCJzb3VyY2VzIjpbImxpYi91dGlscy9wb3NpdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQXVCL0MsU0FBUyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsWUFBWTtJQUNyRCxJQUFNLFlBQVksR0FBRyxNQUFNLEdBQUcsWUFBWSxDQUFDO0lBQzNDLElBQU0sVUFBVSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTFELE9BQU8sQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFcEMsQ0FBQztBQUdELE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBSyxFQUFFLFlBQWdCO0lBQWhCLDZCQUFBLEVBQUEsZ0JBQWdCO0lBRWpELElBQUksTUFBTSxHQUFDLEVBQUUsQ0FBQztJQUNkLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzdCLElBQU0sV0FBUyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDbkMsTUFBTSxHQUFHLEtBQUs7YUFDWCxNQUFNLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBZixDQUFlLENBQUM7YUFDL0IsTUFBTSxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUF4QixDQUF3QixDQUFDO2FBQ3hDLEdBQUcsQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVMsQ0FBQyxFQUFyQyxDQUFxQyxDQUFDLENBQUM7S0FHdkQ7SUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFN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QUMsQ0FBQztJQUVqRSxPQUFPLEVBQUMsS0FBSyxPQUFBLEVBQUUsTUFBTSxRQUFBLEVBQUUsR0FBRyxLQUFBLEVBQUMsQ0FBQztBQUU5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwb2xhclRvQ2FydGVzaWFufSBmcm9tICcuL3RyaWdub21ldHJ5JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnQge1xyXG4gIHg6IG51bWJlcjtcclxuICB5OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR2xvYmFsUG9zaXRpb24ge1xyXG4gIGlubmVyUmFkaXVzO1xyXG4gIGlubmVyUmFkaXVzQm9yZGVyO1xyXG4gIGlubmVyVGV4dFJhZGl1cztcclxuICBtaWRkbGVSYWRpdXM7XHJcbiAgbWlkZGxlVGV4dFJhZGl1cztcclxuICBtaWRkbGVSYWRpdXNCb3JkZXI7XHJcbiAgb3V0ZXJSYWRpdXM7XHJcbiAgb3V0ZXJSYWRpdXNCb3JkZXI7XHJcbiAgb3V0ZXJUZXh0UmFkaXVzO1xyXG4gIHRleHRTaXplO1xyXG4gIG91dGVyVGV4dFNpemU7XHJcbiAgbGV2ZWxzO1xyXG4gIGNlbnRlcjogUG9pbnQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFJhZGl1c0ZvckJvcmRlckFuZFRleHQocmFkaXVzLCBib3JkZXJIZWlnaHQpIHtcclxuICBjb25zdCBib3JkZXJSYWRpdXMgPSByYWRpdXMgKyBib3JkZXJIZWlnaHQ7XHJcbiAgY29uc3QgdGV4dFJhZGl1cyA9IHJhZGl1cyArICgoYm9yZGVyUmFkaXVzIC0gcmFkaXVzKSAvIDIpO1xyXG5cclxuICByZXR1cm4gW2JvcmRlclJhZGl1cywgdGV4dFJhZGl1c107XHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1heERlcHRoKGl0ZW1zLCBjdXJyZW50TGV2ZWwgPSAwKSB7XHJcblxyXG4gIGxldCBkZXB0aHM9W107XHJcbiAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgIGNvbnN0IG5leHRMZXZlbCA9IGN1cnJlbnRMZXZlbCArIDE7XHJcbiAgICBkZXB0aHMgPSBpdGVtc1xyXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gISFpdGVtLmNoaWxkcmVuKVxyXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKVxyXG4gICAgICAubWFwKGl0ZW0gPT4gZ2V0TWF4RGVwdGgoaXRlbS5jaGlsZHJlbiwgbmV4dExldmVsKSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHJldHVybiBkZXB0aHMubGVuZ3RoICE9PSAwID8gTWF0aC5tYXgoLi4uZGVwdGhzKSA6IGN1cnJlbnRMZXZlbDtcclxuXHJcblxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsUG9zaXRpb25zKHtzaXplLCBtYXhTY29yZSwgaXRlbXN9KSB7XHJcblxyXG5cclxuICBjb25zdCBjZW50ZXI6IFBvaW50ID0ge3g6IHNpemUgLyAyLCB5OiBzaXplIC8gMn07XHJcbiAgY29uc3QgbWF4RGVwdGggPSBnZXRNYXhEZXB0aChpdGVtcyk7XHJcblxyXG4gIGNvbnN0IHRvdGFsTGV2ZWxzID0gbWF4RGVwdGggKyAxO1xyXG5cclxuICBjb25zdCBpbm5lckNpcmNsZVJhZGl1cyA9IE1hdGguYWJzKHNpemUgLyA1LjMzKTtcclxuXHJcblxyXG4gIGNvbnN0IHRvdGFsUmFkaXVzVG9CZURyYXduID0gMiAqIE1hdGguYWJzKHNpemUgLyA1LjMzKTtcclxuICBjb25zdCBib3JkZXJIZWlnaHQgPSAwLjAzNzUgKiBzaXplO1xyXG5cclxuICBjb25zdCBldmVyeUxldmVsUmFkaXVzID0gdG90YWxSYWRpdXNUb0JlRHJhd24gLyB0b3RhbExldmVscztcclxuXHJcbiAgY29uc3QgbGV2ZWxzID0gW107XHJcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdG90YWxMZXZlbHM7IGkrKykge1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0UmFkaXVzID0gaSAqIGV2ZXJ5TGV2ZWxSYWRpdXM7XHJcbiAgICBjb25zdCBbZW5kUmFkaXVzLCB0ZXh0UmFkaXVzXSA9IGdldFJhZGl1c0ZvckJvcmRlckFuZFRleHQoc3RhcnRSYWRpdXMsIGJvcmRlckhlaWdodCk7XHJcbiAgICBsZXZlbHMucHVzaCh7c3RhcnRSYWRpdXMsIGVuZFJhZGl1cywgdGV4dFJhZGl1c30pO1xyXG5cclxuXHJcbiAgfVxyXG4gIGNvbnN0IGlubmVyUmFkaXVzID0gaW5uZXJDaXJjbGVSYWRpdXM7XHJcbiAgY29uc3QgW2lubmVyUmFkaXVzQm9yZGVyLCBpbm5lclRleHRSYWRpdXNdID0gZ2V0UmFkaXVzRm9yQm9yZGVyQW5kVGV4dChpbm5lclJhZGl1cywgYm9yZGVySGVpZ2h0KTtcclxuXHJcbiAgY29uc3QgbWlkZGxlUmFkaXVzID0gaW5uZXJDaXJjbGVSYWRpdXMgKiAyO1xyXG4gIGNvbnN0IFttaWRkbGVSYWRpdXNCb3JkZXIsIG1pZGRsZVRleHRSYWRpdXNdID0gZ2V0UmFkaXVzRm9yQm9yZGVyQW5kVGV4dChtaWRkbGVSYWRpdXMsIGJvcmRlckhlaWdodCk7XHJcblxyXG4gIGNvbnN0IG91dGVyUmFkaXVzID0gbWlkZGxlUmFkaXVzICsgYm9yZGVySGVpZ2h0O1xyXG4gIGNvbnN0IFtvdXRlclJhZGl1c0JvcmRlciwgb3V0ZXJUZXh0UmFkaXVzXSA9IGdldFJhZGl1c0ZvckJvcmRlckFuZFRleHQob3V0ZXJSYWRpdXMsIGJvcmRlckhlaWdodCAqIDIpO1xyXG5cclxuICBjb25zdCB0ZXh0U2l6ZSA9IDAuMDE3NSAqIHNpemU7XHJcbiAgY29uc3Qgb3V0ZXJUZXh0U2l6ZSA9IDAuMDIyNSAqIHNpemU7XHJcblxyXG4gIGNvbnN0IHJlc3VsdCA9IHtcclxuICAgIHRleHRTaXplLFxyXG4gICAgb3V0ZXJUZXh0U2l6ZSxcclxuICAgIGxldmVscyxcclxuICAgIGlubmVyUmFkaXVzLFxyXG4gICAgaW5uZXJSYWRpdXNCb3JkZXIsXHJcbiAgICBpbm5lclRleHRSYWRpdXMsXHJcbiAgICBtaWRkbGVSYWRpdXMsXHJcbiAgICBtaWRkbGVUZXh0UmFkaXVzLFxyXG4gICAgbWlkZGxlUmFkaXVzQm9yZGVyLFxyXG4gICAgb3V0ZXJSYWRpdXMsXHJcbiAgICBvdXRlclJhZGl1c0JvcmRlcixcclxuICAgIG91dGVyVGV4dFJhZGl1cyxcclxuICAgIGNlbnRlclxyXG4gIH07XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlUG9pbnRCZXR3ZWVuKHtjZW50ZXJYLCBjZW50ZXJZLCBzdGFydEFuZ2xlLCBtaWRkbGVBbmdsZSwgZW5kQW5nbGUsIHJhZGl1c30pIHtcclxuXHJcblxyXG5cclxuICBjb25zdCBzdGFydCA9IHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBzdGFydEFuZ2xlKTtcclxuICBjb25zdCBtaWRkbGUgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgbWlkZGxlQW5nbGUpO1xyXG4gIGNvbnN0IGVuZCA9IHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBlbmRBbmdsZSk7XHJcblxyXG4gIHJldHVybiB7c3RhcnQsIG1pZGRsZSwgZW5kfTtcclxuXHJcbn1cclxuIl19