From 05d53bbf4ced9d25f018d1a4c6fac9db12bacfc4 Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Wed, 23 Mar 2022 17:40:15 +0000 Subject: [PATCH] 106 - migrate mainnet stats to monorepo (#107) * Initial commit of generated mainnet-stats directory * Migration partly complete * Migration complete * Vega logo now in ui toolkit * Specified a port that stops conflicts with other e2e tests * Extra config for swapping to port that stops conflicts with other e2e tests. Also file name case change * Adding the Cypress project ID to allow recording * fix test * Mainnet stats manager moved into library * Mainnet stats project now importing manager element from lib * Block Explorer has mainnet stats on home route * Styling tweak to stop mainnet stats tables trying to match heights * Spacing alignment tweaks * Changing header text and tests to align with other branches * Correct header test for mainnet-stats app * Correct h3 test for mainnet-stats app * Fix linting issue * fix casing issue for CI * Corrected mistake in merge Co-authored-by: Dexter --- .../src/support/pages/base-page.js | 2 +- apps/explorer/src/app/routes/home/index.tsx | 4 +- apps/stats-mainnet-e2e/.eslintrc.json | 10 + apps/stats-mainnet-e2e/cypress.json | 14 ++ apps/stats-mainnet-e2e/project.json | 28 +++ .../src/fixtures/example.json | 4 + .../src/integration/app.spec.ts | 7 + .../stats-mainnet-e2e/src/support/commands.ts | 33 ++++ apps/stats-mainnet-e2e/src/support/index.ts | 17 ++ apps/stats-mainnet-e2e/tsconfig.json | 10 + apps/stats-mainnet/.babelrc | 11 ++ apps/stats-mainnet/.browserslistrc | 16 ++ apps/stats-mainnet/.eslintrc.json | 18 ++ apps/stats-mainnet/jest.config.js | 10 + apps/stats-mainnet/postcss.config.js | 10 + apps/stats-mainnet/project.json | 74 ++++++++ apps/stats-mainnet/src/app.tsx | 24 +++ .../src/assets/apple-touch-icon.png | Bin 0 -> 1405 bytes apps/stats-mainnet/src/assets/favicon.ico | Bin 0 -> 7406 bytes apps/stats-mainnet/src/assets/logo.png | Bin 0 -> 547 bytes apps/stats-mainnet/src/assets/logo192.png | Bin 0 -> 1517 bytes apps/stats-mainnet/src/assets/manifest.json | 20 ++ apps/stats-mainnet/src/assets/robots.txt | 3 + .../src/components/header/header.tsx | 32 ++++ .../src/components/header/index.ts | 1 + .../components/images/dark-mode-toggle.tsx | 18 ++ .../src/components/images/index.ts | 2 + .../components/images/light-mode-toggle.tsx | 10 + .../src/components/videos/index.ts | 1 + .../videos/vega-background-video.tsx | 16 ++ apps/stats-mainnet/src/config/types.ts | 4 + apps/stats-mainnet/src/index.html | 52 ++++++ apps/stats-mainnet/src/main.tsx | 17 ++ apps/stats-mainnet/src/polyfills.ts | 7 + apps/stats-mainnet/src/react-app-env.d.ts | 1 + apps/stats-mainnet/src/reportWebVitals.ts | 15 ++ apps/stats-mainnet/src/setupTests.ts | 5 + .../src/styles/AlphaLyrae-Medium.woff | Bin 0 -> 131420 bytes apps/stats-mainnet/src/styles/styles.css | 39 ++++ apps/stats-mainnet/tailwind.config.js | 12 ++ apps/stats-mainnet/tsconfig.app.json | 22 +++ apps/stats-mainnet/tsconfig.json | 25 +++ apps/stats-mainnet/tsconfig.spec.json | 23 +++ libs/mainnet-stats-manager/.babelrc | 12 ++ libs/mainnet-stats-manager/.eslintrc.json | 18 ++ libs/mainnet-stats-manager/README.md | 7 + libs/mainnet-stats-manager/jest.config.js | 9 + libs/mainnet-stats-manager/package.json | 4 + libs/mainnet-stats-manager/project.json | 43 +++++ .../good-threshold-indicator.tsx | 21 +++ .../good-threshold-indicator/index.ts | 1 + .../components/promoted-stats-item/index.ts | 1 + .../promoted-stats-item.tsx | 26 +++ .../src/components/promoted-stats/index.ts | 1 + .../promoted-stats/promoted-stats.tsx | 13 ++ .../src/components/stats-manager/index.ts | 1 + .../stats-manager/stats-manager.tsx | 120 ++++++++++++ .../src/components/table-row/index.ts | 1 + .../src/components/table-row/table-row.tsx | 28 +++ .../src/components/table/index.ts | 1 + .../src/components/table/table.tsx | 13 ++ .../src/components/tooltip/index.ts | 1 + .../src/components/tooltip/tooltip.tsx | 36 ++++ .../src/config/stats-fields.ts | 174 ++++++++++++++++++ .../mainnet-stats-manager/src/config/types.ts | 36 ++++ libs/mainnet-stats-manager/src/index.ts | 1 + libs/mainnet-stats-manager/tsconfig.json | 25 +++ libs/mainnet-stats-manager/tsconfig.lib.json | 22 +++ libs/mainnet-stats-manager/tsconfig.spec.json | 19 ++ libs/tailwindcss-config/src/theme.js | 6 +- .../src/components/vega-logo/index.ts | 1 + .../components/vega-logo/lozenge.stories.tsx | 11 ++ .../components/vega-logo/vega-logo.spec.tsx | 10 + .../src/components/vega-logo/vega-logo.tsx | 16 ++ libs/ui-toolkit/src/index.ts | 1 + package.json | 4 +- tsconfig.base.json | 3 + workspace.json | 3 + yarn.lock | 96 +++++++++- 79 files changed, 1397 insertions(+), 5 deletions(-) create mode 100644 apps/stats-mainnet-e2e/.eslintrc.json create mode 100644 apps/stats-mainnet-e2e/cypress.json create mode 100644 apps/stats-mainnet-e2e/project.json create mode 100644 apps/stats-mainnet-e2e/src/fixtures/example.json create mode 100644 apps/stats-mainnet-e2e/src/integration/app.spec.ts create mode 100644 apps/stats-mainnet-e2e/src/support/commands.ts create mode 100644 apps/stats-mainnet-e2e/src/support/index.ts create mode 100644 apps/stats-mainnet-e2e/tsconfig.json create mode 100644 apps/stats-mainnet/.babelrc create mode 100644 apps/stats-mainnet/.browserslistrc create mode 100644 apps/stats-mainnet/.eslintrc.json create mode 100644 apps/stats-mainnet/jest.config.js create mode 100644 apps/stats-mainnet/postcss.config.js create mode 100644 apps/stats-mainnet/project.json create mode 100644 apps/stats-mainnet/src/app.tsx create mode 100644 apps/stats-mainnet/src/assets/apple-touch-icon.png create mode 100644 apps/stats-mainnet/src/assets/favicon.ico create mode 100644 apps/stats-mainnet/src/assets/logo.png create mode 100644 apps/stats-mainnet/src/assets/logo192.png create mode 100644 apps/stats-mainnet/src/assets/manifest.json create mode 100644 apps/stats-mainnet/src/assets/robots.txt create mode 100644 apps/stats-mainnet/src/components/header/header.tsx create mode 100644 apps/stats-mainnet/src/components/header/index.ts create mode 100644 apps/stats-mainnet/src/components/images/dark-mode-toggle.tsx create mode 100644 apps/stats-mainnet/src/components/images/index.ts create mode 100644 apps/stats-mainnet/src/components/images/light-mode-toggle.tsx create mode 100644 apps/stats-mainnet/src/components/videos/index.ts create mode 100644 apps/stats-mainnet/src/components/videos/vega-background-video.tsx create mode 100644 apps/stats-mainnet/src/config/types.ts create mode 100644 apps/stats-mainnet/src/index.html create mode 100644 apps/stats-mainnet/src/main.tsx create mode 100644 apps/stats-mainnet/src/polyfills.ts create mode 100644 apps/stats-mainnet/src/react-app-env.d.ts create mode 100644 apps/stats-mainnet/src/reportWebVitals.ts create mode 100644 apps/stats-mainnet/src/setupTests.ts create mode 100644 apps/stats-mainnet/src/styles/AlphaLyrae-Medium.woff create mode 100644 apps/stats-mainnet/src/styles/styles.css create mode 100644 apps/stats-mainnet/tailwind.config.js create mode 100644 apps/stats-mainnet/tsconfig.app.json create mode 100644 apps/stats-mainnet/tsconfig.json create mode 100644 apps/stats-mainnet/tsconfig.spec.json create mode 100644 libs/mainnet-stats-manager/.babelrc create mode 100644 libs/mainnet-stats-manager/.eslintrc.json create mode 100644 libs/mainnet-stats-manager/README.md create mode 100644 libs/mainnet-stats-manager/jest.config.js create mode 100644 libs/mainnet-stats-manager/package.json create mode 100644 libs/mainnet-stats-manager/project.json create mode 100644 libs/mainnet-stats-manager/src/components/good-threshold-indicator/good-threshold-indicator.tsx create mode 100644 libs/mainnet-stats-manager/src/components/good-threshold-indicator/index.ts create mode 100644 libs/mainnet-stats-manager/src/components/promoted-stats-item/index.ts create mode 100644 libs/mainnet-stats-manager/src/components/promoted-stats-item/promoted-stats-item.tsx create mode 100644 libs/mainnet-stats-manager/src/components/promoted-stats/index.ts create mode 100644 libs/mainnet-stats-manager/src/components/promoted-stats/promoted-stats.tsx create mode 100644 libs/mainnet-stats-manager/src/components/stats-manager/index.ts create mode 100644 libs/mainnet-stats-manager/src/components/stats-manager/stats-manager.tsx create mode 100644 libs/mainnet-stats-manager/src/components/table-row/index.ts create mode 100644 libs/mainnet-stats-manager/src/components/table-row/table-row.tsx create mode 100644 libs/mainnet-stats-manager/src/components/table/index.ts create mode 100644 libs/mainnet-stats-manager/src/components/table/table.tsx create mode 100644 libs/mainnet-stats-manager/src/components/tooltip/index.ts create mode 100644 libs/mainnet-stats-manager/src/components/tooltip/tooltip.tsx create mode 100644 libs/mainnet-stats-manager/src/config/stats-fields.ts create mode 100644 libs/mainnet-stats-manager/src/config/types.ts create mode 100644 libs/mainnet-stats-manager/src/index.ts create mode 100644 libs/mainnet-stats-manager/tsconfig.json create mode 100644 libs/mainnet-stats-manager/tsconfig.lib.json create mode 100644 libs/mainnet-stats-manager/tsconfig.spec.json create mode 100644 libs/ui-toolkit/src/components/vega-logo/index.ts create mode 100644 libs/ui-toolkit/src/components/vega-logo/lozenge.stories.tsx create mode 100644 libs/ui-toolkit/src/components/vega-logo/vega-logo.spec.tsx create mode 100644 libs/ui-toolkit/src/components/vega-logo/vega-logo.tsx diff --git a/apps/explorer-e2e/src/support/pages/base-page.js b/apps/explorer-e2e/src/support/pages/base-page.js index 75fa90c98..344b6e125 100644 --- a/apps/explorer-e2e/src/support/pages/base-page.js +++ b/apps/explorer-e2e/src/support/pages/base-page.js @@ -54,7 +54,7 @@ export default class BasePage { validateSearchDisplayed() { cy.getByTestId(this.blockExplorerHeader).should( 'have.text', - 'Vega Block Explorer' + 'Vega Explorer' ); cy.getByTestId(this.searchField).should('be.visible'); } diff --git a/apps/explorer/src/app/routes/home/index.tsx b/apps/explorer/src/app/routes/home/index.tsx index f1633ff56..032d9254b 100644 --- a/apps/explorer/src/app/routes/home/index.tsx +++ b/apps/explorer/src/app/routes/home/index.tsx @@ -1,7 +1,9 @@ +import { StatsManager } from '@vegaprotocol/mainnet-stats-manager'; + const Home = () => { return (
-

Home page content

+
); }; diff --git a/apps/stats-mainnet-e2e/.eslintrc.json b/apps/stats-mainnet-e2e/.eslintrc.json new file mode 100644 index 000000000..696cb8b12 --- /dev/null +++ b/apps/stats-mainnet-e2e/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/apps/stats-mainnet-e2e/cypress.json b/apps/stats-mainnet-e2e/cypress.json new file mode 100644 index 000000000..51e27859e --- /dev/null +++ b/apps/stats-mainnet-e2e/cypress.json @@ -0,0 +1,14 @@ +{ + "baseUrl": "http://localhost:3010", + "projectId": "et4snf", + "fileServerFolder": ".", + "fixturesFolder": "./src/fixtures", + "integrationFolder": "./src/integration", + "modifyObstructiveCode": false, + "supportFile": "./src/support/index.ts", + "pluginsFile": false, + "video": true, + "videosFolder": "../../dist/cypress/apps/stats-mainnet-e2e/videos", + "screenshotsFolder": "../../dist/cypress/apps/stats-mainnet-e2e/screenshots", + "chromeWebSecurity": false +} diff --git a/apps/stats-mainnet-e2e/project.json b/apps/stats-mainnet-e2e/project.json new file mode 100644 index 000000000..bdf7accfc --- /dev/null +++ b/apps/stats-mainnet-e2e/project.json @@ -0,0 +1,28 @@ +{ + "root": "apps/stats-mainnet-e2e", + "sourceRoot": "apps/stats-mainnet-e2e/src", + "projectType": "application", + "targets": { + "e2e": { + "executor": "@nrwl/cypress:cypress", + "options": { + "cypressConfig": "apps/stats-mainnet-e2e/cypress.json", + "devServerTarget": "stats-mainnet:serve" + }, + "configurations": { + "production": { + "devServerTarget": "stats-mainnet:serve:production" + } + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/stats-mainnet-e2e/**/*.{js,ts}"] + } + } + }, + "tags": [], + "implicitDependencies": ["stats-mainnet"] +} diff --git a/apps/stats-mainnet-e2e/src/fixtures/example.json b/apps/stats-mainnet-e2e/src/fixtures/example.json new file mode 100644 index 000000000..294cbed6c --- /dev/null +++ b/apps/stats-mainnet-e2e/src/fixtures/example.json @@ -0,0 +1,4 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io" +} diff --git a/apps/stats-mainnet-e2e/src/integration/app.spec.ts b/apps/stats-mainnet-e2e/src/integration/app.spec.ts new file mode 100644 index 000000000..77a688f7c --- /dev/null +++ b/apps/stats-mainnet-e2e/src/integration/app.spec.ts @@ -0,0 +1,7 @@ +describe('stats-mainnet', () => { + beforeEach(() => cy.visit('/')); + + it('should display header', () => { + cy.get('h3').should('have.text', '/ Mainnet'); + }); +}); diff --git a/apps/stats-mainnet-e2e/src/support/commands.ts b/apps/stats-mainnet-e2e/src/support/commands.ts new file mode 100644 index 000000000..310f1fa0e --- /dev/null +++ b/apps/stats-mainnet-e2e/src/support/commands.ts @@ -0,0 +1,33 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** + +// eslint-disable-next-line @typescript-eslint/no-namespace +declare namespace Cypress { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + interface Chainable { + login(email: string, password: string): void; + } +} +// +// -- This is a parent command -- +Cypress.Commands.add('login', (email, password) => { + console.log('Custom command example: Login', email, password); +}); +// +// -- This is a child command -- +// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) diff --git a/apps/stats-mainnet-e2e/src/support/index.ts b/apps/stats-mainnet-e2e/src/support/index.ts new file mode 100644 index 000000000..3d469a6b6 --- /dev/null +++ b/apps/stats-mainnet-e2e/src/support/index.ts @@ -0,0 +1,17 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; diff --git a/apps/stats-mainnet-e2e/tsconfig.json b/apps/stats-mainnet-e2e/tsconfig.json new file mode 100644 index 000000000..c4f818ecd --- /dev/null +++ b/apps/stats-mainnet-e2e/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "sourceMap": false, + "outDir": "../../dist/out-tsc", + "allowJs": true, + "types": ["cypress", "node"] + }, + "include": ["src/**/*.ts", "src/**/*.js"] +} diff --git a/apps/stats-mainnet/.babelrc b/apps/stats-mainnet/.babelrc new file mode 100644 index 000000000..61641ec8a --- /dev/null +++ b/apps/stats-mainnet/.babelrc @@ -0,0 +1,11 @@ +{ + "presets": [ + [ + "@nrwl/react/babel", + { + "runtime": "automatic" + } + ] + ], + "plugins": [] +} diff --git a/apps/stats-mainnet/.browserslistrc b/apps/stats-mainnet/.browserslistrc new file mode 100644 index 000000000..f1d12df4f --- /dev/null +++ b/apps/stats-mainnet/.browserslistrc @@ -0,0 +1,16 @@ +# This file is used by: +# 1. autoprefixer to adjust CSS to support the below specified browsers +# 2. babel preset-env to adjust included polyfills +# +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries +# +# If you need to support different browsers in production, you may tweak the list below. + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major version +last 2 iOS major versions +Firefox ESR +not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file diff --git a/apps/stats-mainnet/.eslintrc.json b/apps/stats-mainnet/.eslintrc.json new file mode 100644 index 000000000..734ddacee --- /dev/null +++ b/apps/stats-mainnet/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["plugin:@nrwl/nx/react", "../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/apps/stats-mainnet/jest.config.js b/apps/stats-mainnet/jest.config.js new file mode 100644 index 000000000..d4328090a --- /dev/null +++ b/apps/stats-mainnet/jest.config.js @@ -0,0 +1,10 @@ +module.exports = { + displayName: 'stats-mainnet', + preset: '../../jest.preset.js', + transform: { + '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nrwl/react/plugins/jest', + '^.+\\.[tj]sx?$': 'babel-jest', + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], + coverageDirectory: '../../coverage/apps/stats-mainnet', +}; diff --git a/apps/stats-mainnet/postcss.config.js b/apps/stats-mainnet/postcss.config.js new file mode 100644 index 000000000..cbdd9c22c --- /dev/null +++ b/apps/stats-mainnet/postcss.config.js @@ -0,0 +1,10 @@ +const { join } = require('path'); + +module.exports = { + plugins: { + tailwindcss: { + config: join(__dirname, 'tailwind.config.js'), + }, + autoprefixer: {}, + }, +}; diff --git a/apps/stats-mainnet/project.json b/apps/stats-mainnet/project.json new file mode 100644 index 000000000..e66aa17c6 --- /dev/null +++ b/apps/stats-mainnet/project.json @@ -0,0 +1,74 @@ +{ + "root": "apps/stats-mainnet", + "sourceRoot": "apps/stats-mainnet/src", + "projectType": "application", + "targets": { + "build": { + "executor": "@nrwl/web:webpack", + "outputs": ["{options.outputPath}"], + "defaultConfiguration": "production", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/stats-mainnet", + "index": "apps/stats-mainnet/src/index.html", + "baseHref": "/", + "main": "apps/stats-mainnet/src/main.tsx", + "polyfills": "apps/stats-mainnet/src/polyfills.ts", + "tsConfig": "apps/stats-mainnet/tsconfig.app.json", + "assets": [ + "apps/stats-mainnet/src/assets/favicon.ico", + "apps/stats-mainnet/src/assets" + ], + "styles": ["apps/stats-mainnet/src/styles/styles.css"], + "scripts": [], + "webpackConfig": "@nrwl/react/plugins/webpack" + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "apps/stats-mainnet/src/environments/environment.ts", + "with": "apps/stats-mainnet/src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false + } + } + }, + "serve": { + "executor": "@nrwl/web:dev-server", + "options": { + "port": 3010, + "buildTarget": "stats-mainnet:build", + "hmr": true + }, + "configurations": { + "production": { + "buildTarget": "stats-mainnet:build:production", + "hmr": false + } + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/stats-mainnet/**/*.{ts,tsx,js,jsx}"] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": ["coverage/apps/stats-mainnet"], + "options": { + "jestConfig": "apps/stats-mainnet/jest.config.js", + "passWithNoTests": true + } + } + }, + "tags": [] +} diff --git a/apps/stats-mainnet/src/app.tsx b/apps/stats-mainnet/src/app.tsx new file mode 100644 index 000000000..42aa79564 --- /dev/null +++ b/apps/stats-mainnet/src/app.tsx @@ -0,0 +1,24 @@ +import React, { useState } from 'react'; +import { Header } from './components/header'; +import { StatsManager } from '@vegaprotocol/mainnet-stats-manager'; + +function App() { + const [darkMode, setDarkMode] = useState( + document.documentElement.classList.contains('dark-mode-preferred') + ); + + return ( +
+
+
+ +
+
+ ); +} + +export default App; diff --git a/apps/stats-mainnet/src/assets/apple-touch-icon.png b/apps/stats-mainnet/src/assets/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..50cdf778219be9f8d123803a6a78e94f06ede5ef GIT binary patch literal 1405 zcmeAS@N?(olHy`uVBq!ia0vp^TR@ltNH9n&i+l&9SkfJR9T^xl_H+M9WCik>lDyqr z82-2SpV<%Ov6p!Iy0SlG;uK_-JAVA75d#DBHcuDFkcwMx=bXUpdfMD#CAjrCV2Y%Ytp9v#y!hm(OeO zO1W2-t!ACO{L61ky_2)g@0+V)JiE3Z>^7jy3=9wU7aSDtUY{7twA16W$D;UqnX?k- zoW2?%>lr=w;QhEF39X%msnOj!SIyfe&f8;_w$yvY$GXH1G1eZ%KmXmGb?W?Te`nA5 zDx;N4rq9!T*S#gc#waWG){IG)(;vwPZcX#{Zk1Kr>bVXO`lfu(X;XLU zyW|J$%4btTzP7q-)cb7M=xJ`ZJtuRsQC*({#u*WS|auPzMX0hzFV<-;;r^e zU#{#ZRXX&tEPVg^sIC5fD=r5$-pEzZUG>qr2#~+Jfx(%4ai9dH%mD)H(UhAzQ8KCvQzDn6vZ1veoHV?e01W z2&KK7Z?NZdO>)p(j)?CfH#p6H-wJUzsdUab9R)e?_{p4-ruzPpVy0T(%WIYc3w#D`%B#Z`m0@X z&Ya0vnK&!jR?Fewe*LK2QU|H4n>%eAAK!~wW`FmgZ-1;?y3naDzL)=>7d!S@-qmTz zKHH2J-%5VUoCZ47*~$c*at=(K^6meGu8uEv)6=(Z{n+&1=eGIP)O60L;_qj^TUWO= zi7P+n*SRglP&w_ z0QHE&^rWN~Cl_TFlw{`TF}P$F7vv;Xic3%30aPLZQ<9sQSDKcXTvA$;S_D%wQ|jeS zpc+BAn*5a19GK*fIdc?%lHpY$5hX#1kx@VP+3`tW5HT#X8khL>kZ83 z$R6MFJ$zjed6b&P1U8>^BIM+n*d~j&(e<@-{i$^Q*%Pd8PV@VfYJ)~o)}BRR6_px| zCZ2Q_E98Fvoa!+%MLEBD78QD%tk!8Xw%AIH-pD$Ak;n6E@)-P#dh!77)G^~$0~yy< zjT!$YJ~TOe6J4JpHNq$xZ+(Yl;X;ecxx}d|AB6_S!xu;F5pg!MvS`Le*?4#fc@z(? z^x#h!4__?cqbU;d1N_&&2loAEM_*}7M=@`1Iv0xFA52_&dYdu^7IprZk&%&+OLv?R zt0hAY{fIC0gbe)D8K6AXO0EF8qC8bhoMGb~7L=DNl}cQ{em#bpx?C>CO)p%yz<6m< zQ4wChevP|#@5145AT>1=w{G2HT(zyOjd9h2f&#`-DId+x&u5%;>(;G|j~+R41W%tn zWn45lITl@8XX-SQEp1PDCMD>Hf_R<8#fpqUAAl) z*DtYaTv)7+qamAax7;em~=u9*>9d%gviNGk!UoR-qL#AY|b0W?)`0 znBbUTavsN3*(Qj`O%S)qrsz`LZsSZ}ongEsJl;UMCO*D0q%T&D7mt*2Tm=yTGdT5- z?8igdBGa48F_U}yWyn>S%J8nJ8FE>NAF zYSvW$rP}f7)2ErneCN&`oI7_8IXO8@FQ#X>R4T>NrAt|@Vzb%Uxld~qS_9GZ-EOzz z?Af!}w{IV-Kd9bJb#JPjo6Tlc_fTz}>dZTK>;SDbXq`j#XPRS`)S%~=?0rSJ6WH|R>_bv zjX*6CPq9Q;eqfoQE(eA%! Fe*s9s&QkyY literal 0 HcmV?d00001 diff --git a/apps/stats-mainnet/src/assets/logo.png b/apps/stats-mainnet/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0245ca6ca81c05ecfe8aced61d2285f9fb099639 GIT binary patch literal 547 zcmV+;0^I$HP)KmQSvtKoG{O!Dd*vfu&nPBA|Ey4&c@k2(d}rco|k= zID{7wHxd?}L;fVBC!sRLH}jN7o|#GByl+`u>0f=--IWITnj(aVzeEW6WZK^qX$nyk z#rJ*2nD6_FqO|e8Y41o71OTvYyQ(VAc~w=mZMX5hX%7LWY36y(IWLOBvaCk{%d(21 z;GE}qZklF4Kv|Ypn)MWb4$89p1_<9R`hRax-n_@#?S?OzQra;sdI4s$89FG6!Z3_i zIv`D%qtR%;-^X!$I2?Ano#%Pm?G{N7eY5}^GG$q!_xp)Y-U zGr;}nO{dc*-bGOa09lq>0As8hFdmOjr&F4yNs=s=OT#c0i-oGHn4_wy<2dvAd@`9} zKBe?{JZ4#TyB$;!n l`#+N)2>46vo@if6KLM-Rp`fg+D69Yg002ovPDHLkV1lX(_mKbq literal 0 HcmV?d00001 diff --git a/apps/stats-mainnet/src/assets/logo192.png b/apps/stats-mainnet/src/assets/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..a229d08bab862389a65336a5227724f0e70577a2 GIT binary patch literal 1517 zcmeAS@N?(olHy`uVBq!ia0vp^2SAtuNHCOdH@*#|SkfJR9T^xl_H+M9WCik>lDyqr z82-2SpV<%Ov6p!Iy0SlG;uK_--*DjO5}jp^bRf21z({#{<|FU3C`@7}-Db17N4XhGAXW339z#kGqbG0Q)8nR}$< zdf`K-S0SYvCS~~_`JX@CZ|SPK(5rV#cLlq$0BweXI(G}_s*}-GQDwQojS*#?J5{;1 zn61+dsoe7`%_8%!`IlRZWZd5W_T=hhy1Urgx~|iS|9`bn;@|Gt_NqE{j{Q4JR%Zn) zDE{%n>VL;wDnjc@RzCG4UT!b^Tv%~9oy1t*6dE#GBE%kr>uB(>3T0Z{> ztN6SvOX5%LI~*dii<8^$wEkN586BamGljgr6wP+47iygKNiFPz!>R*k7#Xt_5_nnG zG&YzDY+z%$=5RoYBZ8R|4NWSr!>Wj(*CXu<#Zm;k1{9R)fPVg2v*u9r2fJuvn4!HWBJpQfyvJjZsg zQmM9|FYAhs#jadZTdi{6n}{vk`5t|{^F?p@YB!2bW<;=Yp~($pnB?A_a5njOlo z$Nv2E^6GBKmFw2XyRK9(T-uzSmbLxs=7~ltrWN(mH!f9fED&Jc zwIRvp$QqU`rnPC?S9D#8|DxtEv_7)n=0lm?*PiYa{vWXL>>cLxd@aVtcphkk`^qsM z-YZtTM}C3_&rz#{C;6IxQzX;GBUuhj-+M^smu@RZ=l^#a$KPl)H}tgKQxICT@J#6+ z7oW8kFU+sw3cdP;>oOO|>EG7ci{eg)W`A41YUSqJe?GCTOnLY3)fF~Lzx{dnaqh3@ z*7tqc^763pb`_3Szg2xb+Z0VIM7MZNH_QF9Sjs)$-iDif?_U8WrAasT8#fhrEA@X( zd!i+>dIn#^%pEh?C+`rBMoye7T(j&`mahDNhV{MIPQ~_PEKMBy7B)!6!Hv8|NItaOSe<*7Nz4-{}yw@vMd9` zkF`Izd}q2<Y?Yi}P+63jo>9W!3}Y!c78K;9DtP84 z>**+fY<{w3{~VwmahRTz)Z*l#%z~24{5%Gi%;JKa#7c4LsXKs5Bw$K%6Z1;b5|c|x zi&BeVYGz8kya`kz2v?Jzl9~gP{4r;a0#Gu%DkP#LD6w3jpeR2r6X=SP%7Rn{pk2uf z3>9-8f8yaN4Aam!<$wB&=hGktW@T=@WNu+)VeiQz%)$yT4JL { + return ( +
+ + +
+
+ + + +
+
+
+ ); +}; diff --git a/apps/stats-mainnet/src/components/header/index.ts b/apps/stats-mainnet/src/components/header/index.ts new file mode 100644 index 000000000..ddd972315 --- /dev/null +++ b/apps/stats-mainnet/src/components/header/index.ts @@ -0,0 +1 @@ +export { Header } from './header'; diff --git a/apps/stats-mainnet/src/components/images/dark-mode-toggle.tsx b/apps/stats-mainnet/src/components/images/dark-mode-toggle.tsx new file mode 100644 index 000000000..42a7ac3b2 --- /dev/null +++ b/apps/stats-mainnet/src/components/images/dark-mode-toggle.tsx @@ -0,0 +1,18 @@ +export const DarkModeToggle = () => { + return ( + + + + + + + ); +}; diff --git a/apps/stats-mainnet/src/components/images/index.ts b/apps/stats-mainnet/src/components/images/index.ts new file mode 100644 index 000000000..fd1bfea32 --- /dev/null +++ b/apps/stats-mainnet/src/components/images/index.ts @@ -0,0 +1,2 @@ +export { DarkModeToggle } from './dark-mode-toggle'; +export { LightModeToggle } from './light-mode-toggle'; diff --git a/apps/stats-mainnet/src/components/images/light-mode-toggle.tsx b/apps/stats-mainnet/src/components/images/light-mode-toggle.tsx new file mode 100644 index 000000000..f71b5eb9d --- /dev/null +++ b/apps/stats-mainnet/src/components/images/light-mode-toggle.tsx @@ -0,0 +1,10 @@ +export const LightModeToggle = () => { + return ( + + + + ); +}; diff --git a/apps/stats-mainnet/src/components/videos/index.ts b/apps/stats-mainnet/src/components/videos/index.ts new file mode 100644 index 000000000..d43c5dd49 --- /dev/null +++ b/apps/stats-mainnet/src/components/videos/index.ts @@ -0,0 +1 @@ +export { VegaBackgroundVideo } from './vega-background-video'; diff --git a/apps/stats-mainnet/src/components/videos/vega-background-video.tsx b/apps/stats-mainnet/src/components/videos/vega-background-video.tsx new file mode 100644 index 000000000..9b36df0be --- /dev/null +++ b/apps/stats-mainnet/src/components/videos/vega-background-video.tsx @@ -0,0 +1,16 @@ +export const VegaBackgroundVideo = () => { + return ( + + ); +}; diff --git a/apps/stats-mainnet/src/config/types.ts b/apps/stats-mainnet/src/config/types.ts new file mode 100644 index 000000000..ebab4ed91 --- /dev/null +++ b/apps/stats-mainnet/src/config/types.ts @@ -0,0 +1,4 @@ +export interface DarkModeState { + darkMode: boolean; + setDarkMode: (arg0: boolean) => void; +} diff --git a/apps/stats-mainnet/src/index.html b/apps/stats-mainnet/src/index.html new file mode 100644 index 000000000..4476c74cc --- /dev/null +++ b/apps/stats-mainnet/src/index.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + + Vega Mainnet Stats + + + + +
+ + + diff --git a/apps/stats-mainnet/src/main.tsx b/apps/stats-mainnet/src/main.tsx new file mode 100644 index 000000000..9ad023d26 --- /dev/null +++ b/apps/stats-mainnet/src/main.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './styles/styles.css'; +import App from './app'; +import reportWebVitals from './reportWebVitals'; + +ReactDOM.render( + + + , + document.getElementById('root') +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/apps/stats-mainnet/src/polyfills.ts b/apps/stats-mainnet/src/polyfills.ts new file mode 100644 index 000000000..2adf3d05b --- /dev/null +++ b/apps/stats-mainnet/src/polyfills.ts @@ -0,0 +1,7 @@ +/** + * Polyfill stable language features. These imports will be optimized by `@babel/preset-env`. + * + * See: https://github.com/zloirock/core-js#babel + */ +import 'core-js/stable'; +import 'regenerator-runtime/runtime'; diff --git a/apps/stats-mainnet/src/react-app-env.d.ts b/apps/stats-mainnet/src/react-app-env.d.ts new file mode 100644 index 000000000..6431bc5fc --- /dev/null +++ b/apps/stats-mainnet/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/apps/stats-mainnet/src/reportWebVitals.ts b/apps/stats-mainnet/src/reportWebVitals.ts new file mode 100644 index 000000000..49a2a16e0 --- /dev/null +++ b/apps/stats-mainnet/src/reportWebVitals.ts @@ -0,0 +1,15 @@ +import { ReportHandler } from 'web-vitals'; + +const reportWebVitals = (onPerfEntry?: ReportHandler) => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/apps/stats-mainnet/src/setupTests.ts b/apps/stats-mainnet/src/setupTests.ts new file mode 100644 index 000000000..8f2609b7b --- /dev/null +++ b/apps/stats-mainnet/src/setupTests.ts @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/apps/stats-mainnet/src/styles/AlphaLyrae-Medium.woff b/apps/stats-mainnet/src/styles/AlphaLyrae-Medium.woff new file mode 100644 index 0000000000000000000000000000000000000000..38b19bca54fb16e9eb8cc121ae9869658e377af3 GIT binary patch literal 131420 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

|_nJAE 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