diff --git a/src/getStyles.js b/src/getStyles.js
new file mode 100644
index 00000000..198344fa
--- /dev/null
+++ b/src/getStyles.js
@@ -0,0 +1,97 @@
+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 }
+ .star-icon {
+ font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
+ }
+ .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;
diff --git a/src/renderStatsCard.js b/src/renderStatsCard.js
index af2951f2..aa14653c 100644
--- a/src/renderStatsCard.js
+++ b/src/renderStatsCard.js
@@ -1,12 +1,15 @@
const { kFormatter, isValidHexColor } = require("../src/utils");
+const getStyles = require("./getStyles");
const createTextNode = ({ icon, label, value, id, index, lineHeight }) => {
const classname = icon === "★" && "star-icon";
const kValue = kFormatter(value);
+ const staggerDelay = (index + 3) * 150;
// manually calculating lineHeight based on index instead of using
// to fix firefox layout bug
+ const lheight = lineHeight * (index + 1);
return `
-
+
${icon}
${label}:
@@ -107,7 +110,6 @@ const renderStatsCard = (stats = {}, options = { hide: [] }) => {
/>
`;
- const rankProgress = 180 + rank.score * 0.8;
const rankCircle = hide_rank
? ""
: `
${rank.level}
`;
+ // re-adjust circle progressbar's value until the ranking algo is improved
+ let progress = rank.score;
+ if (rank.score > 86) {
+ progress = (40 + rank.score) * 0.6;
+ }
+ if (rank.score < 40) {
+ progress = 40 + rank.score;
+ }
+
+ const styles = getStyles({
+ titleColor,
+ textColor,
+ iconColor,
+ show_icons,
+ progress,
+ });
+
return `