forked from mirrored/github-readme-stats
Compare commits
17
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f776264f37 | ||
|
|
d32acd9d23 | ||
|
|
320ad3dc95 | ||
|
|
cdf14dbbfb | ||
|
|
d60d53cdb4 | ||
|
|
252c2b419d | ||
|
|
d5fbfb4345 | ||
|
|
82224fa68a | ||
|
|
1d528da1dc | ||
|
|
2ab8b85ae3 | ||
|
|
a3c6f874af | ||
|
|
8898d013b6 | ||
|
|
91345ed55f | ||
|
|
55a303b4a6 | ||
|
|
f3f7a4837d | ||
|
|
a6ff0fa521 | ||
|
|
5f20e6c97a |
@@ -1,3 +1,4 @@
|
|||||||
themes: themes/index.js
|
themes: themes/index.js
|
||||||
doc-translation: docs/*
|
doc-translation: docs/*
|
||||||
card-i18n: src/translations.js
|
card-i18n: src/translations.js
|
||||||
|
documentation: readme.md
|
||||||
|
|||||||
@@ -23,6 +23,10 @@ jobs:
|
|||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: npm
|
cache: npm
|
||||||
|
|
||||||
|
# Fix the unsafe repo error which was introduced by the CVE-2022-24765 git patches.
|
||||||
|
- name: Fix unsafe repo error
|
||||||
|
run: git config --global --add safe.directory ${{ github.workspace }}
|
||||||
|
|
||||||
- name: npm install, generate readme
|
- name: npm install, generate readme
|
||||||
run: |
|
run: |
|
||||||
npm ci
|
npm ci
|
||||||
|
|||||||
@@ -10,3 +10,5 @@ vercel_token
|
|||||||
# IDE
|
# IDE
|
||||||
.vscode
|
.vscode
|
||||||
*.code-workspace
|
*.code-workspace
|
||||||
|
|
||||||
|
.vercel
|
||||||
|
|||||||
+5
-1
@@ -47,7 +47,11 @@ All you need to do is edit the [themes/index.js](./themes/index.js) file and add
|
|||||||
|
|
||||||
While creating the Pull request to add a new theme **don't forget to add a screenshot of how your theme looks**, you can also test how it looks using custom URL parameters like `title_color`, `icon_color`, `bg_color`, `text_color`, `border_color`
|
While creating the Pull request to add a new theme **don't forget to add a screenshot of how your theme looks**, you can also test how it looks using custom URL parameters like `title_color`, `icon_color`, `bg_color`, `text_color`, `border_color`
|
||||||
|
|
||||||
> NOTE: If you are contributing your theme just because you are using it personally, then you can [customize the looks](./readme.md#customization) of your card with URL params instead.
|
> **Note**
|
||||||
|
> If you are contributing your theme just because you are using it personally, then you can [customize the looks](./readme.md#customization) of your card with URL params instead.
|
||||||
|
|
||||||
|
> **Note**
|
||||||
|
> If your theme name contains multiple words (ie, hyphenated or underscor-ed theme names), please add two versions of theme: one with hyphens and one with underscores. This is to ensure backward-compatability with when we had hyphens for some themes and underscores for others.
|
||||||
|
|
||||||
## Any contributions you make will be under the MIT Software License
|
## Any contributions you make will be under the MIT Software License
|
||||||
|
|
||||||
|
|||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
import statsCard from "./api/index.js";
|
||||||
|
import repoCard from "./api/pin.js";
|
||||||
|
import langCard from "./api/top-langs.js";
|
||||||
|
import wakatimeCard from "./api/wakatime.js";
|
||||||
|
import express from "express";
|
||||||
|
import dotenv from "dotenv";
|
||||||
|
|
||||||
|
dotenv.config();
|
||||||
|
const app = express();
|
||||||
|
app.listen(process.env.port || 9000);
|
||||||
|
|
||||||
|
app.get("/", statsCard);
|
||||||
|
app.get("/pin", repoCard);
|
||||||
|
app.get("/top-langs", langCard);
|
||||||
|
app.get("/wakatime", wakatimeCard);
|
||||||
@@ -92,7 +92,9 @@ Visit <https://indiafightscorona.giveindia.org> and make a small donation to hel
|
|||||||
- [Repo Card Exclusive Options](#repo-card-exclusive-options)
|
- [Repo Card Exclusive Options](#repo-card-exclusive-options)
|
||||||
- [Language Card Exclusive Options](#language-card-exclusive-options)
|
- [Language Card Exclusive Options](#language-card-exclusive-options)
|
||||||
- [Wakatime Card Exclusive Option](#wakatime-card-exclusive-options)
|
- [Wakatime Card Exclusive Option](#wakatime-card-exclusive-options)
|
||||||
- [Deploy Yourself](#deploy-on-your-own-vercel-instance)
|
- [Deploy Yourself](#deploy-on-your-own)
|
||||||
|
- [On Vercel](#on-vercel)
|
||||||
|
- [On other platforms](#on-other-platforms)
|
||||||
- [Keep your fork up to date](#keep-your-fork-up-to-date)
|
- [Keep your fork up to date](#keep-your-fork-up-to-date)
|
||||||
|
|
||||||
# GitHub Stats Card
|
# GitHub Stats Card
|
||||||
@@ -133,7 +135,7 @@ You can add the count of all your private contributions to the total commits cou
|
|||||||
|
|
||||||
### Showing icons
|
### Showing icons
|
||||||
|
|
||||||
To enable icons, you can pass `show_icons=true` in the query param, like so:
|
To enable icons, you can pass `&show_icons=true` in the query param, like so:
|
||||||
|
|
||||||
```md
|
```md
|
||||||

|

|
||||||
@@ -509,7 +511,9 @@ By default, GitHub does not lay out the cards side by side. To do that, you can
|
|||||||
</a>
|
</a>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Deploy on your own Vercel instance
|
## Deploy on your own
|
||||||
|
|
||||||
|
### On Vercel
|
||||||
|
|
||||||
#### :film_projector: [Check Out Step By Step Video Tutorial By @codeSTACKr](https://youtu.be/n6d4KHSKqGk?t=107)
|
#### :film_projector: [Check Out Step By Step Video Tutorial By @codeSTACKr](https://youtu.be/n6d4KHSKqGk?t=107)
|
||||||
|
|
||||||
@@ -546,6 +550,23 @@ Since the GitHub API only allows 5k requests per hour, my `https://github-readme
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
### On other platforms
|
||||||
|
|
||||||
|
> **Warning**
|
||||||
|
> This way of using GRS is not officially supported and was added to cater to some particular use cases where Vercel could not be used (e.g. #2341). The support for this method, therefore, is limited.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>:hammer_and_wrench: Step-by-step guide for deploying on other platforms</b></summary>
|
||||||
|
|
||||||
|
1. Fork or clone this repo as per your needs
|
||||||
|
2. Add `express` to the dependencies section of `package.json`
|
||||||
|
https://github.com/anuraghazra/github-readme-stats/blob/ba7c2f8b55eac8452e479c8bd38b044d204d0424/package.json#L54-L61
|
||||||
|
3. Run `npm i` if needed (initial setup)
|
||||||
|
4. Run `node express.js` to start the server, or set the entry point to `express.js` in `package.json` if you're deploying on a managed service
|
||||||
|
https://github.com/anuraghazra/github-readme-stats/blob/ba7c2f8b55eac8452e479c8bd38b044d204d0424/package.json#L11
|
||||||
|
5. You're done 🎉
|
||||||
|
</details>
|
||||||
|
|
||||||
### Keep your fork up to date
|
### Keep your fork up to date
|
||||||
|
|
||||||
You can keep your fork, and thus your private Vercel instance up to date with the upstream using GitHubs' [Sync Fork button](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork). You can also use the [pull](https://github.com/wei/pull) package created by [@wei](https://github.com/wei) to automate this process.
|
You can keep your fork, and thus your private Vercel instance up to date with the upstream using GitHubs' [Sync Fork button](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork). You can also use the [pull](https://github.com/wei/pull) package created by [@wei](https://github.com/wei) to automate this process.
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ const createStatMdLink = (theme) => {
|
|||||||
const generateLinks = (fn) => {
|
const generateLinks = (fn) => {
|
||||||
return Object.keys(themes)
|
return Object.keys(themes)
|
||||||
.map((name) => fn(name))
|
.map((name) => fn(name))
|
||||||
|
.filter((name) => !name.includes('-'))
|
||||||
.join("");
|
.join("");
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -67,7 +68,7 @@ const generateTable = ({ isRepoCard }) => {
|
|||||||
const rows = [];
|
const rows = [];
|
||||||
const themesFiltered = Object.keys(themes).filter(
|
const themesFiltered = Object.keys(themes).filter(
|
||||||
(name) => name !== (!isRepoCard ? "default_repocard" : "default"),
|
(name) => name !== (!isRepoCard ? "default_repocard" : "default"),
|
||||||
);
|
).filter((name) => !name.includes('-'));
|
||||||
|
|
||||||
for (let i = 0; i < themesFiltered.length; i += 3) {
|
for (let i = 0; i < themesFiltered.length; i += 3) {
|
||||||
const one = themesFiltered[i];
|
const one = themesFiltered[i];
|
||||||
|
|||||||
@@ -298,12 +298,13 @@ const themeNameAlreadyExists = (name) => {
|
|||||||
return themes[name] !== undefined;
|
return themes[name] !== undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const DRY_RUN = process.env.DRY_RUN === "true" || false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main function.
|
* Main function.
|
||||||
*/
|
*/
|
||||||
export const run = async (prNumber) => {
|
export const run = async (prNumber) => {
|
||||||
try {
|
try {
|
||||||
const dryRun = process.env.DRY_RUN === "true" || false;
|
|
||||||
debug("Retrieve action information from context...");
|
debug("Retrieve action information from context...");
|
||||||
debug(`Context: ${inspect(github.context)}`);
|
debug(`Context: ${inspect(github.context)}`);
|
||||||
let commentBody = `
|
let commentBody = `
|
||||||
@@ -513,7 +514,7 @@ export const run = async (prNumber) => {
|
|||||||
// Create or update theme-preview comment.
|
// Create or update theme-preview comment.
|
||||||
debug("Create or update theme-preview comment...");
|
debug("Create or update theme-preview comment...");
|
||||||
let comment_url;
|
let comment_url;
|
||||||
if (!dryRun) {
|
if (!DRY_RUN) {
|
||||||
comment_url = await upsertComment(octokit, {
|
comment_url = await upsertComment(octokit, {
|
||||||
comment_id: comment?.id,
|
comment_id: comment?.id,
|
||||||
issue_number: pullRequestId,
|
issue_number: pullRequestId,
|
||||||
@@ -535,7 +536,7 @@ export const run = async (prNumber) => {
|
|||||||
const reviewReason = themesValid
|
const reviewReason = themesValid
|
||||||
? undefined
|
? undefined
|
||||||
: INVALID_REVIEW_COMMENT(comment_url);
|
: INVALID_REVIEW_COMMENT(comment_url);
|
||||||
if (!dryRun) {
|
if (!DRY_RUN) {
|
||||||
await addReview(
|
await addReview(
|
||||||
octokit,
|
octokit,
|
||||||
pullRequestId,
|
pullRequestId,
|
||||||
@@ -558,7 +559,7 @@ export const run = async (prNumber) => {
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
debug("Set review state to `REQUEST_CHANGES` and add `invalid` label...");
|
debug("Set review state to `REQUEST_CHANGES` and add `invalid` label...");
|
||||||
if (!dryRun) {
|
if (!DRY_RUN) {
|
||||||
await addReview(
|
await addReview(
|
||||||
octokit,
|
octokit,
|
||||||
pullRequestId,
|
pullRequestId,
|
||||||
|
|||||||
+35
-51
@@ -87,6 +87,16 @@ const iconWithLabel = (icon, label, testid) => {
|
|||||||
* @returns {string} Repository card SVG object.
|
* @returns {string} Repository card SVG object.
|
||||||
*/
|
*/
|
||||||
const renderRepoCard = (repo, options = {}) => {
|
const renderRepoCard = (repo, options = {}) => {
|
||||||
|
const {
|
||||||
|
name,
|
||||||
|
nameWithOwner,
|
||||||
|
description,
|
||||||
|
primaryLanguage,
|
||||||
|
isArchived,
|
||||||
|
isTemplate,
|
||||||
|
starCount,
|
||||||
|
forkCount,
|
||||||
|
} = repo;
|
||||||
const {
|
const {
|
||||||
hide_border = false,
|
hide_border = false,
|
||||||
title_color,
|
title_color,
|
||||||
@@ -99,42 +109,6 @@ const renderRepoCard = (repo, options = {}) => {
|
|||||||
border_color,
|
border_color,
|
||||||
locale,
|
locale,
|
||||||
} = options;
|
} = options;
|
||||||
|
|
||||||
const i18n = new I18n({
|
|
||||||
locale,
|
|
||||||
translations: repoCardLocales,
|
|
||||||
});
|
|
||||||
|
|
||||||
const colors = getCardColors({
|
|
||||||
title_color,
|
|
||||||
icon_color,
|
|
||||||
text_color,
|
|
||||||
bg_color,
|
|
||||||
border_color,
|
|
||||||
theme,
|
|
||||||
});
|
|
||||||
|
|
||||||
const {
|
|
||||||
name,
|
|
||||||
nameWithOwner,
|
|
||||||
description,
|
|
||||||
primaryLanguage,
|
|
||||||
isArchived,
|
|
||||||
isTemplate,
|
|
||||||
starCount,
|
|
||||||
forkCount,
|
|
||||||
} = repo;
|
|
||||||
|
|
||||||
const highlight = repo.highlight
|
|
||||||
? // @ts-ignore
|
|
||||||
getBadgeSVG(repo.highlight, colors.textColor)
|
|
||||||
: isTemplate
|
|
||||||
? // @ts-ignore
|
|
||||||
getBadgeSVG(i18n.t("repocard.template"), colors.textColor)
|
|
||||||
: isArchived
|
|
||||||
? // @ts-ignore
|
|
||||||
getBadgeSVG(i18n.t("repocard.archived"), colors.textColor)
|
|
||||||
: ""
|
|
||||||
|
|
||||||
const lineHeight = 10;
|
const lineHeight = 10;
|
||||||
const header = show_owner ? nameWithOwner : name;
|
const header = show_owner ? nameWithOwner : name;
|
||||||
@@ -151,25 +125,27 @@ const renderRepoCard = (repo, options = {}) => {
|
|||||||
const height =
|
const height =
|
||||||
(descriptionLines > 1 ? 120 : 110) + descriptionLines * lineHeight;
|
(descriptionLines > 1 ? 120 : 110) + descriptionLines * lineHeight;
|
||||||
|
|
||||||
|
const i18n = new I18n({
|
||||||
|
locale,
|
||||||
|
translations: repoCardLocales,
|
||||||
|
});
|
||||||
|
|
||||||
// returns theme based colors with proper overrides and defaults
|
// returns theme based colors with proper overrides and defaults
|
||||||
|
const colors = getCardColors({
|
||||||
|
title_color,
|
||||||
|
icon_color,
|
||||||
|
text_color,
|
||||||
|
bg_color,
|
||||||
|
border_color,
|
||||||
|
theme,
|
||||||
|
});
|
||||||
|
|
||||||
const svgLanguage = primaryLanguage
|
const svgLanguage = primaryLanguage
|
||||||
? createLanguageNode(langName, langColor)
|
? createLanguageNode(langName, langColor)
|
||||||
: "";
|
: "";
|
||||||
|
|
||||||
let totalStars
|
const totalStars = kFormatter(starCount);
|
||||||
let totalForks
|
const totalForks = kFormatter(forkCount);
|
||||||
if (isNaN(starCount)) {
|
|
||||||
totalStars = starCount;
|
|
||||||
} else {
|
|
||||||
totalStars = kFormatter(starCount);
|
|
||||||
}
|
|
||||||
if (isNaN(forkCount)) {
|
|
||||||
totalForks = forkCount;
|
|
||||||
} else {
|
|
||||||
totalForks = kFormatter(forkCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
const svgStars = iconWithLabel(icons.star, totalStars, "stargazers");
|
const svgStars = iconWithLabel(icons.star, totalStars, "stargazers");
|
||||||
const svgForks = iconWithLabel(icons.fork, totalForks, "forkcount");
|
const svgForks = iconWithLabel(icons.fork, totalForks, "forkcount");
|
||||||
|
|
||||||
@@ -204,7 +180,15 @@ const renderRepoCard = (repo, options = {}) => {
|
|||||||
`);
|
`);
|
||||||
|
|
||||||
return card.render(`
|
return card.render(`
|
||||||
${highlight}
|
${
|
||||||
|
isTemplate
|
||||||
|
? // @ts-ignore
|
||||||
|
getBadgeSVG(i18n.t("repocard.template"), colors.textColor)
|
||||||
|
: isArchived
|
||||||
|
? // @ts-ignore
|
||||||
|
getBadgeSVG(i18n.t("repocard.archived"), colors.textColor)
|
||||||
|
: ""
|
||||||
|
}
|
||||||
|
|
||||||
<text class="description" x="25" y="-5">
|
<text class="description" x="25" y="-5">
|
||||||
${descriptionSvg}
|
${descriptionSvg}
|
||||||
|
|||||||
+32
-44
@@ -40,12 +40,7 @@ const createTextNode = ({
|
|||||||
shiftValuePos,
|
shiftValuePos,
|
||||||
bold,
|
bold,
|
||||||
}) => {
|
}) => {
|
||||||
let kValue
|
const kValue = kFormatter(value);
|
||||||
if (isNaN(value)) {
|
|
||||||
kValue = value;
|
|
||||||
} else {
|
|
||||||
kValue = kFormatter(value);
|
|
||||||
}
|
|
||||||
const staggerDelay = (index + 3) * 150;
|
const staggerDelay = (index + 3) * 150;
|
||||||
|
|
||||||
const labelOffset = showIcons ? `x="25"` : "";
|
const labelOffset = showIcons ? `x="25"` : "";
|
||||||
@@ -80,6 +75,15 @@ const createTextNode = ({
|
|||||||
* @returns {string} The stats card SVG object.
|
* @returns {string} The stats card SVG object.
|
||||||
*/
|
*/
|
||||||
const renderStatsCard = (stats = {}, options = { hide: [] }) => {
|
const renderStatsCard = (stats = {}, options = { hide: [] }) => {
|
||||||
|
const {
|
||||||
|
name,
|
||||||
|
totalStars,
|
||||||
|
totalCommits,
|
||||||
|
totalIssues,
|
||||||
|
totalPRs,
|
||||||
|
contributedTo,
|
||||||
|
rank,
|
||||||
|
} = stats;
|
||||||
const {
|
const {
|
||||||
hide = [],
|
hide = [],
|
||||||
show_icons = false,
|
show_icons = false,
|
||||||
@@ -102,37 +106,6 @@ const renderStatsCard = (stats = {}, options = { hide: [] }) => {
|
|||||||
locale,
|
locale,
|
||||||
disable_animations = false,
|
disable_animations = false,
|
||||||
} = options;
|
} = options;
|
||||||
|
|
||||||
const name = stats.name || "GitHub User"
|
|
||||||
|
|
||||||
const apostrophe = ["x", "s"].includes(name.slice(-1).toLocaleLowerCase())
|
|
||||||
? ""
|
|
||||||
: "s";
|
|
||||||
|
|
||||||
const i18n = new I18n({
|
|
||||||
locale,
|
|
||||||
translations: statCardLocales({ name, apostrophe }),
|
|
||||||
});
|
|
||||||
|
|
||||||
const {
|
|
||||||
totalStars = "2018",
|
|
||||||
totalCommits = "29019",
|
|
||||||
totalIssues = "203",
|
|
||||||
totalPRs = "127",
|
|
||||||
contributedTo = "232",
|
|
||||||
rank = {
|
|
||||||
level: "S",
|
|
||||||
score: 10
|
|
||||||
},
|
|
||||||
starsTitle = i18n.t("statcard.totalstars"),
|
|
||||||
commitsTitle = `${i18n.t("statcard.commits")}${
|
|
||||||
include_all_commits ? "" : ` (${new Date().getFullYear()})`
|
|
||||||
}`,
|
|
||||||
issuesTitle = i18n.t("statcard.issues"),
|
|
||||||
PRsTitle = i18n.t("statcard.prs"),
|
|
||||||
contribsTitle = i18n.t("statcard.contribs") + " (last year)",
|
|
||||||
title = i18n.t("statcard.title"),
|
|
||||||
} = stats;
|
|
||||||
|
|
||||||
const lheight = parseInt(String(line_height), 10);
|
const lheight = parseInt(String(line_height), 10);
|
||||||
|
|
||||||
@@ -148,35 +121,45 @@ const renderStatsCard = (stats = {}, options = { hide: [] }) => {
|
|||||||
theme,
|
theme,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const apostrophe = ["x", "s"].includes(name.slice(-1).toLocaleLowerCase())
|
||||||
|
? ""
|
||||||
|
: "s";
|
||||||
|
const i18n = new I18n({
|
||||||
|
locale,
|
||||||
|
translations: statCardLocales({ name, apostrophe }),
|
||||||
|
});
|
||||||
|
|
||||||
// Meta data for creating text nodes with createTextNode function
|
// Meta data for creating text nodes with createTextNode function
|
||||||
const STATS = {
|
const STATS = {
|
||||||
stars: {
|
stars: {
|
||||||
icon: icons.star,
|
icon: icons.star,
|
||||||
label: starsTitle,
|
label: i18n.t("statcard.totalstars"),
|
||||||
value: totalStars,
|
value: totalStars,
|
||||||
id: "stars",
|
id: "stars",
|
||||||
},
|
},
|
||||||
commits: {
|
commits: {
|
||||||
icon: icons.commits,
|
icon: icons.commits,
|
||||||
label: commitsTitle,
|
label: `${i18n.t("statcard.commits")}${
|
||||||
|
include_all_commits ? "" : ` (${new Date().getFullYear()})`
|
||||||
|
}`,
|
||||||
value: totalCommits,
|
value: totalCommits,
|
||||||
id: "commits",
|
id: "commits",
|
||||||
},
|
},
|
||||||
prs: {
|
prs: {
|
||||||
icon: icons.prs,
|
icon: icons.prs,
|
||||||
label: PRsTitle,
|
label: i18n.t("statcard.prs"),
|
||||||
value: totalPRs,
|
value: totalPRs,
|
||||||
id: "prs",
|
id: "prs",
|
||||||
},
|
},
|
||||||
issues: {
|
issues: {
|
||||||
icon: icons.issues,
|
icon: icons.issues,
|
||||||
label: issuesTitle,
|
label: i18n.t("statcard.issues"),
|
||||||
value: totalIssues,
|
value: totalIssues,
|
||||||
id: "issues",
|
id: "issues",
|
||||||
},
|
},
|
||||||
contribs: {
|
contribs: {
|
||||||
icon: icons.contribs,
|
icon: icons.contribs,
|
||||||
label: contribsTitle,
|
label: i18n.t("statcard.contribs") + " (last year)",
|
||||||
value: contributedTo,
|
value: contributedTo,
|
||||||
id: "contribs",
|
id: "contribs",
|
||||||
},
|
},
|
||||||
@@ -232,7 +215,7 @@ const renderStatsCard = (stats = {}, options = { hide: [] }) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const calculateTextWidth = () => {
|
const calculateTextWidth = () => {
|
||||||
return measureText(custom_title ? custom_title : title);
|
return measureText(custom_title ? custom_title : i18n.t("statcard.title"));
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -258,7 +241,7 @@ const renderStatsCard = (stats = {}, options = { hide: [] }) => {
|
|||||||
|
|
||||||
const card = new Card({
|
const card = new Card({
|
||||||
customTitle: custom_title,
|
customTitle: custom_title,
|
||||||
defaultTitle: title,
|
defaultTitle: i18n.t("statcard.title"),
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
border_radius,
|
border_radius,
|
||||||
@@ -323,6 +306,11 @@ const renderStatsCard = (stats = {}, options = { hide: [] }) => {
|
|||||||
const labels = Object.keys(STATS)
|
const labels = Object.keys(STATS)
|
||||||
.filter((key) => !hide.includes(key))
|
.filter((key) => !hide.includes(key))
|
||||||
.map((key) => {
|
.map((key) => {
|
||||||
|
if (key === "commits") {
|
||||||
|
return `${i18n.t("statcard.commits")} ${
|
||||||
|
include_all_commits ? "" : `in ${new Date().getFullYear()}`
|
||||||
|
} : ${totalStars}`;
|
||||||
|
}
|
||||||
return `${STATS[key].label}: ${STATS[key].value}`;
|
return `${STATS[key].label}: ${STATS[key].value}`;
|
||||||
})
|
})
|
||||||
.join(", ");
|
.join(", ");
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import {
|
|||||||
import { langCardLocales } from "../translations.js";
|
import { langCardLocales } from "../translations.js";
|
||||||
|
|
||||||
const DEFAULT_CARD_WIDTH = 300;
|
const DEFAULT_CARD_WIDTH = 300;
|
||||||
const MIN_CARD_WIDTH = 230;
|
const MIN_CARD_WIDTH = 280;
|
||||||
const DEFAULT_LANGS_COUNT = 5;
|
const DEFAULT_LANGS_COUNT = 5;
|
||||||
const DEFAULT_LANG_COLOR = "#858585";
|
const DEFAULT_LANG_COLOR = "#858585";
|
||||||
const CARD_PADDING = 25;
|
const CARD_PADDING = 25;
|
||||||
@@ -47,7 +47,6 @@ const getLongestLang = (arr) =>
|
|||||||
* @param {number} props.index Index of the programming language.
|
* @param {number} props.index Index of the programming language.
|
||||||
* @returns {string} Programming language SVG node.
|
* @returns {string} Programming language SVG node.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const createProgressTextNode = ({ width, color, name, progress, index }) => {
|
const createProgressTextNode = ({ width, color, name, progress, index }) => {
|
||||||
const staggerDelay = (index + 3) * 150;
|
const staggerDelay = (index + 3) * 150;
|
||||||
const paddingRight = 95;
|
const paddingRight = 95;
|
||||||
@@ -57,7 +56,7 @@ const createProgressTextNode = ({ width, color, name, progress, index }) => {
|
|||||||
return `
|
return `
|
||||||
<g class="stagger" style="animation-delay: ${staggerDelay}ms">
|
<g class="stagger" style="animation-delay: ${staggerDelay}ms">
|
||||||
<text data-testid="lang-name" x="2" y="15" class="lang-name">${name}</text>
|
<text data-testid="lang-name" x="2" y="15" class="lang-name">${name}</text>
|
||||||
<text x="${progressTextX}" y="34" class="lang-name">${text || `${progress}%`}</text>
|
<text x="${progressTextX}" y="34" class="lang-name">${progress}%</text>
|
||||||
${createProgressNode({
|
${createProgressNode({
|
||||||
x: 0,
|
x: 0,
|
||||||
y: 25,
|
y: 25,
|
||||||
@@ -90,7 +89,7 @@ const createCompactLangNode = ({ lang, totalSize, hideProgress, index }) => {
|
|||||||
<g class="stagger" style="animation-delay: ${staggerDelay}ms">
|
<g class="stagger" style="animation-delay: ${staggerDelay}ms">
|
||||||
<circle cx="5" cy="6" r="5" fill="${color}" />
|
<circle cx="5" cy="6" r="5" fill="${color}" />
|
||||||
<text data-testid="lang-name" x="15" y="10" class='lang-name'>
|
<text data-testid="lang-name" x="15" y="10" class='lang-name'>
|
||||||
${lang.name} ${hideProgress ? "" : (lang.text || `${percentage}%`)}
|
${lang.name} ${hideProgress ? "" : percentage + "%"}
|
||||||
</text>
|
</text>
|
||||||
</g>
|
</g>
|
||||||
`;
|
`;
|
||||||
@@ -127,7 +126,7 @@ const createLanguageTextNode = ({ langs, totalSize, hideProgress }) => {
|
|||||||
|
|
||||||
const percent = ((longestLang.size / totalSize) * 100).toFixed(2);
|
const percent = ((longestLang.size / totalSize) * 100).toFixed(2);
|
||||||
const minGap = 150;
|
const minGap = 150;
|
||||||
const maxGap = 20 + measureText(`${longestLang.name} ${longestLang.text || `${percent}%`}`, 11);
|
const maxGap = 20 + measureText(`${longestLang.name} ${percent}%`, 11);
|
||||||
return flexLayout({
|
return flexLayout({
|
||||||
items: layouts,
|
items: layouts,
|
||||||
gap: maxGap < minGap ? minGap : maxGap,
|
gap: maxGap < minGap ? minGap : maxGap,
|
||||||
@@ -150,7 +149,6 @@ const renderNormalLayout = (langs, width, totalLanguageSize) => {
|
|||||||
name: lang.name,
|
name: lang.name,
|
||||||
color: lang.color || DEFAULT_LANG_COLOR,
|
color: lang.color || DEFAULT_LANG_COLOR,
|
||||||
progress: ((lang.size / totalLanguageSize) * 100).toFixed(2),
|
progress: ((lang.size / totalLanguageSize) * 100).toFixed(2),
|
||||||
text: lang.text,
|
|
||||||
index,
|
index,
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
@@ -280,12 +278,6 @@ const useLanguages = (topLangs, hide, langs_count) => {
|
|||||||
* @returns {string} Language card SVG object.
|
* @returns {string} Language card SVG object.
|
||||||
*/
|
*/
|
||||||
const renderTopLanguages = (topLangs, options = {}) => {
|
const renderTopLanguages = (topLangs, options = {}) => {
|
||||||
const locale = options.locale
|
|
||||||
const i18n = new I18n({
|
|
||||||
locale,
|
|
||||||
translations: langCardLocales,
|
|
||||||
});
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
hide_title = false,
|
hide_title = false,
|
||||||
hide_border,
|
hide_border,
|
||||||
@@ -298,13 +290,18 @@ const renderTopLanguages = (topLangs, options = {}) => {
|
|||||||
theme,
|
theme,
|
||||||
layout,
|
layout,
|
||||||
custom_title,
|
custom_title,
|
||||||
|
locale,
|
||||||
langs_count = DEFAULT_LANGS_COUNT,
|
langs_count = DEFAULT_LANGS_COUNT,
|
||||||
border_radius,
|
border_radius,
|
||||||
border_color,
|
border_color,
|
||||||
title = i18n.t("langcard.title"),
|
|
||||||
disable_animations,
|
disable_animations,
|
||||||
} = options;
|
} = options;
|
||||||
|
|
||||||
|
const i18n = new I18n({
|
||||||
|
locale,
|
||||||
|
translations: langCardLocales,
|
||||||
|
});
|
||||||
|
|
||||||
const { langs, totalLanguageSize } = useLanguages(
|
const { langs, totalLanguageSize } = useLanguages(
|
||||||
topLangs,
|
topLangs,
|
||||||
hide,
|
hide,
|
||||||
@@ -320,7 +317,6 @@ const renderTopLanguages = (topLangs, options = {}) => {
|
|||||||
|
|
||||||
let finalLayout = "";
|
let finalLayout = "";
|
||||||
if (layout === "compact" || hide_progress == true) {
|
if (layout === "compact" || hide_progress == true) {
|
||||||
width = width + 50; // padding
|
|
||||||
height =
|
height =
|
||||||
calculateCompactLayoutHeight(langs.length) + (hide_progress ? -25 : 0);
|
calculateCompactLayoutHeight(langs.length) + (hide_progress ? -25 : 0);
|
||||||
|
|
||||||
@@ -345,7 +341,7 @@ const renderTopLanguages = (topLangs, options = {}) => {
|
|||||||
|
|
||||||
const card = new Card({
|
const card = new Card({
|
||||||
customTitle: custom_title,
|
customTitle: custom_title,
|
||||||
defaultTitle: title,
|
defaultTitle: i18n.t("langcard.title"),
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
border_radius,
|
border_radius,
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ const createTextNode = ({
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
name: label,
|
name: label,
|
||||||
progressBarBackgroundColor,
|
progressBarBackgroundColor,
|
||||||
|
delay: staggerDelay + 300,
|
||||||
});
|
});
|
||||||
|
|
||||||
return `
|
return `
|
||||||
@@ -276,11 +277,12 @@ const renderWakatimeCard = (stats = {}, options = { hide: [] }) => {
|
|||||||
} else {
|
} else {
|
||||||
finalLayout = flexLayout({
|
finalLayout = flexLayout({
|
||||||
items: filteredLanguages.length
|
items: filteredLanguages.length
|
||||||
? filteredLanguages.map((language) => {
|
? filteredLanguages.map((language, index) => {
|
||||||
return createTextNode({
|
return createTextNode({
|
||||||
id: language.name,
|
id: language.name,
|
||||||
label: language.name,
|
label: language.name,
|
||||||
value: language.text,
|
value: language.text,
|
||||||
|
index: index,
|
||||||
percent: language.percent,
|
percent: language.percent,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
progressBarColor: titleColor,
|
progressBarColor: titleColor,
|
||||||
@@ -321,7 +323,29 @@ const renderWakatimeCard = (stats = {}, options = { hide: [] }) => {
|
|||||||
card.setCSS(
|
card.setCSS(
|
||||||
`
|
`
|
||||||
${cssStyles}
|
${cssStyles}
|
||||||
|
@keyframes slideInAnimation {
|
||||||
|
from {
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
width: calc(100%-100px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes growWidthAnimation {
|
||||||
|
from {
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: ${textColor} }
|
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: ${textColor} }
|
||||||
|
#rect-mask rect{
|
||||||
|
animation: slideInAnimation 1s ease-in-out forwards;
|
||||||
|
}
|
||||||
|
.lang-progress{
|
||||||
|
animation: growWidthAnimation 0.6s ease-in-out forwards;
|
||||||
|
}
|
||||||
`,
|
`,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -79,6 +79,7 @@
|
|||||||
"Ceylon": "#dfa535",
|
"Ceylon": "#dfa535",
|
||||||
"Chapel": "#8dc63f",
|
"Chapel": "#8dc63f",
|
||||||
"ChucK": "#3f8000",
|
"ChucK": "#3f8000",
|
||||||
|
"Circom": "#707575",
|
||||||
"Cirru": "#ccccff",
|
"Cirru": "#ccccff",
|
||||||
"Clarion": "#db901e",
|
"Clarion": "#db901e",
|
||||||
"Clarity": "#5546ff",
|
"Clarity": "#5546ff",
|
||||||
@@ -116,6 +117,7 @@
|
|||||||
"DirectX 3D File": "#aace60",
|
"DirectX 3D File": "#aace60",
|
||||||
"Dockerfile": "#384d54",
|
"Dockerfile": "#384d54",
|
||||||
"Dogescript": "#cca760",
|
"Dogescript": "#cca760",
|
||||||
|
"Dotenv": "#e5d559",
|
||||||
"Dylan": "#6c616e",
|
"Dylan": "#6c616e",
|
||||||
"E": "#ccce35",
|
"E": "#ccce35",
|
||||||
"ECL": "#8a1267",
|
"ECL": "#8a1267",
|
||||||
@@ -149,7 +151,7 @@
|
|||||||
"Forth": "#341708",
|
"Forth": "#341708",
|
||||||
"Fortran": "#4d41b1",
|
"Fortran": "#4d41b1",
|
||||||
"Fortran Free Form": "#4d41b1",
|
"Fortran Free Form": "#4d41b1",
|
||||||
"FreeBasic": "#867db1",
|
"FreeBasic": "#141AC9",
|
||||||
"FreeMarker": "#0050b2",
|
"FreeMarker": "#0050b2",
|
||||||
"Frege": "#00cafe",
|
"Frege": "#00cafe",
|
||||||
"Futhark": "#5f021f",
|
"Futhark": "#5f021f",
|
||||||
@@ -182,6 +184,7 @@
|
|||||||
"Go": "#00ADD8",
|
"Go": "#00ADD8",
|
||||||
"Go Checksums": "#00ADD8",
|
"Go Checksums": "#00ADD8",
|
||||||
"Go Module": "#00ADD8",
|
"Go Module": "#00ADD8",
|
||||||
|
"Godot Resource": "#355570",
|
||||||
"Golo": "#88562A",
|
"Golo": "#88562A",
|
||||||
"Gosu": "#82937f",
|
"Gosu": "#82937f",
|
||||||
"Grace": "#615f8b",
|
"Grace": "#615f8b",
|
||||||
@@ -192,6 +195,7 @@
|
|||||||
"Groovy": "#4298b8",
|
"Groovy": "#4298b8",
|
||||||
"Groovy Server Pages": "#4298b8",
|
"Groovy Server Pages": "#4298b8",
|
||||||
"HAProxy": "#106da9",
|
"HAProxy": "#106da9",
|
||||||
|
"HCL": "#844FBA",
|
||||||
"HLSL": "#aace60",
|
"HLSL": "#aace60",
|
||||||
"HOCON": "#9ff8ee",
|
"HOCON": "#9ff8ee",
|
||||||
"HTML": "#e34c26",
|
"HTML": "#e34c26",
|
||||||
@@ -225,6 +229,7 @@
|
|||||||
"Isabelle ROOT": "#FEFE00",
|
"Isabelle ROOT": "#FEFE00",
|
||||||
"J": "#9EEDFF",
|
"J": "#9EEDFF",
|
||||||
"JAR Manifest": "#b07219",
|
"JAR Manifest": "#b07219",
|
||||||
|
"JCL": "#d90e09",
|
||||||
"JFlex": "#DBCA00",
|
"JFlex": "#DBCA00",
|
||||||
"JSON": "#292929",
|
"JSON": "#292929",
|
||||||
"JSON with Comments": "#292929",
|
"JSON with Comments": "#292929",
|
||||||
@@ -247,9 +252,11 @@
|
|||||||
"Jsonnet": "#0064bd",
|
"Jsonnet": "#0064bd",
|
||||||
"Julia": "#a270ba",
|
"Julia": "#a270ba",
|
||||||
"Jupyter Notebook": "#DA5B0B",
|
"Jupyter Notebook": "#DA5B0B",
|
||||||
|
"Just": "#384d54",
|
||||||
"KRL": "#28430A",
|
"KRL": "#28430A",
|
||||||
"Kaitai Struct": "#773b37",
|
"Kaitai Struct": "#773b37",
|
||||||
"KakouneScript": "#6f8042",
|
"KakouneScript": "#6f8042",
|
||||||
|
"KerboScript": "#41adf0",
|
||||||
"KiCad Layout": "#2f4aab",
|
"KiCad Layout": "#2f4aab",
|
||||||
"KiCad Legacy Layout": "#2f4aab",
|
"KiCad Legacy Layout": "#2f4aab",
|
||||||
"KiCad Schematic": "#2f4aab",
|
"KiCad Schematic": "#2f4aab",
|
||||||
@@ -362,6 +369,7 @@
|
|||||||
"PicoLisp": "#6067af",
|
"PicoLisp": "#6067af",
|
||||||
"PigLatin": "#fcd7de",
|
"PigLatin": "#fcd7de",
|
||||||
"Pike": "#005390",
|
"Pike": "#005390",
|
||||||
|
"PlantUML": "#fbbd16",
|
||||||
"PogoScript": "#d80074",
|
"PogoScript": "#d80074",
|
||||||
"Polar": "#ae81ff",
|
"Polar": "#ae81ff",
|
||||||
"Portugol": "#f8bd00",
|
"Portugol": "#f8bd00",
|
||||||
@@ -379,6 +387,7 @@
|
|||||||
"Puppet": "#302B6D",
|
"Puppet": "#302B6D",
|
||||||
"PureBasic": "#5a6986",
|
"PureBasic": "#5a6986",
|
||||||
"PureScript": "#1D222D",
|
"PureScript": "#1D222D",
|
||||||
|
"Pyret": "#ee1e10",
|
||||||
"Python": "#3572A5",
|
"Python": "#3572A5",
|
||||||
"Python console": "#3572A5",
|
"Python console": "#3572A5",
|
||||||
"Python traceback": "#3572A5",
|
"Python traceback": "#3572A5",
|
||||||
@@ -531,7 +540,6 @@
|
|||||||
"fish": "#4aae47",
|
"fish": "#4aae47",
|
||||||
"hoon": "#00b171",
|
"hoon": "#00b171",
|
||||||
"jq": "#c7254e",
|
"jq": "#c7254e",
|
||||||
"just": "#384d54",
|
|
||||||
"kvlang": "#1da6e0",
|
"kvlang": "#1da6e0",
|
||||||
"mIRC Script": "#3d57c3",
|
"mIRC Script": "#3d57c3",
|
||||||
"mcfunction": "#E22837",
|
"mcfunction": "#E22837",
|
||||||
|
|||||||
@@ -69,7 +69,29 @@ exports[`Test Render Wakatime Card should render correctly with compact layout 1
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@keyframes slideInAnimation {
|
||||||
|
from {
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
width: calc(100%-100px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes growWidthAnimation {
|
||||||
|
from {
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
|
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
|
||||||
|
#rect-mask rect{
|
||||||
|
animation: slideInAnimation 1s ease-in-out forwards;
|
||||||
|
}
|
||||||
|
.lang-progress{
|
||||||
|
animation: growWidthAnimation 0.6s ease-in-out forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -227,7 +249,29 @@ exports[`Test Render Wakatime Card should render correctly with compact layout w
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@keyframes slideInAnimation {
|
||||||
|
from {
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
width: calc(100%-100px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes growWidthAnimation {
|
||||||
|
from {
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
|
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
|
||||||
|
#rect-mask rect{
|
||||||
|
animation: slideInAnimation 1s ease-in-out forwards;
|
||||||
|
}
|
||||||
|
.lang-progress{
|
||||||
|
animation: growWidthAnimation 0.6s ease-in-out forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,14 +15,14 @@ const REPO = "curly-fiesta";
|
|||||||
const USER = "catelinemnemosyne";
|
const USER = "catelinemnemosyne";
|
||||||
const STATS_DATA = {
|
const STATS_DATA = {
|
||||||
name: "Cateline Mnemosyne",
|
name: "Cateline Mnemosyne",
|
||||||
totalPRs: 1,
|
totalPRs: 2,
|
||||||
totalCommits: 7,
|
totalCommits: 8,
|
||||||
totalIssues: 1,
|
totalIssues: 1,
|
||||||
totalStars: 1,
|
totalStars: 1,
|
||||||
contributedTo: 1,
|
contributedTo: 1,
|
||||||
rank: {
|
rank: {
|
||||||
level: "A+",
|
level: "A+",
|
||||||
score: 50.893750297869225,
|
score: 50.88831151384285,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ describe("Test renderTopLanguages", () => {
|
|||||||
);
|
);
|
||||||
expect(queryAllByTestId(document.body, "lang-progress")[0]).toHaveAttribute(
|
expect(queryAllByTestId(document.body, "lang-progress")[0]).toHaveAttribute(
|
||||||
"width",
|
"width",
|
||||||
"120",
|
"100",
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(queryAllByTestId(document.body, "lang-name")[1]).toHaveTextContent(
|
expect(queryAllByTestId(document.body, "lang-name")[1]).toHaveTextContent(
|
||||||
@@ -224,7 +224,7 @@ describe("Test renderTopLanguages", () => {
|
|||||||
);
|
);
|
||||||
expect(queryAllByTestId(document.body, "lang-progress")[1]).toHaveAttribute(
|
expect(queryAllByTestId(document.body, "lang-progress")[1]).toHaveAttribute(
|
||||||
"width",
|
"width",
|
||||||
"120",
|
"100",
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(queryAllByTestId(document.body, "lang-name")[2]).toHaveTextContent(
|
expect(queryAllByTestId(document.body, "lang-name")[2]).toHaveTextContent(
|
||||||
@@ -232,7 +232,7 @@ describe("Test renderTopLanguages", () => {
|
|||||||
);
|
);
|
||||||
expect(queryAllByTestId(document.body, "lang-progress")[2]).toHaveAttribute(
|
expect(queryAllByTestId(document.body, "lang-progress")[2]).toHaveAttribute(
|
||||||
"width",
|
"width",
|
||||||
"60",
|
"50",
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
+167
@@ -12,6 +12,12 @@ export const themes = {
|
|||||||
text_color: "434d58",
|
text_color: "434d58",
|
||||||
bg_color: "fffefe",
|
bg_color: "fffefe",
|
||||||
},
|
},
|
||||||
|
"default-repocard": {
|
||||||
|
title_color: "2f80ed",
|
||||||
|
icon_color: "586069", // icon color is different
|
||||||
|
text_color: "434d58",
|
||||||
|
bg_color: "fffefe",
|
||||||
|
},
|
||||||
transparent: {
|
transparent: {
|
||||||
title_color: "006AFF",
|
title_color: "006AFF",
|
||||||
icon_color: "0579C3",
|
icon_color: "0579C3",
|
||||||
@@ -48,6 +54,12 @@ export const themes = {
|
|||||||
text_color: "427b58",
|
text_color: "427b58",
|
||||||
bg_color: "fbf1c7",
|
bg_color: "fbf1c7",
|
||||||
},
|
},
|
||||||
|
"gruvbox-light": {
|
||||||
|
title_color: "b57614",
|
||||||
|
icon_color: "af3a03",
|
||||||
|
text_color: "427b58",
|
||||||
|
bg_color: "fbf1c7",
|
||||||
|
},
|
||||||
tokyonight: {
|
tokyonight: {
|
||||||
title_color: "70a5fd",
|
title_color: "70a5fd",
|
||||||
icon_color: "bf91f3",
|
icon_color: "bf91f3",
|
||||||
@@ -108,12 +120,24 @@ export const themes = {
|
|||||||
text_color: "fffefe",
|
text_color: "fffefe",
|
||||||
bg_color: "273849",
|
bg_color: "273849",
|
||||||
},
|
},
|
||||||
|
vue_dark: {
|
||||||
|
title_color: "41b883",
|
||||||
|
icon_color: "41b883",
|
||||||
|
text_color: "fffefe",
|
||||||
|
bg_color: "273849",
|
||||||
|
},
|
||||||
"shades-of-purple": {
|
"shades-of-purple": {
|
||||||
title_color: "fad000",
|
title_color: "fad000",
|
||||||
icon_color: "b362ff",
|
icon_color: "b362ff",
|
||||||
text_color: "a599e9",
|
text_color: "a599e9",
|
||||||
bg_color: "2d2b55",
|
bg_color: "2d2b55",
|
||||||
},
|
},
|
||||||
|
shades_of_purple: {
|
||||||
|
title_color: "fad000",
|
||||||
|
icon_color: "b362ff",
|
||||||
|
text_color: "a599e9",
|
||||||
|
bg_color: "2d2b55",
|
||||||
|
},
|
||||||
nightowl: {
|
nightowl: {
|
||||||
title_color: "c792ea",
|
title_color: "c792ea",
|
||||||
icon_color: "ffeb95",
|
icon_color: "ffeb95",
|
||||||
@@ -132,6 +156,12 @@ export const themes = {
|
|||||||
text_color: "0cf574",
|
text_color: "0cf574",
|
||||||
bg_color: "040f0f",
|
bg_color: "040f0f",
|
||||||
},
|
},
|
||||||
|
blue_green: {
|
||||||
|
title_color: "2f97c1",
|
||||||
|
icon_color: "f5b700",
|
||||||
|
text_color: "0cf574",
|
||||||
|
bg_color: "040f0f",
|
||||||
|
},
|
||||||
algolia: {
|
algolia: {
|
||||||
title_color: "00AEFF",
|
title_color: "00AEFF",
|
||||||
icon_color: "2DDE98",
|
icon_color: "2DDE98",
|
||||||
@@ -144,6 +174,12 @@ export const themes = {
|
|||||||
text_color: "ffd95b",
|
text_color: "ffd95b",
|
||||||
bg_color: "000000",
|
bg_color: "000000",
|
||||||
},
|
},
|
||||||
|
great_gatsby: {
|
||||||
|
title_color: "ffa726",
|
||||||
|
icon_color: "ffb74d",
|
||||||
|
text_color: "ffd95b",
|
||||||
|
bg_color: "000000",
|
||||||
|
},
|
||||||
darcula: {
|
darcula: {
|
||||||
title_color: "BA5F17",
|
title_color: "BA5F17",
|
||||||
icon_color: "84628F",
|
icon_color: "84628F",
|
||||||
@@ -174,6 +210,24 @@ export const themes = {
|
|||||||
text_color: "fff",
|
text_color: "fff",
|
||||||
bg_color: "000",
|
bg_color: "000",
|
||||||
},
|
},
|
||||||
|
solarized_dark: {
|
||||||
|
title_color: "268bd2",
|
||||||
|
icon_color: "b58900",
|
||||||
|
text_color: "859900",
|
||||||
|
bg_color: "002b36",
|
||||||
|
},
|
||||||
|
solarized_light: {
|
||||||
|
title_color: "268bd2",
|
||||||
|
icon_color: "b58900",
|
||||||
|
text_color: "859900",
|
||||||
|
bg_color: "fdf6e3",
|
||||||
|
},
|
||||||
|
chartreuse_dark: {
|
||||||
|
title_color: "7fff00",
|
||||||
|
icon_color: "00AEFF",
|
||||||
|
text_color: "fff",
|
||||||
|
bg_color: "000",
|
||||||
|
},
|
||||||
nord: {
|
nord: {
|
||||||
title_color: "81a1c1",
|
title_color: "81a1c1",
|
||||||
text_color: "d8dee9",
|
text_color: "d8dee9",
|
||||||
@@ -192,6 +246,12 @@ export const themes = {
|
|||||||
text_color: "a6accd",
|
text_color: "a6accd",
|
||||||
bg_color: "292d3e",
|
bg_color: "292d3e",
|
||||||
},
|
},
|
||||||
|
material_palenight: {
|
||||||
|
title_color: "c792ea",
|
||||||
|
icon_color: "89ddff",
|
||||||
|
text_color: "a6accd",
|
||||||
|
bg_color: "292d3e",
|
||||||
|
},
|
||||||
graywhite: {
|
graywhite: {
|
||||||
title_color: "24292e",
|
title_color: "24292e",
|
||||||
icon_color: "24292e",
|
icon_color: "24292e",
|
||||||
@@ -216,6 +276,24 @@ export const themes = {
|
|||||||
text_color: "ffffff",
|
text_color: "ffffff",
|
||||||
bg_color: "000000",
|
bg_color: "000000",
|
||||||
},
|
},
|
||||||
|
vision_friendly_dark: {
|
||||||
|
title_color: "ffb000",
|
||||||
|
icon_color: "785ef0",
|
||||||
|
text_color: "ffffff",
|
||||||
|
bg_color: "000000",
|
||||||
|
},
|
||||||
|
ayu_mirage: {
|
||||||
|
title_color: "f4cd7c",
|
||||||
|
icon_color: "73d0ff",
|
||||||
|
text_color: "c7c8c2",
|
||||||
|
bg_color: "1f2430",
|
||||||
|
},
|
||||||
|
midnight_purple: {
|
||||||
|
title_color: "9745f5",
|
||||||
|
icon_color: "9f4bff",
|
||||||
|
text_color: "ffffff",
|
||||||
|
bg_color: "000000",
|
||||||
|
},
|
||||||
calm: {
|
calm: {
|
||||||
title_color: "e07a5f",
|
title_color: "e07a5f",
|
||||||
icon_color: "edae49",
|
icon_color: "edae49",
|
||||||
@@ -228,6 +306,12 @@ export const themes = {
|
|||||||
text_color: "509E2F",
|
text_color: "509E2F",
|
||||||
bg_color: "ffffff",
|
bg_color: "ffffff",
|
||||||
},
|
},
|
||||||
|
flag_india: {
|
||||||
|
title_color: "ff8f1c",
|
||||||
|
icon_color: "250E62",
|
||||||
|
text_color: "509E2F",
|
||||||
|
bg_color: "ffffff",
|
||||||
|
},
|
||||||
omni: {
|
omni: {
|
||||||
title_color: "FF79C6",
|
title_color: "FF79C6",
|
||||||
icon_color: "e7de79",
|
icon_color: "e7de79",
|
||||||
@@ -276,6 +360,12 @@ export const themes = {
|
|||||||
text_color: "d9c8a9",
|
text_color: "d9c8a9",
|
||||||
bg_color: "402b23",
|
bg_color: "402b23",
|
||||||
},
|
},
|
||||||
|
"kacho-ga": {
|
||||||
|
title_color: "bf4a3f",
|
||||||
|
icon_color: "a64833",
|
||||||
|
text_color: "d9c8a9",
|
||||||
|
bg_color: "402b23",
|
||||||
|
},
|
||||||
outrun: {
|
outrun: {
|
||||||
title_color: "ffcc00",
|
title_color: "ffcc00",
|
||||||
icon_color: "ff1aff",
|
icon_color: "ff1aff",
|
||||||
@@ -294,6 +384,18 @@ export const themes = {
|
|||||||
text_color: "718CA1",
|
text_color: "718CA1",
|
||||||
bg_color: "1D252C",
|
bg_color: "1D252C",
|
||||||
},
|
},
|
||||||
|
"ocean-dark": {
|
||||||
|
title_color: "8957B2",
|
||||||
|
icon_color: "FFFFFF",
|
||||||
|
text_color: "92D534",
|
||||||
|
bg_color: "151A28",
|
||||||
|
},
|
||||||
|
"city-lights": {
|
||||||
|
title_color: "5D8CB3",
|
||||||
|
icon_color: "4798FF",
|
||||||
|
text_color: "718CA1",
|
||||||
|
bg_color: "1D252C",
|
||||||
|
},
|
||||||
github_dark: {
|
github_dark: {
|
||||||
title_color: "58A6FF",
|
title_color: "58A6FF",
|
||||||
icon_color: "1F6FEB",
|
icon_color: "1F6FEB",
|
||||||
@@ -312,6 +414,24 @@ export const themes = {
|
|||||||
text_color: "dbdbdb",
|
text_color: "dbdbdb",
|
||||||
bg_color: "252334",
|
bg_color: "252334",
|
||||||
},
|
},
|
||||||
|
"github-dark": {
|
||||||
|
title_color: "58A6FF",
|
||||||
|
icon_color: "1F6FEB",
|
||||||
|
text_color: "C3D1D9",
|
||||||
|
bg_color: "0D1117",
|
||||||
|
},
|
||||||
|
"discord-old-blurple": {
|
||||||
|
title_color: "7289DA",
|
||||||
|
icon_color: "7289DA",
|
||||||
|
text_color: "FFFFFF",
|
||||||
|
bg_color: "2C2F33",
|
||||||
|
},
|
||||||
|
"aura-dark": {
|
||||||
|
title_color: "ff7372",
|
||||||
|
icon_color: "6cffd0",
|
||||||
|
text_color: "dbdbdb",
|
||||||
|
bg_color: "252334",
|
||||||
|
},
|
||||||
panda: {
|
panda: {
|
||||||
title_color: "19f9d899",
|
title_color: "19f9d899",
|
||||||
icon_color: "19f9d899",
|
icon_color: "19f9d899",
|
||||||
@@ -324,6 +444,12 @@ export const themes = {
|
|||||||
text_color: "c5cdd3",
|
text_color: "c5cdd3",
|
||||||
bg_color: "1b2932",
|
bg_color: "1b2932",
|
||||||
},
|
},
|
||||||
|
"noctis-minimus": {
|
||||||
|
title_color: "d3b692",
|
||||||
|
icon_color: "72b7c0",
|
||||||
|
text_color: "c5cdd3",
|
||||||
|
bg_color: "1b2932",
|
||||||
|
},
|
||||||
cobalt2: {
|
cobalt2: {
|
||||||
title_color: "ffc600",
|
title_color: "ffc600",
|
||||||
icon_color: "ffffff",
|
icon_color: "ffffff",
|
||||||
@@ -374,6 +500,33 @@ export const themes = {
|
|||||||
border_color: "170F0C",
|
border_color: "170F0C",
|
||||||
bg_color: "170F0C",
|
bg_color: "170F0C",
|
||||||
},
|
},
|
||||||
|
one_dark_pro: {
|
||||||
|
title_color: "61AFEF",
|
||||||
|
text_color: "E5C06E",
|
||||||
|
icon_color: "C678DD",
|
||||||
|
border_color: "3B4048",
|
||||||
|
bg_color: "23272E",
|
||||||
|
},
|
||||||
|
"rose-pine": {
|
||||||
|
title_color: "9ccfd8",
|
||||||
|
icon_color: "ebbcba",
|
||||||
|
text_color: "e0def4",
|
||||||
|
bg_color: "191724",
|
||||||
|
},
|
||||||
|
"date-night": {
|
||||||
|
title_color: "DA7885",
|
||||||
|
text_color: "E1B2A2",
|
||||||
|
icon_color: "BB8470",
|
||||||
|
border_color: "170F0C",
|
||||||
|
bg_color: "170F0C",
|
||||||
|
},
|
||||||
|
"one-dark-pro": {
|
||||||
|
title_color: "61AFEF",
|
||||||
|
text_color: "E5C06E",
|
||||||
|
icon_color: "C678DD",
|
||||||
|
border_color: "3B4048",
|
||||||
|
bg_color: "23272E",
|
||||||
|
},
|
||||||
rose: {
|
rose: {
|
||||||
title_color: "8d192b",
|
title_color: "8d192b",
|
||||||
text_color: "862931",
|
text_color: "862931",
|
||||||
@@ -381,6 +534,20 @@ export const themes = {
|
|||||||
border_color: "e9d8d4",
|
border_color: "e9d8d4",
|
||||||
bg_color: "e9d8d4",
|
bg_color: "e9d8d4",
|
||||||
},
|
},
|
||||||
|
holi_theme: {
|
||||||
|
title_color: "5FABEE",
|
||||||
|
text_color: "D6E7FF",
|
||||||
|
icon_color: "5FABEE",
|
||||||
|
border_color: "85A4C0",
|
||||||
|
bg_color: "030314",
|
||||||
|
},
|
||||||
|
"holi-theme": {
|
||||||
|
title_color: "5FABEE",
|
||||||
|
text_color: "D6E7FF",
|
||||||
|
icon_color: "5FABEE",
|
||||||
|
border_color: "85A4C0",
|
||||||
|
bg_color: "030314",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default themes;
|
export default themes;
|
||||||
|
|||||||
Reference in New Issue
Block a user