1
0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-12-20 17:05:52 +01:00

improve website contributors page docusaurus (#2701)

This commit is contained in:
Juan Picado 2021-12-01 08:20:39 +01:00 committed by GitHub
parent 980b09e40c
commit 21ddd12166
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 7896 additions and 130 deletions

@ -47,7 +47,8 @@ jobs:
run_install: |
- recursive: true
args: [--frozen-lockfile]
- name: Build Plugins
run: pnpm build --filter "docusaurus-plugin-contributors"
- name: Lint And Pretty
run: |
pnpm eslint:check --filter ...@verdaccio/website
@ -82,13 +83,11 @@ jobs:
# Will deploy to Preview URL, only when a pull request is open with changes on the website
- name: Build Deployment Preview
if: github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && github.event.label.name == 'trigger-preview'
env:
CONTEXT: deploy-preview
run: pnpm netlify:build:deployPreview --filter ...@verdaccio/website
- name: 🤖 Deploy Preview Netlify
if: github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && github.event.label.name == 'trigger-preview'
uses: semoal/action-netlify-deploy@master
id: netlify_preview
with:
@ -102,7 +101,6 @@ jobs:
build-dir: './website/build'
- name: Audit preview URL with Lighthouse
if: github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && github.event.label.name == 'trigger-preview'
id: lighthouse_audit
uses: treosh/lighthouse-ci-action@v3
with:
@ -112,7 +110,6 @@ jobs:
temporaryPublicStorage: true
- name: Format lighthouse score
if: github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && github.event.label.name == 'trigger-preview'
id: format_lighthouse_score
uses: actions/github-script@v3
with:
@ -137,7 +134,6 @@ jobs:
core.setOutput("comment", comment);
- name: Add comment to PR
if: github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && github.event.label.name == 'trigger-preview'
id: comment_to_pr
uses: marocchino/sticky-pull-request-comment@v1
with:

@ -0,0 +1,3 @@
{
"extends": "../../../.babelrc"
}

@ -0,0 +1,10 @@
# Contributors Page for Docusaurus Website
[https://verdaccio.org/contributors](https://verdaccio.org/contributors)
It generates a dynamic page to render contributors based on a source file `contributors.json` file.
> The source file is generated by a GitHub Action schedumed to fetch all new contributors
> or new changes in an specific period of time, please don't modify it.
**Kudos to @dianmora** for building a library to fetch [contributors data](https://github.com/dianmorales/contributors).

@ -0,0 +1,27 @@
{
"name": "docusaurus-plugin-contributors",
"version": "1.0.0",
"private": true,
"main": "./build/index.js",
"types": "build/index.d.ts",
"dependencies": {
"@docusaurus/types": "2.0.0-beta.9",
"@docusaurus/utils": "2.0.0-beta.9"
},
"scripts": {
"clean": "rimraf ./build",
"build": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,62 @@
/* eslint-disable no-console */
import { LoadContext, Plugin } from '@docusaurus/types';
import { normalizeUrl } from '@docusaurus/utils';
import { readFileSync } from 'fs';
import { join } from 'path';
export interface PluginOptions {
debug?: boolean;
pathFileName?: string;
}
export const DEFAULT_OPTIONS: PluginOptions = {
debug: false,
};
export default function contributorsPlugin(
context: LoadContext,
opts: PluginOptions
): Plugin<Record<string, unknown> | null> {
const { baseUrl } = context.siteConfig;
const options: PluginOptions = { ...DEFAULT_OPTIONS, ...opts };
const { pathFileName, debug = true } = options;
if (debug) {
console.log('[CONTRIBUTORS_PLUGIN] Opts Input:', opts);
console.log('[CONTRIBUTORS_PLUGIN] Options:', options);
}
return {
name: 'docusaurus-plugin-contributors',
async loadContent() {
let content: Record<string, unknown> | null = null;
const contributorsFilesName = pathFileName || join(__dirname, 'contributors.json');
try {
content = JSON.parse(readFileSync(contributorsFilesName, 'utf8'));
console.log('content', content);
return content;
} catch (error) {
console.log('error', error);
return { error: true };
}
},
async contentLoaded({ content, actions }) {
const { createData, addRoute } = actions;
if (!content) {
return;
}
const contributorsJsonPath = await createData('contributors.json', JSON.stringify(content));
const routeOptions = {
path: normalizeUrl([baseUrl, 'contributors']),
component: '@site/src/components/Contributors.tsx',
modules: {
contributors: contributorsJsonPath,
},
exact: true,
};
if (debug) {
console.error('[CONTRIBUTORS_PLUGIN] Route:', routeOptions);
}
// @ts-ignore
addRoute(routeOptions);
},
};
}

@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"
},
"include": ["src/**/*"],
"exclude": ["src/**/*.test.ts"]
}

@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.reference.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"
},
"include": ["src/**/*"],
"exclude": ["src/**/*.test.ts"]
}

409
pnpm-lock.yaml generated

@ -1076,6 +1076,14 @@ importers:
node-fetch: 3.0.0-beta.6-exportfix
ts-node: 10.2.1_6fc948d4599a6d595975f0dd8328fd81
packages/tools/docusaurus-plugin-contributors:
specifiers:
'@docusaurus/types': 2.0.0-beta.9
'@docusaurus/utils': 2.0.0-beta.9
dependencies:
'@docusaurus/types': 2.0.0-beta.9
'@docusaurus/utils': 2.0.0-beta.9
packages/tools/eslint:
specifiers:
eslint-config-google: 0.14.0
@ -1284,10 +1292,13 @@ importers:
'@docusaurus/preset-classic': 2.0.0-beta.9
'@docusaurus/remark-plugin-npm2yarn': 2.0.0-beta.9
'@docusaurus/theme-search-algolia': 2.0.0-beta.9
'@material-ui/core': ^4.11.2
'@material-ui/icons': ^4.11.2
'@mdx-js/react': ^1.6.22
'@tsconfig/docusaurus': ^1.0.2
clsx: ^1.1.1
copy-text-to-clipboard: ^3.0.1
docusaurus-plugin-contributors: workspace:1.0.0
docusaurus-plugin-sass: ^0.2.1
docusaurus-plugin-sentry: ^1.0.0
esbuild: 0.12.25
@ -1306,9 +1317,12 @@ importers:
'@docusaurus/preset-classic': 2.0.0-beta.9_7e7c414ddb9e6b9f608031ec5eab6c84
'@docusaurus/remark-plugin-npm2yarn': 2.0.0-beta.9_react-dom@17.0.2+react@17.0.2
'@docusaurus/theme-search-algolia': 2.0.0-beta.9_7e7c414ddb9e6b9f608031ec5eab6c84
'@material-ui/core': 4.12.3_react-dom@17.0.2+react@17.0.2
'@material-ui/icons': 4.11.2_fced322086cd04afb0b6feec9e866920
'@mdx-js/react': 1.6.22_react@17.0.2
clsx: 1.1.1
copy-text-to-clipboard: 3.0.1
docusaurus-plugin-contributors: link:../packages/tools/docusaurus-plugin-contributors
docusaurus-plugin-sentry: 1.0.0_95f6b737b4bc0d4236201ee71b37c46d
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
@ -1506,14 +1520,14 @@ packages:
resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.15.8
'@babel/generator': 7.15.8
'@babel/helper-module-transforms': 7.15.8
'@babel/helpers': 7.15.4
'@babel/parser': 7.15.8
'@babel/template': 7.15.4
'@babel/traverse': 7.15.4
'@babel/types': 7.15.6
'@babel/code-frame': 7.16.0
'@babel/generator': 7.16.0
'@babel/helper-module-transforms': 7.16.0
'@babel/helpers': 7.16.3
'@babel/parser': 7.16.3
'@babel/template': 7.16.0
'@babel/traverse': 7.16.3
'@babel/types': 7.16.0
convert-source-map: 1.7.0
debug: 4.3.2
gensync: 1.0.0-beta.2
@ -2063,7 +2077,6 @@ packages:
'@babel/types': 7.16.0
transitivePeerDependencies:
- supports-color
dev: true
/@babel/helper-optimise-call-expression/7.15.4:
resolution: {integrity: sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==}
@ -2234,7 +2247,6 @@ packages:
'@babel/types': 7.16.0
transitivePeerDependencies:
- supports-color
dev: true
/@babel/highlight/7.14.5:
resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==}
@ -2682,7 +2694,7 @@ packages:
'@babel/core': 7.12.9
'@babel/helper-plugin-utils': 7.14.5
'@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9
'@babel/plugin-transform-parameters': 7.15.4_@babel+core@7.12.9
'@babel/plugin-transform-parameters': 7.16.3_@babel+core@7.12.9
dev: false
/@babel/plugin-proposal-object-rest-spread/7.15.6_@babel+core@7.13.15:
@ -4160,16 +4172,6 @@ packages:
- supports-color
dev: true
/@babel/plugin-transform-parameters/7.15.4_@babel+core@7.12.9:
resolution: {integrity: sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.12.9
'@babel/helper-plugin-utils': 7.14.5
dev: false
/@babel/plugin-transform-parameters/7.15.4_@babel+core@7.13.15:
resolution: {integrity: sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==}
engines: {node: '>=6.9.0'}
@ -4190,6 +4192,16 @@ packages:
'@babel/helper-plugin-utils': 7.14.5
dev: false
/@babel/plugin-transform-parameters/7.16.3_@babel+core@7.12.9:
resolution: {integrity: sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.12.9
'@babel/helper-plugin-utils': 7.14.5
dev: false
/@babel/plugin-transform-parameters/7.16.3_@babel+core@7.16.0:
resolution: {integrity: sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==}
engines: {node: '>=6.9.0'}
@ -5556,7 +5568,7 @@ packages:
'@babel/preset-env': 7.13.15_@babel+core@7.13.15
'@babel/preset-react': 7.13.13_@babel+core@7.13.15
'@babel/preset-typescript': 7.13.0_@babel+core@7.13.15
'@babel/runtime': 7.14.5
'@babel/runtime': 7.16.3
'@babel/runtime-corejs3': 7.14.8
'@babel/traverse': 7.14.5
'@docusaurus/cssnano-preset': 2.0.0-beta.3
@ -5876,7 +5888,7 @@ packages:
shelljs: 0.8.4
tslib: 2.3.1
utility-types: 3.10.0
webpack: 5.61.0_esbuild@0.12.25
webpack: 5.64.0_esbuild@0.12.25
transitivePeerDependencies:
- '@swc/core'
- bufferutil
@ -6083,7 +6095,7 @@ packages:
peerDependencies:
react: '*'
dependencies:
'@types/react': 17.0.36
'@types/react': 17.0.37
prop-types: 15.7.2
react: 17.0.2
dev: false
@ -6233,6 +6245,22 @@ packages:
- webpack-cli
dev: false
/@docusaurus/types/2.0.0-beta.9:
resolution: {integrity: sha512-7qK7PCwRImHzv9RMi5HJ7RoHKQ8r7oqZK79UucmzBXl5nyfZridBC7JQ+LG7GBqYVaIjfOHUflOOLIVn+gK2/g==}
dependencies:
commander: 5.1.0
joi: 17.4.2
querystring: 0.2.0
utility-types: 3.10.0
webpack: 5.64.0
webpack-merge: 5.8.0
transitivePeerDependencies:
- '@swc/core'
- esbuild
- uglify-js
- webpack-cli
dev: false
/@docusaurus/types/2.0.0-beta.9_esbuild@0.12.25:
resolution: {integrity: sha512-7qK7PCwRImHzv9RMi5HJ7RoHKQ8r7oqZK79UucmzBXl5nyfZridBC7JQ+LG7GBqYVaIjfOHUflOOLIVn+gK2/g==}
dependencies:
@ -6240,7 +6268,7 @@ packages:
joi: 17.4.2
querystring: 0.2.0
utility-types: 3.10.0
webpack: 5.61.0_esbuild@0.12.25
webpack: 5.64.0_esbuild@0.12.25
webpack-merge: 5.8.0
transitivePeerDependencies:
- '@swc/core'
@ -6328,6 +6356,35 @@ packages:
- webpack-cli
dev: false
/@docusaurus/utils/2.0.0-beta.9:
resolution: {integrity: sha512-f5TUY72Qux0wv1tjxsvjFDjfRnsWtQjsjR5Q/gJ5V021H9lycC9YCk0cEReg3bI3+IVL2iGvQqNnH3R1G7NcRw==}
engines: {node: '>=14'}
peerDependencies:
react: '*'
react-dom: '*'
dependencies:
'@docusaurus/types': 2.0.0-beta.9
'@mdx-js/runtime': 1.6.22
'@types/github-slugger': 1.3.0
chalk: 4.1.2
escape-string-regexp: 4.0.0
fs-extra: 10.0.0
globby: 11.0.4
gray-matter: 4.0.3
lodash: 4.17.21
micromatch: 4.0.4
remark-mdx-remove-exports: 1.6.22
remark-mdx-remove-imports: 1.6.22
resolve-pathname: 3.0.0
tslib: 2.3.1
transitivePeerDependencies:
- '@swc/core'
- esbuild
- supports-color
- uglify-js
- webpack-cli
dev: false
/@docusaurus/utils/2.0.0-beta.9_95f6b737b4bc0d4236201ee71b37c46d:
resolution: {integrity: sha512-f5TUY72Qux0wv1tjxsvjFDjfRnsWtQjsjR5Q/gJ5V021H9lycC9YCk0cEReg3bI3+IVL2iGvQqNnH3R1G7NcRw==}
engines: {node: '>=14'}
@ -6434,7 +6491,6 @@ packages:
/@emotion/hash/0.8.0:
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
dev: true
/@emotion/is-prop-valid/1.1.0:
resolution: {integrity: sha512-9RkilvXAufQHsSsjQ3PIzSns+pxuX4EW8EbGeSPjZMHuMx6z/MOzb9LpqNieQX4F3mre3NWS2+X3JNRHTQztUQ==}
@ -6997,6 +7053,124 @@ packages:
read-yaml-file: 1.1.0
dev: true
/@material-ui/core/4.12.3_react-dom@17.0.2+react@17.0.2:
resolution: {integrity: sha512-sdpgI/PL56QVsEJldwEe4FFaFTLUqN+rd7sSZiRCdx2E/C7z5yK0y/khAWVBH24tXwto7I1hCzNWfJGZIYJKnw==}
engines: {node: '>=8.0.0'}
peerDependencies:
'@types/react': ^16.8.6 || ^17.0.0
react: ^16.8.0 || ^17.0.0
react-dom: ^16.8.0 || ^17.0.0
peerDependenciesMeta:
'@types/react':
optional: true
dependencies:
'@babel/runtime': 7.16.3
'@material-ui/styles': 4.11.4_react-dom@17.0.2+react@17.0.2
'@material-ui/system': 4.12.1_react-dom@17.0.2+react@17.0.2
'@material-ui/types': 5.1.0
'@material-ui/utils': 4.11.2_react-dom@17.0.2+react@17.0.2
'@types/react-transition-group': 4.4.4
clsx: 1.1.1
hoist-non-react-statics: 3.3.2
popper.js: 1.16.1-lts
prop-types: 15.7.2
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
react-is: 17.0.2
react-transition-group: 4.4.2_react-dom@17.0.2+react@17.0.2
dev: false
/@material-ui/icons/4.11.2_fced322086cd04afb0b6feec9e866920:
resolution: {integrity: sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ==}
engines: {node: '>=8.0.0'}
peerDependencies:
'@material-ui/core': ^4.0.0
'@types/react': ^16.8.6 || ^17.0.0
react: ^16.8.0 || ^17.0.0
react-dom: ^16.8.0 || ^17.0.0
peerDependenciesMeta:
'@types/react':
optional: true
dependencies:
'@babel/runtime': 7.16.3
'@material-ui/core': 4.12.3_react-dom@17.0.2+react@17.0.2
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
dev: false
/@material-ui/styles/4.11.4_react-dom@17.0.2+react@17.0.2:
resolution: {integrity: sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew==}
engines: {node: '>=8.0.0'}
peerDependencies:
'@types/react': ^16.8.6 || ^17.0.0
react: ^16.8.0 || ^17.0.0
react-dom: ^16.8.0 || ^17.0.0
peerDependenciesMeta:
'@types/react':
optional: true
dependencies:
'@babel/runtime': 7.16.3
'@emotion/hash': 0.8.0
'@material-ui/types': 5.1.0
'@material-ui/utils': 4.11.2_react-dom@17.0.2+react@17.0.2
clsx: 1.1.1
csstype: 2.6.13
hoist-non-react-statics: 3.3.2
jss: 10.8.2
jss-plugin-camel-case: 10.8.2
jss-plugin-default-unit: 10.8.2
jss-plugin-global: 10.8.2
jss-plugin-nested: 10.8.2
jss-plugin-props-sort: 10.8.2
jss-plugin-rule-value-function: 10.8.2
jss-plugin-vendor-prefixer: 10.8.2
prop-types: 15.7.2
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
dev: false
/@material-ui/system/4.12.1_react-dom@17.0.2+react@17.0.2:
resolution: {integrity: sha512-lUdzs4q9kEXZGhbN7BptyiS1rLNHe6kG9o8Y307HCvF4sQxbCgpL2qi+gUk+yI8a2DNk48gISEQxoxpgph0xIw==}
engines: {node: '>=8.0.0'}
peerDependencies:
'@types/react': ^16.8.6 || ^17.0.0
react: ^16.8.0 || ^17.0.0
react-dom: ^16.8.0 || ^17.0.0
peerDependenciesMeta:
'@types/react':
optional: true
dependencies:
'@babel/runtime': 7.16.3
'@material-ui/utils': 4.11.2_react-dom@17.0.2+react@17.0.2
csstype: 2.6.13
prop-types: 15.7.2
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
dev: false
/@material-ui/types/5.1.0:
resolution: {integrity: sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==}
peerDependencies:
'@types/react': '*'
peerDependenciesMeta:
'@types/react':
optional: true
dev: false
/@material-ui/utils/4.11.2_react-dom@17.0.2+react@17.0.2:
resolution: {integrity: sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==}
engines: {node: '>=8.0.0'}
peerDependencies:
react: ^16.8.0 || ^17.0.0
react-dom: ^16.8.0 || ^17.0.0
dependencies:
'@babel/runtime': 7.16.3
prop-types: 15.7.2
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
react-is: 17.0.2
dev: false
/@mdx-js/mdx/1.6.22:
resolution: {integrity: sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==}
dependencies:
@ -7023,6 +7197,12 @@ packages:
- supports-color
dev: false
/@mdx-js/react/1.6.22:
resolution: {integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==}
peerDependencies:
react: ^16.13.1 || ^17.0.0
dev: false
/@mdx-js/react/1.6.22_react@17.0.2:
resolution: {integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==}
peerDependencies:
@ -7031,6 +7211,19 @@ packages:
react: 17.0.2
dev: false
/@mdx-js/runtime/1.6.22:
resolution: {integrity: sha512-p17spaO2+55VLCuxXA3LVHC4phRx60NR2XMdZ+qgVU1lKvEX4y88dmFNOzGDCPLJ03IZyKrJ/rPWWRiBrd9JrQ==}
engines: {node: '>=8'}
peerDependencies:
react: ^16.13.1
dependencies:
'@mdx-js/mdx': 1.6.22
'@mdx-js/react': 1.6.22
buble-jsx-only: 0.19.8
transitivePeerDependencies:
- supports-color
dev: false
/@mdx-js/runtime/1.6.22_react@17.0.2:
resolution: {integrity: sha512-p17spaO2+55VLCuxXA3LVHC4phRx60NR2XMdZ+qgVU1lKvEX4y88dmFNOzGDCPLJ03IZyKrJ/rPWWRiBrd9JrQ==}
engines: {node: '>=8'}
@ -8027,7 +8220,7 @@ packages:
resolution: {integrity: sha512-38vpjXic0+E2sIBEKUe+RrCmbc8RqcQhNV8OmU3KUcwgy/yzTeo67MhllP+0zjZWNr7Lhw+RnUkL0hzkf63nUQ==}
dependencies:
'@types/history': 4.7.7
'@types/react': 17.0.33
'@types/react': 17.0.36
'@types/react-router': 5.1.8
dev: true
@ -8043,14 +8236,13 @@ packages:
resolution: {integrity: sha512-HzOyJb+wFmyEhyfp4D4NYrumi+LQgQL/68HvJO+q6XtuHSDvw6Aqov7sCAhjbNq3bUPgPqbdvjXC5HeB2oEAPg==}
dependencies:
'@types/history': 4.7.7
'@types/react': 17.0.34
'@types/react': 17.0.36
dev: true
/@types/react-transition-group/4.4.4:
resolution: {integrity: sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==}
dependencies:
'@types/react': 17.0.37
dev: true
/@types/react-virtualized/9.21.15:
resolution: {integrity: sha512-R4ntUW+Y/a7RgRpfeYz3iRe+kaDWtXieMeQum4AoYjjZsR/QhpKqFu4muSBhzA7OHJHd6qA0KkeTzxj5ah5tmQ==}
@ -8064,14 +8256,6 @@ packages:
dependencies:
'@types/prop-types': 15.7.3
'@types/scheduler': 0.16.2
csstype: 3.0.8
dev: true
/@types/react/17.0.34:
resolution: {integrity: sha512-46FEGrMjc2+8XhHXILr+3+/sTe3OfzSPU9YGKILLrUYbQ1CLQC9Daqo1KzENGXAWwrFwiY0l4ZbF20gRvgpWTg==}
dependencies:
'@types/prop-types': 15.7.4
'@types/scheduler': 0.16.2
csstype: 3.0.9
dev: true
@ -8081,7 +8265,7 @@ packages:
'@types/prop-types': 15.7.4
'@types/scheduler': 0.16.2
csstype: 3.0.9
dev: false
dev: true
/@types/react/17.0.37:
resolution: {integrity: sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==}
@ -8089,7 +8273,6 @@ packages:
'@types/prop-types': 15.7.4
'@types/scheduler': 0.16.2
csstype: 3.0.9
dev: true
/@types/redux/3.6.0:
resolution: {integrity: sha1-8evh5UEVGAcuT9/KXHbhbnTBOZo=}
@ -11218,7 +11401,6 @@ packages:
dependencies:
'@babel/runtime': 7.16.3
is-in-browser: 1.1.3
dev: true
/css-what/2.1.3:
resolution: {integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==}
@ -11411,11 +11593,6 @@ packages:
/csstype/2.6.13:
resolution: {integrity: sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A==}
dev: true
/csstype/3.0.8:
resolution: {integrity: sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==}
dev: true
/csstype/3.0.9:
resolution: {integrity: sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==}
@ -11903,9 +12080,8 @@ packages:
/dom-helpers/5.2.1:
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
dependencies:
'@babel/runtime': 7.15.4
'@babel/runtime': 7.16.3
csstype: 3.0.9
dev: true
/dom-serializer/0.1.1:
resolution: {integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==}
@ -14545,7 +14721,6 @@ packages:
/hyphenate-style-name/1.0.4:
resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==}
dev: true
/i18next/20.6.1:
resolution: {integrity: sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==}
@ -14974,7 +15149,6 @@ packages:
/is-in-browser/1.1.3:
resolution: {integrity: sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=}
dev: true
/is-installed-globally/0.4.0:
resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
@ -16073,21 +16247,18 @@ packages:
'@babel/runtime': 7.16.3
hyphenate-style-name: 1.0.4
jss: 10.8.2
dev: true
/jss-plugin-default-unit/10.8.2:
resolution: {integrity: sha512-UZ7cwT9NFYSG+SEy7noRU50s4zifulFdjkUNKE+u6mW7vFP960+RglWjTgMfh79G6OENZmaYnjHV/gcKV4nSxg==}
dependencies:
'@babel/runtime': 7.16.3
jss: 10.8.2
dev: true
/jss-plugin-global/10.8.2:
resolution: {integrity: sha512-UaYMSPsYZ7s/ECGoj4KoHC2jwQd5iQ7K+FFGnCAILdQrv7hPmvM2Ydg45ThT/sH46DqktCRV2SqjRuxeBH8nRA==}
dependencies:
'@babel/runtime': 7.16.3
jss: 10.8.2
dev: true
/jss-plugin-nested/10.8.2:
resolution: {integrity: sha512-acRvuPJOb930fuYmhkJaa994EADpt8TxI63Iyg96C8FJ9T2xRyU5T6R1IYKRwUiqZo+2Sr7fdGzRTDD4uBZaMA==}
@ -16095,14 +16266,12 @@ packages:
'@babel/runtime': 7.16.3
jss: 10.8.2
tiny-warning: 1.0.3
dev: true
/jss-plugin-props-sort/10.8.2:
resolution: {integrity: sha512-wqdcjayKRWBZnNpLUrXvsWqh+5J5YToAQ+8HNBNw0kZxVvCDwzhK2Nx6AKs7p+5/MbAh2PLgNW5Ym/ysbVAuqQ==}
dependencies:
'@babel/runtime': 7.16.3
jss: 10.8.2
dev: true
/jss-plugin-rule-value-function/10.8.2:
resolution: {integrity: sha512-bW0EKAs+0HXpb6BKJhrn94IDdiWb0CnSluTkh0rGEgyzY/nmD1uV/Wf6KGlesGOZ9gmJzQy+9FFdxIUID1c9Ug==}
@ -16110,7 +16279,6 @@ packages:
'@babel/runtime': 7.16.3
jss: 10.8.2
tiny-warning: 1.0.3
dev: true
/jss-plugin-vendor-prefixer/10.8.2:
resolution: {integrity: sha512-DeGv18QsSiYLSVIEB2+l0af6OToUe0JB+trpzUxyqD2QRC/5AzzDrCrYffO5AHZ81QbffYvSN/pkfZaTWpRXlg==}
@ -16118,7 +16286,6 @@ packages:
'@babel/runtime': 7.16.3
css-vendor: 2.0.8
jss: 10.8.2
dev: true
/jss/10.8.2:
resolution: {integrity: sha512-FkoUNxI329CKQ9OQC8L72MBF9KPf5q8mIupAJ5twU7G7XREW7ahb+7jFfrjZ4iy1qvhx1HwIWUIvkZBDnKkEdQ==}
@ -16127,7 +16294,6 @@ packages:
csstype: 3.0.9
is-in-browser: 1.1.3
tiny-warning: 1.0.3
dev: true
/jsx-ast-utils/2.2.3:
resolution: {integrity: sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==}
@ -18213,6 +18379,10 @@ packages:
hasBin: true
dev: false
/popper.js/1.16.1-lts:
resolution: {integrity: sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==}
dev: false
/portfinder/1.0.28:
resolution: {integrity: sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==}
engines: {node: '>= 0.12.0'}
@ -19596,7 +19766,6 @@ packages:
/react-is/17.0.2:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
dev: true
/react-json-view/1.21.3_react-dom@17.0.2+react@17.0.2:
resolution: {integrity: sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==}
@ -19624,7 +19793,7 @@ packages:
react-loadable: '*'
webpack: '>=4.41.1 || 5.x'
dependencies:
'@babel/runtime': 7.15.4
'@babel/runtime': 7.16.3
react-loadable: /@docusaurus/react-loadable/5.5.2_react@17.0.2
webpack: 5.61.0_esbuild@0.12.25
dev: false
@ -19636,7 +19805,7 @@ packages:
react-loadable: '*'
webpack: '>=4.41.1 || 5.x'
dependencies:
'@babel/runtime': 7.15.4
'@babel/runtime': 7.16.3
react-loadable: 5.5.0_react@17.0.2
webpack: 5.40.0_esbuild@0.12.25
dev: false
@ -19678,7 +19847,7 @@ packages:
react: '>=15'
react-router: '>=5'
dependencies:
'@babel/runtime': 7.15.4
'@babel/runtime': 7.16.3
react: 17.0.2
react-router: 5.2.0_react@17.0.2
dev: false
@ -19689,7 +19858,7 @@ packages:
react: '>=15'
react-router: '>=5'
dependencies:
'@babel/runtime': 7.15.4
'@babel/runtime': 7.16.3
react: 17.0.2
react-router: 5.2.1_react@17.0.2
dev: false
@ -19699,7 +19868,7 @@ packages:
peerDependencies:
react: '>=15'
dependencies:
'@babel/runtime': 7.15.4
'@babel/runtime': 7.16.3
history: 4.10.1
loose-envify: 1.4.0
prop-types: 15.7.2
@ -19728,7 +19897,7 @@ packages:
peerDependencies:
react: '>=15'
dependencies:
'@babel/runtime': 7.15.4
'@babel/runtime': 7.16.3
history: 4.10.1
hoist-non-react-statics: 3.3.2
loose-envify: 1.4.0
@ -19772,7 +19941,7 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0
dependencies:
'@babel/runtime': 7.15.4
'@babel/runtime': 7.16.3
react: 17.0.2
use-composed-ref: 1.1.0_react@17.0.2
use-latest: 1.2.0_react@17.0.2
@ -19786,13 +19955,12 @@ packages:
react: '>=16.6.0'
react-dom: '>=16.6.0'
dependencies:
'@babel/runtime': 7.15.4
'@babel/runtime': 7.16.3
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.7.2
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
dev: true
/react-twitter-widgets/1.10.0_react@17.0.2:
resolution: {integrity: sha512-K7MAREhkKJxrhoiNWricKs1O++NyElnVpcplLzZ67gDrmeIsD3E4TUzlt0/nTZAHPOPPc86V4kEd4KIg4de7cQ==}
@ -21811,6 +21979,32 @@ packages:
webpack: 5.61.0_esbuild@0.12.25
dev: false
/terser-webpack-plugin/5.2.4_esbuild@0.12.25+webpack@5.64.0:
resolution: {integrity: sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==}
engines: {node: '>= 10.13.0'}
peerDependencies:
'@swc/core': '*'
esbuild: '*'
uglify-js: '*'
webpack: ^5.1.0
peerDependenciesMeta:
'@swc/core':
optional: true
esbuild:
optional: true
uglify-js:
optional: true
dependencies:
esbuild: 0.12.25
jest-worker: 27.2.5
p-limit: 3.1.0
schema-utils: 3.1.1
serialize-javascript: 6.0.0
source-map: 0.6.1
terser: 5.7.2
webpack: 5.64.0_esbuild@0.12.25
dev: false
/terser-webpack-plugin/5.2.4_webpack@5.52.0:
resolution: {integrity: sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==}
engines: {node: '>= 10.13.0'}
@ -21859,7 +22053,6 @@ packages:
source-map: 0.6.1
terser: 5.7.2
webpack: 5.64.0_webpack-cli@4.7.2
dev: true
/terser/4.8.0:
resolution: {integrity: sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==}
@ -23439,6 +23632,86 @@ packages:
- uglify-js
dev: false
/webpack/5.64.0:
resolution: {integrity: sha512-UclnN24m054HaPC45nmDEosX6yXWD+UGC12YtUs5i356DleAUGMDC9LBAw37xRRfgPKYIdCYjGA7RZ1AA+ZnGg==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
webpack-cli: '*'
peerDependenciesMeta:
webpack-cli:
optional: true
dependencies:
'@types/eslint-scope': 3.7.0
'@types/estree': 0.0.50
'@webassemblyjs/ast': 1.11.1
'@webassemblyjs/wasm-edit': 1.11.1
'@webassemblyjs/wasm-parser': 1.11.1
acorn: 8.4.1
acorn-import-assertions: 1.7.6_acorn@8.4.1
browserslist: 4.17.4
chrome-trace-event: 1.0.2
enhanced-resolve: 5.8.3
es-module-lexer: 0.9.3
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
graceful-fs: 4.2.6
json-parse-better-errors: 1.0.2
loader-runner: 4.2.0
mime-types: 2.1.31
neo-async: 2.6.2
schema-utils: 3.1.1
tapable: 2.2.0
terser-webpack-plugin: 5.2.4_webpack@5.64.0
watchpack: 2.2.0
webpack-sources: 3.2.0
transitivePeerDependencies:
- '@swc/core'
- esbuild
- uglify-js
dev: false
/webpack/5.64.0_esbuild@0.12.25:
resolution: {integrity: sha512-UclnN24m054HaPC45nmDEosX6yXWD+UGC12YtUs5i356DleAUGMDC9LBAw37xRRfgPKYIdCYjGA7RZ1AA+ZnGg==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
webpack-cli: '*'
peerDependenciesMeta:
webpack-cli:
optional: true
dependencies:
'@types/eslint-scope': 3.7.0
'@types/estree': 0.0.50
'@webassemblyjs/ast': 1.11.1
'@webassemblyjs/wasm-edit': 1.11.1
'@webassemblyjs/wasm-parser': 1.11.1
acorn: 8.4.1
acorn-import-assertions: 1.7.6_acorn@8.4.1
browserslist: 4.17.4
chrome-trace-event: 1.0.2
enhanced-resolve: 5.8.3
es-module-lexer: 0.9.3
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
graceful-fs: 4.2.6
json-parse-better-errors: 1.0.2
loader-runner: 4.2.0
mime-types: 2.1.31
neo-async: 2.6.2
schema-utils: 3.1.1
tapable: 2.2.0
terser-webpack-plugin: 5.2.4_esbuild@0.12.25+webpack@5.64.0
watchpack: 2.2.0
webpack-sources: 3.2.0
transitivePeerDependencies:
- '@swc/core'
- esbuild
- uglify-js
dev: false
/webpack/5.64.0_webpack-cli@4.7.2:
resolution: {integrity: sha512-UclnN24m054HaPC45nmDEosX6yXWD+UGC12YtUs5i356DleAUGMDC9LBAw37xRRfgPKYIdCYjGA7RZ1AA+ZnGg==}
engines: {node: '>=10.13.0'}

@ -39,6 +39,7 @@ module.exports = {
i18n: i18nConfig,
plugins: [
'docusaurus-plugin-sass',
"docusaurus-plugin-contributors",
isProductionDeployment && ['docusaurus-plugin-sentry', { DSN: 'a7bc89ee3f284570b1d9a47e600e7597' }]
].filter(Boolean),
webpack: {

@ -28,6 +28,9 @@
"@docusaurus/preset-classic": "2.0.0-beta.9",
"@docusaurus/remark-plugin-npm2yarn": "2.0.0-beta.9",
"@docusaurus/theme-search-algolia": "2.0.0-beta.9",
"docusaurus-plugin-contributors": "workspace:1.0.0",
"@material-ui/core": "^4.11.2",
"@material-ui/icons": "^4.11.2",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.1.1",
"copy-text-to-clipboard": "^3.0.1",

@ -0,0 +1,247 @@
import Translate from '@docusaurus/Translate';
import { ListItemSecondaryAction, Tooltip } from '@material-ui/core';
import Avatar from '@material-ui/core/Avatar';
import Badge from '@material-ui/core/Badge';
import Chip from '@material-ui/core/Chip';
import Dialog from '@material-ui/core/Dialog';
import DialogContent from '@material-ui/core/DialogContent';
import DialogTitle from '@material-ui/core/DialogTitle';
import Grid from '@material-ui/core/Grid';
import IconButton from '@material-ui/core/IconButton';
import List from '@material-ui/core/List';
import ListItem from '@material-ui/core/ListItem';
import ListItemIcon from '@material-ui/core/ListItemIcon';
import ListItemText from '@material-ui/core/ListItemText';
import Typography from '@material-ui/core/Typography';
import { green, yellow } from '@material-ui/core/colors';
import { createStyles, makeStyles, withStyles } from '@material-ui/core/styles';
import { ThemeProvider, createMuiTheme } from '@material-ui/core/styles';
import EmojiEventsIcon from '@material-ui/icons/EmojiEvents';
import MergeTypeIcon from '@material-ui/icons/MergeType';
import StarIcon from '@material-ui/icons/Star';
import Layout from '@theme/Layout';
import React from 'react';
const generateImage = (id) => `https://avatars3.githubusercontent.com/u/${id}?s=120&v=4`;
const theme = createMuiTheme({
palette: {
primary: {
main: '#4B5E40',
},
secondary: {
main: '#808a79',
},
},
});
const useStyles = makeStyles((theme) =>
createStyles({
small: {
width: theme.spacing(3),
height: theme.spacing(3),
},
medium: {
width: theme.spacing(6),
height: theme.spacing(6),
},
large: {
width: theme.spacing(12),
height: theme.spacing(12),
},
root: {
width: '100%',
maxWidth: 360,
backgroundColor: theme.palette.background.paper,
},
inline: {
display: 'inline',
},
starColor: {
color: yellow[500],
},
archived: {
opacity: `0.4`,
},
emojiEvent: {
color: green[800],
},
})
);
const StyledBadge = withStyles(() => ({
badge: {
right: -3,
top: 8,
padding: '0 4px',
},
}))(Badge);
function ListItemLink(props) {
return <ListItem button component="a" {...props} />;
}
type ContributorsProps = {
contributors: any;
};
function convertItemTo(item) {
const node = {
url: item.login,
userId: item.id,
id: `key-${item.login}`,
contributions: item.contributions,
repositories: item.repositories,
};
return { node };
}
const Contributors: React.FC<ContributorsProps> = ({ contributors }): React.ReactElement => {
const [user, setUser] = React.useState(null);
const [open, setOpen] = React.useState(false);
const classes = useStyles();
const handleClickOpen = (item) => {
setUser(item);
setOpen(true);
};
const handleClose = () => {
setOpen(false);
setUser(null);
};
return (
<>
<Layout
title="Contributors"
description="Verdaccio Contributors, thanks to the community Verdaccio keeps running">
<ThemeProvider theme={theme}>
<div style={{ display: 'flex', width: '80%', flexFlow: 'wrap', margin: '1rem auto' }}>
<header>
<h1>
<Translate>Contributors</Translate>
</h1>
<p>
<Translate>
Thanks to everyone involved in maintaining and improving Verdaccio, this page is
to thank you every minute spent here.
</Translate>{' '}
<b>
<Translate>Thanks</Translate>
</b>
</p>
</header>
</div>
<div style={{ display: 'flex', width: '80%', flexFlow: 'wrap', margin: '1rem auto' }}>
{contributors.map((item) => {
const userItem = convertItemTo(item);
return (
<div
role="button"
tabIndex={0}
style={{ flex: 'auto', cursor: 'pointer', margin: '10px' }}
key={userItem.node.url}
onKeyDown={() => handleClickOpen(userItem)}
onClick={() => handleClickOpen(userItem)}>
<Avatar
src={generateImage(userItem.node.userId)}
alt={userItem.node.url}
className={classes.large}
/>
</div>
);
})}
</div>
{user && (
<Dialog onClose={handleClose} aria-labelledby="simple-dialog-title" open={open}>
<DialogTitle id="simple-dialog-title">
<Grid container alignContent="center-flex" alignItems="center" justify="center">
<Grid item lg="3" md="3" sm="3">
<a
href={'https://github.com/' + user.node.url}
target="_blank"
rel="noreferrer">
<Avatar
src={generateImage(user.node.userId)}
alt={user.node.url}
className={classes.medium}
/>
</a>
</Grid>
<Grid item lg="6" md="6" sm="6">
<Typography variant="h6">{user.node.url}</Typography>
</Grid>
<Grid lg="2" md="2" sm="2">
<Chip
icon={<EmojiEventsIcon className={classes.emojiEvent} />}
label={user.node.contributions}
color="default"
/>
</Grid>
</Grid>
</DialogTitle>
<DialogContent>
<div className={classes.root}>
<List component="nav" aria-label="main mailbox folders">
{user.node.repositories.map((repo) => {
return (
<ListItemLink
className={repo.archived ? classes.archived : ''}
key={repo.name}
href={repo.html_url}
target="_blank"
rel="noreferrer">
<ListItemIcon>
<Badge
badgeContent={repo.contributions}
color="green"
max={9999}
anchorOrigin={{
vertical: 'top',
horizontal: 'right',
}}>
<MergeTypeIcon />
</Badge>
</ListItemIcon>
<Tooltip title={repo.archived ? 'archived' : ''}>
<ListItemText
primary={<Typography color="primary">{repo.name}</Typography>}
secondary={
<Typography color="secondary" variant="body2">
{repo.description}
</Typography>
}
/>
</Tooltip>
<ListItemSecondaryAction
className={repo.archived ? classes.archived : ''}>
<a
href={'https://github.com/' + repo.full_name + '/stargazers'}
target="_blank"
rel="noreferrer">
<IconButton edges="end" aria-label="delete">
<StyledBadge badgeContent={repo.staergezers} max={999}>
<StarIcon className={classes.starColor} />
</StyledBadge>
</IconButton>
</a>
</ListItemSecondaryAction>
</ListItemLink>
);
})}
</List>
</div>
</DialogContent>
</Dialog>
)}
</ThemeProvider>
</Layout>
</>
);
};
export default Contributors;

@ -1,15 +0,0 @@
.wrapper {
margin: 1rem auto;
width: 80%;
}
.w-100 {
width: 100%;
}
.mt-2 {
margin-top: 2rem;
}
.h-screen {
height: 100vh;
}

@ -1,41 +0,0 @@
import Translate, { translate } from '@docusaurus/Translate';
import Layout from '@theme/Layout';
import React from 'react';
import styles from './contributors.module.scss';
const Contributors = (): React.ReactElement => (
<Layout
title="Contributors"
description="Verdaccio Contributors, thanks to the community Verdaccio keeps running">
<div className={styles.wrapper}>
<header>
<h1>
<Translate>Contributors</Translate>
</h1>
<p>
<Translate>
Thanks to everyone involved in maintaining and improving Verdaccio, this page is to
thank you every minute spent here.
</Translate>{' '}
<b>
<Translate>Thanks</Translate>
</b>
</p>
</header>
<main>
<div className={styles['mt-2']}>
<iframe
src="https://verdacciocontributors.gtsb.io/"
frameBorder="0"
scrolling="yes"
title={translate({ message: 'Contributors of Verdaccio' })}
width="100%"
className={styles['h-screen']}
/>
</div>
</main>
</div>
</Layout>
);
export default Contributors;