{"version":3,"file":"static/chunks/pages/swap-4d4de59ad6a92052.js","mappings":"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","sources":["webpack://_N_E/?88db","webpack://_N_E/./packages/uikit/src/components/BottomDrawer/BottomDrawer.tsx","webpack://_N_E/./packages/uikit/src/components/Svg/Icons/ArrowUpDown.tsx","webpack://_N_E/./packages/uikit/src/components/Svg/Icons/AutoRenew.tsx","webpack://_N_E/./packages/uikit/src/components/Svg/Icons/Expand.tsx","webpack://_N_E/./packages/uikit/src/components/Svg/Icons/LineGraph.tsx","webpack://_N_E/./packages/uikit/src/components/Svg/Icons/Shrink.tsx","webpack://_N_E/./packages/uikit/src/components/Svg/Icons/SyncAlt.tsx","webpack://_N_E/./packages/uikit/src/hooks/useDelayedUnmount.ts","webpack://_N_E/./src/components/Layout/Flex.tsx","webpack://_N_E/./src/components/UnsupportedCurrencyFooter.tsx","webpack://_N_E/./src/config/constants/swapWarningTokens.ts","webpack://_N_E/./src/utils/shouldShowSwapWarning.ts","webpack://_N_E/./src/views/Swap/hooks/useRefreshBlockNumber.ts","webpack://_N_E/./src/views/Swap/components/AddressInputPanel.tsx","webpack://_N_E/./src/views/Swap/components/styleds.tsx","webpack://_N_E/./src/views/Swap/components/FormattedPriceImpact.tsx","webpack://_N_E/./src/views/Swap/components/SwapModalFooter.tsx","webpack://_N_E/./src/views/Swap/components/SwapModalHeader.tsx","webpack://_N_E/./src/views/Swap/components/ConfirmSwapModal.tsx","webpack://_N_E/./src/hooks/useLast.ts","webpack://_N_E/./src/views/Swap/components/SwapRoute.tsx","webpack://_N_E/./src/views/Swap/components/AdvancedSwapDetails.tsx","webpack://_N_E/./src/views/Swap/components/AdvancedSwapDetailsDropdown.tsx","webpack://_N_E/./src/views/Swap/components/TradePrice.tsx","webpack://_N_E/./src/views/Swap/components/ProgressSteps.tsx","webpack://_N_E/./src/utils/isZero.ts","webpack://_N_E/./src/hooks/useSwapCallArguments.ts","webpack://_N_E/./src/hooks/useSwapCallback.ts","webpack://_N_E/./src/hooks/useWrapCallback.ts","webpack://_N_E/./src/views/Swap/components/SwapWarningModal/SafemoonWarning.tsx","webpack://_N_E/./src/views/Swap/components/SwapWarningModal/ItamWarning.tsx","webpack://_N_E/./src/views/Swap/components/SwapWarningModal/BondlyWarning.tsx","webpack://_N_E/./src/views/Swap/components/SwapWarningModal/Acknowledgement.tsx","webpack://_N_E/./src/views/Swap/components/SwapWarningModal/CcarWarning.tsx","webpack://_N_E/./src/views/Swap/components/SwapWarningModal/BTTWarning.tsx","webpack://_N_E/./src/views/Swap/components/SwapWarningModal/RugPullWarning.tsx","webpack://_N_E/./src/views/Swap/components/SwapWarningModal/FREEWarning.tsx","webpack://_N_E/./src/views/Swap/components/SwapWarningModal/index.tsx","webpack://_N_E/./src/views/Swap/components/Chart/styles.tsx","webpack://_N_E/./src/views/Swap/components/Chart/BnbWbnbNotice.tsx","webpack://_N_E/./src/components/PairPriceDisplay.tsx","webpack://_N_E/./src/views/Swap/components/Chart/BasicChart.tsx","webpack://_N_E/./src/views/Swap/components/Chart/PriceChart.tsx","webpack://_N_E/./src/views/Swap/styles.tsx","webpack://_N_E/./src/components/Svg/RefreshIcon.tsx","webpack://_N_E/./src/views/Swap/components/CurrencyInputHeader.tsx","webpack://_N_E/./src/components/ImportTokenWarningModal.tsx","webpack://_N_E/./src/views/Swap/index.tsx","webpack://_N_E/./src/views/Swap/components/confirmPriceImpactWithoutFee.ts","webpack://_N_E/./src/pages/swap.tsx","webpack://_N_E/./src/utils/maxAmountSpend.ts"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/swap\",\n function () {\n return require(\"private-next-pages/swap.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/swap\"])\n });\n }\n ","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport React, { useRef, useCallback } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport useDelayedUnmount from \"../../hooks/useDelayedUnmount\";\nimport useMatchBreakpoints from \"../../hooks/useMatchBreakpoints\";\nimport useOnClickOutside from \"../../hooks/useOnClickOutside\";\nimport getPortalRoot from \"../../util/getPortalRoot\";\nimport { Box } from \"../Box\";\nimport { IconButton } from \"../Button\";\nimport { Overlay } from \"../Overlay\";\nimport { CloseIcon } from \"../Svg\";\nimport { DrawerContainer } from \"./styles\";\nvar BottomDrawer = function(param) {\n var content = param.content, isOpen = param.isOpen, setIsOpen = param.setIsOpen;\n var ref = useRef(null);\n var shouldRender = useDelayedUnmount(isOpen, 350);\n var isMobile = useMatchBreakpoints().isMobile;\n useOnClickOutside(ref === null || ref === void 0 ? void 0 : ref.current, useCallback(function() {\n return setIsOpen(false);\n }, [\n setIsOpen\n ]));\n if (!shouldRender || !isMobile) {\n return null;\n }\n var portal = getPortalRoot();\n if (portal) return /*#__PURE__*/ createPortal(/*#__PURE__*/ _jsxs(_Fragment, {\n children: [\n /*#__PURE__*/ _jsx(Overlay, {\n isUnmounting: !isOpen\n }),\n /*#__PURE__*/ _jsxs(DrawerContainer, {\n ref: ref,\n isUnmounting: !isOpen,\n children: [\n /*#__PURE__*/ _jsx(Box, {\n position: \"absolute\",\n right: \"16px\",\n top: \"0\",\n children: /*#__PURE__*/ _jsx(IconButton, {\n variant: \"text\",\n onClick: function() {\n return setIsOpen(false);\n },\n children: /*#__PURE__*/ _jsx(CloseIcon, {})\n })\n }),\n content\n ]\n })\n ]\n }), portal);\n return null;\n};\nexport default BottomDrawer;\n","import _object_spread from \"@swc/helpers/src/_object_spread.mjs\";\nimport _object_spread_props from \"@swc/helpers/src/_object_spread_props.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport React from \"react\";\nimport Svg from \"../Svg\";\nvar Icon = function(props) {\n return /*#__PURE__*/ _jsx(Svg, _object_spread_props(_object_spread({\n viewBox: \"0 0 24 24\"\n }, props), {\n children: /*#__PURE__*/ _jsx(\"path\", {\n d: \"M16 17.01V11c0-.55-.45-1-1-1s-1 .45-1 1v6.01h-1.79c-.45 0-.67.54-.35.85l2.79 2.78c.2.19.51.19.71 0l2.79-2.78c.32-.31.09-.85-.35-.85H16zM8.65 3.35L5.86 6.14c-.32.31-.1.85.35.85H8V13c0 .55.45 1 1 1s1-.45 1-1V6.99h1.79c.45 0 .67-.54.35-.85L9.35 3.35a.501.501 0 00-.7 0z\"\n })\n }));\n};\nexport default Icon;\n","import _object_spread from \"@swc/helpers/src/_object_spread.mjs\";\nimport _object_spread_props from \"@swc/helpers/src/_object_spread_props.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport React from \"react\";\nimport Svg from \"../Svg\";\nvar Icon = function(props) {\n return /*#__PURE__*/ _jsx(Svg, _object_spread_props(_object_spread({\n viewBox: \"0 0 24 24\"\n }, props), {\n children: /*#__PURE__*/ _jsx(\"path\", {\n d: \"M12 6V7.79C12 8.24 12.54 8.46 12.85 8.14L15.64 5.35C15.84 5.15 15.84 4.84 15.64 4.64L12.85 1.85C12.54 1.54 12 1.76 12 2.21V4C7.58 4 4 7.58 4 12C4 13.04 4.2 14.04 4.57 14.95C4.84 15.62 5.7 15.8 6.21 15.29C6.48 15.02 6.59 14.61 6.44 14.25C6.15 13.56 6 12.79 6 12C6 8.69 8.69 6 12 6ZM17.79 8.71C17.52 8.98 17.41 9.4 17.56 9.75C17.84 10.45 18 11.21 18 12C18 15.31 15.31 18 12 18V16.21C12 15.76 11.46 15.54 11.15 15.86L8.36 18.65C8.16 18.85 8.16 19.16 8.36 19.36L11.15 22.15C11.46 22.46 12 22.24 12 21.8V20C16.42 20 20 16.42 20 12C20 10.96 19.8 9.96 19.43 9.05C19.16 8.38 18.3 8.2 17.79 8.71Z\"\n })\n }));\n};\nexport default Icon;\n","import _object_spread from \"@swc/helpers/src/_object_spread.mjs\";\nimport _object_spread_props from \"@swc/helpers/src/_object_spread_props.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport Svg from \"../Svg\";\nvar Icon = function(props) {\n return /*#__PURE__*/ _jsx(Svg, _object_spread_props(_object_spread({\n viewBox: \"0 0 25 24\"\n }, props), {\n children: /*#__PURE__*/ _jsx(\"path\", {\n d: \"M20.497 4.6l-.004-.028-.006-.036-.008-.033-.007-.03-.012-.032-.01-.03-.014-.028-.014-.03-.016-.027-.018-.03-.021-.028-.018-.024a.663.663 0 00-.044-.048v-.001a.66.66 0 00-.049-.044l-.024-.018-.028-.02-.03-.018-.026-.016-.03-.015c-.01-.004-.02-.01-.03-.013l-.03-.011-.03-.011-.031-.008-.033-.008-.035-.005-.03-.005A.684.684 0 0019.834 4h-4.667a.667.667 0 100 1.333h3.057l-4.862 4.862a.667.667 0 10.943.943l4.862-4.862v3.057a.667.667 0 101.333 0V4.667a.658.658 0 00-.003-.066zM10.696 12.861l-4.862 4.862v-3.057a.667.667 0 10-1.333 0v4.667l.003.066.005.029.005.035.008.033.008.03.01.032.012.03.013.029.015.03.016.027.017.029.021.028.018.024a.663.663 0 00.093.093l.024.018.029.021.029.018.026.016.03.014.03.014.03.01.031.012.03.007.033.008.036.006.029.004a.657.657 0 00.066.003h4.666a.667.667 0 000-1.333H6.777l4.862-4.862a.667.667 0 00-.943-.943z\"\n })\n }));\n};\nexport default Icon;\n","import _object_spread from \"@swc/helpers/src/_object_spread.mjs\";\nimport _object_spread_props from \"@swc/helpers/src/_object_spread_props.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport React from \"react\";\nimport Svg from \"../Svg\";\nvar Icon = function(props) {\n return /*#__PURE__*/ _jsx(Svg, _object_spread_props(_object_spread({\n viewBox: \"0 0 23 21\"\n }, props), {\n children: /*#__PURE__*/ _jsx(\"path\", {\n d: \"M17.553 3.091v.001c0 .55.19 1.081.541 1.502l-3.68 7.364a2.346 2.346 0 00-.827.108L10.833 8.97c.14-.3.217-.63.22-.967h0v-.003a2.35 2.35 0 00-2.35-2.35 2.35 2.35 0 00-2.35 2.35V8c.004.499.165.984.465 1.384l-3.477 6.082A2.35 2.35 0 00.75 17.803a2.35 2.35 0 002.35 2.35 2.35 2.35 0 002.35-2.35V17.8a2.338 2.338 0 00-.464-1.384l3.472-6.081c.322.037.65.004.957-.098l2.751 3.096a2.38 2.38 0 00-.216.967v.002a2.352 2.352 0 002.34 2.36 2.352 2.352 0 002.36-2.342v0c0-.55-.19-1.086-.54-1.51l3.68-7.365A2.35 2.35 0 0022.25 3.1a2.347 2.347 0 00-4.697-.01z\",\n stroke: \"currentColor\",\n strokeWidth: 0.5\n })\n }));\n};\nexport default Icon;\n","import _object_spread from \"@swc/helpers/src/_object_spread.mjs\";\nimport _object_spread_props from \"@swc/helpers/src/_object_spread_props.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport Svg from \"../Svg\";\nvar Icon = function(props) {\n return /*#__PURE__*/ _jsx(Svg, _object_spread_props(_object_spread({\n viewBox: \"0 0 25 25\"\n }, props), {\n children: /*#__PURE__*/ _jsx(\"path\", {\n d: \"M12.327 13.27c0-.01-.003-.019-.004-.028l-.005-.036-.009-.033-.007-.03-.011-.032-.011-.03-.014-.028-.014-.03c-.005-.01-.01-.019-.016-.027l-.018-.03-.021-.028-.018-.024a.692.692 0 00-.044-.049.674.674 0 00-.049-.044l-.024-.018-.028-.02-.03-.018-.026-.016-.03-.015c-.01-.005-.02-.01-.03-.013l-.03-.011-.03-.011-.031-.008-.033-.008-.035-.006-.03-.004a.689.689 0 00-.065-.003H6.997a.667.667 0 000 1.333h3.057l-4.862 4.862a.667.667 0 10.943.943l4.862-4.862v3.057a.667.667 0 001.333 0v-4.666a.689.689 0 00-.003-.066zM19.862 4.195L15 9.057V6a.667.667 0 10-1.333 0v4.667c0 .022.001.044.003.065l.005.03.005.035.008.033.008.03.01.032.012.03.013.029.015.03.016.027.017.029.021.028.018.024a.692.692 0 00.093.093l.024.018.028.021.03.018.027.015.03.015.029.014.03.01.031.012.03.007.033.008.036.006.029.004a.688.688 0 00.066.003H19A.667.667 0 0019 10h-3.057l4.862-4.862a.667.667 0 00-.943-.943z\"\n })\n }));\n};\nexport default Icon;\n","import _object_spread from \"@swc/helpers/src/_object_spread.mjs\";\nimport _object_spread_props from \"@swc/helpers/src/_object_spread_props.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport React from \"react\";\nimport Svg from \"../Svg\";\nvar Icon = function(props) {\n return /*#__PURE__*/ _jsx(Svg, _object_spread_props(_object_spread({\n viewBox: \"0 0 24 25\"\n }, props), {\n children: /*#__PURE__*/ _jsx(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M18.86 4.86003L21.65 7.65003C21.84 7.84003 21.84 8.16003 21.64 8.35003L18.85 11.14C18.54 11.46 18 11.24 18 10.79V9.00003H4C3.45 9.00003 3 8.55003 3 8.00003C3 7.45003 3.45 7.00003 4 7.00003H18V5.21003C18 4.76003 18.54 4.54003 18.86 4.86003ZM5.14001 19.14L2.35001 16.35C2.16001 16.16 2.16001 15.84 2.36001 15.65L5.15001 12.86C5.46001 12.54 6.00001 12.76 6.00001 13.21V15H20C20.55 15 21 15.45 21 16C21 16.55 20.55 17 20 17H6.00001V18.79C6.00001 19.24 5.46001 19.46 5.14001 19.14Z\"\n })\n }));\n};\nexport default Icon;\n","import { useState, useEffect } from \"react\";\n/**\n * Use this hook when you want to animate something when it appears on the screen (e.g. when some prop set to true)\n * but when its not on the screen you want it to be fully unmounted and not just hidden or height 0.\n * This is especially useful when you have a table of 100s rows and each row has expandable element that appears on click.\n * If you just set the expanding animation while keeping inactive elements mounted all those 100 elements will load the DOM,\n * and if they all receive updates via props you're looking at 100 DOM updates for hidden elements.\n * This hook \"shows\" element immediately when the isMounted is true\n * but keeps element mounted for delayTime to let unmounting animation happen, after which you unmount element completely.\n * delayTime should be the same as animation time in most cases.\n */ var useDelayedUnmount = function(isMounted, delayTime) {\n var ref = useState(false), shouldRender = ref[0], setShouldRender = ref[1];\n useEffect(function() {\n var timeoutId;\n if (isMounted && !shouldRender) {\n setShouldRender(true);\n } else if (!isMounted && shouldRender) {\n timeoutId = setTimeout(function() {\n return setShouldRender(false);\n }, delayTime);\n }\n return function() {\n return clearTimeout(timeoutId);\n };\n }, [\n isMounted,\n delayTime,\n shouldRender\n ]);\n return shouldRender;\n};\nexport default useDelayedUnmount;\n","import { Flex, FlexProps } from '@pancakeswap/uikit'\nimport styled from 'styled-components'\n\nconst FlexLayout = styled.div`\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n & > * {\n min-width: 280px;\n max-width: 31.5%;\n width: 100%;\n margin: 0 8px;\n margin-bottom: 32px;\n }\n`\n\nexport interface FlexGapProps extends FlexProps {\n gap?: string\n rowGap?: string\n columnGap?: string\n}\n\nexport const FlexGap = styled(Flex)<FlexGapProps>`\n gap: ${({ gap }) => gap};\n row-gap: ${({ rowGap }) => rowGap};\n column-gap: ${({ columnGap }) => columnGap};\n`\n\nexport default FlexLayout\n","import { Currency, Token } from '@pancakeswap/sdk'\nimport { Button, Text, Modal, useModal, InjectedModalProps, Link } from '@pancakeswap/uikit'\nimport { useTranslation } from 'contexts/Localization'\nimport styled from 'styled-components'\nimport { AutoRow } from 'components/Layout/Row'\nimport { AutoColumn } from 'components/Layout/Column'\nimport { CurrencyLogo } from 'components/Logo'\nimport { getChainId } from 'config/constants/exchange'\nimport { useNetwork } from 'wagmi'\nimport { getBscScanLink } from 'utils'\nimport { wrappedCurrency } from 'utils/wrappedCurrency'\nimport { useUnsupportedTokens } from '../hooks/Tokens'\n\n\ninterface Props extends InjectedModalProps {\n currencies: (Currency | undefined)[]\n}\n\nconst DetailsFooter = styled.div`\n padding: 8px 0;\n width: 100%;\n max-width: 400px;\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n color: ${({ theme }) => theme.colors.text};\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n text-align: center;\n`\n\nconst UnsupportedModal: React.FC<Props> = ({ currencies, onDismiss }) => {\n const { chain } = useNetwork()\n const chainId = getChainId(chain);\n const { t } = useTranslation()\n const tokens =\n chainId && currencies\n ? currencies.map((currency) => {\n return wrappedCurrency(currency, chainId)\n })\n : []\n\n const unsupportedTokens: { [address: string]: Token } = useUnsupportedTokens()\n\n return (\n <Modal title={t('Unsupported Assets')} maxWidth=\"420px\" onDismiss={onDismiss}>\n <AutoColumn gap=\"lg\">\n {tokens.map((token) => {\n return (\n token &&\n unsupportedTokens &&\n Object.keys(unsupportedTokens).includes(token.address) && (\n <AutoColumn key={token.address?.concat('not-supported')} gap=\"10px\">\n <AutoRow gap=\"5px\" align=\"center\">\n <CurrencyLogo currency={token} size=\"24px\" />\n <Text>{token.symbol}</Text>\n </AutoRow>\n {chainId && (\n <Link external small color=\"primaryDark\" href={getBscScanLink(token.address, 'address', chainId)}>\n {token.address}\n </Link>\n )}\n </AutoColumn>\n )\n )\n })}\n <AutoColumn gap=\"lg\">\n <Text>\n {t(\n 'Some assets are not available through this interface because they may not work well with our smart contract or we are unable to allow trading for legal reasons.',\n )}\n </Text>\n </AutoColumn>\n </AutoColumn>\n </Modal>\n )\n}\n\nexport default function UnsupportedCurrencyFooter({ currencies }: { currencies: (Currency | undefined)[] }) {\n const { t } = useTranslation()\n const [onPresentModal] = useModal(<UnsupportedModal currencies={currencies} />)\n\n return (\n <DetailsFooter>\n <Button variant=\"text\" onClick={onPresentModal}>\n {t('Read more about unsupported assets')}\n </Button>\n </DetailsFooter>\n )\n}\n","import { Token } from '@pancakeswap/sdk'\n\n\ninterface WarningTokenList {\n [key: string]: Token\n}\n\nconst SwapWarningTokens = <WarningTokenList>{\n \n}\n\nexport default SwapWarningTokens\n","import { Token } from '@pancakeswap/sdk'\nimport SwapWarningTokens from 'config/constants/swapWarningTokens'\n\nconst swapWarningTokens = Object.values(SwapWarningTokens)\n\nconst shouldShowSwapWarning = (swapCurrency: Token) => {\n return swapWarningTokens.some((warningToken) => warningToken.equals(swapCurrency))\n}\n\nexport default shouldShowSwapWarning\n","import { useNetwork } from 'wagmi'\nimport { getChainId } from 'config/constants/exchange'\nimport { useState, useCallback, useEffect } from 'react'\nimport { useSWRConfig } from 'swr'\n\nexport const useRefreshBlockNumber = () => {\n const [isLoading, setFetch] = useState(false)\n\n const refreshBlockNumber = useCallback(() => {\n if (!isLoading) {\n setFetch(true)\n }\n }, [isLoading])\n\n const { mutate } = useSWRConfig()\n const { chain } = useNetwork()\n const chainId = getChainId(chain);\n\n useEffect(() => {\n if (!isLoading) return\n\n mutate(`blockNumber-${chainId}`)\n\n // setTimeout is used to demonstrate the loading\n // because the real loading state occurs on multicall state\n // we don't know when the fetch is finished.\n setTimeout(() => setFetch(false), 500)\n }, [mutate, isLoading, chainId])\n\n return { refreshBlockNumber, isLoading }\n}\n\nexport default useRefreshBlockNumber\n","import { useCallback } from 'react'\nimport styled from 'styled-components'\nimport { Text, Link } from '@pancakeswap/uikit'\nimport { isAddress } from 'utils'\nimport { useTranslation } from 'contexts/Localization'\nimport { useNetwork } from 'wagmi'\nimport { getChainId } from 'config/constants/exchange'\nimport { AutoColumn } from '../../../components/Layout/Column'\nimport { RowBetween } from '../../../components/Layout/Row'\nimport { getBscScanLink } from '../../../utils'\n\nconst InputPanel = styled.div`\n display: flex;\n flex-flow: column nowrap;\n position: relative;\n border-radius: 1.25rem;\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n z-index: 1;\n width: 100%;\n`\n\nconst ContainerRow = styled.div<{ error: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ${({ error, theme }) => (error ? theme.colors.failure : theme.colors.background)};\n transition: border-color 300ms ${({ error }) => (error ? 'step-end' : 'step-start')},\n color 500ms ${({ error }) => (error ? 'step-end' : 'step-start')};\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n`\n\nconst InputContainer = styled.div`\n flex: 1;\n padding: 1rem;\n`\n\nconst Input = styled.input<{ error?: boolean }>`\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ${({ theme }) => theme.colors.backgroundAlt};\n transition: color 300ms ${({ error }) => (error ? 'step-end' : 'step-start')};\n color: ${({ error, theme }) => (error ? theme.colors.failure : theme.colors.primary)};\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ${({ theme }) => theme.colors.textDisabled};\n }\n padding: 0px;\n -webkit-appearance: textfield;\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n\n ::placeholder {\n color: ${({ theme }) => theme.colors.textDisabled};\n }\n`\n\nexport default function AddressInputPanel({\n id,\n value,\n onChange,\n}: {\n id?: string\n // the typed string value\n value: string\n // triggers whenever the typed value changes\n onChange: (value: string) => void\n}) {\n const { chain } = useNetwork()\n const chainId = getChainId(chain);\n\n const { t } = useTranslation()\n\n const address = isAddress(value) ? value : undefined\n\n const handleInput = useCallback(\n (event) => {\n const input = event.target.value\n const withoutSpaces = input.replace(/\\s+/g, '')\n onChange(withoutSpaces)\n },\n [onChange],\n )\n\n const error = Boolean(value.length > 0 && !address)\n\n return (\n <InputPanel id={id}>\n <ContainerRow error={error}>\n <InputContainer>\n <AutoColumn gap=\"md\">\n <RowBetween>\n <Text>{t('Recipient')}</Text>\n {address && chainId && (\n <Link external small href={getBscScanLink(address, 'address', chainId)}>\n ({t('View on Explorer')})\n </Link>\n )}\n </RowBetween>\n <Input\n className=\"recipient-address-input\"\n type=\"text\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n placeholder={t('Wallet Address')}\n error={error}\n pattern=\"^(0x[a-fA-F0-9]{40})$\"\n onChange={handleInput}\n value={value}\n />\n </AutoColumn>\n </InputContainer>\n </ContainerRow>\n </InputPanel>\n )\n}\n","import { ErrorIcon, Flex, Text } from '@pancakeswap/uikit'\nimport { AutoColumn } from 'components/Layout/Column'\nimport styled, { css } from 'styled-components'\n\nexport const Wrapper = styled(Flex)`\n position: relative;\n flex-direction: column;\n justify-content: space-between;\n padding: 1rem;\n`\n\nexport const ArrowWrapper = styled.div<{ clickable: boolean }>`\n padding: 2px;\n\n ${({ clickable }) =>\n clickable\n ? css`\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n `\n : null}\n`\n\nexport const ErrorText = styled(Text)<{ severity?: 0 | 1 | 2 | 3 | 4 }>`\n color: ${({ theme, severity }) =>\n severity === 3 || severity === 4\n ? theme.colors.failure\n : severity === 2\n ? theme.colors.warning\n : severity === 1\n ? theme.colors.text\n : theme.colors.success};\n`\n\nexport const StyledBalanceMaxMini = styled.button`\n height: 22px;\n width: 22px;\n background-color: ${({ theme }) => theme.colors.background};\n border: none;\n border-radius: 50%;\n padding: 0.2rem;\n font-size: 0.875rem;\n font-weight: 400;\n margin-left: 0.4rem;\n cursor: pointer;\n color: ${({ theme }) => theme.colors.text};\n display: flex;\n justify-content: center;\n align-items: center;\n float: right;\n\n :hover {\n background-color: ${({ theme }) => theme.colors.dropdown};\n }\n :focus {\n background-color: ${({ theme }) => theme.colors.dropdown};\n outline: none;\n }\n`\n\nexport const TruncatedText = styled(Text).attrs({ ellipsis: true })`\n width: 220px;\n`\n\nconst SwapCallbackErrorInner = styled.div`\n background-color: ${({ theme }) => `${theme.colors.failure}33`};\n border-radius: 1rem;\n display: flex;\n align-items: center;\n font-size: 0.825rem;\n width: 100%;\n padding: 3rem 1.25rem 1rem 1rem;\n margin-top: -2rem;\n color: ${({ theme }) => theme.colors.failure};\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n`\n\nconst SwapCallbackErrorInnerAlertTriangle = styled.div`\n background-color: ${({ theme }) => `${theme.colors.failure}33`};\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 12px;\n border-radius: 12px;\n min-width: 48px;\n height: 48px;\n`\n\nexport function SwapCallbackError({ error }: { error: string }) {\n return (\n <SwapCallbackErrorInner>\n <SwapCallbackErrorInnerAlertTriangle>\n <ErrorIcon width=\"24px\" />\n </SwapCallbackErrorInnerAlertTriangle>\n <p>{error}</p>\n </SwapCallbackErrorInner>\n )\n}\n\nexport const SwapShowAcceptChanges = styled(AutoColumn)`\n background-color: ${({ theme }) => `${theme.colors.warning}33`};\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n`\n","import { Percent } from '@pancakeswap/sdk'\nimport { warningSeverity } from 'utils/exchange'\nimport { ONE_BIPS } from 'config/constants/exchange'\nimport { ErrorText } from './styleds'\n\n/**\n * Formatted version of price impact text with warning colors\n */\nexport default function FormattedPriceImpact({ priceImpact }: { priceImpact?: Percent }) {\n return (\n <ErrorText fontSize=\"12px\" severity={warningSeverity(priceImpact)}>\n {priceImpact ? (priceImpact.lessThan(ONE_BIPS) ? '<0.01%' : `${priceImpact.toFixed(2)}%`) : '-'}\n </ErrorText>\n )\n}\n","import { useMemo, useState } from 'react'\nimport styled from 'styled-components'\nimport { Trade, TradeType } from '@pancakeswap/sdk'\nimport { Button, Text, AutoRenewIcon } from '@pancakeswap/uikit'\nimport { useTranslation } from 'contexts/Localization'\nimport { Field } from 'state/swap/actions'\nimport {\n computeSlippageAdjustedAmounts,\n computeTradePriceBreakdown,\n formatExecutionPrice,\n warningSeverity,\n} from 'utils/exchange'\nimport { AutoColumn } from 'components/Layout/Column'\nimport QuestionHelper from 'components/QuestionHelper'\nimport { AutoRow, RowBetween, RowFixed } from 'components/Layout/Row'\nimport { TOTAL_FEE, LP_HOLDERS_FEE, TREASURY_FEE, BUYBACK_FEE } from 'config/constants/info'\nimport FormattedPriceImpact from './FormattedPriceImpact'\nimport { StyledBalanceMaxMini, SwapCallbackError } from './styleds'\n\nconst SwapModalFooterContainer = styled(AutoColumn)`\n margin-top: 24px;\n padding: 16px;\n border-radius: ${({ theme }) => theme.radii.default};\n border: 1px solid ${({ theme }) => theme.colors.cardBorder};\n background-color: ${({ theme }) => theme.colors.background};\n`\n\nexport default function SwapModalFooter({\n trade,\n onConfirm,\n allowedSlippage,\n swapErrorMessage,\n disabledConfirm,\n}: {\n trade: Trade\n allowedSlippage: number\n onConfirm: () => void\n swapErrorMessage: string | undefined\n disabledConfirm: boolean\n}) {\n const { t } = useTranslation()\n const [showInverted, setShowInverted] = useState<boolean>(false)\n const slippageAdjustedAmounts = useMemo(\n () => computeSlippageAdjustedAmounts(trade, allowedSlippage),\n [allowedSlippage, trade],\n )\n const { priceImpactWithoutFee, realizedLPFee } = useMemo(() => computeTradePriceBreakdown(trade), [trade])\n const severity = warningSeverity(priceImpactWithoutFee)\n\n const totalFeePercent = `${(TOTAL_FEE * 100).toFixed(2)}%`\n const lpHoldersFeePercent = `${(LP_HOLDERS_FEE * 100).toFixed(2)}%`\n const treasuryFeePercent = `${(TREASURY_FEE * 100).toFixed(4)}%`\n const buyBackFeePercent = `${(BUYBACK_FEE * 100).toFixed(4)}%`\n\n return (\n <>\n <SwapModalFooterContainer>\n <RowBetween align=\"center\">\n <Text fontSize=\"14px\">{t('Price')}</Text>\n <Text\n fontSize=\"14px\"\n style={{\n justifyContent: 'center',\n alignItems: 'center',\n display: 'flex',\n textAlign: 'right',\n paddingLeft: '10px',\n }}\n >\n {formatExecutionPrice(trade, showInverted)}\n <StyledBalanceMaxMini onClick={() => setShowInverted(!showInverted)}>\n <AutoRenewIcon width=\"14px\" />\n </StyledBalanceMaxMini>\n </Text>\n </RowBetween>\n\n <RowBetween>\n <RowFixed>\n <Text fontSize=\"14px\">\n {trade.tradeType === TradeType.EXACT_INPUT ? t('Minimum received') : t('Maximum sold')}\n </Text>\n <QuestionHelper\n text={t(\n 'Your transaction will revert if there is a large, unfavorable price movement before it is confirmed.',\n )}\n ml=\"4px\"\n />\n </RowFixed>\n <RowFixed>\n <Text fontSize=\"14px\">\n {trade.tradeType === TradeType.EXACT_INPUT\n ? slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(4) ?? '-'\n : slippageAdjustedAmounts[Field.INPUT]?.toSignificant(4) ?? '-'}\n </Text>\n <Text fontSize=\"14px\" marginLeft=\"4px\">\n {trade.tradeType === TradeType.EXACT_INPUT\n ? trade.outputAmount.currency.symbol\n : trade.inputAmount.currency.symbol}\n </Text>\n </RowFixed>\n </RowBetween>\n <RowBetween>\n <RowFixed>\n <Text fontSize=\"14px\">{t('Price Impact')}</Text>\n <QuestionHelper\n text={t('The difference between the market price and your price due to trade size.')}\n ml=\"4px\"\n />\n </RowFixed>\n <FormattedPriceImpact priceImpact={priceImpactWithoutFee} />\n </RowBetween>\n <RowBetween>\n <RowFixed>\n <Text fontSize=\"14px\">{t('Liquidity Provider Fee')}</Text>\n <QuestionHelper\n text={\n <>\n <Text mb=\"12px\">{t('For each trade a %amount% fee is paid', { amount: totalFeePercent })}</Text>\n <Text>- {t('%amount% to LP token holders', { amount: lpHoldersFeePercent })}</Text>\n <Text>- {t('%amount% to the Treasury', { amount: treasuryFeePercent })}</Text>\n <Text>- {t('%amount% towards SWAP buyback and burn', { amount: buyBackFeePercent })}</Text>\n </>\n }\n ml=\"4px\"\n />\n </RowFixed>\n <Text fontSize=\"14px\">\n {realizedLPFee ? `${realizedLPFee?.toSignificant(6)} ${trade.inputAmount.currency.symbol}` : '-'}\n </Text>\n </RowBetween>\n </SwapModalFooterContainer>\n\n <AutoRow>\n <Button\n variant={severity > 2 ? 'danger' : 'primary'}\n onClick={onConfirm}\n disabled={disabledConfirm}\n mt=\"12px\"\n id=\"confirm-swap-or-send\"\n width=\"100%\"\n >\n {severity > 2 ? t('Swap Anyway') : t('Confirm Swap')}\n </Button>\n\n {swapErrorMessage ? <SwapCallbackError error={swapErrorMessage} /> : null}\n </AutoRow>\n </>\n )\n}\n","import { useMemo } from 'react'\nimport { Trade, TradeType } from '@pancakeswap/sdk'\nimport { Button, Text, ErrorIcon, ArrowDownIcon } from '@pancakeswap/uikit'\nimport { Field } from 'state/swap/actions'\nimport { useTranslation } from 'contexts/Localization'\nimport { computeTradePriceBreakdown, warningSeverity, computeSlippageAdjustedAmounts } from 'utils/exchange'\nimport { AutoColumn } from 'components/Layout/Column'\nimport { CurrencyLogo } from 'components/Logo'\nimport { RowBetween, RowFixed } from 'components/Layout/Row'\nimport truncateHash from 'utils/truncateHash'\nimport { TruncatedText, SwapShowAcceptChanges } from './styleds'\n\nexport default function SwapModalHeader({\n trade,\n allowedSlippage,\n recipient,\n showAcceptChanges,\n onAcceptChanges,\n}: {\n trade: Trade\n allowedSlippage: number\n recipient: string | null\n showAcceptChanges: boolean\n onAcceptChanges: () => void\n}) {\n const { t } = useTranslation()\n const slippageAdjustedAmounts = useMemo(\n () => computeSlippageAdjustedAmounts(trade, allowedSlippage),\n [trade, allowedSlippage],\n )\n const { priceImpactWithoutFee } = useMemo(() => computeTradePriceBreakdown(trade), [trade])\n const priceImpactSeverity = warningSeverity(priceImpactWithoutFee)\n\n const amount =\n trade.tradeType === TradeType.EXACT_INPUT\n ? slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(6)\n : slippageAdjustedAmounts[Field.INPUT]?.toSignificant(6)\n const symbol =\n trade.tradeType === TradeType.EXACT_INPUT ? trade.outputAmount.currency.symbol : trade.inputAmount.currency.symbol\n\n const tradeInfoText =\n trade.tradeType === TradeType.EXACT_INPUT\n ? t('Output is estimated. You will receive at least %amount% %symbol% or the transaction will revert.', {\n amount,\n symbol,\n })\n : t('Input is estimated. You will sell at most %amount% %symbol% or the transaction will revert.', {\n amount,\n symbol,\n })\n\n const [estimatedText, transactionRevertText] = tradeInfoText.split(`${amount} ${symbol}`)\n\n const truncatedRecipient = recipient ? truncateHash(recipient) : ''\n\n const recipientInfoText = t('Output will be sent to %recipient%', {\n recipient: truncatedRecipient,\n })\n\n const [recipientSentToText, postSentToText] = recipientInfoText.split(truncatedRecipient)\n\n return (\n <AutoColumn gap=\"md\">\n <RowBetween align=\"flex-end\">\n <RowFixed gap=\"0px\">\n <CurrencyLogo currency={trade.inputAmount.currency} size=\"24px\" style={{ marginRight: '12px' }} />\n <TruncatedText\n fontSize=\"18px\"\n color={showAcceptChanges && trade.tradeType === TradeType.EXACT_OUTPUT ? 'primary' : 'text'}\n >\n {trade.inputAmount.toSignificant(6)}\n </TruncatedText>\n </RowFixed>\n <RowFixed gap=\"0px\">\n <Text fontSize=\"18px\" ml=\"10px\">\n {trade.inputAmount.currency.symbol}\n </Text>\n </RowFixed>\n </RowBetween>\n <RowFixed>\n <ArrowDownIcon width=\"16px\" ml=\"4px\" />\n </RowFixed>\n <RowBetween align=\"flex-end\">\n <RowFixed gap=\"0px\">\n <CurrencyLogo currency={trade.outputAmount.currency} size=\"24px\" style={{ marginRight: '12px' }} />\n <TruncatedText\n fontSize=\"18px\"\n color={\n priceImpactSeverity > 2\n ? 'failure'\n : showAcceptChanges && trade.tradeType === TradeType.EXACT_INPUT\n ? 'primary'\n : 'text'\n }\n >\n {trade.outputAmount.toSignificant(6)}\n </TruncatedText>\n </RowFixed>\n <RowFixed gap=\"0px\">\n <Text fontSize=\"18px\" ml=\"10px\">\n {trade.outputAmount.currency.symbol}\n </Text>\n </RowFixed>\n </RowBetween>\n {showAcceptChanges ? (\n <SwapShowAcceptChanges justify=\"flex-start\" gap=\"0px\">\n <RowBetween>\n <RowFixed>\n <ErrorIcon mr=\"8px\" />\n <Text bold> {t('Price Updated')}</Text>\n </RowFixed>\n <Button onClick={onAcceptChanges}>{t('Accept')}</Button>\n </RowBetween>\n </SwapShowAcceptChanges>\n ) : null}\n <AutoColumn justify=\"flex-start\" gap=\"sm\" style={{ padding: '24px 0 0 0px' }}>\n <Text small color=\"textSubtle\" textAlign=\"left\" style={{ width: '100%' }}>\n {estimatedText}\n <b>\n {amount} {symbol}\n </b>\n {transactionRevertText}\n </Text>\n </AutoColumn>\n {recipient !== null ? (\n <AutoColumn justify=\"flex-start\" gap=\"sm\" style={{ padding: '12px 0 0 0px' }}>\n <Text color=\"textSubtle\">\n {recipientSentToText}\n <b title={recipient}>{truncatedRecipient}</b>\n {postSentToText}\n </Text>\n </AutoColumn>\n ) : null}\n </AutoColumn>\n )\n}\n","import { useCallback, useMemo } from 'react'\nimport { currencyEquals, Trade } from '@pancakeswap/sdk'\nimport { InjectedModalProps } from '@pancakeswap/uikit'\nimport { useTranslation } from 'contexts/Localization'\nimport TransactionConfirmationModal, {\n ConfirmationModalContent,\n TransactionErrorContent,\n} from 'components/TransactionConfirmationModal'\nimport SwapModalFooter from './SwapModalFooter'\nimport SwapModalHeader from './SwapModalHeader'\n\n/**\n * Returns true if the trade requires a confirmation of details before we can submit it\n * @param tradeA trade A\n * @param tradeB trade B\n */\nfunction tradeMeaningfullyDiffers(tradeA: Trade, tradeB: Trade): boolean {\n return (\n tradeA.tradeType !== tradeB.tradeType ||\n !currencyEquals(tradeA.inputAmount.currency, tradeB.inputAmount.currency) ||\n !tradeA.inputAmount.equalTo(tradeB.inputAmount) ||\n !currencyEquals(tradeA.outputAmount.currency, tradeB.outputAmount.currency) ||\n !tradeA.outputAmount.equalTo(tradeB.outputAmount)\n )\n}\ninterface ConfirmSwapModalProps {\n trade?: Trade\n originalTrade?: Trade\n attemptingTxn: boolean\n txHash?: string\n recipient: string | null\n allowedSlippage: number\n onAcceptChanges: () => void\n onConfirm: () => void\n swapErrorMessage?: string\n customOnDismiss?: () => void\n}\n\nconst ConfirmSwapModal: React.FC<InjectedModalProps & ConfirmSwapModalProps> = ({\n trade,\n originalTrade,\n onAcceptChanges,\n allowedSlippage,\n onConfirm,\n onDismiss,\n customOnDismiss,\n recipient,\n swapErrorMessage,\n attemptingTxn,\n txHash,\n}) => {\n const showAcceptChanges = useMemo(\n () => Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)),\n [originalTrade, trade],\n )\n\n const { t } = useTranslation()\n\n const modalHeader = useCallback(() => {\n return trade ? (\n <SwapModalHeader\n trade={trade}\n allowedSlippage={allowedSlippage}\n recipient={recipient}\n showAcceptChanges={showAcceptChanges}\n onAcceptChanges={onAcceptChanges}\n />\n ) : null\n }, [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade])\n\n const modalBottom = useCallback(() => {\n return trade ? (\n <SwapModalFooter\n onConfirm={onConfirm}\n trade={trade}\n disabledConfirm={showAcceptChanges}\n swapErrorMessage={swapErrorMessage}\n allowedSlippage={allowedSlippage}\n />\n ) : null\n }, [allowedSlippage, onConfirm, showAcceptChanges, swapErrorMessage, trade])\n\n // text to show while loading\n const pendingText = t('Swapping %amountA% %symbolA% for %amountB% %symbolB%', {\n amountA: trade?.inputAmount?.toSignificant(6) ?? '',\n symbolA: trade?.inputAmount?.currency?.symbol ?? '',\n amountB: trade?.outputAmount?.toSignificant(6) ?? '',\n symbolB: trade?.outputAmount?.currency?.symbol ?? '',\n })\n\n const confirmationContent = useCallback(\n () =>\n swapErrorMessage ? (\n <TransactionErrorContent onDismiss={onDismiss} message={swapErrorMessage} />\n ) : (\n <ConfirmationModalContent topContent={modalHeader} bottomContent={modalBottom} />\n ),\n [onDismiss, modalBottom, modalHeader, swapErrorMessage],\n )\n\n return (\n <TransactionConfirmationModal\n title={t('Confirm Swap')}\n onDismiss={onDismiss}\n customOnDismiss={customOnDismiss}\n attemptingTxn={attemptingTxn}\n hash={txHash}\n content={confirmationContent}\n pendingText={pendingText}\n currencyToAdd={trade?.outputAmount.currency}\n />\n )\n}\n\nexport default ConfirmSwapModal\n","import { useEffect, useState } from 'react'\n\n/**\n * Returns the last value of type T that passes a filter function\n * @param value changing value\n * @param filterFn function that determines whether a given value should be considered for the last value\n */\nfunction useLast<T>(\n value: T | undefined | null,\n filterFn?: (value: T | null | undefined) => boolean,\n): T | null | undefined {\n const [last, setLast] = useState<T | null | undefined>(() => (filterFn && filterFn(value) ? value : undefined))\n useEffect(() => {\n setLast((prev) => {\n const shouldUse: boolean = filterFn ? filterFn(value) : true\n if (shouldUse) return value\n return prev\n })\n }, [filterFn, value])\n return last\n}\n\nfunction isDefined<T>(x: T | null | undefined): x is T {\n return x !== null && x !== undefined\n}\n\n/**\n * Returns the last truthy value of type T\n * @param value changing value\n */\nfunction useLastTruthy<T>(value: T | undefined | null): T | null | undefined {\n return useLast(value, isDefined)\n}\n\nexport default useLastTruthy\n","import { Fragment, memo } from 'react'\nimport { Trade } from '@pancakeswap/sdk'\nimport { Text, Flex, ChevronRightIcon } from '@pancakeswap/uikit'\nimport { unwrappedToken } from 'utils/wrappedCurrency'\n\nexport default memo(function SwapRoute({ trade }: { trade: Trade }) {\n return (\n <Flex flexWrap=\"wrap\" width=\"100%\" justifyContent=\"flex-end\" alignItems=\"center\">\n {trade.route.path.map((token, i, path) => {\n const isLastItem: boolean = i === path.length - 1\n const currency = unwrappedToken(token)\n return (\n // eslint-disable-next-line react/no-array-index-key\n <Fragment key={i}>\n <Flex alignItems=\"end\">\n <Text fontSize=\"12px\" ml=\"0.125rem\" mr=\"0.125rem\">\n {currency.symbol}\n </Text>\n </Flex>\n {!isLastItem && <ChevronRightIcon width=\"12px\" />}\n </Fragment>\n )\n })}\n </Flex>\n )\n})\n","import { Trade, TradeType } from '@pancakeswap/sdk'\nimport { Text } from '@pancakeswap/uikit'\nimport { Field } from 'state/swap/actions'\nimport { useTranslation } from 'contexts/Localization'\nimport { useUserSlippageTolerance } from 'state/user/hooks'\nimport { computeSlippageAdjustedAmounts, computeTradePriceBreakdown } from 'utils/exchange'\nimport { AutoColumn } from 'components/Layout/Column'\nimport QuestionHelper from 'components/QuestionHelper'\nimport { TOTAL_FEE, LP_HOLDERS_FEE, TREASURY_FEE, BUYBACK_FEE } from 'config/constants/info'\nimport { RowBetween, RowFixed } from 'components/Layout/Row'\nimport FormattedPriceImpact from './FormattedPriceImpact'\nimport SwapRoute from './SwapRoute'\n\nfunction TradeSummary({ trade, allowedSlippage }: { trade: Trade; allowedSlippage: number }) {\n const { t } = useTranslation()\n const { priceImpactWithoutFee, realizedLPFee } = computeTradePriceBreakdown(trade)\n const isExactIn = trade.tradeType === TradeType.EXACT_INPUT\n const slippageAdjustedAmounts = computeSlippageAdjustedAmounts(trade, allowedSlippage)\n\n const totalFeePercent = `${(TOTAL_FEE * 100).toFixed(2)}%`\n const lpHoldersFeePercent = `${(LP_HOLDERS_FEE * 100).toFixed(2)}%`\n const treasuryFeePercent = `${(TREASURY_FEE * 100).toFixed(4)}%`\n const buyBackFeePercent = `${(BUYBACK_FEE * 100).toFixed(4)}%`\n\n return (\n <AutoColumn style={{ padding: '0 16px' }}>\n <RowBetween>\n <RowFixed>\n <Text fontSize=\"12px\" color=\"textSubtle\">\n {isExactIn ? t('Minimum received') : t('Maximum sold')}\n </Text>\n <QuestionHelper\n text={t(\n 'Your transaction will revert if there is a large, unfavorable price movement before it is confirmed.',\n )}\n ml=\"4px\"\n placement=\"top-start\"\n />\n </RowFixed>\n <RowFixed>\n <Text fontSize=\"12px\">\n {isExactIn\n ? `${slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(4)} ${trade.outputAmount.currency.symbol}` ??\n '-'\n : `${slippageAdjustedAmounts[Field.INPUT]?.toSignificant(4)} ${trade.inputAmount.currency.symbol}` ?? '-'}\n </Text>\n </RowFixed>\n </RowBetween>\n <RowBetween>\n <RowFixed>\n <Text fontSize=\"12px\" color=\"textSubtle\">\n {t('Price Impact')}\n </Text>\n <QuestionHelper\n text={t('The difference between the market price and estimated price due to trade size.')}\n ml=\"4px\"\n placement=\"top-start\"\n />\n </RowFixed>\n <FormattedPriceImpact priceImpact={priceImpactWithoutFee} />\n </RowBetween>\n\n <RowBetween>\n <RowFixed>\n <Text fontSize=\"12px\" color=\"textSubtle\">\n {t('Liquidity Provider Fee')}\n </Text>\n <QuestionHelper\n text={\n <>\n <Text mb=\"12px\">{t('For each trade a %amount% fee is paid', { amount: totalFeePercent })}</Text>\n <Text>- {t('%amount% to LP token holders', { amount: lpHoldersFeePercent })}</Text>\n <Text>- {t('%amount% to the Treasury', { amount: treasuryFeePercent })}</Text>\n <Text>- {t('%amount% towards SWAP buyback and burn', { amount: buyBackFeePercent })}</Text>\n </>\n }\n ml=\"4px\"\n placement=\"top-start\"\n />\n </RowFixed>\n <Text fontSize=\"12px\">\n {realizedLPFee ? `${realizedLPFee.toSignificant(4)} ${trade.inputAmount.currency.symbol}` : '-'}\n </Text>\n </RowBetween>\n </AutoColumn>\n )\n}\n\nexport interface AdvancedSwapDetailsProps {\n trade?: Trade\n}\n\nexport function AdvancedSwapDetails({ trade }: AdvancedSwapDetailsProps) {\n const { t } = useTranslation()\n const [allowedSlippage] = useUserSlippageTolerance()\n\n const showRoute = Boolean(trade && trade.route.path.length > 2)\n\n return (\n <AutoColumn gap=\"0px\">\n {trade && (\n <>\n <TradeSummary trade={trade} allowedSlippage={allowedSlippage} />\n {showRoute && (\n <>\n <RowBetween style={{ padding: '0 16px' }}>\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <Text fontSize=\"12px\" color=\"textSubtle\">\n {t('Route')}\n </Text>\n <QuestionHelper\n text={t('Routing through these tokens resulted in the best price for your trade.')}\n ml=\"4px\"\n placement=\"top-start\"\n />\n </span>\n <SwapRoute trade={trade} />\n </RowBetween>\n </>\n )}\n </>\n )}\n </AutoColumn>\n )\n}\n","import styled from 'styled-components'\nimport useLastTruthy from 'hooks/useLast'\nimport { AdvancedSwapDetails, AdvancedSwapDetailsProps } from './AdvancedSwapDetails'\n\nconst AdvancedDetailsFooter = styled.div<{ show: boolean }>`\n margin-top: ${({ show }) => (show ? '16px' : 0)};\n padding-top: 16px;\n padding-bottom: 16px;\n width: 100%;\n max-width: 400px;\n border-radius: 20px;\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n\n transform: ${({ show }) => (show ? 'translateY(0%)' : 'translateY(-100%)')};\n transition: transform 300ms ease-in-out;\n`\n\nexport default function AdvancedSwapDetailsDropdown({ trade, ...rest }: AdvancedSwapDetailsProps) {\n const lastTrade = useLastTruthy(trade)\n\n return (\n <AdvancedDetailsFooter show={Boolean(trade)}>\n <AdvancedSwapDetails {...rest} trade={trade ?? lastTrade ?? undefined} />\n </AdvancedDetailsFooter>\n )\n}\n","import { Price } from '@pancakeswap/sdk'\nimport { Text, AutoRenewIcon } from '@pancakeswap/uikit'\nimport { StyledBalanceMaxMini } from './styleds'\n\ninterface TradePriceProps {\n price?: Price\n showInverted: boolean\n setShowInverted: (showInverted: boolean) => void\n}\n\nexport default function TradePrice({ price, showInverted, setShowInverted }: TradePriceProps) {\n const formattedPrice = showInverted ? price?.toSignificant(6) : price?.invert()?.toSignificant(6)\n\n const show = Boolean(price?.baseCurrency && price?.quoteCurrency)\n const label = showInverted\n ? `${price?.quoteCurrency?.symbol} per ${price?.baseCurrency?.symbol}`\n : `${price?.baseCurrency?.symbol} per ${price?.quoteCurrency?.symbol}`\n\n return (\n <Text style={{ justifyContent: 'center', fontSize : '12px' , alignItems: 'center', display: 'flex' }}>\n {show ? (\n <>\n {formattedPrice ?? '-'} {label}\n <StyledBalanceMaxMini onClick={() => setShowInverted(!showInverted)}>\n <AutoRenewIcon width=\"14px\" />\n </StyledBalanceMaxMini>\n </>\n ) : (\n '-'\n )}\n </Text>\n )\n}\n","import styled from 'styled-components'\nimport { RowBetween } from 'components/Layout/Row'\nimport { AutoColumn } from 'components/Layout/Column'\n\nconst Grouping = styled(RowBetween)`\n width: 50%;\n`\n\nconst Circle = styled.div<{ confirmed?: boolean; disabled?: boolean }>`\n min-width: 20px;\n min-height: 20px;\n background-color: ${({ theme, confirmed, disabled }) =>\n disabled ? theme.colors.backgroundDisabled : confirmed ? theme.colors.success : theme.colors.primary};\n border-radius: 50%;\n color: #ffffff;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 8px;\n font-size: 12px;\n`\n\nconst CircleRow = styled.div`\n width: calc(100% - 20px);\n display: flex;\n align-items: center;\n`\n\nconst Connector = styled.div<{ prevConfirmed?: boolean; disabled?: boolean }>`\n width: 100%;\n height: 2px;\n background: linear-gradient(\n 90deg,\n ${({ theme, prevConfirmed, disabled }) =>\n disabled ? theme.colors.backgroundDisabled : prevConfirmed ? theme.colors.success : theme.colors.primary}\n 0%,\n ${({ theme, prevConfirmed, disabled }) =>\n disabled\n ? theme.colors.backgroundDisabled\n : prevConfirmed\n ? theme.colors.primary\n : theme.colors.backgroundDisabled}\n 80%\n );\n opacity: 0.6;\n`\n\ninterface ProgressCirclesProps {\n steps: boolean[]\n disabled?: boolean\n}\n\n/**\n * Based on array of steps, create a step counter of circles.\n * A circle can be enabled, disabled, or confirmed. States are derived\n * from previous step.\n *\n * An extra circle is added to represent the ability to swap, add, or remove.\n * This step will never be marked as complete (because no 'txn done' state in body ui).\n *\n * @param steps array of booleans where true means step is complete\n */\nexport default function ProgressCircles({ steps, disabled = false, ...rest }: ProgressCirclesProps) {\n return (\n <AutoColumn justify=\"center\" {...rest}>\n <Grouping>\n {steps.map((step, i) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <CircleRow key={i}>\n <Circle confirmed={step} disabled={disabled || (!steps[i - 1] && i !== 0)}>\n {step ? '✓' : i + 1}\n </Circle>\n <Connector prevConfirmed={step} disabled={disabled} />\n </CircleRow>\n )\n })}\n <Circle disabled={disabled || !steps[steps.length - 1]}>{steps.length + 1}</Circle>\n </Grouping>\n </AutoColumn>\n )\n}\n","/**\n * Returns true if the string value is zero in hex\n * @param hexNumberString\n */\nexport default function isZero(hexNumberString: string) {\n return /^0x0*$/.test(hexNumberString)\n}\n","import { Contract } from '@ethersproject/contracts'\nimport { JSBI, Percent, Router, SwapParameters, Trade, TradeType } from '@pancakeswap/sdk'\nimport { useAccount, useNetwork } from 'wagmi'\nimport { getChainId , BIPS_BASE } from 'config/constants/exchange'\nimport { useMemo } from 'react'\nimport { INITIAL_ALLOWED_SLIPPAGE } from 'config/constants'\nimport { getRouterContract } from 'utils/exchange'\nimport useTransactionDeadline from './useTransactionDeadline'\nimport { useEthersSigner } from './useEthersProvider'\n\ninterface SwapCall {\n contract: Contract\n parameters: SwapParameters\n}\n\n/**\n * Returns the swap calls that can be used to make the trade\n * @param trade trade to execute\n * @param allowedSlippage user allowed slippage\n * @param recipientAddressOrName\n */\nexport function useSwapCallArguments(\n trade: Trade | undefined, // trade to execute, required\n allowedSlippage: number = INITIAL_ALLOWED_SLIPPAGE, // in bips\n recipientAddress: string | null, // the address of the recipient of the trade, or null if swap should be returned to sender\n): SwapCall[] {\n const { address: account } = useAccount()\n const { chain } = useNetwork()\n const chainId = getChainId(chain);\n const library = useEthersSigner()\n\n const recipient = recipientAddress === null ? account : recipientAddress\n const deadline = useTransactionDeadline()\n\n return useMemo(() => {\n if (!trade || !recipient || !library || !account || !chainId || !deadline) return []\n\n const contract = getRouterContract(chainId, library, account)\n if (!contract) {\n return []\n }\n\n const swapMethods = []\n\n swapMethods.push(\n Router.swapCallParameters(trade, {\n feeOnTransfer: false,\n allowedSlippage: new Percent(JSBI.BigInt(allowedSlippage), BIPS_BASE),\n recipient,\n deadline: deadline.toNumber(),\n }),\n )\n\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n swapMethods.push(\n Router.swapCallParameters(trade, {\n feeOnTransfer: true,\n allowedSlippage: new Percent(JSBI.BigInt(allowedSlippage), BIPS_BASE),\n recipient,\n deadline: deadline.toNumber(),\n }),\n )\n }\n\n return swapMethods.map((parameters) => ({ parameters, contract }))\n }, [account, allowedSlippage, chainId, deadline, library, recipient, trade])\n}\n","import { BigNumber } from '@ethersproject/bignumber'\nimport { Contract } from '@ethersproject/contracts'\nimport { SwapParameters, Trade } from '@pancakeswap/sdk'\nimport { useTranslation } from 'contexts/Localization'\nimport { useAccount, useNetwork } from 'wagmi'\nimport { getChainId } from 'config/constants/exchange'\nimport { useMemo } from 'react'\nimport { useGasPrice } from 'state/user/hooks'\nimport truncateHash from 'utils/truncateHash'\nimport { INITIAL_ALLOWED_SLIPPAGE } from '../config/constants'\nimport { useTransactionAdder } from '../state/transactions/hooks'\nimport { calculateGasMargin, isAddress } from '../utils'\nimport isZero from '../utils/isZero'\nimport { useSwapCallArguments } from './useSwapCallArguments'\nimport { transactionErrorToUserReadableMessage } from '../utils/transactionErrorToUserReadableMessage'\nimport { useEthersSigner } from './useEthersProvider'\n\nexport enum SwapCallbackState {\n INVALID,\n LOADING,\n VALID,\n}\n\ninterface SwapCall {\n contract: Contract\n parameters: SwapParameters\n}\n\ninterface SuccessfulCall extends SwapCallEstimate {\n gasEstimate: BigNumber\n}\n\ninterface FailedCall extends SwapCallEstimate {\n error: string\n}\n\ninterface SwapCallEstimate {\n call: SwapCall\n}\n\n// returns a function that will execute a swap, if the parameters are all valid\n// and the user has approved the slippage adjusted input amount for the trade\nexport function useSwapCallback(\n trade: Trade | undefined, // trade to execute, required\n allowedSlippage: number = INITIAL_ALLOWED_SLIPPAGE, // in bips\n recipientAddress: string | null, // the address of the recipient of the trade, or null if swap should be returned to sender\n): { state: SwapCallbackState; callback: null | (() => Promise<string>); error: string | null } {\n const { address: account } = useAccount()\n const { chain } = useNetwork()\n const chainId = getChainId(chain);\n const library = useEthersSigner()\n const gasPrice = useGasPrice()\n\n const swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddress)\n\n const { t } = useTranslation()\n\n const addTransaction = useTransactionAdder()\n\n const recipient = recipientAddress === null ? account : recipientAddress\n\n return useMemo(() => {\n if (!trade || !library || !account || !chainId) {\n return { state: SwapCallbackState.INVALID, callback: null, error: 'Missing dependencies' }\n }\n if (!recipient) {\n if (recipientAddress !== null) {\n return { state: SwapCallbackState.INVALID, callback: null, error: 'Invalid recipient' }\n }\n return { state: SwapCallbackState.LOADING, callback: null, error: null }\n }\n\n return {\n state: SwapCallbackState.VALID,\n callback: async function onSwap(): Promise<string> {\n const estimatedCalls: SwapCallEstimate[] = await Promise.all(\n swapCalls.map((call) => {\n \n const {\n parameters: { methodName, args, value },\n contract,\n } = call\n const options = !value || isZero(value) ? {} : { value }\n \n return contract.estimateGas[methodName](...args, options)\n .then((gasEstimate) => {\n return {\n call,\n gasEstimate,\n }\n })\n .catch((gasError) => {\n console.error('Gas estimate failed, trying eth_call to extract error', call)\n\n return contract.callStatic[methodName](...args, options)\n .then((result) => {\n console.error('Unexpected successful call after failed estimate gas', call, gasError, result)\n return { call, error: t('Unexpected issue with estimating the gas. Please try again.') }\n })\n .catch((callError) => {\n console.error('Call threw error', call, callError)\n\n return { call, error: transactionErrorToUserReadableMessage(callError, t) }\n })\n })\n }),\n )\n\n // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate\n const successfulEstimation = estimatedCalls.find(\n (el, ix, list): el is SuccessfulCall =>\n 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1]),\n )\n\n if (!successfulEstimation) {\n const errorCalls = estimatedCalls.filter((call): call is FailedCall => 'error' in call)\n if (errorCalls.length > 0) throw new Error(errorCalls[errorCalls.length - 1].error)\n throw new Error(t('Unexpected error. Could not estimate gas for the swap.'))\n }\n\n const {\n call: {\n contract,\n parameters: { methodName, args, value },\n },\n gasEstimate,\n } = successfulEstimation\n\n return contract[methodName](...args, {\n gasLimit: calculateGasMargin(gasEstimate),\n gasPrice,\n ...(value && !isZero(value) ? { value, from: account } : { from: account }),\n })\n .then((response: any) => {\n const inputSymbol = trade.inputAmount.currency.symbol\n const outputSymbol = trade.outputAmount.currency.symbol\n const inputAmount = trade.inputAmount.toSignificant(3)\n const outputAmount = trade.outputAmount.toSignificant(3)\n\n const base = `Swap ${inputAmount} ${inputSymbol} for ${outputAmount} ${outputSymbol}`\n const withRecipient =\n recipient === account\n ? base\n : `${base} to ${recipientAddress && isAddress(recipientAddress) ? truncateHash(recipientAddress) : recipientAddress\n }`\n\n addTransaction(response, {\n summary: withRecipient,\n type: 'swap',\n })\n\n return response.hash\n })\n .catch((error: any) => {\n // if the user rejected the tx, pass this along\n if (error?.code === 4001) {\n throw new Error('Transaction rejected.')\n } else {\n // otherwise, the error was unexpected and we need to convey that\n console.error(`Swap failed`, error, methodName, args, value)\n throw new Error(t('Swap failed: %message%', { message: transactionErrorToUserReadableMessage(error, t) }))\n }\n })\n },\n error: null,\n }\n }, [trade, library, account, chainId, recipient, recipientAddress, swapCalls, gasPrice, t, addTransaction])\n}\n","import { Currency, currencyEquals, ETHER, WNATIVE } from '@pancakeswap/sdk'\nimport { useMemo } from 'react'\nimport { useAccount, useNetwork } from 'wagmi'\nimport { getChainId } from 'config/constants/exchange'\nimport { useTranslation } from 'contexts/Localization'\nimport tryParseAmount from 'utils/tryParseAmount'\nimport { useTransactionAdder } from '../state/transactions/hooks'\nimport { useCurrencyBalance } from '../state/wallet/hooks'\nimport { useWCLDContract } from './useContract'\nimport { useCallWithGasPrice } from './useCallWithGasPrice'\n\nexport enum WrapType {\n NOT_APPLICABLE,\n WRAP,\n UNWRAP,\n}\n\nconst NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE }\n/**\n * Given the selected input and output currency, return a wrap callback\n * @param inputCurrency the selected input currency\n * @param outputCurrency the selected output currency\n * @param typedValue the user input value\n */\nexport default function useWrapCallback(\n inputCurrency: Currency | undefined,\n outputCurrency: Currency | undefined,\n typedValue: string | undefined,\n): { wrapType: WrapType; execute?: undefined | (() => Promise<void>); inputError?: string } {\n const { t } = useTranslation()\n const { address: account } = useAccount()\n const { chain } = useNetwork()\n const chainId = getChainId(chain);\n const { callWithGasPrice } = useCallWithGasPrice()\n const wbnbContract = useWCLDContract()\n const balance = useCurrencyBalance(account ?? undefined, inputCurrency)\n // we can always parse the amount typed as the input currency, since wrapping is 1:1\n const inputAmount = useMemo(() => tryParseAmount(typedValue, inputCurrency), [inputCurrency, typedValue])\n const addTransaction = useTransactionAdder()\n\n return useMemo(() => {\n if (!wbnbContract || !chainId || !inputCurrency || !outputCurrency) return NOT_APPLICABLE\n\n const sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount)\n\n if (inputCurrency === ETHER && currencyEquals(WNATIVE[chainId], outputCurrency)) {\n return {\n wrapType: WrapType.WRAP,\n execute:\n sufficientBalance && inputAmount\n ? async () => {\n try {\n const txReceipt = await callWithGasPrice(wbnbContract, 'deposit', undefined, {\n value: `0x${inputAmount.raw.toString(16)}`,\n })\n addTransaction(txReceipt, {\n summary: `Wrap ${inputAmount.toSignificant(6)} ETH to WETH`,\n type: 'wrap',\n })\n } catch (error) {\n console.error('Could not deposit', error)\n }\n }\n : undefined,\n inputError: sufficientBalance ? undefined : t('Insufficient ETH balance'),\n }\n }\n if (currencyEquals(WNATIVE[chainId], inputCurrency) && outputCurrency === ETHER) {\n return {\n wrapType: WrapType.UNWRAP,\n execute:\n sufficientBalance && inputAmount\n ? async () => {\n try {\n const txReceipt = await callWithGasPrice(wbnbContract, 'withdraw', [\n `0x${inputAmount.raw.toString(16)}`,\n ])\n addTransaction(txReceipt, { summary: `Unwrap ${inputAmount.toSignificant(6)} WETH to ETH` })\n } catch (error) {\n console.error('Could not withdraw', error)\n }\n }\n : undefined,\n inputError: sufficientBalance ? undefined : t('Insufficient WETH balance'),\n }\n }\n return NOT_APPLICABLE\n }, [wbnbContract, chainId, inputCurrency, outputCurrency, t, inputAmount, balance, addTransaction, callWithGasPrice])\n}\n","import { useTranslation } from 'contexts/Localization'\nimport { Text, Link } from '@pancakeswap/uikit'\n\nconst SafemoonWarning = () => {\n const { t } = useTranslation()\n\n // Break translation sentences into pieces because the current translation approach doesn't support Link interpolation.\n return (\n <>\n <Text>\n {t('SAFEMOON has been migrated to')}{' '}\n <Link\n style={{ display: 'inline' }}\n external\n href=\"https://bscscan.com/address/0x42981d0bfbAf196529376EE702F2a9Eb9092fcB5\"\n >\n {t('a new contract address.')}\n </Link>{' '}\n {t(\n 'Trading on the old address may result in the complete loss of your assets. For more information please refer to',\n )}{' '}\n <Link style={{ display: 'inline' }} external href=\"https://twitter.com/safemoon/status/1477770592031887360\">\n {t(\"Safemoon's announcement\")}.\n </Link>\n </Text>\n </>\n )\n}\n\nexport default SafemoonWarning\n","import { useTranslation } from 'contexts/Localization'\nimport { Text, Link } from '@pancakeswap/uikit'\n\nconst ItamWarning = () => {\n const { t } = useTranslation()\n\n return (\n <>\n <Text>\n {t('ITAM has been rebranded as ITAM CUBE.')}{' '}\n <Link style={{ display: 'inline' }} external href=\"https://itam.network/swap\">\n {t('Please proceed to ITAM bridge to conduct a one-way swap of your ITAM tokens.')}\n </Link>{' '}\n {t('All transfers of the old ITAM token will be disabled after the swap.')}\n </Text>\n </>\n )\n}\n\nexport default ItamWarning\n","import { Text } from '@pancakeswap/uikit'\nimport { useTranslation } from 'contexts/Localization'\n\nconst BondlyWarning = () => {\n const { t } = useTranslation()\n\n return <Text>{t('Warning: BONDLY has been compromised. Please remove liquidity until further notice.')}</Text>\n}\n\nexport default BondlyWarning\n","import { useState } from 'react'\nimport { useTranslation } from 'contexts/Localization'\nimport { Text, Flex, Checkbox, Button } from '@pancakeswap/uikit'\n\ninterface AcknowledgementProps {\n handleContinueClick: () => void\n}\n\nconst Acknowledgement: React.FC<AcknowledgementProps> = ({ handleContinueClick }) => {\n const { t } = useTranslation()\n const [isConfirmed, setIsConfirmed] = useState(false)\n\n return (\n <>\n <Flex justifyContent=\"space-between\">\n <Flex alignItems=\"center\">\n <Checkbox\n name=\"confirmed\"\n type=\"checkbox\"\n checked={isConfirmed}\n onChange={() => setIsConfirmed(!isConfirmed)}\n scale=\"sm\"\n />\n <Text ml=\"10px\" style={{ userSelect: 'none' }}>\n {t('I understand')}\n </Text>\n </Flex>\n\n <Button disabled={!isConfirmed} onClick={handleContinueClick}>\n {t('Continue')}\n </Button>\n </Flex>\n </>\n )\n}\n\nexport default Acknowledgement\n","import { useTranslation } from 'contexts/Localization'\nimport { Text, Link } from '@pancakeswap/uikit'\n\nconst CcarWarning = () => {\n const { t } = useTranslation()\n\n return (\n <>\n <Text>\n {t('Crypto Cars (CCAR) has been migrated to')}{' '}\n <Link\n style={{ display: 'inline' }}\n external\n href=\"https://bscscan.com/token/0x322e5015Cc464Ada7f99dE7131CE494dE1834396\"\n >\n {t('a new contract address.')}\n </Link>{' '}\n {t(\n 'Trading on the old address may result in the complete loss of your assets. For more information please refer to',\n )}{' '}\n <Link style={{ display: 'inline' }} external href=\"https://t.me/Crypto_Cars_Official/465037\">\n {t('the announcement.')}\n </Link>\n </Text>\n </>\n )\n}\n\nexport default CcarWarning\n","import { useTranslation } from 'contexts/Localization'\nimport { Text, Link, LinkExternal } from '@pancakeswap/uikit'\n\nconst BTTWarning = () => {\n const { t } = useTranslation()\n\n return (\n <>\n <Text>\n {t(\n 'Please note that this is the old BTT token, which has been swapped to the new BTT tokens in the following ratio:',\n )}\n </Text>\n <Text>1 BTT (OLD) = 1,000 BTT (NEW)</Text>\n <Text mb=\"8px\">\n {t('Trade the new BTT token')}{' '}\n <Link\n style={{ display: 'inline' }}\n href=\"/swap?outputCurrency=0x352Cb5E19b12FC216548a2677bD0fce83BaE434B\"\n >\n {t('here')}\n </Link>\n </Text>\n <LinkExternal href=\"https://medium.com/@BitTorrent/tutorial-how-to-swap-bttold-to-btt-453264d7142\">\n {t('For more details on the swap, please refer here.')}\n </LinkExternal>\n </>\n )\n}\n\nexport default BTTWarning\n","import { useTranslation } from 'contexts/Localization'\nimport { Text } from '@pancakeswap/uikit'\n\nconst RugPullWarning = () => {\n const { t } = useTranslation()\n\n return (\n <>\n <Text>{t('Suspicious rugpull token')}</Text>\n </>\n )\n}\n\nexport default RugPullWarning\n","import { useTranslation } from 'contexts/Localization'\nimport { Text } from '@pancakeswap/uikit'\n\nconst FREEWarning = () => {\n const { t } = useTranslation()\n\n return (\n <>\n <Text>\n {t(\n 'Risk Warning: This token is subject to high price risk. Please do your own research before trading this token. Please also note that as of 24 June 2022 there is also a reflection fee for every transfer of FREE ranging from 2.5 to 5% per trade/transfer.',\n )}\n </Text>\n </>\n )\n}\n\nexport default FREEWarning\n","import styled from 'styled-components'\nimport { ModalBody, ModalContainer, Message, ModalHeader, Box, Heading } from '@pancakeswap/uikit'\nimport useTheme from 'hooks/useTheme'\nimport { useTranslation } from 'contexts/Localization'\nimport { WrappedTokenInfo } from 'state/types'\nimport SwapWarningTokensConfig from 'config/constants/swapWarningTokens'\nimport SafemoonWarning from './SafemoonWarning'\nimport ItamWarning from './ItamWarning'\nimport BondlyWarning from './BondlyWarning'\nimport Acknowledgement from './Acknowledgement'\nimport CcarWarning from './CcarWarning'\nimport BTTWarning from './BTTWarning'\nimport RugPullWarning from './RugPullWarning'\nimport FREEWarning from './FREEWarning'\n\nconst StyledModalContainer = styled(ModalContainer)`\n max-width: 440px;\n`\n\nconst MessageContainer = styled(Message)`\n align-items: flex-start;\n justify-content: flex-start;\n`\n\ninterface SwapWarningModalProps {\n swapCurrency: WrappedTokenInfo\n onDismiss?: () => void\n}\n\nconst SwapWarningModal: React.FC<SwapWarningModalProps> = ({ swapCurrency, onDismiss }) => {\n const { t } = useTranslation()\n const { theme } = useTheme()\n\n const TOKEN_WARNINGS = {\n [SwapWarningTokensConfig.safemoon.address]: {\n symbol: SwapWarningTokensConfig.safemoon.symbol,\n component: <SafemoonWarning />,\n },\n [SwapWarningTokensConfig.bondly.address]: {\n symbol: SwapWarningTokensConfig.bondly.symbol,\n component: <BondlyWarning />,\n },\n [SwapWarningTokensConfig.itam.address]: {\n symbol: SwapWarningTokensConfig.itam.symbol,\n component: <ItamWarning />,\n },\n [SwapWarningTokensConfig.ccar.address]: {\n symbol: SwapWarningTokensConfig.ccar.symbol,\n component: <CcarWarning />,\n },\n [SwapWarningTokensConfig.bttold.address]: {\n symbol: SwapWarningTokensConfig.bttold.symbol,\n component: <BTTWarning />,\n },\n [SwapWarningTokensConfig.pokemoney.address]: {\n symbol: SwapWarningTokensConfig.pokemoney.symbol,\n component: <RugPullWarning />,\n },\n [SwapWarningTokensConfig.free.address]: {\n symbol: SwapWarningTokensConfig.free.symbol,\n component: <FREEWarning />,\n },\n }\n\n const SWAP_WARNING = TOKEN_WARNINGS[swapCurrency.address]\n\n return (\n <StyledModalContainer minWidth=\"280px\">\n <ModalHeader background={theme.colors.gradients.cardHeader}>\n <Heading p=\"12px 24px\">{t('Notice for trading %symbol%', { symbol: SWAP_WARNING.symbol })}</Heading>\n </ModalHeader>\n <ModalBody p=\"24px\">\n <MessageContainer variant=\"warning\" mb=\"24px\">\n <Box>{SWAP_WARNING.component}</Box>\n </MessageContainer>\n <Acknowledgement handleContinueClick={onDismiss} />\n </ModalBody>\n </StyledModalContainer>\n )\n}\n\nexport default SwapWarningModal\n","import { Box } from '@pancakeswap/uikit'\nimport styled from 'styled-components'\n\nexport const StyledPriceChart = styled(Box)<{\n $isDark: boolean\n $isExpanded: boolean\n $isFullWidthContainer?: boolean\n}>`\n border: none;\n border-radius: 32px;\n width: 100%;\n padding-top: 36px;\n ${({ theme }) => theme.mediaQueries.sm} {\n padding-top: 8px;\n background: ${({ $isDark }) => ($isDark ? 'rgba(39, 38, 44, 0.5)' : 'rgba(255, 255, 255, 0.5)')};\n border: ${({ theme }) => `1px solid ${theme.colors.cardBorder}`};\n border-radius: ${({ $isExpanded }) => ($isExpanded ? '0' : '16px')};\n width: ${({ $isExpanded, $isFullWidthContainer }) => ($isFullWidthContainer || $isExpanded ? '100%' : '50%')};\n height: ${({ $isExpanded }) => ($isExpanded ? 'calc(100vh - 100px)' : '516px')};\n }\n`\n\nStyledPriceChart.defaultProps = {\n height: '70%',\n}\n","import { Flex, Text } from '@pancakeswap/uikit'\nimport { useTranslation } from 'contexts/Localization'\n\nimport { StyledPriceChart } from './styles'\n\ninterface BnbWbnbNoticeProps {\n isDark: boolean\n isChartExpanded: boolean\n}\n\nconst BnbWbnbNotice: React.FC<BnbWbnbNoticeProps> = ({ isDark, isChartExpanded }) => {\n const { t } = useTranslation()\n return (\n <StyledPriceChart $isDark={isDark} $isExpanded={isChartExpanded} p=\"24px\">\n <Flex justifyContent=\"center\" alignItems=\"center\" height=\"100%\" flexDirection=\"column\">\n <Text mb={['8px', '8px', '0px']} textAlign=\"center\">\n {t('You can swap WETH for ETH (and vice versa) with no trading fees.')}\n </Text>\n <Text mb={['8px', '8px', '0px']} textAlign=\"center\">\n {t('Exchange rate is always 1 to 1.')}\n </Text>\n </Flex>\n </StyledPriceChart>\n )\n}\n\nexport default BnbWbnbNotice\n","import { Flex, Skeleton, Text } from '@pancakeswap/uikit'\nimport { FC } from 'react'\nimport styled from 'styled-components'\nimport { formatAmount, formatAmountNotation } from 'utils/formatInfoNumbers'\nimport { FlexGap, FlexGapProps } from './Layout/Flex'\n\nconst formatOptions = {\n notation: 'standard' as formatAmountNotation,\n displayThreshold: 0.001,\n tokenPrecision: true,\n}\n\ninterface TokenDisplayProps extends FlexGapProps {\n value?: number | string\n inputSymbol?: string\n outputSymbol?: string\n format?: boolean\n}\n\nconst TextLabel = styled(Text)`\n font-size: 32px;\n line-height: 1.1;\n\n ${({ theme }) => theme.mediaQueries.lg} {\n font-size: 40px;\n }\n`\n\nconst PairPriceDisplay: FC<TokenDisplayProps> = ({\n value,\n inputSymbol,\n outputSymbol,\n children,\n format = true,\n ...props\n}) => {\n return value ? (\n <FlexGap alignItems=\"baseline\" {...props}>\n <Flex alignItems=\"inherit\">\n <TextLabel mr=\"8px\" bold>\n {format ? formatAmount(typeof value === 'string' ? parseFloat(value) : value, formatOptions) : value}\n </TextLabel>\n {inputSymbol && outputSymbol && (\n <Text color=\"textSubtle\" fontSize=\"20px\" bold lineHeight={1.1}>\n {`${inputSymbol}/${outputSymbol}`}\n </Text>\n )}\n </Flex>\n {children}\n </FlexGap>\n ) : (\n <Skeleton height=\"36px\" width=\"128px\" {...props} />\n )\n}\n\nexport default PairPriceDisplay\n","import { Box, ButtonMenu, ButtonMenuItem, Flex, Text } from '@pancakeswap/uikit'\nimport { useTranslation } from 'contexts/Localization'\nimport { useState, memo } from 'react'\nimport { useFetchPairPrices } from 'state/swap/hooks'\nimport dynamic from 'next/dynamic'\nimport { PairDataTimeWindowEnum } from 'state/swap/types'\nimport NoChartAvailable from './NoChartAvailable'\nimport PairPriceDisplay from '../../../../components/PairPriceDisplay'\nimport { getTimeWindowChange } from './utils'\n\nconst SwapLineChart = dynamic(() => import('./SwapLineChart'), {\n ssr: false,\n})\n\nconst BasicChart = ({\n token0Address,\n token1Address,\n isChartExpanded,\n inputCurrency,\n outputCurrency,\n isMobile,\n currentSwapPrice,\n}) => {\n const [timeWindow, setTimeWindow] = useState<PairDataTimeWindowEnum>(0)\n\n const { pairPrices = [], pairId } = useFetchPairPrices({\n token0Address,\n token1Address,\n timeWindow,\n currentSwapPrice,\n })\n const [hoverValue, setHoverValue] = useState<number | undefined>()\n const [hoverDate, setHoverDate] = useState<string | undefined>()\n const valueToDisplay = hoverValue || pairPrices[pairPrices.length - 1]?.value\n const { changePercentage, changeValue } = getTimeWindowChange(pairPrices)\n const isChangePositive = changeValue >= 0\n const chartHeight = isChartExpanded ? 'calc(100% - 120px)' : '378px'\n const {\n t,\n currentLanguage: { locale },\n } = useTranslation()\n const currentDate = new Date().toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n })\n\n // Sometimes we might receive array full of zeros for obscure tokens while trying to derive data\n // In that case chart is not useful to users\n const isBadData =\n pairPrices &&\n pairPrices.length > 0 &&\n pairPrices.every(\n (price) => !price.value || price.value === 0 || price.value === Infinity || Number.isNaN(price.value),\n )\n\n if (isBadData) {\n return (\n <NoChartAvailable\n token0Address={token0Address}\n token1Address={token1Address}\n pairAddress={pairId}\n isMobile={isMobile}\n />\n )\n }\n\n return (\n <>\n <Flex\n flexDirection={['column', null, null, null, null, null, 'row']}\n alignItems={['flex-start', null, null, null, null, null, 'center']}\n justifyContent=\"space-between\"\n px=\"24px\"\n >\n <Flex flexDirection=\"column\" pt=\"12px\">\n <PairPriceDisplay\n value={pairPrices?.length > 0 && valueToDisplay}\n inputSymbol={inputCurrency?.symbol}\n outputSymbol={outputCurrency?.symbol}\n >\n <Text color={isChangePositive ? 'success' : 'failure'} fontSize=\"20px\" ml=\"4px\" bold>\n {`${isChangePositive ? '+' : ''}${changeValue.toFixed(3)} (${changePercentage}%)`}\n </Text>\n </PairPriceDisplay>\n <Text small color=\"secondary\">\n {hoverDate || currentDate}\n </Text>\n </Flex>\n <Box>\n <ButtonMenu activeIndex={timeWindow} onItemClick={setTimeWindow} scale=\"sm\">\n <ButtonMenuItem>{t('24H')}</ButtonMenuItem>\n <ButtonMenuItem>{t('1W')}</ButtonMenuItem>\n <ButtonMenuItem>{t('1M')}</ButtonMenuItem>\n <ButtonMenuItem>{t('1Y')}</ButtonMenuItem>\n </ButtonMenu>\n </Box>\n </Flex>\n <Box height={isMobile ? '100%' : chartHeight} p={isMobile ? '0px' : '16px'} width=\"100%\">\n <SwapLineChart\n data={pairPrices}\n setHoverValue={setHoverValue}\n setHoverDate={setHoverDate}\n isChangePositive={isChangePositive}\n timeWindow={timeWindow}\n />\n </Box>\n </>\n )\n}\n\nexport default memo(BasicChart, (prev, next) => {\n return (\n prev.token0Address === next.token0Address &&\n prev.token1Address === next.token1Address &&\n prev.isChartExpanded === next.isChartExpanded &&\n prev.isMobile === next.isMobile &&\n prev.isChartExpanded === next.isChartExpanded &&\n ((prev.currentSwapPrice !== null &&\n next.currentSwapPrice !== null &&\n prev.currentSwapPrice[prev.token0Address] === next.currentSwapPrice[next.token0Address] &&\n prev.currentSwapPrice[prev.token1Address] === next.currentSwapPrice[next.token1Address]) ||\n (prev.currentSwapPrice === null && next.currentSwapPrice === null))\n )\n})\n","import {\n Button,\n ExpandIcon,\n Flex,\n IconButton,\n ShrinkIcon,\n SyncAltIcon,\n Text,\n // TradingViewIcon,\n LineGraphIcon,\n useMatchBreakpointsContext,\n} from '@pancakeswap/uikit'\nimport { CurrencyLogo, DoubleCurrencyLogo } from 'components/Logo'\n// import { TradingViewLabel } from 'components/TradingView'\nimport { useTranslation } from 'contexts/Localization'\nimport { ChartViewMode } from 'state/user/actions'\nimport { useExchangeChartViewManager } from 'state/user/hooks'\nimport styled from 'styled-components'\nimport BasicChart from './BasicChart'\nimport { StyledPriceChart } from './styles'\n// import TradingViewChart from './TradingViewChart'\n// import PairPriceDisplay from '../../../../components/PairPriceDisplay'\n\nconst ChartButton = styled(Button)`\n background-color: ${({ $active, theme }) => $active && `${theme.colors.primary}0f`};\n padding: 4px 8px;\n border-radius: 6px;\n`\n\nconst PriceChart = ({\n inputCurrency,\n outputCurrency,\n onSwitchTokens,\n isDark,\n isChartExpanded,\n setIsChartExpanded,\n isMobile,\n isFullWidthContainer,\n token0Address,\n token1Address,\n currentSwapPrice,\n}) => {\n const { isDesktop } = useMatchBreakpointsContext()\n const toggleExpanded = () => setIsChartExpanded((currentIsExpanded) => !currentIsExpanded)\n const [chartView, setChartView] = useExchangeChartViewManager()\n // const [twChartSymbol, setTwChartSymbol] = useState('')\n const { t } = useTranslation()\n\n // const handleTwChartSymbol = useCallback((symbol) => {\n // setTwChartSymbol(symbol)\n // }, [])\n\n return (\n <StyledPriceChart\n height={chartView === ChartViewMode.TRADING_VIEW ? '100%' : '70%'}\n overflow={chartView === ChartViewMode.TRADING_VIEW ? 'hidden' : 'unset'}\n $isDark={isDark}\n $isExpanded={isChartExpanded}\n $isFullWidthContainer={isFullWidthContainer}\n >\n <Flex justifyContent=\"space-between\" px=\"24px\">\n <Flex alignItems=\"center\">\n {outputCurrency ? (\n <DoubleCurrencyLogo currency0={inputCurrency} currency1={outputCurrency} size={24} margin />\n ) : (\n inputCurrency && <CurrencyLogo currency={inputCurrency} size=\"24px\" style={{ marginRight: '8px' }} />\n )}\n {inputCurrency && (\n <Text color=\"text\" bold>\n {outputCurrency ? `${inputCurrency.symbol}/${outputCurrency.symbol}` : inputCurrency.symbol}\n </Text>\n )}\n <IconButton variant=\"text\" onClick={onSwitchTokens}>\n <SyncAltIcon ml=\"6px\" color=\"primary\" />\n </IconButton>\n <Flex>\n <ChartButton\n aria-label={t('Basic')}\n title={t('Basic')}\n $active={chartView === ChartViewMode.BASIC}\n scale=\"sm\"\n variant=\"text\"\n color=\"primary\"\n onClick={() => setChartView(ChartViewMode.BASIC)}\n mr=\"8px\"\n >\n {isDesktop ? t('Basic') : <LineGraphIcon color=\"primary\" />}\n </ChartButton>\n {/* <ChartButton\n aria-label=\"TradingView\"\n title=\"TradingView\"\n $active={chartView === ChartViewMode.TRADING_VIEW}\n scale=\"sm\"\n variant=\"text\"\n onClick={() => setChartView(ChartViewMode.TRADING_VIEW)}\n >\n {isDesktop ? 'TradingView' : <TradingViewIcon color=\"primary\" />}\n </ChartButton> */}\n </Flex>\n </Flex>\n {!isMobile && (\n <Flex>\n <IconButton variant=\"text\" onClick={toggleExpanded}>\n {isChartExpanded ? <ShrinkIcon color=\"text\" /> : <ExpandIcon color=\"text\" />}\n </IconButton>\n </Flex>\n )}\n </Flex>\n {chartView === ChartViewMode.BASIC && (\n <BasicChart\n token0Address={token0Address}\n token1Address={token1Address}\n isChartExpanded={isChartExpanded}\n inputCurrency={inputCurrency}\n outputCurrency={outputCurrency}\n isMobile={isMobile}\n currentSwapPrice={currentSwapPrice}\n />\n )}\n {/* {chartView === ChartViewMode.TRADING_VIEW && (\n <Flex\n flexDirection=\"column\"\n justifyContent=\"space-between\"\n height={isMobile ? '100%' : isChartExpanded ? 'calc(100% - 48px)' : '458px'}\n pt=\"12px\"\n >\n <Flex justifyContent=\"space-between\" alignItems=\"baseline\" flexWrap=\"wrap\">\n <PairPriceDisplay\n value={currentSwapPrice?.[token0Address]}\n inputSymbol={inputCurrency?.symbol}\n outputSymbol={outputCurrency?.symbol}\n mx=\"24px\"\n />\n {twChartSymbol && <TradingViewLabel symbol={twChartSymbol} />}\n </Flex>\n <TradingViewChart\n // unmount the whole component when symbols is changed\n key={`${inputCurrency?.symbol}-${outputCurrency?.symbol}`}\n inputSymbol={inputCurrency?.symbol}\n outputSymbol={outputCurrency?.symbol}\n isDark={isDark}\n onTwChartSymbol={handleTwChartSymbol}\n />\n </Flex>\n ) */}\n </StyledPriceChart>\n )\n}\n\nexport default PriceChart\n","import { Box, Flex } from '@pancakeswap/uikit'\nimport styled from 'styled-components'\n\nexport const StyledSwapContainer = styled(Flex)<{ $isChartExpanded: boolean }>`\n flex-shrink: 0;\n height: fit-content;\n padding: 0 24px;\n border-radius: 25px;\n\n ${({ theme }) => theme.mediaQueries.lg} {\n padding: 0 40px;\n }\n\n ${({ theme }) => theme.mediaQueries.xxl} {\n ${({ $isChartExpanded }) => ($isChartExpanded ? 'padding: 0 120px' : 'padding: 0 40px')};\n }\n`\n\nexport const StyledInputCurrencyWrapper = styled(Box)`\n width: 320px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n width: 420px !important;\n }\n\n ${({ theme }) => theme.mediaQueries.xs} {\n width: 380px;\n }\n`\n","import { Svg } from '@pancakeswap/uikit'\n\n// NOTE: Temporary save icon here. Will move to uikit when the feature is done\n\nconst DisabledIcon = (props) => (\n <Svg id=\"arrow_loading\" viewBox=\"0 0 24 24\" {...props}>\n <path\n stroke=\"none\"\n fill=\"ADD2D0\"\n d=\"M16.2751 7.78995C13.932 5.44681 10.133 5.44681 7.78986 7.78995C7.02853 8.55128 6.51457 9.4663 6.24798 10.4351C6.24473 10.4499 6.24114 10.4646 6.23719 10.4793C6.17635 10.7064 6.12938 10.9339 6.09577 11.161C5.83159 12.9457 6.39255 14.7026 7.52624 15.9944C7.61054 16.0901 7.69842 16.1838 7.78986 16.2752C8.08307 16.5685 8.39909 16.825 8.7322 17.0448C9.25533 17.3892 9.84172 17.6568 10.4798 17.8278C10.7386 17.8971 10.9979 17.9484 11.2565 17.9825C12.9537 18.2061 14.6187 17.6866 15.8747 16.6415C16.0123 16.5265 16.1459 16.4044 16.2751 16.2752C16.2848 16.2655 16.2947 16.2561 16.3047 16.2469C17.0123 15.531 17.5491 14.627 17.8283 13.5851C17.9712 13.0517 18.5196 12.7351 19.053 12.878C19.5865 13.021 19.9031 13.5693 19.7602 14.1028C19.3141 15.7676 18.3745 17.1684 17.1409 18.1899C16.1883 18.9822 15.0949 19.5189 13.9515 19.8002C11.8607 20.3147 9.6028 19.9749 7.7328 18.7809C7.06855 18.3579 6.47841 17.8432 5.97519 17.2589C5.12341 16.2738 4.55173 15.1302 4.26015 13.9324C4.01698 12.9416 3.96104 11.8931 4.12168 10.8379C4.36697 9.20484 5.1183 7.63309 6.37564 6.37574C9.49984 3.25154 14.5652 3.25154 17.6894 6.37574L18.2332 6.91959L18.2337 5.49951C18.2338 5.05769 18.5921 4.69964 19.034 4.69979C19.4758 4.69995 19.8338 5.05825 19.8337 5.50007L19.8325 9.03277L19.8322 9.8325L19.0325 9.83249L18.9401 9.83249C18.8146 9.85665 18.6854 9.85665 18.5599 9.83248L15.5005 9.83245C15.0587 9.83245 14.7005 9.47427 14.7005 9.03244C14.7005 8.59062 15.0587 8.23245 15.5005 8.23245L16.7176 8.23246L16.2751 7.78995Z\"\n />\n <defs>\n <path\n id=\"arrow\"\n stroke=\"none\"\n fill=\"none\"\n d=\"M16.2751 7.78995C13.932 5.44681 10.133 5.44681 7.78986 7.78995C7.02853 8.55128 6.51457 9.4663 6.24798 10.4351C6.24473 10.4499 6.24114 10.4646 6.23719 10.4793C6.17635 10.7064 6.12938 10.9339 6.09577 11.161C5.83159 12.9457 6.39255 14.7026 7.52624 15.9944C7.61054 16.0901 7.69842 16.1838 7.78986 16.2752C8.08307 16.5685 8.39909 16.825 8.7322 17.0448C9.25533 17.3892 9.84172 17.6568 10.4798 17.8278C10.7386 17.8971 10.9979 17.9484 11.2565 17.9825C12.9537 18.2061 14.6187 17.6866 15.8747 16.6415C16.0123 16.5265 16.1459 16.4044 16.2751 16.2752C16.2848 16.2655 16.2947 16.2561 16.3047 16.2469C17.0123 15.531 17.5491 14.627 17.8283 13.5851C17.9712 13.0517 18.5196 12.7351 19.053 12.878C19.5865 13.021 19.9031 13.5693 19.7602 14.1028C19.3141 15.7676 18.3745 17.1684 17.1409 18.1899C16.1883 18.9822 15.0949 19.5189 13.9515 19.8002C11.8607 20.3147 9.6028 19.9749 7.7328 18.7809C7.06855 18.3579 6.47841 17.8432 5.97519 17.2589C5.12341 16.2738 4.55173 15.1302 4.26015 13.9324C4.01698 12.9416 3.96104 11.8931 4.12168 10.8379C4.36697 9.20484 5.1183 7.63309 6.37564 6.37574C9.49984 3.25154 14.5652 3.25154 17.6894 6.37574L18.2332 6.91959L18.2337 5.49951C18.2338 5.05769 18.5921 4.69964 19.034 4.69979C19.4758 4.69995 19.8338 5.05825 19.8337 5.50007L19.8325 9.03277L19.8322 9.8325L19.0325 9.83249L18.9401 9.83249C18.8146 9.85665 18.6854 9.85665 18.5599 9.83248L15.5005 9.83245C15.0587 9.83245 14.7005 9.47427 14.7005 9.03244C14.7005 8.59062 15.0587 8.23245 15.5005 8.23245L16.7176 8.23246L16.2751 7.78995Z\"\n />\n <clipPath id=\"arrow-clip\">\n <use xlinkHref=\"#arrow\" />\n </clipPath>\n </defs>\n </Svg>\n)\n\nconst Icon = ({ disabled, ...props }) =>\n disabled ? (\n <DisabledIcon {...props} />\n ) : (\n <Svg id=\"arrow_loading\" viewBox=\"0 0 24 24\" {...props}>\n <path\n stroke=\"none\"\n fill=\"#add2ce\"\n d=\"M16.2751 7.78995C13.932 5.44681 10.133 5.44681 7.78986 7.78995C7.02853 8.55128 6.51457 9.4663 6.24798 10.4351C6.24473 10.4499 6.24114 10.4646 6.23719 10.4793C6.17635 10.7064 6.12938 10.9339 6.09577 11.161C5.83159 12.9457 6.39255 14.7026 7.52624 15.9944C7.61054 16.0901 7.69842 16.1838 7.78986 16.2752C8.08307 16.5685 8.39909 16.825 8.7322 17.0448C9.25533 17.3892 9.84172 17.6568 10.4798 17.8278C10.7386 17.8971 10.9979 17.9484 11.2565 17.9825C12.9537 18.2061 14.6187 17.6866 15.8747 16.6415C16.0123 16.5265 16.1459 16.4044 16.2751 16.2752C16.2848 16.2655 16.2947 16.2561 16.3047 16.2469C17.0123 15.531 17.5491 14.627 17.8283 13.5851C17.9712 13.0517 18.5196 12.7351 19.053 12.878C19.5865 13.021 19.9031 13.5693 19.7602 14.1028C19.3141 15.7676 18.3745 17.1684 17.1409 18.1899C16.1883 18.9822 15.0949 19.5189 13.9515 19.8002C11.8607 20.3147 9.6028 19.9749 7.7328 18.7809C7.06855 18.3579 6.47841 17.8432 5.97519 17.2589C5.12341 16.2738 4.55173 15.1302 4.26015 13.9324C4.01698 12.9416 3.96104 11.8931 4.12168 10.8379C4.36697 9.20484 5.1183 7.63309 6.37564 6.37574C9.49984 3.25154 14.5652 3.25154 17.6894 6.37574L18.2332 6.91959L18.2337 5.49951C18.2338 5.05769 18.5921 4.69964 19.034 4.69979C19.4758 4.69995 19.8338 5.05825 19.8337 5.50007L19.8325 9.03277L19.8322 9.8325L19.0325 9.83249L18.9401 9.83249C18.8146 9.85665 18.6854 9.85665 18.5599 9.83248L15.5005 9.83245C15.0587 9.83245 14.7005 9.47427 14.7005 9.03244C14.7005 8.59062 15.0587 8.23245 15.5005 8.23245L16.7176 8.23246L16.2751 7.78995Z\"\n />\n <defs>\n <path\n id=\"arrow\"\n stroke=\"none\"\n fill=\"none\"\n d=\"M16.2751 7.78995C13.932 5.44681 10.133 5.44681 7.78986 7.78995C7.02853 8.55128 6.51457 9.4663 6.24798 10.4351C6.24473 10.4499 6.24114 10.4646 6.23719 10.4793C6.17635 10.7064 6.12938 10.9339 6.09577 11.161C5.83159 12.9457 6.39255 14.7026 7.52624 15.9944C7.61054 16.0901 7.69842 16.1838 7.78986 16.2752C8.08307 16.5685 8.39909 16.825 8.7322 17.0448C9.25533 17.3892 9.84172 17.6568 10.4798 17.8278C10.7386 17.8971 10.9979 17.9484 11.2565 17.9825C12.9537 18.2061 14.6187 17.6866 15.8747 16.6415C16.0123 16.5265 16.1459 16.4044 16.2751 16.2752C16.2848 16.2655 16.2947 16.2561 16.3047 16.2469C17.0123 15.531 17.5491 14.627 17.8283 13.5851C17.9712 13.0517 18.5196 12.7351 19.053 12.878C19.5865 13.021 19.9031 13.5693 19.7602 14.1028C19.3141 15.7676 18.3745 17.1684 17.1409 18.1899C16.1883 18.9822 15.0949 19.5189 13.9515 19.8002C11.8607 20.3147 9.6028 19.9749 7.7328 18.7809C7.06855 18.3579 6.47841 17.8432 5.97519 17.2589C5.12341 16.2738 4.55173 15.1302 4.26015 13.9324C4.01698 12.9416 3.96104 11.8931 4.12168 10.8379C4.36697 9.20484 5.1183 7.63309 6.37564 6.37574C9.49984 3.25154 14.5652 3.25154 17.6894 6.37574L18.2332 6.91959L18.2337 5.49951C18.2338 5.05769 18.5921 4.69964 19.034 4.69979C19.4758 4.69995 19.8338 5.05825 19.8337 5.50007L19.8325 9.03277L19.8322 9.8325L19.0325 9.83249L18.9401 9.83249C18.8146 9.85665 18.6854 9.85665 18.5599 9.83248L15.5005 9.83245C15.0587 9.83245 14.7005 9.47427 14.7005 9.03244C14.7005 8.59062 15.0587 8.23245 15.5005 8.23245L16.7176 8.23246L16.2751 7.78995Z\"\n />\n <clipPath id=\"arrow-clip\">\n <use xlinkHref=\"#arrow\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#arrow-clip)\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"5\"\n transform=\"rotate(365,12,12)\"\n fill=\"none\"\n stroke=\"ADD2D0\"\n strokeWidth=\"16\"\n strokeDasharray=\"30\"\n strokeDashoffset=\"0\"\n >\n <animate\n attributeName=\"stroke-dashoffset\"\n values=\"0;-30\"\n begin=\"arrow_loading.click; 0.7s\"\n repeatCount=\"indefinite\"\n dur=\"6.3s\"\n />\n </circle>\n </g>\n <use xlinkHref=\"#arrow\" />\n <animateTransform\n id=\"transform_0\"\n attributeName=\"transform\"\n attributeType=\"XML\"\n type=\"rotate\"\n from=\"0 0 0\"\n to=\"-10 0 0\"\n dur=\"0.07s\"\n begin=\"arrow_loading.click;\"\n repeatCount=\"1\"\n />\n <animateTransform\n id=\"transform_1\"\n attributeName=\"transform\"\n attributeType=\"XML\"\n type=\"rotate\"\n from=\"-45 0 0\"\n to=\"390 0 0\"\n dur=\"0.6s\"\n begin=\"transform_0.end\"\n repeatCount=\"1\"\n />\n <animateTransform\n id=\"transform_2\"\n attributeName=\"transform\"\n attributeType=\"XML\"\n type=\"rotate\"\n from=\"390 0 0\"\n to=\"360 0 0\"\n dur=\"0.15s\"\n begin=\"transform_1.end\"\n repeatCount=\"1\"\n />\n </Svg>\n )\n\nexport default Icon\n","import styled from 'styled-components'\nimport {\n ChartIcon,\n Flex,\n Heading,\n HistoryIcon,\n IconButton,\n NotificationDot,\n Text,\n useModal,\n ChartDisableIcon,\n} from '@pancakeswap/uikit'\nimport TransactionsModal from 'components/App/Transactions/TransactionsModal'\nimport GlobalSettings from 'components/Menu/GlobalSettings'\nimport { useExpertModeManager } from 'state/user/hooks'\nimport RefreshIcon from 'components/Svg/RefreshIcon'\nimport { useCallback } from 'react'\nimport { SettingsMode } from '../../../components/Menu/GlobalSettings/types'\n\ninterface Props {\n title: string\n subtitle: string\n noConfig?: boolean\n setIsChartDisplayed?: React.Dispatch<React.SetStateAction<boolean>>\n isChartDisplayed?: boolean\n hasAmount: boolean\n onRefreshPrice: () => void\n}\n\nconst CurrencyInputContainer = styled(Flex)`\n flex-direction: column;\n align-items: center;\n padding: 24px;\n width: 100%;\n border-bottom: 1px solid ${({ theme }) => theme.colors.cardBorder};\n`\n\nconst ColoredIconButton = styled(IconButton)`\n color: ${({ theme }) => theme.colors.textSubtle};\n`\n\nconst CurrencyInputHeader: React.FC<Props> = ({\n title,\n subtitle,\n setIsChartDisplayed,\n isChartDisplayed,\n hasAmount,\n onRefreshPrice,\n}) => {\n const [expertMode] = useExpertModeManager()\n const toggleChartDisplayed = () => {\n setIsChartDisplayed((currentIsChartDisplayed) => !currentIsChartDisplayed)\n }\n const [onPresentTransactionsModal] = useModal(<TransactionsModal />)\n const handleOnClick = useCallback(() => onRefreshPrice?.(), [onRefreshPrice])\n\n return (\n <CurrencyInputContainer>\n <Flex width=\"100%\" alignItems=\"center\" justifyContent=\"space-between\">\n {/* {setIsChartDisplayed && (\n <ColoredIconButton onClick={toggleChartDisplayed} variant=\"text\" scale=\"sm\">\n {isChartDisplayed ? <ChartDisableIcon color=\"textSubtle\" /> : <ChartIcon width=\"24px\" color=\"textSubtle\" />}\n </ColoredIconButton>\n )} */}\n <Flex flexDirection=\"column\" alignItems=\"flex-left\" width=\"100%\" mr={18}>\n <Heading as=\"h2\">{title}</Heading>\n <br />\n </Flex>\n </Flex>\n <Flex flexDirection=\"column\" alignItems=\"flex-left\" width=\"100%\">\n <Text color=\"textSubtle\" fontSize=\"14px\">\n {subtitle}\n </Text>\n </Flex>\n <Flex width=\"100%\" flexDirection=\"column\" alignItems=\"flex-end\" justifyContent=\"space-between\">\n {/* {setIsChartDisplayed && (\n <ColoredIconButton onClick={toggleChartDisplayed} variant=\"text\" scale=\"sm\">\n {isChartDisplayed ? <ChartDisableIcon color=\"textSubtle\" /> : <ChartIcon width=\"24px\" color=\"textSubtle\" />}\n </ColoredIconButton>\n )} */}\n <Flex >\n <NotificationDot show={expertMode}>\n <GlobalSettings color=\"textSubtle\" mr=\"0\" mode={SettingsMode.SWAP_LIQUIDITY} />\n </NotificationDot>\n <IconButton onClick={onPresentTransactionsModal} variant=\"text\" scale=\"sm\">\n <HistoryIcon color=\"textSubtle\" width=\"24px\" />\n </IconButton>\n <IconButton variant=\"text\" scale=\"sm\" onClick={handleOnClick}>\n <RefreshIcon disabled={!hasAmount} color=\"textSubtle\" width=\"27px\" />\n </IconButton>\n </Flex>\n </Flex>\n </CurrencyInputContainer>\n )\n}\n\nexport default CurrencyInputHeader\n","import { Token } from '@pancakeswap/sdk'\nimport { Modal, InjectedModalProps } from '@pancakeswap/uikit'\nimport ImportToken from 'components/SearchModal/ImportToken'\nimport { useTranslation } from 'contexts/Localization'\n\ninterface Props extends InjectedModalProps {\n tokens: Token[]\n onCancel: () => void\n}\n\nconst ImportTokenWarningModal: React.FC<Props> = ({ tokens, onDismiss, onCancel }) => {\n const { t } = useTranslation()\n return (\n <Modal\n title={t('Import Token')}\n onDismiss={() => {\n onDismiss?.()\n onCancel()\n }}\n style={{ maxWidth: '420px' }}\n >\n <ImportToken tokens={tokens} handleCurrencySelect={onDismiss} />\n </Modal>\n )\n}\n\nexport default ImportTokenWarningModal\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport styled from 'styled-components'\nimport { CurrencyAmount, Percent, Token, Trade } from '@pancakeswap/sdk'\nimport { computeTradePriceBreakdown, warningSeverity } from 'utils/exchange'\nimport {\n Button,\n Text,\n ArrowDownIcon,\n Box,\n useModal,\n Flex,\n IconButton,\n BottomDrawer,\n ArrowUpDownIcon,\n Skeleton,\n useMatchBreakpointsContext,\n} from '@pancakeswap/uikit'\nimport { useIsTransactionUnsupported } from 'hooks/Trades'\nimport UnsupportedCurrencyFooter from 'components/UnsupportedCurrencyFooter'\nimport { useRouter } from 'next/router'\nimport { useAccount, useNetwork } from 'wagmi'\nimport { getChainId , BIG_INT_ZERO } from 'config/constants/exchange'\nimport { useTranslation } from 'contexts/Localization'\nimport { maxAmountSpend } from 'utils/maxAmountSpend'\nimport shouldShowSwapWarning from 'utils/shouldShowSwapWarning'\nimport { useSwapActionHandlers } from 'state/swap/useSwapActionHandlers'\nimport useRefreshBlockNumberID from './hooks/useRefreshBlockNumber'\nimport AddressInputPanel from './components/AddressInputPanel'\nimport { GreyCard } from '../../components/Card'\nimport Column, { AutoColumn } from '../../components/Layout/Column'\nimport ConfirmSwapModal from './components/ConfirmSwapModal'\nimport CurrencyInputPanel from '../../components/CurrencyInputPanel'\nimport { AutoRow, RowBetween } from '../../components/Layout/Row'\nimport AdvancedSwapDetailsDropdown from './components/AdvancedSwapDetailsDropdown'\nimport confirmPriceImpactWithoutFee from './components/confirmPriceImpactWithoutFee'\nimport { ArrowWrapper, SwapCallbackError, Wrapper } from './components/styleds'\nimport TradePrice from './components/TradePrice'\nimport ProgressSteps from './components/ProgressSteps'\nimport { AppBody } from '../../components/App'\nimport ConnectWalletButton from '../../components/ConnectWalletButton'\n\nimport { useCurrency, useAllTokens } from '../../hooks/Tokens'\nimport { ApprovalState, useApproveCallbackFromTrade } from '../../hooks/useApproveCallback'\nimport { useSwapCallback } from '../../hooks/useSwapCallback'\nimport useWrapCallback, { WrapType } from '../../hooks/useWrapCallback'\nimport { Field } from '../../state/swap/actions'\nimport {\n useDefaultsFromURLSearch,\n useDerivedSwapInfo,\n useSwapState,\n useSingleTokenSwapInfo,\n} from '../../state/swap/hooks'\nimport {\n useExpertModeManager,\n useUserSlippageTolerance,\n useUserSingleHopOnly,\n useExchangeChartManager,\n} from '../../state/user/hooks'\nimport CircleLoader from '../../components/Loader/CircleLoader'\nimport Page from '../Page'\nimport SwapWarningModal from './components/SwapWarningModal'\nimport PriceChartContainer from './components/Chart/PriceChartContainer'\nimport { StyledInputCurrencyWrapper, StyledSwapContainer } from './styles'\nimport CurrencyInputHeader from './components/CurrencyInputHeader'\nimport ImportTokenWarningModal from '../../components/ImportTokenWarningModal'\n\nconst Label = styled(Text)`\n font-size: 12px;\n font-weight: bold;\n color: ${({ theme }) => theme.colors.secondary};\n`\n\nconst SwitchIconButton = styled(IconButton)`\n box-shadow: inset 0px -2px 0px rgba(0, 0, 0, 0.1);\n .icon-up-down {\n display: none;\n }\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary};\n .icon-down {\n display: none;\n fill: white;\n }\n .icon-up-down {\n display: block;\n fill: white;\n }\n }\n`\n\nexport default function Swap() {\n const router = useRouter()\n const loadedUrlParams = useDefaultsFromURLSearch()\n const { t } = useTranslation()\n const { isMobile } = useMatchBreakpointsContext()\n const [isChartExpanded, setIsChartExpanded] = useState(false)\n const [userChartPreference, setUserChartPreference] = useExchangeChartManager(isMobile)\n const [isChartDisplayed, setIsChartDisplayed] = useState(userChartPreference)\n const { refreshBlockNumber, isLoading } = useRefreshBlockNumberID()\n\n useEffect(() => {\n setUserChartPreference(isChartDisplayed)\n }, [isChartDisplayed, setUserChartPreference])\n\n // token warning stuff\n const [loadedInputCurrency, loadedOutputCurrency] = [\n useCurrency(loadedUrlParams?.inputCurrencyId),\n useCurrency(loadedUrlParams?.outputCurrencyId),\n ]\n const urlLoadedTokens: Token[] = useMemo(\n () => [loadedInputCurrency, loadedOutputCurrency]?.filter((c): c is Token => c instanceof Token) ?? [],\n [loadedInputCurrency, loadedOutputCurrency],\n )\n\n // dismiss warning if all imported tokens are in active lists\n const defaultTokens = useAllTokens()\n const importTokensNotInDefault =\n urlLoadedTokens &&\n urlLoadedTokens.filter((token: Token) => {\n return !(token.address in defaultTokens)\n })\n\n const { address: account } = useAccount()\n const { chain } = useNetwork()\n const chainId = getChainId(chain);\n\n // for expert mode\n const [isExpertMode] = useExpertModeManager()\n\n // get custom setting values for user\n const [allowedSlippage] = useUserSlippageTolerance()\n\n // swap state & price data\n const {\n independentField,\n typedValue,\n recipient,\n [Field.INPUT]: { currencyId: inputCurrencyId },\n [Field.OUTPUT]: { currencyId: outputCurrencyId },\n } = useSwapState()\n const inputCurrency = useCurrency(inputCurrencyId)\n const outputCurrency = useCurrency(outputCurrencyId)\n const {\n v2Trade,\n currencyBalances,\n parsedAmount,\n currencies,\n inputError: swapInputError,\n } = useDerivedSwapInfo(independentField, typedValue, inputCurrency, outputCurrency, recipient)\n\n const {\n wrapType,\n execute: onWrap,\n inputError: wrapInputError,\n } = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue)\n const showWrap: boolean = wrapType !== WrapType.NOT_APPLICABLE\n const trade = showWrap ? undefined : v2Trade\n\n const singleTokenPrice = useSingleTokenSwapInfo(inputCurrencyId, inputCurrency, outputCurrencyId, outputCurrency)\n\n const parsedAmounts = showWrap\n ? {\n [Field.INPUT]: parsedAmount,\n [Field.OUTPUT]: parsedAmount,\n }\n : {\n [Field.INPUT]: independentField === Field.INPUT ? parsedAmount : trade?.inputAmount,\n [Field.OUTPUT]: independentField === Field.OUTPUT ? parsedAmount : trade?.outputAmount,\n }\n\n const { onSwitchTokens, onCurrencySelection, onUserInput, onChangeRecipient } = useSwapActionHandlers()\n const isValid = !swapInputError\n const dependentField: Field = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT\n\n const handleTypeInput = useCallback(\n (value: string) => {\n onUserInput(Field.INPUT, value)\n },\n [onUserInput],\n )\n const handleTypeOutput = useCallback(\n (value: string) => {\n onUserInput(Field.OUTPUT, value)\n },\n [onUserInput],\n )\n\n // modal and loading\n const [{ tradeToConfirm, swapErrorMessage, attemptingTxn, txHash }, setSwapState] = useState<{\n tradeToConfirm: Trade | undefined\n attemptingTxn: boolean\n swapErrorMessage: string | undefined\n txHash: string | undefined\n }>({\n tradeToConfirm: undefined,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n\n const formattedAmounts = {\n [independentField]: typedValue,\n [dependentField]: showWrap\n ? parsedAmounts[independentField]?.toExact() ?? ''\n : parsedAmounts[dependentField]?.toSignificant(6) ?? '',\n }\n\n const route = trade?.route\n const userHasSpecifiedInputOutput = Boolean(\n currencies[Field.INPUT] && currencies[Field.OUTPUT] && parsedAmounts[independentField]?.greaterThan(BIG_INT_ZERO),\n )\n const noRoute = !route\n\n // check whether the user has approved the router on the input token\n const [approval, approveCallback] = useApproveCallbackFromTrade(trade, allowedSlippage, chainId)\n\n // check if user has gone through approval process, used to show two step buttons, reset on token change\n const [approvalSubmitted, setApprovalSubmitted] = useState<boolean>(false)\n\n // mark when a user has submitted an approval, reset onTokenSelection for input field\n useEffect(() => {\n if (approval === ApprovalState.PENDING) {\n setApprovalSubmitted(true)\n }\n }, [approval, approvalSubmitted])\n\n const maxAmountInput: CurrencyAmount | undefined = maxAmountSpend(currencyBalances[Field.INPUT])\n const atMaxAmountInput = Boolean(maxAmountInput && parsedAmounts[Field.INPUT]?.equalTo(maxAmountInput))\n\n // the callback to execute the swap\n const { callback: swapCallback, error: swapCallbackError } = useSwapCallback(trade, allowedSlippage, recipient)\n\n const { priceImpactWithoutFee } = computeTradePriceBreakdown(trade)\n\n const [singleHopOnly] = useUserSingleHopOnly()\n\n const handleSwap = useCallback(() => {\n if (priceImpactWithoutFee && !confirmPriceImpactWithoutFee(priceImpactWithoutFee, t)) {\n return\n }\n if (!swapCallback) {\n return\n }\n setSwapState({ attemptingTxn: true, tradeToConfirm, swapErrorMessage: undefined, txHash: undefined })\n swapCallback()\n .then((hash) => {\n setSwapState({ attemptingTxn: false, tradeToConfirm, swapErrorMessage: undefined, txHash: hash })\n })\n .catch((error) => {\n console.log(error)\n setSwapState({\n attemptingTxn: false,\n tradeToConfirm,\n swapErrorMessage: error.message,\n txHash: undefined,\n })\n })\n }, [priceImpactWithoutFee, swapCallback, tradeToConfirm, t])\n\n // errors\n const [showInverted, setShowInverted] = useState<boolean>(false)\n\n // warnings on slippage\n const priceImpactSeverity = warningSeverity(priceImpactWithoutFee)\n\n // show approve flow when: no error on inputs, not approved or pending, or approved in current session\n // never show if price impact is above threshold in non expert mode\n const showApproveFlow =\n !swapInputError &&\n (approval === ApprovalState.NOT_APPROVED ||\n approval === ApprovalState.PENDING ||\n (approvalSubmitted && approval === ApprovalState.APPROVED)) &&\n !(priceImpactSeverity > 3 && !isExpertMode)\n\n const handleConfirmDismiss = useCallback(() => {\n setSwapState({ tradeToConfirm, attemptingTxn, swapErrorMessage, txHash })\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onUserInput(Field.INPUT, '')\n }\n }, [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash])\n\n const handleAcceptChanges = useCallback(() => {\n setSwapState({ tradeToConfirm: trade, swapErrorMessage, txHash, attemptingTxn })\n }, [attemptingTxn, swapErrorMessage, trade, txHash])\n\n // swap warning state\n const [swapWarningCurrency, setSwapWarningCurrency] = useState(null)\n const [onPresentSwapWarningModal] = useModal(<SwapWarningModal swapCurrency={swapWarningCurrency} />, false)\n\n useEffect(() => {\n if (swapWarningCurrency) {\n onPresentSwapWarningModal()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [swapWarningCurrency])\n\n const handleInputSelect = useCallback(\n (currencyInput) => {\n setApprovalSubmitted(false) // reset 2 step UI for approvals\n onCurrencySelection(Field.INPUT, currencyInput)\n const showSwapWarning = shouldShowSwapWarning(currencyInput)\n if (showSwapWarning) {\n setSwapWarningCurrency(currencyInput)\n } else {\n setSwapWarningCurrency(null)\n }\n },\n [onCurrencySelection],\n )\n\n \n\n\n const handlePercentInput = useCallback(\n (percent: number) => {\n if (maxAmountInput) {\n onUserInput(Field.INPUT, maxAmountInput.multiply(new Percent(percent, 100)).toFixed(8))\n }\n },\n [maxAmountInput, onUserInput],\n )\n\n const handleMaxInput = useCallback(() => {\n if (maxAmountInput) {\n onUserInput(Field.INPUT, maxAmountInput.toExact())\n }\n }, [maxAmountInput, onUserInput])\n\n const handleOutputSelect = useCallback(\n (currencyOutput) => {\n onCurrencySelection(Field.OUTPUT, currencyOutput)\n const showSwapWarning = shouldShowSwapWarning(currencyOutput)\n if (showSwapWarning) {\n setSwapWarningCurrency(currencyOutput)\n } else {\n setSwapWarningCurrency(null)\n }\n },\n\n [onCurrencySelection],\n )\n\n const swapIsUnsupported = useIsTransactionUnsupported(currencies?.INPUT, currencies?.OUTPUT)\n\n const [onPresentImportTokenWarningModal] = useModal(\n <ImportTokenWarningModal tokens={importTokensNotInDefault} onCancel={() => router.push('/swap')} />,\n )\n\n useEffect(() => {\n if (importTokensNotInDefault.length > 0) {\n onPresentImportTokenWarningModal()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [importTokensNotInDefault.length])\n\n const [onPresentConfirmModal] = useModal(\n <ConfirmSwapModal\n trade={trade}\n originalTrade={tradeToConfirm}\n onAcceptChanges={handleAcceptChanges}\n attemptingTxn={attemptingTxn}\n txHash={txHash}\n recipient={recipient}\n allowedSlippage={allowedSlippage}\n onConfirm={handleSwap}\n swapErrorMessage={swapErrorMessage}\n customOnDismiss={handleConfirmDismiss}\n />,\n true,\n true,\n 'confirmSwapModal',\n )\n\n const hasAmount = Boolean(parsedAmount)\n\n const onRefreshPrice = useCallback(() => {\n if (hasAmount) {\n refreshBlockNumber()\n }\n }, [hasAmount, refreshBlockNumber])\n\n // const isChartSupported = useMemo(() => CHART_SUPPORT_CHAIN_IDS.includes(chainId), [chainId])\n const isChartSupported = false\n\n\n return (\n <Page removePadding={isChartExpanded} hideFooterOnDesktop={isChartExpanded}>\n <Flex width=\"100%\" justifyContent=\"center\" position=\"relative\">\n {!isMobile && isChartSupported && (\n <PriceChartContainer\n inputCurrencyId={inputCurrencyId}\n inputCurrency={currencies[Field.INPUT]}\n outputCurrencyId={outputCurrencyId}\n outputCurrency={currencies[Field.OUTPUT]}\n isChartExpanded={isChartExpanded}\n setIsChartExpanded={setIsChartExpanded}\n isChartDisplayed={isChartDisplayed}\n currentSwapPrice={singleTokenPrice}\n />\n )}\n {isChartSupported && (\n <BottomDrawer\n content={\n <PriceChartContainer\n inputCurrencyId={inputCurrencyId}\n inputCurrency={currencies[Field.INPUT]}\n outputCurrencyId={outputCurrencyId}\n outputCurrency={currencies[Field.OUTPUT]}\n isChartExpanded={isChartExpanded}\n setIsChartExpanded={setIsChartExpanded}\n isChartDisplayed={isChartDisplayed}\n currentSwapPrice={singleTokenPrice}\n isMobile\n />\n }\n isOpen={isChartDisplayed}\n setIsOpen={setIsChartDisplayed}\n />\n )}\n <Flex flexDirection=\"column\">\n <StyledSwapContainer $isChartExpanded={isChartExpanded}>\n <StyledInputCurrencyWrapper mt={isChartExpanded ? '24px' : '0'}>\n <AppBody>\n <CurrencyInputHeader\n title={t('Swap')}\n subtitle={t('Trade tokens in an instant')}\n setIsChartDisplayed={setIsChartDisplayed}\n isChartDisplayed={isChartDisplayed}\n hasAmount={hasAmount}\n onRefreshPrice={onRefreshPrice}\n />\n <Wrapper id=\"swap-page\" style={{ minHeight: '412px' }}>\n <AutoColumn gap=\"sm\">\n <CurrencyInputPanel\n label={\n independentField === Field.OUTPUT && !showWrap && trade ? t('From (estimated)') : t('From')\n }\n showBUSD\n value={formattedAmounts[Field.INPUT]}\n showMaxButton={!atMaxAmountInput}\n currency={currencies[Field.INPUT]}\n onUserInput={handleTypeInput}\n onMax={handleMaxInput}\n onCurrencySelect={handleInputSelect}\n otherCurrency={currencies[Field.OUTPUT]}\n id=\"swap-currency-input\"\n onPercentInput={handlePercentInput}\n showQuickInputButton\n maxAmount={maxAmountInput}\n isMaxShow\n \n />\n <AutoColumn justify=\"space-between\">\n <AutoRow justify={isExpertMode ? 'space-between' : 'center'} style={{ padding: '0 1rem' }}>\n <SwitchIconButton\n variant=\"light\"\n scale=\"sm\"\n onClick={() => {\n setApprovalSubmitted(false) // reset 2 step UI for approvals\n onSwitchTokens()\n }}\n >\n <ArrowDownIcon\n className=\"icon-down\"\n color={currencies[Field.INPUT] && currencies[Field.OUTPUT] ? 'primary' : 'text'}\n />\n <ArrowUpDownIcon\n className=\"icon-up-down\"\n color={currencies[Field.INPUT] && currencies[Field.OUTPUT] ? 'primary' : 'text'}\n />\n </SwitchIconButton>\n {recipient === null && !showWrap && isExpertMode ? (\n <Button variant=\"text\" id=\"add-recipient-button\" onClick={() => onChangeRecipient('')}>\n {t('+ Add a send (optional)')}\n </Button>\n ) : null}\n </AutoRow>\n </AutoColumn>\n <CurrencyInputPanel\n value={formattedAmounts[Field.OUTPUT]}\n onUserInput={handleTypeOutput}\n label={independentField === Field.INPUT && !showWrap && trade ? t('To (estimated)') : t('To')}\n showMaxButton={false}\n currency={currencies[Field.OUTPUT]}\n onCurrencySelect={handleOutputSelect}\n otherCurrency={currencies[Field.INPUT]}\n id=\"swap-currency-output\"\n showBUSD\n />\n\n {isExpertMode && recipient !== null && !showWrap ? (\n <>\n <AutoRow justify=\"space-between\" style={{ padding: '0 1rem' }}>\n <ArrowWrapper clickable={false}>\n <ArrowDownIcon width=\"16px\" />\n </ArrowWrapper>\n <Button variant=\"text\" id=\"remove-recipient-button\" onClick={() => onChangeRecipient(null)}>\n {t('- Remove send')}\n </Button>\n </AutoRow>\n <AddressInputPanel id=\"recipient\" value={recipient} onChange={onChangeRecipient} />\n </>\n ) : null}\n\n {showWrap ? null : (\n <AutoColumn gap=\"7px\" style={{ padding: '0 16px' }}>\n <RowBetween align=\"center\">\n {Boolean(trade) && (\n <>\n <Label>{t('Price')}</Label>\n {isLoading ? (\n <Skeleton width=\"100%\" ml=\"8px\" height=\"24px\" />\n ) : (\n <TradePrice\n price={trade?.executionPrice}\n showInverted={showInverted}\n setShowInverted={setShowInverted}\n />\n )}\n </>\n )}\n </RowBetween>\n <RowBetween align=\"center\">\n <Label>{t('Slippage Tolerance')}</Label>\n <Text bold color=\"primary\">\n {allowedSlippage / 100}%\n </Text>\n </RowBetween>\n </AutoColumn>\n )}\n </AutoColumn>\n <Box mt=\"0.25rem\">\n {swapIsUnsupported ? (\n <Button width=\"100%\" disabled>\n {t('Unsupported Asset')}\n </Button>\n ) : !account ? (\n <ConnectWalletButton width=\"100%\" />\n ) : showWrap ? (\n <Button width=\"100%\" disabled={Boolean(wrapInputError)} onClick={onWrap}>\n {wrapInputError ??\n (wrapType === WrapType.WRAP ? 'Wrap' : wrapType === WrapType.UNWRAP ? 'Unwrap' : null)}\n </Button>\n ) : noRoute && userHasSpecifiedInputOutput ? (\n <GreyCard style={{ textAlign: 'center', padding: '0.75rem', height: '64px' }}>\n <Text color=\"textDisabled\" fontSize={16} fontWeight={500} marginTop=\"6px\">\n {t('Insufficient liquidity for this trade.')}\n </Text>\n {singleHopOnly && (\n <Text color=\"textDisabled\" fontSize={16} fontWeight={500} marginTop=\"6px\">\n {t('Try enabling multi-hop trades.')}\n </Text>\n )}\n </GreyCard>\n ) : showApproveFlow ? (\n <RowBetween>\n <Button\n variant={approval === ApprovalState.APPROVED ? 'success' : 'primary'}\n onClick={approveCallback}\n disabled={approval !== ApprovalState.NOT_APPROVED || approvalSubmitted}\n width=\"48%\"\n >\n {approval === ApprovalState.PENDING ? (\n <AutoRow gap=\"6px\" justify=\"center\">\n {t('Enabling')} <CircleLoader stroke=\"white\" />\n </AutoRow>\n ) : approvalSubmitted && approval === ApprovalState.APPROVED ? (\n t('Enabled')\n ) : (\n t('Enable %asset%', { asset: currencies[Field.INPUT]?.symbol ?? '' })\n )}\n </Button>\n <Button\n variant={isValid && priceImpactSeverity > 2 ? 'danger' : 'primary'}\n onClick={() => {\n if (isExpertMode) {\n handleSwap()\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n onPresentConfirmModal()\n }\n }}\n width=\"48%\"\n id=\"swap-button\"\n disabled={\n !isValid ||\n approval !== ApprovalState.APPROVED ||\n (priceImpactSeverity > 3 && !isExpertMode)\n }\n >\n {priceImpactSeverity > 3 && !isExpertMode\n ? t('Price Impact High')\n : priceImpactSeverity > 2\n ? t('Swap Anyway')\n : t('Swap')}\n </Button>\n </RowBetween>\n ) : (\n <Button\n variant={isValid && priceImpactSeverity > 2 && !swapCallbackError ? 'danger' : 'primary'}\n onClick={() => {\n if (isExpertMode) {\n handleSwap()\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n onPresentConfirmModal()\n }\n }}\n id=\"swap-button\"\n width=\"100%\"\n disabled={!isValid || (priceImpactSeverity > 3 && !isExpertMode) || !!swapCallbackError}\n >\n {swapInputError ||\n (priceImpactSeverity > 3 && !isExpertMode\n ? t('Price Impact Too High')\n : priceImpactSeverity > 2\n ? t('Swap Anyway')\n : t('Swap'))}\n </Button>\n )}\n {showApproveFlow && (\n <Column style={{ marginTop: '1rem' }}>\n <ProgressSteps steps={[approval === ApprovalState.APPROVED]} />\n </Column>\n )}\n {isExpertMode && swapErrorMessage ? <SwapCallbackError error={swapErrorMessage} /> : null}\n </Box>\n </Wrapper>\n </AppBody>\n {!swapIsUnsupported ? (\n trade && <AdvancedSwapDetailsDropdown trade={trade} />\n ) : (\n <UnsupportedCurrencyFooter currencies={[currencies.INPUT, currencies.OUTPUT]} />\n )}\n </StyledInputCurrencyWrapper>\n </StyledSwapContainer>\n </Flex>\n </Flex>\n </Page>\n )\n}\n","import { Percent } from '@pancakeswap/sdk'\nimport { ContextApi } from 'contexts/Localization/types'\nimport { ALLOWED_PRICE_IMPACT_HIGH, PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN } from 'config/constants/exchange'\n\n/**\n * Given the price impact, get user confirmation.\n *\n * @param priceImpactWithoutFee price impact of the trade without the fee.\n * @param t Translation\n */\nexport default function confirmPriceImpactWithoutFee(priceImpactWithoutFee: Percent, t: ContextApi['t']): boolean {\n if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) {\n const confirmWord = 'confirm'\n return (\n // eslint-disable-next-line no-alert\n window.prompt(\n t(\n 'This swap has a price impact of at least %amount%%. Please type the word \"%word%\" to continue with this swap.',\n {\n amount: PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(0),\n word: confirmWord,\n },\n ),\n ) === confirmWord\n )\n }\n if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) {\n // eslint-disable-next-line no-alert\n return window.confirm(\n t(\n 'This swap has a price impact of at least %amount%%. Please confirm that you would like to continue with this swap.',\n {\n amount: ALLOWED_PRICE_IMPACT_HIGH.toFixed(0),\n },\n ),\n )\n }\n return true\n}\n","import { Flex } from '@pancakeswap/uikit'\nimport Swap from '../views/Swap'\n\nconst SwapPage = () => {\n return (\n // <Flex background=\"url('/images/swap-back.jpg') 50% / cover no-repeat #191919\">\n <Swap />\n // </Flex>\n )\n}\n\nexport default SwapPage\n","import { CurrencyAmount, ETHER, JSBI } from '@pancakeswap/sdk'\nimport { MIN_BNB, BIG_INT_ZERO } from 'config/constants/exchange'\n\n/**\n * Given some token amount, return the max that can be spent of it\n * @param currencyAmount to return max of\n */\nexport function maxAmountSpend(currencyAmount?: CurrencyAmount): CurrencyAmount | undefined {\n if (!currencyAmount) return undefined\n if (currencyAmount.currency === ETHER) {\n if (JSBI.greaterThan(currencyAmount.raw, MIN_BNB)) {\n return CurrencyAmount.ether(JSBI.subtract(currencyAmount.raw, MIN_BNB))\n }\n return CurrencyAmount.ether(BIG_INT_ZERO)\n }\n return currencyAmount\n}\n"],"names":["window","__NEXT_P","push","param","content","isOpen","setIsOpen","ref","useRef","shouldRender","useDelayedUnmount","isMobile","useMatchBreakpoints","useOnClickOutside","current","useCallback","portal","getPortalRoot","createPortal","_jsxs","_Fragment","children","_jsx","Overlay","isUnmounting","DrawerContainer","Box","position","right","top","IconButton","variant","onClick","CloseIcon","props","Svg","_object_spread_props","_object_spread","viewBox","d","stroke","strokeWidth","fillRule","clipRule","isMounted","delayTime","useState","setShouldRender","useEffect","timeoutId","setTimeout","clearTimeout","styled","FlexGap","Flex","gap","rowGap","columnGap","DetailsFooter","theme","colors","text","invertedContrast","UnsupportedModal","currencies","onDismiss","useNetwork","chain","chainId","getChainId","useTranslation","t","tokens","map","currency","wrappedCurrency","unsupportedTokens","useUnsupportedTokens","Modal","title","maxWidth","AutoColumn","token","Object","keys","includes","address","AutoRow","align","CurrencyLogo","size","Text","symbol","Link","external","small","color","href","getBscScanLink","concat","UnsupportedCurrencyFooter","onPresentModal","useModal","Button","swapWarningTokens","values","SwapWarningTokens","swapCurrency","some","warningToken","equals","isLoading","setFetch","refreshBlockNumber","useSWRConfig","mutate","InputPanel","backgroundAlt","ContainerRow","error","failure","background","InputContainer","Input","primary","textDisabled","AddressInputPanel","id","value","onChange","isAddress","undefined","handleInput","event","withoutSpaces","target","replace","Boolean","length","RowBetween","className","type","autoComplete","autoCorrect","autoCapitalize","spellCheck","placeholder","pattern","Wrapper","ArrowWrapper","clickable","css","ErrorText","severity","warning","success","StyledBalanceMaxMini","dropdown","TruncatedText","attrs","ellipsis","SwapCallbackErrorInner","SwapCallbackErrorInnerAlertTriangle","SwapCallbackError","ErrorIcon","width","p","SwapShowAcceptChanges","FormattedPriceImpact","priceImpact","fontSize","warningSeverity","lessThan","ONE_BIPS","toFixed","SwapModalFooterContainer","radii","default","cardBorder","SwapModalFooter","slippageAdjustedAmounts","trade","onConfirm","allowedSlippage","swapErrorMessage","disabledConfirm","showInverted","setShowInverted","useMemo","computeSlippageAdjustedAmounts","computeTradePriceBreakdown","priceImpactWithoutFee","realizedLPFee","totalFeePercent","TOTAL_FEE","lpHoldersFeePercent","LP_HOLDERS_FEE","treasuryFeePercent","TREASURY_FEE","buyBackFeePercent","BUYBACK_FEE","style","justifyContent","alignItems","display","textAlign","paddingLeft","formatExecutionPrice","AutoRenewIcon","RowFixed","tradeType","TradeType","QuestionHelper","ml","Field","toSignificant","marginLeft","outputAmount","inputAmount","mb","amount","disabled","mt","SwapModalHeader","recipient","showAcceptChanges","onAcceptChanges","priceImpactSeverity","tradeInfoText","split","estimatedText","transactionRevertText","truncatedRecipient","truncateHash","recipientInfoText","recipientSentToText","postSentToText","marginRight","ArrowDownIcon","justify","mr","bold","padding","b","originalTrade","customOnDismiss","attemptingTxn","txHash","tradeB","tradeA","currencyEquals","equalTo","modalHeader","modalBottom","pendingText","amountA","symbolA","amountB","symbolB","confirmationContent","TransactionErrorContent","message","ConfirmationModalContent","topContent","bottomContent","TransactionConfirmationModal","hash","currencyToAdd","isDefined","x","filterFn","last","setLast","prev","useLast","memo","flexWrap","route","path","i","isLastItem","unwrappedToken","Fragment","ChevronRightIcon","TradeSummary","isExactIn","placement","AdvancedSwapDetails","useUserSlippageTolerance","showRoute","span","SwapRoute","AdvancedDetailsFooter","show","AdvancedSwapDetailsDropdown","rest","lastTrade","useLastTruthy","TradePrice","price","formattedPrice","invert","baseCurrency","quoteCurrency","label","Grouping","Circle","confirmed","backgroundDisabled","CircleRow","Connector","prevConfirmed","ProgressCircles","steps","step","isZero","hexNumberString","test","useSwapCallArguments","INITIAL_ALLOWED_SLIPPAGE","recipientAddress","useAccount","library","useEthersSigner","account","deadline","useTransactionDeadline","contract","getRouterContract","swapMethods","Router","feeOnTransfer","Percent","JSBI","BIPS_BASE","toNumber","parameters","SwapCallbackState","INVALID","LOADING","VALID","WrapType","NOT_APPLICABLE","WRAP","UNWRAP","wrapType","handleContinueClick","isConfirmed","setIsConfirmed","Checkbox","name","checked","scale","userSelect","LinkExternal","StyledModalContainer","ModalContainer","MessageContainer","Message","useTheme","SWAP_WARNING","SwapWarningTokensConfig","component","SafemoonWarning","BondlyWarning","ItamWarning","CcarWarning","BTTWarning","RugPullWarning","FREEWarning","minWidth","ModalHeader","gradients","cardHeader","Heading","ModalBody","Acknowledgement","StyledPriceChart","mediaQueries","sm","$isDark","$isExpanded","$isFullWidthContainer","defaultProps","height","lg","dynamic","ssr","$active","StyledSwapContainer","xxl","$isChartExpanded","StyledInputCurrencyWrapper","xs","DisabledIcon","fill","defs","clipPath","use","xlinkHref","g","circle","cx","cy","r","transform","strokeDasharray","strokeDashoffset","animate","attributeName","begin","repeatCount","dur","animateTransform","attributeType","from","to","CurrencyInputContainer","textSubtle","subtitle","hasAmount","setIsChartDisplayed","isChartDisplayed","onRefreshPrice","expertMode","useExpertModeManager","onPresentTransactionsModal","TransactionsModal","handleOnClick","flexDirection","as","br","NotificationDot","GlobalSettings","mode","SettingsMode","HistoryIcon","RefreshIcon","onCancel","ImportToken","handleCurrencySelect","Label","secondary","SwitchIconButton","Swap","parsedAmounts","router","useRouter","loadedUrlParams","useDefaultsFromURLSearch","useMatchBreakpointsContext","isChartExpanded","useExchangeChartManager","userChartPreference","setUserChartPreference","useRefreshBlockNumberID","useCurrency","inputCurrencyId","outputCurrencyId","loadedInputCurrency","loadedOutputCurrency","urlLoadedTokens","filter","c","Token","defaultTokens","useAllTokens","importTokensNotInDefault","isExpertMode","useSwapState","independentField","typedValue","currencyId","inputCurrency","outputCurrency","useDerivedSwapInfo","v2Trade","currencyBalances","parsedAmount","inputError","useWrapCallback","useCallWithGasPrice","callWithGasPrice","wbnbContract","useWCLDContract","balance","useCurrencyBalance","tryParseAmount","addTransaction","useTransactionAdder","sufficientBalance","ETHER","WNATIVE","execute","txReceipt","raw","toString","summary","console","showWrap","useSingleTokenSwapInfo","useSwapActionHandlers","onSwitchTokens","onCurrencySelection","onUserInput","onChangeRecipient","isValid","swapInputError","dependentField","handleTypeInput","handleTypeOutput","tradeToConfirm","setSwapState","formattedAmounts","toExact","userHasSpecifiedInputOutput","greaterThan","BIG_INT_ZERO","noRoute","useApproveCallbackFromTrade","approval","approveCallback","approvalSubmitted","setApprovalSubmitted","ApprovalState","maxAmountInput","maxAmountSpend","atMaxAmountInput","useSwapCallback","gasPrice","useGasPrice","swapCalls","state","callback","onSwap","estimatedCalls","successfulEstimation","errorCalls","methodName","args","gasEstimate","Promise","all","call","options","estimateGas","then","catch","gasError","callStatic","result","callError","transactionErrorToUserReadableMessage","find","el","ix","list","Error","gasLimit","calculateGasMargin","response","inputSymbol","outputSymbol","base","withRecipient","code","singleHopOnly","useUserSingleHopOnly","handleSwap","PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN","confirmWord","prompt","word","ALLOWED_PRICE_IMPACT_HIGH","confirm","confirmPriceImpactWithoutFee","swapCallback","log","showApproveFlow","handleConfirmDismiss","handleAcceptChanges","swapWarningCurrency","setSwapWarningCurrency","onPresentSwapWarningModal","SwapWarningModal","handleInputSelect","currencyInput","showSwapWarning","shouldShowSwapWarning","handlePercentInput","percent","multiply","handleMaxInput","handleOutputSelect","currencyOutput","swapIsUnsupported","useIsTransactionUnsupported","INPUT","OUTPUT","onPresentImportTokenWarningModal","ImportTokenWarningModal","onPresentConfirmModal","ConfirmSwapModal","Page","removePadding","hideFooterOnDesktop","AppBody","CurrencyInputHeader","minHeight","CurrencyInputPanel","showBUSD","showMaxButton","onMax","onCurrencySelect","otherCurrency","onPercentInput","showQuickInputButton","maxAmount","isMaxShow","ArrowUpDownIcon","Skeleton","executionPrice","wrapInputError","onWrap","GreyCard","fontWeight","marginTop","CircleLoader","asset","swapCallbackError","ConnectWalletButton","Column","ProgressSteps","currencyAmount","MIN_BNB","CurrencyAmount"],"sourceRoot":""}