Compare commits

...

27 Commits

Author SHA1 Message Date
Crowdin Bot
8f59f501cc chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-28 16:04:43 +00:00
Jordan Frankfurt
197947835b remove unneeded log (#1917) 2021-06-27 22:23:46 -04:00
Crowdin Bot
94081b29a3 chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-27 05:04:39 +00:00
Moody Salem
69183ed8c2 fix: translate claim modal inputs 2021-06-26 23:58:25 -05:00
Crowdin Bot
05e741b6c9 chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-27 00:08:49 +00:00
Jordan Frankfurt
dfe550c43b add arbitrum-specific L2 designs (#1912) 2021-06-26 19:54:30 -04:00
Crowdin Bot
65dfb40e44 chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-25 15:04:42 +00:00
Moody Salem
25f5ed9983 fix: scrollbars showing up in modal with mouse connected, use auto instead of scroll 2021-06-25 10:00:25 -05:00
Yuta Sugimura
9b1ef415c6 refactor: remove unneeded react import (#1801)
* Add rules

* Remove React import

* remove React import
2021-06-25 09:52:49 -05:00
Crowdin Bot
70f481430a chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-25 07:04:27 +00:00
Justin Domingue
942211eb00 fix: typos in modal css (#1911)
* allow modal scrolling on dekstop

* removed quote and fixed typo
2021-06-24 13:33:11 -07:00
Justin Domingue
6589c41800 allow modal scrolling on dekstop (#1910) 2021-06-24 10:04:07 -07:00
Moody Salem
14bac770b6 fix(arbitrum): explorer links and better anonymization of GA events 2021-06-24 11:38:08 -05:00
Crowdin Bot
c9dbe2f0ac chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-24 10:04:51 +00:00
Crowdin Bot
775cf57c30 chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-24 09:04:32 +00:00
Moody Salem
f4935e9264 fix(arbitrum): miscellaneous arbitrum network changes
- adds the arbitrum rinkeby testnet deployment
- compute usdc prices on arbitrum one
2021-06-23 20:58:03 -05:00
Crowdin Bot
6b3914b7b9 chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-23 08:05:03 +00:00
Crowdin Bot
41efb6f617 chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-23 06:05:18 +00:00
Crowdin Bot
52df5f14cf chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-22 23:04:56 +00:00
Noah Zinsmeister
b48a7c529f fix: proposal sorting 2021-06-22 18:47:12 -04:00
Moody Salem
2eca50be93 chore: remove defunct arbitrum kovan testnet 2021-06-22 17:23:40 -05:00
Moody Salem
be2ce18bfa fix: change polling interval per network (#1898) 2021-06-22 17:21:01 -05:00
yj
fe13b29e5e Update README.md (#1897)
Simple signposting, for issue #1896
2021-06-22 15:03:45 -07:00
Crowdin Bot
02aac08489 chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-22 21:05:04 +00:00
Crowdin Bot
8f29980b94 chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-22 20:05:13 +00:00
Scott Moses Sunarto
bb542ef0fb feat: Add proposal creation interface (#1799)
* Make address input panel more generalized

* Add TextInput component

* Allow adjusting AppBody maxwidth

* Add create proposal layout page

* Fix style consistency

* create proposal ui goes brrr

* various fixes

* minor tweaks and bug fixes

* merge conflict clean up + bug fix

* i18n

* always show create proposal button

* adjust proposal title top margin and show ButtonError styling

* use button disable instead of button error when form is not filled

* revert mistaken css change

* default params for address input panel

* Refactor & fixes

- Add missing i18n
- Refactor how some styled-components is done
- ButtonError is now disabled when proposal is true in create proposal interface
- Edit copywriting
- Minor styling adjustments

* Fixed create proposal padding on medium screen

* refactor

* refactor pt. 2

* single column styling

* change AddressInputPanel font color

* Design adjustments

* change route for create proposal

* Add autonomous proposal CTA

* cta text edit

* Add link to docs for custom action

* small cleanup

* work with latest governor

Co-authored-by: Noah Zinsmeister <noahwz@gmail.com>
2021-06-22 15:51:32 -04:00
Crowdin Bot
c2fe17615f chore(i18n): synchronize translations from crowdin [skip ci] 2021-06-22 13:12:10 +00:00
174 changed files with 5321 additions and 498 deletions

View File

@@ -27,6 +27,7 @@
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/explicit-module-boundary-types": "off"
"@typescript-eslint/explicit-module-boundary-types": "off",
"react/react-in-jsx-scope": "off"
}
}

View File

@@ -28,7 +28,7 @@ or visit [app.uniswap.org](https://app.uniswap.org).
## Contributions
See [CONTRIBUTING](./CONTRIBUTING.md).
For steps on local deployment, development, and code contribution, please see [CONTRIBUTING](./CONTRIBUTING.md).
## Accessing Uniswap V2

View File

@@ -0,0 +1,181 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 470.287 514.251" enable-background="new 0 0 470.287 514.251" xml:space="preserve">
<g id="Background">
</g>
<g id="Logos_and_symbols">
<g id="SYMBOL_VER_3">
</g>
<g id="SYMBOL_VER_3_3_">
</g>
<g id="SYMBOL_VER_4">
</g>
<g id="SYMBOL_VER_4_1_">
<g id="SYMBOL_VER_4_3_">
</g>
</g>
<g id="SYMBOL_VER_5_1_">
</g>
<g id="off_2_1_">
</g>
<g id="VER_3_1_">
<g id="SYMBOL_VER_2_1_">
</g>
</g>
<g id="VER_3">
<g id="SYMBOL_VER_2">
</g>
</g>
<g id="off_2">
</g>
<g id="SYMBOL_VER_5">
</g>
<g id="SYMBOL_VER_1">
</g>
<g id="SYMBOL_VER_1_1_">
</g>
<g id="SYMBOL_VER_1-1_3_">
</g>
<g id="SYMBOL_VER_1-1_2_">
</g>
<g id="SYMBOL_VER_1-1">
</g>
<g id="SYMBOL_VER_1-1_1_">
<g id="_x31_-3">
</g>
<g id="Symbol_-_Original_14_">
<path fill="#2D374B" d="M291.134,237.469l35.654-60.5l96.103,149.684l0.046,28.727l-0.313-197.672
c-0.228-4.832-2.794-9.252-6.887-11.859L242.715,46.324c-4.045-1.99-9.18-1.967-13.22,0.063c-0.546,0.272-1.06,0.57-1.548,0.895
l-0.604,0.379L59.399,144.983l-0.651,0.296c-0.838,0.385-1.686,0.875-2.48,1.444c-3.185,2.283-5.299,5.66-5.983,9.448
c-0.103,0.574-0.179,1.158-0.214,1.749l0.264,161.083l89.515-138.745c11.271-18.397,35.825-24.323,58.62-24.001l26.753,0.706
L67.588,409.765l18.582,10.697L245.692,157.22l70.51-0.256L157.091,426.849l66.306,38.138l7.922,4.556
c3.351,1.362,7.302,1.431,10.681,0.21l175.453-101.678l-33.544,19.438L291.134,237.469z M304.736,433.395l-66.969-105.108
l40.881-69.371l87.952,138.628L304.736,433.395z"/>
<polygon fill="#28A0F0" points="237.768,328.286 304.736,433.395 366.601,397.543 278.648,258.915 "/>
<path fill="#28A0F0" d="M422.937,355.379l-0.046-28.727l-96.103-149.684l-35.654,60.5l92.774,150.043l33.544-19.438
c3.29-2.673,5.281-6.594,5.49-10.825L422.937,355.379z"/>
<path fill="#FFFFFF" d="M20.219,382.469l47.369,27.296l157.634-252.801l-26.753-0.706c-22.795-0.322-47.35,5.604-58.62,24.001
L50.334,319.004l-30.115,46.271V382.469z"/>
<polygon fill="#FFFFFF" points="316.202,156.964 245.692,157.22 86.17,420.462 141.928,452.565 157.091,426.849 "/>
<path fill="#96BEDC" d="M452.65,156.601c-0.59-14.746-8.574-28.245-21.08-36.104L256.28,19.692
c-12.371-6.229-27.825-6.237-40.218-0.004c-1.465,0.739-170.465,98.752-170.465,98.752c-2.339,1.122-4.592,2.458-6.711,3.975
c-11.164,8.001-17.969,20.435-18.668,34.095v208.765l30.115-46.271L50.07,157.921c0.035-0.589,0.109-1.169,0.214-1.741
c0.681-3.79,2.797-7.171,5.983-9.456c0.795-0.569,172.682-100.064,173.228-100.337c4.04-2.029,9.175-2.053,13.22-0.063
l173.022,99.523c4.093,2.607,6.659,7.027,6.887,11.859v199.542c-0.209,4.231-1.882,8.152-5.172,10.825l-33.544,19.438
l-17.308,10.031l-61.864,35.852l-62.737,36.357c-3.379,1.221-7.33,1.152-10.681-0.21l-74.228-42.693l-15.163,25.717
l66.706,38.406c2.206,1.255,4.171,2.367,5.784,3.272c2.497,1.4,4.199,2.337,4.8,2.629c4.741,2.303,11.563,3.643,17.71,3.643
c5.636,0,11.132-1.035,16.332-3.072l182.225-105.531c10.459-8.104,16.612-20.325,17.166-33.564V156.601z"/>
</g>
<g id="Symbol_-_Original_13_">
</g>
<g id="Symbol_-_Original_6_">
</g>
<g id="Symbol_-_Original_4_">
</g>
<g id="One_color_version_-_White_3_">
<g id="Symbol_-_Original_15_">
</g>
</g>
<g id="One_color_version_-_White">
<g id="Symbol_-_Original">
</g>
</g>
<g id="Symbol_-_Monochromatic_3_">
<g id="_x33__7_">
</g>
</g>
<g id="Symbol_-_Monochromatic">
<g id="_x33__3_">
</g>
</g>
<g id="_x33__2_">
</g>
<g id="_x33__1_">
</g>
<g id="_x33_">
</g>
<g id="Symbol_-_Original_10_">
</g>
<g id="Symbol_-_Original_1_">
</g>
<g id="Symbol_-_Original_2_">
</g>
<g id="_x34__1_">
</g>
<g id="Symbol_-_Monochromatic_2_">
<g id="_x33__6_">
</g>
</g>
<g id="One_color_version_-_White_2_">
<g id="Symbol_-_Original_11_">
</g>
</g>
<g id="Symbol_-_Original_5_">
<g id="Symbol_-_Original_12_">
</g>
</g>
<g id="One_color_version_-_White_1_">
<g id="Symbol_-_Original_9_">
</g>
</g>
</g>
<g id="SYMBOL_VER_1_2_">
<g id="SYMBOL_VER_2_4_">
</g>
<g id="SYMBOL_VER_2-1-1_1_">
</g>
<g id="SYMBOL_VER_2-2-1_1_">
</g>
<g id="SYMBOL_VER_2-3-1_4_">
</g>
<g id="New_Symbol_1_">
<g id="SYMBOL_VER_2-3-1_3_">
</g>
</g>
<g id="New_Symbol">
<g id="SYMBOL_VER_2-3-1_1_">
</g>
</g>
</g>
<g id="SYMBOL_VER_2_2_">
</g>
<g id="SYMBOL_VER_4_2_">
</g>
<g id="SYMBOL_VER_3_2_">
</g>
<g id="SYMBOL_VER_3_1_">
</g>
<g id="SYMBOL_VER_1-1-1_1_">
</g>
<g id="SYMBOL_VER_1-1-1">
</g>
<g id="SYMBOL_VER_1-1-1_2_2_">
</g>
<g id="SYMBOL_VER_1-1-1_2">
</g>
<g id="SYMBOL_VER_1-1-1_2_1_">
</g>
<g id="Symbol_-_Original_7_">
</g>
<g id="Symbol_-_Original_8_">
</g>
<g id="SYMBOL_VER_2-1-1">
</g>
<g id="SYMBOL_VER_2-2-1">
</g>
<g id="SYMBOL_VER_2-3-1">
</g>
<g id="SYMBOL_VER_5-1_1_">
</g>
<g id="SYMBOL_VER_5-1">
</g>
<g id="SYMBOL_VER_5-2_1_">
</g>
<g id="SYMBOL_VER_5-2">
</g>
<g id="Symbol_-_Monochromatic_1_">
<g id="_x33__4_">
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 250 KiB

View File

@@ -1,4 +1,3 @@
import React from 'react'
import styled from 'styled-components/macro'
import { CheckCircle, Triangle } from 'react-feather'

View File

@@ -1,4 +1,4 @@
import React, { useCallback, useContext } from 'react'
import { useCallback, useContext } from 'react'
import styled, { ThemeContext } from 'styled-components'
import { SUPPORTED_WALLETS } from '../../constants/wallet'
import { useActiveWeb3React } from '../../hooks/web3'

View File

@@ -1,4 +1,5 @@
import React, { useContext, useCallback } from 'react'
import { t, Trans } from '@lingui/macro'
import { useContext, useCallback, ReactNode } from 'react'
import styled, { ThemeContext } from 'styled-components'
import useENS from '../../hooks/useENS'
import { useActiveWeb3React } from '../../hooks/web3'
@@ -40,7 +41,7 @@ const Input = styled.input<{ error?: boolean }>`
width: 0;
background-color: ${({ theme }) => theme.bg1};
transition: color 300ms ${({ error }) => (error ? 'step-end' : 'step-start')};
color: ${({ error, theme }) => (error ? theme.red1 : theme.primary1)};
color: ${({ error, theme }) => (error ? theme.red1 : theme.text1)};
overflow: hidden;
text-overflow: ellipsis;
font-weight: 500;
@@ -67,10 +68,16 @@ const Input = styled.input<{ error?: boolean }>`
export default function AddressInputPanel({
id,
className = 'recipient-address-input',
label,
placeholder,
value,
onChange,
}: {
id?: string
className?: string
label?: ReactNode
placeholder?: string
// the typed string value
value: string
// triggers whenever the typed value changes
@@ -99,25 +106,25 @@ export default function AddressInputPanel({
<AutoColumn gap="md">
<RowBetween>
<TYPE.black color={theme.text2} fontWeight={500} fontSize={14}>
Recipient
{label ?? <Trans>Recipient</Trans>}
</TYPE.black>
{address && chainId && (
<ExternalLink
href={getExplorerLink(chainId, name ?? address, ExplorerDataType.ADDRESS)}
style={{ fontSize: '14px' }}
>
(View on Explorer)
<Trans>(View on Explorer)</Trans>
</ExternalLink>
)}
</RowBetween>
<Input
className="recipient-address-input"
className={className}
type="text"
autoComplete="off"
autoCorrect="off"
autoCapitalize="off"
spellCheck="false"
placeholder="Wallet Address or ENS name"
placeholder={placeholder ?? t`Wallet Address or ENS name`}
error={error}
pattern="^(0x[a-fA-F0-9]{40})$"
onChange={handleInput}

View File

@@ -1,5 +1,3 @@
import React from 'react'
import Badge, { BadgeVariant } from 'components/Badge'
import styled from 'styled-components/macro'

View File

@@ -1,4 +1,4 @@
import React, { ReactNode, useMemo } from 'react'
import { ReactNode, useMemo } from 'react'
import { useActiveWeb3React } from '../../hooks/web3'
import { Trans } from '@lingui/macro'

View File

@@ -1,4 +1,3 @@
import React from 'react'
import styled from 'styled-components/macro'
import { darken } from 'polished'

View File

@@ -1,4 +1,3 @@
import React from 'react'
import ReactConfetti from 'react-confetti'
import { useWindowSize } from '../../hooks/useWindowSize'

View File

@@ -1,5 +1,5 @@
import { Currency, CurrencyAmount, Percent } from '@uniswap/sdk-core'
import React, { useMemo } from 'react'
import { useMemo } from 'react'
import useTheme from '../../hooks/useTheme'
import { TYPE } from '../../theme'
import { warningSeverity } from '../../utils/prices'

View File

@@ -1,6 +1,6 @@
import { Pair } from '@uniswap/v2-sdk'
import { Currency, CurrencyAmount, Percent, Token } from '@uniswap/sdk-core'
import React, { useState, useCallback, ReactNode } from 'react'
import { useState, useCallback, ReactNode } from 'react'
import styled from 'styled-components/macro'
import { darken } from 'polished'
import { useCurrencyBalance } from '../../state/wallet/hooks'
@@ -160,6 +160,8 @@ interface CurrencyInputPanelProps {
priceImpact?: Percent
id: string
showCommonBases?: boolean
showCurrencyAmount?: boolean
disableNonToken?: boolean
renderBalance?: (amount: CurrencyAmount<Currency>) => ReactNode
locked?: boolean
}
@@ -174,6 +176,8 @@ export default function CurrencyInputPanel({
otherCurrency,
id,
showCommonBases,
showCurrencyAmount,
disableNonToken,
renderBalance,
fiatValue,
priceImpact,
@@ -298,6 +302,8 @@ export default function CurrencyInputPanel({
selectedCurrency={currency}
otherSelectedCurrency={otherCurrency}
showCommonBases={showCommonBases}
showCurrencyAmount={showCurrencyAmount}
disableNonToken={disableNonToken}
/>
)}
</InputPanel>

View File

@@ -1,5 +1,4 @@
import { Currency } from '@uniswap/sdk-core'
import React from 'react'
import styled from 'styled-components/macro'
import CurrencyLogo from '../CurrencyLogo'

View File

@@ -1,4 +1,3 @@
import React from 'react'
import { FeeAmount } from '@uniswap/v3-sdk'
import { Trans } from '@lingui/macro'
import { AutoColumn } from 'components/Column'

View File

@@ -1,5 +1,4 @@
import JSBI from 'jsbi'
import React from 'react'
import { Currency, CurrencyAmount, Fraction } from '@uniswap/sdk-core'
const CURRENCY_AMOUNT_MIN = new Fraction(JSBI.BigInt(1), JSBI.BigInt(1000000))

View File

@@ -0,0 +1,219 @@
import { Trans } from '@lingui/macro'
import arbitrumLogoUrl from 'assets/svg/arbitrum_logo.svg'
import { YellowCard } from 'components/Card'
import { useOnClickOutside } from 'hooks/useOnClickOutside'
import { useActiveWeb3React } from 'hooks/web3'
import { transparentize } from 'polished'
import React, { useEffect, useRef, useState } from 'react'
import { ArrowDownCircle } from 'react-feather'
import { ApplicationModal } from 'state/application/actions'
import { useModalOpen, useToggleModal } from 'state/application/hooks'
import styled, { css } from 'styled-components'
import { ExternalLink } from 'theme'
import { switchToNetwork } from 'utils/switchToNetwork'
import { NETWORK_LABELS, SupportedChainId } from '../../constants/chains'
const BaseWrapper = css`
position: relative;
${({ theme }) => theme.mediaWidth.upToMedium`
margin-left: 12px;
`};
${({ theme }) => theme.mediaWidth.upToSmall`
margin: 0 0.5rem 0 0;
width: initial;
overflow: hidden;
text-overflow: ellipsis;
flex-shrink: 1;
`};
`
const ArbitrumWrapper = styled.div`
${BaseWrapper}
`
const BaseMenuItem = css`
align-items: center;
background-color: ${({ theme }) => transparentize(0.9, theme.primary1)};
border-radius: 12px;
color: ${({ theme }) => theme.text2};
cursor: pointer;
display: flex;
flex: 1;
flex-direction: row;
font-size: 14px;
font-weight: 400;
justify-content: space-between;
padding: 12px;
:hover {
color: ${({ theme }) => theme.text1};
text-decoration: none;
}
`
const DisabledMenuItem = styled.div`
${BaseMenuItem}
align-items: center;
background-color: ${({ theme }) => theme.bg2};
cursor: auto;
display: flex;
font-size: 10px;
font-style: italic;
justify-content: center;
:hover,
:active,
:focus {
color: ${({ theme }) => theme.text2};
}
`
const FallbackWrapper = styled(YellowCard)`
${BaseWrapper}
border-radius: 12px;
padding: 8px 12px;
`
const Icon = styled.img`
width: 17px;
`
const L1Tag = styled.div`
color: #c4d9f8;
opacity: 40%;
`
const L2Tag = styled.div`
background-color: ${({ theme }) => theme.primary1};
border-radius: 6px;
color: white;
font-size: 12px;
font-weight: 600;
padding: 2px 6px;
`
const MenuFlyout = styled.span`
background-color: ${({ theme }) => theme.bg2};
box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),
0px 24px 32px rgba(0, 0, 0, 0.01);
border-radius: 20px;
padding: 8px;
display: flex;
flex-direction: column;
font-size: 1rem;
position: absolute;
left: 0rem;
top: 3rem;
z-index: 100;
width: 237px;
${({ theme }) => theme.mediaWidth.upToMedium`
top: -14.25rem;
`};
> {
padding: 12px;
}
> :not(:first-child) {
margin-top: 4px;
}
> :not(:last-child) {
margin-bottom: 4px;
}
`
const LinkOutCircle = styled(ArrowDownCircle)`
transform: rotate(230deg);
width: 20px;
height: 20px;
`
const MenuItem = styled(ExternalLink)`
${BaseMenuItem}
`
const ButtonMenuItem = styled.button`
${BaseMenuItem}
border: none;
outline: none;
box-shadow: none;
`
const NetworkInfo = styled.button`
align-items: center;
background-color: ${({ theme }) => theme.bg2};
border-radius: 8px;
border: none;
color: ${({ theme }) => theme.text1};
display: flex;
flex-direction: row;
font-weight: 500;
height: 100%;
justify-content: space-between;
margin: 0;
padding: 8px;
width: 172px;
:hover,
:focus {
cursor: pointer;
outline: none;
background-color: ${({ theme }) => theme.bg3};
}
`
export default function NetworkCard() {
const { chainId, library } = useActiveWeb3React()
const node = useRef<HTMLDivElement>(null)
const open = useModalOpen(ApplicationModal.ARBITRUM_OPTIONS)
const toggle = useToggleModal(ApplicationModal.ARBITRUM_OPTIONS)
useOnClickOutside(node, open ? toggle : undefined)
const [implements3085, setImplements3085] = useState(false)
useEffect(() => {
// metamask is currently the only known implementer of this EIP
// here we proceed w/ a noop feature check to ensure the user's version of metamask supports network switching
// if not, we hide the UI
if (!library?.provider?.request || !chainId || !library?.provider?.isMetaMask) {
return
}
switchToNetwork({ library, chainId })
.then((x) => x ?? setImplements3085(true))
.catch(() => setImplements3085(false))
}, [library, chainId])
if (!chainId || chainId === SupportedChainId.MAINNET || !NETWORK_LABELS[chainId] || !library) {
return null
}
if (chainId === SupportedChainId.ARBITRUM_ONE) {
return (
<ArbitrumWrapper ref={node}>
<NetworkInfo onClick={toggle}>
<Icon src={arbitrumLogoUrl} />
<span>Arbitrum</span>
<L2Tag>L2 Alpha</L2Tag>
</NetworkInfo>
{open && (
<MenuFlyout>
<MenuItem href="https://bridge.arbitrum.io/">
<div>
<Trans>Arbitrum Token Bridge</Trans>
</div>
<LinkOutCircle />
</MenuItem>
<MenuItem href="https://explorer.arbitrum.io/">
<div>
<Trans>Arbitrum Explorer</Trans>
</div>
<LinkOutCircle />
</MenuItem>
<MenuItem href="https://offchainlabs.com/">
<div>
<Trans>Learn more</Trans>
</div>
<LinkOutCircle />
</MenuItem>
{implements3085 ? (
<ButtonMenuItem onClick={() => switchToNetwork({ library, chainId: SupportedChainId.MAINNET })}>
<div>
<Trans>Switch to Ethereum</Trans>
</div>
<L1Tag>L1</L1Tag>
</ButtonMenuItem>
) : (
<DisabledMenuItem>
<Trans>Change your network to go back to L1</Trans>
</DisabledMenuItem>
)}
</MenuFlyout>
)}
</ArbitrumWrapper>
)
}
return <FallbackWrapper title={NETWORK_LABELS[chainId]}>{NETWORK_LABELS[chainId]}</FallbackWrapper>
}

View File

@@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react'
import { useEffect, useState } from 'react'
import styled, { keyframes } from 'styled-components'
import { useActiveWeb3React } from '../../hooks/web3'

View File

@@ -1,4 +1,3 @@
import React from 'react'
import styled from 'styled-components/macro'
import { AlertTriangle, X } from 'react-feather'

View File

@@ -1,5 +1,5 @@
import { CurrencyAmount, Token } from '@uniswap/sdk-core'
import React, { useMemo } from 'react'
import { useMemo } from 'react'
import { X } from 'react-feather'
import styled from 'styled-components/macro'
import tokenLogo from '../../assets/images/token-logo.png'

View File

@@ -1,7 +1,7 @@
import { Trans } from '@lingui/macro'
import useScrollPosition from '@react-hook/window-scroll'
import { darken } from 'polished'
import React, { useState } from 'react'
import { useState } from 'react'
import { Moon, Sun } from 'react-feather'
import { NavLink } from 'react-router-dom'
import { Text } from 'rebass'
@@ -13,10 +13,8 @@ import { useETHBalances } from 'state/wallet/hooks'
import styled from 'styled-components/macro'
import Logo from '../../assets/svg/logo.svg'
import LogoDark from '../../assets/svg/logo_white.svg'
import { NETWORK_LABELS, SupportedChainId } from '../../constants/chains'
import { useActiveWeb3React } from '../../hooks/web3'
import { ExternalLink, TYPE } from '../../theme'
import { YellowCard } from '../Card'
import ClaimModal from '../claim/ClaimModal'
import { CardNoise } from '../earn/styled'
import Menu from '../Menu'
@@ -24,6 +22,7 @@ import Modal from '../Modal'
import Row, { RowFixed } from '../Row'
import { Dots } from '../swap/styleds'
import Web3Status from '../Web3Status'
import NetworkCard from './NetworkCard'
import UniBalanceContent from './UniBalanceContent'
const HeaderFrame = styled.div<{ showBackground: boolean }>`
@@ -166,19 +165,6 @@ const HideSmall = styled.span`
`};
`
const NetworkCard = styled(YellowCard)`
border-radius: 12px;
padding: 8px 12px;
${({ theme }) => theme.mediaWidth.upToSmall`
margin: 0;
margin-right: 0.5rem;
width: initial;
overflow: hidden;
text-overflow: ellipsis;
flex-shrink: 1;
`};
`
const BalanceText = styled(Text)`
${({ theme }) => theme.mediaWidth.upToExtraSmall`
display: none;
@@ -299,7 +285,7 @@ export const StyledMenuButton = styled.button`
`
export default function Header() {
const { account, chainId } = useActiveWeb3React()
const { account } = useActiveWeb3React()
const userEthBalance = useETHBalances(account ? [account] : [])?.[account ?? '']
// const [isDark] = useDarkModeManager()
@@ -357,9 +343,7 @@ export default function Header() {
<HeaderControls>
<HeaderElement>
<HideSmall>
{chainId && chainId !== SupportedChainId.MAINNET && NETWORK_LABELS[chainId] && (
<NetworkCard title={NETWORK_LABELS[chainId]}>{NETWORK_LABELS[chainId]}</NetworkCard>
)}
<NetworkCard />
</HideSmall>
{availableClaim && !showClaimPopup && (
<UNIWrapper onClick={toggleClaimModal}>

View File

@@ -1,5 +1,5 @@
import Tooltip from 'components/Tooltip'
import React, { useState } from 'react'
import { useState } from 'react'
import styled from 'styled-components/macro'
const TextWrapper = styled.span<{ margin: boolean; link?: boolean; fontSize?: string; adjustSize?: boolean }>`

View File

@@ -1,4 +1,4 @@
import React, { useEffect, useRef } from 'react'
import { useEffect, useRef } from 'react'
import styled from 'styled-components/macro'

View File

@@ -1,4 +1,4 @@
import React, { useState, useCallback, useEffect, ReactNode } from 'react'
import { useState, useCallback, useEffect, ReactNode } from 'react'
import { LightCard } from 'components/Card'
import { RowBetween } from 'components/Row'
import { Input as NumericalInput } from '../NumericalInput'

View File

@@ -1,5 +1,3 @@
import React from 'react'
import styled, { keyframes } from 'styled-components'
const rotate = keyframes`

View File

@@ -1,4 +1,4 @@
import React, { useState } from 'react'
import { useState } from 'react'
import { Slash } from 'react-feather'
import { ImageProps } from 'rebass'
import useTheme from '../../hooks/useTheme'

View File

@@ -30,7 +30,7 @@ const StyledDialogContent = styled(({ minHeight, maxHeight, mobile, isOpen, ...r
)).attrs({
'aria-label': 'dialog',
})`
overflow-y: ${({ mobile }) => (mobile ? 'scroll' : 'hidden')};
overflow-y: auto;
&[data-reach-dialog-content] {
margin: 0 0 2rem 0;
@@ -39,7 +39,7 @@ const StyledDialogContent = styled(({ minHeight, maxHeight, mobile, isOpen, ...r
box-shadow: 0 4px 8px 0 ${({ theme }) => transparentize(0.95, theme.shadow1)};
padding: 0px;
width: 50vw;
overflow-y: ${({ mobile }) => (mobile ? 'scroll' : 'hidden')};
overflow-y: auto;
overflow-x: hidden;
align-self: ${({ mobile }) => (mobile ? 'flex-end' : 'center')};

View File

@@ -1,4 +1,4 @@
import React, { useContext } from 'react'
import { useContext } from 'react'
import { useActiveWeb3React } from '../../hooks/web3'
import { ExplorerDataType, getExplorerLink } from '../../utils/getExplorerLink'

View File

@@ -1,4 +1,3 @@
import React from 'react'
import styled from 'styled-components/macro'
import { darken } from 'polished'
import { Trans } from '@lingui/macro'
@@ -6,7 +5,7 @@ import { NavLink, Link as HistoryLink, useLocation } from 'react-router-dom'
import { Percent } from '@uniswap/sdk-core'
import { ArrowLeft } from 'react-feather'
import { RowBetween } from '../Row'
import Row, { RowBetween } from '../Row'
import SettingsTab from '../Settings'
import { useAppDispatch } from 'state/hooks'
@@ -137,3 +136,16 @@ export function AddRemoveTabs({
</Tabs>
)
}
export function CreateProposalTabs() {
return (
<Tabs>
<Row style={{ padding: '1rem 1rem 0 1rem' }}>
<HistoryLink to="/vote">
<StyledArrowLeft />
</HistoryLink>
<ActiveText style={{ marginLeft: 'auto', marginRight: 'auto' }}>Create Proposal</ActiveText>
</Row>
</Tabs>
)
}

View File

@@ -1,6 +1,6 @@
import { Trans } from '@lingui/macro'
import { CurrencyAmount, Token } from '@uniswap/sdk-core'
import React, { useCallback, useEffect } from 'react'
import { useCallback, useEffect } from 'react'
import ReactGA from 'react-ga'
import { Heart, X } from 'react-feather'
import styled, { keyframes } from 'styled-components'

View File

@@ -1,4 +1,4 @@
import React, { useCallback, useContext, useEffect } from 'react'
import { useCallback, useContext, useEffect } from 'react'
import { X } from 'react-feather'
import { useSpring } from 'react-spring/web'
import styled, { ThemeContext } from 'styled-components'

View File

@@ -1,4 +1,4 @@
import React, { useContext } from 'react'
import { useContext } from 'react'
import { AlertCircle, CheckCircle } from 'react-feather'
import styled, { ThemeContext } from 'styled-components'
import { useActiveWeb3React } from '../../hooks/web3'

View File

@@ -1,4 +1,3 @@
import React from 'react'
import styled from 'styled-components/macro'
import { useActivePopups } from '../../state/application/hooks'
import { AutoColumn } from '../Column'

View File

@@ -1,4 +1,3 @@
import React from 'react'
import { Token } from '@uniswap/sdk-core'
import { Link } from 'react-router-dom'
import { Text } from 'rebass'

View File

@@ -1,5 +1,5 @@
import JSBI from 'jsbi'
import React, { useState } from 'react'
import { useState } from 'react'
import { Percent, CurrencyAmount, Token } from '@uniswap/sdk-core'
import { Pair } from '@uniswap/v2-sdk'
import { ChevronDown, ChevronUp } from 'react-feather'

View File

@@ -2,7 +2,7 @@ import JSBI from 'jsbi'
import { Percent, CurrencyAmount, Token } from '@uniswap/sdk-core'
import { Pair } from '@uniswap/v2-sdk'
import { darken } from 'polished'
import React, { useState } from 'react'
import { useState } from 'react'
import { ChevronDown, ChevronUp } from 'react-feather'
import { Link } from 'react-router-dom'
import { Text } from 'rebass'

View File

@@ -1,4 +1,4 @@
import React, { useMemo } from 'react'
import { useMemo } from 'react'
import { Position } from '@uniswap/v3-sdk'
import Badge from 'components/Badge'
import DoubleCurrencyLogo from 'components/DoubleLogo'

View File

@@ -1,4 +1,4 @@
import React, { useState, useCallback, useContext, ReactNode } from 'react'
import { useState, useCallback, useContext, ReactNode } from 'react'
import { Position } from '@uniswap/v3-sdk'
import { LightCard } from 'components/Card'
import { AutoColumn } from 'components/Column'

View File

@@ -1,4 +1,4 @@
import React, { useContext } from 'react'
import { useContext } from 'react'
import styled from 'styled-components/macro'
import { AutoColumn } from '../Column'
import { ThemeContext } from 'styled-components'

View File

@@ -1,4 +1,4 @@
import React, { ReactNode, useCallback, useState } from 'react'
import { ReactNode, useCallback, useState } from 'react'
import styled from 'styled-components/macro'
import Tooltip from '../Tooltip'

View File

@@ -1,5 +1,4 @@
import { Trans } from '@lingui/macro'
import React from 'react'
import { Currency, Price, Token } from '@uniswap/sdk-core'
import StepCounter from 'components/InputStepCounter/InputStepCounter'
import { RowBetween } from 'components/Row'

View File

@@ -1,5 +1,4 @@
import { Trans } from '@lingui/macro'
import React from 'react'
import { Currency } from '@uniswap/sdk-core'
import { ToggleElement, ToggleWrapper } from 'components/Toggle/MultiToggle'

View File

@@ -1,5 +1,4 @@
import { Trans } from '@lingui/macro'
import React from 'react'
import { Text } from 'rebass'
import { Currency } from '@uniswap/sdk-core'
import styled from 'styled-components/macro'

View File

@@ -1,6 +1,6 @@
import { Trans } from '@lingui/macro'
import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
import React, { CSSProperties, MutableRefObject, useCallback, useMemo } from 'react'
import { CSSProperties, MutableRefObject, useCallback, useMemo } from 'react'
import { FixedSizeList } from 'react-window'
import { Text } from 'rebass'
import styled from 'styled-components/macro'
@@ -104,12 +104,14 @@ function CurrencyRow({
isSelected,
otherSelected,
style,
showCurrencyAmount,
}: {
currency: Currency
onSelect: () => void
isSelected: boolean
otherSelected: boolean
style: CSSProperties
showCurrencyAmount?: boolean
}) {
const { account } = useActiveWeb3React()
const key = currencyKey(currency)
@@ -141,9 +143,11 @@ function CurrencyRow({
</TYPE.darkGray>
</Column>
<TokenTags currency={currency} />
<RowFixed style={{ justifySelf: 'flex-end' }}>
{balance ? <Balance balance={balance} /> : account ? <Loader /> : null}
</RowFixed>
{showCurrencyAmount && (
<RowFixed style={{ justifySelf: 'flex-end' }}>
{balance ? <Balance balance={balance} /> : account ? <Loader /> : null}
</RowFixed>
)}
</MenuItem>
)
}
@@ -189,6 +193,7 @@ export default function CurrencyList({
fixedListRef,
showImportView,
setImportToken,
showCurrencyAmount,
}: {
height: number
currencies: Currency[]
@@ -199,6 +204,7 @@ export default function CurrencyList({
fixedListRef?: MutableRefObject<FixedSizeList | undefined>
showImportView: () => void
setImportToken: (token: Token) => void
showCurrencyAmount?: boolean
}) {
const itemData: (Currency | BreakLine)[] = useMemo(() => {
if (otherListTokens && otherListTokens?.length > 0) {
@@ -237,13 +243,22 @@ export default function CurrencyList({
isSelected={isSelected}
onSelect={handleSelect}
otherSelected={otherSelected}
showCurrencyAmount={showCurrencyAmount}
/>
)
} else {
return null
}
},
[currencies.length, onCurrencySelect, otherCurrency, selectedCurrency, setImportToken, showImportView]
[
currencies.length,
onCurrencySelect,
otherCurrency,
selectedCurrency,
setImportToken,
showImportView,
showCurrencyAmount,
]
)
const itemKey = useCallback((index: number, data: typeof itemData) => {

View File

@@ -1,5 +1,5 @@
import { Currency, Token } from '@uniswap/sdk-core'
import React, { KeyboardEvent, RefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { KeyboardEvent, RefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react'
import ReactGA from 'react-ga'
import { t, Trans } from '@lingui/macro'
import { FixedSizeList } from 'react-window'
@@ -48,6 +48,8 @@ interface CurrencySearchProps {
onCurrencySelect: (currency: Currency) => void
otherSelectedCurrency?: Currency | null
showCommonBases?: boolean
showCurrencyAmount?: boolean
disableNonToken?: boolean
showManageView: () => void
showImportView: () => void
setImportToken: (token: Token) => void
@@ -58,6 +60,8 @@ export function CurrencySearch({
onCurrencySelect,
otherSelectedCurrency,
showCommonBases,
showCurrencyAmount,
disableNonToken,
onDismiss,
isOpen,
showManageView,
@@ -203,7 +207,7 @@ export function CurrencySearch({
{({ height }) => (
<CurrencyList
height={height}
currencies={filteredSortedTokensWithETH}
currencies={disableNonToken ? filteredSortedTokens : filteredSortedTokensWithETH}
otherListTokens={filteredInactiveTokens}
onCurrencySelect={handleCurrencySelect}
otherCurrency={otherSelectedCurrency}
@@ -211,6 +215,7 @@ export function CurrencySearch({
fixedListRef={fixedList}
showImportView={showImportView}
setImportToken={setImportToken}
showCurrencyAmount={showCurrencyAmount}
/>
)}
</AutoSizer>

View File

@@ -1,5 +1,5 @@
import { Currency, Token } from '@uniswap/sdk-core'
import React, { useCallback, useEffect, useState } from 'react'
import { useCallback, useEffect, useState } from 'react'
import useLast from '../../hooks/useLast'
import { WrappedTokenInfo } from '../../state/lists/wrappedTokenInfo'
import Modal from '../Modal'
@@ -17,6 +17,8 @@ interface CurrencySearchModalProps {
onCurrencySelect: (currency: Currency) => void
otherSelectedCurrency?: Currency | null
showCommonBases?: boolean
showCurrencyAmount?: boolean
disableNonToken?: boolean
}
export enum CurrencyModalView {
@@ -33,6 +35,8 @@ export default function CurrencySearchModal({
selectedCurrency,
otherSelectedCurrency,
showCommonBases = false,
showCurrencyAmount = true,
disableNonToken = false,
}: CurrencySearchModalProps) {
const [modalView, setModalView] = useState<CurrencyModalView>(CurrencyModalView.manage)
const lastOpen = useLast(isOpen)
@@ -74,6 +78,8 @@ export default function CurrencySearchModal({
selectedCurrency={selectedCurrency}
otherSelectedCurrency={otherSelectedCurrency}
showCommonBases={showCommonBases}
showCurrencyAmount={showCurrencyAmount}
disableNonToken={disableNonToken}
showImportView={() => setModalView(CurrencyModalView.importToken)}
setImportToken={setImportToken}
showManageView={() => setModalView(CurrencyModalView.manage)}

View File

@@ -1,4 +1,4 @@
import React, { useState, useCallback } from 'react'
import { useState, useCallback } from 'react'
import styled from 'styled-components/macro'
import ReactGA from 'react-ga'
import { TYPE, CloseIcon } from 'theme'

View File

@@ -1,4 +1,4 @@
import React, { CSSProperties } from 'react'
import { CSSProperties } from 'react'
import { Token } from '@uniswap/sdk-core'
import { AutoRow, RowFixed } from 'components/Row'
import { AutoColumn } from 'components/Column'

View File

@@ -1,5 +1,4 @@
import { TokenList } from '@uniswap/token-lists/dist/types'
import React from 'react'
import { Token, Currency } from '@uniswap/sdk-core'
import styled from 'styled-components/macro'
import { TYPE, CloseIcon } from 'theme'

View File

@@ -1,5 +1,5 @@
import { Trans } from '@lingui/macro'
import React, { useState } from 'react'
import { useState } from 'react'
import { PaddedColumn, Separator } from './styleds'
import { RowBetween } from 'components/Row'
import { ArrowLeft } from 'react-feather'

View File

@@ -1,4 +1,4 @@
import React, { memo, useCallback, useMemo, useRef, useState, useEffect } from 'react'
import { memo, useCallback, useMemo, useRef, useState, useEffect } from 'react'
import { Settings, CheckCircle } from 'react-feather'
import ReactGA from 'react-ga'
import { useAppDispatch, useAppSelector } from 'state/hooks'

View File

@@ -1,4 +1,4 @@
import React, { useRef, RefObject, useCallback, useState, useMemo } from 'react'
import { useRef, RefObject, useCallback, useState, useMemo } from 'react'
import Column from 'components/Column'
import { ExplorerDataType, getExplorerLink } from '../../utils/getExplorerLink'
import { PaddedColumn, Separator, SearchInput } from './styleds'

View File

@@ -1,4 +1,3 @@
import React from 'react'
import { Text } from 'rebass'
import styled from 'styled-components/macro'
import { RowFixed } from '../Row'

View File

@@ -1,5 +1,5 @@
import { t, Trans } from '@lingui/macro'
import React, { useContext, useRef, useState } from 'react'
import { useContext, useRef, useState } from 'react'
import { Settings, X } from 'react-feather'
import ReactGA from 'react-ga'
import { Text } from 'rebass'

View File

@@ -1,4 +1,4 @@
import React, { useCallback } from 'react'
import { useCallback } from 'react'
import styled from 'styled-components/macro'
const StyledRangeInput = styled.input<{ size: number }>`

View File

@@ -1,5 +1,5 @@
import { Trans } from '@lingui/macro'
import React, { useMemo } from 'react'
import { useMemo } from 'react'
import ReactGA from 'react-ga'
import { useLocation } from 'react-router'
import styled from 'styled-components/macro'

View File

@@ -0,0 +1,146 @@
import React, { memo, useCallback, useRef } from 'react'
import styled from 'styled-components'
const Input = styled.input<{ error?: boolean; fontSize?: string }>`
font-size: ${({ fontSize }) => fontSize || '1.25rem'};
outline: none;
border: none;
flex: 1 1 auto;
width: 0;
background-color: ${({ theme }) => theme.bg1};
transition: color 300ms ${({ error }) => (error ? 'step-end' : 'step-start')};
color: ${({ error, theme }) => (error ? theme.red1 : theme.text1)};
overflow: hidden;
text-overflow: ellipsis;
font-weight: 500;
width: 100%;
padding: 0px;
-webkit-appearance: textfield;
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-outer-spin-button,
::-webkit-inner-spin-button {
-webkit-appearance: none;
}
::placeholder {
color: ${({ theme }) => theme.text4};
}
`
const TextAreaInput = styled.textarea<{ error?: boolean; fontSize?: string }>`
font-size: ${({ fontSize }) => fontSize || '1.25rem'};
outline: none;
border: none;
flex: 1 1 auto;
width: 0;
resize: none;
background-color: ${({ theme }) => theme.bg1};
transition: color 300ms ${({ error }) => (error ? 'step-end' : 'step-start')};
color: ${({ error, theme }) => (error ? theme.red1 : theme.text1)};
overflow: hidden;
text-overflow: ellipsis;
font-weight: 500;
width: 100%;
line-height: 1.2;
padding: 0px;
-webkit-appearance: textfield;
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-outer-spin-button,
::-webkit-inner-spin-button {
-webkit-appearance: none;
}
::placeholder {
color: ${({ theme }) => theme.text4};
}
`
export const TextInput = ({
className,
value,
onUserInput,
placeholder,
fontSize,
}: {
className?: string
value: string
onUserInput: (value: string) => void
placeholder: string
fontSize: string
}) => {
const handleInput = useCallback(
(event) => {
onUserInput(event.target.value)
},
[onUserInput]
)
return (
<div className={className}>
<Input
type="text"
autoComplete="off"
autoCorrect="off"
autoCapitalize="off"
spellCheck="false"
placeholder={placeholder || ''}
onChange={handleInput}
value={value}
fontSize={fontSize}
/>
</div>
)
}
export const ResizingTextArea = memo(
({
className,
value,
onUserInput,
placeholder,
fontSize,
}: {
className?: string
value: string
onUserInput: (value: string) => void
placeholder: string
fontSize: string
}) => {
const inputRef = useRef<HTMLTextAreaElement>(document.createElement('textarea'))
const handleInput = useCallback(
(event) => {
inputRef.current.style.height = 'auto'
inputRef.current.style.height = inputRef.current.scrollHeight + 'px'
onUserInput(event.target.value)
},
[onUserInput]
)
return (
<TextAreaInput
style={{ height: 'auto', minHeight: '500px' }}
className={className}
autoComplete="off"
autoCorrect="off"
autoCapitalize="off"
spellCheck="false"
placeholder={placeholder || ''}
onChange={handleInput}
value={value}
fontSize={fontSize}
ref={inputRef}
/>
)
}
)
ResizingTextArea.displayName = 'ResizingTextArea'

View File

@@ -1,5 +1,4 @@
import { readableColor } from 'polished'
import React from 'react'
import styled from 'styled-components/macro'
import { colors } from 'theme'

View File

@@ -1,5 +1,4 @@
import { Trans } from '@lingui/macro'
import React from 'react'
import styled from 'styled-components/macro'
import { TYPE } from '../../theme'

View File

@@ -1,6 +1,6 @@
import { Trans } from '@lingui/macro'
import { darken } from 'polished'
import React, { ReactNode } from 'react'
import { ReactNode } from 'react'
import styled from 'styled-components/macro'
const ToggleElement = styled.span<{ isActive?: boolean; isOnSwitch?: boolean }>`

View File

@@ -1,5 +1,4 @@
import { Token } from '@uniswap/sdk-core'
import React from 'react'
import Modal from '../Modal'
import { ImportToken } from 'components/SearchModal/ImportToken'

View File

@@ -1,4 +1,4 @@
import React, { ReactNode, useCallback, useState } from 'react'
import { ReactNode, useCallback, useState } from 'react'
import styled from 'styled-components/macro'
import Popover, { PopoverProps } from '../Popover'

View File

@@ -1,5 +1,5 @@
import { Currency } from '@uniswap/sdk-core'
import React, { ReactNode, useContext } from 'react'
import { ReactNode, useContext } from 'react'
import styled, { ThemeContext } from 'styled-components'
import { getExplorerLink, ExplorerDataType } from '../../utils/getExplorerLink'
import Modal from '../Modal'

View File

@@ -1,5 +1,5 @@
import { t, Trans } from '@lingui/macro'
import React, { useState, useContext } from 'react'
import { useState, useContext } from 'react'
import { Percent } from '@uniswap/sdk-core'
import styled, { ThemeContext } from 'styled-components'

View File

@@ -1,5 +1,4 @@
import { AbstractConnector } from '@web3-react/abstract-connector'
import React from 'react'
import styled from 'styled-components/macro'
import { SUPPORTED_WALLETS } from '../../constants/wallet'
import Option from './Option'

View File

@@ -2,7 +2,7 @@ import { AbstractConnector } from '@web3-react/abstract-connector'
import { UnsupportedChainIdError, useWeb3React } from '@web3-react/core'
import { WalletConnectConnector } from '@web3-react/walletconnect-connector'
import { AutoRow } from 'components/Row'
import React, { useEffect, useState } from 'react'
import { useEffect, useState } from 'react'
import { isMobile } from 'react-device-detect'
import ReactGA from 'react-ga'
import styled from 'styled-components/macro'

View File

@@ -1,4 +1,4 @@
import React, { useState, useEffect } from 'react'
import { useState, useEffect } from 'react'
import { useWeb3React } from '@web3-react/core'
import styled from 'styled-components/macro'
import { Trans } from '@lingui/macro'

View File

@@ -1,7 +1,7 @@
import { AbstractConnector } from '@web3-react/abstract-connector'
import { UnsupportedChainIdError, useWeb3React } from '@web3-react/core'
import { darken, lighten } from 'polished'
import React, { useMemo } from 'react'
import { useMemo } from 'react'
import { Activity } from 'react-feather'
import { t, Trans } from '@lingui/macro'
import styled, { css } from 'styled-components'

View File

@@ -1,4 +1,4 @@
import React, { useState } from 'react'
import { useState } from 'react'
import { ExplorerDataType, getExplorerLink } from '../../utils/getExplorerLink'
import Modal from '../Modal'
import { AutoColumn, ColumnCenter } from '../Column'

View File

@@ -1,7 +1,7 @@
import JSBI from 'jsbi'
import { CurrencyAmount, Token } from '@uniswap/sdk-core'
import { isAddress } from 'ethers/lib/utils'
import React, { useEffect, useState } from 'react'
import { useEffect, useState } from 'react'
import { Text } from 'rebass'
import styled from 'styled-components/macro'
import Circle from '../../assets/images/blue-loader.svg'

View File

@@ -1,4 +1,4 @@
import React, { useState } from 'react'
import { useState } from 'react'
import Modal from '../Modal'
import { AutoColumn } from '../Column'
import styled from 'styled-components/macro'

View File

@@ -1,4 +1,3 @@
import React from 'react'
import { AutoColumn } from '../Column'
import { RowBetween } from '../Row'
import styled from 'styled-components/macro'

View File

@@ -1,4 +1,4 @@
import React, { useState, useCallback } from 'react'
import { useState, useCallback } from 'react'
import { useV2LiquidityTokenPermit } from '../../hooks/useERC20Permit'
import useTransactionDeadline from '../../hooks/useTransactionDeadline'
import { formatCurrencyAmount } from '../../utils/formatCurrencyAmount'

View File

@@ -1,4 +1,4 @@
import React, { useState } from 'react'
import { useState } from 'react'
import Modal from '../Modal'
import { AutoColumn } from '../Column'
import styled from 'styled-components/macro'

View File

@@ -2,7 +2,7 @@ import { Trans } from '@lingui/macro'
import { Percent, Currency, TradeType } from '@uniswap/sdk-core'
import { Trade as V2Trade } from '@uniswap/v2-sdk'
import { Trade as V3Trade } from '@uniswap/v3-sdk'
import React, { useContext, useMemo } from 'react'
import { useContext, useMemo } from 'react'
import { ThemeContext } from 'styled-components'
import { TYPE } from '../../theme'
import { computeRealizedLPFeePercent } from '../../utils/prices'

View File

@@ -1,4 +1,3 @@
import React from 'react'
import styled from 'styled-components/macro'
import { useLastTruthy } from '../../hooks/useLast'
import { AdvancedSwapDetails, AdvancedSwapDetailsProps } from './AdvancedSwapDetails'

View File

@@ -1,5 +1,5 @@
import { stringify } from 'qs'
import React, { useMemo } from 'react'
import { useMemo } from 'react'
import { useLocation } from 'react-router'
import { Link } from 'react-router-dom'

View File

@@ -2,7 +2,7 @@ import { Trans } from '@lingui/macro'
import { Currency, Percent, TradeType } from '@uniswap/sdk-core'
import { Trade as V2Trade } from '@uniswap/v2-sdk'
import { Trade as V3Trade } from '@uniswap/v3-sdk'
import React, { ReactNode, useCallback, useMemo } from 'react'
import { ReactNode, useCallback, useMemo } from 'react'
import TransactionConfirmationModal, {
ConfirmationModalContent,
TransactionErrorContent,

View File

@@ -1,5 +1,4 @@
import { Percent } from '@uniswap/sdk-core'
import React from 'react'
import { warningSeverity } from '../../utils/prices'
import { ErrorText, ErrorPill } from './styleds'

View File

@@ -1,5 +1,4 @@
import { Trans } from '@lingui/macro'
import React from 'react'
import styled from 'styled-components/macro'
import SettingsTab from '../Settings'
import { Percent } from '@uniswap/sdk-core'

View File

@@ -3,7 +3,7 @@ import { Currency, TradeType } from '@uniswap/sdk-core'
import { Trade as V2Trade } from '@uniswap/v2-sdk'
import { Trade as V3Trade } from '@uniswap/v3-sdk'
import React, { ReactNode } from 'react'
import { ReactNode } from 'react'
import { Text } from 'rebass'
import { ButtonError } from '../Button'
import { AutoRow } from '../Row'

View File

@@ -1,7 +1,7 @@
import { Currency, Percent, TradeType } from '@uniswap/sdk-core'
import { Trade as V2Trade } from '@uniswap/v2-sdk'
import { Trade as V3Trade } from '@uniswap/v3-sdk'
import React, { useContext, useState } from 'react'
import { useContext, useState } from 'react'
import { ArrowDown, AlertTriangle } from 'react-feather'
import { Text } from 'rebass'
import styled, { ThemeContext } from 'styled-components'

View File

@@ -0,0 +1,115 @@
import { Trans } from '@lingui/macro'
import arbitrumMaskUrl from 'assets/svg/arbitrum_mask.svg'
import { SupportedChainId } from 'constants/chains'
import { useActiveWeb3React } from 'hooks/web3'
import React, { useCallback, useState } from 'react'
import { ArrowDownCircle, X } from 'react-feather'
import { useArbitrumAlphaAlert } from 'state/user/hooks'
import { useETHBalances } from 'state/wallet/hooks'
import styled from 'styled-components'
const CloseIcon = styled(X)`
cursor: pointer;
position: absolute;
top: 1em;
right: 1em;
`
const Wrapper = styled.div`
border-radius: 20px;
background: radial-gradient(285.11% 8200.45% at 29.05% 48.94%, rgba(40, 160, 240, 0.1) 0%, rgba(219, 255, 0, 0) 100%),
radial-gradient(76.02% 75.41% at 1.84% 0%, rgba(150, 190, 220, 0.3) 0%, rgba(33, 114, 229, 0.3) 100%);
display: flex;
flex-direction: column;
max-width: 480px;
min-height: 212px;
overflow: hidden;
position: relative;
width: 100%;
:before {
content: '';
position: absolute;
width: 100%;
height: 100%;
z-index: -1;
background-image: url(${arbitrumMaskUrl});
background-repeat: no-repeat;
transform: rotate(15deg), scale(1);
}
`
const ArbitrumTextStyles = styled.span`
font-style: italic;
font-weight: 900;
color: #f3de1e;
background: linear-gradient(to right, #f3de1e, #ffffff);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
`
const Header = styled.h3`
margin: 0;
padding: 20px 20px 0;
`
const Body = styled.p`
line-height: 143%;
margin: 16px 20px 31px;
`
const LinkOutCircle = styled(ArrowDownCircle)`
transform: rotate(230deg);
width: 20px;
height: 20px;
`
const LinkOutToBridge = styled.a`
align-items: center;
background-color: black;
border-radius: 16px;
color: white;
display: flex;
justify-content: space-between;
margin: 0 18px 18px 18px;
padding: 14px 24px;
text-decoration: none;
width: auto;
:hover,
:focus,
:active {
background-color: black;
}
`
export function SwapNetworkAlert() {
const { account, chainId } = useActiveWeb3React()
const [arbitrumAlphaAcknowledged, setArbitrumAlphaAcknowledged] = useArbitrumAlphaAlert()
const [locallyDismissed, setLocallyDimissed] = useState(false)
const userEthBalance = useETHBalances(account ? [account] : [])?.[account ?? '']
const dismiss = useCallback(() => {
if (userEthBalance?.greaterThan(0)) {
setArbitrumAlphaAcknowledged(true)
} else {
setLocallyDimissed(true)
}
}, [setArbitrumAlphaAcknowledged, userEthBalance])
if (chainId !== SupportedChainId.ARBITRUM_ONE || arbitrumAlphaAcknowledged || locallyDismissed) {
return null
}
return (
<Wrapper>
<CloseIcon onClick={dismiss} />
<Header>
<Trans>
Uniswap on <ArbitrumTextStyles>Arbitrum</ArbitrumTextStyles>
</Trans>
</Header>
<Body>
<Trans>
This is an alpha release of Uniswap on the Arbitrum network. You must bridge L1 assets to the network to swap
them.
</Trans>
</Body>
<LinkOutToBridge href="https://bridge.arbitrum.io/" target="_blank" rel="noopener noreferrer">
<Trans>Deposit to Arbitrum</Trans>
<LinkOutCircle />
</LinkOutToBridge>
</Wrapper>
)
}

View File

@@ -1,7 +1,7 @@
import { Currency, TradeType } from '@uniswap/sdk-core'
import { Trade as V2Trade } from '@uniswap/v2-sdk'
import { Trade as V3Trade, FeeAmount } from '@uniswap/v3-sdk'
import React, { Fragment, memo, useContext } from 'react'
import { Fragment, memo, useContext } from 'react'
import { ChevronRight } from 'react-feather'
import { Flex } from 'rebass'
import { ThemeContext } from 'styled-components'

View File

@@ -1,4 +1,4 @@
import React, { useCallback } from 'react'
import { useCallback } from 'react'
import { Price, Currency } from '@uniswap/sdk-core'
import { useContext } from 'react'
import { Text } from 'rebass'

View File

@@ -1,4 +1,4 @@
import React, { useState } from 'react'
import { useState } from 'react'
import styled from 'styled-components/macro'
import { TYPE, CloseIcon, ExternalLink } from 'theme'
import { ButtonEmpty } from 'components/Button'

View File

@@ -1,5 +1,5 @@
import { transparentize } from 'polished'
import React, { ReactNode } from 'react'
import { ReactNode } from 'react'
import { Link } from 'react-router-dom'
import { AlertTriangle } from 'react-feather'

View File

@@ -1,4 +1,4 @@
import React, { ReactNode, useState } from 'react'
import { ReactNode, useState } from 'react'
import { UNI } from '../../constants/tokens'
import Modal from '../Modal'

View File

@@ -1,4 +1,4 @@
import React, { useState, useContext } from 'react'
import { useState, useContext } from 'react'
import { useActiveWeb3React } from '../../hooks/web3'
import { getExplorerLink, ExplorerDataType } from '../../utils/getExplorerLink'

View File

@@ -27,8 +27,8 @@ const NETWORK_URLS: {
[SupportedChainId.ROPSTEN]: `https://ropsten.infura.io/v3/${INFURA_KEY}`,
[SupportedChainId.GOERLI]: `https://goerli.infura.io/v3/${INFURA_KEY}`,
[SupportedChainId.KOVAN]: `https://kovan.infura.io/v3/${INFURA_KEY}`,
[SupportedChainId.ARBITRUM_KOVAN]: `https://kovan5.arbitrum.io/rpc`,
[SupportedChainId.ARBITRUM_ONE]: `https://arb1.arbitrum.io/rpc`,
[SupportedChainId.ARBITRUM_RINKEBY]: `https://rinkeby.arbitrum.io/rpc`,
}
const SUPPORTED_CHAIN_IDS: SupportedChainId[] = [
@@ -37,8 +37,8 @@ const SUPPORTED_CHAIN_IDS: SupportedChainId[] = [
SupportedChainId.GOERLI,
SupportedChainId.RINKEBY,
SupportedChainId.ROPSTEN,
SupportedChainId.ARBITRUM_KOVAN,
SupportedChainId.ARBITRUM_ONE,
SupportedChainId.ARBITRUM_RINKEBY,
]
export const network = new NetworkConnector({

View File

@@ -5,17 +5,14 @@ import { SupportedChainId } from './chains'
type AddressMap = { [chainId: number]: string }
export const UNI_ADDRESS: AddressMap = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', false)
export const UNI_ADDRESS: AddressMap = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984')
export const MULTICALL2_ADDRESSES: AddressMap = {
...constructSameAddressMap('0x5BA1e12693Dc8F9c48aAD8770482f4739bEeD696', false),
[SupportedChainId.ARBITRUM_KOVAN]: '0xc80e33a6f02cf08557a0ca3d94d1474d73f64bc1',
...constructSameAddressMap('0x5BA1e12693Dc8F9c48aAD8770482f4739bEeD696'),
[SupportedChainId.ARBITRUM_ONE]: '0x021CeAC7e681dBCE9b5039d2535ED97590eB395c',
[SupportedChainId.ARBITRUM_RINKEBY]: '0x334f67349c1cB3A8fF1268c3eC43FF1D3De246C6',
}
export const V2_FACTORY_ADDRESSES: AddressMap = constructSameAddressMap(V2_FACTORY_ADDRESS, false)
export const V2_ROUTER_ADDRESS: AddressMap = constructSameAddressMap(
'0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D',
false
)
export const V2_FACTORY_ADDRESSES: AddressMap = constructSameAddressMap(V2_FACTORY_ADDRESS)
export const V2_ROUTER_ADDRESS: AddressMap = constructSameAddressMap('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D')
// most current governance contract address should always be the 0 index
// only support governance on mainnet
@@ -27,9 +24,7 @@ export const GOVERNANCE_ADDRESSES: AddressMap[] = [
[SupportedChainId.MAINNET]: '0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F',
},
]
export const TIMELOCK_ADDRESS: AddressMap = {
[SupportedChainId.MAINNET]: '0x1a9C8182C09F50C8318d769245beA52c32BE35BC',
}
export const TIMELOCK_ADDRESS: AddressMap = constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC')
export const MERKLE_DISTRIBUTOR_ADDRESS: AddressMap = {
[SupportedChainId.MAINNET]: '0x090D4613473dEE047c3f2706764f49E0821D256e',
@@ -37,18 +32,18 @@ export const MERKLE_DISTRIBUTOR_ADDRESS: AddressMap = {
export const ARGENT_WALLET_DETECTOR_ADDRESS: AddressMap = {
[SupportedChainId.MAINNET]: '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8',
}
export const V3_CORE_FACTORY_ADDRESSES: AddressMap = {
...constructSameAddressMap(V3_FACTORY_ADDRESS, true),
[SupportedChainId.ARBITRUM_KOVAN]: '0xf594DEF7751440197879149f46E98b334E6DF1fa',
}
export const QUOTER_ADDRESSES: AddressMap = {
...constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', true),
[SupportedChainId.ARBITRUM_KOVAN]: '0xAC06b88FA9adB7584A659b190F37F085352cB783',
}
export const NONFUNGIBLE_POSITION_MANAGER_ADDRESSES: AddressMap = {
...constructSameAddressMap('0xC36442b4a4522E871399CD717aBDD847Ab11FE88', true),
[SupportedChainId.ARBITRUM_KOVAN]: '0x9E1498aE1F508E86462e8A0F213CF385A6622464',
}
export const V3_CORE_FACTORY_ADDRESSES: AddressMap = constructSameAddressMap(V3_FACTORY_ADDRESS, [
SupportedChainId.ARBITRUM_ONE,
SupportedChainId.ARBITRUM_RINKEBY,
])
export const QUOTER_ADDRESSES: AddressMap = constructSameAddressMap('0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', [
SupportedChainId.ARBITRUM_ONE,
SupportedChainId.ARBITRUM_RINKEBY,
])
export const NONFUNGIBLE_POSITION_MANAGER_ADDRESSES: AddressMap = constructSameAddressMap(
'0xC36442b4a4522E871399CD717aBDD847Ab11FE88',
[SupportedChainId.ARBITRUM_ONE, SupportedChainId.ARBITRUM_RINKEBY]
)
export const ENS_REGISTRAR_ADDRESSES: AddressMap = {
[SupportedChainId.MAINNET]: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',
[SupportedChainId.ROPSTEN]: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',
@@ -58,11 +53,11 @@ export const ENS_REGISTRAR_ADDRESSES: AddressMap = {
export const SOCKS_CONTROLLER_ADDRESSES: AddressMap = {
[SupportedChainId.MAINNET]: '0x65770b5283117639760beA3F867b69b3697a91dd',
}
export const SWAP_ROUTER_ADDRESSES: AddressMap = {
...constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', true),
[SupportedChainId.ARBITRUM_KOVAN]: '0x6ae2DE23F2BE35B3921ba15DA52e4b173667dCb9',
}
export const V3_MIGRATOR_ADDRESSES: AddressMap = constructSameAddressMap(
'0xA5644E29708357803b5A882D272c41cC0dF92B34',
true
)
export const SWAP_ROUTER_ADDRESSES: AddressMap = constructSameAddressMap('0xE592427A0AEce92De3Edee1F18E0157C05861564', [
SupportedChainId.ARBITRUM_ONE,
SupportedChainId.ARBITRUM_RINKEBY,
])
export const V3_MIGRATOR_ADDRESSES: AddressMap = constructSameAddressMap('0xA5644E29708357803b5A882D272c41cC0dF92B34', [
SupportedChainId.ARBITRUM_ONE,
SupportedChainId.ARBITRUM_RINKEBY,
])

View File

@@ -4,8 +4,8 @@ export enum SupportedChainId {
RINKEBY = 4,
GOERLI = 5,
KOVAN = 42,
ARBITRUM_KOVAN = 144545313136048,
ARBITRUM_ONE = 42161,
ARBITRUM_RINKEBY = 421611,
}
export const NETWORK_LABELS: { [chainId in SupportedChainId | number]: string } = {
@@ -14,6 +14,6 @@ export const NETWORK_LABELS: { [chainId in SupportedChainId | number]: string }
[SupportedChainId.ROPSTEN]: 'Ropsten',
[SupportedChainId.GOERLI]: 'Görli',
[SupportedChainId.KOVAN]: 'Kovan',
[SupportedChainId.ARBITRUM_KOVAN]: 'kArbitrum',
[SupportedChainId.ARBITRUM_ONE]: 'Arbitrum One',
[SupportedChainId.ARBITRUM_ONE]: 'Arbitrum',
[SupportedChainId.ARBITRUM_RINKEBY]: 'Arbitrum Testnet',
}

View File

@@ -55,7 +55,6 @@ const WETH_ONLY: ChainTokenList = {
[SupportedChainId.RINKEBY]: [WETH9_EXTENDED[SupportedChainId.RINKEBY]],
[SupportedChainId.GOERLI]: [WETH9_EXTENDED[SupportedChainId.GOERLI]],
[SupportedChainId.KOVAN]: [WETH9_EXTENDED[SupportedChainId.KOVAN]],
[SupportedChainId.ARBITRUM_KOVAN]: [WETH9_EXTENDED[SupportedChainId.ARBITRUM_KOVAN]],
[SupportedChainId.ARBITRUM_ONE]: [WETH9_EXTENDED[SupportedChainId.ARBITRUM_ONE]],
}
// used to construct intermediary pairs for trading
@@ -99,10 +98,6 @@ export const COMMON_BASES: ChainCurrencyList = {
[4]: [ExtendedEther.onChain(4), WETH9_EXTENDED[4]],
[5]: [ExtendedEther.onChain(5), WETH9_EXTENDED[5]],
[42]: [ExtendedEther.onChain(42), WETH9_EXTENDED[42]],
[SupportedChainId.ARBITRUM_KOVAN]: [
ExtendedEther.onChain(SupportedChainId.ARBITRUM_KOVAN),
WETH9_EXTENDED[SupportedChainId.ARBITRUM_KOVAN],
],
[SupportedChainId.ARBITRUM_ONE]: [
ExtendedEther.onChain(SupportedChainId.ARBITRUM_ONE),
WETH9_EXTENDED[SupportedChainId.ARBITRUM_ONE],

View File

@@ -2,27 +2,112 @@ import { WETH9, Token, Ether } from '@uniswap/sdk-core'
import { UNI_ADDRESS } from './addresses'
import { SupportedChainId } from './chains'
export const AMPL = new Token(1, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'Ampleforth')
export const DAI = new Token(1, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin')
export const USDC = new Token(1, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C')
export const USDT = new Token(1, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD')
export const WBTC = new Token(1, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC')
export const FEI = new Token(1, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD')
export const TRIBE = new Token(1, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', 18, 'TRIBE', 'Tribe')
export const FRAX = new Token(1, '0x853d955aCEf822Db058eb8505911ED77F175b99e', 18, 'FRAX', 'Frax')
export const FXS = new Token(1, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', 18, 'FXS', 'Frax Share')
export const renBTC = new Token(1, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D', 8, 'renBTC', 'renBTC')
export const UMA = new Token(1, '0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828', 18, 'UMA', 'UMA Voting Token v1')
export const AMPL = new Token(
SupportedChainId.MAINNET,
'0xD46bA6D942050d489DBd938a2C909A5d5039A161',
9,
'AMPL',
'Ampleforth'
)
export const DAI = new Token(
SupportedChainId.MAINNET,
'0x6B175474E89094C44Da98b954EedeAC495271d0F',
18,
'DAI',
'Dai Stablecoin'
)
export const USDC = new Token(
SupportedChainId.MAINNET,
'0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
6,
'USDC',
'USD//C'
)
export const USDC_ARBITRUM = new Token(
SupportedChainId.ARBITRUM_ONE,
'0xe865dF68133fcEd7c2285ff3896B406CAfAa2dB8',
6,
'USDC',
'USD//C'
)
export const USDT = new Token(
SupportedChainId.MAINNET,
'0xdAC17F958D2ee523a2206206994597C13D831ec7',
6,
'USDT',
'Tether USD'
)
export const WBTC = new Token(
SupportedChainId.MAINNET,
'0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',
8,
'WBTC',
'Wrapped BTC'
)
export const FEI = new Token(
SupportedChainId.MAINNET,
'0x956F47F50A910163D8BF957Cf5846D573E7f87CA',
18,
'FEI',
'Fei USD'
)
export const TRIBE = new Token(
SupportedChainId.MAINNET,
'0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B',
18,
'TRIBE',
'Tribe'
)
export const FRAX = new Token(
SupportedChainId.MAINNET,
'0x853d955aCEf822Db058eb8505911ED77F175b99e',
18,
'FRAX',
'Frax'
)
export const FXS = new Token(
SupportedChainId.MAINNET,
'0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0',
18,
'FXS',
'Frax Share'
)
export const renBTC = new Token(
SupportedChainId.MAINNET,
'0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D',
8,
'renBTC',
'renBTC'
)
export const UMA = new Token(
SupportedChainId.MAINNET,
'0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828',
18,
'UMA',
'UMA Voting Token v1'
)
export const ETH2X_FLI = new Token(
1,
SupportedChainId.MAINNET,
'0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD',
18,
'ETH2x-FLI',
'ETH 2x Flexible Leverage Index'
)
// Mirror Protocol compat.
export const UST = new Token(1, '0xa47c8bf37f92abed4a126bda807a7b7498661acd', 18, 'UST', 'Wrapped UST')
export const MIR = new Token(1, '0x09a3ecafa817268f77be1283176b946c4ff2e608', 18, 'MIR', 'Wrapped MIR')
export const UST = new Token(
SupportedChainId.MAINNET,
'0xa47c8bf37f92abed4a126bda807a7b7498661acd',
18,
'UST',
'Wrapped UST'
)
export const MIR = new Token(
SupportedChainId.MAINNET,
'0x09a3ecafa817268f77be1283176b946c4ff2e608',
18,
'MIR',
'Wrapped MIR'
)
export const UNI: { [chainId: number]: Token } = {
[SupportedChainId.MAINNET]: new Token(SupportedChainId.MAINNET, UNI_ADDRESS[1], 18, 'UNI', 'Uniswap'),
[SupportedChainId.RINKEBY]: new Token(SupportedChainId.RINKEBY, UNI_ADDRESS[4], 18, 'UNI', 'Uniswap'),
@@ -30,15 +115,9 @@ export const UNI: { [chainId: number]: Token } = {
[SupportedChainId.GOERLI]: new Token(SupportedChainId.GOERLI, UNI_ADDRESS[5], 18, 'UNI', 'Uniswap'),
[SupportedChainId.KOVAN]: new Token(SupportedChainId.KOVAN, UNI_ADDRESS[42], 18, 'UNI', 'Uniswap'),
}
export const WETH9_EXTENDED: { [chainId: number]: Token } = {
...WETH9,
[SupportedChainId.ARBITRUM_KOVAN]: new Token(
SupportedChainId.ARBITRUM_KOVAN,
'0x4A5e4A42dC430f669086b417AADf2B128beFEfac',
18,
'WETH9',
'Wrapped Ether'
),
[SupportedChainId.ARBITRUM_ONE]: new Token(
SupportedChainId.ARBITRUM_ONE,
'0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',
@@ -46,6 +125,13 @@ export const WETH9_EXTENDED: { [chainId: number]: Token } = {
'WETH',
'Wrapped Ether'
),
[SupportedChainId.ARBITRUM_RINKEBY]: new Token(
SupportedChainId.ARBITRUM_RINKEBY,
'0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681',
18,
'WETH',
'Wrapped Ether'
),
}
export class ExtendedEther extends Ether {
@@ -54,7 +140,9 @@ export class ExtendedEther extends Ether {
throw new Error('Unsupported chain ID')
}
private static _cachedEther: { [chainId: number]: ExtendedEther } = {}
public static onChain(chainId: number): ExtendedEther {
return new ExtendedEther(chainId)
return this._cachedEther[chainId] ?? (this._cachedEther[chainId] = new ExtendedEther(chainId))
}
}

View File

@@ -1,7 +1,7 @@
import { Currency, CurrencyAmount, Price, Token } from '@uniswap/sdk-core'
import { useMemo } from 'react'
import { SupportedChainId } from '../constants/chains'
import { USDC } from '../constants/tokens'
import { USDC, USDC_ARBITRUM } from '../constants/tokens'
import { useV2TradeExactOut } from './useV2Trade'
import { useBestV3TradeExactOut } from './useBestV3Trade'
import { useActiveWeb3React } from './web3'
@@ -10,6 +10,7 @@ import { useActiveWeb3React } from './web3'
// The amount is large enough to filter low liquidity pairs.
const STABLECOIN_AMOUNT_OUT: { [chainId: number]: CurrencyAmount<Token> } = {
[SupportedChainId.MAINNET]: CurrencyAmount.fromRawAmount(USDC, 100_000e6),
[SupportedChainId.ARBITRUM_ONE]: CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10_000e6),
}
/**

View File

@@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react'
import { useEffect, useState } from 'react'
import { i18n } from '@lingui/core'
import { I18nProvider } from '@lingui/react'
import { ReactNode } from 'react'

View File

@@ -1,7 +1,7 @@
import 'inter-ui'
import '@reach/dialog/styles.css'
import { createWeb3ReactRoot, Web3ReactProvider } from '@web3-react/core'
import React, { StrictMode } from 'react'
import { StrictMode } from 'react'
import { isMobile } from 'react-device-detect'
import ReactDOM from 'react-dom'
import ReactGA from 'react-ga'

View File

@@ -1,6 +1,6 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2021-06-21 15:11+0000\n"
"POT-Creation-Date: 2021-06-27 05:00+0000\n"
"Mime-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -14,7 +14,7 @@ msgstr ""
"X-Crowdin-File-ID: 4\n"
"Project-Id-Version: uniswap-interface\n"
"Language-Team: Afrikaans\n"
"PO-Revision-Date: 2021-06-21 16:05\n"
"PO-Revision-Date: 2021-06-27 05:04\n"
#: src/pages/Pool/PositionPage.tsx
#: src/pages/Pool/PositionPage.tsx
@@ -35,6 +35,10 @@ msgstr "${0} ETH"
msgid "(Max)"
msgstr "(Maksimum)"
#: src/components/AddressInputPanel/index.tsx
msgid "(View on Explorer)"
msgstr "(Bekyk op Explorer)"
#: src/components/Header/UniBalanceContent.tsx
msgid "(claim)"
msgstr "(eis)"
@@ -111,6 +115,10 @@ msgstr "<0> Terug na</0> V3"
msgid "<0>Tip:</0> Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive."
msgstr "<0> Wenk:</0> As u poeltekens verwyder, verander u u posisie in onderliggende tekens teen die huidige koers, eweredig aan u deel van die poel. Opgelope fooie is ingesluit by die bedrae wat u ontvang."
#: src/pages/CreateProposal/index.tsx
msgid "<0>Tip:</0> Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs</1>."
msgstr "<0> Wenk:</0> Kies 'n aksie en beskryf u voorstel vir die gemeenskap. Die voorstel kan nie na indiening gewysig word nie, en verifieer dus alle inligting voordat dit ingedien word. Die stemtydperk sal onmiddellik begin en vir 7 dae duur. Om 'n aangepaste handeling voor te stel, lees <1> die dokumente</1> ."
#: src/pages/PoolFinder/index.tsx
msgid "<0>Tip:</0> Use this tool to find v2 pools that don't automatically appear in the interface."
msgstr "<0> Wenk:</0> Gebruik hierdie instrument om v2 poele te vind wat nie outomaties in die koppelvlak verskyn nie."
@@ -235,6 +243,10 @@ msgstr "Analise"
msgid "Approve"
msgstr "Goedkeur"
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Approve Token"
msgstr "Keur token goed"
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
@@ -258,6 +270,14 @@ msgstr "Goedkeur"
msgid "Approving {0}"
msgstr "Goedkeur {0}"
#: src/components/Header/NetworkCard.tsx
msgid "Arbitrum Explorer"
msgstr "Arbitrum Explorer"
#: src/components/Header/NetworkCard.tsx
msgid "Arbitrum Token Bridge"
msgstr "Arbitrum Token Bridge"
#: src/components/Settings/index.tsx
msgid "Are you sure?"
msgstr "Is jy seker?"
@@ -322,6 +342,10 @@ msgstr "Deur 'n beursie aan te sluit, stem u in tot die <0> diensvoorwaardes van
msgid "Change"
msgstr "Verander"
#: src/components/Header/NetworkCard.tsx
msgid "Change your network to go back to L1"
msgstr "Verander u netwerk om terug te gaan na L1"
#: src/components/Header/index.tsx
msgid "Charts"
msgstr "Grafieke"
@@ -519,6 +543,11 @@ msgstr "Kopieer adres"
msgid "Create Pool & Supply"
msgstr "Skep Poel en Verskaf"
#: src/pages/CreateProposal/index.tsx
#: src/pages/Vote/index.tsx
msgid "Create Proposal"
msgstr "Skep 'n voorstel"
#: src/components/NavigationTabs/index.tsx
#: src/pages/Pool/v2.tsx
msgid "Create a pair"
@@ -584,6 +613,10 @@ msgstr "Plaas UNI-V2 LP-tekens"
msgid "Deposit liquidity"
msgstr "Deponeer likiditeit"
#: src/components/swap/SwapNetworkAlert.tsx
msgid "Deposit to Arbitrum"
msgstr "Deposito aan Arbitrum"
#: src/pages/Earn/index.tsx
msgid "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token."
msgstr "Deponeer u likiditeitsverskaffer-tekens om UNI, die Uniswap-protokolbestuursteken, te ontvang."
@@ -839,6 +872,10 @@ msgstr "Ongeldige ontvanger"
msgid "Learn"
msgstr "Leer"
#: src/components/Header/NetworkCard.tsx
msgid "Learn more"
msgstr "Leer meer"
#: src/components/claim/ClaimModal.tsx
#: src/pages/Pool/PositionPage.tsx
msgid "Liquidity"
@@ -1140,6 +1177,18 @@ msgstr "Prys:"
msgid "Prices and pool share"
msgstr "Pryse en swembadaandeel"
#: src/pages/CreateProposal/ProposalEditor.tsx
msgid "Proposal"
msgstr "Voorstel"
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "Proposal Submitted"
msgstr "Voorstel ingedien"
#: src/pages/CreateProposal/ProposalEditor.tsx
msgid "Proposal Title"
msgstr "Voorstel Titel"
#: src/pages/Vote/index.tsx
msgid "Proposals"
msgstr "Voorstelle"
@@ -1148,6 +1197,10 @@ msgstr "Voorstelle"
msgid "Proposals submitted by community members will appear here."
msgstr "Voorstelle wat deur lede van die gemeenskap ingedien word, sal hier verskyn."
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Proposed Action"
msgstr "Voorgestelde aksie"
#: src/pages/Vote/VotePage.tsx
msgid "Proposer"
msgstr "Voorsteller"
@@ -1176,6 +1229,10 @@ msgstr "Lees meer oor onondersteunde bates"
msgid "Recent Transactions"
msgstr "Onlangse transaksies"
#: src/components/AddressInputPanel/index.tsx
msgid "Recipient"
msgstr "Ontvanger"
#: src/components/PositionCard/V2.tsx
#: src/components/PositionCard/index.tsx
#: src/pages/RemoveLiquidity/V3.tsx
@@ -1220,6 +1277,7 @@ msgid "Restricts swaps to direct pairs only."
msgstr "Beperk ruilings slegs vir direkte pare."
#: src/components/TransactionConfirmationModal/index.tsx
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "Return"
msgstr "Keer terug"
@@ -1251,6 +1309,10 @@ msgstr "Kies 'n teken"
msgid "Select a token to find your v2 liquidity."
msgstr "Kies 'n teken om u v2-likiditeit te vind."
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Select an action"
msgstr "Kies 'n aksie"
#: src/pages/AddLiquidity/index.tsx
msgid "Select pair"
msgstr "Kies 'n paar"
@@ -1313,6 +1375,14 @@ msgstr "Iets het verkeerd geloop"
msgid "Step 1. Get UNI-V2 Liquidity tokens"
msgstr "Stap 1. Kry UNI-V2 likiditeitstekens"
#: src/state/governance/hooks.ts
msgid "Submitted new proposal"
msgstr "Nuwe voorstel ingedien"
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "Submitting Proposal"
msgstr "Voorlegging indien"
#: src/components/vote/VoteModal.tsx
msgid "Submitting Vote"
msgstr "Stemming indien"
@@ -1342,6 +1412,10 @@ msgstr "Ruil in elk geval"
msgid "Swapping {0} {1} for {2} {3}"
msgstr "Ruil {0} {1} vir {2} {3}"
#: src/components/Header/NetworkCard.tsx
msgid "Switch to Ethereum"
msgstr "Skakel oor na Ethereum"
#: src/components/Popups/ClaimPopup.tsx
msgid "Thanks for being part of the Uniswap community <0/>"
msgstr "Dankie dat u deel is van die Uniswap-gemeenskap <0/>"
@@ -1386,6 +1460,10 @@ msgstr "Die transaksie kon nie gestuur word nie omdat die sperdatum verstryk het
msgid "These tokens are commonly paired with other tokens."
msgstr "Hierdie tekens word gewoonlik gekoppel aan ander tekens."
#: src/components/swap/SwapNetworkAlert.tsx
msgid "This is an alpha release of Uniswap on the Arbitrum network. You must bridge L1 assets to the network to swap them."
msgstr "Dit is 'n alfa-vrystelling van Uniswap op die Arbitrum-netwerk. U moet L1-bates na die netwerk oorbrug om dit te verruil."
#: src/components/SearchModal/ImportToken.tsx
msgid "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade."
msgstr "Hierdie teken verskyn nie op die aktiewe tekenlys(te) nie. Maak seker dat dit die teken is wat u wil verhandel."
@@ -1407,6 +1485,8 @@ msgid "Tip: Custom tokens are stored locally in your browser"
msgstr "Wenk: Pasgemaakte tekens word plaaslik in u blaaier geberg"
#: src/components/swap/SwapModalHeader.tsx
#: src/pages/CreateProposal/ProposalActionDetail.tsx
#: src/pages/CreateProposal/ProposalActionDetail.tsx
#: src/pages/Swap/index.tsx
msgid "To"
msgstr "Aan"
@@ -1460,6 +1540,10 @@ msgstr "Transaksie ingedien"
msgid "Transaction deadline"
msgstr "Transaksiesperdatum"
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Transfer Token"
msgstr "Oordragtoken"
#: src/components/WalletModal/PendingView.tsx
msgid "Try Again"
msgstr "Probeer weer"
@@ -1529,6 +1613,10 @@ msgstr "Onttrek likiditeitsontginning"
msgid "Uniswap migration contract↗"
msgstr "Onttrek migrasie kontrak↗"
#: src/components/swap/SwapNetworkAlert.tsx
msgid "Uniswap on <0>Arbitrum</0>"
msgstr "Ontruil op <0> Arbitrum</0>"
#: src/components/SearchModal/ImportToken.tsx
msgid "Unknown Source"
msgstr "Onbekende bron"
@@ -1605,6 +1693,10 @@ msgstr "Kyk na opgelope fooie en analise <0> ↗</0>"
msgid "View list"
msgstr "Kyk na lys"
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "View on Etherscan"
msgstr "Uitsig op Etherscan"
#: src/components/AccountDetails/index.tsx
#: src/components/AccountDetails/index.tsx
#: src/components/TransactionConfirmationModal/index.tsx
@@ -1652,6 +1744,10 @@ msgstr "Die stemming eindig ongeveer {0}"
msgid "Waiting For Confirmation"
msgstr "Wag op bevestiging"
#: src/components/AddressInputPanel/index.tsx
msgid "Wallet Address or ENS name"
msgstr "Wallet-adres of ENS-naam"
#: src/components/earn/StakingModal.tsx
msgid "Weekly Rewards"
msgstr "Weeklikse belonings"
@@ -1703,6 +1799,10 @@ msgstr "Draai toe"
msgid "Wrong Network"
msgstr "Verkeerde netwerk"
#: src/pages/CreateProposal/index.tsx
msgid "You already have an active or pending proposal"
msgstr "U het reeds 'n aktiewe of hangende voorstel"
#: src/pages/AddLiquidityV2/index.tsx
msgid "You are creating a pool"
msgstr "U skep 'n poel"
@@ -1723,6 +1823,10 @@ msgstr "U kan self oor elke voorstel stem of u stemme aan 'n derde party delegee
msgid "You can now trade {0}"
msgstr "U kan nou {0} verhandel"
#: src/pages/CreateProposal/index.tsx
msgid "You don't have enough votes to submit a proposal"
msgstr "U het nie genoeg stemme om 'n voorstel in te dien nie"
#: src/pages/PoolFinder/index.tsx
msgid "You dont have liquidity in this pool yet."
msgstr "U het nog nie likiditeit in hierdie poel nie."
@@ -1735,6 +1839,10 @@ msgstr "U moet 'n rekening koppel."
msgid "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token."
msgstr "U moet die Uniswap-slimkontrakte toestemming gee om u {0}te gebruik. U hoef dit slegs een keer per teken te doen."
#: src/pages/CreateProposal/index.tsx
msgid "You must have {formattedProposalThreshold} votes to submit a proposal"
msgstr "U moet {formattedProposalThreshold} stemme hê om 'n voorstel in te dien"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so."
msgstr "U moet slegs likiditeit in Uniswap V3 deponeer teen 'n prys wat volgens u korrek is. <0 /> As die prys verkeerd lyk, kan u ruil om die prys te skuif, of wag tot iemand anders dit doen."

View File

@@ -1,6 +1,6 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2021-06-21 15:11+0000\n"
"POT-Creation-Date: 2021-06-27 05:00+0000\n"
"Mime-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -14,7 +14,7 @@ msgstr ""
"X-Crowdin-File-ID: 4\n"
"Project-Id-Version: uniswap-interface\n"
"Language-Team: Arabic\n"
"PO-Revision-Date: 2021-06-21 16:05\n"
"PO-Revision-Date: 2021-06-27 05:04\n"
#: src/pages/Pool/PositionPage.tsx
#: src/pages/Pool/PositionPage.tsx
@@ -35,6 +35,10 @@ msgstr "${0} ETH"
msgid "(Max)"
msgstr "(الحد الأقصى)"
#: src/components/AddressInputPanel/index.tsx
msgid "(View on Explorer)"
msgstr "(عرض على Explorer)"
#: src/components/Header/UniBalanceContent.tsx
msgid "(claim)"
msgstr "(مطالبة)"
@@ -111,6 +115,10 @@ msgstr "<0> رجوع إلى</0> V3"
msgid "<0>Tip:</0> Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive."
msgstr "<0>تلميح:</0> إزالة رموز المجموعة تحول مركزك مرة أخرى إلى الرموز الأساسية بالمعدل الحالي، بما يتناسب مع نصيبك من المجموعة. الرسوم المتراكمة مدرجة في المبالغ التي تتلقاها."
#: src/pages/CreateProposal/index.tsx
msgid "<0>Tip:</0> Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs</1>."
msgstr "<0> نصيحة:</0> حدد إجراء ووصف اقتراحك للمجتمع. لا يمكن تعديل العرض بعد التقديم ، لذا يرجى التحقق من جميع المعلومات قبل التقديم. ستبدأ فترة التصويت على الفور وتستمر لمدة 7 أيام. لاقتراح إجراء مخصص ، <1> اقرأ المستندات</1> ."
#: src/pages/PoolFinder/index.tsx
msgid "<0>Tip:</0> Use this tool to find v2 pools that don't automatically appear in the interface."
msgstr "<0> نصيحة:</0> استخدم هذه الأداة للبحث عن مجموعات v2 التي لا تظهر تلقائيًا في الواجهة."
@@ -235,6 +243,10 @@ msgstr "التحليلات"
msgid "Approve"
msgstr "الموافقة"
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Approve Token"
msgstr "الموافقة على رمز"
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
@@ -258,6 +270,14 @@ msgstr "الموافقة"
msgid "Approving {0}"
msgstr "الموافقة على {0}"
#: src/components/Header/NetworkCard.tsx
msgid "Arbitrum Explorer"
msgstr "مستكشف Arbitrum"
#: src/components/Header/NetworkCard.tsx
msgid "Arbitrum Token Bridge"
msgstr "جسر Arbitrum Token"
#: src/components/Settings/index.tsx
msgid "Are you sure?"
msgstr "هل أنت متأكد؟"
@@ -322,6 +342,10 @@ msgstr "عند توصيل محفظة، فإنك توافق على <0>شروط خ
msgid "Change"
msgstr "تغيير"
#: src/components/Header/NetworkCard.tsx
msgid "Change your network to go back to L1"
msgstr "قم بتغيير شبكتك للعودة إلى L1"
#: src/components/Header/index.tsx
msgid "Charts"
msgstr "الرسوم البيانية"
@@ -519,6 +543,11 @@ msgstr "نسخ العنوان"
msgid "Create Pool & Supply"
msgstr "إنشاء مجموعة وإمدادات"
#: src/pages/CreateProposal/index.tsx
#: src/pages/Vote/index.tsx
msgid "Create Proposal"
msgstr "إنشاء اقتراح"
#: src/components/NavigationTabs/index.tsx
#: src/pages/Pool/v2.tsx
msgid "Create a pair"
@@ -584,6 +613,10 @@ msgstr "إيداع رموز UNI-V2 LP"
msgid "Deposit liquidity"
msgstr "إيداع السيولة"
#: src/components/swap/SwapNetworkAlert.tsx
msgid "Deposit to Arbitrum"
msgstr "الإيداع في Arbitrum"
#: src/pages/Earn/index.tsx
msgid "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token."
msgstr "قم بإيداع رموز موفر السيولة الخاصة بك لتلقي UNI، رمز بروتوكول Uniswap."
@@ -839,6 +872,10 @@ msgstr "مستلم غير صالح"
msgid "Learn"
msgstr "تعلم"
#: src/components/Header/NetworkCard.tsx
msgid "Learn more"
msgstr "يتعلم أكثر"
#: src/components/claim/ClaimModal.tsx
#: src/pages/Pool/PositionPage.tsx
msgid "Liquidity"
@@ -1140,6 +1177,18 @@ msgstr "السعر:"
msgid "Prices and pool share"
msgstr "الأسعار وحصة المجموعة"
#: src/pages/CreateProposal/ProposalEditor.tsx
msgid "Proposal"
msgstr "عرض"
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "Proposal Submitted"
msgstr "تم تقديم الاقتراح"
#: src/pages/CreateProposal/ProposalEditor.tsx
msgid "Proposal Title"
msgstr "عنوان الاقتراح"
#: src/pages/Vote/index.tsx
msgid "Proposals"
msgstr "مقترحات"
@@ -1148,6 +1197,10 @@ msgstr "مقترحات"
msgid "Proposals submitted by community members will appear here."
msgstr "وسترد هنا المقترحات المقدمة من أعضاء المجتمع المحلي."
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Proposed Action"
msgstr "الإجراء المقترح"
#: src/pages/Vote/VotePage.tsx
msgid "Proposer"
msgstr "المقترح"
@@ -1176,6 +1229,10 @@ msgstr "اقرأ المزيد عن الأصول غير المدعومة"
msgid "Recent Transactions"
msgstr "المعاملات الأخيرة"
#: src/components/AddressInputPanel/index.tsx
msgid "Recipient"
msgstr "متلقي"
#: src/components/PositionCard/V2.tsx
#: src/components/PositionCard/index.tsx
#: src/pages/RemoveLiquidity/V3.tsx
@@ -1220,6 +1277,7 @@ msgid "Restricts swaps to direct pairs only."
msgstr "يقيد المبادلات إلى أزواج فقط ."
#: src/components/TransactionConfirmationModal/index.tsx
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "Return"
msgstr "رجوع"
@@ -1251,6 +1309,10 @@ msgstr "حدد الرمز"
msgid "Select a token to find your v2 liquidity."
msgstr "حدد رمزًا للعثور على سيولة v2 الخاصة بك."
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Select an action"
msgstr "حدد إجراء"
#: src/pages/AddLiquidity/index.tsx
msgid "Select pair"
msgstr "حدد زوجًا"
@@ -1313,6 +1375,14 @@ msgstr "حدث خطأ ما"
msgid "Step 1. Get UNI-V2 Liquidity tokens"
msgstr "الخطوة 1. احصل على رمز سيولة UNI-V2"
#: src/state/governance/hooks.ts
msgid "Submitted new proposal"
msgstr "قدم اقتراح جديد"
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "Submitting Proposal"
msgstr "تقديم الاقتراح"
#: src/components/vote/VoteModal.tsx
msgid "Submitting Vote"
msgstr "تقديم التصويت"
@@ -1342,6 +1412,10 @@ msgstr "مبادلة على أي حال"
msgid "Swapping {0} {1} for {2} {3}"
msgstr "مبادلة {0} {1} مقابل {2} {3}"
#: src/components/Header/NetworkCard.tsx
msgid "Switch to Ethereum"
msgstr "قم بالتبديل إلى Ethereum"
#: src/components/Popups/ClaimPopup.tsx
msgid "Thanks for being part of the Uniswap community <0/>"
msgstr "نشكرك على كونك جزءًا من مجتمع Uniswap <0/>"
@@ -1386,6 +1460,10 @@ msgstr "تعذر إرسال المعاملة لانتهاء الموعد الم
msgid "These tokens are commonly paired with other tokens."
msgstr "هذه الرموز عادة ما تقترن مع رموز أخرى."
#: src/components/swap/SwapNetworkAlert.tsx
msgid "This is an alpha release of Uniswap on the Arbitrum network. You must bridge L1 assets to the network to swap them."
msgstr "هذا إصدار ألفا من Uniswap على شبكة Arbitrum. يجب ربط أصول L1 بالشبكة لتبديلها."
#: src/components/SearchModal/ImportToken.tsx
msgid "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade."
msgstr "لا يظهر هذا الرمز في قائمة (قوائم) الرموز النشطة. تأكد من أن هذا هو الرمز الذي تريد تداوله."
@@ -1407,6 +1485,8 @@ msgid "Tip: Custom tokens are stored locally in your browser"
msgstr "نصيحة: يتم تخزين الرموز المخصصة محليًا في المتصفح الخاص بك"
#: src/components/swap/SwapModalHeader.tsx
#: src/pages/CreateProposal/ProposalActionDetail.tsx
#: src/pages/CreateProposal/ProposalActionDetail.tsx
#: src/pages/Swap/index.tsx
msgid "To"
msgstr "إلى"
@@ -1460,6 +1540,10 @@ msgstr "تم إرسال المعاملة"
msgid "Transaction deadline"
msgstr "الموعد النهائي للمعاملة"
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Transfer Token"
msgstr "رمز التحويل"
#: src/components/WalletModal/PendingView.tsx
msgid "Try Again"
msgstr "حاول مرة أخرى"
@@ -1529,6 +1613,10 @@ msgstr "تعدين سيولة Uniswap"
msgid "Uniswap migration contract↗"
msgstr "عقد ترحيل Uniswap ↗"
#: src/components/swap/SwapNetworkAlert.tsx
msgid "Uniswap on <0>Arbitrum</0>"
msgstr "Uniswap على <0> Arbitrum</0>"
#: src/components/SearchModal/ImportToken.tsx
msgid "Unknown Source"
msgstr "مصدر مجهول"
@@ -1605,6 +1693,10 @@ msgstr "عرض الرسوم المتراكمة والتحليلات <0>↗</0>"
msgid "View list"
msgstr "عرض القائمة"
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "View on Etherscan"
msgstr "عرض على Etherscan"
#: src/components/AccountDetails/index.tsx
#: src/components/AccountDetails/index.tsx
#: src/components/TransactionConfirmationModal/index.tsx
@@ -1652,6 +1744,10 @@ msgstr "التصويت ينتهي تقريبًا {0}"
msgid "Waiting For Confirmation"
msgstr "في انتظار التأكيد"
#: src/components/AddressInputPanel/index.tsx
msgid "Wallet Address or ENS name"
msgstr "عنوان المحفظة أو اسم ENS"
#: src/components/earn/StakingModal.tsx
msgid "Weekly Rewards"
msgstr "المكافآت الأسبوعية"
@@ -1703,6 +1799,10 @@ msgstr "التفاف"
msgid "Wrong Network"
msgstr "شبكة خاطئة"
#: src/pages/CreateProposal/index.tsx
msgid "You already have an active or pending proposal"
msgstr "لديك بالفعل اقتراح نشط أو معلق"
#: src/pages/AddLiquidityV2/index.tsx
msgid "You are creating a pool"
msgstr "أنت تقوم بإنشاء مجموعة"
@@ -1723,6 +1823,10 @@ msgstr "يمكنك إما أن تصوت على كل اقتراح بنفسك أو
msgid "You can now trade {0}"
msgstr "يمكنك الآن التداول {0}"
#: src/pages/CreateProposal/index.tsx
msgid "You don't have enough votes to submit a proposal"
msgstr "ليس لديك ما يكفي من الأصوات لتقديم اقتراح"
#: src/pages/PoolFinder/index.tsx
msgid "You dont have liquidity in this pool yet."
msgstr "ليس لديك سيولة في هذه المجموعة حتى الآن."
@@ -1735,6 +1839,10 @@ msgstr "يجب عليك توصيل حساب."
msgid "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token."
msgstr "يجب عليك منح العقود الذكية لـ Uniswap الإذن لاستخدام {0}الخاص بك. يجب عليك القيام بذلك مرة واحدة فقط لكل رمز."
#: src/pages/CreateProposal/index.tsx
msgid "You must have {formattedProposalThreshold} votes to submit a proposal"
msgstr "يجب أن يكون لديك {formattedProposalThreshold} أصوات لتقديم اقتراح"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so."
msgstr "يجب عليك إيداع السيولة فقط في Uniswap V3 بسعر تعتقد أنه صحيح. <0/>إذا بدا السعر غير صحيح، يمكنك إما مقايضة لتحريك السعر أو الانتظار حتى يقوم شخص آخر بذلك."

View File

@@ -1,6 +1,6 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2021-06-21 15:11+0000\n"
"POT-Creation-Date: 2021-06-27 05:00+0000\n"
"Mime-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -14,7 +14,7 @@ msgstr ""
"X-Crowdin-File-ID: 4\n"
"Project-Id-Version: uniswap-interface\n"
"Language-Team: Catalan\n"
"PO-Revision-Date: 2021-06-21 16:05\n"
"PO-Revision-Date: 2021-06-27 05:04\n"
#: src/pages/Pool/PositionPage.tsx
#: src/pages/Pool/PositionPage.tsx
@@ -35,6 +35,10 @@ msgstr "${0} ETH"
msgid "(Max)"
msgstr "(Màxim)"
#: src/components/AddressInputPanel/index.tsx
msgid "(View on Explorer)"
msgstr "(Veure a Explorer)"
#: src/components/Header/UniBalanceContent.tsx
msgid "(claim)"
msgstr "(reclamació)"
@@ -111,6 +115,10 @@ msgstr "<0>Torna a</0> V3"
msgid "<0>Tip:</0> Removing pool tokens converts your position back into underlying tokens at the current rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive."
msgstr "<0>Consell:</0> Leliminació de les fitxes de grup converteix la vostra posició en fitxes subjacents al ritme actual, proporcional a la vostra quota de grup. Les comissions acumulades estan incloses en els imports que rebeu."
#: src/pages/CreateProposal/index.tsx
msgid "<0>Tip:</0> Select an action and describe your proposal for the community. The proposal cannot be modified after submission, so please verify all information before submitting. The voting period will begin immediately and last for 7 days. To propose a custom action, <1>read the docs</1>."
msgstr "<0> Consell:</0> Seleccioneu una acció i descriviu la vostra proposta per a la comunitat. La proposta no es pot modificar després de lenviament, així que comproveu tota la informació abans denviar-la. El període de votació començarà immediatament i durarà 7 dies. Per proposar una acció personalitzada, <1> llegiu els documents</1> ."
#: src/pages/PoolFinder/index.tsx
msgid "<0>Tip:</0> Use this tool to find v2 pools that don't automatically appear in the interface."
msgstr "<0>Consell:</0> Utilitzeu aquesta eina per trobar grups de v2 que no apareixen automàticament a la interfície."
@@ -235,6 +243,10 @@ msgstr "Analítica"
msgid "Approve"
msgstr "Aprovar"
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Approve Token"
msgstr "Aprova el testimoni"
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
@@ -258,6 +270,14 @@ msgstr "Aprovant"
msgid "Approving {0}"
msgstr "Saprova {0}"
#: src/components/Header/NetworkCard.tsx
msgid "Arbitrum Explorer"
msgstr "Arbitrum Explorer"
#: src/components/Header/NetworkCard.tsx
msgid "Arbitrum Token Bridge"
msgstr "Pont d'àrbitres"
#: src/components/Settings/index.tsx
msgid "Are you sure?"
msgstr "N'esteu segurs?"
@@ -322,6 +342,10 @@ msgstr "En connectar una cartera, accepteu les Condicions del servei <0> d'Unisw
msgid "Change"
msgstr "Canvi"
#: src/components/Header/NetworkCard.tsx
msgid "Change your network to go back to L1"
msgstr "Canvieu la vostra xarxa per tornar a L1"
#: src/components/Header/index.tsx
msgid "Charts"
msgstr "Gràfics"
@@ -519,6 +543,11 @@ msgstr "Copia l'adreça"
msgid "Create Pool & Supply"
msgstr "Crea grup i subministrament"
#: src/pages/CreateProposal/index.tsx
#: src/pages/Vote/index.tsx
msgid "Create Proposal"
msgstr "Crea una proposta"
#: src/components/NavigationTabs/index.tsx
#: src/pages/Pool/v2.tsx
msgid "Create a pair"
@@ -584,6 +613,10 @@ msgstr "Dipositeu fitxes LP UNI-V2"
msgid "Deposit liquidity"
msgstr "Dipòsit de liquiditat"
#: src/components/swap/SwapNetworkAlert.tsx
msgid "Deposit to Arbitrum"
msgstr "Dipòsit a Arbitrum"
#: src/pages/Earn/index.tsx
msgid "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token."
msgstr "Dipositeu les vostres fitxes de proveïdor de liquiditat per rebre UNI, la fitxa de governança del protocol Uniswap."
@@ -839,6 +872,10 @@ msgstr "Destinatari no vàlid"
msgid "Learn"
msgstr "Aprendre"
#: src/components/Header/NetworkCard.tsx
msgid "Learn more"
msgstr "Aprèn més"
#: src/components/claim/ClaimModal.tsx
#: src/pages/Pool/PositionPage.tsx
msgid "Liquidity"
@@ -1140,6 +1177,18 @@ msgstr "Preu:"
msgid "Prices and pool share"
msgstr "Preus i quota de grup"
#: src/pages/CreateProposal/ProposalEditor.tsx
msgid "Proposal"
msgstr "Proposta"
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "Proposal Submitted"
msgstr "Proposta enviada"
#: src/pages/CreateProposal/ProposalEditor.tsx
msgid "Proposal Title"
msgstr "Títol de la proposta"
#: src/pages/Vote/index.tsx
msgid "Proposals"
msgstr "Propostes"
@@ -1148,6 +1197,10 @@ msgstr "Propostes"
msgid "Proposals submitted by community members will appear here."
msgstr "Les propostes enviades pels membres de la comunitat apareixeran aquí."
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Proposed Action"
msgstr "Acció proposada"
#: src/pages/Vote/VotePage.tsx
msgid "Proposer"
msgstr "Proponent"
@@ -1176,6 +1229,10 @@ msgstr "Obteniu més informació sobre els recursos no compatibles"
msgid "Recent Transactions"
msgstr "Transaccions recents"
#: src/components/AddressInputPanel/index.tsx
msgid "Recipient"
msgstr "Destinatari"
#: src/components/PositionCard/V2.tsx
#: src/components/PositionCard/index.tsx
#: src/pages/RemoveLiquidity/V3.tsx
@@ -1220,6 +1277,7 @@ msgid "Restricts swaps to direct pairs only."
msgstr "Restringeix els intercanvis només a parells directes."
#: src/components/TransactionConfirmationModal/index.tsx
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "Return"
msgstr "Torna"
@@ -1251,6 +1309,10 @@ msgstr "Seleccioneu una fitxa"
msgid "Select a token to find your v2 liquidity."
msgstr "Seleccioneu una fitxa per trobar la vostra liquiditat v2."
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Select an action"
msgstr "Seleccioneu una acció"
#: src/pages/AddLiquidity/index.tsx
msgid "Select pair"
msgstr "Selecciona un parell"
@@ -1313,6 +1375,14 @@ msgstr "Alguna cosa ha anat malament"
msgid "Step 1. Get UNI-V2 Liquidity tokens"
msgstr "Pas 1. Obteniu fitxes de liquiditat UNI-V2"
#: src/state/governance/hooks.ts
msgid "Submitted new proposal"
msgstr "S'ha enviat una nova proposta"
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "Submitting Proposal"
msgstr "Enviament de la proposta"
#: src/components/vote/VoteModal.tsx
msgid "Submitting Vote"
msgstr "Enviament de vot"
@@ -1342,6 +1412,10 @@ msgstr "Intercanviar de totes maneres"
msgid "Swapping {0} {1} for {2} {3}"
msgstr "Intercanvi de {0} {1} per {2} {3}"
#: src/components/Header/NetworkCard.tsx
msgid "Switch to Ethereum"
msgstr "Canvieu a Ethereum"
#: src/components/Popups/ClaimPopup.tsx
msgid "Thanks for being part of the Uniswap community <0/>"
msgstr "Gràcies per formar part de la comunitat Uniswap <0 />"
@@ -1386,6 +1460,10 @@ msgstr "No s'ha pogut enviar la transacció perquè s'ha acabat el termini. Comp
msgid "These tokens are commonly paired with other tokens."
msgstr "Aquestes fitxes solen aparellar-se amb altres fitxes."
#: src/components/swap/SwapNetworkAlert.tsx
msgid "This is an alpha release of Uniswap on the Arbitrum network. You must bridge L1 assets to the network to swap them."
msgstr "Es tracta duna versió alfa dUniswap a la xarxa Arbitrum. Heu de connectar els recursos L1 a la xarxa per canviar-los."
#: src/components/SearchModal/ImportToken.tsx
msgid "This token doesn't appear on the active token list(s). Make sure this is the token that you want to trade."
msgstr "Aquest testimoni no apareix a la llista de fitxes actives. Assegureu-vos que aquest sigui el testimoni que voleu canviar."
@@ -1407,6 +1485,8 @@ msgid "Tip: Custom tokens are stored locally in your browser"
msgstr "Consell: les fitxes personalitzades semmagatzemen localment al navegador"
#: src/components/swap/SwapModalHeader.tsx
#: src/pages/CreateProposal/ProposalActionDetail.tsx
#: src/pages/CreateProposal/ProposalActionDetail.tsx
#: src/pages/Swap/index.tsx
msgid "To"
msgstr "Per a"
@@ -1460,6 +1540,10 @@ msgstr "Transacció enviada"
msgid "Transaction deadline"
msgstr "Termini de transacció"
#: src/pages/CreateProposal/ProposalActionSelector.tsx
msgid "Transfer Token"
msgstr "Transferir el testimoni"
#: src/components/WalletModal/PendingView.tsx
msgid "Try Again"
msgstr "Torna-ho a provar"
@@ -1529,6 +1613,10 @@ msgstr "Mineria de liquiditat Uniswap"
msgid "Uniswap migration contract↗"
msgstr "Contracte de migració Uniswap↗"
#: src/components/swap/SwapNetworkAlert.tsx
msgid "Uniswap on <0>Arbitrum</0>"
msgstr "Uniswap a <0> Arbitrum</0>"
#: src/components/SearchModal/ImportToken.tsx
msgid "Unknown Source"
msgstr "Font desconeguda"
@@ -1605,6 +1693,10 @@ msgstr "Consulteu els honoraris i les taxes acumulades <0> ↗</0>"
msgid "View list"
msgstr "Veure llista"
#: src/pages/CreateProposal/ProposalSubmissionModal.tsx
msgid "View on Etherscan"
msgstr "Veure a Etherscan"
#: src/components/AccountDetails/index.tsx
#: src/components/AccountDetails/index.tsx
#: src/components/TransactionConfirmationModal/index.tsx
@@ -1652,6 +1744,10 @@ msgstr "La votació finalitza aproximadament {0}"
msgid "Waiting For Confirmation"
msgstr "Esperant la confirmació"
#: src/components/AddressInputPanel/index.tsx
msgid "Wallet Address or ENS name"
msgstr "Adreça de cartera o nom ENS"
#: src/components/earn/StakingModal.tsx
msgid "Weekly Rewards"
msgstr "Recompenses setmanals"
@@ -1703,6 +1799,10 @@ msgstr "Embolicar"
msgid "Wrong Network"
msgstr "Xarxa incorrecta"
#: src/pages/CreateProposal/index.tsx
msgid "You already have an active or pending proposal"
msgstr "Ja teniu una proposta activa o pendent"
#: src/pages/AddLiquidityV2/index.tsx
msgid "You are creating a pool"
msgstr "Esteu creant un grup"
@@ -1723,6 +1823,10 @@ msgstr "Podeu votar vosaltres cada proposta o delegar els vostres vots a un terc
msgid "You can now trade {0}"
msgstr "Ara podeu canviar {0}"
#: src/pages/CreateProposal/index.tsx
msgid "You don't have enough votes to submit a proposal"
msgstr "No teniu prou vots per enviar una proposta"
#: src/pages/PoolFinder/index.tsx
msgid "You dont have liquidity in this pool yet."
msgstr "Encara no teniu liquiditat en aquest grup."
@@ -1735,6 +1839,10 @@ msgstr "Heu de connectar un compte."
msgid "You must give the Uniswap smart contracts permission to use your {0}. You only have to do this once per token."
msgstr "Heu de donar permís als contractes intel·ligents Uniswap per utilitzar el vostre {0}. Només heu de fer-ho una vegada per fitxa."
#: src/pages/CreateProposal/index.tsx
msgid "You must have {formattedProposalThreshold} votes to submit a proposal"
msgstr "Heu de tenir {formattedProposalThreshold} vots per enviar una proposta"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "You should only deposit liquidity into Uniswap V3 at a price you believe is correct. <0/>If the price seems incorrect, you can either make a swap to move the price or wait for someone else to do so."
msgstr "Només heu de dipositar liquiditat a Uniswap V3 a un preu que creieu correcte. <0/> Si el preu sembla incorrecte, podeu canviar el preu o esperar que algú ho faci."

Some files were not shown because too many files have changed in this diff Show More