mirror of
https://github.com/Aviortheking/codestats-readme.git
synced 2025-04-22 10:42:08 +00:00
* improve: improved rating algorithm wip * Fixed typos, punctuation [...] Corrected many instances of "Github" to "GitHub", fixed the punctuation on some sections, fixed the ~lack of~ uppercase chars in others, tweaked the grammar a bit, and added the Vercel guide to a spoiler-ish section so it's only visible if you click to expand. <3 * fix: github rate limiter with multiple PATs * perf: vertically align text left * refactor: refactored retryer logic & handled invalid tokens * chore: remove redundant codes `axios` is Promise based, there is no need to wrap it into a Promise constructor again * fix: query param booleans * design: fixed rank alignment * chore: rebase from master * fix: fixed repo card breaking in absence of primaryLanguage * fix: fixed stars count #39 & fixed progressbar percentage * perf: replace emoji icons with GitHub SVG icons * chore: added funding link * refactor: refacted icons to another file * test: added test for icons Co-authored-by: anuraghazra <hazru.anurag@gmail.com> Co-authored-by: Micael Jarniac <micael@jarniac.com> Co-authored-by: JounQin <admin@1stg.me>
95 lines
2.0 KiB
JavaScript
95 lines
2.0 KiB
JavaScript
const calculateCircleProgress = (value) => {
|
|
let radius = 40;
|
|
let c = Math.PI * (radius * 2);
|
|
|
|
if (value < 0) value = 0;
|
|
if (value > 100) value = 100;
|
|
|
|
let percentage = ((100 - value) / 100) * c;
|
|
return percentage;
|
|
};
|
|
|
|
const getAnimations = ({ progress }) => {
|
|
return `
|
|
/* Animations */
|
|
@keyframes scaleIn {
|
|
from {
|
|
transform: translate(-5px, 5px) scale(0);
|
|
}
|
|
to {
|
|
transform: translate(-5px, 5px) scale(1);
|
|
}
|
|
}
|
|
@keyframes fadeIn {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
@keyframes rankAnimation {
|
|
from {
|
|
stroke-dashoffset: ${calculateCircleProgress(0)};
|
|
}
|
|
to {
|
|
stroke-dashoffset: ${calculateCircleProgress(progress)};
|
|
}
|
|
}
|
|
`;
|
|
};
|
|
|
|
const getStyles = ({
|
|
titleColor,
|
|
textColor,
|
|
iconColor,
|
|
show_icons,
|
|
progress,
|
|
}) => {
|
|
return `
|
|
.header {
|
|
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif; fill: ${titleColor};
|
|
animation: fadeIn 0.8s ease-in-out forwards;
|
|
}
|
|
.stat {
|
|
font: 600 14px 'Segoe UI', Ubuntu, Sans-Serif; fill: ${textColor};
|
|
}
|
|
.stagger {
|
|
opacity: 0;
|
|
animation: fadeIn 0.3s ease-in-out forwards;
|
|
}
|
|
.rank-text {
|
|
font: 800 24px 'Segoe UI', Ubuntu, Sans-Serif; fill: ${textColor};
|
|
animation: scaleIn 0.3s ease-in-out forwards;
|
|
}
|
|
|
|
.bold { font-weight: 700 }
|
|
.icon {
|
|
fill: ${iconColor};
|
|
display: ${!!show_icons ? "block" : "none"};
|
|
}
|
|
|
|
.rank-circle-rim {
|
|
stroke: ${titleColor};
|
|
fill: none;
|
|
stroke-width: 6;
|
|
opacity: 0.2;
|
|
}
|
|
.rank-circle {
|
|
stroke: ${titleColor};
|
|
stroke-dasharray: 250;
|
|
fill: none;
|
|
stroke-width: 6;
|
|
stroke-linecap: round;
|
|
opacity: 0.8;
|
|
transform-origin: -10px 8px;
|
|
transform: rotate(-90deg);
|
|
animation: rankAnimation 1s forwards ease-in-out;
|
|
}
|
|
|
|
${process.env.NODE_ENV === "test" ? "" : getAnimations({ progress })}
|
|
`;
|
|
};
|
|
|
|
module.exports = getStyles;
|