diff --git a/frontend/package.json b/frontend/package.json index 1012a30..1810ffd 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,6 +3,9 @@ "version": "0.0.1", "private": true, "dependencies": { + "@babel/core": ">=7.0.0 <8.0.0", + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", "@emotion/react": "latest", "@emotion/styled": "latest", "@mui/icons-material": "^5.4.2", @@ -21,10 +24,12 @@ "lodash": "^4.17.21", "moment": "^2.29.1", "prettier": "^2.6.2", + "prop-types": ">=15.6.0 <16.0.0", "react": "latest", "react-dom": "latest", "react-ga4": "^1.4.1", "react-intersection-observer": "^9.4.0", + "react-markdown": "^8.0.4", "react-number-format": "^4.9.1", "react-query": "^3.38.0", "react-router-dom": "^6.2.1", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 85b3b66..20aa54e 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -1,6 +1,9 @@ lockfileVersion: 5.4 specifiers: + '@babel/core': '>=7.0.0 <8.0.0' + '@babel/plugin-syntax-flow': ^7.14.5 + '@babel/plugin-transform-react-jsx': ^7.14.9 '@emotion/react': latest '@emotion/styled': latest '@mui/icons-material': ^5.4.2 @@ -19,10 +22,12 @@ specifiers: lodash: ^4.17.21 moment: ^2.29.1 prettier: ^2.6.2 + prop-types: '>=15.6.0 <16.0.0' react: latest react-dom: latest react-ga4: ^1.4.1 react-intersection-observer: ^9.4.0 + react-markdown: ^8.0.4 react-number-format: ^4.9.1 react-query: ^3.38.0 react-router-dom: ^6.2.1 @@ -32,16 +37,19 @@ specifiers: typescript: latest dependencies: - '@emotion/react': 11.10.5_hebjedjhazelsvuzebr6t7ng24 - '@emotion/styled': 11.10.5_5tjec44ezuvlpkchcqgxkxryqi - '@mui/icons-material': 5.10.16_ge2ne5gh5gcqikeclw577gsblu - '@mui/material': 5.10.16_thp4wrxo45nyllusrnt46mid4u - '@mui/system': 5.10.16_v64nlmo6pkqfmpmxge6otzlg54 - '@mui/x-date-pickers': 5.0.9_lyvqofskbicohre6q5rzz2hamq + '@babel/core': 7.20.5 + '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.20.5 + '@emotion/react': 11.10.5_xl5my4wapvq2ctl7qwehtbgorq + '@emotion/styled': 11.10.5_3djhvnr4jirfvebjqpipo7gthy + '@mui/icons-material': 5.10.16_x5g5t372wpbxfzkqxtxktxetsq + '@mui/material': 5.10.17_lskpmcsdi7ipu6qpuapyu56ihm + '@mui/system': 5.10.16_ogriz7mfahdh34qnfautfro5yu + '@mui/x-date-pickers': 5.0.9_xyi2uqblomwcysksz6xlpjgcbq '@sentry/react': 6.19.7_react@18.2.0 '@sentry/tracing': 6.19.7 '@types/lodash': 4.14.191 - '@types/react': 18.0.25 + '@types/react': 18.0.26 '@types/react-dom': 18.0.9 aptos: 1.4.0 aptos-node-checker-client: 0.0.2 @@ -50,17 +58,19 @@ dependencies: lodash: 4.17.21 moment: 2.29.4 prettier: 2.8.0 + prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 react-ga4: 1.4.1 react-intersection-observer: 9.4.1_react@18.2.0 + react-markdown: 8.0.4_kzbn2opkn2327fwg5yzwzya5o4 react-number-format: 4.9.4_biqbaboplfbrettd7655fr4n2y react-query: 3.39.2_biqbaboplfbrettd7655fr4n2y react-router-dom: 6.4.4_biqbaboplfbrettd7655fr4n2y - react-scripts: 5.0.1_m47ma67a6xo7a2xsuzvbcpk5u4 + react-scripts: 5.0.1_jcr5afntfinwyuqvsdawboolom recharts: 2.1.16_v2m5e27vhdewzwhryxwfaorcca ts-results: 3.3.0 - typescript: 4.9.3 + typescript: 4.9.4 packages: @@ -1700,7 +1710,7 @@ packages: resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==} dev: false - /@emotion/react/11.10.5_hebjedjhazelsvuzebr6t7ng24: + /@emotion/react/11.10.5_xl5my4wapvq2ctl7qwehtbgorq: resolution: {integrity: sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==} peerDependencies: '@babel/core': ^7.0.0 @@ -1720,7 +1730,7 @@ packages: '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0 '@emotion/utils': 1.2.0 '@emotion/weak-memoize': 0.3.0 - '@types/react': 18.0.25 + '@types/react': 18.0.26 hoist-non-react-statics: 3.3.2 react: 18.2.0 dev: false @@ -1739,7 +1749,7 @@ packages: resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==} dev: false - /@emotion/styled/11.10.5_5tjec44ezuvlpkchcqgxkxryqi: + /@emotion/styled/11.10.5_3djhvnr4jirfvebjqpipo7gthy: resolution: {integrity: sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==} peerDependencies: '@babel/core': ^7.0.0 @@ -1756,11 +1766,11 @@ packages: '@babel/runtime': 7.20.6 '@emotion/babel-plugin': 11.10.5_@babel+core@7.20.5 '@emotion/is-prop-valid': 1.2.0 - '@emotion/react': 11.10.5_hebjedjhazelsvuzebr6t7ng24 + '@emotion/react': 11.10.5_xl5my4wapvq2ctl7qwehtbgorq '@emotion/serialize': 1.1.1 '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0 '@emotion/utils': 1.2.0 - '@types/react': 18.0.25 + '@types/react': 18.0.26 react: 18.2.0 dev: false @@ -2118,8 +2128,8 @@ packages: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} dev: false - /@mui/base/5.0.0-alpha.108_2zx2umvpluuhvlq44va5bta2da: - resolution: {integrity: sha512-KjzRUts2i/ODlMfywhFTqTzQl+Cr9nlDSZxJcnYjrbOV/iRyQNBTDoiFJt+XEdRi0fZBHnk74AFbnP56ehybsA==} + /@mui/base/5.0.0-alpha.109_ib3m5ricvtkl2cll7qpr2f6lvq: + resolution: {integrity: sha512-UQxoONPI3ntzxcD/cbFHl+Lp2xsVj6HpKmU9QhUZ2kZ2K2yej2QJyU1gnADoWl/Hu94VrvwSSRnjTjR3HvXO/g==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -2131,10 +2141,10 @@ packages: dependencies: '@babel/runtime': 7.20.6 '@emotion/is-prop-valid': 1.2.0 - '@mui/types': 7.2.2_@types+react@18.0.25 + '@mui/types': 7.2.2_@types+react@18.0.26 '@mui/utils': 5.10.16_react@18.2.0 '@popperjs/core': 2.11.6 - '@types/react': 18.0.25 + '@types/react': 18.0.26 clsx: 1.2.1 prop-types: 15.8.1 react: 18.2.0 @@ -2142,11 +2152,11 @@ packages: react-is: 18.2.0 dev: false - /@mui/core-downloads-tracker/5.10.16: - resolution: {integrity: sha512-eK9+olw2ZbXX+vGrtKnN01/vLP1aX0Lq0xok35bqWM1aB93Dcmky/xPNf8h31oJ/C+IzJBjZaZMEDzVZg4Qc0A==} + /@mui/core-downloads-tracker/5.10.17: + resolution: {integrity: sha512-iNwUuMA30nrN0tiEkeD3zaczv7Tk2jlZIDbXRnijAsYXkZtl/xEzQsVRIPYRDuyEz6D18vQJhV8h7gPUXEubTg==} dev: false - /@mui/icons-material/5.10.16_ge2ne5gh5gcqikeclw577gsblu: + /@mui/icons-material/5.10.16_x5g5t372wpbxfzkqxtxktxetsq: resolution: {integrity: sha512-jjCc0IF6iyLiucQCu5igg3fOscSqbbvRCmyRxXgzOcLR56B0sg2L8o+ZfJ0dAg59+wvgtXaxvjze/mJg0B4iWA==} engines: {node: '>=12.0.0'} peerDependencies: @@ -2158,13 +2168,13 @@ packages: optional: true dependencies: '@babel/runtime': 7.20.6 - '@mui/material': 5.10.16_thp4wrxo45nyllusrnt46mid4u - '@types/react': 18.0.25 + '@mui/material': 5.10.17_lskpmcsdi7ipu6qpuapyu56ihm + '@types/react': 18.0.26 react: 18.2.0 dev: false - /@mui/material/5.10.16_thp4wrxo45nyllusrnt46mid4u: - resolution: {integrity: sha512-JSHcDQQ+k30NKkCM/0KX6jq4F5LOrbFKZpS+cEl7scZWOCJpUPH5ccAT5a7O8wzrgNZ8Y9PnwzNvWBrfShpJFw==} + /@mui/material/5.10.17_lskpmcsdi7ipu6qpuapyu56ihm: + resolution: {integrity: sha512-Kuqgv1qI5HXnc/Xu426xhCGYBSKzplb+xFNLitbnIb92Qx8jmcpfNpFlDJa2kD2H6qP66rr/m4c/zMUfGX/xBQ==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -2181,14 +2191,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.20.6 - '@emotion/react': 11.10.5_hebjedjhazelsvuzebr6t7ng24 - '@emotion/styled': 11.10.5_5tjec44ezuvlpkchcqgxkxryqi - '@mui/base': 5.0.0-alpha.108_2zx2umvpluuhvlq44va5bta2da - '@mui/core-downloads-tracker': 5.10.16 - '@mui/system': 5.10.16_v64nlmo6pkqfmpmxge6otzlg54 - '@mui/types': 7.2.2_@types+react@18.0.25 + '@emotion/react': 11.10.5_xl5my4wapvq2ctl7qwehtbgorq + '@emotion/styled': 11.10.5_3djhvnr4jirfvebjqpipo7gthy + '@mui/base': 5.0.0-alpha.109_ib3m5ricvtkl2cll7qpr2f6lvq + '@mui/core-downloads-tracker': 5.10.17 + '@mui/system': 5.10.17_ogriz7mfahdh34qnfautfro5yu + '@mui/types': 7.2.2_@types+react@18.0.26 '@mui/utils': 5.10.16_react@18.2.0 - '@types/react': 18.0.25 + '@types/react': 18.0.26 '@types/react-transition-group': 4.4.5 clsx: 1.2.1 csstype: 3.1.1 @@ -2199,7 +2209,7 @@ packages: react-transition-group: 4.4.5_biqbaboplfbrettd7655fr4n2y dev: false - /@mui/private-theming/5.10.16_fan5qbzahqtxlm5dzefqlqx5ia: + /@mui/private-theming/5.10.16_kzbn2opkn2327fwg5yzwzya5o4: resolution: {integrity: sha512-0MArkJaOHRCKqL/GWjngGZmyOeRz+uxffhx82bKcewr8swqV7xx7EFP02pk0L/gLdfcvYdqwH4YTVjG/+TaKrg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -2211,7 +2221,7 @@ packages: dependencies: '@babel/runtime': 7.20.6 '@mui/utils': 5.10.16_react@18.2.0 - '@types/react': 18.0.25 + '@types/react': 18.0.26 prop-types: 15.8.1 react: 18.2.0 dev: false @@ -2231,14 +2241,14 @@ packages: dependencies: '@babel/runtime': 7.20.6 '@emotion/cache': 11.10.5 - '@emotion/react': 11.10.5_hebjedjhazelsvuzebr6t7ng24 - '@emotion/styled': 11.10.5_5tjec44ezuvlpkchcqgxkxryqi + '@emotion/react': 11.10.5_xl5my4wapvq2ctl7qwehtbgorq + '@emotion/styled': 11.10.5_3djhvnr4jirfvebjqpipo7gthy csstype: 3.1.1 prop-types: 15.8.1 react: 18.2.0 dev: false - /@mui/system/5.10.16_v64nlmo6pkqfmpmxge6otzlg54: + /@mui/system/5.10.16_ogriz7mfahdh34qnfautfro5yu: resolution: {integrity: sha512-OqI9B1jZ9zQ/dmoqseku4CzdEs9DbLiiMOaWxC3WeAJxM1UavlCgXz0encqm93LIlmSL7TjuHN1/rW8BJCnU8A==} engines: {node: '>=12.0.0'} peerDependencies: @@ -2255,20 +2265,50 @@ packages: optional: true dependencies: '@babel/runtime': 7.20.6 - '@emotion/react': 11.10.5_hebjedjhazelsvuzebr6t7ng24 - '@emotion/styled': 11.10.5_5tjec44ezuvlpkchcqgxkxryqi - '@mui/private-theming': 5.10.16_fan5qbzahqtxlm5dzefqlqx5ia + '@emotion/react': 11.10.5_xl5my4wapvq2ctl7qwehtbgorq + '@emotion/styled': 11.10.5_3djhvnr4jirfvebjqpipo7gthy + '@mui/private-theming': 5.10.16_kzbn2opkn2327fwg5yzwzya5o4 '@mui/styled-engine': 5.10.16_dovxhg2tvkkxkdnqyoum6wzcxm - '@mui/types': 7.2.2_@types+react@18.0.25 + '@mui/types': 7.2.2_@types+react@18.0.26 '@mui/utils': 5.10.16_react@18.2.0 - '@types/react': 18.0.25 + '@types/react': 18.0.26 clsx: 1.2.1 csstype: 3.1.1 prop-types: 15.8.1 react: 18.2.0 dev: false - /@mui/types/7.2.2_@types+react@18.0.25: + /@mui/system/5.10.17_ogriz7mfahdh34qnfautfro5yu: + resolution: {integrity: sha512-UYzAOSK7uxkMsUssqrIUW3lnOuQpU8vqh4hLwfSw+GYAnQo3qjK4m4NhlDx+pFpsjjiGnr3K+vrSH+aIAMbcLg==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.20.6 + '@emotion/react': 11.10.5_xl5my4wapvq2ctl7qwehtbgorq + '@emotion/styled': 11.10.5_3djhvnr4jirfvebjqpipo7gthy + '@mui/private-theming': 5.10.16_kzbn2opkn2327fwg5yzwzya5o4 + '@mui/styled-engine': 5.10.16_dovxhg2tvkkxkdnqyoum6wzcxm + '@mui/types': 7.2.2_@types+react@18.0.26 + '@mui/utils': 5.10.16_react@18.2.0 + '@types/react': 18.0.26 + clsx: 1.2.1 + csstype: 3.1.1 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/types/7.2.2_@types+react@18.0.26: resolution: {integrity: sha512-siex8cZDtWeC916cXOoUOnEQQejuMYmHtc4hM6VkKVYaBICz3VIiqyiAomRboTQHt2jchxQ5Q5ATlbcDekTxDA==} peerDependencies: '@types/react': '*' @@ -2276,7 +2316,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.25 + '@types/react': 18.0.26 dev: false /@mui/utils/5.10.16_react@18.2.0: @@ -2293,7 +2333,7 @@ packages: react-is: 18.2.0 dev: false - /@mui/x-date-pickers/5.0.9_lyvqofskbicohre6q5rzz2hamq: + /@mui/x-date-pickers/5.0.9_xyi2uqblomwcysksz6xlpjgcbq: resolution: {integrity: sha512-PM3RU8MiwDVi+dSDGJ7ylI0hCe79wSCDfrjghS8ApGGFn/n87S8pUZxsZ5czw3mVRN6VfS2C19peo4nM1Tx+nA==} engines: {node: '>=12.0.0'} peerDependencies: @@ -2327,10 +2367,10 @@ packages: '@date-io/dayjs': 2.16.0 '@date-io/luxon': 2.16.1 '@date-io/moment': 2.16.1_moment@2.29.4 - '@emotion/react': 11.10.5_hebjedjhazelsvuzebr6t7ng24 - '@emotion/styled': 11.10.5_5tjec44ezuvlpkchcqgxkxryqi - '@mui/material': 5.10.16_thp4wrxo45nyllusrnt46mid4u - '@mui/system': 5.10.16_v64nlmo6pkqfmpmxge6otzlg54 + '@emotion/react': 11.10.5_xl5my4wapvq2ctl7qwehtbgorq + '@emotion/styled': 11.10.5_3djhvnr4jirfvebjqpipo7gthy + '@mui/material': 5.10.17_lskpmcsdi7ipu6qpuapyu56ihm + '@mui/system': 5.10.16_ogriz7mfahdh34qnfautfro5yu '@mui/utils': 5.10.16_react@18.2.0 '@types/react-transition-group': 4.4.5 clsx: 1.2.1 @@ -2799,6 +2839,12 @@ packages: resolution: {integrity: sha512-9MVYlmIgmRR31C5b4FVSWtuMmBHh2mOWQYfl7XAYOa8dsnb7iEmUmRSWSFgXFtkjxO65d7hTUHQC+RhR/9IWFg==} dev: false + /@types/debug/4.1.7: + resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + dependencies: + '@types/ms': 0.7.31 + dev: false + /@types/eslint-scope/3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: @@ -2848,6 +2894,12 @@ packages: '@types/node': 18.11.10 dev: false + /@types/hast/2.3.4: + resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} + dependencies: + '@types/unist': 2.0.6 + dev: false + /@types/html-minifier-terser/6.1.0: resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} dev: false @@ -2886,10 +2938,20 @@ packages: resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} dev: false + /@types/mdast/3.0.10: + resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} + dependencies: + '@types/unist': 2.0.6 + dev: false + /@types/mime/3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: false + /@types/ms/0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: false + /@types/node/18.11.10: resolution: {integrity: sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==} dev: false @@ -2921,23 +2983,23 @@ packages: /@types/react-dom/18.0.9: resolution: {integrity: sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==} dependencies: - '@types/react': 18.0.25 + '@types/react': 18.0.26 dev: false /@types/react-is/17.0.3: resolution: {integrity: sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==} dependencies: - '@types/react': 18.0.25 + '@types/react': 18.0.26 dev: false /@types/react-transition-group/4.4.5: resolution: {integrity: sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==} dependencies: - '@types/react': 18.0.25 + '@types/react': 18.0.26 dev: false - /@types/react/18.0.25: - resolution: {integrity: sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==} + /@types/react/18.0.26: + resolution: {integrity: sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.2 @@ -2989,6 +3051,10 @@ packages: resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} dev: false + /@types/unist/2.0.6: + resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} + dev: false + /@types/ws/8.5.3: resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} dependencies: @@ -3011,7 +3077,7 @@ packages: '@types/yargs-parser': 21.0.0 dev: false - /@typescript-eslint/eslint-plugin/5.45.0_czs5uoqkd3podpy6vgtsxfc7au: + /@typescript-eslint/eslint-plugin/5.45.0_wke4plxjew2ogjxrdwvzd2srfq: resolution: {integrity: sha512-CXXHNlf0oL+Yg021cxgOdMHNTXD17rHkq7iW6RFHoybdFgQBjU3yIXhhcPpGwr1CjZlo6ET8C6tzX5juQoXeGA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3022,36 +3088,36 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a + '@typescript-eslint/parser': 5.45.0_wy4udjehnvkneqnogzx5kughki '@typescript-eslint/scope-manager': 5.45.0 - '@typescript-eslint/type-utils': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a - '@typescript-eslint/utils': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a + '@typescript-eslint/type-utils': 5.45.0_wy4udjehnvkneqnogzx5kughki + '@typescript-eslint/utils': 5.45.0_wy4udjehnvkneqnogzx5kughki debug: 4.3.4 eslint: 8.28.0 ignore: 5.2.1 natural-compare-lite: 1.4.0 regexpp: 3.2.0 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.3 - typescript: 4.9.3 + tsutils: 3.21.0_typescript@4.9.4 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/experimental-utils/5.45.0_hsf322ms6xhhd4b5ne6lb74y4a: + /@typescript-eslint/experimental-utils/5.45.0_wy4udjehnvkneqnogzx5kughki: resolution: {integrity: sha512-DnRQg5+3uHHt/gaifTjwg9OKbg9/TWehfJzYHQIDJboPEbF897BKDE/qoqMhW7nf0jWRV1mwVXTaUvtB1/9Gwg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a + '@typescript-eslint/utils': 5.45.0_wy4udjehnvkneqnogzx5kughki eslint: 8.28.0 transitivePeerDependencies: - supports-color - typescript dev: false - /@typescript-eslint/parser/5.45.0_hsf322ms6xhhd4b5ne6lb74y4a: + /@typescript-eslint/parser/5.45.0_wy4udjehnvkneqnogzx5kughki: resolution: {integrity: sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3063,10 +3129,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.45.0 '@typescript-eslint/types': 5.45.0 - '@typescript-eslint/typescript-estree': 5.45.0_typescript@4.9.3 + '@typescript-eslint/typescript-estree': 5.45.0_typescript@4.9.4 debug: 4.3.4 eslint: 8.28.0 - typescript: 4.9.3 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: false @@ -3079,7 +3145,7 @@ packages: '@typescript-eslint/visitor-keys': 5.45.0 dev: false - /@typescript-eslint/type-utils/5.45.0_hsf322ms6xhhd4b5ne6lb74y4a: + /@typescript-eslint/type-utils/5.45.0_wy4udjehnvkneqnogzx5kughki: resolution: {integrity: sha512-DY7BXVFSIGRGFZ574hTEyLPRiQIvI/9oGcN8t1A7f6zIs6ftbrU0nhyV26ZW//6f85avkwrLag424n+fkuoJ1Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3089,12 +3155,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.45.0_typescript@4.9.3 - '@typescript-eslint/utils': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a + '@typescript-eslint/typescript-estree': 5.45.0_typescript@4.9.4 + '@typescript-eslint/utils': 5.45.0_wy4udjehnvkneqnogzx5kughki debug: 4.3.4 eslint: 8.28.0 - tsutils: 3.21.0_typescript@4.9.3 - typescript: 4.9.3 + tsutils: 3.21.0_typescript@4.9.4 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: false @@ -3104,7 +3170,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: false - /@typescript-eslint/typescript-estree/5.45.0_typescript@4.9.3: + /@typescript-eslint/typescript-estree/5.45.0_typescript@4.9.4: resolution: {integrity: sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3119,13 +3185,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.3 - typescript: 4.9.3 + tsutils: 3.21.0_typescript@4.9.4 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/utils/5.45.0_hsf322ms6xhhd4b5ne6lb74y4a: + /@typescript-eslint/utils/5.45.0_wy4udjehnvkneqnogzx5kughki: resolution: {integrity: sha512-OUg2JvsVI1oIee/SwiejTot2OxwU8a7UfTFMOdlhD2y+Hl6memUSL4s98bpUTo8EpVEr0lmwlU7JSu/p2QpSvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3135,7 +3201,7 @@ packages: '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.45.0 '@typescript-eslint/types': 5.45.0 - '@typescript-eslint/typescript-estree': 5.45.0_typescript@4.9.3 + '@typescript-eslint/typescript-estree': 5.45.0_typescript@4.9.4 eslint: 8.28.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0_eslint@8.28.0 @@ -3349,10 +3415,8 @@ packages: - supports-color dev: false - /ajv-formats/2.1.1_ajv@8.11.2: + /ajv-formats/2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 peerDependenciesMeta: ajv: optional: true @@ -3778,6 +3842,10 @@ packages: - supports-color dev: false + /bail/2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: false + /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: false @@ -3999,6 +4067,10 @@ packages: engines: {node: '>=12.20'} dev: false + /character-entities/2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: false + /check-types/11.2.2: resolution: {integrity: sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==} dev: false @@ -4110,6 +4182,10 @@ packages: delayed-stream: 1.0.0 dev: false + /comma-separated-tokens/2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: false + /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: false @@ -4599,6 +4675,12 @@ packages: resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} dev: false + /decode-named-character-reference/1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: false + /dedent/0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: false @@ -4651,6 +4733,11 @@ packages: engines: {node: '>= 0.8'} dev: false + /dequal/2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + /destroy/1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -4695,6 +4782,11 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: false + /diff/5.1.0: + resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + engines: {node: '>=0.3.1'} + dev: false + /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -4980,7 +5072,7 @@ packages: source-map: 0.6.1 dev: false - /eslint-config-react-app/7.0.1_tw4qyq5zwfhp7y576edxbyjb7i: + /eslint-config-react-app/7.0.1_d2mj67nzbfhfuhgv4qfrb7zk6a: resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -4993,19 +5085,19 @@ packages: '@babel/core': 7.20.5 '@babel/eslint-parser': 7.19.1_ajivmgign6qnltueqq3ekylg5a '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/eslint-plugin': 5.45.0_czs5uoqkd3podpy6vgtsxfc7au - '@typescript-eslint/parser': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a + '@typescript-eslint/eslint-plugin': 5.45.0_wke4plxjew2ogjxrdwvzd2srfq + '@typescript-eslint/parser': 5.45.0_wy4udjehnvkneqnogzx5kughki babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 eslint: 8.28.0 eslint-plugin-flowtype: 8.0.3_b2uk6lyi7rrxw3flgiqajfeb6e eslint-plugin-import: 2.26.0_vbnhqcxlbs7ynbxw44hu2vq7eq - eslint-plugin-jest: 25.7.0_jiwa6xy4ceseooko52d2a3bg6a + eslint-plugin-jest: 25.7.0_7uhii7pwquiwfp2tqa7otv4aem eslint-plugin-jsx-a11y: 6.6.1_eslint@8.28.0 eslint-plugin-react: 7.31.11_eslint@8.28.0 eslint-plugin-react-hooks: 4.6.0_eslint@8.28.0 - eslint-plugin-testing-library: 5.9.1_hsf322ms6xhhd4b5ne6lb74y4a - typescript: 4.9.3 + eslint-plugin-testing-library: 5.9.1_wy4udjehnvkneqnogzx5kughki + typescript: 4.9.4 transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -5045,7 +5137,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a + '@typescript-eslint/parser': 5.45.0_wy4udjehnvkneqnogzx5kughki debug: 3.2.7 eslint: 8.28.0 eslint-import-resolver-node: 0.3.6 @@ -5078,7 +5170,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a + '@typescript-eslint/parser': 5.45.0_wy4udjehnvkneqnogzx5kughki array-includes: 3.1.6 array.prototype.flat: 1.3.1 debug: 2.6.9 @@ -5099,7 +5191,7 @@ packages: - supports-color dev: false - /eslint-plugin-jest/25.7.0_jiwa6xy4ceseooko52d2a3bg6a: + /eslint-plugin-jest/25.7.0_7uhii7pwquiwfp2tqa7otv4aem: resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -5112,8 +5204,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.45.0_czs5uoqkd3podpy6vgtsxfc7au - '@typescript-eslint/experimental-utils': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a + '@typescript-eslint/eslint-plugin': 5.45.0_wke4plxjew2ogjxrdwvzd2srfq + '@typescript-eslint/experimental-utils': 5.45.0_wy4udjehnvkneqnogzx5kughki eslint: 8.28.0 jest: 27.5.1 transitivePeerDependencies: @@ -5176,13 +5268,13 @@ packages: string.prototype.matchall: 4.0.8 dev: false - /eslint-plugin-testing-library/5.9.1_hsf322ms6xhhd4b5ne6lb74y4a: + /eslint-plugin-testing-library/5.9.1_wy4udjehnvkneqnogzx5kughki: resolution: {integrity: sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a + '@typescript-eslint/utils': 5.45.0_wy4udjehnvkneqnogzx5kughki eslint: 8.28.0 transitivePeerDependencies: - supports-color @@ -5420,6 +5512,10 @@ packages: - supports-color dev: false + /extend/3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: false @@ -5575,7 +5671,7 @@ packages: optional: true dev: false - /fork-ts-checker-webpack-plugin/6.5.2_fwd4bdvtlcwk7dnkbybkcmtpo4: + /fork-ts-checker-webpack-plugin/6.5.2_cam3zizzvxysyiv3co6gsb2ia4: resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -5603,7 +5699,7 @@ packages: schema-utils: 2.7.0 semver: 7.3.8 tapable: 1.1.3 - typescript: 4.9.3 + typescript: 4.9.4 webpack: 5.75.0 dev: false @@ -5863,6 +5959,10 @@ packages: function-bind: 1.1.1 dev: false + /hast-util-whitespace/2.0.0: + resolution: {integrity: sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==} + dev: false + /he/1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -6109,6 +6209,10 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: false + /inline-style-parser/0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + dev: false + /internal-slot/1.0.3: resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} engines: {node: '>= 0.4'} @@ -6157,6 +6261,11 @@ packages: has-tostringtag: 1.0.0 dev: false + /is-buffer/2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: false + /is-callable/1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -6239,6 +6348,11 @@ packages: engines: {node: '>=10'} dev: false + /is-plain-obj/4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: false + /is-potential-custom-element-name/1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: false @@ -7058,6 +7172,11 @@ packages: engines: {node: '>=6'} dev: false + /kleur/4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: false + /klona/2.0.5: resolution: {integrity: sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==} engines: {node: '>= 8'} @@ -7214,6 +7333,51 @@ packages: remove-accents: 0.4.2 dev: false + /mdast-util-definitions/5.1.1: + resolution: {integrity: sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==} + dependencies: + '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 + unist-util-visit: 4.1.1 + dev: false + + /mdast-util-from-markdown/1.2.0: + resolution: {integrity: sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==} + dependencies: + '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.1.0 + micromark: 3.1.0 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-decode-string: 1.0.2 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + unist-util-stringify-position: 3.0.2 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-to-hast/12.2.4: + resolution: {integrity: sha512-a21xoxSef1l8VhHxS1Dnyioz6grrJkoaCUgGzMD/7dWHvboYX3VW53esRUfB5tgTyz4Yos1n25SPcj35dJqmAg==} + dependencies: + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + mdast-util-definitions: 5.1.1 + micromark-util-sanitize-uri: 1.1.0 + trim-lines: 3.0.1 + unist-builder: 3.0.0 + unist-util-generated: 2.0.0 + unist-util-position: 4.0.3 + unist-util-visit: 4.1.1 + dev: false + + /mdast-util-to-string/3.1.0: + resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==} + dev: false + /mdn-data/2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} dev: false @@ -7252,6 +7416,182 @@ packages: engines: {node: '>= 0.6'} dev: false + /micromark-core-commonmark/1.0.6: + resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.0.0 + micromark-factory-label: 1.0.2 + micromark-factory-space: 1.0.0 + micromark-factory-title: 1.0.2 + micromark-factory-whitespace: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-chunked: 1.0.0 + micromark-util-classify-character: 1.0.0 + micromark-util-html-tag-name: 1.1.0 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-resolve-all: 1.0.0 + micromark-util-subtokenize: 1.0.2 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-factory-destination/1.0.0: + resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-factory-label/1.0.2: + resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-factory-space/1.0.0: + resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-factory-title/1.0.2: + resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-factory-whitespace/1.0.0: + resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-character/1.1.0: + resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==} + dependencies: + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-chunked/1.0.0: + resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-classify-character/1.0.0: + resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-combine-extensions/1.0.0: + resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==} + dependencies: + micromark-util-chunked: 1.0.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-decode-numeric-character-reference/1.0.0: + resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-decode-string/1.0.2: + resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-encode/1.0.1: + resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} + dev: false + + /micromark-util-html-tag-name/1.1.0: + resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==} + dev: false + + /micromark-util-normalize-identifier/1.0.0: + resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-resolve-all/1.0.0: + resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==} + dependencies: + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-sanitize-uri/1.1.0: + resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-encode: 1.0.1 + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-subtokenize/1.0.2: + resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==} + dependencies: + micromark-util-chunked: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-util-symbol/1.0.1: + resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==} + dev: false + + /micromark-util-types/1.0.2: + resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==} + dev: false + + /micromark/3.1.0: + resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==} + dependencies: + '@types/debug': 4.1.7 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.0.6 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-chunked: 1.0.0 + micromark-util-combine-extensions: 1.0.0 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-encode: 1.0.1 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-resolve-all: 1.0.0 + micromark-util-sanitize-uri: 1.1.0 + micromark-util-subtokenize: 1.0.2 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -7329,6 +7669,11 @@ packages: resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} dev: false + /mri/1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false + /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: false @@ -8587,6 +8932,10 @@ packages: react-is: 16.13.1 dev: false + /property-information/6.2.0: + resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} + dev: false + /proxy-addr/2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -8668,7 +9017,7 @@ packages: whatwg-fetch: 3.6.2 dev: false - /react-dev-utils/12.0.1_fwd4bdvtlcwk7dnkbybkcmtpo4: + /react-dev-utils/12.0.1_cam3zizzvxysyiv3co6gsb2ia4: resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} peerDependencies: @@ -8687,7 +9036,7 @@ packages: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.2_fwd4bdvtlcwk7dnkbybkcmtpo4 + fork-ts-checker-webpack-plugin: 6.5.2_cam3zizzvxysyiv3co6gsb2ia4 global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -8702,7 +9051,7 @@ packages: shell-quote: 1.7.4 strip-ansi: 6.0.1 text-table: 0.2.0 - typescript: 4.9.3 + typescript: 4.9.4 webpack: 5.75.0 transitivePeerDependencies: - eslint @@ -8752,6 +9101,33 @@ packages: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} dev: false + /react-markdown/8.0.4_kzbn2opkn2327fwg5yzwzya5o4: + resolution: {integrity: sha512-2oxHa6oDxc1apg/Gnc1Goh06t3B617xeywqI/92wmDV9FELI6ayRkwge7w7DoEqM0gRpZGTNU6xQG+YpJISnVg==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + dependencies: + '@types/hast': 2.3.4 + '@types/prop-types': 15.7.5 + '@types/react': 18.0.26 + '@types/unist': 2.0.6 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 2.0.0 + prop-types: 15.8.1 + property-information: 6.2.0 + react: 18.2.0 + react-is: 18.2.0 + remark-parse: 10.0.1 + remark-rehype: 10.1.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.3.0 + unified: 10.1.2 + unist-util-visit: 4.1.1 + vfile: 5.3.6 + transitivePeerDependencies: + - supports-color + dev: false + /react-number-format/4.9.4_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-Gq20Z3ugqPLFgeaidnx5on9cNpbQZntPN3QgNAL/WJrNNlQnNznY0LCx7g8xtssmRBw0/hw+SCqw6zAcajooiA==} peerDependencies: @@ -8821,12 +9197,11 @@ packages: react: 18.2.0 dev: false - /react-scripts/5.0.1_m47ma67a6xo7a2xsuzvbcpk5u4: + /react-scripts/5.0.1_jcr5afntfinwyuqvsdawboolom: resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} engines: {node: '>=14.0.0'} hasBin: true peerDependencies: - eslint: '*' react: '>= 16' typescript: ^3.2.1 || ^4 peerDependenciesMeta: @@ -8849,7 +9224,7 @@ packages: dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.28.0 - eslint-config-react-app: 7.0.1_tw4qyq5zwfhp7y576edxbyjb7i + eslint-config-react-app: 7.0.1_d2mj67nzbfhfuhgv4qfrb7zk6a eslint-webpack-plugin: 3.2.0_7sokg6jdhc7gt7j6ytnga4ro6y file-loader: 6.2.0_webpack@5.75.0 fs-extra: 10.1.0 @@ -8867,7 +9242,7 @@ packages: prompts: 2.4.2 react: 18.2.0 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1_fwd4bdvtlcwk7dnkbybkcmtpo4 + react-dev-utils: 12.0.1_cam3zizzvxysyiv3co6gsb2ia4 react-refresh: 0.11.0 resolve: 1.22.1 resolve-url-loader: 4.0.0 @@ -8875,9 +9250,9 @@ packages: semver: 7.3.8 source-map-loader: 3.0.2_webpack@5.75.0 style-loader: 3.3.1_webpack@5.75.0 - tailwindcss: 3.2.4_postcss@8.4.19 + tailwindcss: 3.2.4 terser-webpack-plugin: 5.3.6_webpack@5.75.0 - typescript: 4.9.3 + typescript: 4.9.4 webpack: 5.75.0 webpack-dev-server: 4.11.1_webpack@5.75.0 webpack-manifest-plugin: 4.1.1_webpack@5.75.0 @@ -9115,6 +9490,25 @@ packages: engines: {node: '>= 0.10'} dev: false + /remark-parse/10.0.1: + resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-from-markdown: 1.2.0 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-rehype/10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + dependencies: + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + mdast-util-to-hast: 12.2.4 + unified: 10.1.2 + dev: false + /remove-accents/0.4.2: resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==} dev: false @@ -9254,6 +9648,13 @@ packages: queue-microtask: 1.2.3 dev: false + /sade/1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: false + /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: false @@ -9352,7 +9753,7 @@ packages: dependencies: '@types/json-schema': 7.0.11 ajv: 8.11.2 - ajv-formats: 2.1.1_ajv@8.11.2 + ajv-formats: 2.1.1 ajv-keywords: 5.1.0_ajv@8.11.2 dev: false @@ -9550,6 +9951,11 @@ packages: /sourcemap-codec/1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: false + + /space-separated-tokens/2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} dev: false /spdy-transport/3.0.0: @@ -9735,6 +10141,12 @@ packages: webpack: 5.75.0 dev: false + /style-to-object/0.3.0: + resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} + dependencies: + inline-style-parser: 0.1.1 + dev: false + /stylehacks/5.1.1_postcss@8.4.19: resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} engines: {node: ^10 || ^12 || >=14.0} @@ -9827,12 +10239,10 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: false - /tailwindcss/3.2.4_postcss@8.4.19: + /tailwindcss/3.2.4: resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} engines: {node: '>=12.13.0'} hasBin: true - peerDependencies: - postcss: ^8.0.9 dependencies: arg: 5.0.2 chokidar: 3.5.3 @@ -9994,6 +10404,14 @@ packages: punycode: 2.1.1 dev: false + /trim-lines/3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: false + + /trough/2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + dev: false + /tryer/1.0.1: resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} dev: false @@ -10019,14 +10437,14 @@ packages: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} dev: false - /tsutils/3.21.0_typescript@4.9.3: + /tsutils/3.21.0_typescript@4.9.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.9.3 + typescript: 4.9.4 dev: false /tweetnacl/1.0.3: @@ -10081,8 +10499,8 @@ packages: is-typedarray: 1.0.0 dev: false - /typescript/4.9.3: - resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==} + /typescript/4.9.4: + resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} hasBin: true dev: false @@ -10119,6 +10537,18 @@ packages: engines: {node: '>=4'} dev: false + /unified/10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + dependencies: + '@types/unist': 2.0.6 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 5.3.6 + dev: false + /unique-string/2.0.0: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} @@ -10126,6 +10556,47 @@ packages: crypto-random-string: 2.0.0 dev: false + /unist-builder/3.0.0: + resolution: {integrity: sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-generated/2.0.0: + resolution: {integrity: sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==} + dev: false + + /unist-util-is/5.1.1: + resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==} + dev: false + + /unist-util-position/4.0.3: + resolution: {integrity: sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-stringify-position/3.0.2: + resolution: {integrity: sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-visit-parents/5.1.1: + resolution: {integrity: sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + dev: false + + /unist-util-visit/4.1.1: + resolution: {integrity: sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + unist-util-visit-parents: 5.1.1 + dev: false + /universalify/0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -10208,6 +10679,17 @@ packages: hasBin: true dev: false + /uvu/0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.1.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: false + /v8-to-istanbul/8.1.1: resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} engines: {node: '>=10.12.0'} @@ -10222,6 +10704,22 @@ packages: engines: {node: '>= 0.8'} dev: false + /vfile-message/3.1.3: + resolution: {integrity: sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==} + dependencies: + '@types/unist': 2.0.6 + unist-util-stringify-position: 3.0.2 + dev: false + + /vfile/5.3.6: + resolution: {integrity: sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==} + dependencies: + '@types/unist': 2.0.6 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.2 + vfile-message: 3.1.3 + dev: false + /w3c-hr-time/1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. diff --git a/frontend/src/NodeToolsRoutes.tsx b/frontend/src/NodeToolsRoutes.tsx index 6361329..1fb6d2b 100644 --- a/frontend/src/NodeToolsRoutes.tsx +++ b/frontend/src/NodeToolsRoutes.tsx @@ -4,6 +4,8 @@ import LandingPage from "./pages/LandingPage/Index"; import NotFoundPage from "./pages/NotFoundPage"; import NodeToolsLayout from "./pages/layout"; import {NodeCheckerPage} from "./pages/NodeChecker/Index"; +import MainnetNodeOperatorSignupPage from "./pages/NodeOperatorSignup/mainnet"; +import TestnetNodeOperatorSignupPage from "./pages/NodeOperatorSignup/testnet"; export default function NodeToolsRoutes() { return ( @@ -11,6 +13,8 @@ export default function NodeToolsRoutes() { } /> } /> + } /> + } /> } /> diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index 8a0bd43..766fc06 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -1,6 +1,6 @@ import React from "react"; import ReactDOM from "react-dom"; -import {HashRouter} from "react-router-dom"; +import {HashRouter, Route} from "react-router-dom"; import {QueryClient, QueryClientProvider} from "react-query"; import NodeToolsRoutes from "./NodeToolsRoutes"; diff --git a/frontend/src/pages/LandingPage/Index.tsx b/frontend/src/pages/LandingPage/Index.tsx index f52062b..ee94cda 100644 --- a/frontend/src/pages/LandingPage/Index.tsx +++ b/frontend/src/pages/LandingPage/Index.tsx @@ -1,6 +1,6 @@ import React from "react"; import Typography from "@mui/material/Typography"; -import {Box, Button, Divider, Grid} from "@mui/material"; +import { Box, Button, Divider, Grid } from "@mui/material"; import DividerHero from "../../components/DividerHero"; export default function LandingPage() { @@ -11,10 +11,33 @@ export default function LandingPage() {

BETA

- - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + ); diff --git a/frontend/src/pages/NodeOperatorSignup/mainnet.tsx b/frontend/src/pages/NodeOperatorSignup/mainnet.tsx new file mode 100644 index 0000000..12f290d --- /dev/null +++ b/frontend/src/pages/NodeOperatorSignup/mainnet.tsx @@ -0,0 +1,100 @@ +import React from "react"; +import NodeOperatorSignupPage from "./shared"; + +const beforeButtonMarkdown = ` +## Summary +Aptos Testnet is a shared resource for the community, where data will be preserved, and network configuration mimics Mainnet. See here for how to access Aptos Testnet as a developer [Use Aptos API | Aptos Docs](https://aptos.dev/guides/system-integrators-guide#access-testnet) + +We understand that in some unique situations, developers might also want to run their own validator node on the Aptos Testnet. We currently operate a whitelisting program to support this. If you are interested in being a mainnet node operator for Aptos Labs / the Aptos Foundation, please apply under Aptos Mainnet Validator Program. + +What you need to do: +1. Read through the dev docs on how to install a validator node [https://aptos.dev/](https://aptos.dev/) +2. Read through the minimum performance requirements for operators running a validator node on testnet (See below). +3. Fill out the application form [https://aptos.typeform.com/to/DPetOnsV](https://aptos.typeform.com/to/DPetOnsV) +4. You will be asked to provide proof / documentation that you are a registered company and team size >3 +5. You will hear back within 2 weeks in most cases. If approved, you will get whitelisted and testnet tokens will be airdropped to the address you provided. +`; + +const afterButtonMarkdown = ` +## Minimum performance standards + +If you fail to meet these requirements, your node will be removed from the validator set. You will continue to be whitelisted and can rejoin the validator set at any time, but only after you have fixed the issues with your node. If you are repeatedly booted due to performance issues, then your testnet whitelist may be revoked. +1. Timely updates and right set-up + - Meet minimal hardware and configuration requirements. + - Keep software up-to-date with Aptos recommendation. +2. Provide node SLA over 99.9% annually (allows 8 hours and 46 minutes of downtime per year) + - Uptime for validator/fullnode. + - Validator participation rate/consensus reputation. + - Incident response time. +3. Provide 24/7 tech support on-call, we expect teams will initiate issue resolution within 3 hours of alert. + +### Liveness + +Aptos nodes will have built-in deep health checks to help us evaluate the correctness of each component. Once a validator node is registered in the validatorSet, we will check the below periodically: + +- Is the node okay? - pass the[ node health checker](https://nodetools.aptosfoundation.org/#/node_checker) + - Consensus - 1) actively voting and votes included on chain **[insert Threshold]*- , 2) proposing **[insert Threshold]** + - State sync - 1) Version is within **[insert Threshold]*- delta of network, and 2) is making progress + - Latency + - Conneciton between validator full node and validator = true + - Validator connected to all other validators + - Consensus = increasing votes, and increasing proposals. Delta relates to how long epoch, how much stake. Epoch length and stake amt. + - State sync = Latest version of rest of chain, and your version is within [1 delta] (function of TPS), i.e. 1k tps + - Mempool - definite latency - end to end latency of validator and VFN <5 second. + - When transaction comes into full node, how long it takes to recognise that it has gone into the blockchain + +NHC - continuous, click and subscribe. Email sent to person when it fails. + + User subscribe, node health checker fail and check another email. Integrate with pager duty + +Storage iops etc - how do we verify hardware requirement. + +Telemetry is: +- Node connected? - check if the node is connected to other peers +- Node reachable? - check if the node is accepting connection from other nodes +- Node participating? - check if the node is participating in consensus (voting/proposing) +- Node up-to-date? - check if the node version is recent +- Node reliable? - check if the node reputation is above certain threshold, node uptime is above certain threshold + +Our liveness score is calculated by: +- Number of hours where the validator sent at least one push metric to Aptos / Total hours in AIT +- We require a minimum of 99% + + +### Participation + +In the Aptos Blockchain, transactions get grouped into blocks. Each validator takes turns in being a 'proposer' or 'leader' for a round where they build a transaction block and send it to all other validators for consensus. Once enough validators vote, the leader obtains something called a Quorum Certificate - which means the block can be finalized. We want to make sure the validators are actively participating in consensus. + +Our node partners need to be able to stand up a node and participate. Participation is defined as being a proposer/leader at least once in an hour. + +The calculation for this score is done by: +- Number of hours where a validator was a proposer at least once / Total hours in AIT. +- The minimum threshold is 99%. + +### Operational Readiness +Below is a list of operations a node operator needs to have demonstrated in the AITs. The examples below are not exhaustive, and we might add to this list based on network needs. + +1. Rollout new releases +2. Rollback from version B to version A +3. Rotating address / keys +4. Update node configuration +5. Restore node from a backup data +6. On-chain voting + +### **Disaster Recovery** + +DR operation might have lots of overlap with the previous category, since the mitigation method could be rolling out a bug fix or rollback from a bad version etc. For this category we want to understand how node operators target extreme scenarios, like when the network gets attacked, or experiencing a fork. + +- DDOS mitigation +- Data corruption / data loss +`; + +export default function MainnetNodeOperatorSignupPage() { + return ( + + ); +} diff --git a/frontend/src/pages/NodeOperatorSignup/shared.tsx b/frontend/src/pages/NodeOperatorSignup/shared.tsx new file mode 100644 index 0000000..5e668ff --- /dev/null +++ b/frontend/src/pages/NodeOperatorSignup/shared.tsx @@ -0,0 +1,35 @@ +import React from "react"; +import Typography from "@mui/material/Typography"; +import { Box, Button, Grid } from "@mui/material"; +import ReactMarkdown from 'react-markdown'; + +interface NodeOperatorSignupPageProps { + title: string; + beforeButtonMarkdown: string; + afterButtonMarkdown: string; +} + +export default function NodeOperatorSignupPage({ + title, + beforeButtonMarkdown, + afterButtonMarkdown, +}: NodeOperatorSignupPageProps) { + return ( + + + {title} + + {beforeButtonMarkdown} + + + + + + + + + + {afterButtonMarkdown} + + ); +} diff --git a/frontend/src/pages/NodeOperatorSignup/testnet.tsx b/frontend/src/pages/NodeOperatorSignup/testnet.tsx new file mode 100644 index 0000000..6b2eff9 --- /dev/null +++ b/frontend/src/pages/NodeOperatorSignup/testnet.tsx @@ -0,0 +1,100 @@ +import React from "react"; +import NodeOperatorSignupPage from "./shared"; + +const beforeButtonMarkdown = ` +## Summary +Aptos Testnet is a shared resource for the community, where data will be preserved, and network configuration mimics Mainnet. See here for how to access Aptos Testnet as a developer [Use Aptos API | Aptos Docs](https://aptos.dev/guides/system-integrators-guide#access-testnet) + +We understand that in some unique situations, developers might also want to run their own validator node on the Aptos Testnet. We currently operate a whitelisting program to support this. If you are interested in being a mainnet node operator for Aptos Labs / the Aptos Foundation, please apply under Aptos Mainnet Node Operator Signup. + +What you need to do: +1. Read through the dev docs on how to install a validator node [https://aptos.dev/](https://aptos.dev/) +2. Read through the minimum performance requirements for operators running a validator node on testnet (See below). +3. Fill out the application form **[https://aptos.typeform.com/to/DPetOnsV](https://aptos.typeform.com/to/DPetOnsV)** +4. You will be asked to provide proof / documentation that you are a registered company and team size >3 +5. You will hear back within 2 weeks in most cases. If approved, you will get whitelisted and testnet tokens will be airdropped to the address you provided. +`; + +const afterButtonMarkdown = ` +## Minimum performance standards + +If you fail to meet these requirements, your node will be removed from the validator set. You will continue to be whitelisted and can rejoin the validator set at any time, but only after you have fixed the issues with your node. If you are repeatedly booted due to performance issues, then your testnet whitelist may be revoked. +1. Timely updates and right set-up + - Meet minimal hardware and configuration requirements. + - Keep software up-to-date with Aptos recommendation. +2. Provide node SLA over 99.9% annually (allows 8 hours and 46 minutes of downtime per year) + - Uptime for validator/fullnode. + - Validator participation rate/consensus reputation. + - Incident response time. +3. Provide 24/7 tech support on-call, we expect teams will initiate issue resolution within 3 hours of alert. + +### Liveness + +Aptos nodes will have built-in deep health checks to help us evaluate the correctness of each component. Once a validator node is registered in the validatorSet, we will check the below periodically: + +- Is the node okay? - pass the[ node health checker](https://nodetools.aptosfoundation.org/#/node_checker) + - Consensus - 1) actively voting and votes included on chain **[insert Threshold]*- , 2) proposing **[insert Threshold]** + - State sync - 1) Version is within **[insert Threshold]*- delta of network, and 2) is making progress + - Latency + - Conneciton between validator full node and validator = true + - Validator connected to all other validators + - Consensus = increasing votes, and increasing proposals. Delta relates to how long epoch, how much stake. Epoch length and stake amt. + - State sync = Latest version of rest of chain, and your version is within [1 delta] (function of TPS), i.e. 1k tps + - Mempool - definite latency - end to end latency of validator and VFN <5 second. + - When transaction comes into full node, how long it takes to recognise that it has gone into the blockchain + +NHC - continuous, click and subscribe. Email sent to person when it fails. + + User subscribe, node health checker fail and check another email. Integrate with pager duty + +Storage iops etc - how do we verify hardware requirement. + +Telemetry is: +- Node connected? - check if the node is connected to other peers +- Node reachable? - check if the node is accepting connection from other nodes +- Node participating? - check if the node is participating in consensus (voting/proposing) +- Node up-to-date? - check if the node version is recent +- Node reliable? - check if the node reputation is above certain threshold, node uptime is above certain threshold + +Our liveness score is calculated by: +- Number of hours where the validator sent at least one push metric to Aptos / Total hours in AIT +- We require a minimum of 99% + + +### Participation + +In the Aptos Blockchain, transactions get grouped into blocks. Each validator takes turns in being a 'proposer' or 'leader' for a round where they build a transaction block and send it to all other validators for consensus. Once enough validators vote, the leader obtains something called a Quorum Certificate - which means the block can be finalized. We want to make sure the validators are actively participating in consensus. + +Our node partners need to be able to stand up a node and participate. Participation is defined as being a proposer/leader at least once in an hour. + +The calculation for this score is done by: +- Number of hours where a validator was a proposer at least once / Total hours in AIT. +- The minimum threshold is 99%. + +### Operational Readiness +Below is a list of operations a node operator needs to have demonstrated in the AITs. The examples below are not exhaustive, and we might add to this list based on network needs. + +1. Rollout new releases +2. Rollback from version B to version A +3. Rotating address / keys +4. Update node configuration +5. Restore node from a backup data +6. On-chain voting + +### **Disaster Recovery** + +DR operation might have lots of overlap with the previous category, since the mitigation method could be rolling out a bug fix or rollback from a bad version etc. For this category we want to understand how node operators target extreme scenarios, like when the network gets attacked, or experiencing a fork. + +- DDOS mitigation +- Data corruption / data loss +`; + +export default function TestnetNodeOperatorSignupPage() { + return ( + + ); +} diff --git a/frontend/src/themes/theme.ts b/frontend/src/themes/theme.ts index ea89e3e..04277a9 100644 --- a/frontend/src/themes/theme.ts +++ b/frontend/src/themes/theme.ts @@ -3,6 +3,7 @@ import {ThemeOptions} from "@mui/material/styles"; import "@mui/material/styles/createPalette"; import {alpha} from "@mui/material"; import {grey, primary} from "./colors/aptosColorPalette"; +import {lightBlue} from '@mui/material/colors' // Button variants declare module "@mui/material/Button" { @@ -66,7 +67,6 @@ const getDesignTokens = (mode: PaletteMode): ThemeOptions => ({ shape: { borderRadius: 12, }, - // typography: { fontFamily: `lft-etica-mono,ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace`, @@ -182,6 +182,17 @@ const getDesignTokens = (mode: PaletteMode): ThemeOptions => ({ main: grey[800], lighter: grey[700], }, + + // TODO: Why doesn't this work to change the link color in dark mode? + action: { + active: lightBlue[200], + hover: lightBlue[100], + hoverOpacity: 0.7, + focus: lightBlue[600], + focusOpacity: 1, + selected: lightBlue[300], + selectedOpacity: 1 + } }), },