diff --git a/astro.config.mjs b/astro.config.mjs index 554c341..391f5b4 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -28,7 +28,9 @@ export default defineConfig({ ], customCss: [ // Add tailwind base styles: - "./src/assets/styles/tailwind.css", + "./src/styles/tailwind.css", + "./src/styles/vgv_brand.css", + "./src/styles/theme.css", "@fontsource/poppins/100.css", "@fontsource/poppins/200.css", "@fontsource/poppins/300.css", @@ -118,6 +120,10 @@ export default defineConfig({ }, }, ], + components: { + TwoColumnContent: + "./src/components/vgv_footer/vgv-two-column-content.astro", + }, }), react(), mdx(), diff --git a/cspell.json b/cspell.json index 2ebf5ad..ff37964 100644 --- a/cspell.json +++ b/cspell.json @@ -4,27 +4,100 @@ "ignorePaths": ["node_modules/**", ".**/"], "files": ["**/*.md", "**/*.mdx", "**/*.tsx", "**/*.ts", "**/*.json"], "words": [ + "ABAP", + "Abuild", + "Agda", + "AMPL", + "ANTLR", "astro", "astrojs", + "Augeas", + "Batchfile", + "Befunge", + "Bluespec", + "Brightscript", + "Carto", + "Cirru", + "Codemagic", + "Crunscript", + "Csound", + "Cuda", "Cupertino", + "Cycript", + "Cython", + "Diátaxis", + "Dogescript", + "Eclass", + "Filebench", + "Filterscript", "fontsource", + "Frege", + "Genshi", + "GLSL", "goldens", + "Golo", + "Gosu", + "Haxe", + "HLSL", + "Hola", + "Idris", "incentivized", + "Inno", + "Ioke", + "Ishida", + "Jasmin", + "Jison", + "Jolie", "laboratoria", + "Linx", + "Logtalk", + "LOLCODE", + "Mathematica", "mdlint", + "merch", + "Mirah", + "Modelica", + "Moocode", + "MTML", "multiplatform", + "Mundo", + "mupad", + "Myghty", + "Nearley", + "Nemerle", + "NSIS", + "Omgrofl", + "Oxygene", + "Pico", + "PLSQL", "pubspec", + "Pythonconsole", + "Ragel", + "RAML", + "Rebol", + "Redcode", + "Ren'Py", + "REXX", + "Roff", "rxdart", + "Scilab", + "Shen", + "Smali", + "SQLPL", + "Stata", "statefulshellroute", "tailwindcss", "Tappable", + "Tcsh", "todos", "tsconfigs", - "Codemagic", - "Diátaxis", - "Ishida", - "Hola", - "Mundo", - "merch" + "Vala", + "Verilog", + "VGVENTURES", + "VHDL", + "Vimscript", + "Xojo", + "Zephir", + "Zimpl" ] } diff --git a/package-lock.json b/package-lock.json index 183080e..6785fb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,8 @@ }, "devDependencies": { "@laboratoria/mdlint": "^1.2.3", + "@octokit/rest": "^21.0.1", + "@octokit/types": "^13.5.0", "eslint": "^9.3.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-astro": "^1.2.0", @@ -2336,6 +2338,159 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@octokit/auth-token": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz", + "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz", + "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==", + "dev": true, + "dependencies": { + "@octokit/auth-token": "^5.0.0", + "@octokit/graphql": "^8.0.0", + "@octokit/request": "^9.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^3.0.2", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz", + "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==", + "dev": true, + "dependencies": { + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/graphql": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz", + "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==", + "dev": true, + "dependencies": { + "@octokit/request": "^9.0.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.3.tgz", + "integrity": "sha512-o4WRoOJZlKqEEgj+i9CpcmnByvtzoUYC6I8PD2SA95M+BJ2x8h7oLcVOg9qcowWXBOdcTRsMZiwvM3EyLm9AfA==", + "dev": true, + "dependencies": { + "@octokit/types": "^13.5.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz", + "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==", + "dev": true, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.4.tgz", + "integrity": "sha512-gusyAVgTrPiuXOdfqOySMDztQHv6928PQ3E4dqVGEtOvRXAKRbJR4b1zQyniIT9waqaWk/UDaoJ2dyPr7Bk7Iw==", + "dev": true, + "dependencies": { + "@octokit/types": "^13.5.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/request": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.3.tgz", + "integrity": "sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^10.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.4.tgz", + "integrity": "sha512-VpAhIUxwhWZQImo/dWAN/NpPqqojR6PSLgLYAituLM6U+ddx9hCioFGwBr5Mi+oi5CLeJkcAs3gJ0PYYzU6wUg==", + "dev": true, + "dependencies": { + "@octokit/types": "^13.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/rest": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.0.1.tgz", + "integrity": "sha512-RWA6YU4CqK0h0J6tfYlUFnH3+YgBADlxaHXaKSG+BVr2y4PTfbU2tlKuaQoQZ83qaTbi4CUxLNAmbAqR93A6mQ==", + "dev": true, + "dependencies": { + "@octokit/core": "^6.1.2", + "@octokit/plugin-paginate-rest": "^11.0.0", + "@octokit/plugin-request-log": "^5.3.1", + "@octokit/plugin-rest-endpoint-methods": "^13.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/types": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", + "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, "node_modules/@pagefind/darwin-arm64": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.1.0.tgz", @@ -3557,6 +3712,12 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/before-after-hook": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", + "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", + "dev": true + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -10202,6 +10363,12 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/universal-user-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", + "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", + "dev": true + }, "node_modules/update-browserslist-db": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", diff --git a/package.json b/package.json index 91917b6..bba4e60 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,8 @@ }, "devDependencies": { "@laboratoria/mdlint": "^1.2.3", + "@octokit/rest": "^21.0.1", + "@octokit/types": "^13.5.0", "eslint": "^9.3.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-astro": "^1.2.0", diff --git a/src/assets/hero/hero_dark.png b/src/assets/hero/hero_dark.png new file mode 100644 index 0000000..31e01c2 Binary files /dev/null and b/src/assets/hero/hero_dark.png differ diff --git a/src/assets/hero/hero_light.png b/src/assets/hero/hero_light.png new file mode 100644 index 0000000..7dea6a7 Binary files /dev/null and b/src/assets/hero/hero_light.png differ diff --git a/src/assets/logos/vgv_wordmark_dark.svg b/src/assets/logos/vgv_wordmark_dark.svg new file mode 100644 index 0000000..a78dd48 --- /dev/null +++ b/src/assets/logos/vgv_wordmark_dark.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/branding/pattern-2.astro b/src/components/branding/pattern-2.astro new file mode 100644 index 0000000..9012b5a --- /dev/null +++ b/src/components/branding/pattern-2.astro @@ -0,0 +1,36 @@ +--- + +--- + + + + + + + + + + + + + diff --git a/src/components/github_card/components/forks.astro b/src/components/github_card/components/forks.astro new file mode 100644 index 0000000..a04cfc3 --- /dev/null +++ b/src/components/github_card/components/forks.astro @@ -0,0 +1,23 @@ +--- +import css from "../github-card.module.css"; + +export interface Props { + forks: number; +} + +const props = Astro.props; +--- + +
+ + + +
+ {props.forks} + Forks +
+
diff --git a/src/components/github_card/components/language.astro b/src/components/github_card/components/language.astro new file mode 100644 index 0000000..bff9e7d --- /dev/null +++ b/src/components/github_card/components/language.astro @@ -0,0 +1,22 @@ +--- +import type { LanguageColor } from "~/utils/github_languages"; +import css from "../github-card.module.css"; + +export interface Props { + language: string | null; + languageColor: LanguageColor | null; +} + +const props = Astro.props; +--- + +
+ +
+ {props.language ?? ""} +
+
diff --git a/src/components/github_card/components/stars.astro b/src/components/github_card/components/stars.astro new file mode 100644 index 0000000..a1f1bbd --- /dev/null +++ b/src/components/github_card/components/stars.astro @@ -0,0 +1,23 @@ +--- +import css from "../github-card.module.css"; + +export interface Props { + stars: number; +} + +const props = Astro.props; +--- + +
+ + + +
+ {props.stars} + Stars +
+
diff --git a/src/components/github_card/github-card.astro b/src/components/github_card/github-card.astro new file mode 100644 index 0000000..47c5054 --- /dev/null +++ b/src/components/github_card/github-card.astro @@ -0,0 +1,41 @@ +--- +import Icon from "node_modules/@astrojs/starlight/user-components/Icon.astro"; +import { getRepositories } from "~/utils/github_repositories"; +import Forks from "./components/forks.astro"; +import Language from "./components/language.astro"; +import Stars from "./components/stars.astro"; +import css from "./github-card.module.css"; + +export interface Props { + organizationOrUser: string; + repo: string; + logo?: string; +} + +const repos = await getRepositories(); +const props = Astro.props; + +const id = `${props.organizationOrUser}/${props.repo}`; +const repo = repos[id]!; +--- + + +
+
+ +
+
+

{props.organizationOrUser}/

+

{props.repo}

+
+
+ +
+
+
{repo.description}
+ +
diff --git a/src/components/github_card/github-card.module.css b/src/components/github_card/github-card.module.css new file mode 100644 index 0000000..b7264f1 --- /dev/null +++ b/src/components/github_card/github-card.module.css @@ -0,0 +1,145 @@ +.ghCard { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + background-color: var(--vgv-card-bg); + padding: 12px 18px; + border-radius: 8px; + color: var(--vgv-card-fg); + + transition: all 0.08s ease; + filter: var(--vgv-card-shadow); +} + +.ghCard:hover, +.ghCard:visited, +.ghCard:link, +.ghCard:active { + text-decoration: none !important; + color: var(--vgv-card-fg); +} + +.ghCard:hover { + filter: var(--vgv-card-shadow-hover); + background-color: var(--vgv-card-bg-hover); +} + +.ghCard:hover .headerTitle { + text-decoration: underline; +} + +.header { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: flex-end; +} + +.ghLogo { + align-self: flex-start; + margin-top: 4px; + margin-right: 8px; +} + +.headerTitle { + display: flex; + align-self: flex-start; + flex-direction: column; + justify-content: space-between; + /* min-width: 0px; */ + flex-grow: 1; + margin-top: 0px !important; +} + +.headerTitle h1 { + font-weight: 700; + font-size: 1.25rem; + margin: 0px !important; +} + +.headerTitle h2 { + font-weight: 400; + font-size: 1rem; + margin: 0px !important; +} + +.headerLogo { + flex-basis: 2.2rem; + /* min-width: 60px; */ + max-width: 60px; + flex-grow: 1; + align-self: stretch; +} + +.description { + opacity: 0.7; + margin-top: 8px; + flex-grow: 1; +} + +.description:hover { + text-decoration: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + border-bottom: none !important; +} + +.footer { + display: flex; + flex-direction: row; + flex-grow: 0; + justify-content: flex-start; + align-items: center; + margin-top: 16px; + padding: 0px 0px; +} + +.footerItem { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: flex-start; + align-self: end; + margin-right: 20px; +} + +.footerItemLanguages { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-self: center; +} + +.symbolAndLabel { + display: flex; + flex-direction: row; + justify-content: center; + align-items: baseline; + margin-left: 8px; + line-height: 1rem; + margin-top: 0px !important; + font-size: 0.85rem; +} + +.symbolAndLabel .symbol { + width: 100%; + font-weight: 500; + margin-right: 4px; +} + +.symbolAndLabel .label { + font-weight: 300; + margin-top: 4px; +} + +.langColor { + width: 10px; + height: 10px; + margin-top: 3px; + margin-right: 0px; + background-color: currentcolor; + border-radius: 100%; + display: inline-block; +} diff --git a/src/components/vgv_footer/vgv-footer.astro b/src/components/vgv_footer/vgv-footer.astro new file mode 100644 index 0000000..50afd56 --- /dev/null +++ b/src/components/vgv_footer/vgv-footer.astro @@ -0,0 +1,97 @@ +--- +import CallToAction from "@astrojs/starlight/components/CallToAction.astro"; +import { Image } from "astro:assets"; +import VGVWordmarkDark from "~/assets/logos/vgv_wordmark_dark.svg"; +import Pattern2 from "~/components/branding/pattern-2.astro"; +--- + +
+
+ +
+
+ + + diff --git a/src/components/vgv_footer/vgv-two-column-content.astro b/src/components/vgv_footer/vgv-two-column-content.astro new file mode 100644 index 0000000..f783c8e --- /dev/null +++ b/src/components/vgv_footer/vgv-two-column-content.astro @@ -0,0 +1,102 @@ +--- +import Default from "@astrojs/starlight/components/TwoColumnContent.astro"; +import type { Props as PageFrameProps } from "@astrojs/starlight/props"; +import VGVFooter from "./vgv-footer.astro"; + +interface Props extends PageFrameProps {} +--- + + + + + +
+ +
+ + + + diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx deleted file mode 100644 index feaf01a..0000000 --- a/src/content/docs/index.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Very Good Engineering -description: Get started building your docs site with Starlight. -template: splash -hero: - tagline: A comprehensive guide to building better software. - image: - dark: ../../assets/logos/unicorn_dark.png - light: ../../assets/logos/unicorn_light.png - actions: - - text: Read the Best Practices - link: /architecture - icon: right-arrow - variant: primary - - text: Learn more about Very Good Ventures - link: https://verygood.ventures - icon: external ---- - -import { Card, CardGrid } from "@astrojs/starlight/components"; - -## Next steps - - - - Edit `src/content/docs/index.mdx` to see this page change. - - - Add Markdown or MDX files to `src/content/docs` to create new pages. - - - Edit your `sidebar` and other config in `astro.config.mjs`. - - - Learn more about [Very Good Ventures](https://verygood.ventures/). - - diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 0000000..3deaeae --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,60 @@ +--- +import { CardGrid } from "@astrojs/starlight/components"; +import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro"; +import GithubCard from "~/components/github_card/github-card.astro"; +--- + + +

What we're up to

+ + + + +
+ + diff --git a/src/assets/styles/tailwind.css b/src/styles/tailwind.css similarity index 100% rename from src/assets/styles/tailwind.css rename to src/styles/tailwind.css diff --git a/src/styles/theme.css b/src/styles/theme.css new file mode 100644 index 0000000..d0b3d67 --- /dev/null +++ b/src/styles/theme.css @@ -0,0 +1,31 @@ +/* See https://starlight.astro.build/guides/css-and-tailwind/#theming */ + +/* Dark mode colors. */ +:root { + --sl-color-accent-low: #152146; + --sl-color-accent: #3557e3; + --sl-color-accent-high: #b4c8f8; + --sl-color-white: #ffffff; + --sl-color-gray-1: #ebeef5; + --sl-color-gray-2: #bec2ca; + --sl-color-gray-3: #858b9b; + --sl-color-gray-4: #525867; + --sl-color-gray-5: #323846; + --sl-color-gray-6: #212633; + --sl-color-black: #16181e; +} +/* Light mode colors. */ +:root[data-theme="light"] { + --sl-color-accent-low: #c7d7fb; + --sl-color-accent: #365ae5; + --sl-color-accent-high: #1a2c68; + --sl-color-white: #16181e; + --sl-color-gray-1: #212633; + --sl-color-gray-2: #323846; + --sl-color-gray-3: #525867; + --sl-color-gray-4: #858b9b; + --sl-color-gray-5: #bec2ca; + --sl-color-gray-6: #ebeef5; + --sl-color-gray-7: #f5f6fa; + --sl-color-black: #ffffff; +} diff --git a/src/styles/vgv_brand.css b/src/styles/vgv_brand.css new file mode 100644 index 0000000..f06675c --- /dev/null +++ b/src/styles/vgv_brand.css @@ -0,0 +1,62 @@ +:root { + /* Brand Colors */ + --vgv-navy: #020f30; + + --vgv-grape-purple: #8152e8; + --vgv-deep-purple: #6420c6; + + --vgv-code-green: #00ff00; + --vgv-code-green-20: #00e500; + + --vgv-unicorn-pink: #ff4f9d; + --vgv-unicorn-pink-20: #ff1c81; + + --vgv-peach: #ff8e66; + + --vgv-orange: #fc5d42; + + --vgv-syntax-yellow: #ffff33; + + --vgv-gold: #dfc12a; + + --vgv-aqua: #33ccff; + --vgv-shadow-aqua: #2aa3df; + + --vgv-blue: #2a48de; + --vgv-blue-20: #cddafb; + --vgv-blue-30: #a1b5f3; + --vgv-blue-60: #6d92f5; + --vgv-blue-80: #2c64f1; + --vgv-blue-120: #002890; + + --vgv-gray-10: #fafbff; + --vgv-gray-20: #f3f6ff; + --vgv-gray-30: #d2d5dd; + --vgv-gray-40: #838998; + --vgv-gray-50: #5a5f6e; + --vgv-gray-60: #4b4f5a; + --vgv-gray-70: #383c46; + --vgv-gray-80: #232938; +} + +:root[data-theme="light"] { + --vgv-card-bg: var(--vgv-gray-20); + --vgv-card-bg-hover: var(--vgv-gray-10); + --vgv-card-fg: black; + --vgv-card-shadow: drop-shadow(0px 0px 8px var(--vgv-gray-30)); + --vgv-card-shadow-hover: drop-shadow(0px 0px 16px var(--vgv-gray-30)); + + --vgv-footer-text: var(--vgv-gray-30); + --vgv-footer-bg: var(--vgv-navy); +} + +:root[data-theme="dark"] { + --vgv-card-bg: var(--vgv-gray-80); + --vgv-card-bg-hover: var(--vgv-gray-70); + --vgv-card-fg: white; + --vgv-card-shadow: drop-shadow(0px 0px 8px var(--vgv-gray-80)); + --vgv-card-shadow-hover: drop-shadow(0px 0px 16px var(--vgv-gray-60)); + + --vgv-footer-text: var(--vgv-gray-30); + --vgv-footer-bg: var(--vgv-gray-80); +} diff --git a/src/utils/github_languages.ts b/src/utils/github_languages.ts new file mode 100644 index 0000000..3406019 --- /dev/null +++ b/src/utils/github_languages.ts @@ -0,0 +1,630 @@ +export type Languages = { + [key: string]: LanguageColor; +}; + +export type LanguageColor = { + color: string | null; + url: string; +}; + +/* Thanks to - https://github.com/ozh/github-colors */ +export const languageColors: Languages = { + "1CEnterprise": { + color: "#814CCC", + url: "https://github.com/trending?l=1C-Enterprise", + }, + ABAP: { color: "#E8274B", url: "https://github.com/trending?l=ABAP" }, + ActionScript: { + color: "#882B0F", + url: "https://github.com/trending?l=ActionScript", + }, + Ada: { color: "#02f88c", url: "https://github.com/trending?l=Ada" }, + Agda: { color: "#315665", url: "https://github.com/trending?l=Agda" }, + AGSScript: { + color: "#B9D9FF", + url: "https://github.com/trending?l=AGS-Script", + }, + Alloy: { color: "#64C800", url: "https://github.com/trending?l=Alloy" }, + AlpineAbuild: { + color: null, + url: "https://github.com/trending?l=Alpine-Abuild", + }, + AMPL: { color: "#E6EFBB", url: "https://github.com/trending?l=AMPL" }, + ANTLR: { color: "#9DC3FF", url: "https://github.com/trending?l=ANTLR" }, + Apex: { color: null, url: "https://github.com/trending?l=Apex" }, + APIBlueprint: { + color: "#2ACCA8", + url: "https://github.com/trending?l=API-Blueprint", + }, + APL: { color: "#5A8164", url: "https://github.com/trending?l=APL" }, + ApolloGuidanceComputer: { + color: null, + url: "https://github.com/trending?l=Apollo-Guidance-Computer", + }, + AppleScript: { + color: "#101F1F", + url: "https://github.com/trending?l=AppleScript", + }, + Arc: { color: "#aa2afe", url: "https://github.com/trending?l=Arc" }, + Arduino: { color: "#bd79d1", url: "https://github.com/trending?l=Arduino" }, + ASP: { color: "#6a40fd", url: "https://github.com/trending?l=ASP" }, + AspectJ: { color: "#a957b0", url: "https://github.com/trending?l=AspectJ" }, + Assembly: { + color: "#6E4C13", + url: "https://github.com/trending?l=Assembly", + }, + ATS: { color: "#1ac620", url: "https://github.com/trending?l=ATS" }, + Augeas: { color: null, url: "https://github.com/trending?l=Augeas" }, + AutoHotkey: { + color: "#6594b9", + url: "https://github.com/trending?l=AutoHotkey", + }, + AutoIt: { color: "#1C3552", url: "https://github.com/trending?l=AutoIt" }, + Awk: { color: null, url: "https://github.com/trending?l=Awk" }, + Ballerina: { + color: "#FF5000", + url: "https://github.com/trending?l=Ballerina", + }, + Batchfile: { + color: "#C1F12E", + url: "https://github.com/trending?l=Batchfile", + }, + Befunge: { color: null, url: "https://github.com/trending?l=Befunge" }, + Bison: { color: null, url: "https://github.com/trending?l=Bison" }, + BitBake: { color: null, url: "https://github.com/trending?l=BitBake" }, + BlitzBasic: { + color: null, + url: "https://github.com/trending?l=BlitzBasic", + }, + BlitzMax: { + color: "#cd6400", + url: "https://github.com/trending?l=BlitzMax", + }, + Bluespec: { color: null, url: "https://github.com/trending?l=Bluespec" }, + Boo: { color: "#d4bec1", url: "https://github.com/trending?l=Boo" }, + Brightscript: { + color: null, + url: "https://github.com/trending?l=Brightscript", + }, + Bro: { color: null, url: "https://github.com/trending?l=Bro" }, + C: { color: "#555555", url: "https://github.com/trending?l=C" }, + "C#": { color: "#178600", url: "https://github.com/trending?l=Csharp" }, + "C++": { color: "#f34b7d", url: "https://github.com/trending?l=C++" }, + C2hsHaskell: { + color: null, + url: "https://github.com/trending?l=C2hs-Haskell", + }, + "Cap'nProto": { + color: null, + url: "https://github.com/trending?l=Cap'n-Proto", + }, + CartoCSS: { color: null, url: "https://github.com/trending?l=CartoCSS" }, + Ceylon: { color: "#dfa535", url: "https://github.com/trending?l=Ceylon" }, + Chapel: { color: "#8dc63f", url: "https://github.com/trending?l=Chapel" }, + Charity: { color: null, url: "https://github.com/trending?l=Charity" }, + ChucK: { color: null, url: "https://github.com/trending?l=ChucK" }, + Cirru: { color: "#ccccff", url: "https://github.com/trending?l=Cirru" }, + Clarion: { color: "#db901e", url: "https://github.com/trending?l=Clarion" }, + Clean: { color: "#3F85AF", url: "https://github.com/trending?l=Clean" }, + Click: { color: "#E4E6F3", url: "https://github.com/trending?l=Click" }, + CLIPS: { color: null, url: "https://github.com/trending?l=CLIPS" }, + Clojure: { color: "#db5855", url: "https://github.com/trending?l=Clojure" }, + CMake: { color: null, url: "https://github.com/trending?l=CMake" }, + COBOL: { color: null, url: "https://github.com/trending?l=COBOL" }, + CoffeeScript: { + color: "#244776", + url: "https://github.com/trending?l=CoffeeScript", + }, + ColdFusion: { + color: "#ed2cd6", + url: "https://github.com/trending?l=ColdFusion", + }, + ColdFusionCFC: { + color: null, + url: "https://github.com/trending?l=ColdFusion-CFC", + }, + CommonLisp: { + color: "#3fb68b", + url: "https://github.com/trending?l=Common-Lisp", + }, + ComponentPascal: { + color: "#B0CE4E", + url: "https://github.com/trending?l=Component-Pascal", + }, + Cool: { color: null, url: "https://github.com/trending?l=Cool" }, + Coq: { color: null, url: "https://github.com/trending?l=Coq" }, + Crystal: { color: "#776791", url: "https://github.com/trending?l=Crystal" }, + Csound: { color: null, url: "https://github.com/trending?l=Csound" }, + CsoundDocument: { + color: null, + url: "https://github.com/trending?l=Csound-Document", + }, + CsoundScore: { + color: null, + url: "https://github.com/trending?l=Csound-Score", + }, + CSS: { color: "#563d7c", url: "https://github.com/trending?l=CSS" }, + Cuda: { color: "#3A4E3A", url: "https://github.com/trending?l=Cuda" }, + CWeb: { color: null, url: "https://github.com/trending?l=CWeb" }, + Cycript: { color: null, url: "https://github.com/trending?l=Cycript" }, + Cython: { color: null, url: "https://github.com/trending?l=Cython" }, + D: { color: "#ba595e", url: "https://github.com/trending?l=D" }, + Dart: { color: "#00B4AB", url: "https://github.com/trending?l=Dart" }, + DataWeave: { + color: "#003a52", + url: "https://github.com/trending?l=DataWeave", + }, + DIGITALCommandLanguage: { + color: null, + url: "https://github.com/trending?l=DIGITAL-Command-Language", + }, + DM: { color: "#447265", url: "https://github.com/trending?l=DM" }, + Dogescript: { + color: "#cca760", + url: "https://github.com/trending?l=Dogescript", + }, + DTrace: { color: null, url: "https://github.com/trending?l=DTrace" }, + Dylan: { color: "#6c616e", url: "https://github.com/trending?l=Dylan" }, + E: { color: "#ccce35", url: "https://github.com/trending?l=E" }, + eC: { color: "#913960", url: "https://github.com/trending?l=eC" }, + ECL: { color: "#8a1267", url: "https://github.com/trending?l=ECL" }, + ECLiPSe: { color: null, url: "https://github.com/trending?l=ECLiPSe" }, + Eiffel: { color: "#946d57", url: "https://github.com/trending?l=Eiffel" }, + Elixir: { color: "#6e4a7e", url: "https://github.com/trending?l=Elixir" }, + Elm: { color: "#60B5CC", url: "https://github.com/trending?l=Elm" }, + EmacsLisp: { + color: "#c065db", + url: "https://github.com/trending?l=Emacs-Lisp", + }, + EmberScript: { + color: "#FFF4F3", + url: "https://github.com/trending?l=EmberScript", + }, + EQ: { color: "#a78649", url: "https://github.com/trending?l=EQ" }, + Erlang: { color: "#B83998", url: "https://github.com/trending?l=Erlang" }, + "F#": { color: "#b845fc", url: "https://github.com/trending?l=Fsharp" }, + Factor: { color: "#636746", url: "https://github.com/trending?l=Factor" }, + Fancy: { color: "#7b9db4", url: "https://github.com/trending?l=Fancy" }, + Fantom: { color: "#14253c", url: "https://github.com/trending?l=Fantom" }, + FilebenchWML: { + color: null, + url: "https://github.com/trending?l=Filebench-WML", + }, + Filterscript: { + color: null, + url: "https://github.com/trending?l=Filterscript", + }, + fish: { color: null, url: "https://github.com/trending?l=fish" }, + FLUX: { color: "#88ccff", url: "https://github.com/trending?l=FLUX" }, + Forth: { color: "#341708", url: "https://github.com/trending?l=Forth" }, + Fortran: { color: "#4d41b1", url: "https://github.com/trending?l=Fortran" }, + FreeMarker: { + color: "#0050b2", + url: "https://github.com/trending?l=FreeMarker", + }, + Frege: { color: "#00cafe", url: "https://github.com/trending?l=Frege" }, + GameMakerLanguage: { + color: "#8fb200", + url: "https://github.com/trending?l=Game-Maker-Language", + }, + GAMS: { color: null, url: "https://github.com/trending?l=GAMS" }, + GAP: { color: null, url: "https://github.com/trending?l=GAP" }, + GCCMachineDescription: { + color: null, + url: "https://github.com/trending?l=GCC-Machine-Description", + }, + GDB: { color: null, url: "https://github.com/trending?l=GDB" }, + GDScript: { color: null, url: "https://github.com/trending?l=GDScript" }, + Genie: { color: "#fb855d", url: "https://github.com/trending?l=Genie" }, + Genshi: { color: null, url: "https://github.com/trending?l=Genshi" }, + GentooEbuild: { + color: null, + url: "https://github.com/trending?l=Gentoo-Ebuild", + }, + GentooEclass: { + color: null, + url: "https://github.com/trending?l=Gentoo-Eclass", + }, + Gherkin: { color: "#5B2063", url: "https://github.com/trending?l=Gherkin" }, + GLSL: { color: null, url: "https://github.com/trending?l=GLSL" }, + Glyph: { color: "#e4cc98", url: "https://github.com/trending?l=Glyph" }, + Gnuplot: { color: "#f0a9f0", url: "https://github.com/trending?l=Gnuplot" }, + Go: { color: "#375eab", url: "https://github.com/trending?l=Go" }, + Golo: { color: "#88562A", url: "https://github.com/trending?l=Golo" }, + Gosu: { color: "#82937f", url: "https://github.com/trending?l=Gosu" }, + Grace: { color: null, url: "https://github.com/trending?l=Grace" }, + GrammaticalFramework: { + color: "#79aa7a", + url: "https://github.com/trending?l=Grammatical-Framework", + }, + Groovy: { color: "#e69f56", url: "https://github.com/trending?l=Groovy" }, + GroovyServerPages: { + color: null, + url: "https://github.com/trending?l=Groovy-Server-Pages", + }, + Hack: { color: "#878787", url: "https://github.com/trending?l=Hack" }, + Harbour: { color: "#0e60e3", url: "https://github.com/trending?l=Harbour" }, + Haskell: { color: "#5e5086", url: "https://github.com/trending?l=Haskell" }, + Haxe: { color: "#df7900", url: "https://github.com/trending?l=Haxe" }, + HCL: { color: null, url: "https://github.com/trending?l=HCL" }, + HLSL: { color: null, url: "https://github.com/trending?l=HLSL" }, + HTML: { color: "#e34c26", url: "https://github.com/trending?l=HTML" }, + Hy: { color: "#7790B2", url: "https://github.com/trending?l=Hy" }, + HyPhy: { color: null, url: "https://github.com/trending?l=HyPhy" }, + IDL: { color: "#a3522f", url: "https://github.com/trending?l=IDL" }, + Idris: { color: null, url: "https://github.com/trending?l=Idris" }, + IGORPro: { color: null, url: "https://github.com/trending?l=IGOR-Pro" }, + Inform7: { color: null, url: "https://github.com/trending?l=Inform-7" }, + InnoSetup: { color: null, url: "https://github.com/trending?l=Inno-Setup" }, + Io: { color: "#a9188d", url: "https://github.com/trending?l=Io" }, + Ioke: { color: "#078193", url: "https://github.com/trending?l=Ioke" }, + Isabelle: { + color: "#FEFE00", + url: "https://github.com/trending?l=Isabelle", + }, + IsabelleROOT: { + color: null, + url: "https://github.com/trending?l=Isabelle-ROOT", + }, + J: { color: "#9EEDFF", url: "https://github.com/trending?l=J" }, + Jasmin: { color: null, url: "https://github.com/trending?l=Jasmin" }, + Java: { color: "#b07219", url: "https://github.com/trending?l=Java" }, + JavaServerPages: { + color: null, + url: "https://github.com/trending?l=Java-Server-Pages", + }, + JavaScript: { + color: "#f1e05a", + url: "https://github.com/trending?l=JavaScript", + }, + JFlex: { color: null, url: "https://github.com/trending?l=JFlex" }, + Jison: { color: null, url: "https://github.com/trending?l=Jison" }, + JisonLex: { color: null, url: "https://github.com/trending?l=Jison-Lex" }, + Jolie: { color: "#843179", url: "https://github.com/trending?l=Jolie" }, + JSONiq: { color: "#40d47e", url: "https://github.com/trending?l=JSONiq" }, + JSX: { color: null, url: "https://github.com/trending?l=JSX" }, + Julia: { color: "#a270ba", url: "https://github.com/trending?l=Julia" }, + "Jupyter Notebook": { + color: "#DA5B0B", + url: "https://github.com/trending?l=Jupyter-Notebook", + }, + Kotlin: { color: "#F18E33", url: "https://github.com/trending?l=Kotlin" }, + KRL: { color: "#28431f", url: "https://github.com/trending?l=KRL" }, + LabVIEW: { color: null, url: "https://github.com/trending?l=LabVIEW" }, + Lasso: { color: "#999999", url: "https://github.com/trending?l=Lasso" }, + Lean: { color: null, url: "https://github.com/trending?l=Lean" }, + Lex: { color: "#DBCA00", url: "https://github.com/trending?l=Lex" }, + LFE: { color: null, url: "https://github.com/trending?l=LFE" }, + LilyPond: { color: null, url: "https://github.com/trending?l=LilyPond" }, + Limbo: { color: null, url: "https://github.com/trending?l=Limbo" }, + LiterateAgda: { + color: null, + url: "https://github.com/trending?l=Literate-Agda", + }, + LiterateCoffeeScript: { + color: null, + url: "https://github.com/trending?l=Literate-CoffeeScript", + }, + LiterateHaskell: { + color: null, + url: "https://github.com/trending?l=Literate-Haskell", + }, + LiveScript: { + color: "#499886", + url: "https://github.com/trending?l=LiveScript", + }, + LLVM: { color: "#185619", url: "https://github.com/trending?l=LLVM" }, + Logos: { color: null, url: "https://github.com/trending?l=Logos" }, + Logtalk: { color: null, url: "https://github.com/trending?l=Logtalk" }, + LOLCODE: { color: "#cc9900", url: "https://github.com/trending?l=LOLCODE" }, + LookML: { color: "#652B81", url: "https://github.com/trending?l=LookML" }, + LoomScript: { + color: null, + url: "https://github.com/trending?l=LoomScript", + }, + LSL: { color: "#3d9970", url: "https://github.com/trending?l=LSL" }, + Lua: { color: "#000080", url: "https://github.com/trending?l=Lua" }, + M: { color: null, url: "https://github.com/trending?l=M" }, + M4: { color: null, url: "https://github.com/trending?l=M4" }, + M4Sugar: { color: null, url: "https://github.com/trending?l=M4Sugar" }, + Makefile: { + color: "#427819", + url: "https://github.com/trending?l=Makefile", + }, + Mako: { color: null, url: "https://github.com/trending?l=Mako" }, + Mask: { color: "#f97732", url: "https://github.com/trending?l=Mask" }, + Mathematica: { + color: null, + url: "https://github.com/trending?l=Mathematica", + }, + Matlab: { color: "#e16737", url: "https://github.com/trending?l=Matlab" }, + Max: { color: "#c4a79c", url: "https://github.com/trending?l=Max" }, + MAXScript: { + color: "#00a6a6", + url: "https://github.com/trending?l=MAXScript", + }, + Mercury: { color: "#ff2b2b", url: "https://github.com/trending?l=Mercury" }, + Meson: { color: "#007800", url: "https://github.com/trending?l=Meson" }, + Metal: { color: "#8f14e9", url: "https://github.com/trending?l=Metal" }, + MiniD: { color: null, url: "https://github.com/trending?l=MiniD" }, + Mirah: { color: "#c7a938", url: "https://github.com/trending?l=Mirah" }, + Modelica: { color: null, url: "https://github.com/trending?l=Modelica" }, + "Modula-2": { color: null, url: "https://github.com/trending?l=Modula-2" }, + ModuleManagementSystem: { + color: null, + url: "https://github.com/trending?l=Module-Management-System", + }, + Monkey: { color: null, url: "https://github.com/trending?l=Monkey" }, + Moocode: { color: null, url: "https://github.com/trending?l=Moocode" }, + MoonScript: { + color: null, + url: "https://github.com/trending?l=MoonScript", + }, + MQL4: { color: "#62A8D6", url: "https://github.com/trending?l=MQL4" }, + MQL5: { color: "#4A76B8", url: "https://github.com/trending?l=MQL5" }, + MTML: { color: "#b7e1f4", url: "https://github.com/trending?l=MTML" }, + MUF: { color: null, url: "https://github.com/trending?l=MUF" }, + mupad: { color: null, url: "https://github.com/trending?l=mupad" }, + Myghty: { color: null, url: "https://github.com/trending?l=Myghty" }, + NCL: { color: "#28431f", url: "https://github.com/trending?l=NCL" }, + Nearley: { color: "#990000", url: "https://github.com/trending?l=Nearley" }, + Nemerle: { color: "#3d3c6e", url: "https://github.com/trending?l=Nemerle" }, + nesC: { color: "#94B0C7", url: "https://github.com/trending?l=nesC" }, + NetLinx: { color: "#0aa0ff", url: "https://github.com/trending?l=NetLinx" }, + "NetLinx+ERB": { + color: "#747faa", + url: "https://github.com/trending?l=NetLinx+ERB", + }, + NetLogo: { color: "#ff6375", url: "https://github.com/trending?l=NetLogo" }, + NewLisp: { color: "#87AED7", url: "https://github.com/trending?l=NewLisp" }, + Nim: { color: "#37775b", url: "https://github.com/trending?l=Nim" }, + Nit: { color: "#009917", url: "https://github.com/trending?l=Nit" }, + Nix: { color: "#7e7eff", url: "https://github.com/trending?l=Nix" }, + NSIS: { color: null, url: "https://github.com/trending?l=NSIS" }, + Nu: { color: "#c9df40", url: "https://github.com/trending?l=Nu" }, + NumPy: { color: null, url: "https://github.com/trending?l=NumPy" }, + "Objective-C": { + color: "#438eff", + url: "https://github.com/trending?l=Objective-C", + }, + "Objective-C++": { + color: "#6866fb", + url: "https://github.com/trending?l=Objective-C++", + }, + "Objective-J": { + color: "#ff0c5a", + url: "https://github.com/trending?l=Objective-J", + }, + OCaml: { color: "#3be133", url: "https://github.com/trending?l=OCaml" }, + Omgrofl: { color: "#cabbff", url: "https://github.com/trending?l=Omgrofl" }, + ooc: { color: "#b0b77e", url: "https://github.com/trending?l=ooc" }, + Opa: { color: null, url: "https://github.com/trending?l=Opa" }, + Opal: { color: "#f7ede0", url: "https://github.com/trending?l=Opal" }, + OpenCL: { color: null, url: "https://github.com/trending?l=OpenCL" }, + OpenEdgeABL: { + color: null, + url: "https://github.com/trending?l=OpenEdge-ABL", + }, + OpenRCrunscript: { + color: null, + url: "https://github.com/trending?l=OpenRC-runscript", + }, + OpenSCAD: { color: null, url: "https://github.com/trending?l=OpenSCAD" }, + Ox: { color: null, url: "https://github.com/trending?l=Ox" }, + Oxygene: { color: "#cdd0e3", url: "https://github.com/trending?l=Oxygene" }, + Oz: { color: "#fab738", url: "https://github.com/trending?l=Oz" }, + P4: { color: "#7055b5", url: "https://github.com/trending?l=P4" }, + Pan: { color: "#cc0000", url: "https://github.com/trending?l=Pan" }, + Papyrus: { color: "#6600cc", url: "https://github.com/trending?l=Papyrus" }, + Parrot: { color: "#f3ca0a", url: "https://github.com/trending?l=Parrot" }, + ParrotAssembly: { + color: null, + url: "https://github.com/trending?l=Parrot-Assembly", + }, + ParrotInternalRepresentation: { + color: null, + url: "https://github.com/trending?l=Parrot-Internal-Representation", + }, + Pascal: { color: "#E3F171", url: "https://github.com/trending?l=Pascal" }, + PAWN: { color: "#dbb284", url: "https://github.com/trending?l=PAWN" }, + Pep8: { color: "#C76F5B", url: "https://github.com/trending?l=Pep8" }, + Perl: { color: "#0298c3", url: "https://github.com/trending?l=Perl" }, + Perl6: { color: "#0000fb", url: "https://github.com/trending?l=Perl-6" }, + PHP: { color: "#4F5D95", url: "https://github.com/trending?l=PHP" }, + PicoLisp: { color: null, url: "https://github.com/trending?l=PicoLisp" }, + PigLatin: { + color: "#fcd7de", + url: "https://github.com/trending?l=PigLatin", + }, + Pike: { color: "#005390", url: "https://github.com/trending?l=Pike" }, + PLpgSQL: { color: null, url: "https://github.com/trending?l=PLpgSQL" }, + PLSQL: { color: "#dad8d8", url: "https://github.com/trending?l=PLSQL" }, + PogoScript: { + color: "#d80074", + url: "https://github.com/trending?l=PogoScript", + }, + Pony: { color: null, url: "https://github.com/trending?l=Pony" }, + PostScript: { + color: "#da291c", + url: "https://github.com/trending?l=PostScript", + }, + "POV-RaySDL": { + color: null, + url: "https://github.com/trending?l=POV-Ray-SDL", + }, + PowerBuilder: { + color: "#8f0f8d", + url: "https://github.com/trending?l=PowerBuilder", + }, + PowerShell: { + color: "#012456", + url: "https://github.com/trending?l=PowerShell", + }, + Processing: { + color: "#0096D8", + url: "https://github.com/trending?l=Processing", + }, + Prolog: { color: "#74283c", url: "https://github.com/trending?l=Prolog" }, + PropellerSpin: { + color: "#7fa2a7", + url: "https://github.com/trending?l=Propeller-Spin", + }, + Puppet: { color: "#302B6D", url: "https://github.com/trending?l=Puppet" }, + PureBasic: { + color: "#5a6986", + url: "https://github.com/trending?l=PureBasic", + }, + PureScript: { + color: "#1D222D", + url: "https://github.com/trending?l=PureScript", + }, + Python: { color: "#3572A5", url: "https://github.com/trending?l=Python" }, + Pythonconsole: { + color: null, + url: "https://github.com/trending?l=Python-console", + }, + QMake: { color: null, url: "https://github.com/trending?l=QMake" }, + QML: { color: "#44a51c", url: "https://github.com/trending?l=QML" }, + R: { color: "#198CE7", url: "https://github.com/trending?l=R" }, + Racket: { color: "#22228f", url: "https://github.com/trending?l=Racket" }, + Ragel: { color: "#9d5200", url: "https://github.com/trending?l=Ragel" }, + RAML: { color: "#77d9fb", url: "https://github.com/trending?l=RAML" }, + Rascal: { color: "#fffaa0", url: "https://github.com/trending?l=Rascal" }, + REALbasic: { color: null, url: "https://github.com/trending?l=REALbasic" }, + Reason: { color: null, url: "https://github.com/trending?l=Reason" }, + Rebol: { color: "#358a5b", url: "https://github.com/trending?l=Rebol" }, + Red: { color: "#f50000", url: "https://github.com/trending?l=Red" }, + Redcode: { color: null, url: "https://github.com/trending?l=Redcode" }, + "Ren'Py": { color: "#ff7f7f", url: "https://github.com/trending?l=Ren'Py" }, + RenderScript: { + color: null, + url: "https://github.com/trending?l=RenderScript", + }, + REXX: { color: null, url: "https://github.com/trending?l=REXX" }, + Ring: { color: "#0e60e3", url: "https://github.com/trending?l=Ring" }, + RobotFramework: { + color: null, + url: "https://github.com/trending?l=RobotFramework", + }, + Roff: { color: "#ecdebe", url: "https://github.com/trending?l=Roff" }, + Rouge: { color: "#cc0088", url: "https://github.com/trending?l=Rouge" }, + Ruby: { color: "#701516", url: "https://github.com/trending?l=Ruby" }, + RUNOFF: { color: "#665a4e", url: "https://github.com/trending?l=RUNOFF" }, + Rust: { color: "#dea584", url: "https://github.com/trending?l=Rust" }, + Sage: { color: null, url: "https://github.com/trending?l=Sage" }, + SaltStack: { + color: "#646464", + url: "https://github.com/trending?l=SaltStack", + }, + SAS: { color: "#B34936", url: "https://github.com/trending?l=SAS" }, + Scala: { color: "#c22d40", url: "https://github.com/trending?l=Scala" }, + Scheme: { color: "#1e4aec", url: "https://github.com/trending?l=Scheme" }, + Scilab: { color: null, url: "https://github.com/trending?l=Scilab" }, + Self: { color: "#0579aa", url: "https://github.com/trending?l=Self" }, + ShaderLab: { color: null, url: "https://github.com/trending?l=ShaderLab" }, + Shell: { color: "#89e051", url: "https://github.com/trending?l=Shell" }, + ShellSession: { + color: null, + url: "https://github.com/trending?l=ShellSession", + }, + Shen: { color: "#120F14", url: "https://github.com/trending?l=Shen" }, + Slash: { color: "#007eff", url: "https://github.com/trending?l=Slash" }, + Smali: { color: null, url: "https://github.com/trending?l=Smali" }, + Smalltalk: { + color: "#596706", + url: "https://github.com/trending?l=Smalltalk", + }, + Smarty: { color: null, url: "https://github.com/trending?l=Smarty" }, + SMT: { color: null, url: "https://github.com/trending?l=SMT" }, + SourcePawn: { + color: "#5c7611", + url: "https://github.com/trending?l=SourcePawn", + }, + SQF: { color: "#3F3F3F", url: "https://github.com/trending?l=SQF" }, + SQLPL: { color: null, url: "https://github.com/trending?l=SQLPL" }, + Squirrel: { + color: "#800000", + url: "https://github.com/trending?l=Squirrel", + }, + SRecodeTemplate: { + color: "#348a34", + url: "https://github.com/trending?l=SRecode-Template", + }, + Stan: { color: "#b2011d", url: "https://github.com/trending?l=Stan" }, + StandardML: { + color: "#dc566d", + url: "https://github.com/trending?l=Standard-ML", + }, + Stata: { color: null, url: "https://github.com/trending?l=Stata" }, + SuperCollider: { + color: "#46390b", + url: "https://github.com/trending?l=SuperCollider", + }, + Swift: { color: "#ffac45", url: "https://github.com/trending?l=Swift" }, + SystemVerilog: { + color: "#DAE1C2", + url: "https://github.com/trending?l=SystemVerilog", + }, + Tcl: { color: "#e4cc98", url: "https://github.com/trending?l=Tcl" }, + Tcsh: { color: null, url: "https://github.com/trending?l=Tcsh" }, + Terra: { color: "#00004c", url: "https://github.com/trending?l=Terra" }, + TeX: { color: "#3D6117", url: "https://github.com/trending?l=TeX" }, + Thrift: { color: null, url: "https://github.com/trending?l=Thrift" }, + TIProgram: { + color: "#A0AA87", + url: "https://github.com/trending?l=TI-Program", + }, + TLA: { color: null, url: "https://github.com/trending?l=TLA" }, + Turing: { color: "#cf142b", url: "https://github.com/trending?l=Turing" }, + TXL: { color: null, url: "https://github.com/trending?l=TXL" }, + TypeScript: { + color: "#2b7489", + url: "https://github.com/trending?l=TypeScript", + }, + UnifiedParallelC: { + color: null, + url: "https://github.com/trending?l=Unified-Parallel-C", + }, + UnixAssembly: { + color: null, + url: "https://github.com/trending?l=Unix-Assembly", + }, + Uno: { color: null, url: "https://github.com/trending?l=Uno" }, + UnrealScript: { + color: "#a54c4d", + url: "https://github.com/trending?l=UnrealScript", + }, + UrWeb: { color: null, url: "https://github.com/trending?l=UrWeb" }, + Vala: { color: "#fbe5cd", url: "https://github.com/trending?l=Vala" }, + VCL: { color: null, url: "https://github.com/trending?l=VCL" }, + Verilog: { color: "#b2b7f8", url: "https://github.com/trending?l=Verilog" }, + VHDL: { color: "#adb2cb", url: "https://github.com/trending?l=VHDL" }, + Vimscript: { + color: "#199f4b", + url: "https://github.com/trending?l=Vim-script", + }, + VisualBasic: { + color: "#945db7", + url: "https://github.com/trending?l=Visual-Basic", + }, + Volt: { color: "#1F1F1F", url: "https://github.com/trending?l=Volt" }, + Vue: { color: "#2c3e50", url: "https://github.com/trending?l=Vue" }, + WebAssembly: { + color: "#04133b", + url: "https://github.com/trending?l=WebAssembly", + }, + WebIDL: { color: null, url: "https://github.com/trending?l=WebIDL" }, + wisp: { color: "#7582D1", url: "https://github.com/trending?l=wisp" }, + X10: { color: "#4B6BEF", url: "https://github.com/trending?l=X10" }, + xBase: { color: "#403a40", url: "https://github.com/trending?l=xBase" }, + XC: { color: "#99DA07", url: "https://github.com/trending?l=XC" }, + Xojo: { color: null, url: "https://github.com/trending?l=Xojo" }, + XProc: { color: null, url: "https://github.com/trending?l=XProc" }, + XQuery: { color: "#5232e7", url: "https://github.com/trending?l=XQuery" }, + XS: { color: null, url: "https://github.com/trending?l=XS" }, + XSLT: { color: "#EB8CEB", url: "https://github.com/trending?l=XSLT" }, + Xtend: { color: null, url: "https://github.com/trending?l=Xtend" }, + Yacc: { color: "#4B6C4B", url: "https://github.com/trending?l=Yacc" }, + Zephir: { color: "#118f9e", url: "https://github.com/trending?l=Zephir" }, + Zimpl: { color: null, url: "https://github.com/trending?l=Zimpl" }, +}; diff --git a/src/utils/github_repositories.ts b/src/utils/github_repositories.ts new file mode 100644 index 0000000..8aa1faf --- /dev/null +++ b/src/utils/github_repositories.ts @@ -0,0 +1,82 @@ +import { Octokit } from "@octokit/rest"; +import { languageColors, type LanguageColor } from "./github_languages"; + +export type GithubRepository = { + name: string; + organization: string; + url: string; + fullName: string; + description: string; + stars: number; + forks: number; + language: string | null; + languageColor: LanguageColor | null; +}; + +export type GithubRepositories = { [key: string]: GithubRepository }; + +export const organizationName = "VGVentures"; + +// Personal access token environment variable name. +// For locally building this project, make your own PAT and set it in your +// environment under this name. +// +// This secret environment value is already provided for the repository so that +// GitHub actions will run accordingly. +export const VGVENTURES_GITHUB_PAT = "VGVENTURES_GITHUB_PAT"; + +var repositoryCache: GithubRepositories | undefined; + +export async function getRepositories(): Promise { + if (repositoryCache === undefined) { + repositoryCache = + await fetchOrganizationPublicRepositories(organizationName); + } + + return repositoryCache; +} + +// Returns a map of repository full names to repository data. +async function fetchOrganizationPublicRepositories( + organizationName: string, +): Promise { + const octokit = new Octokit({ auth: process.env[VGVENTURES_GITHUB_PAT] }); + + // Get EVERY public repo in the organization. + const response = await octokit.repos.listForOrg({ + type: "public", + org: organizationName, + }); + + if (typeof response !== "object" || !Array.isArray(response["data"])) { + throw new Error( + "Unexpected response from GitHub API: " + + JSON.stringify(response, null, 2), + ); + } + + const data = response["data"]; + + // Return a map of repository full names to repository data. + var repos: GithubRepositories = {}; + for (const raw of data) { + const language = raw["language"]; + const languageColor = + language != null ? languageColors[language] ?? null : null; + const repo: GithubRepository = { + name: raw["name"], + organization: organizationName, + url: raw["html_url"], + fullName: raw["full_name"], + description: raw["description"] ?? "", + stars: raw["stargazers_count"] ?? 0, + forks: raw["forks"] ?? 0, + language: raw["language"] ?? "", + languageColor: languageColor, + }; + repos[repo.fullName] = repo; + console.log("GitHub Repository: " + JSON.stringify(repo, null, 2)); + } + + return repos; +}