angular-sunburst-radar-chart
Version:
A Sunburst Radar chart with SVG,No Dependencies
52 lines • 8.26 kB
JavaScript
import { createPath } from './elements';
import { getLargeArcFlag, polarToCartesian } from './trignometry';
import { getOptionsOrEmpty } from './utils';
export function createArcToWriteText({ startPoint, radius, id, startAngle, endAngle }) {
const [centerX, centerY] = [startPoint.x, startPoint.y];
const start = polarToCartesian(centerX, centerY, radius, endAngle);
const end = polarToCartesian(centerX, centerY, radius, startAngle);
const largeArcFlag = getLargeArcFlag(startAngle, endAngle);
const d = [
'M', start.x, start.y,
'A', radius, radius, 0, largeArcFlag, 0, end.x, end.y
].join(' ');
return createPath({ d, borderColor: '', id });
}
export function getTextForAngle(text, distance, fontSize) {
let result = text;
let perCharacter = 10.07;
if (fontSize < 18) {
perCharacter = 8.7;
}
const totalTextLength = Math.round(distance / perCharacter);
if (text.length > 0 && text.length > totalTextLength) {
result = text.substring(0, totalTextLength - 1) + '..';
}
return result;
}
export function writeTextOnArc(options) {
const defaults = { text: '', label: '', pathId: '', 'font-size': '14px', };
options = Object.assign(Object.assign({}, defaults), (getOptionsOrEmpty(options)));
const { text, pathId, label } = options;
if (pathId !== '') {
options['href'] = '#' + pathId;
options['startOffset'] = '50%';
options['text-anchor'] = 'middle';
options['title'] = text;
}
const textOnArc = { name: 'text-on-arc', options, children: [] };
return textOnArc;
}
export function createText(options) {
const defaults = {
content: '', x: 0, y: 0,
stroke: 'white',
'stroke-width': '1px',
'font-size': '6px',
'text-anchor': 'middle'
};
options = Object.assign(Object.assign({}, defaults), (getOptionsOrEmpty(options)));
const textElement = { name: 'text', options, children: [] };
return textElement;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGVsZW1lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXN1bmJ1cnN0LXJhZGFyLWNoYXJ0LyIsInNvdXJjZXMiOlsibGliL3V0aWxzL3RleHRlbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFHMUMsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQztJQUVqRixNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkUsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbkUsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUczRCxNQUFNLENBQUMsR0FBRztRQUNSLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDdEQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFHWixPQUFPLFVBQVUsQ0FBQyxFQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7QUFHOUMsQ0FBQztBQUlELE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRO0lBR3RELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztJQUdsQixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDekIsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUFFO1FBQ2pCLFlBQVksR0FBRyxHQUFHLENBQUM7S0FFcEI7SUFDRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsQ0FBQztJQUM1RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsZUFBZSxFQUFFO1FBRXBELE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ3hEO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsT0FBTztJQUdwQyxNQUFNLFFBQVEsR0FBRyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLEdBQUUsQ0FBQztJQUN6RSxPQUFPLG1DQUFPLFFBQVEsR0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6RCxNQUFNLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxPQUFPLENBQUM7SUFFdEMsSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO1FBQ2pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDL0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUNsQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBRXpCO0lBRUQsTUFBTSxTQUFTLEdBQXNCLEVBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2xGLE9BQU8sU0FBUyxDQUFDO0FBR25CLENBQUM7QUFHRCxNQUFNLFVBQVUsVUFBVSxDQUFDLE9BQU87SUFFaEMsTUFBTSxRQUFRLEdBQUc7UUFDZixPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxFQUFFLE9BQU87UUFDZixjQUFjLEVBQUUsS0FBSztRQUNyQixXQUFXLEVBQUUsS0FBSztRQUNsQixhQUFhLEVBQUUsUUFBUTtLQUN4QixDQUFDO0lBQ0YsT0FBTyxtQ0FBTyxRQUFRLEdBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekQsTUFBTSxXQUFXLEdBQXNCLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQzdFLE9BQU8sV0FBVyxDQUFDO0FBR3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZVBhdGh9IGZyb20gJy4vZWxlbWVudHMnO1xyXG5pbXBvcnQge2dldExhcmdlQXJjRmxhZywgcG9sYXJUb0NhcnRlc2lhbn0gZnJvbSAnLi90cmlnbm9tZXRyeSc7XHJcbmltcG9ydCB7QW5ndWxhclN2Z0VsZW1lbnR9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHtnZXRPcHRpb25zT3JFbXB0eX0gZnJvbSAnLi91dGlscyc7XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFyY1RvV3JpdGVUZXh0KHtzdGFydFBvaW50LCByYWRpdXMsIGlkLCBzdGFydEFuZ2xlLCBlbmRBbmdsZX0pIHtcclxuXHJcbiAgY29uc3QgW2NlbnRlclgsIGNlbnRlclldID0gW3N0YXJ0UG9pbnQueCwgc3RhcnRQb2ludC55XTtcclxuXHJcbiAgY29uc3Qgc3RhcnQgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgZW5kQW5nbGUpO1xyXG4gIGNvbnN0IGVuZCA9IHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBzdGFydEFuZ2xlKTtcclxuICBjb25zdCBsYXJnZUFyY0ZsYWcgPSBnZXRMYXJnZUFyY0ZsYWcoc3RhcnRBbmdsZSwgZW5kQW5nbGUpO1xyXG5cclxuXHJcbiAgY29uc3QgZCA9IFtcclxuICAgICdNJywgc3RhcnQueCwgc3RhcnQueSxcclxuICAgICdBJywgcmFkaXVzLCByYWRpdXMsIDAsIGxhcmdlQXJjRmxhZywgMCwgZW5kLngsIGVuZC55XHJcbiAgXS5qb2luKCcgJyk7XHJcblxyXG5cclxuICByZXR1cm4gY3JlYXRlUGF0aCh7ZCwgYm9yZGVyQ29sb3I6ICcnLCBpZH0pO1xyXG5cclxuXHJcbn1cclxuXHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRGb3JBbmdsZSh0ZXh0LCBkaXN0YW5jZSwgZm9udFNpemUpIHtcclxuXHJcblxyXG4gIGxldCByZXN1bHQgPSB0ZXh0O1xyXG5cclxuXHJcbiAgbGV0IHBlckNoYXJhY3RlciA9IDEwLjA3O1xyXG4gIGlmIChmb250U2l6ZSA8IDE4KSB7XHJcbiAgICBwZXJDaGFyYWN0ZXIgPSA4Ljc7XHJcblxyXG4gIH1cclxuICBjb25zdCB0b3RhbFRleHRMZW5ndGggPSBNYXRoLnJvdW5kKGRpc3RhbmNlIC8gcGVyQ2hhcmFjdGVyKTtcclxuICBpZiAodGV4dC5sZW5ndGggPiAwICYmIHRleHQubGVuZ3RoID4gdG90YWxUZXh0TGVuZ3RoKSB7XHJcblxyXG4gICAgcmVzdWx0ID0gdGV4dC5zdWJzdHJpbmcoMCwgdG90YWxUZXh0TGVuZ3RoIC0gMSkgKyAnLi4nO1xyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUZXh0T25BcmMob3B0aW9ucykge1xyXG5cclxuXHJcbiAgY29uc3QgZGVmYXVsdHMgPSB7dGV4dDogJycsIGxhYmVsOiAnJywgcGF0aElkOiAnJywgJ2ZvbnQtc2l6ZSc6ICcxNHB4Jyx9O1xyXG4gIG9wdGlvbnMgPSB7Li4uZGVmYXVsdHMsIC4uLihnZXRPcHRpb25zT3JFbXB0eShvcHRpb25zKSl9O1xyXG5cclxuICBjb25zdCB7dGV4dCwgcGF0aElkLCBsYWJlbH0gPSBvcHRpb25zO1xyXG5cclxuICBpZiAocGF0aElkICE9PSAnJykge1xyXG4gICAgb3B0aW9uc1snaHJlZiddID0gJyMnICsgcGF0aElkO1xyXG4gICAgb3B0aW9uc1snc3RhcnRPZmZzZXQnXSA9ICc1MCUnO1xyXG4gICAgb3B0aW9uc1sndGV4dC1hbmNob3InXSA9ICdtaWRkbGUnO1xyXG4gICAgb3B0aW9uc1sndGl0bGUnXSA9IHRleHQ7XHJcblxyXG4gIH1cclxuXHJcbiAgY29uc3QgdGV4dE9uQXJjOiBBbmd1bGFyU3ZnRWxlbWVudCA9IHtuYW1lOiAndGV4dC1vbi1hcmMnLCBvcHRpb25zLCBjaGlsZHJlbjogW119O1xyXG4gIHJldHVybiB0ZXh0T25BcmM7XHJcblxyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUZXh0KG9wdGlvbnMpIHtcclxuXHJcbiAgY29uc3QgZGVmYXVsdHMgPSB7XHJcbiAgICBjb250ZW50OiAnJywgeDogMCwgeTogMCxcclxuICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICdzdHJva2Utd2lkdGgnOiAnMXB4JyxcclxuICAgICdmb250LXNpemUnOiAnNnB4JyxcclxuICAgICd0ZXh0LWFuY2hvcic6ICdtaWRkbGUnXHJcbiAgfTtcclxuICBvcHRpb25zID0gey4uLmRlZmF1bHRzLCAuLi4oZ2V0T3B0aW9uc09yRW1wdHkob3B0aW9ucykpfTtcclxuXHJcbiAgY29uc3QgdGV4dEVsZW1lbnQ6IEFuZ3VsYXJTdmdFbGVtZW50ID0ge25hbWU6ICd0ZXh0Jywgb3B0aW9ucywgY2hpbGRyZW46IFtdfTtcclxuICByZXR1cm4gdGV4dEVsZW1lbnQ7XHJcblxyXG5cclxufVxyXG4iXX0=