diff --git a/.github/workflows/publish-api.yaml b/.github/workflows/publish-api.yaml index 96af847..fafd254 100644 --- a/.github/workflows/publish-api.yaml +++ b/.github/workflows/publish-api.yaml @@ -4,7 +4,9 @@ name: Create and publish docker images for the API # Configures this workflow to run every time a change is pushed to the branch called `release`. on: push: - branches: ['main'] + branches: + - main + - dev tags: - v* paths: @@ -73,4 +75,28 @@ jobs: context: api push: true tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file + labels: ${{ steps.meta.outputs.labels }} + + eks-deployment-restart: + runs-on: ubuntu-latest + needs: build-and-push-image + permissions: + id-token: write # Required for the OIDC, see https://github.com/aws-actions/configure-aws-credentials?tab=readme-ov-file#OIDC + contents: read + steps: + - name: configure aws credentials + uses: aws-actions/configure-aws-credentials@v4.0.0 + with: + audience: sts.amazonaws.com + role-to-assume: ${{ secrets.DEV_AWS_EKS_ROLE }} + role-session-name: GitHub_to_AWS_via_FederatedOIDC + aws-region: ${{ secrets.DEV_AWS_REGION }} + + - name: Configure kubectl for EKS + run: aws eks update-kubeconfig --name ${{ secrets.DEV_AWS_EKS_CLUSTER }} --region ${{ secrets.DEV_AWS_REGION }} + + - name: Restart Bridge Explorer Deployment + if: github.ref == 'refs/heads/dev' + run: | + kubectl config use-context arn:aws:eks:${{ secrets.DEV_AWS_REGION }}:${{ secrets.DEV_AWS_ACCOUNT_ID }}:cluster/${{ secrets.DEV_AWS_EKS_CLUSTER }} + kubectl rollout restart deploy/${{ secrets.DEV_AWS_EKS_DEPLOYMENT_API }} -n ${{ secrets.DEV_AWS_EKS_NAMESPACE }} \ No newline at end of file diff --git a/.github/workflows/publish-ui.yaml b/.github/workflows/publish-ui.yaml index 8c8e997..e5e4402 100644 --- a/.github/workflows/publish-ui.yaml +++ b/.github/workflows/publish-ui.yaml @@ -4,7 +4,9 @@ name: Create and publish docker images for the UI # Configures this workflow to run every time a change is pushed to the branch called `release`. on: push: - branches: ['main'] + branches: + - main + - dev tags: - v* paths: @@ -44,7 +46,8 @@ jobs: # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages. # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository. # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step. - - name: Build and push Docker image + - name: Dev branch - Build and push Docker image + if: github.ref == 'refs/heads/dev' uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 with: context: app @@ -52,6 +55,41 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} build-args: | - "REACT_APP_HCAPTCHA_SITE_KEY=${{ secrets.REACT_APP_HCAPTCHA_SITE_KEY }}" - "REACT_APP_FAUCET_API_URL=${{ secrets.REACT_APP_FAUCET_API_URL}}" - \ No newline at end of file + "REACT_APP_HCAPTCHA_SITE_KEY=${{ secrets.DEV_REACT_APP_HCAPTCHA_SITE_KEY }}" + "REACT_APP_FAUCET_API_URL=${{ secrets.DEV_REACT_APP_FAUCET_API_URL}}" + + - name: Main branch / tags - Build and push Docker image + if: ( github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') ) + uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 + with: + context: app + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + "REACT_APP_HCAPTCHA_SITE_KEY=${{ secrets.PROD_REACT_APP_HCAPTCHA_SITE_KEY }}" + "REACT_APP_FAUCET_API_URL=${{ secrets.PROD_REACT_APP_FAUCET_API_URL}}" + + eks-deployment-restart: + runs-on: ubuntu-latest + needs: build-and-push-image + permissions: + id-token: write # Required for the OIDC, see https://github.com/aws-actions/configure-aws-credentials?tab=readme-ov-file#OIDC + contents: read + steps: + - name: configure aws credentials + uses: aws-actions/configure-aws-credentials@v4.0.0 + with: + audience: sts.amazonaws.com + role-to-assume: ${{ secrets.DEV_AWS_EKS_ROLE }} + role-session-name: GitHub_to_AWS_via_FederatedOIDC + aws-region: ${{ secrets.DEV_AWS_REGION }} + + - name: Configure kubectl for EKS + run: aws eks update-kubeconfig --name ${{ secrets.DEV_AWS_EKS_CLUSTER }} --region ${{ secrets.DEV_AWS_REGION }} + + - name: Restart Bridge Explorer Deployment + if: github.ref == 'refs/heads/dev' + run: | + kubectl config use-context arn:aws:eks:${{ secrets.DEV_AWS_REGION }}:${{ secrets.DEV_AWS_ACCOUNT_ID }}:cluster/${{ secrets.DEV_AWS_EKS_CLUSTER }} + kubectl rollout restart deploy/${{ secrets.DEV_AWS_EKS_DEPLOYMENT_UI }} -n ${{ secrets.DEV_AWS_EKS_NAMESPACE }} \ No newline at end of file diff --git a/app/.env.example b/app/.env.example new file mode 100644 index 0000000..8d828ba --- /dev/null +++ b/app/.env.example @@ -0,0 +1,2 @@ +REACT_APP_HCAPTCHA_SITE_KEY= +REACT_APP_FAUCET_API_URL=http://localhost:8000/api/v1 \ No newline at end of file diff --git a/app/.eslintrc.js b/app/.eslintrc.js index 168ad2c..85c74d7 100644 --- a/app/.eslintrc.js +++ b/app/.eslintrc.js @@ -4,7 +4,9 @@ module.exports = { es2021: true, node: true, }, - extends: ["eslint:recommended", "plugin:react/recommended"], + parser: "@typescript-eslint/parser", + plugins: ["react", "@typescript-eslint"], + extends: ["eslint:recommended", "plugin:react/recommended", "plugin:@typescript-eslint/recommended"], overrides: [ { env: { @@ -20,7 +22,6 @@ module.exports = { ecmaVersion: "latest", sourceType: "module", }, - plugins: ["react"], rules: { "react/react-in-jsx-scope": "off", "react/prop-types": "off", diff --git a/app/package.json b/app/package.json index 40c5f1b..44d4991 100644 --- a/app/package.json +++ b/app/package.json @@ -3,18 +3,21 @@ "version": "0.1.0", "private": true, "dependencies": { - "@emotion/react": "^11.11.1", - "@emotion/styled": "^11.11.0", "@hcaptcha/react-hcaptcha": "^1.9.1", - "@mui/material": "^5.14.18", "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^13.0.0", "@testing-library/user-event": "^13.2.1", + "@types/jest": "^29.5.12", + "@types/node": "^20.11.21", + "@types/react": "^18.2.60", + "@types/react-dom": "^18.2.19", "axios": "^1.6.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", + "react-select": "^5.8.0", "react-toastify": "^9.1.3", + "typescript": "^5.3.3", "web-vitals": "^2.1.0" }, "scripts": { @@ -44,6 +47,9 @@ ] }, "devDependencies": { + "@babel/plugin-proposal-private-property-in-object": "^7.21.11", + "@typescript-eslint/eslint-plugin": "^7.1.0", + "@typescript-eslint/parser": "^7.1.0", "eslint": "^8.54.0", "eslint-plugin-react": "^7.33.2", "prettier": "3.1.0" diff --git a/app/public/favicon.ico b/app/public/favicon.ico index a11777c..a57199c 100644 Binary files a/app/public/favicon.ico and b/app/public/favicon.ico differ diff --git a/app/public/index.html b/app/public/index.html index e65acb3..4e9c9c8 100644 --- a/app/public/index.html +++ b/app/public/index.html @@ -7,7 +7,7 @@ - React App + Gnosis Faucet diff --git a/app/public/logo192.png b/app/public/logo192.png deleted file mode 100644 index fc44b0a..0000000 Binary files a/app/public/logo192.png and /dev/null differ diff --git a/app/public/logo512.png b/app/public/logo512.png deleted file mode 100644 index a4e47a6..0000000 Binary files a/app/public/logo512.png and /dev/null differ diff --git a/app/public/manifest.json b/app/public/manifest.json index 080d6c7..d477fcf 100644 --- a/app/public/manifest.json +++ b/app/public/manifest.json @@ -1,6 +1,6 @@ { - "short_name": "React App", - "name": "Create React App Sample", + "short_name": "Gnosis Faucet", + "name": "Faucet for Gnosis chain", "icons": [ { "src": "favicon.ico", diff --git a/app/src/App.js b/app/src/App.js deleted file mode 100644 index fd9508d..0000000 --- a/app/src/App.js +++ /dev/null @@ -1,34 +0,0 @@ -import logo from "./images/logo.svg"; -import "./css/App.css"; -import { HCaptchaForm } from "./components/hcaptcha/hcaptcha"; - -import { Fragment } from "react"; -import { Container } from "@mui/system"; -import { ToastContainer } from "react-toastify"; -import "react-toastify/dist/ReactToastify.css"; - -function App() { - return ( - - - - - logo - - - - - ); -} - -export default App; diff --git a/app/src/App.tsx b/app/src/App.tsx new file mode 100644 index 0000000..b304c06 --- /dev/null +++ b/app/src/App.tsx @@ -0,0 +1,77 @@ +import { useEffect, useState } from "react" +import { ToastContainer, toast } from "react-toastify" +import "react-toastify/dist/ReactToastify.css" +import axios from "axios" +import logo from "./images/logo.svg" +import "./css/App.css" +import Loading from "./components/Loading/Loading" +import Faucet from "./components/FaucetForm/Faucet" + +const chainName:{ [key: string]: string }= { + "100": "Gnosis", + "10200": "Chiado" +} + +function App(): JSX.Element { + const [chainId, setChainId] = useState("10200") + const [loading, setLoading] = useState(true) + const [enabledTokens, setEnabledTokens] = useState([]) + const [faucetLoading, setFaucetLoading] = useState(true) + + const getFaucetInfo = async () => { + return axios.get(`${process.env.REACT_APP_FAUCET_API_URL}/info`) + } + + useEffect(() => { + getFaucetInfo() + .then((response) => { + setChainId(response.data.chainId) + setEnabledTokens(response.data.enabledTokens) + + const chain = chainName[response.data.chainId] + document.title = `${chain} Faucet` + document.querySelector('meta[name="description"]')?.setAttribute("content", `Faucet for ${chain} chain`) + }) + .catch(() => { + toast.error("Network error") + }) + .finally(() => { + setFaucetLoading(false) + setLoading(false) + }) + }, []) + + const title = faucetLoading ? "FAUCET" : `${chainName[chainId]} CHAIN` + const subtitle = faucetLoading + ? "Loading..." + : (chainId === "100" ? "Faucet" : "Testnet Faucet") + + return ( + <> + +
+ logo +
+

