{"version":3,"sources":["contexts/ui.tsx","config.tsx","utils/cache.ts","contexts/wallet.tsx","contexts/notifications.tsx","utils/big-number.ts","hooks/useTokenInfo.tsx","utils/promise.ts","contexts/contracts.tsx","utils/request.ts","contexts/data.tsx","components/global/Header.tsx","components/global/ConnectWallet.tsx","hooks/useTokenStatistics.tsx","pages/Positions.tsx","hooks/useIncrementingNumber.tsx","hooks/usePosition.tsx","modals/StakeModal.tsx","modals/UnstakeModal.tsx","modals/WithdrawModal.tsx","components/global/Layout.tsx","components/shared/Notification.tsx","components/shared/Stars.tsx","utils/theme.ts","components/global/App.tsx","i18n.tsx","index.tsx"],"names":["UIContext","createContext","UIProvider","_ref","children","notification","notify","useState","_jsx","Provider","value","showErrorNotification","e","message","CACHE_WALLET_KEY","NETWORK_MAINNET","NETWORK_ARBITRUM","AVAILABLE_NETWORKS","EXPLORER_URLS","CHAIN_IDS","TOKEN_0_ADDRESS","TOKEN_1_ADDRESS","NFT_POSITIONS_MANAGER_ADDRESS","STAKING_REWARDS_ADDRESS","SUBGRAPHS","cache","k","v","arguments","length","window","localStorage","removeItem","setItem","JSON","stringify","parse","getItem","WalletContext","WalletProvider","isConnecting","setIsConnecting","network","setNetwork","signer","setSigner","address","setAddress","startConnecting","useCallback","stopConnecting","setProvider","async","web3Provider","on","location","reload","provider","ethers","providers","Web3Provider","name","chainId","getNetwork","key","getSigner","getAddress","connectMetamask","ethereum","request","method","error","console","useEffect","cachedWallet","_c$cachedWallet","c","metamask","call","load","disconnect","useWallet","context","useContext","Error","NotificationsContext","NotificationsProvider","enqueueSnackbar","useSnackbar","showTxNotification","description","hash","type","persist","msg","_msg$error","responseText","showSuccessNotification","title","tx","startNotification","endNotification","makeTx","wait","useNotifications","formatUnits","a","decimals","precision","b","toBigNumber","isZero","div","toFormat","decimalSeparator","groupSeparator","toFixed","pow","n","BigNumber","toString","useTokenInfo","tokenAddress","balance","setBalance","setDecimals","symbol","setSymbol","contract","useMemo","ERC20_CONTRACT_ABI","onBalanceChange","from","to","ms","Promise","r","setTimeout","balanceOf","all","subscribe","transferEvent","filters","Transfer","off","ContractsContext","ContractsProvider","token0Address","token1Address","token0Decimals","token0Symbol","token1Decimals","token1Symbol","nftManagerPositionsAddress","stakingRewardsAddress","nftManagerPositionsContract","Contract","NFT_POSITIONS_MANAGER_ABI","stakingRewardsContract","STAKING_REWARDS_ABI","useContracts","subgraph","subgraphUrl","query","variables","res","fetch","body","data","json","DataContext","DataProvider","_currentIncentive$key","t","useTranslation","positions","setPositions","incentives","setIncentiveIds","currentIncentiveId","setCurrentIncentiveId","currentIncentive","_incentives$find","find","incentive","id","currentIncentiveRewardTokenDecimals","currentIncentiveRewardTokenSymbol","rewardToken","includes","_results$incentives$","_results$incentives$2","rewardTokenAddress","results","map","_ref2","pool","startTime","endTime","refundee","reward","ended","Number","refreshPositions","concat","owner","detailedPositions","pos","liquidity","token0","token1","tokenId","staked","rewardAmount","getRewardInfo","err","push","_orderBy","intervalId","setInterval","clearInterval","isMounted","unsubs","updateStaked","incentiveId","position","updateUnstaked","stakedEvent","TokenStaked","unstakedEvent","TokenUnstaked","forEach","u","useData","useStyles","makeStyles","theme","container","boxShadow","account","marginRight","marginLeft","breakpoints","down","display","flagIcon","height","border","btn","color","backgroundColor","fontWeight","textTransform","Header","classes","i18n","anchorEl","setAnchorEl","walletMenuAnchorEl","setWalletMenuAnchorEl","open","Boolean","walletMenuOpen","shortAddress","slice","handleClose","validNetwork","Object","keys","explorerUrl","AppBar","className","_jsxs","Toolbar","Typography","variant","Button","onClick","event","currentTarget","language","substring","toUpperCase","Menu","getContentAnchorEl","keepMounted","onClose","anchorOrigin","vertical","horizontal","transformOrigin","code","flagSrc","MenuItem","lang","changeLanguage","handleLanguageChange","src","alt","_Fragment","Jazzicon","diameter","seed","jsNumberForAddress","href","target","rel","style","textDecoration","width","padding","lineHeight","marginTop","fontSize","x","top","right","cursor","wallet","alignItems","margin","opacity","net","palette","secondary","main","ConnectWallet","isOnCorrectNetwork","indexOf","Dialog","clsx","Icon","Box","mt","preventDefault","params","switchError","rpcUrls","chainName","nativeCurrency","blockExplorerUrls","addError","useTokenStatistics","priceUsd","setPriceUsd","isLoading","setIsLoading","setError","undefined","fetchTokenStatistics","response","headers","Accept","ok","price","attributes","price_usd","maxButton","claimButton","depositButtonCell","depositButton","positionCard","link","helpButton","float","LiquidityPositionTableRow","history","isMobile","targetNumber","parseFloat","currentNumber","isAnimating","setCurrentNumber","setIsAnimating","isFirstRun","useRef","current","difference","Math","abs","prevNumber","step","nextNumber","useIncrementingNumber","currentNumberUSD","times","toNumber","stake","unstake","withdraw","animatingStyle","transition","Card","CardContent","flexDirection","textAlign","mb","justifyContent","disabled","TableRow","TableCell","component","scope","mr","align","ClaimAvailableReward","setReward","isClaiming","setIsClaiming","rewards","tokenUnstakedEvent","rewardClaimedEvent","RewardClaimed","claimReward","warn","startIcon","CircularProgress","size","formatDate","unix","moment","format","withRouter","useTheme","useMediaQuery","startConnectingWallet","totalRewards","setTotalRewards","updateTotalRewards","total","reduce","acc","document","getElementById","script","createElement","appendChild","removeChild","confetti","angle","spread","particleCount","origin","y","p","IconButton","handleHelpClick","url","startsWith","HelpOutlineIcon","count","rewardWord","join","xs","md","FormControl","InputLabel","shrink","Select","labelId","displayEmpty","onChange","Table","TableHead","Tooltip","arrow","placement","InfoIcon","TableBody","usePosition","isWorking","setIsWorking","approve","next","transfer","stakeToken","unstakeToken","claim","withdrawToken","maxWidth","spacing","stepper","STEPS","StakeStepper","match","parseInt","activeStep","setActiveStep","approvedAddress","getApproved","ownerOf","px","CloseIcon","close","Stepper","label","Step","StepLabel","capitalize","approveOrTransferOrStake","UnstakeStepper","WithdrawStepper","deposit","deposits","numberOfStakes","unstakeOrWithdraw","transform","paper","Layout","Router","Paper","Positions","Switch","Route","path","StakeModal","UnstakeModal","WithdrawModal","borderRadius","icon","background","success","marginBottom","underline","TxContent","ErrorContent","_ref3","SuccessContent","_ref4","small","Notification","closeSnackbar","TYPES","Map","TxIcon","ErrorIcon","SuccessIcon","Content","get","notificationClass","clearNotification","starsWrapper","pointerEvents","overflow","star","fill","comet","Stars","stars","setStars","maxStars","test","navigator","userAgent","newStars","Array","cx","random","cy","round","preserveAspectRatio","index","offset","stopColor","rx","ry","createMuiTheme","typography","fontFamily","default","primary","overrides","MuiButton","root","MuiPaper","rounded","MuiDialog","MuiInput","borderBottomColor","snackbar","App","canvas","querySelector","ctx","getContext","parentNode","HTMLElement","offsetWidth","offsetHeight","resizeCanvas","requestAnimFrame","requestAnimationFrame","callback","lines","waves","clearRect","j","fillStyle","PI","deltaHeight","sin","deltaHeightRight","cos","beginPath","moveTo","bezierCurveTo","lineTo","closePath","addEventListener","removeEventListener","ThemeProvider","CssBaseline","SnackbarProvider","maxSnack","content","langWithIndexSignature","resources","translation","use","LanguageDetector","initReactI18next","init","fallbackLng","interpolation","escapeValue","render"],"mappings":"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","file":"static/js/main.7c4ea701.chunk.js","sourcesContent":["import { FC, useState, useContext, createContext, ReactNode } from 'react';\n\nconst UIContext = createContext<{\n notification: string | null;\n notify: (notification: string | null) => void;\n showErrorNotification: (e: any | null) => void;\n} | null>(null);\n\nexport const UIProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [notification, notify] = useState(null);\n\n const showErrorNotification = (e: any) => {\n notify(e.message);\n };\n\n return (\n \n {children}\n \n );\n};\n\nexport function useUI() {\n const context = useContext(UIContext);\n if (!context) {\n throw new Error('Missing UI context');\n }\n const { notification, notify, showErrorNotification } = context;\n\n return {\n notification,\n notify,\n showErrorNotification,\n };\n}\n","export const BORDER_RADIUS = 30;\nexport const APP_NAME = 'MARK Staking';\n\nexport const LG_BREAKPOINT = 'md';\nexport const SM_BREAKPOINT = 'sm';\n\nexport const IS_DEV = 1;\n\nexport const CACHE_WALLET_KEY = 'wallet';\n\nexport const NETWORK_MAINNET = 'mainnet';\nexport const NETWORK_ARBITRUM = 'arbitrum';\nexport const AVAILABLE_NETWORKS = [NETWORK_ARBITRUM];\n\nexport const EXPLORER_URLS: Record = {\n [NETWORK_MAINNET]: 'https://etherscan.io',\n [NETWORK_ARBITRUM]: 'https://arbiscan.io',\n};\n\nexport const CHAIN_IDS: Record = {\n [NETWORK_MAINNET]: 1,\n [NETWORK_ARBITRUM]: 42161,\n};\n\nexport const TOKEN_0_ADDRESS: Record = {\n [NETWORK_MAINNET]: '',\n [NETWORK_ARBITRUM]: '0x4D01397994aA636bDCC65c9e8024bC497498c3bb',\n};\n\n// WETH\nexport const TOKEN_1_ADDRESS: Record = {\n [NETWORK_MAINNET]: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n [NETWORK_ARBITRUM]: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n};\n\nexport const NFT_POSITIONS_MANAGER_ADDRESS: Record = {\n [NETWORK_MAINNET]: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n [NETWORK_ARBITRUM]: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n};\n\nexport const STAKING_REWARDS_ADDRESS: Record = {\n [NETWORK_MAINNET]: '0xe34139463bA50bD61336E0c446Bd8C0867c6fE65',\n [NETWORK_ARBITRUM]: '0xe34139463bA50bD61336E0c446Bd8C0867c6fE65',\n};\n\nexport const SUBGRAPHS: Record = {\n [NETWORK_MAINNET]: '',\n [NETWORK_ARBITRUM]:\n 'https://gateway-arbitrum.network.thegraph.com/api/ddc999498a70c9cd203192464982e78f/subgraphs/id/ES3yH86sUFAggYtRDTETQ3KsG8nVsdZUrgVV2jyJCt7g',\n};\n","export default function cache(k: string, v?: any) {\n switch (arguments.length) {\n case 2:\n if (v === null) return window.localStorage.removeItem(k);\n return window.localStorage.setItem(k, JSON.stringify(v));\n\n case 1:\n try {\n return JSON.parse(window.localStorage.getItem(k)!);\n } catch (e) {\n return null;\n }\n\n default:\n return;\n }\n}\n","import {\n FC,\n useState,\n useEffect,\n useContext,\n createContext,\n ReactNode,\n useCallback,\n} from 'react';\nimport { ethers } from 'ethers';\nimport { CACHE_WALLET_KEY, CHAIN_IDS } from 'config';\nimport cache from 'utils/cache';\n\nconst WalletContext = createContext<{\n network: string | null;\n\n signer: ethers.Signer | null;\n address: string | null;\n\n isConnecting: boolean;\n startConnecting: () => void;\n stopConnecting: () => void;\n disconnect: () => void;\n\n connectMetamask: () => void;\n} | null>(null);\n\nexport const WalletProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [isConnecting, setIsConnecting] = useState(false);\n const [network, setNetwork] = useState(null);\n const [signer, setSigner] = useState(null);\n const [address, setAddress] = useState(null);\n\n const startConnecting = useCallback(() => setIsConnecting(true), [\n setIsConnecting,\n ]);\n const stopConnecting = useCallback(() => setIsConnecting(false), [\n setIsConnecting,\n ]);\n\n const setProvider = useCallback(\n async (web3Provider: any) => {\n web3Provider.on('accountsChanged', () => {\n window.location.reload();\n });\n web3Provider.on('chainChanged', () => {\n window.location.reload();\n });\n // web3Provider.on('disconnect', () => {\n // disconnect();\n // });\n const provider = new ethers.providers.Web3Provider(web3Provider);\n\n let { name: network, chainId } = await provider.getNetwork();\n\n for (const key in CHAIN_IDS) {\n if (CHAIN_IDS[key] === chainId) {\n network = key;\n }\n }\n\n setNetwork(network);\n\n const signer = provider.getSigner();\n setSigner(signer);\n setAddress(await signer.getAddress());\n stopConnecting();\n },\n [stopConnecting]\n );\n\n const connectMetamask = useCallback(async () => {\n if (!window.ethereum) return;\n\n try {\n await window.ethereum.request({ method: 'eth_requestAccounts' });\n cache(CACHE_WALLET_KEY, 'metamask');\n await setProvider(window.ethereum);\n } catch (error) {\n console.error('User rejected the request:', error);\n }\n }, [setProvider]);\n\n async function disconnect() {\n cache(CACHE_WALLET_KEY, null);\n setSigner(null);\n setAddress(null);\n setNetwork(null);\n }\n\n useEffect(() => {\n const load = async () => {\n if (address) return;\n\n const cachedWallet = cache(CACHE_WALLET_KEY);\n if (cachedWallet) {\n const c: Record void> = {\n metamask: connectMetamask,\n };\n c[cachedWallet]?.();\n }\n };\n\n load();\n }, [address, connectMetamask]);\n\n return (\n \n {children}\n \n );\n};\n\nexport function useWallet() {\n const context = useContext(WalletContext);\n if (!context) {\n throw new Error('Missing Wallet context');\n }\n const {\n network,\n\n signer,\n address,\n\n isConnecting,\n startConnecting,\n stopConnecting,\n disconnect,\n\n connectMetamask,\n } = context;\n\n return {\n network,\n\n signer,\n address,\n\n isConnecting,\n startConnecting,\n stopConnecting,\n disconnect,\n\n connectMetamask,\n };\n}\n","import { FC, useContext, createContext, ReactNode } from 'react';\nimport { useSnackbar } from 'notistack';\n\nconst NotificationsContext = createContext<{\n showTxNotification: (description: string, hash: string) => void;\n showErrorNotification: (msg: any) => void;\n showSuccessNotification: (title: string, message: string) => void;\n tx: (\n startNotification: string,\n endNotification: string,\n makeTx: () => { hash: string; wait: () => Promise }\n ) => void;\n} | null>(null);\n\nexport const NotificationsProvider: FC<{ children: ReactNode }> = ({\n children,\n}) => {\n const { enqueueSnackbar } = useSnackbar();\n\n const showTxNotification = (description: string, hash: string) => {\n enqueueSnackbar(\n { type: 'tx', description, hash },\n {\n persist: true,\n }\n );\n };\n\n const showErrorNotification = (msg: any) => {\n enqueueSnackbar(\n {\n type: 'error',\n message: msg?.error?.message || msg.responseText || msg.message || msg,\n },\n {\n persist: true,\n }\n );\n };\n\n const showSuccessNotification = (title: string, message: string) => {\n enqueueSnackbar(\n {\n type: 'success',\n title,\n message,\n },\n {\n persist: true,\n }\n );\n };\n\n const tx = async (\n startNotification: string,\n endNotification: string,\n makeTx: () => { hash: string; wait: () => Promise }\n ) => {\n try {\n const { hash, wait } = await makeTx();\n showTxNotification(startNotification, hash);\n await wait();\n showTxNotification(endNotification, hash);\n } catch (e) {\n showErrorNotification(e);\n throw e;\n }\n };\n\n return (\n \n {children}\n \n );\n};\n\nexport function useNotifications() {\n const context = useContext(NotificationsContext);\n if (!context) {\n throw new Error('Missing Notifications context');\n }\n const {\n showTxNotification,\n showErrorNotification,\n showSuccessNotification,\n tx,\n } = context;\n return {\n showTxNotification,\n showErrorNotification,\n showSuccessNotification,\n tx,\n };\n}\n","import BigNumber from 'bignumber.js';\n\nconst PRECISION = 4;\n\nexport function toFixed(a: any, b: any, precision?: number) {\n if (toBigNumber(a).isZero() || toBigNumber(b).isZero()) {\n return '0';\n }\n return toBigNumber(a)\n .div(toBigNumber(b))\n .toFormat(precision ?? PRECISION, {\n decimalSeparator: '.',\n groupSeparator: '',\n });\n}\n\nexport function formatUnits(\n a: any,\n decimals: number | null,\n precision?: number\n) {\n if (!decimals) return '';\n return toFixed(a, toBigNumber(10).pow(decimals), precision);\n}\n\nexport function toBigNumber(n: any) {\n return new BigNumber(n.toString());\n}\n","import { useState, useMemo, useEffect } from 'react';\nimport * as ethers from 'ethers';\nimport ERC20_CONTRACT_ABI from 'abis/erc20.json';\nimport { useWallet } from 'contexts/wallet';\nimport { sleep } from 'utils/promise';\nimport { toBigNumber } from 'utils/big-number';\n\nconst useTokenInfo = (tokenAddress: string | null) => {\n const [balance, setBalance] = useState(toBigNumber('0'));\n const [decimals, setDecimals] = useState(null);\n const [symbol, setSymbol] = useState(null);\n const { address, signer } = useWallet();\n\n const contract = useMemo(\n () =>\n signer &&\n tokenAddress &&\n new ethers.Contract(tokenAddress, ERC20_CONTRACT_ABI, signer),\n [tokenAddress, signer]\n );\n\n useEffect(() => {\n if (!(contract && address)) return;\n\n const onBalanceChange = async (from: string, to: string) => {\n if (from === address || to === address) {\n await sleep(500);\n setBalance(toBigNumber(await contract.balanceOf(address)));\n }\n };\n\n const load = async () => {\n if (!(contract && address)) return;\n const [decimals, symbol, balance] = await Promise.all([\n contract.decimals(),\n contract.symbol(),\n contract.balanceOf(address),\n ]);\n setDecimals(decimals);\n setSymbol(symbol);\n setBalance(toBigNumber(balance));\n };\n\n const subscribe = () => {\n if (!contract) return () => {};\n const transferEvent = contract.filters.Transfer();\n contract.on(transferEvent, onBalanceChange);\n return () => {\n contract.off(transferEvent, onBalanceChange);\n };\n };\n\n load();\n return subscribe();\n }, [contract, address]);\n\n return {\n symbol,\n decimals,\n balance,\n };\n};\n\nexport default useTokenInfo;\n","export function sleep(ms: number) {\n return new Promise((r) => setTimeout(r, ms));\n}\n","import { FC, useContext, useMemo, createContext, ReactNode } from 'react';\nimport { ethers } from 'ethers';\n\nimport {\n TOKEN_0_ADDRESS,\n TOKEN_1_ADDRESS,\n NFT_POSITIONS_MANAGER_ADDRESS,\n STAKING_REWARDS_ADDRESS,\n} from 'config';\nimport { useWallet } from 'contexts/wallet';\nimport useTokenInfo from 'hooks/useTokenInfo';\nimport NFT_POSITIONS_MANAGER_ABI from 'abis/nft_positions_manager.json';\nimport STAKING_REWARDS_ABI from 'abis/staking_rewards.json';\n\nconst ContractsContext = createContext<{\n token0Address: string | null;\n token1Address: string | null;\n token0Decimals: number | null;\n token1Decimals: number | null;\n token0Symbol: string | null;\n token1Symbol: string | null;\n stakingRewardsContract: ethers.Contract | null;\n nftManagerPositionsContract: ethers.Contract | null;\n} | null>(null);\n\nexport const ContractsProvider: FC<{ children: ReactNode }> = ({\n children,\n}) => {\n const { network, signer } = useWallet();\n\n const token0Address = !network ? null : TOKEN_0_ADDRESS[network];\n const token1Address = !network ? null : TOKEN_1_ADDRESS[network];\n\n const { decimals: token0Decimals, symbol: token0Symbol } = useTokenInfo(\n token0Address\n );\n const { decimals: token1Decimals, symbol: token1Symbol } = useTokenInfo(\n token1Address\n );\n\n const nftManagerPositionsAddress = !network\n ? null\n : NFT_POSITIONS_MANAGER_ADDRESS[network];\n const stakingRewardsAddress = !network\n ? null\n : STAKING_REWARDS_ADDRESS[network];\n\n const nftManagerPositionsContract = useMemo(\n () =>\n !(nftManagerPositionsAddress && signer)\n ? null\n : new ethers.Contract(\n nftManagerPositionsAddress,\n NFT_POSITIONS_MANAGER_ABI,\n signer\n ),\n [nftManagerPositionsAddress, signer]\n );\n\n const stakingRewardsContract = useMemo(\n () =>\n !(stakingRewardsAddress && signer)\n ? null\n : new ethers.Contract(\n stakingRewardsAddress,\n STAKING_REWARDS_ABI,\n signer\n ),\n [stakingRewardsAddress, signer]\n );\n\n return (\n \n {children}\n \n );\n};\n\nexport function useContracts() {\n const context = useContext(ContractsContext);\n if (!context) {\n throw new Error('Missing Contracts context');\n }\n const {\n token0Address,\n token1Address,\n token0Decimals,\n token1Decimals,\n token0Symbol,\n token1Symbol,\n stakingRewardsContract,\n nftManagerPositionsContract,\n } = context;\n\n return {\n token0Address,\n token1Address,\n token0Decimals,\n token1Decimals,\n token0Symbol,\n token1Symbol,\n stakingRewardsContract,\n nftManagerPositionsContract,\n };\n}\n","import fetch from 'unfetch';\nimport qs from 'query-string';\n\nexport async function get(url: string, query: Record) {\n if (query) {\n url += '?' + qs.stringify(query);\n }\n return await (await fetch(url)).json();\n}\n\nexport function subgraph(subgraphUrl: string) {\n return async function (query: string, variables: Record) {\n const res = await fetch(subgraphUrl, {\n method: 'POST',\n body: JSON.stringify({ query, variables }),\n });\n const { data } = await res.json();\n return data;\n };\n}\n","import {\n FC,\n useState,\n useContext,\n useMemo,\n useEffect,\n useCallback,\n createContext,\n ReactNode,\n} from 'react';\nimport _orderBy from 'lodash/orderBy';\n\nimport { useWallet } from 'contexts/wallet';\nimport { useContracts } from 'contexts/contracts';\nimport useTokenInfo from 'hooks/useTokenInfo';\nimport { Incentive, LiquidityPosition } from 'utils/types';\nimport { toBigNumber } from 'utils/big-number';\nimport * as request from 'utils/request';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n SUBGRAPHS,\n TOKEN_0_ADDRESS,\n TOKEN_1_ADDRESS,\n AVAILABLE_NETWORKS,\n} from 'config';\n\nconst DataContext = createContext<{\n positions: LiquidityPosition[];\n incentives: Incentive[];\n currentIncentiveId: string | null;\n currentIncentive: Incentive | null;\n setCurrentIncentiveId: (id: string) => void;\n currentIncentiveRewardTokenSymbol: string | null;\n currentIncentiveRewardTokenDecimals: number | null;\n} | null>(null);\n\nexport const DataProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const {\n stakingRewardsContract,\n nftManagerPositionsContract,\n } = useContracts();\n const { t } = useTranslation();\n const { network, address } = useWallet();\n const [positions, setPositions] = useState([]);\n const [incentives, setIncentiveIds] = useState([]);\n const [currentIncentiveId, setCurrentIncentiveId] = useState(\n null\n );\n\n const currentIncentive = useMemo(\n () =>\n !currentIncentiveId\n ? null\n : incentives.find((incentive) => incentive.id === currentIncentiveId) ??\n null,\n [currentIncentiveId, incentives]\n );\n\n const {\n decimals: currentIncentiveRewardTokenDecimals,\n symbol: currentIncentiveRewardTokenSymbol,\n } = useTokenInfo(currentIncentive?.key.rewardToken ?? null);\n\n // load incentives\n useEffect(() => {\n if (\n !network ||\n !AVAILABLE_NETWORKS.includes(network) ||\n TOKEN_0_ADDRESS[network] === ''\n )\n return;\n\n const load = async () => {\n const subgraph = request.subgraph(SUBGRAPHS[network])!;\n const rewardTokenAddress = TOKEN_0_ADDRESS[network];\n const results = await subgraph(\n `query($rewardTokenAddress: String!) {\n incentives(where: { rewardToken: $rewardTokenAddress }, orderBy: endTime, orderDirection: desc) {\n id\n rewardToken\n pool\n startTime\n endTime\n refundee\n reward\n ended\n }\n }`,\n { rewardTokenAddress }\n );\n if (!results || !results.incentives.length) {\n return;\n }\n setIncentiveIds(\n results.incentives.map(\n ({\n id,\n rewardToken,\n pool,\n startTime,\n endTime,\n refundee,\n reward,\n ended,\n }: {\n id: string;\n rewardToken: string;\n pool: string;\n startTime: number;\n endTime: number;\n refundee: string;\n reward: number;\n ended: boolean;\n }) =>\n ({\n id,\n reward: toBigNumber(reward),\n ended,\n key: {\n rewardToken,\n pool,\n startTime: Number(startTime),\n endTime: Number(endTime),\n refundee,\n },\n } as Incentive)\n )\n );\n setCurrentIncentiveId(results.incentives[0]?.id ?? null);\n };\n\n load();\n }, [network]);\n\n // load owned and transfered positions\n const refreshPositions = useCallback(async () => {\n if (\n !(\n nftManagerPositionsContract &&\n stakingRewardsContract &&\n address &&\n network &&\n AVAILABLE_NETWORKS.includes(network) &&\n TOKEN_0_ADDRESS[network] !== '' &&\n TOKEN_1_ADDRESS[network] !== '' &&\n currentIncentive &&\n currentIncentive.key\n )\n )\n return;\n\n const subgraph = request.subgraph(SUBGRAPHS[network]);\n if (!subgraph) return;\n\n const query = `\n query {\n positions(where: { owner: \"${address}\" }) {\n id\n tokenId\n owner\n staked\n liquidity\n approved\n }\n }\n `;\n\n try {\n const { positions } = await subgraph(query, { owner: address });\n const detailedPositions: LiquidityPosition[] = [];\n\n for (const pos of positions) {\n try {\n const {\n liquidity,\n token0,\n token1,\n } = await nftManagerPositionsContract.positions(pos.tokenId);\n if (liquidity.isZero()) continue;\n\n if (\n (token0 === TOKEN_0_ADDRESS[network] &&\n token1 === TOKEN_1_ADDRESS[network]) ||\n (token0 === TOKEN_1_ADDRESS[network] &&\n token1 === TOKEN_0_ADDRESS[network])\n ) {\n let reward = toBigNumber(0);\n let staked = pos.staked;\n let error = null;\n\n if (staked) {\n try {\n const [\n rewardAmount,\n ] = await stakingRewardsContract.getRewardInfo(\n currentIncentive.key,\n pos.tokenId\n );\n reward = toBigNumber(rewardAmount.toString());\n } catch (err: any) {\n if (\n err.data &&\n err.data.message.includes(\n 'UniswapV3Staker::getRewardInfo: stake does not exist'\n )\n ) {\n error = t('PositionNotInIncentive');\n } else {\n console.error(\n `Failed to fetch reward info for token ID ${pos.tokenId}:`,\n err\n );\n }\n }\n }\n\n detailedPositions.push({\n tokenId: Number(pos.tokenId),\n owner: pos.owner,\n reward,\n staked,\n token0,\n token1,\n error,\n });\n }\n } catch (err) {\n console.error(\n `Failed to fetch position details for token ID ${pos.tokenId}:`,\n err\n );\n }\n }\n\n setPositions(_orderBy(detailedPositions, ['tokenId'], ['desc']));\n } catch (error) {\n console.error('Error fetching positions from subgraph:', error);\n }\n }, [\n address,\n network,\n nftManagerPositionsContract,\n stakingRewardsContract,\n currentIncentive,\n t,\n ]);\n\n useEffect(() => {\n refreshPositions();\n\n const intervalId = setInterval(() => {\n refreshPositions();\n }, 10000);\n\n return () => clearInterval(intervalId);\n }, [\n address,\n nftManagerPositionsContract,\n stakingRewardsContract,\n currentIncentive,\n network,\n refreshPositions,\n ]);\n\n useEffect(() => {\n if (!(stakingRewardsContract && currentIncentiveId)) return;\n\n let isMounted = true;\n const unsubs = [\n () => {\n isMounted = false;\n },\n ];\n\n const updateStaked = (tokenId: number, incentiveId: string) => {\n if (incentiveId !== currentIncentiveId) return;\n if (isMounted) {\n setPositions((positions) =>\n positions.map((position) => {\n if (position.tokenId !== Number(tokenId.toString()))\n return position;\n return { ...position, staked: true };\n })\n );\n }\n };\n\n const updateUnstaked = (tokenId: number, incentiveId: string) => {\n if (incentiveId !== currentIncentiveId) return;\n if (isMounted) {\n setPositions((positions) =>\n positions.map((position) => {\n if (position.tokenId !== Number(tokenId.toString()))\n return position;\n return { ...position, staked: false };\n })\n );\n }\n };\n\n const subscribe = () => {\n const stakedEvent = stakingRewardsContract.filters.TokenStaked();\n const unstakedEvent = stakingRewardsContract.filters.TokenUnstaked();\n\n stakingRewardsContract.on(stakedEvent, updateStaked);\n stakingRewardsContract.on(unstakedEvent, updateUnstaked);\n\n unsubs.push(() => {\n stakingRewardsContract.off(stakedEvent, updateStaked);\n });\n unsubs.push(() => {\n stakingRewardsContract.off(unstakedEvent, updateUnstaked);\n });\n };\n\n subscribe();\n\n return () => {\n unsubs.forEach((u) => u());\n };\n }, [stakingRewardsContract, positions, currentIncentiveId]);\n\n return (\n \n {children}\n \n );\n};\n\nexport function useData() {\n const context = useContext(DataContext);\n if (!context) {\n throw new Error('Missing Data context');\n }\n const {\n positions,\n incentives,\n currentIncentiveId,\n currentIncentive,\n setCurrentIncentiveId,\n currentIncentiveRewardTokenSymbol,\n currentIncentiveRewardTokenDecimals,\n } = context;\n\n return {\n positions,\n incentives,\n currentIncentiveId,\n currentIncentive,\n setCurrentIncentiveId,\n currentIncentiveRewardTokenSymbol,\n currentIncentiveRewardTokenDecimals,\n };\n}\n","import React, { FC, useState } from 'react';\nimport Jazzicon, { jsNumberForAddress } from 'react-jazzicon';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n AppBar,\n Typography,\n Toolbar,\n Button,\n Menu,\n MenuItem,\n} from '@material-ui/core';\nimport { useWallet } from 'contexts/wallet';\nimport { APP_NAME, EXPLORER_URLS } from 'config';\nimport { useTranslation } from 'react-i18next';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n boxShadow: '3px 3px 5px 0px rgba(0,0,0,0.15)',\n },\n account: {\n marginRight: 10,\n marginLeft: 10,\n [theme.breakpoints.down('sm')]: {\n display: 'none',\n },\n },\n flagIcon: {\n height: '16px',\n marginRight: '8px',\n border: '1px solid',\n },\n btn: {\n marginLeft: 10,\n marginRight: 10,\n color: 'cyan',\n '&:hover': {\n backgroundColor: 'rgba(255, 255, 255, 0.2)',\n color: 'white',\n },\n fontWeight: 'bold',\n textTransform: 'none',\n },\n}));\n\nconst Header: FC = () => {\n const classes = useStyles();\n const { address, startConnecting, disconnect, network } = useWallet();\n const { t, i18n } = useTranslation();\n const [anchorEl, setAnchorEl] = useState(null);\n const [\n walletMenuAnchorEl,\n setWalletMenuAnchorEl,\n ] = useState(null);\n const open = Boolean(anchorEl);\n const walletMenuOpen = Boolean(walletMenuAnchorEl);\n\n const shortAddress =\n address && `${address.slice(0, 4)}....${address.slice(-4)}`;\n\n const handleMenu = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleWalletMenu = (event: React.MouseEvent) => {\n setWalletMenuAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n setWalletMenuAnchorEl(null);\n };\n\n const handleLanguageChange = (lang: string) => {\n i18n.changeLanguage(lang);\n handleClose();\n };\n\n const languages = [\n { code: 'de', name: 'Deutsch', flagSrc: '/flags/de.svg' },\n { code: 'en', name: 'English', flagSrc: '/flags/en.svg' },\n { code: 'es', name: 'Español', flagSrc: '/flags/es.svg' },\n { code: 'fr', name: 'Français', flagSrc: '/flags/fr.svg' },\n { code: 'it', name: 'Italiano', flagSrc: '/flags/it.svg' },\n { code: 'pt', name: 'Português Brasileiro', flagSrc: '/flags/pt.svg' },\n ];\n\n const validNetwork = network || Object.keys(EXPLORER_URLS)[0];\n const explorerUrl = EXPLORER_URLS[validNetwork]\n ? EXPLORER_URLS[validNetwork]\n : EXPLORER_URLS[Object.keys(EXPLORER_URLS)[0]];\n\n return (\n \n \n \n
{APP_NAME}
\n
\n\n \n {i18n.language.substring(0, 2).toUpperCase()}\n \n \n {languages.map((language) => (\n handleLanguageChange(language.code)}\n >\n \n {language.name}\n \n ))}\n \n\n {address ? (\n <>\n \n \n {shortAddress}\n \n \n {}}>\n \n Wallet: {shortAddress}\n \n \n {t('Disconnect')}\n \n \n ) : (\n \n {t('ConnectWallet')}\n \n )}\n
\n
\n );\n};\n\nexport default Header;\n","import { FC, useMemo } from 'react';\nimport clsx from 'clsx';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Box, Dialog, Button } from '@material-ui/core';\nimport { Close as Icon } from '@material-ui/icons';\nimport { useWallet } from 'contexts/wallet';\nimport { AVAILABLE_NETWORKS } from 'config';\nimport Typography from '@material-ui/core/Typography';\nimport { useTranslation } from 'react-i18next';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n width: 450,\n padding: '0 20px 10px',\n lineHeight: '1.5rem',\n '& button': {\n width: '100%',\n padding: '10px 0',\n marginTop: 20,\n fontSize: 18,\n },\n },\n x: {\n position: 'absolute',\n top: 16,\n right: 16,\n cursor: 'pointer',\n },\n wallet: {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n margin: '10px 0',\n '& img': {\n marginRight: 15,\n },\n '&:hover': {\n opacity: 0.8,\n },\n },\n net: {\n color: theme.palette.secondary.main,\n },\n}));\n\nfunction switchToEthereum(chainId: string) {\n return async (event: React.MouseEvent) => {\n event.preventDefault();\n\n const ethereum = (window as any).ethereum;\n if (ethereum) {\n try {\n await ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0xa4b1' }],\n });\n } catch (switchError: Error | any) {\n if (switchError.code === 4902 && chainId === '42161') {\n try {\n await ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [\n {\n chainId: '0xa4b1',\n rpcUrls: ['https://arb1.arbitrum.io/rpc'],\n chainName: 'Arbitrum One',\n nativeCurrency: {\n name: 'ETH',\n symbol: 'ETH',\n decimals: 18,\n },\n blockExplorerUrls: ['https://arbiscan.io/'],\n },\n ],\n });\n } catch (addError) {\n console.error(addError);\n }\n } else {\n console.error(switchError);\n }\n }\n } else {\n console.error('MetaMask is not installed');\n }\n };\n}\n\nexport const ConnectWallet: FC = () => {\n const classes = useStyles();\n const wallet = useWallet();\n const { t } = useTranslation();\n\n const isOnCorrectNetwork = useMemo(\n () => !wallet.network || ~AVAILABLE_NETWORKS.indexOf(wallet.network),\n [wallet.network]\n );\n\n return (\n {}}\n aria-labelledby='wrong-network-prompt'\n open={!isOnCorrectNetwork || wallet.isConnecting}\n >\n
\n {isOnCorrectNetwork ? (\n <>\n
\n \n
\n

{t('ConnectWallet')}

\n
\n \n \n Metamask\n
\n {/*\n
\n \n
Wallet Connect
\n
\n */}\n
\n \n ) : (\n \n {t('ChangeWalletNetwork')}\n {/*\n \n \n Please connect to {AVAILABLE_NETWORKS.join(' or ')} network.\n \n
or
\n
\n disconnect\n
\n
\n */}\n
{t('MakeSureNetwork')}
\n \n {t('SwitchNetwork')}\n \n \n )}\n \n \n );\n};\n\nexport default ConnectWallet;\n","import { useState, useEffect, useCallback } from 'react';\nimport BigNumber from 'bignumber.js';\n\nconst useTokenStatistics = () => {\n const [priceUsd, setPriceUsd] = useState(new BigNumber(0.001));\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState(undefined);\n\n const fetchTokenStatistics = useCallback(async () => {\n try {\n setIsLoading(true);\n const response = await fetch('https://balance.mchain.network/price', {\n headers: { Accept: 'application/json;version=20230302' },\n });\n if (!response.ok) throw new Error('Network response was not ok');\n const data = await response.json();\n const price = new BigNumber(data.results.data.attributes.price_usd);\n\n if (price.isZero()) {\n setTimeout(fetchTokenStatistics, 10000); // Retry after 10 seconds\n } else {\n setPriceUsd(price);\n }\n } catch (error) {\n setError(\n error instanceof Error ? error : new Error('An unknown error occurred')\n );\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchTokenStatistics();\n }, [fetchTokenStatistics]);\n\n return { priceUsd, isLoading, error };\n};\n\nexport default useTokenStatistics;\n","import { FC, useCallback, useState, useEffect } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { withRouter } from 'react-router-dom';\nimport * as ethers from 'ethers';\nimport BigNumber from 'bignumber.js';\nimport { useMediaQuery, useTheme } from '@material-ui/core';\nimport Box from '@material-ui/core/Box';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\nimport Table from '@material-ui/core/Table';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableRow from '@material-ui/core/TableRow';\nimport TableCell from '@material-ui/core/TableCell';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport InfoIcon from '@material-ui/icons/Info';\nimport IconButton from '@material-ui/core/IconButton';\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\nimport moment from 'moment';\n\nimport { useWallet } from 'contexts/wallet';\nimport { useContracts } from 'contexts/contracts';\nimport { useNotifications } from 'contexts/notifications';\nimport { useData } from 'contexts/data';\nimport { LiquidityPosition } from 'utils/types';\nimport { formatUnits } from 'utils/big-number';\nimport { useTranslation } from 'react-i18next';\nimport { useIncrementingNumber } from 'hooks/useIncrementingNumber';\nimport useTokenStatistics from 'hooks/useTokenStatistics';\n\nconst useLoadConfettiScript = () => {\n useEffect(() => {\n if (document.getElementById('confetti-script')) {\n return;\n }\n\n const script = document.createElement('script');\n script.src =\n 'https://cdn.jsdelivr.net/npm/@tsparticles/confetti@3.0.3/tsparticles.confetti.bundle.min.js';\n script.id = 'confetti-script';\n\n document.body.appendChild(script);\n\n return () => {\n document.body.removeChild(script);\n };\n }, []);\n};\n\nexport const useStyles = makeStyles((theme) => ({\n maxButton: {\n height: 35,\n },\n claimButton: {\n height: 35,\n },\n depositButtonCell: {\n width: 110,\n padding: 5,\n },\n depositButton: {\n width: 100,\n marginRight: 2,\n },\n positionCard: {\n marginTop: 20,\n backgroundColor: '#0099bf24',\n },\n link: {\n color: 'cyan!important',\n textDecoration: 'none',\n cursor: 'pointer',\n '&:visited': {\n color: 'cyan',\n },\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n helpButton: {\n marginTop: -30,\n marginRight: -30,\n float: 'right',\n },\n}));\n\nconst Stake: FC<{ history: any }> = ({ history }) => {\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'));\n const classes = useStyles();\n const { t, i18n } = useTranslation();\n const { priceUsd } = useTokenStatistics();\n\n const { startConnecting: startConnectingWallet, address } = useWallet();\n const {\n token0Address,\n token1Address,\n token0Symbol,\n token1Symbol,\n } = useContracts();\n const {\n positions,\n currentIncentiveId,\n incentives,\n setCurrentIncentiveId,\n } = useData();\n\n const [totalRewards, setTotalRewards] = useState(0);\n const updateTotalRewards = useCallback(() => {\n const total = positions.reduce(\n (acc, position) => acc + Number(position.reward),\n 0\n );\n setTotalRewards(total);\n }, [positions]);\n\n useLoadConfettiScript();\n\n useEffect(() => {\n updateTotalRewards();\n }, [positions, updateTotalRewards]);\n\n useEffect(() => {\n if (totalRewards > 0 && window.confetti) {\n window.confetti({\n angle: 90,\n spread: 70,\n particleCount: 100,\n origin: { y: 0.45, x: 0.4 },\n });\n }\n }, [totalRewards]);\n\n const handleHelpClick = () => {\n let url = 'https://docs.mchain.network';\n const lang = i18n.language;\n\n if (lang.startsWith('es')) {\n url += '/es';\n } else if (lang.startsWith('pt')) {\n url += '/pt-BR';\n }\n\n url += '/docs/learn/mark-arbitrum/staking/staking-mark-arbitrum';\n window.open(url, '_blank');\n };\n\n return (\n <>\n \n \n \n \n {!address ? (\n <>\n \n \n \n {t('WelcomeMessage')}\n \n \n\n \n \n {t('ConnectYourWallet')}\n \n \n \n ) : (\n <>\n \n \n {t('LiquidityPositions', {\n count: positions.length,\n token1Symbol: token1Symbol === 'WETH' ? 'ETH' : token1Symbol,\n token0Symbol,\n })}\n \n \n\n \n \n {t('getRewards', {\n rewardWord: !positions.length\n ? t('rewardPlaceholder.some')\n : t('rewardPlaceholder.more'),\n })}\n \n {token0Symbol}-\n {token1Symbol === 'WETH' ? 'ETH' : token1Symbol} Pool\n \n .\n \n \n\n \n \n \n {!currentIncentiveId ? null : (\n <>\n \n {t('Incentive')}\n \n {\n setCurrentIncentiveId(e.target.value as string);\n }}\n >\n {incentives.map((incentive) => (\n \n \n \n {`${formatUnits(\n incentive?.reward,\n 18,\n 0\n )} ${token0Symbol}`}\n \n \n {formatDate(incentive.key.startTime, t)}\n {incentive.ended ? ` ${t('Ended')}` : ''}\n \n \n \n ))}\n \n \n )}\n \n \n \n \n\n {!positions.length ? null : isMobile ? (\n positions.map((position) => (\n \n ))\n ) : (\n \n \n \n \n NFT Id\n \n {t('Rewards')}{' '}\n \n \n \n \n \n \n \n \n \n {positions.map((position) => (\n \n ))}\n \n
\n
\n )}\n \n )}\n \n \n );\n};\n\nconst LiquidityPositionTableRow: FC<{\n position: LiquidityPosition;\n priceUsd: BigNumber;\n history: any;\n isMobile?: boolean;\n}> = ({ position, priceUsd, history, isMobile }) => {\n const classes = useStyles();\n const { address } = useWallet();\n const { token0Decimals, token0Symbol } = useContracts();\n const { t } = useTranslation();\n\n const targetNumber = parseFloat(\n formatUnits(position.reward, token0Decimals, 8)\n );\n const { currentNumber, isAnimating } = useIncrementingNumber(targetNumber);\n\n const currentNumberUSD = priceUsd.times(targetNumber).toNumber().toFixed(6);\n\n const stake = useCallback(async () => {\n history.push(`/stake/${position.tokenId}`);\n }, [position.tokenId, history]);\n\n const unstake = useCallback(async () => {\n history.push(`/unstake/${position.tokenId}`);\n }, [position.tokenId, history]);\n\n const withdraw = useCallback(async () => {\n history.push(`/withdraw/${position.tokenId}`);\n }, [position.tokenId, history]);\n\n const animatingStyle = {\n color: isAnimating ? 'yellow' : 'white',\n transition: 'color 0.5s ease',\n };\n\n return isMobile ? (\n \n \n \n \n \n NFT Id:{' '}\n \n {position.tokenId.toString()}\n \n \n \n {!position.reward.isZero() ? (\n <>\n {t('Rewards')}{' '}\n \n \n {currentNumber} {token0Symbol}\n \n \n \n ≈ ${currentNumberUSD}\n \n \n ) : position.error ? (\n {position.error}\n ) : (\n '-'\n )}\n \n \n\n \n \n {position.staked ? t('Unstake') : t('Stake')}{' '}\n \n \n {t('Withdraw')}\n \n \n \n \n \n ) : (\n \n \n \n {position.tokenId.toString()}\n \n \n \n {!position.reward.isZero() ? (\n \n \n \n {currentNumber} {token0Symbol}\n {' '}\n \n ≈ ${currentNumberUSD}\n \n \n \n ) : position.error ? (\n {position.error}\n ) : (\n '-'\n )}\n \n \n \n {position.staked ? t('Unstake') : t('Stake')}{' '}\n \n \n \n \n {t('Withdraw')}\n \n \n \n );\n};\n\nconst ClaimAvailableReward: FC = () => {\n const classes = useStyles();\n const { stakingRewardsContract } = useContracts();\n const {\n currentIncentiveRewardTokenSymbol,\n currentIncentiveRewardTokenDecimals,\n currentIncentive,\n } = useData();\n const { address } = useWallet();\n const { tx } = useNotifications();\n const { t } = useTranslation();\n\n const [reward, setReward] = useState(ethers.BigNumber.from(0));\n const [isClaiming, setIsClaiming] = useState(false);\n\n useEffect(() => {\n if (!(stakingRewardsContract && currentIncentive && address)) return;\n\n let isMounted = true;\n const unsubs = [\n () => {\n isMounted = false;\n },\n ];\n\n const load = async () => {\n const reward = await stakingRewardsContract.rewards(\n currentIncentive.key.rewardToken,\n address\n );\n if (isMounted) setReward(reward);\n };\n\n const subscribe = () => {\n const tokenUnstakedEvent = stakingRewardsContract.filters.TokenUnstaked();\n stakingRewardsContract.on(tokenUnstakedEvent, load);\n unsubs.push(() => {\n stakingRewardsContract.off(tokenUnstakedEvent, load);\n });\n\n const rewardClaimedEvent = stakingRewardsContract.filters.RewardClaimed();\n stakingRewardsContract.on(rewardClaimedEvent, load);\n unsubs.push(() => {\n stakingRewardsContract.off(rewardClaimedEvent, load);\n });\n };\n\n load();\n subscribe();\n\n return () => {\n unsubs.map((u) => u());\n };\n }, [stakingRewardsContract, currentIncentive, address]);\n\n const claim = async () => {\n if (!(stakingRewardsContract && currentIncentive)) return;\n\n try {\n setIsClaiming(true);\n const reward = await stakingRewardsContract.rewards(\n currentIncentive.key.rewardToken,\n address\n );\n await tx(t('Claiming'), t('Claimed'), () =>\n stakingRewardsContract.claimReward(\n currentIncentive.key.rewardToken,\n address,\n reward\n )\n );\n } catch (e) {\n console.warn(e);\n } finally {\n setIsClaiming(false);\n }\n };\n\n return (\n \n \n \n {t('RewardsColon')}{' '}\n {reward.isZero()\n ? '-'\n : `${formatUnits(\n reward,\n currentIncentiveRewardTokenDecimals\n )} ${currentIncentiveRewardTokenSymbol}`}\n \n \n : null\n }\n >\n {isClaiming ? t('Claiming') : t('Claim')}\n \n \n );\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction formatTimestamp(unix: number) {\n return moment.unix(unix).local().format('YYYY-MM-DD HHmm[h]');\n}\n\nfunction formatDate(unix: number, t: (key: string) => string) {\n const formattedMonth = t(`${moment.unix(unix).format('MMMM')}`);\n return formattedMonth;\n}\n\nexport default withRouter(Stake);\n","import { useState, useEffect, useRef } from 'react';\n\nexport const useIncrementingNumber = (targetNumber: number) => {\n const [currentNumber, setCurrentNumber] = useState(targetNumber);\n const [isAnimating, setIsAnimating] = useState(false);\n const isFirstRun = useRef(true);\n\n useEffect(() => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n return;\n }\n\n setIsAnimating(true);\n const difference = Math.abs(currentNumber - targetNumber);\n const delay = difference > 100 ? 10 : 100;\n\n const intervalId = setInterval(() => {\n setCurrentNumber((prevNumber) => {\n const step = targetNumber > prevNumber ? 1 : -1;\n const nextNumber = prevNumber + step;\n if (\n (step > 0 && nextNumber >= targetNumber) ||\n (step < 0 && nextNumber <= targetNumber)\n ) {\n clearInterval(intervalId);\n setIsAnimating(false);\n return targetNumber;\n }\n return nextNumber;\n });\n }, delay);\n\n return () => {\n clearInterval(intervalId);\n setIsAnimating(false);\n };\n }, [currentNumber, targetNumber]);\n\n return { currentNumber, isAnimating };\n};\n","import { useCallback, useState } from 'react';\n\nimport { useWallet } from 'contexts/wallet';\nimport { useContracts } from 'contexts/contracts';\nimport { useNotifications } from 'contexts/notifications';\nimport { useData } from 'contexts/data';\nimport { useTranslation } from 'react-i18next';\n\nconst usePosition = (tokenId: number) => {\n const { tx } = useNotifications();\n const { address } = useWallet();\n const {\n nftManagerPositionsContract,\n stakingRewardsContract,\n } = useContracts();\n const { currentIncentive } = useData();\n const { t } = useTranslation();\n\n const [isWorking, setIsWorking] = useState(null);\n\n const approve = useCallback(\n async (next: () => void) => {\n if (\n !(\n nftManagerPositionsContract &&\n stakingRewardsContract &&\n currentIncentive\n )\n )\n return;\n\n try {\n setIsWorking(t('Approving'));\n await tx(t('Approving'), t('Approved'), () =>\n nftManagerPositionsContract.approve(\n stakingRewardsContract.address,\n tokenId\n )\n );\n next();\n } catch (e) {\n console.warn(e);\n } finally {\n setIsWorking(null);\n }\n },\n [\n tokenId,\n currentIncentive,\n stakingRewardsContract,\n nftManagerPositionsContract,\n tx,\n t,\n ]\n );\n\n const transfer = useCallback(\n async (next: () => void) => {\n if (\n !(\n address &&\n nftManagerPositionsContract &&\n stakingRewardsContract &&\n currentIncentive\n )\n )\n return;\n\n try {\n setIsWorking(t('Transfering'));\n await tx(\n t('Transfering'),\n t('Transfered'),\n () =>\n nftManagerPositionsContract[\n 'safeTransferFrom(address,address,uint256)'\n ](address, stakingRewardsContract.address, tokenId) // https://stackoverflow.com/questions/68289806/no-safetransferfrom-function-in-ethers-js-contract-instance\n );\n next();\n } catch (e) {\n console.warn(e);\n } finally {\n setIsWorking(null);\n }\n },\n [\n tokenId,\n currentIncentive,\n stakingRewardsContract,\n nftManagerPositionsContract,\n address,\n tx,\n t,\n ]\n );\n\n const stake = useCallback(\n async (next: () => void) => {\n if (!(stakingRewardsContract && currentIncentive)) return;\n\n try {\n setIsWorking(t('Staking'));\n await tx(t('Staking'), t('Staked'), () =>\n stakingRewardsContract.stakeToken(currentIncentive.key, tokenId)\n );\n next();\n } catch (e) {\n console.warn(e);\n } finally {\n setIsWorking(null);\n }\n },\n [tokenId, currentIncentive, stakingRewardsContract, tx, t]\n );\n\n const unstake = useCallback(\n async (next: () => void) => {\n if (!(stakingRewardsContract && currentIncentive)) return;\n\n try {\n setIsWorking(t('Unstaking'));\n await tx(t('Unstaking'), t('Unstaked'), () =>\n stakingRewardsContract.unstakeToken(currentIncentive.key, tokenId)\n );\n next();\n } catch (e) {\n console.warn(e);\n } finally {\n setIsWorking(null);\n }\n },\n [tokenId, currentIncentive, stakingRewardsContract, tx, t]\n );\n\n const claim = useCallback(\n async (next: () => void) => {\n if (!(stakingRewardsContract && currentIncentive && address)) return;\n\n try {\n setIsWorking(t('Claiming'));\n const reward = await stakingRewardsContract.rewards(\n currentIncentive.key.rewardToken,\n address\n );\n await tx(t('Claiming'), t('ClaimedEx'), () =>\n stakingRewardsContract.claimReward(\n currentIncentive.key.rewardToken,\n address,\n reward\n )\n );\n next();\n } catch (e) {\n console.warn(e);\n } finally {\n setIsWorking(null);\n }\n },\n [currentIncentive, address, stakingRewardsContract, tx, t]\n );\n\n const withdraw = useCallback(\n async (next: () => void) => {\n if (!(stakingRewardsContract && address)) return;\n\n try {\n setIsWorking(t('Withdrawing'));\n await tx(t('Withdrawing'), t('Withdrew'), () =>\n stakingRewardsContract.withdrawToken(tokenId, address, [])\n );\n next();\n } catch (e) {\n console.warn(e);\n } finally {\n setIsWorking(null);\n }\n },\n [tokenId, address, stakingRewardsContract, tx, t]\n );\n\n return { isWorking, approve, transfer, stake, unstake, claim, withdraw };\n};\n\nexport default usePosition;\n","import { FC, useState, useEffect } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Box from '@material-ui/core/Box';\nimport Dialog from '@material-ui/core/Dialog';\nimport Typography from '@material-ui/core/Typography';\nimport Stepper from '@material-ui/core/Stepper';\nimport Step from '@material-ui/core/Step';\nimport StepLabel from '@material-ui/core/StepLabel';\nimport Button from '@material-ui/core/Button';\nimport capitalize from 'lodash/capitalize';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useTranslation } from 'react-i18next';\n\nimport { useContracts } from 'contexts/contracts';\nimport usePosition from 'hooks/usePosition';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n width: '100%',\n maxWidth: 600,\n padding: theme.spacing(2),\n },\n stepper: {\n width: '100%',\n // Media query for screens smaller than 600px\n [theme.breakpoints.down('sm')]: {\n flexDirection: 'column',\n },\n },\n}));\n\nconst STEPS = ['approve', 'transfer', 'stake'];\n\nconst StakeStepper: FC<{\n match: { params: { tokenId: string } };\n history: any;\n}> = ({\n match: {\n params: { tokenId },\n },\n history,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const {\n nftManagerPositionsContract,\n stakingRewardsContract,\n } = useContracts();\n const { isWorking, approve, transfer, stake } = usePosition(\n parseInt(tokenId)\n );\n\n const [activeStep, setActiveStep] = useState(0);\n\n useEffect(() => {\n if (!(stakingRewardsContract && nftManagerPositionsContract)) return;\n\n const load = async () => {\n const [approvedAddress, owner] = await Promise.all([\n nftManagerPositionsContract.getApproved(tokenId),\n nftManagerPositionsContract.ownerOf(tokenId),\n ]);\n if (owner === stakingRewardsContract.address) {\n setActiveStep(2);\n } else if (approvedAddress === stakingRewardsContract.address) {\n setActiveStep(1);\n }\n };\n load();\n }, [tokenId, stakingRewardsContract, nftManagerPositionsContract]);\n\n const close = () => history.push('/');\n\n const approveOrTransferOrStake = () => {\n switch (activeStep) {\n case 0:\n return approve(() => setActiveStep(1));\n case 1:\n return transfer(() => setActiveStep(2));\n case 2:\n return stake(() => history.push('/'));\n default:\n console.warn(`unknown step: ${activeStep}`);\n }\n };\n\n return (\n {}}>\n \n \n \n {t('Stake')} #{tokenId}\n \n\n \n \n\n \n {STEPS.map((label) => (\n \n {t(capitalize(label))}\n \n ))}\n \n\n \n : null\n }\n >\n {isWorking ? isWorking : t(capitalize(STEPS[activeStep]))}\n \n \n \n \n );\n};\n\nexport default StakeStepper;\n","import { FC, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Box from '@material-ui/core/Box';\nimport Dialog from '@material-ui/core/Dialog';\nimport Typography from '@material-ui/core/Typography';\nimport Stepper from '@material-ui/core/Stepper';\nimport Step from '@material-ui/core/Step';\nimport StepLabel from '@material-ui/core/StepLabel';\nimport Button from '@material-ui/core/Button';\nimport capitalize from 'lodash/capitalize';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useTranslation } from 'react-i18next';\n\nimport usePosition from 'hooks/usePosition';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n width: 600,\n },\n}));\n\nconst STEPS = ['unstake'];\n\nconst UnstakeStepper: FC<{\n match: { params: { tokenId: string } };\n history: any;\n}> = ({\n match: {\n params: { tokenId },\n },\n history,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n const { isWorking, unstake } = usePosition(parseInt(tokenId));\n const [activeStep] = useState(0);\n\n const close = () => history.push('/');\n\n return (\n {}}>\n \n \n \n {t('Unstake')} #{tokenId}\n \n\n \n \n\n \n {STEPS.map((label) => (\n \n {t(capitalize(label))}\n \n ))}\n \n\n \n unstake(() => history.push('/'))}\n disabled={!!isWorking}\n startIcon={\n isWorking ? : null\n }\n >\n {isWorking ? isWorking : t(capitalize(STEPS[activeStep]))}\n \n \n \n \n );\n};\n\nexport default UnstakeStepper;\n","import { FC, useState, useEffect } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Box from '@material-ui/core/Box';\nimport Dialog from '@material-ui/core/Dialog';\nimport Typography from '@material-ui/core/Typography';\nimport Stepper from '@material-ui/core/Stepper';\nimport Step from '@material-ui/core/Step';\nimport StepLabel from '@material-ui/core/StepLabel';\nimport Button from '@material-ui/core/Button';\nimport capitalize from 'lodash/capitalize';\nimport CloseIcon from '@material-ui/icons/Close';\n\nimport { useContracts } from 'contexts/contracts';\nimport { useData } from 'contexts/data';\nimport usePosition from 'hooks/usePosition';\nimport { useTranslation } from 'react-i18next';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n width: 600,\n },\n}));\n\nconst STEPS = ['unstake', 'withdraw'];\n\nconst WithdrawStepper: FC<{\n match: { params: { tokenId: string } };\n history: any;\n}> = ({\n match: {\n params: { tokenId },\n },\n history,\n}) => {\n const classes = useStyles();\n const { stakingRewardsContract } = useContracts();\n const { currentIncentiveId } = useData();\n const { isWorking, unstake, withdraw } = usePosition(parseInt(tokenId));\n const [activeStep, setActiveStep] = useState(0);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (!(stakingRewardsContract && currentIncentiveId)) return;\n\n const load = async () => {\n const deposit = await stakingRewardsContract.deposits(tokenId);\n const isStaked = deposit?.numberOfStakes !== 0;\n if (!isStaked) {\n setActiveStep(1);\n }\n };\n load();\n }, [tokenId, currentIncentiveId, stakingRewardsContract]);\n\n const close = () => history.push('/');\n\n const unstakeOrWithdraw = () => {\n switch (activeStep) {\n case 0:\n return unstake(() => setActiveStep(1));\n case 1:\n return withdraw(() => history.push('/'));\n default:\n console.warn(`unknown step: ${activeStep}`);\n }\n };\n\n return (\n {}}>\n \n \n \n {t('Withdraw')} #{tokenId}\n \n\n \n \n\n \n {STEPS.map((label) => (\n \n {t(capitalize(label))}\n \n ))}\n \n\n \n : null\n }\n >\n {isWorking ? isWorking : t(capitalize(STEPS[activeStep]))}\n \n \n \n \n );\n};\n\nexport default WithdrawStepper;\n","import { FC } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Box, Paper } from '@material-ui/core';\nimport { BrowserRouter as Router, Switch, Route } from 'react-router-dom';\n\nimport Header from './Header';\nimport ConnectWallet from './ConnectWallet';\n\nimport Positions from 'pages/Positions';\n\nimport StakeModal from 'modals/StakeModal';\nimport UnstakeModal from 'modals/UnstakeModal';\nimport WithdrawModal from 'modals/WithdrawModal';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n width: '960px',\n margin: '0 auto',\n padding: '100px 0 30px',\n position: 'relative',\n [theme.breakpoints.down('sm')]: {\n padding: '70px 0 10px',\n width: 'auto',\n },\n '& a, a:visited': {\n color: theme.palette.secondary.main,\n },\n '& .MuiInputLabel-shrink': {\n right: 0,\n transform: 'translate(0, 1.5px) scale(1)',\n transformOrigin: 'top left',\n fontSize: 12,\n },\n },\n paper: {\n margin: '20px',\n },\n}));\n\nconst Layout: FC = () => {\n const classes = useStyles();\n\n return (\n \n \n
\n\n \n \n \n\n \n \n \n \n \n\n \n \n \n );\n};\n\nexport default Layout;\n","import { FC, useMemo } from 'react';\nimport clsx from 'clsx';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Paper } from '@material-ui/core';\nimport {\n ArrowUpward as TxIcon,\n Done as SuccessIcon,\n Clear as ErrorIcon,\n Close as CloseIcon,\n} from '@material-ui/icons';\nimport { SnackbarKey, useSnackbar } from 'notistack';\nimport { useWallet } from 'contexts/wallet';\nimport { EXPLORER_URLS } from 'config';\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n color: 'white',\n borderRadius: 10,\n },\n container: {\n padding: '10px 40px 10px 20px',\n maxWidth: 300,\n borderRadius: 4,\n '& a': {\n color: 'white',\n display: 'block',\n textDecoration: 'none',\n },\n },\n icon: {\n // border: '1px solid',\n // borderRadius: '50%',\n // padding: 10,\n marginRight: 10,\n display: 'inline-flex',\n },\n close: {\n position: 'absolute',\n top: 10,\n right: 10,\n cursor: 'pointer',\n },\n tx: {\n background: '#051d27',\n },\n error: {\n background: '#d32f2f',\n color: 'white',\n },\n success: {\n background: '#96ce8f',\n },\n title: {\n fontSize: 16,\n fontWeight: 'bold',\n marginBottom: 4,\n },\n link: {\n fontSize: 12,\n color: 'cyan!important',\n },\n underline: {\n textDecoration: 'underline',\n },\n}));\n\nconst Notification: FC<{ id: SnackbarKey; notification: any }> = ({\n id,\n notification,\n}) => {\n const classes = useStyles();\n const { closeSnackbar } = useSnackbar();\n const clearNotification = () => closeSnackbar(id);\n\n const TYPES: Map = new Map([\n ['tx', [TxIcon, TxContent]],\n ['error', [ErrorIcon, ErrorContent]],\n ['success', [SuccessIcon, SuccessContent]],\n ]);\n\n const [, Content] = TYPES.get(notification.type)!;\n\n const notificationClass = useMemo(() => {\n const c: Record = {\n tx: classes.tx,\n error: classes.error,\n success: classes.success,\n };\n return c[notification.type]!;\n }, [notification.type, classes.error, classes.success, classes.tx]);\n\n return (\n \n
\n \n
\n \n \n \n \n \n
\n );\n};\n\nconst TxContent: FC<{ notification: any }> = ({ notification }) => {\n const classes = useStyles();\n const { network } = useWallet();\n\n const validNetwork = network || Object.keys(EXPLORER_URLS)[0];\n const explorerUrl = EXPLORER_URLS[validNetwork]\n ? EXPLORER_URLS[validNetwork]\n : EXPLORER_URLS[Object.keys(EXPLORER_URLS)[0]];\n\n return (\n <>\n {notification.description}\n\n \n {notification.hash.substring(0, 20)}...\n \n \n );\n};\n\nconst ErrorContent: FC<{ notification: any }> = ({ notification }) => {\n const classes = useStyles();\n return (\n <>\n {notification.message}\n \n );\n};\n\nconst SuccessContent: FC<{ notification: any }> = ({ notification }) => {\n const classes = useStyles();\n return (\n <>\n
{notification.title}
\n \n {notification.message}\n \n \n );\n};\n\nexport default Notification;\n","import React, { useState, useEffect } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\n\ninterface Star {\n cx: string;\n cy: string;\n r: number;\n}\n\nconst useStyles = makeStyles((theme) => ({\n starsWrapper: {\n position: 'absolute',\n pointerEvents: 'none',\n width: '100vw',\n height: '60vh',\n overflow: 'hidden',\n },\n star: {\n fill: '#67e8f9',\n },\n comet: {\n transformOrigin: 'center center',\n },\n}));\n\nconst Stars = () => {\n // Anotación de tipo explícita para el estado 'stars'\n const [stars, setStars] = useState([]);\n const classes = useStyles();\n\n useEffect(() => {\n const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n );\n const maxStars = isMobile ? 150 : 200;\n\n const newStars: Star[] = Array.from({ length: maxStars }, () => ({\n cx: Math.random() * 100 + '%',\n cy: Math.random() * 100 + '%',\n r: Math.round((Math.random() + 0.5) * 10) / 10,\n }));\n\n setStars(newStars);\n }, []);\n\n return (\n
\n {[...Array(3).keys()].map((n) => (\n \n {stars.map((star, index) => (\n \n ))}\n \n ))}\n \n \n \n \n \n \n \n {[\n ['-135', 'a', '0', '0'],\n ['20', 'b', '100%', '0'],\n ['300', 'c', '40%', '100%'],\n ].map((comet, index) => (\n \n \n \n ))}\n \n
\n );\n};\n\nexport default Stars;\n","import { createMuiTheme } from '@material-ui/core/styles';\nimport { BORDER_RADIUS } from 'config';\n\nexport default createMuiTheme({\n typography: {\n fontFamily: ['Roboto', 'Helvetica', 'Arial', 'sans-serif'].join(','),\n },\n palette: {\n type: 'dark',\n background: {\n default: '#03191f',\n paper: '#111',\n },\n primary: {\n main: '#ffffff',\n },\n secondary: {\n main: '#0099bf',\n },\n },\n overrides: {\n MuiButton: {\n root: {\n borderRadius: BORDER_RADIUS,\n textTransform: 'none',\n },\n },\n MuiPaper: {\n rounded: {\n borderRadius: BORDER_RADIUS,\n },\n },\n MuiDialog: {\n paper: {\n borderRadius: BORDER_RADIUS,\n },\n },\n MuiInput: {\n underline: {\n '&:before': {\n borderBottomColor: '#313131',\n },\n '&:after': {\n borderBottomColor: '#0099bf',\n },\n },\n },\n },\n});\n","import { FC, useEffect } from 'react';\nimport { ThemeProvider, makeStyles } from '@material-ui/core/styles';\nimport { CssBaseline } from '@material-ui/core';\nimport { SnackbarProvider } from 'notistack';\n\nimport { UIProvider } from 'contexts/ui';\nimport { WalletProvider } from 'contexts/wallet';\nimport { NotificationsProvider } from 'contexts/notifications';\nimport { ContractsProvider } from 'contexts/contracts';\nimport { DataProvider } from 'contexts/data';\n\nimport Layout from 'components/global/Layout';\nimport Notification from 'components/shared/Notification';\nimport Stars from 'components/shared/Stars';\n\nimport theme from 'utils/theme';\n\nconst useStyles = makeStyles((theme) => ({\n snackbar: {\n top: 70,\n },\n}));\n\nconst App: FC = () => {\n const classes = useStyles();\n\n useEffect(() => {\n const canvas = document.querySelector('.waves') as HTMLCanvasElement;\n if (!canvas) return;\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n if (canvas && canvas.parentNode instanceof HTMLElement) {\n canvas.width = canvas.parentNode.offsetWidth;\n canvas.height = canvas.parentNode.offsetHeight;\n }\n const resizeCanvas = () => {\n if (canvas && canvas.parentNode instanceof HTMLElement) {\n canvas.width = canvas.parentNode.offsetWidth;\n canvas.height = canvas.parentNode.offsetHeight;\n }\n };\n const requestAnimFrame = (function () {\n return (\n window.requestAnimationFrame ||\n function (callback) {\n window.setTimeout(callback, 1000 / 60);\n }\n );\n })();\n let step = 0;\n let lines = [\n 'rgba(0,222,255, 0.2)',\n 'rgba(157,192,249, 0.2)',\n 'rgba(0,168,255, 0.2)',\n ];\n function waves() {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n step++;\n for (let j = lines.length - 1; j >= 0; j--) {\n ctx.fillStyle = lines[j];\n let angle = ((step + j * 45) * Math.PI) / 180;\n let deltaHeight = Math.sin(angle) * 50;\n let deltaHeightRight = Math.cos(angle) * 50;\n ctx.beginPath();\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n -ctx.moveTo(0, canvas.height / 2 + deltaHeight);\n ctx.bezierCurveTo(\n canvas.width / 2,\n canvas.height / 2 + deltaHeight - 50,\n canvas.width / 2,\n canvas.height / 2 + deltaHeightRight - 50,\n canvas.width,\n canvas.height / 2 + deltaHeightRight\n );\n ctx.lineTo(canvas.width, canvas.height);\n ctx.lineTo(0, canvas.height);\n ctx.lineTo(0, canvas.height / 2 + deltaHeight);\n ctx.closePath();\n ctx.fill();\n }\n requestAnimFrame(waves);\n }\n waves();\n window.addEventListener('resize', resizeCanvas);\n\n return () => {\n window.removeEventListener('resize', resizeCanvas);\n };\n }, []);\n\n return (\n \n \n \n
\n \n \n \n \n \n (\n
\n \n
\n )}\n >\n \n \n \n \n
\n
\n
\n
\n
\n );\n};\n\nexport default App;\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\n\nimport lang from './language/lang.json';\n\nconst langWithIndexSignature: {\n [key: string]: { WelcomeMessage: string };\n} = lang;\n\nconst resources: Record = {};\n\nObject.keys(langWithIndexSignature).forEach((key) => {\n resources[key] = {\n translation: langWithIndexSignature[key],\n };\n});\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources,\n fallbackLng: 'en',\n interpolation: {\n escapeValue: false,\n },\n });\n\nexport default i18n;\n","import { render } from 'react-dom';\n\nimport App from 'components/global/App';\nimport './styles';\n\nimport 'i18n';\n\n(async () => {\n render(, document.getElementById('root'));\n})();\n"],"sourceRoot":""}