diff --git a/api/top-langs.js b/api/top-langs.js index a2e352e7..0bcec0fc 100644 --- a/api/top-langs.js +++ b/api/top-langs.js @@ -28,6 +28,7 @@ export default async (req, res) => { title_color, text_color, bg_color, + prog_bar_bg_color, theme, cache_seconds, layout, @@ -143,6 +144,7 @@ export default async (req, res) => { title_color, text_color, bg_color, + prog_bar_bg_color, theme, layout, langs_count, diff --git a/src/cards/top-languages.js b/src/cards/top-languages.js index 6a36bfc6..64c11448 100644 --- a/src/cards/top-languages.js +++ b/src/cards/top-languages.js @@ -216,6 +216,7 @@ const getDisplayValue = (size, percentages, format) => { * @param {object} props Function properties. * @param {number} props.width The card width * @param {string} props.color Color of the programming language. + * @param {string} props.progBarBgColor Color of the background of progress bar. * @param {string} props.name Name of the programming language. * @param {number} props.size Size of the programming language. * @param {number} props.totalSize Total size of all languages. @@ -226,6 +227,7 @@ const getDisplayValue = (size, percentages, format) => { const createProgressTextNode = ({ width, color, + progBarBgColor, name, size, totalSize, @@ -250,7 +252,9 @@ const createProgressTextNode = ({ color, width: progressWidth, progress, - progressBarBackgroundColor: "#ddd", + progressBarBackgroundColor: progBarBgColor + ? `#${progBarBgColor}` + : "#ddd", delay: staggerDelay + 300, })} @@ -367,10 +371,17 @@ const createDonutLanguagesNode = ({ langs, totalSize, statsFormat }) => { * @param {Lang[]} langs Array of programming languages. * @param {number} width Card width. * @param {number} totalLanguageSize Total size of all languages. + * @param progBarBgColor Color of the background of progress bar. * @param {string} statsFormat Stats format. * @returns {string} Normal layout card SVG object. */ -const renderNormalLayout = (langs, width, totalLanguageSize, statsFormat) => { +const renderNormalLayout = ( + langs, + width, + totalLanguageSize, + progBarBgColor, + statsFormat, +) => { return flexLayout({ items: langs.map((lang, index) => { return createProgressTextNode({ @@ -381,6 +392,7 @@ const renderNormalLayout = (langs, width, totalLanguageSize, statsFormat) => { totalSize: totalLanguageSize, statsFormat, index, + progBarBgColor, }); }), gap: 40, @@ -787,6 +799,7 @@ const renderTopLanguages = (topLangs, options = {}) => { title_color, text_color, bg_color, + prog_bar_bg_color, hide, hide_progress, theme, @@ -872,6 +885,7 @@ const renderTopLanguages = (topLangs, options = {}) => { langs, width, totalLanguageSize, + prog_bar_bg_color, stats_format, ); } diff --git a/src/cards/types.d.ts b/src/cards/types.d.ts index 7535df35..c70932ca 100644 --- a/src/cards/types.d.ts +++ b/src/cards/types.d.ts @@ -46,6 +46,7 @@ export type TopLangOptions = CommonOptions & { langs_count: number; disable_animations: boolean; hide_progress: boolean; + prog_bar_bg_color: string; stats_format: "percentages" | "bytes"; }; diff --git a/src/common/render.js b/src/common/render.js index 594abaa5..33827b78 100644 --- a/src/common/render.js +++ b/src/common/render.js @@ -72,7 +72,7 @@ const createProgressNode = ({ return ` - + 19 mins - + 1 min - + 47.39 % - + 50.48 % - + { icon_color: "1b998b", text_color: "9991", bg_color: "252525", + prog_bar_bg_color: "444", }; document.body.innerHTML = renderTopLanguages(langs, { ...customColors }); @@ -486,6 +487,15 @@ describe("Test renderTopLanguages", () => { "fill", "#252525", ); + + const progressBackgroundNodes = queryAllByTestId( + document.body, + "progress-background", + ); + expect(progressBackgroundNodes.length).toBeGreaterThan(0); + progressBackgroundNodes.forEach((el) => { + expect(el).toHaveAttribute("fill", "#444"); + }); }); it("should render custom colors with themes", () => {