{title}

+

{subtitle}

+
+ +
+ {loading && } + + ) +} + +export default App diff --git a/app/src/components/Captcha/Captcha.tsx b/app/src/components/Captcha/Captcha.tsx new file mode 100644 index 0000000..2b6adad --- /dev/null +++ b/app/src/components/Captcha/Captcha.tsx @@ -0,0 +1,28 @@ +import React, { RefObject } from "react" +import HCaptcha from "@hcaptcha/react-hcaptcha" + +const siteKey = process.env.REACT_APP_HCAPTCHA_SITE_KEY || "10000000-ffff-ffff-ffff-000000000001" + +interface CaptchaProps { + setCaptchaToken: (token: string) => void, + windowWidth: number, + captchaRef: RefObject +} + +const Captcha: React.FC = ({ setCaptchaToken, windowWidth, captchaRef }) => { + + const onVerifyCaptcha = (token: string) => { + setCaptchaToken(token) + } + + return ( + 500 ? "normal" : "compact"} + sitekey={siteKey} + onVerify={onVerifyCaptcha} + ref={captchaRef} + /> + ) +} + +export default Captcha diff --git a/app/src/components/FaucetForm/Faucet.css b/app/src/components/FaucetForm/Faucet.css new file mode 100644 index 0000000..cb3ad92 --- /dev/null +++ b/app/src/components/FaucetForm/Faucet.css @@ -0,0 +1,131 @@ +.faucet-container { + display: flex; + flex-direction: column; + align-items: flex-end; + max-width: 500px; + background: rgba(62, 105, 87, 0.7); + border-radius: 10px; + padding: 40px; + color: white; + font-size: 1rem; +} + +.faucet-container p { + margin-top: 0; + margin-bottom: 1rem; + line-height: 1.5rem; +} + +.flex-row { + display: flex; + flex-direction: row; + width: 100%; + align-items: center; + flex-wrap: wrap; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.flex-row.flex-row-captcha { + justify-content: end; +} + +.flex-row label { + flex: 1; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.flex-row input { + padding-left: 12px; + padding-right: 12px; + font-size: 1rem; + font-family: "GT Planar", sans-serif; + box-sizing: border-box; + height: 100%; +} + +.flex-row input, +.flex-row .token-select { + height: 100%; + border-radius: 4px; + border: none; + color: #212121; +} + +.flex-row div input { + width: 100%; +} + +.flex-row .input-field { + height: 56px; + min-width: 200px; +} + +.token-info { + display: flex; + align-items: center; +} + +strong { + margin-right: 0.6rem; +} + +@media (min-width: 521px) { + .flex-row .input-field, + .flex-row .token-select { + width: 303px; + } +} + +@media (max-width: 520px) { + .flex-row .input-field, + .flex-row .token-select { + width: 100%; + } + + .faucet-container { + padding: 40px 10px; + } + + .flex-row.flex-row-captcha { + justify-content: center; + padding-top: 1rem; + padding-bottom: 0; + } +} + +.faucet-container button { + height: 56px; + border-radius: 10px; + border: none; + background-color: #DD7143; + color: white; + font-size: 1.3rem; + font-family: "GT Planar", sans-serif; + margin-top: 1rem; + margin-bottom: 1rem; + width: 100%; +} + +.faucet-container button:hover { + background-color: #f0713b; +} + +.faucet-container button:disabled { + background-color: #dd71439e; +} + +.success { + margin-top: 2rem; +} + +.success div { + color: #f0ebde; + margin: 0.2rem 0; + word-break: break-all; +} + +.success a { + color: #f0ebde; +} diff --git a/app/src/components/FaucetForm/Faucet.tsx b/app/src/components/FaucetForm/Faucet.tsx new file mode 100644 index 0000000..447a39f --- /dev/null +++ b/app/src/components/FaucetForm/Faucet.tsx @@ -0,0 +1,169 @@ +import { useState, useRef, ChangeEvent, FormEvent, useEffect, Dispatch, SetStateAction } from "react" +import "./Faucet.css" +import { toast } from "react-toastify" +import axios from "axios" +import Captcha from "../Captcha/Captcha" +import TokenSelect, { Token } from "../TokenSelect/TokenSelect" +import HCaptcha from "@hcaptcha/react-hcaptcha" + +interface FaucetProps { + enabledTokens: Token[], + chainId: string, + setLoading: Dispatch> +} + +function Faucet({ enabledTokens, chainId, setLoading }: FaucetProps): JSX.Element { + const [walletAddress, setWalletAddress] = useState("") + const [token, setToken] = useState(null) + const [captchaToken, setCaptchaToken] = useState(null) + const [txHash, setTxHash] = useState(null) + const [windowWidth, setWindowWidth] = useState(window.innerWidth) + + const captchaRef = useRef(null) + + useEffect(() => { + const handleResize = () => setWindowWidth(window.innerWidth) + window.addEventListener("resize", handleResize) + return () => window.removeEventListener("resize", handleResize) + }, []) + + + useEffect(() => { + if (enabledTokens.length === 1) { + setToken({ + address: enabledTokens[0].address, + name: enabledTokens[0].name, + maximumAmount: Number(enabledTokens[0].maximumAmount) + }) + } + }, [enabledTokens.length]) + + function formatErrors(errors: string[]) { + return ( +
+ { errors.map((item, index) =>
{item}
)} +
+ ) + } + + const handleChangeAddress = (event: ChangeEvent) => { + setWalletAddress(event.target.value) + } + + const handleSubmit = (event: FormEvent) => { + event.preventDefault() + + if (walletAddress.length <= 0) { + toast.error("Please provide a wallet address.") + return + } + + const apiURL = `${process.env.REACT_APP_FAUCET_API_URL}/ask` + + if (token) { + setLoading(true) + try { + const req = { + recipient: walletAddress, + captcha: captchaToken, + tokenAddress: token.address, + chainId: chainId, + amount: token.maximumAmount + } + + axios + .post(apiURL, req) + .then((response) => { + setWalletAddress("") + + if (enabledTokens.length > 1 ) { + setToken(null) + } + + // Reset captcha + setCaptchaToken("") + captchaRef.current?.resetCaptcha() + + toast.success("Token sent to your wallet address") + setTxHash(`${response.data.transactionHash}`) + }) + .catch((error) => { + toast.error(formatErrors(error.response.data.errors)) + }) + } catch (error) { + if (error instanceof Error) { + toast.error(error.message) + } + } finally { + setLoading(false) + } + } + } + + return ( +
+

Paste your account address in the field below and choose if you want to receive either a portion of the native token or any of the enabled ERC20 tokens.

+
+ +
+ +
+
+
+ {(enabledTokens.length === 1 && token) ? + <> + +
+ {token.name} {token.maximumAmount} / day +
+ : + <> + +
+ +
+ + } +
+
+ +
+ + {txHash && +
+
Token sent to your wallet address. Hash:
+
+ {chainId === "100" + ? {txHash} + : txHash + } +
+
+ } +
+ ) +} + +export default Faucet diff --git a/app/src/components/Loading/Loading.css b/app/src/components/Loading/Loading.css new file mode 100644 index 0000000..bff7b40 --- /dev/null +++ b/app/src/components/Loading/Loading.css @@ -0,0 +1,27 @@ +.loading-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + min-height: 100vh; + background-color: rgba(240, 235, 222, 0.7); + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; +} + +.loading-spinner { + border: 4px solid #dd7143; + border-top: 4px solid transparent; + border-radius: 50%; + width: 70px; + height: 70px; + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} diff --git a/app/src/components/Loading/Loading.tsx b/app/src/components/Loading/Loading.tsx new file mode 100644 index 0000000..1cb7a09 --- /dev/null +++ b/app/src/components/Loading/Loading.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import './Loading.css' + +const Loading: React.FC = () => ( +
+
+
+) + +export default Loading diff --git a/app/src/components/TokenSelect/TokenSelect.tsx b/app/src/components/TokenSelect/TokenSelect.tsx new file mode 100644 index 0000000..c4ce424 --- /dev/null +++ b/app/src/components/TokenSelect/TokenSelect.tsx @@ -0,0 +1,70 @@ +import { Dispatch, SetStateAction } from "react" +import Select, { StylesConfig } from "react-select" + +export interface Token { + address: string + name: string + maximumAmount: number +} + +interface TokenSelectProps { + enabledTokens: Token[], + token: Token | null, + setToken: Dispatch> + windowWidth: number +} + +const formatOptionLabel = ({ name, maximumAmount }: Token) => { + return ( +
+ {name} {maximumAmount} / day +
+ ) +} + +const getOptionValue = (option: Token) => option.address + +function TokenSelect ({ enabledTokens, token, setToken, windowWidth }: TokenSelectProps): JSX.Element { + + const handleChangeToken = (option: Token | null) => { + if (option) { + for (const idx in enabledTokens) { + if (enabledTokens[idx].address.toLowerCase() == option.address.toLowerCase()) { + setToken({ + address: option.address, + name: option.name, + maximumAmount: Number(enabledTokens[idx].maximumAmount) + }) + break + } + } + } else { + setToken(null) + } + } + + const customStyles: StylesConfig = { + control: (provided) => ({ + ...provided, + height: "56px", + width: windowWidth > 520 ? "303px" : "auto", + border: "none" + }) + } + + return ( + - {enabledTokens?.map((item) => { - return ( - - {item.name} {item.maximumAmount} day - - ); - })} - - - - - - - - - - {showCaptcha()} - - - - - - - ); -}; diff --git a/app/src/components/loading/loading.js b/app/src/components/loading/loading.js deleted file mode 100644 index b1c9e0c..0000000 --- a/app/src/components/loading/loading.js +++ /dev/null @@ -1,17 +0,0 @@ -import Backdrop from "@mui/material/Backdrop"; -import { Box, CircularProgress } from "@mui/material"; - -export default function Loading(props) { - const { open } = props; - - return ( - theme.zIndex.drawer + 1 }} - open={open} - > - - - - - ); -} diff --git a/app/src/css/App.css b/app/src/css/App.css index 889040f..4b54bcb 100644 --- a/app/src/css/App.css +++ b/app/src/css/App.css @@ -1,13 +1,96 @@ -.App-logo { - max-height: 20px; +@font-face { + font-family: "GT Planar"; + src: url("../fonts/GT-Planar-Regular.woff2") format("woff2"), + url("../fonts/GT-Planar-Regular.woff") format("woff") + url("../fonts/GT-Planar-Regular.ttf") format("true-type"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Maxi Round"; + src: url("../fonts/ABCMaxiRound-Regular.otf") format("opentype"); +} + + +.app-logo { + max-height: 30px; pointer-events: none; - position: absolute; - left: 10px; - top: 15px; + margin: 15px 10px; + align-self: flex-start; } +@media (max-width: 520px) { + .app-logo { + max-height: 20px; + } +} .Toastify__toast { font-size: 16px; - font-family: Roboto, Helvetica, Arial, sans-serif; + font-family: "GT Planar", Helvetica, Arial, sans-serif !important; +} + +.Toastify__close-button { + align-self: center !important; +} + +.app-container { + display: flex; + flex-direction: column; + align-items: center; + font-family: "GT Planar", sans-serif; + background-image: url("../images/Faucet_BG.jpg"); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + backdrop-filter: contrast(0.5); + padding: 10px; + min-height: 100vh; + box-sizing: border-box; +} + +.app-container::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #00000080; + z-index: -1; +} + +.title { + padding-top: 3rem; + padding-bottom: 3rem; +} + +.title h1, +.title h2 { + margin-top: 0; + margin-bottom: 0; + color: #F0EBDE; + text-align: center; + font-weight: normal; +} + +.title h1 { + font-family: "Maxi Round", sans-serif; + font-size: 4.5rem; + text-transform: uppercase; +} + +.title h2 { + font-size: 2.5rem; +} + +@media (max-width: 900px) { + .title h1 { + font-size: 3rem; + } + + .title h2 { + font-size: 2rem; + } } \ No newline at end of file diff --git a/app/src/css/index.css b/app/src/css/index.css index 8e2dc23..f313c02 100644 --- a/app/src/css/index.css +++ b/app/src/css/index.css @@ -6,9 +6,8 @@ body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - background-color: rgb(236, 230, 214); - color: rgb(33, 65, 50); font-size: calc(10px + 2vmin); + min-height: 100vh; } code { diff --git a/app/src/fonts/ABCMaxiRound-Regular.otf b/app/src/fonts/ABCMaxiRound-Regular.otf new file mode 100644 index 0000000..7c86f23 Binary files /dev/null and b/app/src/fonts/ABCMaxiRound-Regular.otf differ diff --git a/app/src/fonts/GT-Planar-Regular.ttf b/app/src/fonts/GT-Planar-Regular.ttf new file mode 100644 index 0000000..d7975bf Binary files /dev/null and b/app/src/fonts/GT-Planar-Regular.ttf differ diff --git a/app/src/fonts/GT-Planar-Regular.woff b/app/src/fonts/GT-Planar-Regular.woff new file mode 100644 index 0000000..992ab25 Binary files /dev/null and b/app/src/fonts/GT-Planar-Regular.woff differ diff --git a/app/src/fonts/GT-Planar-Regular.woff2 b/app/src/fonts/GT-Planar-Regular.woff2 new file mode 100644 index 0000000..29ad899 Binary files /dev/null and b/app/src/fonts/GT-Planar-Regular.woff2 differ diff --git a/app/src/images/Faucet_BG.jpg b/app/src/images/Faucet_BG.jpg new file mode 100644 index 0000000..f8d693d Binary files /dev/null and b/app/src/images/Faucet_BG.jpg differ diff --git a/app/src/images/logo.svg b/app/src/images/logo.svg index 4f21219..e5c2bfa 100644 --- a/app/src/images/logo.svg +++ b/app/src/images/logo.svg @@ -4,11 +4,11 @@ viewBox="0 0 1911 200.03" style="enable-background:new 0 0 1911 200.03;" xml:space="preserve"> diff --git a/app/tsconfig.json b/app/tsconfig.json new file mode 100644 index 0000000..cf260c6 --- /dev/null +++ b/app/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": [ + "src", + "types.d.ts" + ] +} diff --git a/app/types.d.ts b/app/types.d.ts new file mode 100644 index 0000000..091d25e --- /dev/null +++ b/app/types.d.ts @@ -0,0 +1,4 @@ +declare module '*.svg' { + const content: any; + export default content; +} diff --git a/app/yarn.lock b/app/yarn.lock index d75e925..0aa14b6 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -87,7 +87,7 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.22.5": +"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== @@ -127,6 +127,21 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" +"@babel/helper-create-class-features-plugin@^7.21.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz#fc7554141bdbfa2d17f7b4b80153b9b090e5d158" + integrity sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" @@ -167,7 +182,7 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15": +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== @@ -371,6 +386,16 @@ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== +"@babel/plugin-proposal-private-property-in-object@^7.21.11": + version "7.21.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz#69d597086b6760c4126525cfa154f34631ff272c" + integrity sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -1121,6 +1146,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.12.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.22.15", "@babel/template@^7.3.3": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" @@ -1288,7 +1320,7 @@ source-map "^0.5.7" stylis "4.2.0" -"@emotion/cache@^11.11.0": +"@emotion/cache@^11.11.0", "@emotion/cache@^11.4.0": version "11.11.0" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== @@ -1304,27 +1336,20 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== -"@emotion/is-prop-valid@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc" - integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw== - dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/memoize@^0.8.1": version "0.8.1" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== -"@emotion/react@^11.11.1": - version "11.11.1" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157" - integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA== +"@emotion/react@^11.8.1": + version "11.11.4" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.4.tgz#3a829cac25c1f00e126408fab7f891f00ecc3c1d" + integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== dependencies: "@babel/runtime" "^7.18.3" "@emotion/babel-plugin" "^11.11.0" "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.2" + "@emotion/serialize" "^1.1.3" "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" "@emotion/utils" "^1.2.1" "@emotion/weak-memoize" "^0.3.1" @@ -1341,23 +1366,22 @@ "@emotion/utils" "^1.2.1" csstype "^3.0.2" +"@emotion/serialize@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.3.tgz#84b77bfcfe3b7bb47d326602f640ccfcacd5ffb0" + integrity sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA== + dependencies: + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/unitless" "^0.8.1" + "@emotion/utils" "^1.2.1" + csstype "^3.0.2" + "@emotion/sheet@^1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== -"@emotion/styled@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.0.tgz#26b75e1b5a1b7a629d7c0a8b708fbf5a9cdce346" - integrity sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/is-prop-valid" "^1.2.1" - "@emotion/serialize" "^1.1.2" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/unitless@^0.8.1": version "0.8.1" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" @@ -1378,14 +1402,14 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== -"@eslint-community/eslint-utils@^4.2.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": version "4.10.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== @@ -1410,32 +1434,25 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== -"@floating-ui/core@^1.4.2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.5.0.tgz#5c05c60d5ae2d05101c3021c1a2a350ddc027f8c" - integrity sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg== - dependencies: - "@floating-ui/utils" "^0.1.3" - -"@floating-ui/dom@^1.5.1": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.3.tgz#54e50efcb432c06c23cd33de2b575102005436fa" - integrity sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA== +"@floating-ui/core@^1.0.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1" + integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== dependencies: - "@floating-ui/core" "^1.4.2" - "@floating-ui/utils" "^0.1.3" + "@floating-ui/utils" "^0.2.1" -"@floating-ui/react-dom@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.4.tgz#b076fafbdfeb881e1d86ae748b7ff95150e9f3ec" - integrity sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ== +"@floating-ui/dom@^1.0.1": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.3.tgz#954e46c1dd3ad48e49db9ada7218b0985cee75ef" + integrity sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw== dependencies: - "@floating-ui/dom" "^1.5.1" + "@floating-ui/core" "^1.0.0" + "@floating-ui/utils" "^0.2.0" -"@floating-ui/utils@^0.1.3": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.6.tgz#22958c042e10b67463997bd6ea7115fe28cbcaf9" - integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A== +"@floating-ui/utils@^0.2.0", "@floating-ui/utils@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" + integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== "@hcaptcha/loader@^1.0.9": version "1.0.9" @@ -1766,90 +1783,6 @@ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@mui/base@5.0.0-beta.24": - version "5.0.0-beta.24" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.24.tgz#1a0638388291828dacf9547b466bc21fbaad3a2a" - integrity sha512-bKt2pUADHGQtqWDZ8nvL2Lvg2GNJyd/ZUgZAJoYzRgmnxBL9j36MSlS3+exEdYkikcnvVafcBtD904RypFKb0w== - dependencies: - "@babel/runtime" "^7.23.2" - "@floating-ui/react-dom" "^2.0.4" - "@mui/types" "^7.2.9" - "@mui/utils" "^5.14.18" - "@popperjs/core" "^2.11.8" - clsx "^2.0.0" - prop-types "^15.8.1" - -"@mui/core-downloads-tracker@^5.14.18": - version "5.14.18" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.18.tgz#f8b187dc89756fa5c0b7d15aea537a6f73f0c2d8" - integrity sha512-yFpF35fEVDV81nVktu0BE9qn2dD/chs7PsQhlyaV3EnTeZi9RZBuvoEfRym1/jmhJ2tcfeWXiRuHG942mQXJJQ== - -"@mui/material@^5.14.18": - version "5.14.18" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.14.18.tgz#d0a89be3e27afe90135d542ddbf160b3f34e869c" - integrity sha512-y3UiR/JqrkF5xZR0sIKj6y7xwuEiweh9peiN3Zfjy1gXWXhz5wjlaLdoxFfKIEBUFfeQALxr/Y8avlHH+B9lpQ== - dependencies: - "@babel/runtime" "^7.23.2" - "@mui/base" "5.0.0-beta.24" - "@mui/core-downloads-tracker" "^5.14.18" - "@mui/system" "^5.14.18" - "@mui/types" "^7.2.9" - "@mui/utils" "^5.14.18" - "@types/react-transition-group" "^4.4.8" - clsx "^2.0.0" - csstype "^3.1.2" - prop-types "^15.8.1" - react-is "^18.2.0" - react-transition-group "^4.4.5" - -"@mui/private-theming@^5.14.18": - version "5.14.18" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.14.18.tgz#98f97139ea21570493391ab377c1deb47fc6d1a2" - integrity sha512-WSgjqRlzfHU+2Rou3HlR2Gqfr4rZRsvFgataYO3qQ0/m6gShJN+lhVEvwEiJ9QYyVzMDvNpXZAcqp8Y2Vl+PAw== - dependencies: - "@babel/runtime" "^7.23.2" - "@mui/utils" "^5.14.18" - prop-types "^15.8.1" - -"@mui/styled-engine@^5.14.18": - version "5.14.18" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.14.18.tgz#82d427bc975b85cecdbab2fd9353ed6c2df7eae1" - integrity sha512-pW8bpmF9uCB5FV2IPk6mfbQCjPI5vGI09NOLhtGXPeph/4xIfC3JdIX0TILU0WcTs3aFQqo6s2+1SFgIB9rCXA== - dependencies: - "@babel/runtime" "^7.23.2" - "@emotion/cache" "^11.11.0" - csstype "^3.1.2" - prop-types "^15.8.1" - -"@mui/system@^5.14.18": - version "5.14.18" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.14.18.tgz#0f671e8f0a5e8e965b79235d77c50098f54195b5" - integrity sha512-hSQQdb3KF72X4EN2hMEiv8EYJZSflfdd1TRaGPoR7CIAG347OxCslpBUwWngYobaxgKvq6xTrlIl+diaactVww== - dependencies: - "@babel/runtime" "^7.23.2" - "@mui/private-theming" "^5.14.18" - "@mui/styled-engine" "^5.14.18" - "@mui/types" "^7.2.9" - "@mui/utils" "^5.14.18" - clsx "^2.0.0" - csstype "^3.1.2" - prop-types "^15.8.1" - -"@mui/types@^7.2.9": - version "7.2.9" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.9.tgz#730ee83a37af292a5973962f78ce5c95f31213a7" - integrity sha512-k1lN/PolaRZfNsRdAqXtcR71sTnv3z/VCCGPxU8HfdftDkzi335MdJ6scZxvofMAd/K/9EbzCZTFBmlNpQVdCg== - -"@mui/utils@^5.14.18": - version "5.14.18" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.18.tgz#d2a46df9b06230423ba6b6317748b27185a56ac3" - integrity sha512-HZDRsJtEZ7WMSnrHV9uwScGze4wM/Y+u6pDVo+grUjt5yXzn+wI8QX/JwTHh9YSw/WpnUL80mJJjgCnWj2VrzQ== - dependencies: - "@babel/runtime" "^7.23.2" - "@types/prop-types" "^15.7.10" - prop-types "^15.8.1" - react-is "^18.2.0" - "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" @@ -1893,11 +1826,6 @@ schema-utils "^3.0.0" source-map "^0.7.3" -"@popperjs/core@^2.11.8": - version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - "@rollup/plugin-babel@^5.2.0": version "5.3.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" @@ -2297,7 +2225,15 @@ expect "^29.0.0" pretty-format "^29.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/jest@^29.5.12": + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -2331,6 +2267,13 @@ dependencies: undici-types "~5.26.4" +"@types/node@^20.11.21": + version "20.11.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.21.tgz#ad67e65652f7be15686e2df87a38076a81c5e9c5" + integrity sha512-/ySDLGscFPNasfqStUuWWPfL78jompfIoVzLJPVVAHBh6rpG68+pI2Gk+fNLeI8/f1yPYL4s46EleVIc20F1Ow== + dependencies: + undici-types "~5.26.4" + "@types/parse-json@^4.0.0": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" @@ -2341,7 +2284,7 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== -"@types/prop-types@*", "@types/prop-types@^15.7.10": +"@types/prop-types@*": version "15.7.10" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.10.tgz#892afc9332c4d62a5ea7e897fe48ed2085bbb08a" integrity sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A== @@ -2368,10 +2311,17 @@ dependencies: "@types/react" "*" -"@types/react-transition-group@^4.4.8": - version "4.4.9" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.9.tgz#12a1a1b5b8791067198149867b0823fbace31579" - integrity sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg== +"@types/react-dom@^18.2.19": + version "18.2.19" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58" + integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA== + dependencies: + "@types/react" "*" + +"@types/react-transition-group@^4.4.0": + version "4.4.10" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" + integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== dependencies: "@types/react" "*" @@ -2384,6 +2334,15 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/react@^18.2.60": + version "18.2.60" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.60.tgz#df026eaef1100b6dafe420f36fecb1d209a8cee1" + integrity sha512-dfiPj9+k20jJrLGOu9Nf6eqxm2EyJRrq2NvwOFsfbb7sFExZ9WELPs67UImHj3Ayxg8ruTtKtNnbjaF8olPq0A== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -2406,6 +2365,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== +"@types/semver@^7.5.0": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + "@types/send@*": version "0.17.4" resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" @@ -2496,6 +2460,23 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/eslint-plugin@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.0.tgz#22bb999a8d59893c0ea07923e8a21f9d985ad740" + integrity sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "7.1.0" + "@typescript-eslint/type-utils" "7.1.0" + "@typescript-eslint/utils" "7.1.0" + "@typescript-eslint/visitor-keys" "7.1.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/experimental-utils@^5.0.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz#14559bf73383a308026b427a4a6129bae2146741" @@ -2513,6 +2494,17 @@ "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" +"@typescript-eslint/parser@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.1.0.tgz#b89dab90840f7d2a926bf4c23b519576e8c31970" + integrity sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w== + dependencies: + "@typescript-eslint/scope-manager" "7.1.0" + "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/typescript-estree" "7.1.0" + "@typescript-eslint/visitor-keys" "7.1.0" + debug "^4.3.4" + "@typescript-eslint/scope-manager@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" @@ -2521,6 +2513,14 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" +"@typescript-eslint/scope-manager@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.1.0.tgz#e4babaa39a3d612eff0e3559f3e99c720a2b4a54" + integrity sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A== + dependencies: + "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/visitor-keys" "7.1.0" + "@typescript-eslint/type-utils@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" @@ -2531,11 +2531,26 @@ debug "^4.3.4" tsutils "^3.21.0" +"@typescript-eslint/type-utils@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.1.0.tgz#372dfa470df181bcee0072db464dc778b75ed722" + integrity sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew== + dependencies: + "@typescript-eslint/typescript-estree" "7.1.0" + "@typescript-eslint/utils" "7.1.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/types@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== +"@typescript-eslint/types@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.1.0.tgz#52a86d6236fda646e7e5fe61154991dc0dc433ef" + integrity sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA== + "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" @@ -2549,6 +2564,20 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.0.tgz#419b1310f061feee6df676c5bed460537310c593" + integrity sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ== + dependencies: + "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/visitor-keys" "7.1.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.58.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" @@ -2563,6 +2592,19 @@ eslint-scope "^5.1.1" semver "^7.3.7" +"@typescript-eslint/utils@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.1.0.tgz#710ecda62aff4a3c8140edabf3c5292d31111ddd" + integrity sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "7.1.0" + "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/typescript-estree" "7.1.0" + semver "^7.5.4" + "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" @@ -2571,6 +2613,14 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.0.tgz#576c4ad462ca1378135a55e2857d7aced96ce0a0" + integrity sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA== + dependencies: + "@typescript-eslint/types" "7.1.0" + eslint-visitor-keys "^3.4.1" + "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" @@ -3484,11 +3534,6 @@ clsx@^1.1.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -clsx@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" - integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3899,7 +3944,7 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@^3.0.2, csstype@^3.1.2: +csstype@^3.0.2: version "3.1.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== @@ -5467,6 +5512,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== +ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + immer@^9.0.7: version "9.0.21" resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" @@ -6768,6 +6818,11 @@ memfs@^3.1.2, memfs@^3.4.3: dependencies: fs-monkey "^1.0.4" +memoize-one@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" + integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -6835,6 +6890,13 @@ minimalistic-assert@^1.0.0: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -7938,7 +8000,7 @@ prompts@^2.0.1, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.2, prop-types@^15.8.1: +prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -8086,7 +8148,7 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-is@^18.0.0, react-is@^18.2.0: +react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== @@ -8151,6 +8213,21 @@ react-scripts@5.0.1: optionalDependencies: fsevents "^2.3.2" +react-select@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.8.0.tgz#bd5c467a4df223f079dd720be9498076a3f085b5" + integrity sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA== + dependencies: + "@babel/runtime" "^7.12.0" + "@emotion/cache" "^11.4.0" + "@emotion/react" "^11.8.1" + "@floating-ui/dom" "^1.0.1" + "@types/react-transition-group" "^4.4.0" + memoize-one "^6.0.0" + prop-types "^15.6.0" + react-transition-group "^4.3.0" + use-isomorphic-layout-effect "^1.1.2" + react-toastify@^9.1.3: version "9.1.3" resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.1.3.tgz#1e798d260d606f50e0fab5ee31daaae1d628c5ff" @@ -8158,7 +8235,7 @@ react-toastify@^9.1.3: dependencies: clsx "^1.1.1" -react-transition-group@^4.4.5: +react-transition-group@^4.3.0: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== @@ -8551,6 +8628,13 @@ semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: dependencies: lru-cache "^6.0.0" +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -9233,6 +9317,11 @@ tryer@^1.0.1: resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== +ts-api-utils@^1.0.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" + integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== + ts-interface-checker@^0.1.9: version "0.1.13" resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" @@ -9353,6 +9442,11 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typescript@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -9451,6 +9545,11 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" +use-isomorphic-layout-effect@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"