{"version":3,"sources":["assets/placeholder.png","assets/eth.png","assets/logo-white.png","assets/logo.png","contexts/LocalStorage.js","Theme/index.js","apollo/client.js","constants/index.js","apollo/queries.js","utils/tokenLists.ts","contexts/Application.js","utils/index.js","contexts/GlobalData.js","utils/data.ts","contexts/TokenData.js","contexts/PairData.js","contexts/User.js","components/Row/index.js","components/Column/index.js","components/LocalLoader/index.js","components/Link/index.js","components/index.js","components/TokenLogo/index.js","components/DoubleLogo/index.js","hooks/index.ts","components/Popover/index.tsx","components/QuestionHelper/index.tsx","components/FormattedName/index.js","components/PairList/index.js","components/TokenList/index.js","components/DropdownSelect/index.js","components/TxnList/index.js","components/TradingviewChart/index.js","components/ButtonStyled/index.js","components/GlobalChart/index.js","components/Search/index.js","components/GlobalStats/index.js","components/Panel/index.js","pages/GlobalPage.js","components/CandleChart/index.js","components/TokenChart/index.js","components/Copy/index.js","components/Warning/index.js","pages/TokenPage.js","components/PairChart/index.js","pages/PairPage.js","pages/AccountPage.js","pages/AllTokensPage.js","pages/AllPairsPage.js","components/AccountSearch/index.js","components/PinnedData/index.js","components/Title/index.js","components/Toggle/index.tsx","components/SideNav/index.js","pages/AccountLookup.js","App.js","index.js"],"names":["module","exports","UPDATABLE_KEYS","LocalStorageContext","createContext","useLocalStorageContext","useContext","reducer","state","type","payload","key","value","some","k","Error","init","defaultLocalStorage","parsed","JSON","parse","window","localStorage","getItem","Provider","children","useReducer","undefined","dispatch","updateKey","useCallback","useMemo","Updater","useEffect","setItem","stringify","Math","floor","Date","now","useDarkModeManager","isDarkMode","toggleDarkMode","usePathDismissed","path","newPaths","useSavedAccounts","savedAccounts","addAccount","account","removeAccount","index","indexOf","slice","length","useSavedPairs","address","token0Address","token1Address","token0Symbol","token1Symbol","newList","useSavedTokens","symbol","ThemeProvider","darkMode","theme","color","customColor","textColor","panelColor","backgroundColor","uniswapPink","concreteGray","inputBackground","shadowColor","mercuryGray","text1","text2","text3","text4","text5","white","bg1","bg2","bg3","bg4","bg5","bg6","modalBG","advancedBG","onlyLight","divider","primary1","primary2","primary3","primary4","primary5","primaryText1","secondary1","secondary2","secondary3","shadow1","red1","green1","yellow1","yellow2","link","blue","background","TextWrapper","styled","Text","TYPE","props","fontWeight","fontSize","ThemedBackground","div","a","attrs","target","rel","GlobalStyle","createGlobalStyle","client","ApolloClient","HttpLink","uri","cache","InMemoryCache","shouldBatch","healthClient","blockClient","timeframeOptions","WEEK","MONTH","ALL_TIME","SUPPORTED_LIST_URLS__NO_ENS","OVERVIEW_TOKEN_BLACKLIST","PAIR_BLACKLIST","SUBGRAPH_HEALTH","gql","GET_BLOCK","GET_BLOCKS","timestamps","queryString","map","timestamp","PRICES_BY_BLOCK","tokenAddress","blocks","block","number","HOURLY_PAIR_RATES","pairAddress","BNB_PRICE","USER_TRANSACTIONS","PAIR_CHART","GLOBAL_CHART","GLOBAL_DATA","GLOBAL_TXNS","ALL_TOKENS","TOKEN_SEARCH","PAIR_SEARCH","ALL_PAIRS","PairFields","PAIRS_CURRENT","PAIR_DATA","PAIRS_BULK","PAIRS_HISTORICAL_BULK","pairs","pairsString","pair","TOKEN_CHART","TokenFields","TOKENS_CURRENT","TOKENS_DYNAMIC","TOKEN_DATA","FILTERED_TRANSACTIONS","uriToHttp","split","toLowerCase","substr","hash","match","name","getTokenList","listUrl","urls","i","url","isLast","response","fetch","console","debug","ok","json","dayjs","extend","utc","ApplicationContext","useApplicationContext","currency","newTimeFrame","supportedTokens","INITIAL_STATE","CURRENCY","TIME_KEY","update","updateTimeframe","updateSessionStart","updateSupportedTokens","updateLatestBlock","updateHeadBlock","useLatestBlocks","latestBlock","headBlock","query","then","res","syncedBlock","data","indexingStatusForCurrentVersion","chains","chainHeadBlock","catch","e","log","useTimeframe","useListedTokens","reduce","fetchedTokens","newTokens","Promise","resolve","tokens","allFetched","formatted","t","fetchList","toFormat","_Decimal","getTimeframe","timeWindow","utcStartTime","utcEndTime","subtract","endOf","unix","startOf","getPoolLink","remove","getSwapLink","localNumber","val","Numeral","format","BigNumber","set","EXPONENTIAL_AT","toNiceDate","date","getTimestampsForChanges","utcCurrentTime","splitQuery","localClient","vars","list","skipCount","fetchedData","allFound","skip","end","sliced","fetchPolicy","result","Object","keys","getBlockFromTimestamp","variables","timestampFrom","timestampTo","getBlocksFromTimestamps","push","toNiceDateYear","isAddress","ethers","utils","getAddress","toK","num","tx","formatDollarAmount","digits","Intl","NumberFormat","style","minimumFractionDigits","maximumFractionDigits","formattedNum","usd","acceptNegatives","isNaN","parseFloat","toFixed","Number","toLocaleString","formattedPercent","percent","fixedPercent","get2DayPercentChange","valueNow","value24HoursAgo","value48HoursAgo","currentChange","previousChange","adjustedPercentChange","isFinite","getPercentChange","weekOfYear","GlobalDataContext","useGlobalDataContext","globalData","transactions","daily","weekly","chartData","bnbPrice","oneDayPrice","bnbPriceChange","allPairs","allTokens","topLps","updateTransactions","updateChart","updateBnbPrice","updateAllPairsInUniswap","updateAllTokensInUniswap","updateTopLps","getGlobalData","oldBnbPrice","oneDayData","twoDayData","utcOneDayBack","utcTwoDaysBack","utcOneWeekBack","utcTwoWeeksBack","oneDayBlock","twoDayBlock","oneWeekBlock","twoWeekBlock","neverSwapFactories","oneDayResult","twoDayResult","oneWeekResult","oneWeekData","twoWeekResult","twoWeekData","totalVolumeUSD","oneDayVolumeUSD","volumeChangeUSD","oneWeekVolume","weeklyVolumeChange","txCount","oneDayTxns","txnChange","totalLiquidityUSD","totalLiquidityBNB","liquidityChangeUSD","getChartData","oldestDateToFetch","weeklyData","startTime","concat","neverSwapDayDatas","dayIndexSet","Set","dayIndexArray","forEach","dayData","add","dailyVolumeUSD","latestLiquidityUSD","latestDayDats","mostLiquidTokens","currentDayIndex","nextDay","has","sort","b","parseInt","startIndexWeekly","currentWeek","entry","week","weeklyVolumeUSD","getGlobalTransactions","mints","burns","swaps","transaction","mint","burn","swap","getBnbPrice","bnbPriceOneDay","priceChangeBNB","resultOneDay","currentPrice","bundles","oneDayBackPrice","getAllPairsOnUniswap","utcOneHourBack","getAllTokensOnUniswap","useGlobalData","useBnbPrice","bnbPriceOld","fetchData","useGlobalChartData","useState","oldestDateFetch","setOldestDateFetched","activeWindow","chartDataDaily","chartDataWeekly","newChartData","newWeeklyData","newPrice","priceChange","checkForBnbPrice","TOKEN_OVERRIDES","updateNameData","token0","id","includes","token1","TokenDataContext","useTokenDataContext","topTokens","added","token","txns","interval","updateTopTokens","updateTokenTxns","updateChartData","updateAllPairs","updatePriceData","getTopTokens","current","obj","cur","all","oneDayHistory","twoDayHistory","tradeVolumeUSD","currentLiquidityUSD","totalLiquidity","derivedBNB","oldLiquidityUSD","priceChangeUSD","priceUSD","oneDayVolumeBNB","tradeVolume","aaveData","reserveUSD","bulkResults","getTokenData","untrackedVolumeUSD","oneDayVolumeUT","volumeChangeUT","getTokenTransactions","allPairsFormatted","getTokenPairs","getIntervalTokenData","time","filter","row","values","brow","formattedHistory","open","close","getTokenChartData","tokenAddr","tokenDayDatas","latestPriceUSD","dayString","getData","useTokenData","tokenData","useTokenPriceData","currentTime","windowSize","useAllTokenData","safeAccess","object","accumulator","currentValue","PairDataContext","usePairDataContext","topPairs","hourlyData","updateTopPairs","updatePairTxns","updateHourlyData","getBulkPairData","pairList","t1","t2","tWeek","b1","b2","bWeek","newData","oneWeekHistory","parseData","pairData","volumeUSD","oneDayVolumeUntracked","volumeChangeUntracked","oneWeekVolumeUSD","trackedReserveUSD","trackedReserveBNB","getPairTransactions","getPairChartData","pairDayDatas","getHourlyRateData","rate0","token0Price","rate1","token1Price","formattedHistoryRate0","formattedHistoryRate1","formattedPairs","usePairData","useAllPairData","UserContext","positions","miningPositions","historyData","updatePositions","updateMiningPositions","updateUserSnapshots","updateUserPairReturns","useUserTransactions","user","Row","Box","align","padding","border","borderRadius","justify","RowBetween","AutoRow","wrap","gap","RowFixed","Column","AutoColumn","pulse","keyframes","Wrapper","fill","height","css","AnimatedImg","LocalLoader","src","require","alt","Link","external","rest","CustomLink","RouterLink","lighten","darken","BasicLink","Divider","IconWrapper","Hover","fade","StyledIcon","EmptyCard","PageWrapper","span","ul","li","isActive","ContentWrapper","ContentWrapperLarge","FullWrapper","BAD_IMAGES","Inline","Image","img","size","StyledEthereumLogo","TokenLogo","header","error","setError","PlaceHolder","EthereumLogo","boxShadow","onError","event","preventDefault","DoubleTokenLogo","a0","a1","margin","TokenWrapper","sizeraw","toString","HigherLogo","CoveredLogo","useColor","setColor","Vibrant","from","getPalette","err","palette","detectedHex","hex","AAscore","shade","PopoverContainer","show","transparentize","ReferenceElement","Arrow","Popover","content","placement","referenceElement","setReferenceElement","popperElement","setPopperElement","arrowElement","setArrowElement","usePopper","strategy","modifiers","options","offset","element","styles","attributes","callback","delay","savedCallback","useRef","tick","setInterval","clearInterval","useInterval","ref","popper","className","arrow","QuestionWrapper","TooltipContainer","Tooltip","text","QuestionHelper","disabled","setShow","marginLeft","onClick","onMouseEnter","onMouseLeave","adjustSize","FormattedName","maxCharacters","showHover","setShowHover","PageButtons","faded","List","DashGrid","ListWrapper","ClickableText","DataText","Flex","SORT_FIELD","FIELD_TO_VALUE","withRouter","disbaleLinks","maxItems","below600","useMedia","below740","below1080","page","setPage","maxPage","setMaxPage","ITEMS_PER_PAGE","sortDirection","setSortDirection","sortedColumn","setSortedColumn","extraPages","ListItem","liquidity","volume","apy","focus","area","marginRight","width","whiteSpace","to","addressA","addressB","pairA","pairB","center","alignItems","justifyContent","p","itemMax","below680","formattedTokens","filteredList","item","toUpperCase","Dropdown","ArrowStyled","DropdownSelect","active","setActive","showDropdown","toggleDropdown","option","SortText","button","TXN_TYPE","ALL","SWAP","ADD","REMOVE","TxnList","symbol0Override","symbol1Override","filteredItems","setFilteredItems","txFilter","setTxFilter","toggleCurrency","useCurrentCurrency","newTxns","newTxn","token0Amount","amount0","token1Amount","amount1","amountUSD","sender","netToken0","amount0In","amount0Out","netToken1","amount1In","amount1Out","abs","filtered","below780","href","symbol0","symbol1","formattedS0","formattedS1","getTransactionType","valueETH","inSeconds","diff","inMinutes","inHours","inDays","formatTime","pl","CHART_TYPES","TradingViewChart","base","baseChange","field","title","useWeekly","chartCreated","setChartCreated","dataPrev","usePrevious","tooltip","document","getElementById","removeChild","resize","formattedData","topScale","previousTheme","setLastBarText","toolTip","innerHTML","chart","createChart","layout","rightPriceScale","scaleMargins","top","bottom","borderVisible","timeScale","grid","horzLines","visible","vertLines","crosshair","horzLine","labelVisible","vertLine","localization","priceFormatter","series","addHistogramSeries","priceFormat","lineColor","lineWidth","addAreaSeries","topColor","bottomColor","setData","createElement","setAttribute","appendChild","display","left","subscribeCrosshairMove","param","point","x","y","dateStr","year","month","day","price","seriesPrices","get","fitContent","scrollToPosition","Base","RebassButton","ButtonLight","ButtonDark","ButtonFaded","OptionButton","CHART_VIEW","VOLUME","LIQUIDITY","VOLUME_WINDOW","GlobalChart","chartView","setChartView","volumeWindow","setVolumeWindow","dailyData","chartDataFiltered","currentData","below800","isClient","container","clientWidth","setWidth","handleResize","addEventListener","removeEventListener","aspect","position","zIndex","Container","small","Input","input","large","SearchIconLarge","SearchIcon","CloseIcon","X","Menu","hide","MenuItem","Heading","Gray","Blue","Search","useAllTokensInUniswap","allTokenData","useAllPairsInUniswap","allPairData","showMenu","toggleMenu","setValue","toggleShadow","toggleBottomShadow","below700","below470","below410","searchedTokens","setSearchedTokens","searchedPairs","setSearchedPairs","escapeRegExp","string","replace","asSymbol","as0","as1","asAddress","foundTokens","asName","searchedToken","included","uniqueTokens","found","searchedPair","uniquePairs","pairsFound","filteredTokenList","tokenA","tokenB","tokenEntryKey","RegExp","m","filteredPairList","tokensShown","setTokensShown","pairsShown","setPairsShown","onDismiss","wrapperRef","menuRef","handleClick","contains","shadow","placeholder","onChange","onFocus","Header","Medium","GlobalStats","below1295","below1180","below1024","below400","below816","setShowPriceCard","pairCount","formattedEthPrice","oneDayFees","mr","panelPseudo","Panel","RebassBox","hover","grouped","rounded","last","ListOptions","GridRow","useGlobalTransactions","querySelector","scrollTo","behavior","paddingBottom","mb","lineHeight","minHeight","marginTop","marginBottom","CandleStickChart","valueFormatter","low","high","min","max","mode","CrosshairMode","Normal","borderColor","candleSeries","addCandlestickSeries","upColor","downColor","borderDownColor","borderUpColor","wickDownColor","wickUpColor","ChartWrapper","PriceOption","PRICE","LINE_PRICE","DATA_FREQUENCY","TokenChart","chartFilter","setChartFilter","frequency","setFrequency","addressPrev","checkForChartData","useTokenChartData","setTimeWindow","prevWindow","hourlyWeek","hourlyMonth","hourlyAll","dailyWeek","dailyMonth","dailyAll","priceData","domain","dataMin","right","barCategoryGap","x1","y1","x2","y2","stopColor","stopOpacity","tickLine","axisLine","tickMargin","minTickGap","tickFormatter","dataKey","orientation","yAxisId","cursor","formatter","labelFormatter","label","labelStyle","paddingTop","contentStyle","wrapperStyle","stackId","strokeWidth","dot","stroke","opacity","CopyIcon","TransactionStatusText","flexRowNoWrap","CopyHelper","toCopy","timeout","isCopied","setIsCopied","staticCopy","didCopy","copy","setTimeout","clearTimeout","useCopyClipboard","setCopied","WarningWrapper","StyledWarningIcon","AlertTriangle","Warning","textContent","mt","ml","minWidth","DashboardWrapper","PanelWrapper","TokenDetailsLayout","WarningGrouping","history","fetchedPairsList","stale","setStale","fetched","setFetched","newFetched","unfetched","newPairData","fetchNewPairData","useDataForList","tokenPairs","useTokenPairs","tokenTxns","TOKEN_PAIRS_KEY","checkForTxns","useTokenTransactions","usingUtVolume","setUsingUtVolume","volumeChange","liquidityChange","txnChangeFormatted","below500","LENGTH","formattedSymbol","location","pathname","dismissed","markAsDismissed","savedTokens","addToken","listedTokens","flexWrap","alingItems","alignSelf","gridColumn","gridRow","OptionsRow","RATE0","RATE1","PairChart","base0","base1","clientHeight","setHeight","usePairChartData","useHourlyRateData","hourlyRate0","hourlyRate1","formattedSymbol0","formattedSymbol1","below1600","FixedPanel","HoverSpan","reserve0","reserve1","pairTxns","usePairTransactions","usingTracked","setUsingTracked","fees","token0USD","token1USD","token0Rate","token1Rate","below900","savedPairs","addPair","flexDirection","AccountWrapper","AccountPage","transactionCount","totalSwappedUSD","total","isBookmarked","handleBookmarkClick","AllTokensPage","AllPairsPage","AccountLink","accountValue","setAccountValue","stopPropagation","RightColumn","SavedButton","ScrollableDiv","setSavedOpen","removePair","removeToken","TitleWrapper","UniIcon","Title","useHistory","Logo","StyledToggle","Toggle","toggle","isMobile","Option","activeText","DesktopWrapper","MobileWrapper","HeaderText","Polling","PollingDot","seconds","sessionStart","setSeconds","useSessionStart","isDark","AppWrapper","Right","Center","WarningBanner","LayoutWrapper","savedOpen","App","globalChartData","showWarning","exacts","strict","render","params","accountAddress","ContextProviders","Updaters","ReactDOM"],"mappings":"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","file":"static/js/main.5ef613d2.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/eth.73dabb37.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","import React, { createContext, useContext, useReducer, useMemo, useCallback, useEffect } from 'react'\n\nconst UNISWAP = 'UNISWAP'\n\nconst VERSION = 'VERSION'\nconst CURRENT_VERSION = 0\nconst LAST_SAVED = 'LAST_SAVED'\nconst DISMISSED_PATHS = 'DISMISSED_PATHS'\nconst SAVED_ACCOUNTS = 'SAVED_ACCOUNTS'\nconst SAVED_TOKENS = 'SAVED_TOKENS'\nconst SAVED_PAIRS = 'SAVED_PAIRS'\n\nconst DARK_MODE = 'DARK_MODE'\n\nconst UPDATABLE_KEYS = [DARK_MODE, DISMISSED_PATHS, SAVED_ACCOUNTS, SAVED_PAIRS, SAVED_TOKENS]\n\nconst UPDATE_KEY = 'UPDATE_KEY'\n\nconst LocalStorageContext = createContext()\n\nfunction useLocalStorageContext() {\n return useContext(LocalStorageContext)\n}\n\nfunction reducer(state, { type, payload }) {\n switch (type) {\n case UPDATE_KEY: {\n const { key, value } = payload\n if (!UPDATABLE_KEYS.some((k) => k === key)) {\n throw Error(`Unexpected key in LocalStorageContext reducer: '${key}'.`)\n } else {\n return {\n ...state,\n [key]: value,\n }\n }\n }\n default: {\n throw Error(`Unexpected action type in LocalStorageContext reducer: '${type}'.`)\n }\n }\n}\n\nfunction init() {\n const defaultLocalStorage = {\n [VERSION]: CURRENT_VERSION,\n [DARK_MODE]: true,\n [DISMISSED_PATHS]: {},\n [SAVED_ACCOUNTS]: [],\n [SAVED_TOKENS]: {},\n [SAVED_PAIRS]: {},\n }\n\n try {\n const parsed = JSON.parse(window.localStorage.getItem(UNISWAP))\n if (parsed[VERSION] !== CURRENT_VERSION) {\n // this is where we could run migration logic\n return defaultLocalStorage\n } else {\n return { ...defaultLocalStorage, ...parsed }\n }\n } catch {\n return defaultLocalStorage\n }\n}\n\nexport default function Provider({ children }) {\n const [state, dispatch] = useReducer(reducer, undefined, init)\n\n const updateKey = useCallback((key, value) => {\n dispatch({ type: UPDATE_KEY, payload: { key, value } })\n }, [])\n\n return (\n [state, { updateKey }], [state, updateKey])}>\n {children}\n \n )\n}\n\nexport function Updater() {\n const [state] = useLocalStorageContext()\n\n useEffect(() => {\n window.localStorage.setItem(UNISWAP, JSON.stringify({ ...state, [LAST_SAVED]: Math.floor(Date.now() / 1000) }))\n })\n\n return null\n}\n\nexport function useDarkModeManager() {\n const [state, { updateKey }] = useLocalStorageContext()\n let isDarkMode = state[DARK_MODE]\n const toggleDarkMode = useCallback(\n (value) => {\n updateKey(DARK_MODE, value === false || value === true ? value : !isDarkMode)\n },\n [updateKey, isDarkMode]\n )\n return [isDarkMode, toggleDarkMode]\n}\n\nexport function usePathDismissed(path) {\n const [state, { updateKey }] = useLocalStorageContext()\n const pathDismissed = state?.[DISMISSED_PATHS]?.[path]\n function dismiss() {\n let newPaths = state?.[DISMISSED_PATHS]\n newPaths[path] = true\n updateKey(DISMISSED_PATHS, newPaths)\n }\n\n return [pathDismissed, dismiss]\n}\n\nexport function useSavedAccounts() {\n const [state, { updateKey }] = useLocalStorageContext()\n const savedAccounts = state?.[SAVED_ACCOUNTS]\n\n const addAccount = useCallback(\n (account) => {\n updateKey(SAVED_ACCOUNTS, [...(savedAccounts ?? []), account])\n },\n [savedAccounts, updateKey]\n )\n\n const removeAccount = useCallback(\n (account) => {\n let index = savedAccounts?.indexOf(account) ?? -1\n if (index > -1) {\n updateKey(SAVED_ACCOUNTS, [\n ...savedAccounts.slice(0, index),\n ...savedAccounts.slice(index + 1, savedAccounts.length),\n ])\n }\n },\n [savedAccounts, updateKey]\n )\n\n return [savedAccounts, addAccount, removeAccount]\n}\n\nexport function useSavedPairs() {\n const [state, { updateKey }] = useLocalStorageContext()\n const savedPairs = state?.[SAVED_PAIRS]\n\n function addPair(address, token0Address, token1Address, token0Symbol, token1Symbol) {\n let newList = state?.[SAVED_PAIRS]\n newList[address] = {\n address,\n token0Address,\n token1Address,\n token0Symbol,\n token1Symbol,\n }\n updateKey(SAVED_PAIRS, newList)\n }\n\n function removePair(address) {\n let newList = state?.[SAVED_PAIRS]\n newList[address] = null\n updateKey(SAVED_PAIRS, newList)\n }\n\n return [savedPairs, addPair, removePair]\n}\n\nexport function useSavedTokens() {\n const [state, { updateKey }] = useLocalStorageContext()\n const savedTokens = state?.[SAVED_TOKENS]\n\n function addToken(address, symbol) {\n let newList = state?.[SAVED_TOKENS]\n newList[address] = {\n symbol,\n }\n updateKey(SAVED_TOKENS, newList)\n }\n\n function removeToken(address) {\n let newList = state?.[SAVED_TOKENS]\n newList[address] = null\n updateKey(SAVED_TOKENS, newList)\n }\n\n return [savedTokens, addToken, removeToken]\n}\n","import React from 'react'\nimport { ThemeProvider as StyledComponentsThemeProvider, createGlobalStyle } from 'styled-components'\nimport { useDarkModeManager } from '../contexts/LocalStorage'\nimport styled from 'styled-components'\nimport { Text } from 'rebass'\n\nexport default function ThemeProvider({ children }) {\n const [darkMode] = useDarkModeManager()\n\n return {children}\n}\n\nconst theme = (darkMode, color) => ({\n customColor: color,\n textColor: darkMode ? color : 'black',\n\n panelColor: darkMode ? 'rgba(255, 255, 255, 0)' : 'rgba(255, 255, 255, 0)',\n backgroundColor: darkMode ? '#191326' : '#f5f3f3',\n\n // uniswapPink: darkMode ? '#e6433b' : 'black',\n uniswapPink: darkMode ? 'red' : 'black',\n\n concreteGray: darkMode ? '#292C2F' : '#fffdfa',\n inputBackground: darkMode ? '#1F1F1F' : '#fffdfa',\n shadowColor: darkMode ? '#000' : '#2F80ED',\n mercuryGray: darkMode ? '#333333' : '#E1E1E1',\n\n text1: darkMode ? '#fffdfa' : '#1F1F1F',\n text2: darkMode ? '#C3C5CB' : '#565A69',\n text3: darkMode ? '#6C7284' : '#888D9B',\n text4: darkMode ? '#565A69' : '#C3C5CB',\n text5: darkMode ? '#2C2F36' : '#EDEEF2',\n\n // special case text types\n white: '#FFFFFF',\n\n // backgrounds / greys\n bg1: darkMode ? '#212429' : '#fffdfa',\n bg2: darkMode ? '#2C2F36' : '#F7F8FA',\n bg3: darkMode ? '#40444F' : '#EDEEF2',\n bg4: darkMode ? '#565A69' : '#CED0D9',\n bg5: darkMode ? '#565A69' : '#888D9B',\n bg6: darkMode ? '#000' : '#FFFFFF',\n\n //specialty colors\n modalBG: darkMode ? 'rgba(0,0,0,0.85)' : 'rgba(0,0,0,0.6)',\n advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.4)',\n onlyLight: darkMode ? '#22242a' : 'transparent',\n divider: darkMode ? 'rgba(43, 43, 43, 0.435)' : 'rgba(43, 43, 43, 0.035)',\n\n //primary colors\n primary1: darkMode ? '#2172E5' : '#e6433b',\n primary2: darkMode ? '#3680E7' : '#FF8CC3',\n primary3: darkMode ? '#4D8FEA' : '#FF99C9',\n primary4: darkMode ? '#376bad70' : '#F6DDE8',\n primary5: darkMode ? '#153d6f70' : '#FDEAF1',\n\n // color text\n primaryText1: darkMode ? '#6da8ff' : '#e6433b',\n\n // secondary colors\n secondary1: darkMode ? '#2172E5' : '#e6433b',\n secondary2: darkMode ? '#17000b26' : '#F6DDE8',\n secondary3: darkMode ? '#17000b26' : '#FDEAF1',\n\n shadow1: darkMode ? '#000' : '#2F80ED',\n\n // other\n red1: '#FF6871',\n green1: '#27AE60',\n yellow1: '#FFE270',\n yellow2: '#F3841E',\n link: '#e26e69',\n blue: '2f80ed',\n\n background: darkMode ? 'black' : `radial-gradient(50% 50% at 50% 50%, #e6433b 30 0%, #fff 0%)`,\n})\n\nconst TextWrapper = styled(Text)`\n color: ${({ color, theme }) => theme[color]};\n`\n\nexport const TYPE = {\n main(props) {\n return \n },\n\n body(props) {\n return \n },\n\n small(props) {\n return \n },\n\n header(props) {\n return \n },\n\n largeHeader(props) {\n return \n },\n\n light(props) {\n return \n },\n\n pink(props) {\n return \n },\n}\n\nexport const Hover = styled.div`\n :hover {\n cursor: pointer;\n }\n`\n\nexport const Link = styled.a.attrs({\n target: '_blank',\n rel: 'noopener noreferrer',\n})`\n text-decoration: none;\n cursor: pointer;\n color: ${({ theme }) => theme.primary1};\n font-weight: 500;\n :hover {\n text-decoration: underline;\n }\n :focus {\n outline: none;\n text-decoration: underline;\n }\n :active {\n text-decoration: none;\n }\n`\n\nexport const ThemedBackground = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n max-width: 100vw !important;\n height: 200vh;\n mix-blend-mode: color;\n background: ${({ backgroundColor }) =>\n `radial-gradient(50% 50% at 50% 50%, ${backgroundColor} 0%, rgba(255, 255, 255, 0) 100%)`};\n position: absolute;\n top: 0px;\n left: 0px;\n z-index: 9999;\n\n transform: translateY(-110vh);\n`\n\nexport const GlobalStyle = createGlobalStyle`\n @import url('https://rsms.me/inter/inter.css');\n html { font-family: 'Inter', sans-serif; }\n @supports (font-variation-settings: normal) {\n html { font-family: 'Inter var', sans-serif; }\n }\n\n html,\n body {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n font-size: 14px;\n background-color: ${({ theme }) => theme.bg6};\n }\n\n a {\n text-decoration: none;\n\n :hover {\n text-decoration: none\n }\n }\n\n\n.three-line-legend {\n\twidth: 100%;\n\theight: 70px;\n\tposition: absolute;\n\tpadding: 8px;\n\tfont-size: 12px;\n\tcolor: #20262E;\n\tbackground-color: rgba(255, 255, 255, 0.23);\n\ttext-align: left;\n\tz-index: 10;\n pointer-events: none;\n}\n\n.three-line-legend-dark {\n\twidth: 100%;\n\theight: 70px;\n\tposition: absolute;\n\tpadding: 8px;\n\tfont-size: 12px;\n\tcolor: white;\n\tbackground-color: rgba(255, 255, 255, 0.23);\n\ttext-align: left;\n\tz-index: 10;\n pointer-events: none;\n}\n\n@media screen and (max-width: 800px) {\n .three-line-legend {\n display: none !important;\n }\n}\n\n.tv-lightweight-charts{\n width: 100% !important;\n\n\n & > * {\n width: 100% !important;\n }\n}\n\n\n html {\n font-size: 1rem;\n font-variant: none;\n color: 'black';\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n height: 100%;\n }\n`\n","import { ApolloClient } from 'apollo-client'\nimport { InMemoryCache } from 'apollo-cache-inmemory'\nimport { HttpLink } from 'apollo-link-http'\n\nexport const client = new ApolloClient({\n link: new HttpLink({\n uri: 'https://api.thegraph.com/subgraphs/name/never-on-bsc/neverswap-subgraph',\n }),\n cache: new InMemoryCache(),\n shouldBatch: true,\n})\n\nexport const healthClient = new ApolloClient({\n link: new HttpLink({\n uri: 'https://api.thegraph.com/index-node/graphql',\n }),\n cache: new InMemoryCache(),\n shouldBatch: true,\n})\n\nexport const blockClient = new ApolloClient({\n link: new HttpLink({\n uri: 'https://api.thegraph.com/subgraphs/name/astroswap/bsc-blocks',\n }),\n cache: new InMemoryCache(),\n})\n","export const FACTORY_ADDRESS = '0x6d29ae56e3dce38531c100b3a5e7ff61ca30a534'\nexport const BUNDLE_ID = '1'\n\nexport const timeframeOptions = {\n WEEK: '1 week',\n MONTH: '1 month',\n // THREE_MONTHS: '3 months',\n // YEAR: '1 year',\n ALL_TIME: 'All time',\n}\n\n// token list urls to fetch tokens from - use for warnings on tokens and pairs\n// export const SUPPORTED_LIST_URLS__NO_ENS = ['https://neverswap.com/list.json']\nexport const SUPPORTED_LIST_URLS__NO_ENS = []\n\n// hide from overview list\nexport const OVERVIEW_TOKEN_BLACKLIST = [\n '0x495c7f3a713870f68f8b418b355c085dfdc412c3',\n '0xc3761eb917cd790b30dad99f6cc5b4ff93c4f9ea',\n '0xe31debd7abff90b06bca21010dd860d8701fd901',\n '0xfc989fbb6b3024de5ca0144dc23c18a063942ac1',\n '0xe40fc6ff5f2895b44268fd2e1a421e07f567e007',\n '0xfd158609228b43aa380140b46fff3cdf9ad315de',\n '0xc00af6212fcf0e6fd3143e692ccd4191dc308bea',\n '0x205969b3ad459f7eba0dee07231a6357183d3fb6',\n '0x0bd67d358636fd7b0597724aa4f20beedbf3073a',\n '0xedf5d2a561e8a3cb5a846fbce24d2ccd88f50075',\n '0x702b0789a3d4dade1688a0c8b7d944e5ba80fc30',\n '0x041929a760d7049edaef0db246fa76ec975e90cc',\n '0xba098df8c6409669f5e6ec971ac02cd5982ac108',\n '0x1bbed115afe9e8d6e9255f18ef10d43ce6608d94',\n '0xe99512305bf42745fae78003428dcaf662afb35d',\n '0xbE609EAcbFca10F6E5504D39E3B113F808389056',\n '0x847daf9dfdc22d5c61c4a857ec8733ef5950e82e',\n '0xdbf8913dfe14536c0dae5dd06805afb2731f7e7b',\n]\n\n// pair blacklist\nexport const PAIR_BLACKLIST = ['0xb6a741f37d6e455ebcc9f17e2c16d0586c3f57a5']\n","import gql from 'graphql-tag'\nimport { FACTORY_ADDRESS, BUNDLE_ID } from '../constants'\n\nexport const SUBGRAPH_HEALTH = gql`\n query health {\n indexingStatusForCurrentVersion(subgraphName: \"never-on-bsc/neverswap-subgraph\") {\n synced\n health\n chains {\n chainHeadBlock {\n number\n }\n latestBlock {\n number\n }\n }\n }\n }\n`\n\nexport const GET_BLOCK = gql`\n query blocks($timestampFrom: Int!, $timestampTo: Int!) {\n blocks(\n first: 1\n orderBy: timestamp\n orderDirection: asc\n where: { timestamp_gt: $timestampFrom, timestamp_lt: $timestampTo }\n ) {\n id\n number\n timestamp\n }\n }\n`\n\nexport const GET_BLOCKS = (timestamps) => {\n let queryString = 'query blocks {'\n queryString += timestamps.map((timestamp) => {\n return `t${timestamp}:blocks(first: 1, orderBy: timestamp, orderDirection: desc, where: { timestamp_gt: ${timestamp}, timestamp_lt: ${\n timestamp + 600\n } }) {\n number\n }`\n })\n queryString += '}'\n return gql(queryString)\n}\n\nexport const PRICES_BY_BLOCK = (tokenAddress, blocks) => {\n let queryString = 'query blocks {'\n queryString += blocks.map(\n (block) => `\n t${block.timestamp}:token(id:\"${tokenAddress}\", block: { number: ${block.number} }) { \n derivedBNB\n }\n `\n )\n queryString += ','\n queryString += blocks.map(\n (block) => `\n b${block.timestamp}: bundle(id:\"1\", block: { number: ${block.number} }) { \n bnbPrice\n }\n `\n )\n\n queryString += '}'\n return gql(queryString)\n}\n\nexport const HOURLY_PAIR_RATES = (pairAddress, blocks) => {\n let queryString = 'query blocks {'\n queryString += blocks.map(\n (block) => `\n t${block.timestamp}: pair(id:\"${pairAddress}\", block: { number: ${block.number} }) { \n token0Price\n token1Price\n }\n `\n )\n\n queryString += '}'\n return gql(queryString)\n}\n\nexport const SHARE_VALUE = (pairAddress, blocks) => {\n let queryString = 'query blocks {'\n queryString += blocks.map(\n (block) => `\n t${block.timestamp}:pair(id:\"${pairAddress}\", block: { number: ${block.number} }) { \n reserve0\n reserve1\n reserveUSD\n totalSupply \n token0{\n derivedBNB\n }\n token1{\n derivedBNB\n }\n }\n `\n )\n queryString += ','\n queryString += blocks.map(\n (block) => `\n b${block.timestamp}: bundle(id:\"1\", block: { number: ${block.number} }) { \n bnbPrice\n }\n `\n )\n\n queryString += '}'\n return gql(queryString)\n}\n\nexport const BNB_PRICE = (block) => {\n const queryString = block\n ? `\n query bundles {\n bundles(where: { id: ${BUNDLE_ID} } block: {number: ${block}}) {\n id\n bnbPrice\n }\n }\n `\n : ` query bundles {\n bundles(where: { id: ${BUNDLE_ID} }) {\n id\n bnbPrice\n }\n }\n `\n return gql(queryString)\n}\n\nexport const USER_MINTS_BUNRS_PER_PAIR = gql`\n query events($user: Bytes!, $pair: Bytes!) {\n mints(where: { to: $user, pair: $pair }) {\n amountUSD\n amount0\n amount1\n timestamp\n pair {\n token0 {\n id\n }\n token1 {\n id\n }\n }\n }\n burns(where: { sender: $user, pair: $pair }) {\n amountUSD\n amount0\n amount1\n timestamp\n pair {\n token0 {\n id\n }\n token1 {\n id\n }\n }\n }\n }\n`\n\nexport const USER_TRANSACTIONS = gql`\n query transactions($user: Bytes!) {\n mints(orderBy: timestamp, orderDirection: desc, where: { to: $user }) {\n id\n transaction {\n id\n timestamp\n }\n pair {\n id\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n to\n liquidity\n amount0\n amount1\n amountUSD\n }\n burns(orderBy: timestamp, orderDirection: desc, where: { sender: $user }) {\n id\n transaction {\n id\n timestamp\n }\n pair {\n id\n token0 {\n symbol\n }\n token1 {\n symbol\n }\n }\n sender\n to\n liquidity\n amount0\n amount1\n amountUSD\n }\n swaps(orderBy: timestamp, orderDirection: desc, where: { to: $user }) {\n id\n transaction {\n id\n timestamp\n }\n pair {\n token0 {\n symbol\n }\n token1 {\n symbol\n }\n }\n amount0In\n amount0Out\n amount1In\n amount1Out\n amountUSD\n to\n }\n }\n`\n\nexport const PAIR_CHART = gql`\n query pairDayDatas($pairAddress: Bytes!, $skip: Int!) {\n pairDayDatas(first: 1000, skip: $skip, orderBy: date, orderDirection: asc, where: { pairAddress: $pairAddress }) {\n id\n date\n dailyVolumeToken0\n dailyVolumeToken1\n dailyVolumeUSD\n reserveUSD\n }\n }\n`\n\nexport const PAIR_DAY_DATA = gql`\n query pairDayDatas($pairAddress: Bytes!, $date: Int!) {\n pairDayDatas(first: 1, orderBy: date, orderDirection: desc, where: { pairAddress: $pairAddress, date_lt: $date }) {\n id\n date\n dailyVolumeToken0\n dailyVolumeToken1\n dailyVolumeUSD\n totalSupply\n reserveUSD\n }\n }\n`\n\nexport const PAIR_DAY_DATA_BULK = (pairs, startTimestamp) => {\n let pairsString = `[`\n pairs.map((pair) => {\n return (pairsString += `\"${pair}\"`)\n })\n pairsString += ']'\n const queryString = `\n query days {\n pairDayDatas(first: 1000, orderBy: date, orderDirection: asc, where: { pairAddress_in: ${pairsString}, date_gt: ${startTimestamp} }) {\n id\n pairAddress\n date\n dailyVolumeToken0\n dailyVolumeToken1\n dailyVolumeUSD\n totalSupply\n reserveUSD\n }\n } \n`\n return gql(queryString)\n}\n\nexport const GLOBAL_CHART = gql`\n query neverSwapDayDatas($startTime: Int!, $skip: Int!) {\n neverSwapDayDatas(first: 1000, skip: $skip, where: { date_gt: $startTime }, orderBy: date, orderDirection: asc) {\n id\n date\n totalVolumeUSD\n dailyVolumeUSD\n dailyVolumeBNB\n totalLiquidityUSD\n totalLiquidityBNB\n }\n }\n`\n\nexport const GLOBAL_DATA = (block) => {\n const queryString = ` query neverSwapFactories {\n neverSwapFactories(\n ${block ? `block: { number: ${block}}` : ``} \n where: { id: \"${FACTORY_ADDRESS}\" }) {\n id\n totalVolumeUSD\n totalVolumeBNB\n untrackedVolumeUSD\n totalLiquidityUSD\n totalLiquidityBNB\n txCount\n pairCount\n }\n }`\n return gql(queryString)\n}\n\nexport const GLOBAL_TXNS = gql`\n query transactions {\n transactions(first: 100, orderBy: timestamp, orderDirection: desc) {\n mints(orderBy: timestamp, orderDirection: desc) {\n transaction {\n id\n timestamp\n }\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n to\n liquidity\n amount0\n amount1\n amountUSD\n }\n burns(orderBy: timestamp, orderDirection: desc) {\n transaction {\n id\n timestamp\n }\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n sender\n liquidity\n amount0\n amount1\n amountUSD\n }\n swaps(orderBy: timestamp, orderDirection: desc) {\n transaction {\n id\n timestamp\n }\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n amount0In\n amount0Out\n amount1In\n amount1Out\n amountUSD\n to\n }\n }\n }\n`\n\nexport const ALL_TOKENS = gql`\n query tokens($skip: Int!) {\n tokens(first: 100, skip: $skip) {\n id\n name\n symbol\n totalLiquidity\n }\n }\n`\n\nexport const TOKEN_SEARCH = gql`\n query tokens($value: String, $id: String) {\n asSymbol: tokens(where: { symbol: $value }, orderBy: totalLiquidity, orderDirection: desc) {\n id\n symbol\n name\n totalLiquidity\n }\n asName: tokens(where: { name: $value }, orderBy: totalLiquidity, orderDirection: desc) {\n id\n symbol\n name\n totalLiquidity\n }\n asAddress: tokens(where: { id: $id }, orderBy: totalLiquidity, orderDirection: desc) {\n id\n symbol\n name\n totalLiquidity\n }\n }\n`\n\nexport const PAIR_SEARCH = gql`\n query pairs($tokens: [Bytes]!, $id: String) {\n as0: pairs(where: { token0_in: $tokens }) {\n id\n token0 {\n id\n symbol\n name\n }\n token1 {\n id\n symbol\n name\n }\n }\n as1: pairs(where: { token1_in: $tokens }) {\n id\n token0 {\n id\n symbol\n name\n }\n token1 {\n id\n symbol\n name\n }\n }\n asAddress: pairs(where: { id: $id }) {\n id\n token0 {\n id\n symbol\n name\n }\n token1 {\n id\n symbol\n name\n }\n }\n }\n`\n\nexport const ALL_PAIRS = (block) => {\n return gql(`\n query pairs($skip: Int!) {\n pairs(first: 100, skip: $skip, orderBy: trackedReserveBNB, orderDirection: desc, where: { createdAtBlockNumber_gte: 5753123 }) {\n id\n token0 {\n id\n symbol\n name\n }\n token1 {\n id\n symbol\n name\n }\n }\n }\n`)\n}\n\nconst PairFields = `\n fragment PairFields on Pair {\n id\n txCount\n token0 {\n id\n symbol\n name\n totalLiquidity\n derivedBNB\n }\n token1 {\n id\n symbol\n name\n totalLiquidity\n derivedBNB\n }\n reserve0\n reserve1\n reserveUSD\n totalSupply\n trackedReserveBNB\n reserveBNB\n volumeUSD\n untrackedVolumeUSD\n token0Price\n token1Price\n createdAtTimestamp\n }\n`\n\nexport const PAIRS_CURRENT = gql`\n query pairs {\n pairs(first: 100, where: { createdAtBlockNumber_gte: 5753123 }, orderBy: trackedReserveBNB, orderDirection: desc) {\n id\n }\n }\n`\n\nexport const PAIR_DATA = (pairAddress, block) => {\n const queryString = `\n ${PairFields}\n query pairs {\n pairs(${block ? `block: {number: ${block}}` : ``} where: { id: \"${pairAddress}\"} ) {\n ...PairFields\n }\n }`\n return gql(queryString)\n}\n\nexport const PAIRS_BULK = gql`\n ${PairFields}\n query pairs($allPairs: [Bytes]!) {\n pairs(where: { id_in: $allPairs }, orderBy: trackedReserveBNB, orderDirection: desc) {\n ...PairFields\n }\n }\n`\n\nexport const PAIRS_HISTORICAL_BULK = (block, pairs) => {\n let pairsString = `[`\n pairs.map((pair) => {\n return (pairsString += `\"${pair}\"`)\n })\n pairsString += ']'\n let queryString = `\n query pairs {\n pairs(first: 200, where: {id_in: ${pairsString}}, block: {number: ${block}}, orderBy: trackedReserveBNB, orderDirection: desc) {\n id\n reserveUSD\n trackedReserveBNB\n volumeUSD\n untrackedVolumeUSD\n }\n }\n `\n return gql(queryString)\n}\n\nexport const TOKEN_CHART = gql`\n query tokenDayDatas($tokenAddr: String!, $skip: Int!) {\n tokenDayDatas(first: 1000, skip: $skip, orderBy: date, orderDirection: asc, where: { token: $tokenAddr }) {\n id\n date\n priceUSD\n totalLiquidityToken\n totalLiquidityUSD\n totalLiquidityBNB\n dailyVolumeBNB\n dailyVolumeToken\n dailyVolumeUSD\n }\n }\n`\n\nconst TokenFields = `\n fragment TokenFields on Token {\n id\n name\n symbol\n derivedBNB\n tradeVolume\n tradeVolumeUSD\n untrackedVolumeUSD\n totalLiquidity\n txCount\n }\n`\n\nexport const TOKENS_CURRENT = gql`\n ${TokenFields}\n query tokens {\n tokens(first: 200, orderBy: tradeVolumeUSD, orderDirection: desc) {\n ...TokenFields\n }\n }\n`\n\nexport const TOKENS_DYNAMIC = (block) => {\n const queryString = `\n ${TokenFields}\n query tokens {\n tokens(block: {number: ${block}} first: 200, orderBy: tradeVolumeUSD, orderDirection: desc) {\n ...TokenFields\n }\n }\n `\n return gql(queryString)\n}\n\nexport const TOKEN_DATA = (tokenAddress, block) => {\n const queryString = `\n ${TokenFields}\n query tokens {\n tokens(${block ? `block : {number: ${block}}` : ``} where: {id:\"${tokenAddress}\"}) {\n ...TokenFields\n }\n pairs0: pairs(where: {token0: \"${tokenAddress}\"}, first: 50, orderBy: reserveUSD, orderDirection: desc){\n id\n }\n pairs1: pairs(where: {token1: \"${tokenAddress}\"}, first: 50, orderBy: reserveUSD, orderDirection: desc){\n id\n }\n }\n `\n return gql(queryString)\n}\n\nexport const FILTERED_TRANSACTIONS = gql`\n query ($allPairs: [Bytes]!) {\n mints(first: 20, where: { pair_in: $allPairs }, orderBy: timestamp, orderDirection: desc) {\n transaction {\n id\n timestamp\n }\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n to\n liquidity\n amount0\n amount1\n amountUSD\n }\n burns(first: 20, where: { pair_in: $allPairs }, orderBy: timestamp, orderDirection: desc) {\n transaction {\n id\n timestamp\n }\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n sender\n liquidity\n amount0\n amount1\n amountUSD\n }\n swaps(first: 30, where: { pair_in: $allPairs }, orderBy: timestamp, orderDirection: desc) {\n transaction {\n id\n timestamp\n }\n id\n pair {\n token0 {\n id\n symbol\n }\n token1 {\n id\n symbol\n }\n }\n amount0In\n amount0Out\n amount1In\n amount1Out\n amountUSD\n to\n }\n }\n`\n","import { TokenList } from '@uniswap/token-lists'\n\n/**\n * Given a URI that may be ipfs, ipns, http, or https protocol, return the fetch-able http(s) URLs for the same content\n * @param uri to convert to fetch-able http url\n */\nfunction uriToHttp(uri: string): string[] {\n const protocol = uri.split(':')[0].toLowerCase()\n switch (protocol) {\n case 'https':\n return [uri]\n case 'http':\n return ['https' + uri.substr(4), uri]\n case 'ipfs':\n const hash = uri.match(/^ipfs:(\\/\\/)?(.*)$/i)?.[2]\n return [`https://cloudflare-ipfs.com/ipfs/${hash}/`, `https://ipfs.io/ipfs/${hash}/`]\n case 'ipns':\n const name = uri.match(/^ipns:(\\/\\/)?(.*)$/i)?.[2]\n return [`https://cloudflare-ipfs.com/ipns/${name}/`, `https://ipfs.io/ipns/${name}/`]\n default:\n return []\n }\n}\n\n/**\n * Contains the logic for resolving a list URL to a validated token list\n * @param listUrl list url\n */\nexport default async function getTokenList(listUrl: string): Promise {\n const urls = uriToHttp(listUrl)\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i]\n const isLast = i === urls.length - 1\n let response\n try {\n response = await fetch(url)\n } catch (error) {\n console.debug('Failed to fetch list', listUrl, error)\n if (isLast) throw new Error(`Failed to download list ${listUrl}`)\n continue\n }\n\n if (!response.ok) {\n if (isLast) throw new Error(`Failed to download list ${listUrl}`)\n continue\n }\n\n const json = await response.json()\n return json\n }\n throw new Error('Unrecognized list URL protocol.')\n}\n","import React, { createContext, useContext, useReducer, useMemo, useCallback, useState, useEffect } from 'react'\nimport { timeframeOptions, SUPPORTED_LIST_URLS__NO_ENS } from '../constants'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport getTokenList from '../utils/tokenLists'\nimport { healthClient } from '../apollo/client'\nimport { SUBGRAPH_HEALTH } from '../apollo/queries'\ndayjs.extend(utc)\n\nconst UPDATE = 'UPDATE'\nconst UPDATE_TIMEFRAME = 'UPDATE_TIMEFRAME'\nconst UPDATE_SESSION_START = 'UPDATE_SESSION_START'\nconst UPDATED_SUPPORTED_TOKENS = 'UPDATED_SUPPORTED_TOKENS'\nconst UPDATE_LATEST_BLOCK = 'UPDATE_LATEST_BLOCK'\nconst UPDATE_HEAD_BLOCK = 'UPDATE_HEAD_BLOCK'\n\nconst SUPPORTED_TOKENS = 'SUPPORTED_TOKENS'\nconst TIME_KEY = 'TIME_KEY'\nconst CURRENCY = 'CURRENCY'\nconst SESSION_START = 'SESSION_START'\nconst LATEST_BLOCK = 'LATEST_BLOCK'\nconst HEAD_BLOCK = 'HEAD_BLOCK'\n\nconst ApplicationContext = createContext()\n\nfunction useApplicationContext() {\n return useContext(ApplicationContext)\n}\n\nfunction reducer(state, { type, payload }) {\n switch (type) {\n case UPDATE: {\n const { currency } = payload\n return {\n ...state,\n [CURRENCY]: currency,\n }\n }\n case UPDATE_TIMEFRAME: {\n const { newTimeFrame } = payload\n return {\n ...state,\n [TIME_KEY]: newTimeFrame,\n }\n }\n case UPDATE_SESSION_START: {\n const { timestamp } = payload\n return {\n ...state,\n [SESSION_START]: timestamp,\n }\n }\n\n case UPDATE_LATEST_BLOCK: {\n const { block } = payload\n return {\n ...state,\n [LATEST_BLOCK]: block,\n }\n }\n\n case UPDATE_HEAD_BLOCK: {\n const { block } = payload\n return {\n ...state,\n [HEAD_BLOCK]: block,\n }\n }\n\n case UPDATED_SUPPORTED_TOKENS: {\n const { supportedTokens } = payload\n return {\n ...state,\n [SUPPORTED_TOKENS]: supportedTokens,\n }\n }\n\n default: {\n throw Error(`Unexpected action type in DataContext reducer: '${type}'.`)\n }\n }\n}\n\nconst INITIAL_STATE = {\n CURRENCY: 'USD',\n TIME_KEY: timeframeOptions.ALL_TIME,\n}\n\nexport default function Provider({ children }) {\n const [state, dispatch] = useReducer(reducer, INITIAL_STATE)\n const update = useCallback((currency) => {\n dispatch({\n type: UPDATE,\n payload: {\n currency,\n },\n })\n }, [])\n\n // global time window for charts - see timeframe options in constants\n const updateTimeframe = useCallback((newTimeFrame) => {\n dispatch({\n type: UPDATE_TIMEFRAME,\n payload: {\n newTimeFrame,\n },\n })\n }, [])\n\n // used for refresh button\n const updateSessionStart = useCallback((timestamp) => {\n dispatch({\n type: UPDATE_SESSION_START,\n payload: {\n timestamp,\n },\n })\n }, [])\n\n const updateSupportedTokens = useCallback((supportedTokens) => {\n dispatch({\n type: UPDATED_SUPPORTED_TOKENS,\n payload: {\n supportedTokens,\n },\n })\n }, [])\n\n const updateLatestBlock = useCallback((block) => {\n dispatch({\n type: UPDATE_LATEST_BLOCK,\n payload: {\n block,\n },\n })\n }, [])\n\n const updateHeadBlock = useCallback((block) => {\n dispatch({\n type: UPDATE_HEAD_BLOCK,\n payload: {\n block,\n },\n })\n }, [])\n\n return (\n [\n state,\n {\n update,\n updateSessionStart,\n updateTimeframe,\n updateSupportedTokens,\n updateLatestBlock,\n updateHeadBlock,\n },\n ],\n [state, update, updateTimeframe, updateSessionStart, updateSupportedTokens, updateLatestBlock, updateHeadBlock]\n )}\n >\n {children}\n \n )\n}\n\nexport function useLatestBlocks() {\n const [state, { updateLatestBlock, updateHeadBlock }] = useApplicationContext()\n\n const latestBlock = state?.[LATEST_BLOCK]\n const headBlock = state?.[HEAD_BLOCK]\n\n useEffect(() => {\n async function fetch() {\n healthClient\n .query({\n query: SUBGRAPH_HEALTH,\n })\n .then((res) => {\n const syncedBlock = res.data.indexingStatusForCurrentVersion.chains[0].latestBlock.number\n const headBlock = res.data.indexingStatusForCurrentVersion.chains[0].chainHeadBlock.number\n if (syncedBlock && headBlock) {\n updateLatestBlock(syncedBlock)\n updateHeadBlock(headBlock)\n }\n })\n .catch((e) => {\n console.log(e)\n })\n }\n if (!latestBlock) {\n fetch()\n }\n }, [latestBlock, updateHeadBlock, updateLatestBlock])\n\n return [latestBlock, headBlock]\n}\n\nexport function useCurrentCurrency() {\n const [state, { update }] = useApplicationContext()\n const toggleCurrency = useCallback(() => {\n if (state.currency === 'BNB') {\n update('USD')\n } else {\n update('BNB')\n }\n }, [state, update])\n return [state[CURRENCY], toggleCurrency]\n}\n\nexport function useTimeframe() {\n const [state, { updateTimeframe }] = useApplicationContext()\n const activeTimeframe = state?.[TIME_KEY]\n return [activeTimeframe, updateTimeframe]\n}\n\nexport function useStartTimestamp() {\n const [activeWindow] = useTimeframe()\n const [startDateTimestamp, setStartDateTimestamp] = useState()\n\n // monitor the old date fetched\n useEffect(() => {\n let startTime =\n dayjs\n .utc()\n .subtract(\n 1,\n activeWindow === timeframeOptions.week ? 'week' : activeWindow === timeframeOptions.ALL_TIME ? 'year' : 'year'\n )\n .startOf('day')\n .unix() - 1\n // if we find a new start time less than the current startrtime - update oldest pooint to fetch\n setStartDateTimestamp(startTime)\n }, [activeWindow, startDateTimestamp])\n\n return startDateTimestamp\n}\n\n// keep track of session length for refresh ticker\nexport function useSessionStart() {\n const [state, { updateSessionStart }] = useApplicationContext()\n const sessionStart = state?.[SESSION_START]\n\n useEffect(() => {\n if (!sessionStart) {\n updateSessionStart(Date.now())\n }\n })\n\n const [seconds, setSeconds] = useState(0)\n\n useEffect(() => {\n let interval = null\n interval = setInterval(() => {\n setSeconds(Date.now() - sessionStart ?? Date.now())\n }, 1000)\n\n return () => clearInterval(interval)\n }, [seconds, sessionStart])\n\n return parseInt(seconds / 1000)\n}\n\nexport function useListedTokens() {\n const [state, { updateSupportedTokens }] = useApplicationContext()\n const supportedTokens = state?.[SUPPORTED_TOKENS]\n\n useEffect(() => {\n async function fetchList() {\n const allFetched = await SUPPORTED_LIST_URLS__NO_ENS.reduce(async (fetchedTokens, url) => {\n const newTokens = await getTokenList(url)\n return Promise.resolve([...newTokens.tokens])\n }, Promise.resolve([]))\n let formatted = allFetched?.map((t) => t.address.toLowerCase())\n\n updateSupportedTokens(formatted)\n }\n if (!supportedTokens) {\n fetchList()\n }\n }, [updateSupportedTokens, supportedTokens])\n\n return supportedTokens\n}\n","import React from 'react'\nimport { BigNumber } from 'bignumber.js'\nimport dayjs from 'dayjs'\nimport { ethers } from 'ethers'\nimport utc from 'dayjs/plugin/utc'\nimport { client, blockClient } from '../apollo/client'\nimport { GET_BLOCK, GET_BLOCKS, SHARE_VALUE } from '../apollo/queries'\nimport { Text } from 'rebass'\nimport _Decimal from 'decimal.js-light'\nimport toFormat from 'toformat'\nimport { timeframeOptions } from '../constants'\nimport Numeral from 'numeral'\n\n// format libraries\nconst Decimal = toFormat(_Decimal)\nBigNumber.set({ EXPONENTIAL_AT: 50 })\ndayjs.extend(utc)\n\nexport function getTimeframe(timeWindow) {\n const utcEndTime = dayjs.utc()\n // based on window, get starttime\n let utcStartTime\n switch (timeWindow) {\n case timeframeOptions.WEEK:\n utcStartTime = utcEndTime.subtract(1, 'week').endOf('day').unix() - 1\n break\n case timeframeOptions.MONTH:\n utcStartTime = utcEndTime.subtract(1, 'month').endOf('day').unix() - 1\n break\n case timeframeOptions.ALL_TIME:\n utcStartTime = utcEndTime.subtract(1, 'year').endOf('day').unix() - 1\n break\n default:\n utcStartTime = utcEndTime.subtract(1, 'year').startOf('year').unix() - 1\n break\n }\n return utcStartTime\n}\n\nexport function getPoolLink(token0Address, token1Address = null, remove = false) {\n if (!token1Address) {\n return (\n `https://neverswap.com/#/` +\n (remove ? `remove` : `add`) +\n `/${token0Address === '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' ? 'BNB' : token0Address}/${'BNB'}`\n )\n } else {\n return (\n `https://neverswap.com/#/` +\n (remove ? `remove` : `add`) +\n `/${token0Address === '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' ? 'BNB' : token0Address}/${\n token1Address === '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' ? 'BNB' : token1Address\n }`\n )\n }\n}\n\nexport function getSwapLink(token0Address, token1Address = null) {\n if (!token1Address) {\n return `https://neverswap.com/#/swap?inputCurrency=${token0Address}`\n } else {\n return `https://neverswap.com/#/swap?inputCurrency=${\n token0Address === '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' ? 'BNB' : token0Address\n }&outputCurrency=${token1Address === '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' ? 'BNB' : token1Address}`\n }\n}\n\nexport function getMiningPoolLink(token0Address) {\n return `https://app.uniswap.org/#/uni/BNB/${token0Address}`\n}\n\nexport function getUniswapAppLink(linkVariable) {\n let baseUniswapUrl = 'https://app.uniswap.org/#/uni'\n if (!linkVariable) {\n return baseUniswapUrl\n }\n\n return `${baseUniswapUrl}/BNB/${linkVariable}`\n}\n\nexport function localNumber(val) {\n return Numeral(val).format('0,0')\n}\n\nexport const toNiceDate = (date) => {\n let x = dayjs.utc(dayjs.unix(date)).format('MMM DD')\n return x\n}\n\nexport const toWeeklyDate = (date) => {\n const formatted = dayjs.utc(dayjs.unix(date))\n date = new Date(formatted)\n const day = new Date(formatted).getDay()\n var lessDays = day === 6 ? 0 : day + 1\n var wkStart = new Date(new Date(date).setDate(date.getDate() - lessDays))\n var wkEnd = new Date(new Date(wkStart).setDate(wkStart.getDate() + 6))\n return dayjs.utc(wkStart).format('MMM DD') + ' - ' + dayjs.utc(wkEnd).format('MMM DD')\n}\n\nexport function getTimestampsForChanges() {\n const utcCurrentTime = dayjs.utc()\n const t1 = utcCurrentTime.subtract(1, 'day').startOf('minute').unix()\n const t2 = utcCurrentTime.subtract(2, 'day').startOf('minute').unix()\n const tWeek = utcCurrentTime.subtract(1, 'week').startOf('minute').unix()\n return [t1, t2, tWeek]\n}\n\nexport async function splitQuery(query, localClient, vars, list, skipCount = 100) {\n let fetchedData = {}\n let allFound = false\n let skip = 0\n\n while (!allFound) {\n let end = list.length\n if (skip + skipCount < list.length) {\n end = skip + skipCount\n }\n let sliced = list.slice(skip, end)\n let result = await localClient.query({\n query: query(...vars, sliced),\n fetchPolicy: 'cache-first',\n })\n fetchedData = {\n ...fetchedData,\n ...result.data,\n }\n if (Object.keys(result.data).length < skipCount || skip + skipCount > list.length) {\n allFound = true\n } else {\n skip += skipCount\n }\n }\n\n return fetchedData\n}\n\n/**\n * @notice Fetches first block after a given timestamp\n * @dev Query speed is optimized by limiting to a 600-second period\n * @param {Int} timestamp in seconds\n */\nexport async function getBlockFromTimestamp(timestamp) {\n let result = await blockClient.query({\n query: GET_BLOCK,\n variables: {\n timestampFrom: timestamp,\n timestampTo: timestamp + 600,\n },\n fetchPolicy: 'cache-first',\n })\n return result?.data?.blocks?.[0]?.number\n}\n\n/**\n * @notice Fetches block objects for an array of timestamps.\n * @dev blocks are returned in chronological order (ASC) regardless of input.\n * @dev blocks are returned at string representations of Int\n * @dev timestamps are returns as they were provided; not the block time.\n * @param {Array} timestamps\n */\nexport async function getBlocksFromTimestamps(timestamps, skipCount = 500) {\n if (timestamps?.length === 0) {\n return []\n }\n\n let fetchedData = await splitQuery(GET_BLOCKS, blockClient, [], timestamps, skipCount)\n\n let blocks = []\n if (fetchedData) {\n for (var t in fetchedData) {\n if (fetchedData[t].length > 0) {\n blocks.push({\n timestamp: t.split('t')[1],\n number: fetchedData[t][0]['number'],\n })\n }\n }\n }\n return blocks\n}\n\nexport async function getLiquidityTokenBalanceOvertime(account, timestamps) {\n // get blocks based on timestamps\n const blocks = await getBlocksFromTimestamps(timestamps)\n\n // get historical share values with time travel queries\n let result = await client.query({\n query: SHARE_VALUE(account, blocks),\n fetchPolicy: 'cache-first',\n })\n\n let values = []\n for (var row in result?.data) {\n let timestamp = row.split('t')[1]\n if (timestamp) {\n values.push({\n timestamp,\n balance: 0,\n })\n }\n }\n}\n\n/**\n * @notice Example query using time travel queries\n * @dev TODO - handle scenario where blocks are not available for a timestamps (e.g. current time)\n * @param {String} pairAddress\n * @param {Array} timestamps\n */\nexport async function getShareValueOverTime(pairAddress, timestamps) {\n if (!timestamps) {\n const utcCurrentTime = dayjs.utc()\n const utcSevenDaysBack = utcCurrentTime.subtract(8, 'day').unix()\n timestamps = getTimestampRange(utcSevenDaysBack, 86400, 7)\n }\n\n // get blocks based on timestamps\n const blocks = await getBlocksFromTimestamps(timestamps)\n\n // get historical share values with time travel queries\n let result = await client.query({\n query: SHARE_VALUE(pairAddress, blocks),\n fetchPolicy: 'cache-first',\n })\n\n let values = []\n for (var row in result?.data) {\n let timestamp = row.split('t')[1]\n let sharePriceUsd = parseFloat(result.data[row]?.reserveUSD) / parseFloat(result.data[row]?.totalSupply)\n if (timestamp) {\n values.push({\n timestamp,\n sharePriceUsd,\n totalSupply: result.data[row].totalSupply,\n reserve0: result.data[row].reserve0,\n reserve1: result.data[row].reserve1,\n reserveUSD: result.data[row].reserveUSD,\n token0DerivedBNB: result.data[row].token0.derivedBNB,\n token1DerivedBNB: result.data[row].token1.derivedBNB,\n roiUsd: values && values[0] ? sharePriceUsd / values[0]['sharePriceUsd'] : 1,\n bnbPrice: 0,\n token0PriceUSD: 0,\n token1PriceUSD: 0,\n })\n }\n }\n\n // add eth prices\n let index = 0\n for (var brow in result?.data) {\n let timestamp = brow.split('b')[1]\n if (timestamp) {\n values[index].bnbPrice = result.data[brow].bnbPrice\n values[index].token0PriceUSD = result.data[brow].bnbPrice * values[index].token0DerivedBNB\n values[index].token1PriceUSD = result.data[brow].bnbPrice * values[index].token1DerivedBNB\n index += 1\n }\n }\n\n return values\n}\n\n/**\n * @notice Creates an evenly-spaced array of timestamps\n * @dev Periods include a start and end timestamp. For example, n periods are defined by n+1 timestamps.\n * @param {Int} timestamp_from in seconds\n * @param {Int} period_length in seconds\n * @param {Int} periods\n */\nexport function getTimestampRange(timestamp_from, period_length, periods) {\n let timestamps = []\n for (let i = 0; i <= periods; i++) {\n timestamps.push(timestamp_from + i * period_length)\n }\n return timestamps\n}\n\nexport const toNiceDateYear = (date) => dayjs.utc(dayjs.unix(date)).format('MMMM DD, YYYY')\n\nexport const isAddress = (value) => {\n try {\n return ethers.utils.getAddress(value.toLowerCase())\n } catch {\n return false\n }\n}\n\nexport const toK = (num) => {\n return Numeral(num).format('0.[00]a')\n}\n\nexport const setThemeColor = (theme) => document.documentElement.style.setProperty('--c-token', theme || '#333333')\n\nexport const Big = (number) => new BigNumber(number)\n\nexport const urls = {\n showTransaction: (tx) => `https://bscscan.com/tx/${tx}/`,\n showAddress: (address) => `https://bscscan.com/address/${address}/`,\n showToken: (address) => `https://bscscan.com/token/${address}/`,\n showBlock: (block) => `https://bscscan.com/block/${block}/`,\n}\n\nexport const formatTime = (unix) => {\n const now = dayjs()\n const timestamp = dayjs.unix(unix)\n\n const inSeconds = now.diff(timestamp, 'second')\n const inMinutes = now.diff(timestamp, 'minute')\n const inHours = now.diff(timestamp, 'hour')\n const inDays = now.diff(timestamp, 'day')\n\n if (inHours >= 24) {\n return `${inDays} ${inDays === 1 ? 'day' : 'days'} ago`\n } else if (inMinutes >= 60) {\n return `${inHours} ${inHours === 1 ? 'hour' : 'hours'} ago`\n } else if (inSeconds >= 60) {\n return `${inMinutes} ${inMinutes === 1 ? 'minute' : 'minutes'} ago`\n } else {\n return `${inSeconds} ${inSeconds === 1 ? 'second' : 'seconds'} ago`\n }\n}\n\nexport const formatNumber = (num) => {\n return num.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')\n}\n\n// using a currency library here in case we want to add more in future\nexport const formatDollarAmount = (num, digits) => {\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n })\n return formatter.format(num)\n}\n\nexport const toSignificant = (number, significantDigits) => {\n Decimal.set({ precision: significantDigits + 1, rounding: Decimal.ROUND_UP })\n const updated = new Decimal(number).toSignificantDigits(significantDigits)\n return updated.toFormat(updated.decimalPlaces(), { groupSeparator: '' })\n}\n\nexport const formattedNum = (number, usd = false, acceptNegatives = true) => {\n if (isNaN(number) || number === '' || number === undefined) {\n return usd ? '$0' : 0\n }\n let num = parseFloat(number)\n\n if (acceptNegatives && num > 500000000) {\n return (usd ? '$' : '') + toK(num.toFixed(0), true)\n }\n\n if (num === 0) {\n if (usd) {\n return '$0'\n }\n return 0\n }\n\n if (num < 0.0001 && num > 0) {\n return usd ? '< $0.0001' : '< 0.0001'\n }\n\n if (num > 1000) {\n return usd ? formatDollarAmount(num, 0) : Number(parseFloat(num).toFixed(0)).toLocaleString()\n }\n\n if (usd) {\n if (num < 0.1) {\n return formatDollarAmount(num, 4)\n } else {\n return formatDollarAmount(num, 2)\n }\n }\n\n return Number(parseFloat(num).toFixed(5)).toLocaleString()\n}\n\nexport function rawPercent(percentRaw) {\n let percent = parseFloat(percentRaw * 100)\n if (!percent || percent === 0) {\n return '0%'\n }\n if (percent < 1 && percent > 0) {\n return '< 1%'\n }\n return percent.toFixed(0) + '%'\n}\n\nexport function formattedPercent(percent, useBrackets = false) {\n percent = parseFloat(percent)\n if (!percent || percent === 0) {\n return 0%\n }\n\n if (percent < 0.0001 && percent > 0) {\n return (\n \n {'< 0.0001%'}\n \n )\n }\n\n if (percent < 0 && percent > -0.0001) {\n return (\n \n {'< 0.0001%'}\n \n )\n }\n\n let fixedPercent = percent.toFixed(2)\n if (fixedPercent === '0.00') {\n return '0%'\n }\n if (fixedPercent > 0) {\n if (fixedPercent > 100) {\n return {`+${percent?.toFixed(0).toLocaleString()}%`}\n } else {\n return {`+${fixedPercent}%`}\n }\n } else {\n return {`${fixedPercent}%`}\n }\n}\n\n/**\n * gets the amoutn difference plus the % change in change itself (second order change)\n * @param {*} valueNow\n * @param {*} value24HoursAgo\n * @param {*} value48HoursAgo\n */\nexport const get2DayPercentChange = (valueNow, value24HoursAgo, value48HoursAgo) => {\n // get volume info for both 24 hour periods\n let currentChange = parseFloat(valueNow) - parseFloat(value24HoursAgo)\n let previousChange = parseFloat(value24HoursAgo) - parseFloat(value48HoursAgo)\n\n const adjustedPercentChange = (parseFloat(currentChange - previousChange) / parseFloat(previousChange)) * 100\n\n if (isNaN(adjustedPercentChange) || !isFinite(adjustedPercentChange)) {\n return [currentChange, 0]\n }\n return [currentChange, adjustedPercentChange]\n}\n\n/**\n * get standard percent change between two values\n * @param {*} valueNow\n * @param {*} value24HoursAgo\n */\nexport const getPercentChange = (valueNow, value24HoursAgo) => {\n const adjustedPercentChange =\n ((parseFloat(valueNow) - parseFloat(value24HoursAgo)) / parseFloat(value24HoursAgo)) * 100\n if (isNaN(adjustedPercentChange) || !isFinite(adjustedPercentChange)) {\n return 0\n }\n return adjustedPercentChange\n}\n\nexport function isEquivalent(a, b) {\n var aProps = Object.getOwnPropertyNames(a)\n var bProps = Object.getOwnPropertyNames(b)\n if (aProps.length !== bProps.length) {\n return false\n }\n for (var i = 0; i < aProps.length; i++) {\n var propName = aProps[i]\n if (a[propName] !== b[propName]) {\n return false\n }\n }\n return true\n}\n","import React, { createContext, useContext, useReducer, useMemo, useCallback, useEffect, useState } from 'react'\nimport { client } from '../apollo/client'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport { useTimeframe } from './Application'\nimport {\n getPercentChange,\n getBlockFromTimestamp,\n getBlocksFromTimestamps,\n get2DayPercentChange,\n getTimeframe,\n} from '../utils'\nimport { GLOBAL_DATA, GLOBAL_TXNS, GLOBAL_CHART, BNB_PRICE, ALL_PAIRS, ALL_TOKENS } from '../apollo/queries'\nimport weekOfYear from 'dayjs/plugin/weekOfYear'\nconst UPDATE = 'UPDATE'\nconst UPDATE_TXNS = 'UPDATE_TXNS'\nconst UPDATE_CHART = 'UPDATE_CHART'\nconst UPDATE_BNB_PRICE = 'UPDATE_BNB_PRICE'\nconst BNB_PRICE_KEY = 'BNB_PRICE_KEY'\nconst UPDATE_ALL_PAIRS_IN_UNISWAP = 'UPDAUPDATE_ALL_PAIRS_IN_UNISWAPTE_TOP_PAIRS'\nconst UPDATE_ALL_TOKENS_IN_UNISWAP = 'UPDATE_ALL_TOKENS_IN_UNISWAP'\nconst UPDATE_TOP_LPS = 'UPDATE_TOP_LPS'\n\n// format dayjs with the libraries that we need\ndayjs.extend(utc)\ndayjs.extend(weekOfYear)\n\nconst GlobalDataContext = createContext()\n\nfunction useGlobalDataContext() {\n return useContext(GlobalDataContext)\n}\n\nfunction reducer(state, { type, payload }) {\n switch (type) {\n case UPDATE: {\n const { data } = payload\n return {\n ...state,\n globalData: data,\n }\n }\n case UPDATE_TXNS: {\n const { transactions } = payload\n return {\n ...state,\n transactions,\n }\n }\n case UPDATE_CHART: {\n const { daily, weekly } = payload\n return {\n ...state,\n chartData: {\n daily,\n weekly,\n },\n }\n }\n case UPDATE_BNB_PRICE: {\n const { bnbPrice, oneDayPrice, bnbPriceChange } = payload\n return {\n [BNB_PRICE_KEY]: bnbPrice,\n oneDayPrice,\n bnbPriceChange,\n }\n }\n\n case UPDATE_ALL_PAIRS_IN_UNISWAP: {\n const { allPairs } = payload\n return {\n ...state,\n allPairs,\n }\n }\n\n case UPDATE_ALL_TOKENS_IN_UNISWAP: {\n const { allTokens } = payload\n return {\n ...state,\n allTokens,\n }\n }\n\n case UPDATE_TOP_LPS: {\n const { topLps } = payload\n return {\n ...state,\n topLps,\n }\n }\n default: {\n throw Error(`Unexpected action type in DataContext reducer: '${type}'.`)\n }\n }\n}\n\nexport default function Provider({ children }) {\n const [state, dispatch] = useReducer(reducer, {})\n const update = useCallback((data) => {\n dispatch({\n type: UPDATE,\n payload: {\n data,\n },\n })\n }, [])\n\n const updateTransactions = useCallback((transactions) => {\n dispatch({\n type: UPDATE_TXNS,\n payload: {\n transactions,\n },\n })\n }, [])\n\n const updateChart = useCallback((daily, weekly) => {\n dispatch({\n type: UPDATE_CHART,\n payload: {\n daily,\n weekly,\n },\n })\n }, [])\n\n const updateBnbPrice = useCallback((bnbPrice, oneDayPrice, bnbPriceChange) => {\n dispatch({\n type: UPDATE_BNB_PRICE,\n payload: {\n bnbPrice,\n oneDayPrice,\n bnbPriceChange,\n },\n })\n }, [])\n\n const updateAllPairsInUniswap = useCallback((allPairs) => {\n dispatch({\n type: UPDATE_ALL_PAIRS_IN_UNISWAP,\n payload: {\n allPairs,\n },\n })\n }, [])\n\n const updateAllTokensInUniswap = useCallback((allTokens) => {\n dispatch({\n type: UPDATE_ALL_TOKENS_IN_UNISWAP,\n payload: {\n allTokens,\n },\n })\n }, [])\n\n const updateTopLps = useCallback((topLps) => {\n dispatch({\n type: UPDATE_TOP_LPS,\n payload: {\n topLps,\n },\n })\n }, [])\n return (\n [\n state,\n {\n update,\n updateTransactions,\n updateChart,\n updateBnbPrice,\n updateTopLps,\n updateAllPairsInUniswap,\n updateAllTokensInUniswap,\n },\n ],\n [\n state,\n update,\n updateTransactions,\n updateTopLps,\n updateChart,\n updateBnbPrice,\n updateAllPairsInUniswap,\n updateAllTokensInUniswap,\n ]\n )}\n >\n {children}\n \n )\n}\n\n/**\n * Gets all the global data for the overview page.\n * Needs current eth price and the old eth price to get\n * 24 hour USD changes.\n * @param {*} bnbPrice\n * @param {*} oldBnbPrice\n */\nasync function getGlobalData(bnbPrice, oldBnbPrice) {\n // data for each day , historic data used for % changes\n let data = {}\n let oneDayData = {}\n let twoDayData = {}\n\n try {\n // get timestamps for the days\n const utcCurrentTime = dayjs.utc()\n const utcOneDayBack = utcCurrentTime.subtract(1, 'day').unix()\n const utcTwoDaysBack = utcCurrentTime.subtract(2, 'day').unix()\n const utcOneWeekBack = utcCurrentTime.subtract(1, 'week').unix()\n const utcTwoWeeksBack = utcCurrentTime.subtract(2, 'week').unix()\n\n // get the blocks needed for time travel queries\n let [oneDayBlock, twoDayBlock, oneWeekBlock, twoWeekBlock] = await getBlocksFromTimestamps([\n utcOneDayBack,\n utcTwoDaysBack,\n utcOneWeekBack,\n utcTwoWeeksBack,\n ])\n\n // fetch the global data\n let result = await client.query({\n query: GLOBAL_DATA(),\n fetchPolicy: 'cache-first',\n })\n data = result.data.neverSwapFactories[0]\n\n // fetch the historical data\n let oneDayResult = await client.query({\n query: GLOBAL_DATA(oneDayBlock?.number),\n fetchPolicy: 'cache-first',\n })\n oneDayData = oneDayResult.data.neverSwapFactories[0]\n\n let twoDayResult = await client.query({\n query: GLOBAL_DATA(twoDayBlock?.number),\n fetchPolicy: 'cache-first',\n })\n twoDayData = twoDayResult.data.neverSwapFactories[0]\n\n let oneWeekResult = await client.query({\n query: GLOBAL_DATA(oneWeekBlock?.number),\n fetchPolicy: 'cache-first',\n })\n const oneWeekData = oneWeekResult.data.neverSwapFactories[0]\n\n let twoWeekResult = await client.query({\n query: GLOBAL_DATA(twoWeekBlock?.number),\n fetchPolicy: 'cache-first',\n })\n const twoWeekData = twoWeekResult.data.neverSwapFactories[0]\n\n if (data && oneDayData && twoDayData && twoWeekData) {\n let [oneDayVolumeUSD, volumeChangeUSD] = get2DayPercentChange(\n data.totalVolumeUSD,\n oneDayData.totalVolumeUSD ? oneDayData.totalVolumeUSD : 0,\n twoDayData.totalVolumeUSD ? twoDayData.totalVolumeUSD : 0\n )\n\n const [oneWeekVolume, weeklyVolumeChange] = get2DayPercentChange(\n data.totalVolumeUSD,\n oneWeekData.totalVolumeUSD,\n twoWeekData.totalVolumeUSD\n )\n\n const [oneDayTxns, txnChange] = get2DayPercentChange(\n data.txCount,\n oneDayData.txCount ? oneDayData.txCount : 0,\n twoDayData.txCount ? twoDayData.txCount : 0\n )\n\n // format the total liquidity in USD\n data.totalLiquidityUSD = data.totalLiquidityBNB * bnbPrice\n const liquidityChangeUSD = getPercentChange(\n data.totalLiquidityBNB * bnbPrice,\n oneDayData.totalLiquidityBNB * oldBnbPrice\n )\n\n // add relevant fields with the calculated amounts\n data.oneDayVolumeUSD = oneDayVolumeUSD\n data.oneWeekVolume = oneWeekVolume\n data.weeklyVolumeChange = weeklyVolumeChange\n data.volumeChangeUSD = volumeChangeUSD\n data.liquidityChangeUSD = liquidityChangeUSD\n data.oneDayTxns = oneDayTxns\n data.txnChange = txnChange\n }\n } catch (e) {\n console.log(e)\n }\n\n return data\n}\n\n/**\n * Get historical data for volume and liquidity used in global charts\n * on main page\n * @param {*} oldestDateToFetch // start of window to fetch from\n */\nconst getChartData = async (oldestDateToFetch) => {\n let data = []\n let weeklyData = []\n const utcEndTime = dayjs.utc()\n let skip = 0\n let allFound = false\n\n try {\n while (!allFound) {\n let result = await client.query({\n query: GLOBAL_CHART,\n variables: {\n startTime: oldestDateToFetch,\n skip,\n },\n fetchPolicy: 'cache-first',\n })\n skip += 1000\n data = data.concat(result.data.neverSwapDayDatas)\n if (result.data.neverSwapDayDatas.length < 1000) {\n allFound = true\n }\n }\n\n if (data) {\n let dayIndexSet = new Set()\n let dayIndexArray = []\n const oneDay = 24 * 60 * 60\n\n // for each day, parse the daily volume and format for chart array\n data.forEach((dayData, i) => {\n // add the day index to the set of days\n dayIndexSet.add((data[i].date / oneDay).toFixed(0))\n dayIndexArray.push(data[i])\n dayData.dailyVolumeUSD = parseFloat(dayData.dailyVolumeUSD)\n })\n\n // fill in empty days ( there will be no day datas if no trades made that day )\n let timestamp = data[0].date ? data[0].date : oldestDateToFetch\n let latestLiquidityUSD = data[0].totalLiquidityUSD\n let latestDayDats = data[0].mostLiquidTokens\n let index = 1\n while (timestamp < utcEndTime.unix() - oneDay) {\n const nextDay = timestamp + oneDay\n let currentDayIndex = (nextDay / oneDay).toFixed(0)\n if (!dayIndexSet.has(currentDayIndex)) {\n data.push({\n date: nextDay,\n dailyVolumeUSD: 0,\n totalLiquidityUSD: latestLiquidityUSD,\n mostLiquidTokens: latestDayDats,\n })\n } else {\n latestLiquidityUSD = dayIndexArray[index].totalLiquidityUSD\n latestDayDats = dayIndexArray[index].mostLiquidTokens\n index = index + 1\n }\n timestamp = nextDay\n }\n }\n\n // format weekly data for weekly sized chunks\n data = data.sort((a, b) => (parseInt(a.date) > parseInt(b.date) ? 1 : -1))\n let startIndexWeekly = -1\n let currentWeek = -1\n data.forEach((entry, i) => {\n const week = dayjs.utc(dayjs.unix(data[i].date)).week()\n if (week !== currentWeek) {\n currentWeek = week\n startIndexWeekly++\n }\n weeklyData[startIndexWeekly] = weeklyData[startIndexWeekly] || {}\n weeklyData[startIndexWeekly].date = data[i].date\n weeklyData[startIndexWeekly].weeklyVolumeUSD =\n (weeklyData[startIndexWeekly].weeklyVolumeUSD ?? 0) + data[i].dailyVolumeUSD\n })\n } catch (e) {\n console.log(e)\n }\n return [data, weeklyData]\n}\n\n/**\n * Get and format transactions for global page\n */\nconst getGlobalTransactions = async () => {\n let transactions = {}\n\n try {\n let result = await client.query({\n query: GLOBAL_TXNS,\n fetchPolicy: 'cache-first',\n })\n transactions.mints = []\n transactions.burns = []\n transactions.swaps = []\n result?.data?.transactions &&\n result.data.transactions.map((transaction) => {\n if (transaction.mints.length > 0) {\n transaction.mints.map((mint) => {\n return transactions.mints.push(mint)\n })\n }\n if (transaction.burns.length > 0) {\n transaction.burns.map((burn) => {\n return transactions.burns.push(burn)\n })\n }\n if (transaction.swaps.length > 0) {\n transaction.swaps.map((swap) => {\n return transactions.swaps.push(swap)\n })\n }\n return true\n })\n } catch (e) {\n console.log(e)\n }\n\n return transactions\n}\n\n/**\n * Gets the current price of ETH, 24 hour price, and % change between them\n */\nconst getBnbPrice = async () => {\n const utcCurrentTime = dayjs.utc()\n const utcOneDayBack = utcCurrentTime.subtract(1, 'day').startOf('minute').unix()\n\n let bnbPrice = 0\n let bnbPriceOneDay = 0\n let priceChangeBNB = 0\n\n try {\n let oneDayBlock = await getBlockFromTimestamp(utcOneDayBack)\n let result = await client.query({\n query: BNB_PRICE(),\n fetchPolicy: 'cache-first',\n })\n let resultOneDay = await client.query({\n query: BNB_PRICE(oneDayBlock),\n fetchPolicy: 'cache-first',\n })\n const currentPrice = result?.data?.bundles[0]?.bnbPrice\n const oneDayBackPrice = resultOneDay?.data?.bundles[0]?.bnbPrice\n priceChangeBNB = getPercentChange(currentPrice, oneDayBackPrice)\n bnbPrice = currentPrice\n bnbPriceOneDay = oneDayBackPrice\n } catch (e) {\n console.log(e)\n }\n\n return [bnbPrice, bnbPriceOneDay, priceChangeBNB]\n}\n\nconst PAIRS_TO_FETCH = 100\nconst TOKENS_TO_FETCH = 100\n\n/**\n * Loop through every pair on uniswap, used for search\n */\nasync function getAllPairsOnUniswap() {\n const utcCurrentTime = dayjs.utc()\n const utcOneHourBack = utcCurrentTime.subtract(3, 'day').startOf('minute').unix()\n let oneHourBlock = await getBlockFromTimestamp(utcOneHourBack)\n\n try {\n let allFound = false\n let pairs = []\n let skipCount = 0\n while (!allFound) {\n let result = await client.query({\n query: ALL_PAIRS(oneHourBlock),\n variables: {\n skip: skipCount,\n },\n fetchPolicy: 'cache-first',\n })\n skipCount = skipCount + PAIRS_TO_FETCH\n pairs = pairs.concat(result?.data?.pairs)\n if (result?.data?.pairs.length < PAIRS_TO_FETCH || pairs.length > PAIRS_TO_FETCH) {\n allFound = true\n }\n }\n return pairs\n } catch (e) {\n console.log(e)\n }\n}\n\n/**\n * Loop through every token on uniswap, used for search\n */\nasync function getAllTokensOnUniswap() {\n try {\n let allFound = false\n let skipCount = 0\n let tokens = []\n while (!allFound) {\n let result = await client.query({\n query: ALL_TOKENS,\n variables: {\n skip: skipCount,\n },\n fetchPolicy: 'cache-first',\n })\n tokens = tokens.concat(result?.data?.tokens)\n if (result?.data?.tokens?.length < TOKENS_TO_FETCH || tokens.length > TOKENS_TO_FETCH) {\n allFound = true\n }\n skipCount = skipCount += TOKENS_TO_FETCH\n }\n return tokens\n } catch (e) {\n console.log(e)\n }\n}\n\n/**\n * Hook that fetches overview data, plus all tokens and pairs for search\n */\nexport function useGlobalData() {\n const [state, { update, updateAllPairsInUniswap, updateAllTokensInUniswap }] = useGlobalDataContext()\n const [bnbPrice, bnbPriceOld] = useBnbPrice()\n\n const data = state?.globalData\n\n useEffect(() => {\n async function fetchData() {\n let globalData = await getGlobalData(bnbPrice, bnbPriceOld)\n globalData && update(globalData)\n\n let allPairs = await getAllPairsOnUniswap()\n updateAllPairsInUniswap(allPairs)\n\n let allTokens = await getAllTokensOnUniswap()\n updateAllTokensInUniswap(allTokens)\n }\n\n // if (!data && bnbPrice && bnbPriceOld) {\n // fetchData()\n // }\n if (!data && bnbPrice) {\n fetchData()\n }\n }, [bnbPrice, bnbPriceOld, update, data, updateAllPairsInUniswap, updateAllTokensInUniswap])\n\n return data || {}\n}\n\nexport function useGlobalChartData() {\n const [state, { updateChart }] = useGlobalDataContext()\n const [oldestDateFetch, setOldestDateFetched] = useState()\n const [activeWindow] = useTimeframe()\n\n const chartDataDaily = state?.chartData?.daily\n const chartDataWeekly = state?.chartData?.weekly\n\n /**\n * Keep track of oldest date fetched. Used to\n * limit data fetched until its actually needed.\n * (dont fetch year long stuff unless year option selected)\n */\n useEffect(() => {\n // based on window, get starttime\n let startTime = getTimeframe(activeWindow)\n\n if ((activeWindow && startTime < oldestDateFetch) || !oldestDateFetch) {\n setOldestDateFetched(startTime)\n }\n }, [activeWindow, oldestDateFetch])\n\n /**\n * Fetch data if none fetched or older data is needed\n */\n useEffect(() => {\n async function fetchData() {\n // historical stuff for chart\n let [newChartData, newWeeklyData] = await getChartData(oldestDateFetch)\n updateChart(newChartData, newWeeklyData)\n }\n if (oldestDateFetch && !(chartDataDaily && chartDataWeekly)) {\n fetchData()\n }\n }, [chartDataDaily, chartDataWeekly, oldestDateFetch, updateChart])\n\n return [chartDataDaily, chartDataWeekly]\n}\n\nexport function useGlobalTransactions() {\n const [state, { updateTransactions }] = useGlobalDataContext()\n const transactions = state?.transactions\n useEffect(() => {\n async function fetchData() {\n if (!transactions) {\n let txns = await getGlobalTransactions()\n updateTransactions(txns)\n }\n }\n fetchData()\n }, [updateTransactions, transactions])\n return transactions\n}\n\nexport function useBnbPrice() {\n const [state, { updateBnbPrice }] = useGlobalDataContext()\n const bnbPrice = state?.[BNB_PRICE_KEY]\n const bnbPriceOld = state?.['oneDayPrice']\n useEffect(() => {\n async function checkForBnbPrice() {\n if (!bnbPrice) {\n let [newPrice, oneDayPrice, priceChange] = await getBnbPrice()\n updateBnbPrice(newPrice, oneDayPrice, priceChange)\n }\n }\n checkForBnbPrice()\n }, [bnbPrice, updateBnbPrice])\n\n return [bnbPrice, bnbPriceOld]\n}\n\nexport function useAllPairsInUniswap() {\n const [state] = useGlobalDataContext()\n let allPairs = state?.allPairs\n\n return allPairs || []\n}\n\nexport function useAllTokensInUniswap() {\n const [state] = useGlobalDataContext()\n let allTokens = state?.allTokens\n\n return allTokens || []\n}\n","interface BasicData {\n token0?: {\n id: string\n name: string\n symbol: string\n }\n token1?: {\n id: string\n name: string\n symbol: string\n }\n}\n\n// Override data return from graph - usually because proxy token has changed\n// names since entitiy was created in subgraph\n// keys are lowercase token addresses <--------\nconst TOKEN_OVERRIDES: { [address: string]: { name: string; symbol: string } } = {\n '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c': {\n name: 'BNB (Wrapped)',\n symbol: 'BNB',\n },\n '0x1416946162b1c2c871a73b07e932d2fb6c932069': {\n name: 'Energi',\n symbol: 'NRGE',\n },\n}\n\n// override tokens with incorrect symbol or names\nexport function updateNameData(data: BasicData): BasicData | undefined {\n if (data?.token0?.id && Object.keys(TOKEN_OVERRIDES).includes(data.token0.id)) {\n data.token0.name = TOKEN_OVERRIDES[data.token0.id].name\n data.token0.symbol = TOKEN_OVERRIDES[data.token0.id].symbol\n }\n\n if (data?.token1?.id && Object.keys(TOKEN_OVERRIDES).includes(data.token1.id)) {\n data.token1.name = TOKEN_OVERRIDES[data.token1.id].name\n data.token1.symbol = TOKEN_OVERRIDES[data.token1.id].symbol\n }\n\n return data\n}\n","import React, { createContext, useContext, useReducer, useMemo, useCallback, useEffect } from 'react'\n\nimport { client } from '../apollo/client'\nimport {\n TOKEN_DATA,\n FILTERED_TRANSACTIONS,\n TOKEN_CHART,\n TOKENS_CURRENT,\n TOKENS_DYNAMIC,\n PRICES_BY_BLOCK,\n PAIR_DATA,\n} from '../apollo/queries'\n\nimport { useBnbPrice } from './GlobalData'\n\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\n\nimport {\n get2DayPercentChange,\n getPercentChange,\n getBlockFromTimestamp,\n isAddress,\n getBlocksFromTimestamps,\n splitQuery,\n} from '../utils'\nimport { timeframeOptions } from '../constants'\nimport { useLatestBlocks } from './Application'\nimport { updateNameData } from '../utils/data'\n\nconst UPDATE = 'UPDATE'\nconst UPDATE_TOKEN_TXNS = 'UPDATE_TOKEN_TXNS'\nconst UPDATE_CHART_DATA = 'UPDATE_CHART_DATA'\nconst UPDATE_PRICE_DATA = 'UPDATE_PRICE_DATA'\nconst UPDATE_TOP_TOKENS = ' UPDATE_TOP_TOKENS'\nconst UPDATE_ALL_PAIRS = 'UPDATE_ALL_PAIRS'\n\nconst TOKEN_PAIRS_KEY = 'TOKEN_PAIRS_KEY'\n\ndayjs.extend(utc)\n\nconst TokenDataContext = createContext()\n\nfunction useTokenDataContext() {\n return useContext(TokenDataContext)\n}\n\nfunction reducer(state, { type, payload }) {\n switch (type) {\n case UPDATE: {\n const { tokenAddress, data } = payload\n return {\n ...state,\n [tokenAddress]: {\n ...state?.[tokenAddress],\n ...data,\n },\n }\n }\n case UPDATE_TOP_TOKENS: {\n const { topTokens } = payload\n let added = {}\n topTokens &&\n topTokens.map((token) => {\n return (added[token.id] = token)\n })\n return {\n ...state,\n ...added,\n }\n }\n\n case UPDATE_TOKEN_TXNS: {\n const { address, transactions } = payload\n return {\n ...state,\n [address]: {\n ...state?.[address],\n txns: transactions,\n },\n }\n }\n case UPDATE_CHART_DATA: {\n const { address, chartData } = payload\n return {\n ...state,\n [address]: {\n ...state?.[address],\n chartData,\n },\n }\n }\n\n case UPDATE_PRICE_DATA: {\n const { address, data, timeWindow, interval } = payload\n return {\n ...state,\n [address]: {\n ...state?.[address],\n [timeWindow]: {\n ...state?.[address]?.[timeWindow],\n [interval]: data,\n },\n },\n }\n }\n\n case UPDATE_ALL_PAIRS: {\n const { address, allPairs } = payload\n return {\n ...state,\n [address]: {\n ...state?.[address],\n [TOKEN_PAIRS_KEY]: allPairs,\n },\n }\n }\n default: {\n throw Error(`Unexpected action type in DataContext reducer: '${type}'.`)\n }\n }\n}\n\nexport default function Provider({ children }) {\n const [state, dispatch] = useReducer(reducer, {})\n const update = useCallback((tokenAddress, data) => {\n dispatch({\n type: UPDATE,\n payload: {\n tokenAddress,\n data,\n },\n })\n }, [])\n\n const updateTopTokens = useCallback((topTokens) => {\n dispatch({\n type: UPDATE_TOP_TOKENS,\n payload: {\n topTokens,\n },\n })\n }, [])\n\n const updateTokenTxns = useCallback((address, transactions) => {\n dispatch({\n type: UPDATE_TOKEN_TXNS,\n payload: { address, transactions },\n })\n }, [])\n\n const updateChartData = useCallback((address, chartData) => {\n dispatch({\n type: UPDATE_CHART_DATA,\n payload: { address, chartData },\n })\n }, [])\n\n const updateAllPairs = useCallback((address, allPairs) => {\n dispatch({\n type: UPDATE_ALL_PAIRS,\n payload: { address, allPairs },\n })\n }, [])\n\n const updatePriceData = useCallback((address, data, timeWindow, interval) => {\n dispatch({\n type: UPDATE_PRICE_DATA,\n payload: { address, data, timeWindow, interval },\n })\n }, [])\n\n return (\n [\n state,\n {\n update,\n updateTokenTxns,\n updateChartData,\n updateTopTokens,\n updateAllPairs,\n updatePriceData,\n },\n ],\n [state, update, updateTokenTxns, updateChartData, updateTopTokens, updateAllPairs, updatePriceData]\n )}\n >\n {children}\n \n )\n}\n\nconst getTopTokens = async (bnbPrice, bnbPriceOld) => {\n const utcCurrentTime = dayjs.utc()\n const utcOneDayBack = utcCurrentTime.subtract(1, 'day').unix()\n const utcTwoDaysBack = utcCurrentTime.subtract(2, 'day').unix()\n let oneDayBlock = await getBlockFromTimestamp(utcOneDayBack)\n let twoDayBlock = await getBlockFromTimestamp(utcTwoDaysBack)\n\n try {\n let current = await client.query({\n query: TOKENS_CURRENT,\n fetchPolicy: 'cache-first',\n })\n\n let oneDayResult = await client.query({\n query: TOKENS_DYNAMIC(oneDayBlock),\n fetchPolicy: 'cache-first',\n })\n\n let twoDayResult = await client.query({\n query: TOKENS_DYNAMIC(twoDayBlock),\n fetchPolicy: 'cache-first',\n })\n\n let oneDayData = oneDayResult?.data?.tokens.reduce((obj, cur, i) => {\n return { ...obj, [cur.id]: cur }\n }, {})\n\n let twoDayData = twoDayResult?.data?.tokens.reduce((obj, cur, i) => {\n return { ...obj, [cur.id]: cur }\n }, {})\n\n let bulkResults = await Promise.all(\n current &&\n oneDayData &&\n twoDayData &&\n current?.data?.tokens.map(async (token) => {\n let data = token\n\n // let liquidityDataThisToken = liquidityData?.[token.id]\n let oneDayHistory = oneDayData?.[token.id]\n let twoDayHistory = twoDayData?.[token.id]\n\n // catch the case where token wasnt in top list in previous days\n if (!oneDayHistory) {\n let oneDayResult = await client.query({\n query: TOKEN_DATA(token.id, oneDayBlock),\n fetchPolicy: 'cache-first',\n })\n oneDayHistory = oneDayResult.data.tokens[0]\n }\n if (!twoDayHistory) {\n let twoDayResult = await client.query({\n query: TOKEN_DATA(token.id, twoDayBlock),\n fetchPolicy: 'cache-first',\n })\n twoDayHistory = twoDayResult.data.tokens[0]\n }\n\n // calculate percentage changes and daily changes\n const [oneDayVolumeUSD, volumeChangeUSD] = get2DayPercentChange(\n data.tradeVolumeUSD,\n oneDayHistory?.tradeVolumeUSD ?? 0,\n twoDayHistory?.tradeVolumeUSD ?? 0\n )\n const [oneDayTxns, txnChange] = get2DayPercentChange(\n data.txCount,\n oneDayHistory?.txCount ?? 0,\n twoDayHistory?.txCount ?? 0\n )\n\n const currentLiquidityUSD = data?.totalLiquidity * bnbPrice * data?.derivedBNB\n const oldLiquidityUSD = oneDayHistory?.totalLiquidity * bnbPriceOld * oneDayHistory?.derivedBNB\n\n // percent changes\n const priceChangeUSD = getPercentChange(\n data?.derivedBNB * bnbPrice,\n oneDayHistory?.derivedBNB ? oneDayHistory?.derivedBNB * bnbPriceOld : 0\n )\n\n // set data\n data.priceUSD = data?.derivedBNB * bnbPrice\n data.totalLiquidityUSD = currentLiquidityUSD\n data.oneDayVolumeUSD = parseFloat(oneDayVolumeUSD)\n data.volumeChangeUSD = volumeChangeUSD\n data.priceChangeUSD = priceChangeUSD\n data.liquidityChangeUSD = getPercentChange(currentLiquidityUSD ?? 0, oldLiquidityUSD ?? 0)\n data.oneDayTxns = oneDayTxns\n data.txnChange = txnChange\n\n // new tokens\n if (!oneDayHistory && data) {\n data.oneDayVolumeUSD = data.tradeVolumeUSD\n data.oneDayVolumeBNB = data.tradeVolume * data.derivedBNB\n data.oneDayTxns = data.txCount\n }\n\n // update name data for\n updateNameData({\n token0: data,\n })\n\n // HOTFIX for Aave\n if (data.id === '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9') {\n const aaveData = await client.query({\n query: PAIR_DATA('0xdfc14d2af169b0d36c4eff567ada9b2e0cae044f'),\n fetchPolicy: 'cache-first',\n })\n const result = aaveData.data.pairs[0]\n data.totalLiquidityUSD = parseFloat(result.reserveUSD) / 2\n data.liquidityChangeUSD = 0\n data.priceChangeUSD = 0\n }\n\n return data\n })\n )\n\n return bulkResults\n\n // calculate percentage changes and daily changes\n } catch (e) {\n console.log(e)\n }\n}\n\nconst getTokenData = async (address, bnbPrice, bnbPriceOld) => {\n const utcCurrentTime = dayjs.utc()\n const utcOneDayBack = utcCurrentTime.subtract(1, 'day').startOf('minute').unix()\n const utcTwoDaysBack = utcCurrentTime.subtract(2, 'day').startOf('minute').unix()\n let oneDayBlock = await getBlockFromTimestamp(utcOneDayBack)\n let twoDayBlock = await getBlockFromTimestamp(utcTwoDaysBack)\n\n // initialize data arrays\n let data = {}\n let oneDayData = {}\n let twoDayData = {}\n\n try {\n // fetch all current and historical data\n let result = await client.query({\n query: TOKEN_DATA(address),\n fetchPolicy: 'cache-first',\n })\n data = result?.data?.tokens?.[0]\n\n // get results from 24 hours in past\n let oneDayResult = await client.query({\n query: TOKEN_DATA(address, oneDayBlock),\n fetchPolicy: 'cache-first',\n })\n oneDayData = oneDayResult.data.tokens[0]\n\n // get results from 48 hours in past\n let twoDayResult = await client.query({\n query: TOKEN_DATA(address, twoDayBlock),\n fetchPolicy: 'cache-first',\n })\n twoDayData = twoDayResult.data.tokens[0]\n\n // catch the case where token wasnt in top list in previous days\n if (!oneDayData) {\n let oneDayResult = await client.query({\n query: TOKEN_DATA(address, oneDayBlock),\n fetchPolicy: 'cache-first',\n })\n oneDayData = oneDayResult.data.tokens[0]\n }\n if (!twoDayData) {\n let twoDayResult = await client.query({\n query: TOKEN_DATA(address, twoDayBlock),\n fetchPolicy: 'cache-first',\n })\n twoDayData = twoDayResult.data.tokens[0]\n }\n\n // calculate percentage changes and daily changes\n const [oneDayVolumeUSD, volumeChangeUSD] = get2DayPercentChange(\n data.tradeVolumeUSD,\n oneDayData?.tradeVolumeUSD ?? 0,\n twoDayData?.tradeVolumeUSD ?? 0\n )\n\n // calculate percentage changes and daily changes\n const [oneDayVolumeUT, volumeChangeUT] = get2DayPercentChange(\n data.untrackedVolumeUSD,\n oneDayData?.untrackedVolumeUSD ?? 0,\n twoDayData?.untrackedVolumeUSD ?? 0\n )\n\n // calculate percentage changes and daily changes\n const [oneDayTxns, txnChange] = get2DayPercentChange(\n data.txCount,\n oneDayData?.txCount ?? 0,\n twoDayData?.txCount ?? 0\n )\n\n const priceChangeUSD = getPercentChange(\n data?.derivedBNB * bnbPrice,\n parseFloat(oneDayData?.derivedBNB ?? 0) * bnbPriceOld\n )\n\n const currentLiquidityUSD = data?.totalLiquidity * bnbPrice * data?.derivedBNB\n const oldLiquidityUSD = oneDayData?.totalLiquidity * bnbPriceOld * oneDayData?.derivedBNB\n\n // set data\n data.priceUSD = data?.derivedBNB * bnbPrice\n data.totalLiquidityUSD = currentLiquidityUSD\n data.oneDayVolumeUSD = oneDayVolumeUSD\n data.volumeChangeUSD = volumeChangeUSD\n data.priceChangeUSD = priceChangeUSD\n data.oneDayVolumeUT = oneDayVolumeUT\n data.volumeChangeUT = volumeChangeUT\n const liquidityChangeUSD = getPercentChange(currentLiquidityUSD ?? 0, oldLiquidityUSD ?? 0)\n data.liquidityChangeUSD = liquidityChangeUSD\n data.oneDayTxns = oneDayTxns\n data.txnChange = txnChange\n\n // new tokens\n if (!oneDayData && data) {\n data.oneDayVolumeUSD = data.tradeVolumeUSD\n data.oneDayVolumeBNB = data.tradeVolume * data.derivedBNB\n data.oneDayTxns = data.txCount\n }\n\n // update name data for\n updateNameData({\n token0: data,\n })\n\n // HOTFIX for Aave\n if (data.id === '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9') {\n const aaveData = await client.query({\n query: PAIR_DATA('0xdfc14d2af169b0d36c4eff567ada9b2e0cae044f'),\n fetchPolicy: 'cache-first',\n })\n const result = aaveData.data.pairs[0]\n data.totalLiquidityUSD = parseFloat(result.reserveUSD) / 2\n data.liquidityChangeUSD = 0\n data.priceChangeUSD = 0\n }\n } catch (e) {\n console.log(e)\n }\n return data\n}\n\nconst getTokenTransactions = async (allPairsFormatted) => {\n const transactions = {}\n try {\n let result = await client.query({\n query: FILTERED_TRANSACTIONS,\n variables: {\n allPairs: allPairsFormatted,\n },\n fetchPolicy: 'cache-first',\n })\n transactions.mints = result.data.mints\n transactions.burns = result.data.burns\n transactions.swaps = result.data.swaps\n } catch (e) {\n console.log(e)\n }\n return transactions\n}\n\nconst getTokenPairs = async (tokenAddress) => {\n try {\n // fetch all current and historical data\n let result = await client.query({\n query: TOKEN_DATA(tokenAddress),\n fetchPolicy: 'cache-first',\n })\n return result.data?.['pairs0'].concat(result.data?.['pairs1'])\n } catch (e) {\n console.log(e)\n }\n}\n\nconst getIntervalTokenData = async (tokenAddress, startTime, interval = 3600, latestBlock) => {\n const utcEndTime = dayjs.utc()\n let time = startTime\n\n // create an array of hour start times until we reach current hour\n // buffer by half hour to catch case where graph isnt synced to latest block\n const timestamps = []\n while (time < utcEndTime.unix()) {\n timestamps.push(time)\n time += interval\n }\n\n // backout if invalid timestamp format\n if (timestamps.length === 0) {\n return []\n }\n\n // once you have all the timestamps, get the blocks for each timestamp in a bulk query\n let blocks\n try {\n blocks = await getBlocksFromTimestamps(timestamps, 100)\n\n // catch failing case\n if (!blocks || blocks.length === 0) {\n return []\n }\n\n if (latestBlock) {\n blocks = blocks.filter((b) => {\n return parseFloat(b.number) <= parseFloat(latestBlock)\n })\n }\n\n let result = await splitQuery(PRICES_BY_BLOCK, client, [tokenAddress], blocks, 50)\n\n // format token ETH price results\n let values = []\n for (var row in result) {\n let timestamp = row.split('t')[1]\n let derivedBNB = parseFloat(result[row]?.derivedBNB)\n if (timestamp) {\n values.push({\n timestamp,\n derivedBNB,\n })\n }\n }\n\n // go through eth usd prices and assign to original values array\n let index = 0\n for (var brow in result) {\n let timestamp = brow.split('b')[1]\n if (timestamp) {\n values[index].priceUSD = result[brow].bnbPrice * values[index].derivedBNB\n index += 1\n }\n }\n\n let formattedHistory = []\n\n // for each hour, construct the open and close price\n for (let i = 0; i < values.length - 1; i++) {\n formattedHistory.push({\n timestamp: values[i].timestamp,\n open: parseFloat(values[i].priceUSD),\n close: parseFloat(values[i + 1].priceUSD),\n })\n }\n\n return formattedHistory\n } catch (e) {\n console.log(e)\n console.log('error fetching blocks')\n return []\n }\n}\n\nconst getTokenChartData = async (tokenAddress) => {\n let data = []\n const utcEndTime = dayjs.utc()\n let utcStartTime = utcEndTime.subtract(1, 'year')\n let startTime = utcStartTime.startOf('minute').unix() - 1\n\n try {\n let allFound = false\n let skip = 0\n while (!allFound) {\n let result = await client.query({\n query: TOKEN_CHART,\n variables: {\n tokenAddr: tokenAddress,\n skip,\n },\n fetchPolicy: 'cache-first',\n })\n if (result.data.tokenDayDatas.length < 1000) {\n allFound = true\n }\n skip += 1000\n data = data.concat(result.data.tokenDayDatas)\n }\n\n let dayIndexSet = new Set()\n let dayIndexArray = []\n const oneDay = 24 * 60 * 60\n data.forEach((dayData, i) => {\n // add the day index to the set of days\n dayIndexSet.add((data[i].date / oneDay).toFixed(0))\n dayIndexArray.push(data[i])\n dayData.dailyVolumeUSD = parseFloat(dayData.dailyVolumeUSD)\n })\n\n // fill in empty days\n let timestamp = data[0] && data[0].date ? data[0].date : startTime\n let latestLiquidityUSD = data[0] && data[0].totalLiquidityUSD\n let latestPriceUSD = data[0] && data[0].priceUSD\n let index = 1\n while (timestamp < utcEndTime.startOf('minute').unix() - oneDay) {\n const nextDay = timestamp + oneDay\n let currentDayIndex = (nextDay / oneDay).toFixed(0)\n if (!dayIndexSet.has(currentDayIndex)) {\n data.push({\n date: nextDay,\n dayString: nextDay,\n dailyVolumeUSD: 0,\n priceUSD: latestPriceUSD,\n totalLiquidityUSD: latestLiquidityUSD,\n })\n } else {\n latestLiquidityUSD = dayIndexArray[index].totalLiquidityUSD\n latestPriceUSD = dayIndexArray[index].priceUSD\n index = index + 1\n }\n timestamp = nextDay\n }\n data = data.sort((a, b) => (parseInt(a.date) > parseInt(b.date) ? 1 : -1))\n } catch (e) {\n console.log(e)\n }\n return data\n}\n\n// export function Updater() {\n// const [, { updateTopTokens }] = useTokenDataContext()\n// const [bnbPrice, bnbPriceOld] = useBnbPrice()\n// useEffect(() => {\n// async function getData() {\n// // get top pairs for overview list\n// let topTokens = await getTopTokens(bnbPrice, bnbPriceOld)\n// topTokens && updateTopTokens(topTokens)\n// }\n// bnbPrice && bnbPriceOld && getData()\n// }, [bnbPrice, bnbPriceOld, updateTopTokens])\n// return null\n// }\n\nexport function Updater() {\n const [, { updateTopTokens }] = useTokenDataContext()\n const [bnbPrice, bnbPriceOld] = useBnbPrice()\n useEffect(() => {\n async function getData() {\n // get top pairs for overview list\n let topTokens = await getTopTokens(bnbPrice, bnbPriceOld)\n topTokens && updateTopTokens(topTokens)\n }\n bnbPrice && getData()\n }, [bnbPrice, bnbPriceOld, updateTopTokens])\n return null\n}\n\nexport function useTokenData(tokenAddress) {\n const [state, { update }] = useTokenDataContext()\n const [bnbPrice, bnbPriceOld] = useBnbPrice()\n const tokenData = state?.[tokenAddress]\n\n useEffect(() => {\n if (!tokenData && bnbPrice && bnbPriceOld && isAddress(tokenAddress)) {\n getTokenData(tokenAddress, bnbPrice, bnbPriceOld).then((data) => {\n update(tokenAddress, data)\n })\n }\n }, [bnbPrice, bnbPriceOld, tokenAddress, tokenData, update])\n\n return tokenData || {}\n}\n\nexport function useTokenTransactions(tokenAddress) {\n const [state, { updateTokenTxns }] = useTokenDataContext()\n const tokenTxns = state?.[tokenAddress]?.txns\n\n const allPairsFormatted =\n state[tokenAddress] &&\n state[tokenAddress].TOKEN_PAIRS_KEY &&\n state[tokenAddress].TOKEN_PAIRS_KEY.map((pair) => {\n return pair.id\n })\n\n useEffect(() => {\n async function checkForTxns() {\n if (!tokenTxns && allPairsFormatted) {\n let transactions = await getTokenTransactions(allPairsFormatted)\n updateTokenTxns(tokenAddress, transactions)\n }\n }\n checkForTxns()\n }, [tokenTxns, tokenAddress, updateTokenTxns, allPairsFormatted])\n\n return tokenTxns || []\n}\n\nexport function useTokenPairs(tokenAddress) {\n const [state, { updateAllPairs }] = useTokenDataContext()\n const tokenPairs = state?.[tokenAddress]?.[TOKEN_PAIRS_KEY]\n\n useEffect(() => {\n async function fetchData() {\n let allPairs = await getTokenPairs(tokenAddress)\n updateAllPairs(tokenAddress, allPairs)\n }\n if (!tokenPairs && isAddress(tokenAddress)) {\n fetchData()\n }\n }, [tokenAddress, tokenPairs, updateAllPairs])\n\n return tokenPairs || []\n}\n\nexport function useTokenChartData(tokenAddress) {\n const [state, { updateChartData }] = useTokenDataContext()\n const chartData = state?.[tokenAddress]?.chartData\n useEffect(() => {\n async function checkForChartData() {\n if (!chartData) {\n let data = await getTokenChartData(tokenAddress)\n updateChartData(tokenAddress, data)\n }\n }\n checkForChartData()\n }, [chartData, tokenAddress, updateChartData])\n return chartData\n}\n\n/**\n * get candlestick data for a token - saves in context based on the window and the\n * interval size\n * @param {*} tokenAddress\n * @param {*} timeWindow // a preset time window from constant - how far back to look\n * @param {*} interval // the chunk size in seconds - default is 1 hour of 3600s\n */\nexport function useTokenPriceData(tokenAddress, timeWindow, interval = 3600) {\n const [state, { updatePriceData }] = useTokenDataContext()\n const chartData = state?.[tokenAddress]?.[timeWindow]?.[interval]\n const [latestBlock] = useLatestBlocks()\n\n useEffect(() => {\n const currentTime = dayjs.utc()\n const windowSize = timeWindow === timeframeOptions.MONTH ? 'month' : 'week'\n const startTime =\n timeWindow === timeframeOptions.ALL_TIME ? 1589760000 : currentTime.subtract(1, windowSize).startOf('hour').unix()\n\n async function fetch() {\n let data = await getIntervalTokenData(tokenAddress, startTime, interval, latestBlock)\n updatePriceData(tokenAddress, data, timeWindow, interval)\n }\n if (!chartData) {\n fetch()\n }\n }, [chartData, interval, timeWindow, tokenAddress, updatePriceData, latestBlock])\n\n return chartData\n}\n\nexport function useAllTokenData() {\n const [state] = useTokenDataContext()\n return state\n}\n","import React, { createContext, useContext, useReducer, useMemo, useCallback, useEffect, useState } from 'react'\n\nimport { client } from '../apollo/client'\nimport {\n PAIR_DATA,\n PAIR_CHART,\n FILTERED_TRANSACTIONS,\n PAIRS_CURRENT,\n PAIRS_BULK,\n PAIRS_HISTORICAL_BULK,\n HOURLY_PAIR_RATES,\n} from '../apollo/queries'\n\nimport { useBnbPrice } from './GlobalData'\n\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\n\nimport {\n getPercentChange,\n get2DayPercentChange,\n isAddress,\n getBlocksFromTimestamps,\n getTimestampsForChanges,\n splitQuery,\n} from '../utils'\nimport { timeframeOptions } from '../constants'\nimport { useLatestBlocks } from './Application'\nimport { updateNameData } from '../utils/data'\n\nconst UPDATE = 'UPDATE'\nconst UPDATE_PAIR_TXNS = 'UPDATE_PAIR_TXNS'\nconst UPDATE_CHART_DATA = 'UPDATE_CHART_DATA'\nconst UPDATE_TOP_PAIRS = 'UPDATE_TOP_PAIRS'\nconst UPDATE_HOURLY_DATA = 'UPDATE_HOURLY_DATA'\n\ndayjs.extend(utc)\n\nexport function safeAccess(object, path) {\n return object\n ? path.reduce(\n (accumulator, currentValue) => (accumulator && accumulator[currentValue] ? accumulator[currentValue] : null),\n object\n )\n : null\n}\n\nconst PairDataContext = createContext()\n\nfunction usePairDataContext() {\n return useContext(PairDataContext)\n}\n\nfunction reducer(state, { type, payload }) {\n switch (type) {\n case UPDATE: {\n const { pairAddress, data } = payload\n return {\n ...state,\n [pairAddress]: {\n ...state?.[pairAddress],\n ...data,\n },\n }\n }\n\n case UPDATE_TOP_PAIRS: {\n const { topPairs } = payload\n let added = {}\n topPairs.map((pair) => {\n return (added[pair.id] = pair)\n })\n return {\n ...state,\n ...added,\n }\n }\n\n case UPDATE_PAIR_TXNS: {\n const { address, transactions } = payload\n return {\n ...state,\n [address]: {\n ...(safeAccess(state, [address]) || {}),\n txns: transactions,\n },\n }\n }\n case UPDATE_CHART_DATA: {\n const { address, chartData } = payload\n return {\n ...state,\n [address]: {\n ...(safeAccess(state, [address]) || {}),\n chartData,\n },\n }\n }\n\n case UPDATE_HOURLY_DATA: {\n const { address, hourlyData, timeWindow } = payload\n return {\n ...state,\n [address]: {\n ...state?.[address],\n hourlyData: {\n ...state?.[address]?.hourlyData,\n [timeWindow]: hourlyData,\n },\n },\n }\n }\n\n default: {\n throw Error(`Unexpected action type in DataContext reducer: '${type}'.`)\n }\n }\n}\n\nexport default function Provider({ children }) {\n const [state, dispatch] = useReducer(reducer, {})\n\n // update pair specific data\n const update = useCallback((pairAddress, data) => {\n dispatch({\n type: UPDATE,\n payload: {\n pairAddress,\n data,\n },\n })\n }, [])\n\n const updateTopPairs = useCallback((topPairs) => {\n dispatch({\n type: UPDATE_TOP_PAIRS,\n payload: {\n topPairs,\n },\n })\n }, [])\n\n const updatePairTxns = useCallback((address, transactions) => {\n dispatch({\n type: UPDATE_PAIR_TXNS,\n payload: { address, transactions },\n })\n }, [])\n\n const updateChartData = useCallback((address, chartData) => {\n dispatch({\n type: UPDATE_CHART_DATA,\n payload: { address, chartData },\n })\n }, [])\n\n const updateHourlyData = useCallback((address, hourlyData, timeWindow) => {\n dispatch({\n type: UPDATE_HOURLY_DATA,\n payload: { address, hourlyData, timeWindow },\n })\n }, [])\n\n return (\n [\n state,\n {\n update,\n updatePairTxns,\n updateChartData,\n updateTopPairs,\n updateHourlyData,\n },\n ],\n [state, update, updatePairTxns, updateChartData, updateTopPairs, updateHourlyData]\n )}\n >\n {children}\n \n )\n}\n\nasync function getBulkPairData(pairList, bnbPrice) {\n const [t1, t2, tWeek] = getTimestampsForChanges()\n let [{ number: b1 }, { number: b2 }, { number: bWeek }] = await getBlocksFromTimestamps([t1, t2, tWeek])\n\n try {\n let current = await client.query({\n query: PAIRS_BULK,\n variables: {\n allPairs: pairList,\n },\n fetchPolicy: 'cache-first',\n })\n\n let [oneDayResult, twoDayResult, oneWeekResult] = await Promise.all(\n [b1, b2, bWeek].map(async (block) => {\n let result = client.query({\n query: PAIRS_HISTORICAL_BULK(block, pairList),\n fetchPolicy: 'cache-first',\n })\n return result\n })\n )\n\n let oneDayData = oneDayResult?.data?.pairs.reduce((obj, cur, i) => {\n return { ...obj, [cur.id]: cur }\n }, {})\n\n let twoDayData = twoDayResult?.data?.pairs.reduce((obj, cur, i) => {\n return { ...obj, [cur.id]: cur }\n }, {})\n\n let oneWeekData = oneWeekResult?.data?.pairs.reduce((obj, cur, i) => {\n return { ...obj, [cur.id]: cur }\n }, {})\n\n let pairData = await Promise.all(\n current &&\n current.data.pairs.map(async (pair) => {\n let data = pair\n let oneDayHistory = oneDayData?.[pair.id]\n if (!oneDayHistory) {\n let newData = await client.query({\n query: PAIR_DATA(pair.id, b1),\n fetchPolicy: 'cache-first',\n })\n oneDayHistory = newData.data.pairs[0]\n }\n let twoDayHistory = twoDayData?.[pair.id]\n if (!twoDayHistory) {\n let newData = await client.query({\n query: PAIR_DATA(pair.id, b2),\n fetchPolicy: 'cache-first',\n })\n twoDayHistory = newData.data.pairs[0]\n }\n let oneWeekHistory = oneWeekData?.[pair.id]\n if (!oneWeekHistory) {\n let newData = await client.query({\n query: PAIR_DATA(pair.id, bWeek),\n fetchPolicy: 'cache-first',\n })\n oneWeekHistory = newData.data.pairs[0]\n }\n data = parseData(data, oneDayHistory, twoDayHistory, oneWeekHistory, bnbPrice, b1)\n return data\n })\n )\n return pairData\n } catch (e) {\n console.log(e)\n }\n}\n\nfunction parseData(data, oneDayData, twoDayData, oneWeekData, bnbPrice, oneDayBlock) {\n // get volume changes\n const [oneDayVolumeUSD, volumeChangeUSD] = get2DayPercentChange(\n data?.volumeUSD,\n oneDayData?.volumeUSD ? oneDayData.volumeUSD : 0,\n twoDayData?.volumeUSD ? twoDayData.volumeUSD : 0\n )\n const [oneDayVolumeUntracked, volumeChangeUntracked] = get2DayPercentChange(\n data?.untrackedVolumeUSD,\n oneDayData?.untrackedVolumeUSD ? parseFloat(oneDayData?.untrackedVolumeUSD) : 0,\n twoDayData?.untrackedVolumeUSD ? twoDayData?.untrackedVolumeUSD : 0\n )\n const oneWeekVolumeUSD = parseFloat(oneWeekData ? data?.volumeUSD - oneWeekData?.volumeUSD : data.volumeUSD)\n\n // set volume properties\n data.oneDayVolumeUSD = parseFloat(oneDayVolumeUSD)\n data.oneWeekVolumeUSD = oneWeekVolumeUSD\n data.volumeChangeUSD = volumeChangeUSD\n data.oneDayVolumeUntracked = oneDayVolumeUntracked\n data.volumeChangeUntracked = volumeChangeUntracked\n\n // set liquiditry properties\n data.trackedReserveUSD = data.trackedReserveBNB * bnbPrice\n data.liquidityChangeUSD = getPercentChange(data.reserveUSD, oneDayData?.reserveUSD)\n\n // format if pair hasnt existed for a day or a week\n if (!oneDayData && data && data.block > oneDayBlock) {\n data.oneDayVolumeUSD = parseFloat(data.volumeUSD)\n }\n if (!oneDayData && data) {\n data.oneDayVolumeUSD = parseFloat(data.volumeUSD)\n }\n if (!oneWeekData && data) {\n data.oneWeekVolumeUSD = parseFloat(data.volumeUSD)\n }\n\n // format incorrect names\n updateNameData(data)\n\n return data\n}\n\nconst getPairTransactions = async (pairAddress) => {\n const transactions = {}\n\n try {\n let result = await client.query({\n query: FILTERED_TRANSACTIONS,\n variables: {\n allPairs: [pairAddress],\n },\n fetchPolicy: 'no-cache',\n })\n transactions.mints = result.data.mints\n transactions.burns = result.data.burns\n transactions.swaps = result.data.swaps\n } catch (e) {\n console.log(e)\n }\n\n return transactions\n}\n\nconst getPairChartData = async (pairAddress) => {\n let data = []\n const utcEndTime = dayjs.utc().unix()\n let utcStartTime = utcEndTime.subtract(1, 'year').startOf('minute')\n let startTime = utcStartTime.unix() - 1\n\n try {\n let allFound = false\n let skip = 0\n while (!allFound) {\n let result = await client.query({\n query: PAIR_CHART,\n variables: {\n pairAddress: pairAddress,\n skip,\n },\n fetchPolicy: 'cache-first',\n })\n skip += 1000\n data = data.concat(result.data.pairDayDatas)\n if (result.data.pairDayDatas.length < 1000) {\n allFound = true\n }\n }\n\n let dayIndexSet = new Set()\n let dayIndexArray = []\n const oneDay = 24 * 60 * 60\n data.forEach((dayData, i) => {\n // add the day index to the set of days\n dayIndexSet.add((data[i].date / oneDay).toFixed(0))\n dayIndexArray.push(data[i])\n dayData.dailyVolumeUSD = parseFloat(dayData.dailyVolumeUSD)\n dayData.reserveUSD = parseFloat(dayData.reserveUSD)\n })\n\n if (data[0]) {\n // fill in empty days\n let timestamp = data[0].date ? data[0].date : startTime\n let latestLiquidityUSD = data[0].reserveUSD\n let index = 1\n while (timestamp < utcEndTime.unix() - oneDay) {\n const nextDay = timestamp + oneDay\n let currentDayIndex = (nextDay / oneDay).toFixed(0)\n if (!dayIndexSet.has(currentDayIndex)) {\n data.push({\n date: nextDay,\n dayString: nextDay,\n dailyVolumeUSD: 0,\n reserveUSD: latestLiquidityUSD,\n })\n } else {\n latestLiquidityUSD = dayIndexArray[index].reserveUSD\n index = index + 1\n }\n timestamp = nextDay\n }\n }\n\n data = data.sort((a, b) => (parseInt(a.date) > parseInt(b.date) ? 1 : -1))\n } catch (e) {\n console.log(e)\n }\n\n return data\n}\n\nconst getHourlyRateData = async (pairAddress, startTime, latestBlock) => {\n try {\n const utcEndTime = dayjs.utc().unix()\n let time = startTime\n\n // create an array of hour start times until we reach current hour\n const timestamps = []\n while (time <= utcEndTime.unix() - 3600) {\n timestamps.push(time)\n time += 3600\n }\n\n // backout if invalid timestamp format\n if (timestamps.length === 0) {\n return []\n }\n\n // once you have all the timestamps, get the blocks for each timestamp in a bulk query\n let blocks\n\n blocks = await getBlocksFromTimestamps(timestamps, 100)\n\n // catch failing case\n if (!blocks || blocks?.length === 0) {\n return []\n }\n\n if (latestBlock) {\n blocks = blocks.filter((b) => {\n return parseFloat(b.number) <= parseFloat(latestBlock)\n })\n }\n\n const result = await splitQuery(HOURLY_PAIR_RATES, client, [pairAddress], blocks, 100)\n\n // format token ETH price results\n let values = []\n for (var row in result) {\n let timestamp = row.split('t')[1]\n if (timestamp) {\n values.push({\n timestamp,\n rate0: parseFloat(result[row]?.token0Price),\n rate1: parseFloat(result[row]?.token1Price),\n })\n }\n }\n\n let formattedHistoryRate0 = []\n let formattedHistoryRate1 = []\n\n // for each hour, construct the open and close price\n for (let i = 0; i < values.length - 1; i++) {\n formattedHistoryRate0.push({\n timestamp: values[i].timestamp,\n open: parseFloat(values[i].rate0),\n close: parseFloat(values[i + 1].rate0),\n })\n formattedHistoryRate1.push({\n timestamp: values[i].timestamp,\n open: parseFloat(values[i].rate1),\n close: parseFloat(values[i + 1].rate1),\n })\n }\n\n return [formattedHistoryRate0, formattedHistoryRate1]\n } catch (e) {\n console.log(e)\n return [[], []]\n }\n}\n\nexport function Updater() {\n const [, { updateTopPairs }] = usePairDataContext()\n const [bnbPrice] = useBnbPrice()\n useEffect(() => {\n async function getData() {\n // get top pairs by reserves\n let {\n data: { pairs },\n } = await client.query({\n query: PAIRS_CURRENT,\n fetchPolicy: 'cache-first',\n })\n\n // format as array of addresses\n const formattedPairs = pairs.map((pair) => {\n return pair.id\n })\n\n // get data for every pair in list\n let topPairs = await getBulkPairData(formattedPairs, bnbPrice)\n topPairs && updateTopPairs(topPairs)\n }\n bnbPrice && getData()\n }, [bnbPrice, updateTopPairs])\n return null\n}\n\nexport function useHourlyRateData(pairAddress, timeWindow) {\n const [state, { updateHourlyData }] = usePairDataContext()\n const chartData = state?.[pairAddress]?.hourlyData?.[timeWindow]\n const [latestBlock] = useLatestBlocks()\n\n useEffect(() => {\n const currentTime = dayjs.utc().unix()\n const windowSize = timeWindow === timeframeOptions.MONTH ? 'month' : 'week'\n const startTime =\n timeWindow === timeframeOptions.ALL_TIME ? 1589760000 : currentTime.subtract(1, windowSize).startOf('hour').unix()\n\n async function fetch() {\n let data = await getHourlyRateData(pairAddress, startTime, latestBlock)\n updateHourlyData(pairAddress, data, timeWindow)\n }\n if (!chartData) {\n fetch()\n }\n }, [chartData, timeWindow, pairAddress, updateHourlyData, latestBlock])\n\n return chartData\n}\n\n/**\n * @todo\n * store these updates to reduce future redundant calls\n */\nexport function useDataForList(pairList) {\n const [state] = usePairDataContext()\n const [bnbPrice] = useBnbPrice()\n\n const [stale, setStale] = useState(false)\n const [fetched, setFetched] = useState([])\n\n // reset\n useEffect(() => {\n if (pairList) {\n setStale(false)\n setFetched()\n }\n }, [pairList])\n\n useEffect(() => {\n async function fetchNewPairData() {\n let newFetched = []\n let unfetched = []\n\n pairList.map(async (pair) => {\n let currentData = state?.[pair.id]\n if (!currentData) {\n unfetched.push(pair.id)\n } else {\n newFetched.push(currentData)\n }\n })\n\n let newPairData = await getBulkPairData(\n unfetched.map((pair) => {\n return pair\n }),\n bnbPrice\n )\n setFetched(newFetched.concat(newPairData))\n }\n if (bnbPrice && pairList && pairList.length > 0 && !fetched && !stale) {\n setStale(true)\n fetchNewPairData()\n }\n }, [bnbPrice, state, pairList, stale, fetched])\n\n let formattedFetch =\n fetched &&\n fetched.reduce((obj, cur) => {\n return { ...obj, [cur?.id]: cur }\n }, {})\n\n return formattedFetch\n}\n\n/**\n * Get all the current and 24hr changes for a pair\n */\nexport function usePairData(pairAddress) {\n const [state, { update }] = usePairDataContext()\n const [bnbPrice] = useBnbPrice()\n const pairData = state?.[pairAddress]\n\n useEffect(() => {\n async function fetchData() {\n if (!pairData && pairAddress) {\n let data = await getBulkPairData([pairAddress], bnbPrice)\n data && update(pairAddress, data[0])\n }\n }\n if (!pairData && pairAddress && bnbPrice && isAddress(pairAddress)) {\n fetchData()\n }\n }, [pairAddress, pairData, update, bnbPrice])\n\n return pairData || {}\n}\n\n/**\n * Get most recent txns for a pair\n */\nexport function usePairTransactions(pairAddress) {\n const [state, { updatePairTxns }] = usePairDataContext()\n const pairTxns = state?.[pairAddress]?.txns\n useEffect(() => {\n async function checkForTxns() {\n if (!pairTxns) {\n let transactions = await getPairTransactions(pairAddress)\n updatePairTxns(pairAddress, transactions)\n }\n }\n checkForTxns()\n }, [pairTxns, pairAddress, updatePairTxns])\n return pairTxns\n}\n\nexport function usePairChartData(pairAddress) {\n const [state, { updateChartData }] = usePairDataContext()\n const chartData = state?.[pairAddress]?.chartData\n\n useEffect(() => {\n async function checkForChartData() {\n if (!chartData) {\n let data = await getPairChartData(pairAddress)\n updateChartData(pairAddress, data)\n }\n }\n checkForChartData()\n }, [chartData, pairAddress, updateChartData])\n return chartData\n}\n\nexport function useAllPairData() {\n const [state] = usePairDataContext()\n return state || {}\n}\n","import React, { createContext, useContext, useReducer, useMemo, useCallback, useEffect } from 'react'\nimport { client } from '../apollo/client'\nimport { USER_TRANSACTIONS } from '../apollo/queries'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\n\ndayjs.extend(utc)\n\nconst UPDATE_TRANSACTIONS = 'UPDATE_TRANSACTIONS'\nconst UPDATE_POSITIONS = 'UPDATE_POSITIONS '\nconst UPDATE_MINING_POSITIONS = 'UPDATE_MINING_POSITIONS'\nconst UPDATE_USER_POSITION_HISTORY = 'UPDATE_USER_POSITION_HISTORY'\nconst UPDATE_USER_PAIR_RETURNS = 'UPDATE_USER_PAIR_RETURNS'\n\nconst TRANSACTIONS_KEY = 'TRANSACTIONS_KEY'\nconst POSITIONS_KEY = 'POSITIONS_KEY'\nconst MINING_POSITIONS_KEY = 'MINING_POSITIONS_KEY'\nconst USER_SNAPSHOTS = 'USER_SNAPSHOTS'\nconst USER_PAIR_RETURNS_KEY = 'USER_PAIR_RETURNS_KEY'\n\nconst UserContext = createContext()\n\nfunction useUserContext() {\n return useContext(UserContext)\n}\n\nfunction reducer(state, { type, payload }) {\n switch (type) {\n case UPDATE_TRANSACTIONS: {\n const { account, transactions } = payload\n return {\n ...state,\n [account]: {\n ...state?.[account],\n [TRANSACTIONS_KEY]: transactions,\n },\n }\n }\n case UPDATE_POSITIONS: {\n const { account, positions } = payload\n return {\n ...state,\n [account]: { ...state?.[account], [POSITIONS_KEY]: positions },\n }\n }\n case UPDATE_MINING_POSITIONS: {\n const { account, miningPositions } = payload\n return {\n ...state,\n [account]: { ...state?.[account], [MINING_POSITIONS_KEY]: miningPositions },\n }\n }\n case UPDATE_USER_POSITION_HISTORY: {\n const { account, historyData } = payload\n return {\n ...state,\n [account]: { ...state?.[account], [USER_SNAPSHOTS]: historyData },\n }\n }\n\n case UPDATE_USER_PAIR_RETURNS: {\n const { account, pairAddress, data } = payload\n return {\n ...state,\n [account]: {\n ...state?.[account],\n [USER_PAIR_RETURNS_KEY]: {\n ...state?.[account]?.[USER_PAIR_RETURNS_KEY],\n [pairAddress]: data,\n },\n },\n }\n }\n\n default: {\n throw Error(`Unexpected action type in DataContext reducer: '${type}'.`)\n }\n }\n}\n\nconst INITIAL_STATE = {}\n\nexport default function Provider({ children }) {\n const [state, dispatch] = useReducer(reducer, INITIAL_STATE)\n\n const updateTransactions = useCallback((account, transactions) => {\n dispatch({\n type: UPDATE_TRANSACTIONS,\n payload: {\n account,\n transactions,\n },\n })\n }, [])\n\n const updatePositions = useCallback((account, positions) => {\n dispatch({\n type: UPDATE_POSITIONS,\n payload: {\n account,\n positions,\n },\n })\n }, [])\n\n const updateMiningPositions = useCallback((account, miningPositions) => {\n dispatch({\n type: UPDATE_MINING_POSITIONS,\n payload: {\n account,\n miningPositions,\n },\n })\n }, [])\n\n const updateUserSnapshots = useCallback((account, historyData) => {\n dispatch({\n type: UPDATE_USER_POSITION_HISTORY,\n payload: {\n account,\n historyData,\n },\n })\n }, [])\n\n const updateUserPairReturns = useCallback((account, pairAddress, data) => {\n dispatch({\n type: UPDATE_USER_PAIR_RETURNS,\n payload: {\n account,\n pairAddress,\n data,\n },\n })\n }, [])\n\n return (\n [\n state,\n { updateTransactions, updatePositions, updateMiningPositions, updateUserSnapshots, updateUserPairReturns },\n ],\n [state, updateTransactions, updatePositions, updateMiningPositions, updateUserSnapshots, updateUserPairReturns]\n )}\n >\n {children}\n \n )\n}\n\nexport function useUserTransactions(account) {\n const [state, { updateTransactions }] = useUserContext()\n const transactions = state?.[account]?.[TRANSACTIONS_KEY]\n useEffect(() => {\n async function fetchData(account) {\n try {\n let result = await client.query({\n query: USER_TRANSACTIONS,\n variables: {\n user: account,\n },\n fetchPolicy: 'no-cache',\n })\n if (result?.data) {\n updateTransactions(account, result?.data)\n }\n } catch (e) {\n console.log(e)\n }\n }\n if (!transactions && account) {\n fetchData(account)\n }\n }, [account, transactions, updateTransactions])\n\n return transactions || {}\n}\n","import styled from 'styled-components'\nimport { Box } from 'rebass/styled-components'\n\nconst Row = styled(Box)`\n width: 100%;\n display: flex;\n padding: 0;\n align-items: center;\n align-items: ${({ align }) => align && align};\n padding: ${({ padding }) => padding};\n border: ${({ border }) => border};\n border-radius: ${({ borderRadius }) => borderRadius};\n justify-content: ${({ justify }) => justify};\n`\n\nexport const RowBetween = styled(Row)`\n justify-content: space-between;\n`\n\nexport const RowFlat = styled.div`\n display: flex;\n align-items: flex-end;\n`\n\nexport const AutoRow = styled(Row)`\n flex-wrap: ${({ wrap }) => wrap ?? 'nowrap'};\n margin: -${({ gap }) => gap};\n & > * {\n margin: ${({ gap }) => gap} !important;\n }\n`\n\nexport const RowFixed = styled(Row)`\n width: fit-content;\n`\n\nexport default Row\n","import styled from 'styled-components'\n\nconst Column = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n`\nexport const ColumnCenter = styled(Column)`\n width: 100%;\n align-items: center;\n`\n\nexport const AutoColumn = styled.div`\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ${({ gap }) => (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap};\n justify-items: ${({ justify }) => justify && justify};\n`\n\nexport default Column\n","import React from 'react'\nimport styled, { css, keyframes } from 'styled-components'\n\nconst pulse = keyframes`\n 0% { transform: scale(1); }\n 60% { transform: scale(1.1); }\n 100% { transform: scale(1); }\n`\n\nconst Wrapper = styled.div`\n pointer-events: none;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n\n ${(props) =>\n props.fill && !props.height\n ? css`\n height: 100vh;\n `\n : css`\n height: 180px;\n `}\n`\n\nconst AnimatedImg = styled.div`\n animation: ${pulse} 800ms linear infinite;\n & > * {\n width: 72px;\n }\n`\n\nconst LocalLoader = ({ fill }) => {\n return (\n \n \n \"loading-icon\"\n \n \n )\n}\n\nexport default LocalLoader\n","import React from 'react'\nimport { Link as RebassLink } from 'rebass'\nimport { Link as RouterLink } from 'react-router-dom'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\nimport { lighten, darken } from 'polished'\n\nconst WrappedLink = ({ external, children, ...rest }) => (\n \n {children}\n \n)\n\nWrappedLink.propTypes = {\n external: PropTypes.bool,\n}\n\nconst Link = styled(WrappedLink)`\n color: ${({ color, theme }) => (color ? color : theme.link)};\n`\n\nexport default Link\n\nexport const CustomLink = styled(RouterLink)`\n text-decoration: none;\n font-size: 14px;\n font-weight: 500;\n color: ${({ color, theme }) => (color ? color : theme.link)};\n\n &:visited {\n color: ${({ color, theme }) => (color ? lighten(0.1, color) : lighten(0.1, theme.link))};\n }\n\n &:hover {\n cursor: pointer;\n text-decoration: none;\n underline: none;\n color: ${({ color, theme }) => (color ? darken(0.1, color) : darken(0.1, theme.link))};\n }\n`\n\nexport const BasicLink = styled(RouterLink)`\n text-decoration: none;\n color: inherit;\n &:hover {\n cursor: pointer;\n text-decoration: none;\n underline: none;\n }\n`\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Text, Box } from 'rebass'\n\nimport Link from './Link'\n\nimport { urls } from '../utils'\n\nconst Divider = styled(Box)`\n height: 1px;\n background-color: ${({ theme }) => theme.divider};\n`\n\nexport const IconWrapper = styled.div`\n position: absolute;\n right: 0;\n border-radius: 3px;\n height: 16px;\n width: 16px;\n padding: 0px;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${({ theme }) => theme.text1};\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n`\n\nconst Hint = ({ children, ...rest }) => (\n \n {children}\n \n)\n\nconst Address = ({ address, token, ...rest }) => (\n \n {address}\n \n)\n\nexport const Hover = styled.div`\n :hover {\n cursor: pointer;\n opacity: ${({ fade }) => fade && '0.7'};\n }\n`\n\nexport const StyledIcon = styled.div`\n color: ${({ theme }) => theme.text1};\n`\n\nconst EmptyCard = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 200px;\n border-radius: 20px;\n color: ${({ theme }) => theme.text1};\n height: ${({ height }) => height && height};\n`\n\nexport const SideBar = styled.span`\n display: grid;\n grid-gap: 24px;\n position: sticky;\n top: 4rem;\n`\n\nexport const SubNav = styled.ul`\n list-style: none;\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n padding: 0;\n margin-bottom: 2rem;\n`\nexport const SubNavEl = styled.li`\n list-style: none;\n display: flex;\n padding-bottom: 0.5rem;\n margin-right: 1rem;\n font-weight: ${({ isActive }) => (isActive ? 600 : 500)};\n border-bottom: 1px solid rgba(0, 0, 0, 0);\n\n :hover {\n cursor: pointer;\n border-bottom: 1px solid ${({ theme }) => theme.bg3};\n }\n`\n\nexport const PageWrapper = styled.div`\n display: flex;\n flex-direction: column;\n padding-top: 36px;\n padding-bottom: 80px;\n\n @media screen and (max-width: 600px) {\n & > * {\n padding: 0 12px;\n }\n }\n`\n\nexport const ContentWrapper = styled.div`\n display: grid;\n justify-content: start;\n align-items: start;\n grid-template-columns: 1fr;\n grid-gap: 24px;\n max-width: 1440px;\n width: 100%;\n margin: 0 auto;\n padding: 0 2rem;\n box-sizing: border-box;\n @media screen and (max-width: 1180px) {\n grid-template-columns: 1fr;\n padding: 0 1rem;\n }\n`\n\nexport const ContentWrapperLarge = styled.div`\n display: grid;\n justify-content: start;\n align-items: start;\n grid-template-columns: 1fr;\n grid-gap: 24px;\n padding: 0 2rem;\n margin: 0 auto;\n box-sizing: border-box;\n max-width: 1440px;\n width: 100%;\n\n @media screen and (max-width: 1282px) {\n grid-template-columns: 1fr;\n padding: 0 1rem;\n }\n`\n\nexport const FullWrapper = styled.div`\n display: grid;\n justify-content: start;\n align-items: start;\n grid-template-columns: 1fr;\n grid-gap: 24px;\n max-width: 1440px;\n width: 100%;\n margin: 0 auto;\n padding: 0 2rem;\n box-sizing: border-box;\n\n @media screen and (max-width: 1180px) {\n grid-template-columns: 1fr;\n padding: 0 1rem;\n }\n`\n\nexport const FixedMenu = styled.div`\n z-index: 99;\n width: 100%;\n box-sizing: border-box;\n padding: 1rem;\n box-sizing: border-box;\n margin-bottom: 2rem;\n max-width: 100vw;\n\n @media screen and (max-width: 800px) {\n margin-bottom: 0;\n }\n`\n\nexport { Hint, Divider, Address, EmptyCard }\n","import React, { useState, useEffect } from 'react'\nimport styled from 'styled-components'\nimport { isAddress } from '../../utils/index.js'\nimport PlaceHolder from '../../assets/placeholder.png'\nimport EthereumLogo from '../../assets/eth.png'\n\nconst BAD_IMAGES = {}\n\nconst Inline = styled.div`\n display: flex;\n align-items: center;\n align-self: center;\n`\n\nconst Image = styled.img`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n background-color: white;\n border-radius: 50%;\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n`\n\nconst StyledEthereumLogo = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n\n > img {\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n }\n`\n\nexport default function TokenLogo({ address, header = false, size = '24px', ...rest }) {\n const [error, setError] = useState(false)\n\n useEffect(() => {\n setError(false)\n }, [address])\n\n if (error || BAD_IMAGES[address]) {\n return (\n \n {''}\n \n )\n }\n\n // hard coded fixes for trust wallet api issues\n if (address?.toLowerCase() === '0x5e74c9036fb86bd7ecdcb084a0673efc32ea31cb') {\n address = '0x42456d7084eacf4083f1140d3229471bba2949a8'\n }\n\n if (address?.toLowerCase() === '0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f') {\n address = '0xc011a72400e58ecd99ee497cf89e3775d4bd732f'\n }\n\n if (address?.toLowerCase() === '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2') {\n return (\n \n \n \n )\n }\n\n const path = `https://raw.githubusercontent.com/neverswap/assets/master/blockchains/smartchain/assets/${isAddress(\n address\n )}/logo.png`\n\n return (\n \n {\n BAD_IMAGES[address] = true\n setError(true)\n event.preventDefault()\n }}\n />\n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport TokenLogo from '../TokenLogo'\n\nexport default function DoubleTokenLogo({ a0, a1, size = 24, margin = false }) {\n const TokenWrapper = styled.div`\n position: relative;\n display: flex;\n flex-direction: row;\n margin-right: ${({ sizeraw, margin }) => margin && (sizeraw / 3 + 8).toString() + 'px'};\n `\n\n const HigherLogo = styled(TokenLogo)`\n z-index: 2;\n background-color: white;\n border-radius: 50%;\n `\n\n const CoveredLogo = styled(TokenLogo)`\n position: absolute;\n left: ${({ sizeraw }) => (sizeraw / 2).toString() + 'px'};\n background-color: white;\n border-radius: 50%;\n `\n\n return (\n \n \n \n \n )\n}\n","import { useState, useCallback, useEffect, useRef } from 'react'\nimport { shade } from 'polished'\nimport Vibrant from 'node-vibrant'\nimport { hex } from 'wcag-contrast'\nimport { isAddress } from '../utils'\nimport copy from 'copy-to-clipboard'\n\nexport function useColor(tokenAddress, token) {\n const [color, setColor] = useState('#2172E5')\n if (tokenAddress) {\n const path = `https://raw.githubusercontent.com/neverswap/assets/master/blockchains/bsc/assets/${isAddress(\n tokenAddress\n )}/logo.png`\n if (path) {\n Vibrant.from(path).getPalette((err, palette) => {\n if (palette && palette.Vibrant) {\n let detectedHex = palette.Vibrant.hex\n let AAscore = hex(detectedHex, '#FFF')\n while (AAscore < 3) {\n detectedHex = shade(0.005, detectedHex)\n AAscore = hex(detectedHex, '#FFF')\n }\n if (token === 'DAI') {\n setColor('#FAAB14')\n } else {\n setColor(detectedHex)\n }\n }\n })\n }\n }\n return color\n}\n\nexport function useCopyClipboard(timeout = 500) {\n const [isCopied, setIsCopied] = useState(false)\n\n const staticCopy = useCallback((text) => {\n const didCopy = copy(text)\n setIsCopied(didCopy)\n }, [])\n\n useEffect(() => {\n if (isCopied) {\n const hide = setTimeout(() => {\n setIsCopied(false)\n }, timeout)\n\n return () => {\n clearTimeout(hide)\n }\n }\n }, [isCopied, setIsCopied, timeout])\n\n return [isCopied, staticCopy]\n}\n\nexport const useOutsideClick = (ref, ref2, callback) => {\n const handleClick = (e) => {\n if (ref.current && ref.current && !ref2.current) {\n callback(true)\n } else if (ref.current && !ref.current.contains(e.target) && ref2.current && !ref2.current.contains(e.target)) {\n callback(true)\n } else {\n callback(false)\n }\n }\n useEffect(() => {\n document.addEventListener('click', handleClick)\n return () => {\n document.removeEventListener('click', handleClick)\n }\n })\n}\n\nexport default function useInterval(callback: () => void, delay: null | number) {\n const savedCallback = useRef<() => void>()\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback\n }, [callback])\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n const current = savedCallback.current\n current && current()\n }\n\n if (delay !== null) {\n tick()\n const id = setInterval(tick, delay)\n return () => clearInterval(id)\n }\n return\n }, [delay])\n}\n","import { Placement } from '@popperjs/core'\nimport { transparentize } from 'polished'\nimport React, { useState } from 'react'\nimport { usePopper } from 'react-popper'\nimport styled from 'styled-components'\nimport Portal from '@reach/portal'\nimport useInterval from '../../hooks'\n\nconst PopoverContainer = styled.div<{ show: boolean }>`\n z-index: 9999;\n\n visibility: ${(props) => (props.show ? 'visible' : 'hidden')};\n opacity: ${(props) => (props.show ? 1 : 0)};\n transition: visibility 150ms linear, opacity 150ms linear;\n\n background: ${({ theme }) => theme.bg2};\n border: 1px solid ${({ theme }) => theme.bg3};\n box-shadow: 0 4px 8px 0 ${({ theme }) => transparentize(0.9, theme.shadow1)};\n color: ${({ theme }) => theme.text2};\n border-radius: 8px;\n`\n\nconst ReferenceElement = styled.div`\n display: inline-block;\n`\n\nconst Arrow = styled.div`\n width: 8px;\n height: 8px;\n z-index: 9998;\n\n ::before {\n position: absolute;\n width: 8px;\n height: 8px;\n z-index: 9998;\n\n content: '';\n border: 1px solid ${({ theme }) => theme.bg3};\n transform: rotate(45deg);\n background: ${({ theme }) => theme.bg2};\n }\n\n &.arrow-top {\n bottom: -5px;\n ::before {\n border-top: none;\n border-left: none;\n }\n }\n\n &.arrow-bottom {\n top: -5px;\n ::before {\n border-bottom: none;\n border-right: none;\n }\n }\n\n &.arrow-left {\n right: -5px;\n\n ::before {\n border-bottom: none;\n border-left: none;\n }\n }\n\n &.arrow-right {\n left: -5px;\n ::before {\n border-right: none;\n border-top: none;\n }\n }\n`\n\nexport interface PopoverProps {\n content: React.ReactNode\n show: boolean\n children: React.ReactNode\n placement?: Placement\n}\n\nexport default function Popover({ content, show, children, placement = 'auto' }: PopoverProps) {\n const [referenceElement, setReferenceElement] = useState(null)\n const [popperElement, setPopperElement] = useState(null)\n const [arrowElement, setArrowElement] = useState(null)\n const { styles, update, attributes } = usePopper(referenceElement, popperElement, {\n placement,\n strategy: 'fixed',\n modifiers: [\n { name: 'offset', options: { offset: [8, 8] } },\n { name: 'arrow', options: { element: arrowElement } },\n ],\n })\n\n useInterval(update, show ? 100 : null)\n\n return (\n <>\n {children}\n \n \n {content}\n \n \n \n \n )\n}\n","import React, { useCallback, useState } from 'react'\nimport { HelpCircle as Question } from 'react-feather'\nimport styled from 'styled-components'\nimport Popover, { PopoverProps } from '../Popover'\n\nconst QuestionWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0.2rem;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n background-color: ${({ theme }) => theme.bg2};\n color: ${({ theme }) => theme.text2};\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n`\n\nconst TooltipContainer = styled.div`\n width: 228px;\n padding: 0.6rem 1rem;\n line-height: 150%;\n font-weight: 400;\n`\n\ninterface TooltipProps extends Omit {\n text: string\n}\n\nexport function Tooltip({ text, ...rest }: TooltipProps) {\n return {text}} {...rest} />\n}\n\nexport default function QuestionHelper({ text, disabled }: { text: string; disabled?: boolean }) {\n const [show, setShow] = useState(false)\n\n const open = useCallback(() => setShow(true), [setShow])\n const close = useCallback(() => setShow(false), [setShow])\n\n return (\n \n \n \n \n \n \n \n )\n}\n","import React, { useState } from 'react'\nimport styled from 'styled-components'\nimport { Tooltip } from '../QuestionHelper'\n\nconst TextWrapper = styled.div`\n position: relative;\n margin-left: ${({ margin }) => margin && '4px'};\n color: ${({ theme, link }) => (link ? theme.blue : theme.text1)};\n font-size: ${({ fontSize }) => fontSize ?? 'inherit'};\n\n :hover {\n cursor: pointer;\n }\n\n @media screen and (max-width: 600px) {\n font-size: ${({ adjustSize }) => adjustSize && '12px'};\n }\n`\n\nconst FormattedName = ({ text, maxCharacters, margin = false, adjustSize = false, fontSize, link, ...rest }) => {\n const [showHover, setShowHover] = useState(false)\n\n if (!text) {\n return ''\n }\n\n if (text.length > maxCharacters) {\n return (\n \n setShowHover(true)}\n onMouseLeave={() => setShowHover(false)}\n margin={margin}\n adjustSize={adjustSize}\n link={link}\n fontSize={fontSize}\n {...rest}\n >\n {' ' + text.slice(0, maxCharacters - 1) + '...'}\n \n \n )\n }\n\n return (\n \n {text}\n \n )\n}\n\nexport default FormattedName\n","import React, { useState, useEffect } from 'react'\nimport { useMedia } from 'react-use'\nimport dayjs from 'dayjs'\nimport LocalLoader from '../LocalLoader'\nimport utc from 'dayjs/plugin/utc'\nimport { Box, Flex, Text } from 'rebass'\nimport styled from 'styled-components'\n\nimport { CustomLink } from '../Link'\nimport { Divider } from '../../components'\nimport { withRouter } from 'react-router-dom'\nimport { formattedNum, formattedPercent } from '../../utils'\nimport DoubleTokenLogo from '../DoubleLogo'\nimport FormattedName from '../FormattedName'\nimport QuestionHelper from '../QuestionHelper'\nimport { TYPE } from '../../Theme'\n\ndayjs.extend(utc)\n\nconst PageButtons = styled.div`\n width: 100%;\n display: flex;\n justify-content: center;\n margin-top: 2em;\n margin-bottom: 0.5em;\n`\n\nconst Arrow = styled.div`\n color: ${({ theme }) => theme.primary1};\n opacity: ${(props) => (props.faded ? 0.3 : 1)};\n padding: 0 20px;\n user-select: none;\n :hover {\n cursor: pointer;\n }\n`\n\nconst List = styled(Box)`\n -webkit-overflow-scrolling: touch;\n`\n\nconst DashGrid = styled.div`\n display: grid;\n grid-gap: 1em;\n grid-template-columns: 100px 1fr 1fr;\n grid-template-areas: 'name liq vol';\n padding: 0 1.125rem;\n\n > * {\n justify-content: flex-end;\n\n :first-child {\n justify-content: flex-start;\n text-align: left;\n width: 20px;\n }\n }\n\n @media screen and (min-width: 740px) {\n padding: 0 1.125rem;\n grid-template-columns: 1.5fr 1fr 1fr};\n grid-template-areas: ' name liq vol pool ';\n }\n\n @media screen and (min-width: 1080px) {\n padding: 0 1.125rem;\n grid-template-columns: 1.5fr 1fr 1fr 1fr 1fr 1fr;\n grid-template-areas: ' name liq vol volWeek fees apy';\n }\n\n @media screen and (min-width: 1200px) {\n grid-template-columns: 1.5fr 1fr 1fr 1fr 1fr 1fr;\n grid-template-areas: ' name liq vol volWeek fees apy';\n }\n`\n\nconst ListWrapper = styled.div``\n\nconst ClickableText = styled(Text)`\n color: ${({ theme }) => theme.text1};\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n text-align: end;\n user-select: none;\n`\n\nconst DataText = styled(Flex)`\n align-items: center;\n text-align: center;\n color: ${({ theme }) => theme.text1};\n\n & > * {\n font-size: 14px;\n }\n\n @media screen and (max-width: 600px) {\n font-size: 12px;\n }\n`\n\nconst SORT_FIELD = {\n LIQ: 0,\n VOL: 1,\n VOL_7DAYS: 3,\n FEES: 4,\n APY: 5,\n}\n\nconst FIELD_TO_VALUE = {\n [SORT_FIELD.LIQ]: 'trackedReserveUSD', // sort with tracked volume only\n [SORT_FIELD.VOL]: 'oneDayVolumeUSD',\n [SORT_FIELD.VOL_7DAYS]: 'oneWeekVolumeUSD',\n [SORT_FIELD.FEES]: 'oneDayVolumeUSD',\n}\n\nfunction PairList({ pairs, color, disbaleLinks, maxItems = 10 }) {\n const below600 = useMedia('(max-width: 600px)')\n const below740 = useMedia('(max-width: 740px)')\n const below1080 = useMedia('(max-width: 1080px)')\n\n // pagination\n const [page, setPage] = useState(1)\n const [maxPage, setMaxPage] = useState(1)\n const ITEMS_PER_PAGE = maxItems\n\n // sorting\n const [sortDirection, setSortDirection] = useState(true)\n const [sortedColumn, setSortedColumn] = useState(SORT_FIELD.LIQ)\n\n useEffect(() => {\n setMaxPage(1) // edit this to do modular\n setPage(1)\n }, [pairs])\n\n useEffect(() => {\n if (pairs) {\n let extraPages = 1\n if (Object.keys(pairs).length % ITEMS_PER_PAGE === 0) {\n extraPages = 0\n }\n setMaxPage(Math.floor(Object.keys(pairs).length / ITEMS_PER_PAGE) + extraPages)\n }\n }, [ITEMS_PER_PAGE, pairs])\n\n const ListItem = ({ pairAddress, index }) => {\n const pairData = pairs[pairAddress]\n\n if (pairData && pairData.token0 && pairData.token1) {\n const liquidity = formattedNum(pairData.reserveUSD, true)\n const volume = formattedNum(pairData.oneDayVolumeUSD, true)\n const apy = formattedPercent((pairData.oneDayVolumeUSD * 0.002 * 365 * 100) / pairData.reserveUSD)\n\n return (\n \n \n {!below600 &&
{index}
}\n \n \n \n \n
\n {liquidity}\n {volume}\n {!below1080 && {formattedNum(pairData.oneWeekVolumeUSD, true)}}\n {!below1080 && {formattedNum(pairData.oneDayVolumeUSD * 0.002, true)}}\n {!below1080 && {apy}}\n
\n )\n } else {\n return ''\n }\n }\n\n const pairList =\n pairs &&\n Object.keys(pairs)\n .sort((addressA, addressB) => {\n const pairA = pairs[addressA]\n const pairB = pairs[addressB]\n if (sortedColumn === SORT_FIELD.APY) {\n const apy0 = parseFloat(pairA.oneDayVolumeUSD * 0.002 * 356 * 100) / parseFloat(pairA.reserveUSD)\n const apy1 = parseFloat(pairB.oneDayVolumeUSD * 0.002 * 356 * 100) / parseFloat(pairB.reserveUSD)\n return apy0 > apy1 ? (sortDirection ? -1 : 1) * 1 : (sortDirection ? -1 : 1) * -1\n }\n return parseFloat(pairA[FIELD_TO_VALUE[sortedColumn]]) > parseFloat(pairB[FIELD_TO_VALUE[sortedColumn]])\n ? (sortDirection ? -1 : 1) * 1\n : (sortDirection ? -1 : 1) * -1\n })\n .slice(ITEMS_PER_PAGE * (page - 1), page * ITEMS_PER_PAGE)\n .map((pairAddress, index) => {\n return (\n pairAddress && (\n
\n \n \n
\n )\n )\n })\n\n return (\n \n \n \n Name\n \n \n {\n setSortedColumn(SORT_FIELD.LIQ)\n setSortDirection(sortedColumn !== SORT_FIELD.LIQ ? true : !sortDirection)\n }}\n >\n Liquidity {sortedColumn === SORT_FIELD.LIQ ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n \n {\n setSortedColumn(SORT_FIELD.VOL)\n setSortDirection(sortedColumn !== SORT_FIELD.VOL ? true : !sortDirection)\n }}\n >\n Volume (24hrs)\n {sortedColumn === SORT_FIELD.VOL ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n {!below1080 && (\n \n {\n setSortedColumn(SORT_FIELD.VOL_7DAYS)\n setSortDirection(sortedColumn !== SORT_FIELD.VOL_7DAYS ? true : !sortDirection)\n }}\n >\n Volume (7d) {sortedColumn === SORT_FIELD.VOL_7DAYS ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n )}\n {!below1080 && (\n \n {\n setSortedColumn(SORT_FIELD.FEES)\n setSortDirection(sortedColumn !== SORT_FIELD.FEES ? true : !sortDirection)\n }}\n >\n Fees (24hr) {sortedColumn === SORT_FIELD.FEES ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n )}\n {!below1080 && (\n \n {\n setSortedColumn(SORT_FIELD.APY)\n setSortDirection(sortedColumn !== SORT_FIELD.APY ? true : !sortDirection)\n }}\n >\n 1y Fees / Liquidity {sortedColumn === SORT_FIELD.APY ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n \n )}\n \n \n {!pairList ? : pairList}\n \n {\n setPage(page === 1 ? page : page - 1)\n }}\n >\n \n \n {'Page ' + page + ' of ' + maxPage}\n {\n setPage(page === maxPage ? page : page + 1)\n }}\n >\n \n \n \n \n )\n}\n\nexport default withRouter(PairList)\n","import React, { useState, useEffect, useMemo } from 'react'\nimport styled from 'styled-components'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\n\nimport { Box, Flex, Text } from 'rebass'\nimport TokenLogo from '../TokenLogo'\nimport { CustomLink } from '../Link'\nimport Row from '../Row'\nimport { Divider } from '..'\n\nimport { formattedNum, formattedPercent } from '../../utils'\nimport { useMedia } from 'react-use'\nimport { withRouter } from 'react-router-dom'\nimport { OVERVIEW_TOKEN_BLACKLIST } from '../../constants'\nimport FormattedName from '../FormattedName'\nimport { TYPE } from '../../Theme'\n\ndayjs.extend(utc)\n\nconst PageButtons = styled.div`\n width: 100%;\n display: flex;\n justify-content: center;\n margin-top: 2em;\n margin-bottom: 2em;\n`\n\nconst Arrow = styled.div`\n color: ${({ theme }) => theme.primary1};\n opacity: ${(props) => (props.faded ? 0.3 : 1)};\n padding: 0 20px;\n user-select: none;\n :hover {\n cursor: pointer;\n }\n`\n\nconst List = styled(Box)`\n -webkit-overflow-scrolling: touch;\n`\n\nconst DashGrid = styled.div`\n display: grid;\n grid-gap: 1em;\n grid-template-columns: 100px 1fr 1fr;\n grid-template-areas: 'name liq vol';\n padding: 0 1.125rem;\n\n > * {\n justify-content: flex-end;\n\n &:first-child {\n justify-content: flex-start;\n text-align: left;\n width: 100px;\n }\n }\n\n @media screen and (min-width: 680px) {\n display: grid;\n grid-gap: 1em;\n grid-template-columns: 180px 1fr 1fr 1fr;\n grid-template-areas: 'name symbol liq vol ';\n\n > * {\n justify-content: flex-end;\n width: 100%;\n\n &:first-child {\n justify-content: flex-start;\n }\n }\n }\n\n @media screen and (min-width: 1080px) {\n display: grid;\n grid-gap: 0.5em;\n grid-template-columns: 1.5fr 0.6fr 1fr 1fr 1fr 1fr;\n grid-template-areas: 'name symbol liq vol price change';\n }\n`\n\nconst ListWrapper = styled.div``\n\nconst ClickableText = styled(Text)`\n text-align: end;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n user-select: none;\n color: ${({ theme }) => theme.text1};\n\n @media screen and (max-width: 640px) {\n font-size: 0.85rem;\n }\n`\n\nconst DataText = styled(Flex)`\n align-items: center;\n text-align: center;\n color: ${({ theme }) => theme.text1};\n\n & > * {\n font-size: 14px;\n }\n\n @media screen and (max-width: 600px) {\n font-size: 12px;\n }\n`\n\nconst SORT_FIELD = {\n LIQ: 'totalLiquidityUSD',\n VOL: 'oneDayVolumeUSD',\n SYMBOL: 'symbol',\n NAME: 'name',\n PRICE: 'priceUSD',\n CHANGE: 'priceChangeUSD',\n}\n\n// @TODO rework into virtualized list\nfunction TopTokenList({ tokens, itemMax = 10 }) {\n // page state\n const [page, setPage] = useState(1)\n const [maxPage, setMaxPage] = useState(1)\n\n // sorting\n const [sortDirection, setSortDirection] = useState(true)\n const [sortedColumn, setSortedColumn] = useState(SORT_FIELD.LIQ)\n\n const below1080 = useMedia('(max-width: 1080px)')\n const below680 = useMedia('(max-width: 680px)')\n const below600 = useMedia('(max-width: 600px)')\n\n useEffect(() => {\n setMaxPage(1) // edit this to do modular\n setPage(1)\n }, [tokens])\n\n const formattedTokens = useMemo(() => {\n return (\n tokens &&\n Object.keys(tokens)\n .filter((key) => {\n return !OVERVIEW_TOKEN_BLACKLIST.includes(key)\n })\n .map((key) => tokens[key])\n )\n }, [tokens])\n\n useEffect(() => {\n if (tokens && formattedTokens) {\n let extraPages = 1\n if (formattedTokens.length % itemMax === 0) {\n extraPages = 0\n }\n setMaxPage(Math.floor(formattedTokens.length / itemMax) + extraPages)\n }\n }, [tokens, formattedTokens, itemMax])\n\n const filteredList = useMemo(() => {\n return (\n formattedTokens &&\n formattedTokens\n .sort((a, b) => {\n if (sortedColumn === SORT_FIELD.SYMBOL || sortedColumn === SORT_FIELD.NAME) {\n return a[sortedColumn] > b[sortedColumn] ? (sortDirection ? -1 : 1) * 1 : (sortDirection ? -1 : 1) * -1\n }\n return parseFloat(a[sortedColumn]) > parseFloat(b[sortedColumn])\n ? (sortDirection ? -1 : 1) * 1\n : (sortDirection ? -1 : 1) * -1\n })\n .slice(itemMax * (page - 1), page * itemMax)\n )\n }, [formattedTokens, itemMax, page, sortDirection, sortedColumn])\n\n const ListItem = ({ item, index }) => {\n return (\n \n \n \n {!below680 &&
{index}
}\n \n \n \n \n
\n
\n {!below680 && (\n \n \n \n )}\n {formattedNum(item.totalLiquidityUSD, true, false)}\n {formattedNum(item.oneDayVolumeUSD, true, false)}\n {!below1080 && (\n \n {formattedNum(item.priceUSD, true)}\n \n )}\n {!below1080 && {formattedPercent(item.priceChangeUSD)}}\n
\n )\n }\n\n return (\n \n \n \n {\n setSortedColumn(SORT_FIELD.NAME)\n setSortDirection(sortedColumn !== SORT_FIELD.NAME ? true : !sortDirection)\n }}\n >\n {below680 ? 'Symbol' : 'Name'} {sortedColumn === SORT_FIELD.NAME ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n {!below680 && (\n \n {\n setSortedColumn(SORT_FIELD.SYMBOL)\n setSortDirection(sortedColumn !== SORT_FIELD.SYMBOL ? true : !sortDirection)\n }}\n >\n Symbol {sortedColumn === SORT_FIELD.SYMBOL ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n )}\n\n \n {\n setSortedColumn(SORT_FIELD.LIQ)\n setSortDirection(sortedColumn !== SORT_FIELD.LIQ ? true : !sortDirection)\n }}\n >\n Liquidity {sortedColumn === SORT_FIELD.LIQ ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n \n {\n setSortedColumn(SORT_FIELD.VOL)\n setSortDirection(sortedColumn !== SORT_FIELD.VOL ? true : !sortDirection)\n }}\n >\n Volume (24hrs)\n {sortedColumn === SORT_FIELD.VOL ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n {!below1080 && (\n \n {\n setSortedColumn(SORT_FIELD.PRICE)\n setSortDirection(sortedColumn !== SORT_FIELD.PRICE ? true : !sortDirection)\n }}\n >\n Price {sortedColumn === SORT_FIELD.PRICE ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n )}\n {!below1080 && (\n \n {\n setSortedColumn(SORT_FIELD.CHANGE)\n setSortDirection(sortedColumn !== SORT_FIELD.CHANGE ? true : !sortDirection)\n }}\n >\n Price Change (24hrs)\n {sortedColumn === SORT_FIELD.CHANGE ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n )}\n \n \n \n {filteredList &&\n filteredList.map((item, index) => {\n return (\n
\n \n \n
\n )\n })}\n
\n \n
setPage(page === 1 ? page : page - 1)}>\n \n
\n {'Page ' + page + ' of ' + maxPage}\n
setPage(page === maxPage ? page : page + 1)}>\n \n
\n
\n
\n )\n}\n\nexport default withRouter(TopTokenList)\n","import React, { useState } from 'react'\nimport styled from 'styled-components'\n\nimport Row, { RowBetween } from '../Row'\nimport { AutoColumn } from '../Column'\nimport { ChevronDown as Arrow } from 'react-feather'\nimport { TYPE } from '../../Theme'\nimport { StyledIcon } from '..'\n\nconst Wrapper = styled.div`\n z-index: 20;\n position: relative;\n background-color: ${({ theme }) => theme.panelColor};\n border: 1px solid ${({ open, color }) => (open ? color : 'rgba(0, 0, 0, 0.15);')} \n width: 100px;\n padding: 4px 10px;\n padding-right: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n :hover {\n cursor: pointer;\n }\n`\n\nconst Dropdown = styled.div`\n position: absolute;\n top: 34px;\n padding-top: 40px;\n width: calc(100% - 40px);\n background-color: ${({ theme }) => theme.bg1};\n border: 1px solid rgba(0, 0, 0, 0.15);\n padding: 10px 10px;\n border-radius: 8px;\n width: calc(100% - 20px);\n font-weight: 500;\n font-size: 1rem;\n color: black;\n :hover {\n cursor: pointer;\n }\n`\n\nconst ArrowStyled = styled(Arrow)`\n height: 20px;\n width: 20px;\n margin-left: 6px;\n`\n\nconst DropdownSelect = ({ options, active, setActive, color }) => {\n const [showDropdown, toggleDropdown] = useState(false)\n\n return (\n \n toggleDropdown(!showDropdown)} justify=\"center\">\n {active}\n \n \n \n \n {showDropdown && (\n \n \n {Object.keys(options).map((key, index) => {\n let option = options[key]\n return (\n option !== active && (\n {\n toggleDropdown(!showDropdown)\n setActive(option)\n }}\n key={index}\n >\n {option}\n \n )\n )\n })}\n \n \n )}\n \n )\n}\n\nexport default DropdownSelect\n","import React, { useState, useEffect } from 'react'\nimport styled from 'styled-components'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\n\nimport { formatTime, formattedNum, urls } from '../../utils'\nimport { useMedia } from 'react-use'\nimport { useCurrentCurrency } from '../../contexts/Application'\nimport { RowFixed, RowBetween } from '../Row'\n\nimport LocalLoader from '../LocalLoader'\nimport { Box, Flex, Text } from 'rebass'\nimport Link from '../Link'\nimport { Divider, EmptyCard } from '..'\nimport DropdownSelect from '../DropdownSelect'\nimport FormattedName from '../FormattedName'\nimport { TYPE } from '../../Theme'\nimport { updateNameData } from '../../utils/data'\n\ndayjs.extend(utc)\n\nconst PageButtons = styled.div`\n width: 100%;\n display: flex;\n justify-content: center;\n margin-top: 2em;\n margin-bottom: 0.5em;\n`\n\nconst Arrow = styled.div`\n color: #2f80ed;\n opacity: ${(props) => (props.faded ? 0.3 : 1)};\n padding: 0 20px;\n user-select: none;\n :hover {\n cursor: pointer;\n }\n`\n\nconst List = styled(Box)`\n -webkit-overflow-scrolling: touch;\n`\n\nconst DashGrid = styled.div`\n display: grid;\n grid-gap: 1em;\n grid-template-columns: 100px 1fr 1fr;\n grid-template-areas: 'txn value time';\n\n > * {\n justify-content: flex-end;\n width: 100%;\n\n &:first-child {\n justify-content: flex-start;\n text-align: left;\n width: 100px;\n }\n }\n\n @media screen and (min-width: 500px) {\n > * {\n &:first-child {\n width: 180px;\n }\n }\n }\n\n @media screen and (min-width: 780px) {\n max-width: 1320px;\n grid-template-columns: 1.2fr 1fr 1fr 1fr 1fr;\n grid-template-areas: 'txn value amountToken amountOther time';\n\n > * {\n &:first-child {\n width: 180px;\n }\n }\n }\n\n @media screen and (min-width: 1080px) {\n max-width: 1320px;\n grid-template-columns: 1.2fr 1fr 1fr 1fr 1fr 1fr;\n grid-template-areas: 'txn value amountToken amountOther account time';\n }\n`\n\nconst ClickableText = styled(Text)`\n color: ${({ theme }) => theme.text1};\n user-select: none;\n text-align: end;\n\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n\n @media screen and (max-width: 640px) {\n font-size: 14px;\n }\n`\n\nconst DataText = styled(Flex)`\n align-items: center;\n text-align: right;\n color: ${({ theme }) => theme.text1};\n\n & > * {\n font-size: 1em;\n }\n\n @media screen and (max-width: 40em) {\n font-size: 0.85rem;\n }\n`\n\nconst SortText = styled.button`\n cursor: pointer;\n font-weight: ${({ active, theme }) => (active ? 500 : 400)};\n margin-right: 0.75rem !important;\n border: none;\n background-color: transparent;\n font-size: 1rem;\n padding: 0px;\n color: ${({ active, theme }) => (active ? theme.text1 : theme.text3)};\n outline: none;\n\n @media screen and (max-width: 600px) {\n font-size: 14px;\n }\n`\n\nconst SORT_FIELD = {\n VALUE: 'amountUSD',\n AMOUNT0: 'token0Amount',\n AMOUNT1: 'token1Amount',\n TIMESTAMP: 'timestamp',\n}\n\nconst TXN_TYPE = {\n ALL: 'All',\n SWAP: 'Swaps',\n ADD: 'Adds',\n REMOVE: 'Removes',\n}\n\nconst ITEMS_PER_PAGE = 10\n\nfunction getTransactionType(event, symbol0, symbol1) {\n const formattedS0 = symbol0?.length > 8 ? symbol0.slice(0, 7) + '...' : symbol0\n const formattedS1 = symbol1?.length > 8 ? symbol1.slice(0, 7) + '...' : symbol1\n switch (event) {\n case TXN_TYPE.ADD:\n return 'Add ' + formattedS0 + ' and ' + formattedS1\n case TXN_TYPE.REMOVE:\n return 'Remove ' + formattedS0 + ' and ' + formattedS1\n case TXN_TYPE.SWAP:\n return 'Swap ' + formattedS0 + ' for ' + formattedS1\n default:\n return ''\n }\n}\n\n// @TODO rework into virtualized list\nfunction TxnList({ transactions, symbol0Override, symbol1Override, color }) {\n // page state\n const [page, setPage] = useState(1)\n const [maxPage, setMaxPage] = useState(1)\n\n // sorting\n const [sortDirection, setSortDirection] = useState(true)\n const [sortedColumn, setSortedColumn] = useState(SORT_FIELD.TIMESTAMP)\n const [filteredItems, setFilteredItems] = useState()\n const [txFilter, setTxFilter] = useState(TXN_TYPE.ALL)\n\n const [currency] = useCurrentCurrency()\n\n useEffect(() => {\n setMaxPage(1) // edit this to do modular\n setPage(1)\n }, [transactions])\n\n // parse the txns and format for UI\n useEffect(() => {\n if (transactions && transactions.mints && transactions.burns && transactions.swaps) {\n let newTxns = []\n if (transactions.mints.length > 0) {\n transactions.mints.map((mint) => {\n let newTxn = {}\n newTxn.hash = mint.transaction.id\n newTxn.timestamp = mint.transaction.timestamp\n newTxn.type = TXN_TYPE.ADD\n newTxn.token0Amount = mint.amount0\n newTxn.token1Amount = mint.amount1\n newTxn.account = mint.to\n newTxn.token0Symbol = updateNameData(mint.pair).token0.symbol\n newTxn.token1Symbol = updateNameData(mint.pair).token1.symbol\n newTxn.amountUSD = mint.amountUSD\n return newTxns.push(newTxn)\n })\n }\n if (transactions.burns.length > 0) {\n transactions.burns.map((burn) => {\n let newTxn = {}\n newTxn.hash = burn.transaction.id\n newTxn.timestamp = burn.transaction.timestamp\n newTxn.type = TXN_TYPE.REMOVE\n newTxn.token0Amount = burn.amount0\n newTxn.token1Amount = burn.amount1\n newTxn.account = burn.sender\n newTxn.token0Symbol = updateNameData(burn.pair).token0.symbol\n newTxn.token1Symbol = updateNameData(burn.pair).token1.symbol\n newTxn.amountUSD = burn.amountUSD\n return newTxns.push(newTxn)\n })\n }\n if (transactions.swaps.length > 0) {\n transactions.swaps.map((swap) => {\n const netToken0 = swap.amount0In - swap.amount0Out\n const netToken1 = swap.amount1In - swap.amount1Out\n\n let newTxn = {}\n\n if (netToken0 < 0) {\n newTxn.token0Symbol = updateNameData(swap.pair).token0.symbol\n newTxn.token1Symbol = updateNameData(swap.pair).token1.symbol\n newTxn.token0Amount = Math.abs(netToken0)\n newTxn.token1Amount = Math.abs(netToken1)\n } else if (netToken1 < 0) {\n newTxn.token0Symbol = updateNameData(swap.pair).token1.symbol\n newTxn.token1Symbol = updateNameData(swap.pair).token0.symbol\n newTxn.token0Amount = Math.abs(netToken1)\n newTxn.token1Amount = Math.abs(netToken0)\n }\n\n newTxn.hash = swap.transaction.id\n newTxn.timestamp = swap.transaction.timestamp\n newTxn.type = TXN_TYPE.SWAP\n\n newTxn.amountUSD = swap.amountUSD\n newTxn.account = swap.to\n return newTxns.push(newTxn)\n })\n }\n\n const filtered = newTxns.filter((item) => {\n if (txFilter !== TXN_TYPE.ALL) {\n return item.type === txFilter\n }\n return true\n })\n setFilteredItems(filtered)\n let extraPages = 1\n if (filtered.length % ITEMS_PER_PAGE === 0) {\n extraPages = 0\n }\n if (filtered.length === 0) {\n setMaxPage(1)\n } else {\n setMaxPage(Math.floor(filtered.length / ITEMS_PER_PAGE) + extraPages)\n }\n }\n }, [transactions, txFilter])\n\n useEffect(() => {\n setPage(1)\n }, [txFilter])\n\n const filteredList =\n filteredItems &&\n filteredItems\n .sort((a, b) => {\n return parseFloat(a[sortedColumn]) > parseFloat(b[sortedColumn])\n ? (sortDirection ? -1 : 1) * 1\n : (sortDirection ? -1 : 1) * -1\n })\n .slice(ITEMS_PER_PAGE * (page - 1), page * ITEMS_PER_PAGE)\n\n const below1080 = useMedia('(max-width: 1080px)')\n const below780 = useMedia('(max-width: 780px)')\n\n const ListItem = ({ item }) => {\n return (\n \n \n \n {getTransactionType(item.type, item.token1Symbol, item.token0Symbol)}\n \n \n \n {currency === 'BNB' ? 'Ξ ' + formattedNum(item.valueETH) : formattedNum(item.amountUSD, true)}\n \n {!below780 && (\n <>\n \n {formattedNum(item.token1Amount) + ' '}{' '}\n \n \n \n {formattedNum(item.token0Amount) + ' '}{' '}\n \n \n \n )}\n {!below1080 && (\n \n \n {item.account && item.account.slice(0, 6) + '...' + item.account.slice(38, 42)}\n \n \n )}\n {formatTime(item.timestamp)}\n \n )\n }\n\n return (\n <>\n \n {below780 ? (\n \n \n \n ) : (\n \n {\n setTxFilter(TXN_TYPE.ALL)\n }}\n active={txFilter === TXN_TYPE.ALL}\n >\n All\n \n {\n setTxFilter(TXN_TYPE.SWAP)\n }}\n active={txFilter === TXN_TYPE.SWAP}\n >\n Swaps\n \n {\n setTxFilter(TXN_TYPE.ADD)\n }}\n active={txFilter === TXN_TYPE.ADD}\n >\n Adds\n \n {\n setTxFilter(TXN_TYPE.REMOVE)\n }}\n active={txFilter === TXN_TYPE.REMOVE}\n >\n Removes\n \n \n )}\n\n \n {\n setSortedColumn(SORT_FIELD.VALUE)\n setSortDirection(sortedColumn !== SORT_FIELD.VALUE ? true : !sortDirection)\n }}\n >\n Total Value {sortedColumn === SORT_FIELD.VALUE ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n {!below780 && (\n \n {\n setSortedColumn(SORT_FIELD.AMOUNT0)\n setSortDirection(sortedColumn !== SORT_FIELD.AMOUNT0 ? true : !sortDirection)\n }}\n >\n {symbol0Override ? symbol0Override + ' Amount' : 'Token Amount'}{' '}\n {sortedColumn === SORT_FIELD.AMOUNT0 ? (sortDirection ? '↑' : '↓') : ''}\n \n \n )}\n <>\n {!below780 && (\n \n {\n setSortedColumn(SORT_FIELD.AMOUNT1)\n setSortDirection(sortedColumn !== SORT_FIELD.AMOUNT1 ? true : !sortDirection)\n }}\n >\n {symbol1Override ? symbol1Override + ' Amount' : 'Token Amount'}{' '}\n {sortedColumn === SORT_FIELD.AMOUNT1 ? (sortDirection ? '↑' : '↓') : ''}\n \n \n )}\n {!below1080 && (\n \n Account\n \n )}\n \n {\n setSortedColumn(SORT_FIELD.TIMESTAMP)\n setSortDirection(sortedColumn !== SORT_FIELD.TIMESTAMP ? true : !sortDirection)\n }}\n >\n Time {sortedColumn === SORT_FIELD.TIMESTAMP ? (!sortDirection ? '↑' : '↓') : ''}\n \n \n \n \n \n \n {!filteredList ? (\n \n ) : filteredList.length === 0 ? (\n No recent transactions found.\n ) : (\n filteredList.map((item, index) => {\n return (\n
\n \n \n
\n )\n })\n )}\n
\n \n {\n setPage(page === 1 ? page : page - 1)\n }}\n >\n \n \n {'Page ' + page + ' of ' + maxPage}\n {\n setPage(page === maxPage ? page : page + 1)\n }}\n >\n \n \n \n \n )\n}\n\nexport default TxnList\n","import React, { useState, useEffect, useRef } from 'react'\nimport { createChart } from 'lightweight-charts'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport { formattedNum } from '../../utils'\nimport styled from 'styled-components'\nimport { usePrevious } from 'react-use'\nimport { Play } from 'react-feather'\nimport { useDarkModeManager } from '../../contexts/LocalStorage'\nimport { IconWrapper } from '..'\n\ndayjs.extend(utc)\n\nexport const CHART_TYPES = {\n BAR: 'BAR',\n AREA: 'AREA',\n}\n\nconst Wrapper = styled.div`\n position: relative;\n`\n\n// constant height for charts\nconst HEIGHT = 300\n\nconst TradingViewChart = ({\n type = CHART_TYPES.BAR,\n data,\n base,\n baseChange,\n field,\n title,\n width,\n useWeekly = false,\n}) => {\n // reference for DOM element to create with chart\n const ref = useRef()\n\n // pointer to the chart object\n const [chartCreated, setChartCreated] = useState(false)\n const dataPrev = usePrevious(data)\n\n useEffect(() => {\n if (data !== dataPrev && chartCreated && type === CHART_TYPES.BAR) {\n // remove the tooltip element\n let tooltip = document.getElementById('tooltip-id' + type)\n let node = document.getElementById('test-id' + type)\n node.removeChild(tooltip)\n chartCreated.resize(0, 0)\n setChartCreated()\n }\n }, [chartCreated, data, dataPrev, type])\n\n // parese the data and format for tardingview consumption\n const formattedData = data?.map((entry) => {\n return {\n time: dayjs.unix(entry.date).utc().format('YYYY-MM-DD'),\n value: parseFloat(entry[field]),\n }\n })\n\n // adjust the scale based on the type of chart\n const topScale = type === CHART_TYPES.AREA ? 0.32 : 0.2\n\n const [darkMode] = useDarkModeManager()\n const textColor = darkMode ? 'white' : 'black'\n const previousTheme = usePrevious(darkMode)\n\n // reset the chart if them switches\n useEffect(() => {\n if (chartCreated && previousTheme !== darkMode) {\n // remove the tooltip element\n let tooltip = document.getElementById('tooltip-id' + type)\n let node = document.getElementById('test-id' + type)\n node.removeChild(tooltip)\n chartCreated.resize(0, 0)\n setChartCreated()\n }\n }, [chartCreated, darkMode, previousTheme, type])\n\n // if no chart created yet, create one with options and add to DOM manually\n useEffect(() => {\n if (!chartCreated && formattedData) {\n var chart = createChart(ref.current, {\n width: width,\n height: HEIGHT,\n layout: {\n backgroundColor: 'transparent',\n textColor: textColor,\n },\n rightPriceScale: {\n scaleMargins: {\n top: topScale,\n bottom: 0,\n },\n borderVisible: false,\n },\n timeScale: {\n borderVisible: false,\n },\n grid: {\n horzLines: {\n color: 'rgba(79, 216, 222, 0.5)',\n visible: false,\n },\n vertLines: {\n color: 'rgba(79, 216, 222, 0.5)',\n visible: false,\n },\n },\n crosshair: {\n horzLine: {\n visible: false,\n labelVisible: false,\n },\n vertLine: {\n visible: true,\n style: 0,\n width: 2,\n color: 'rgba(32, 38, 46, 0.1)',\n labelVisible: false,\n },\n },\n localization: {\n priceFormatter: (val) => formattedNum(val, true),\n },\n })\n\n var series =\n type === CHART_TYPES.BAR\n ? chart.addHistogramSeries({\n color: '#e6433b',\n priceFormat: {\n type: 'volume',\n },\n scaleMargins: {\n top: 0.32,\n bottom: 0,\n },\n lineColor: '#e6433b',\n lineWidth: 3,\n })\n : chart.addAreaSeries({\n topColor: '#e6433b',\n bottomColor: 'rgba(79, 216, 222, 0)',\n lineColor: '#e6433b',\n lineWidth: 3,\n })\n\n series.setData(formattedData)\n var toolTip = document.createElement('div')\n toolTip.setAttribute('id', 'tooltip-id' + type)\n toolTip.className = darkMode ? 'three-line-legend-dark' : 'three-line-legend'\n ref.current.appendChild(toolTip)\n toolTip.style.display = 'block'\n toolTip.style.fontWeight = '500'\n toolTip.style.left = -4 + 'px'\n toolTip.style.top = '-' + 8 + 'px'\n toolTip.style.backgroundColor = 'transparent'\n\n // format numbers\n let percentChange = baseChange?.toFixed(2)\n // let formattedPercentChange = (percentChange > 0 ? '+' : '') + percentChange + '%'\n let color = percentChange >= 0 ? 'green' : 'red'\n\n // get the title of the chart\n function setLastBarText() {\n toolTip.innerHTML =\n `
${title} ${\n type === CHART_TYPES.BAR && !useWeekly ? '(24hr)' : ''\n }
` +\n `
` +\n formattedNum(base ?? 0, true) +\n `${''}` +\n '
'\n }\n setLastBarText()\n\n // update the title when hovering on the chart\n chart.subscribeCrosshairMove(function (param) {\n if (\n param === undefined ||\n param.time === undefined ||\n param.point.x < 0 ||\n param.point.x > width ||\n param.point.y < 0 ||\n param.point.y > HEIGHT\n ) {\n setLastBarText()\n } else {\n let dateStr = useWeekly\n ? dayjs(param.time.year + '-' + param.time.month + '-' + param.time.day)\n .startOf('week')\n .format('MMMM D, YYYY') +\n '-' +\n dayjs(param.time.year + '-' + param.time.month + '-' + param.time.day)\n .endOf('week')\n .format('MMMM D, YYYY')\n : dayjs(param.time.year + '-' + param.time.month + '-' + param.time.day).format('MMMM D, YYYY')\n var price = param.seriesPrices.get(series)\n\n toolTip.innerHTML =\n `
${title}
` +\n `
` +\n formattedNum(price, true) +\n '
' +\n '
' +\n dateStr +\n '
'\n }\n })\n\n chart.timeScale().fitContent()\n\n setChartCreated(chart)\n }\n }, [\n base,\n baseChange,\n chartCreated,\n darkMode,\n data,\n formattedData,\n textColor,\n title,\n topScale,\n type,\n useWeekly,\n width,\n ])\n\n // responsiveness\n useEffect(() => {\n if (width) {\n chartCreated && chartCreated.resize(width, HEIGHT)\n chartCreated && chartCreated.timeScale().scrollToPosition(0)\n }\n }, [chartCreated, width])\n\n return (\n \n
\n \n {\n chartCreated && chartCreated.timeScale().fitContent()\n }}\n />\n \n \n )\n}\n\nexport default TradingViewChart\n","import React from 'react'\nimport { Button as RebassButton } from 'rebass/styled-components'\nimport styled from 'styled-components'\nimport { Plus, ChevronDown, ChevronUp } from 'react-feather'\nimport { darken, transparentize } from 'polished'\nimport { RowBetween } from '../Row'\nimport { StyledIcon } from '..'\n\nconst Base = styled(RebassButton)`\n padding: 8px 12px;\n font-size: 0.825rem;\n font-weight: 600;\n border-radius: 12px;\n cursor: pointer;\n outline: none;\n border: 1px solid transparent;\n outline: none;\n border-bottom-right-radius: ${({ open }) => open && '0'};\n border-bottom-left-radius: ${({ open }) => open && '0'};\n`\n\nconst BaseCustom = styled(RebassButton)`\n padding: 16px 12px;\n font-size: 0.825rem;\n font-weight: 400;\n border-radius: 12px;\n cursor: pointer;\n outline: none;\n`\n\nconst Dull = styled(Base)`\n background-color: rgba(255, 255, 255, 0.15);\n border: 1px solid rgba(255, 255, 255, 0.15);\n color: black;\n height: 100%;\n font-weight: 400;\n &:hover,\n :focus {\n background-color: rgba(255, 255, 255, 0.25);\n border-color: rgba(255, 255, 255, 0.25);\n }\n &:focus {\n box-shadow: 0 0 0 1pt rgba(255, 255, 255, 0.25);\n }\n &:active {\n background-color: rgba(255, 255, 255, 0.25);\n border-color: rgba(255, 255, 255, 0.25);\n }\n`\n\nexport default function ButtonStyled({ children, ...rest }) {\n return {children}\n}\n\nconst ContentWrapper = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n`\n\nexport const ButtonLight = styled(Base)`\n background-color: ${({ color, theme }) => (color ? transparentize(0.9, color) : transparentize(0.9, theme.primary1))};\n color: ${({ color, theme }) => (color ? darken(0.1, color) : theme.primary1)};\n\n min-width: fit-content;\n border-radius: 12px;\n white-space: nowrap;\n\n a {\n color: ${({ color, theme }) => (color ? darken(0.1, color) : theme.primary1)};\n }\n\n :hover {\n background-color: ${({ color, theme }) =>\n color ? transparentize(0.8, color) : transparentize(0.8, theme.primary1)};\n }\n`\n\nexport function ButtonDropdown({ disabled = false, children, open, ...rest }) {\n return (\n \n \n
{children}
\n {open ? (\n \n \n \n ) : (\n \n \n \n )}\n
\n
\n )\n}\n\nexport const ButtonDark = styled(Base)`\n background-color: ${({ color, theme }) => (color ? color : theme.primary1)};\n color: white;\n width: fit-content;\n border-radius: 12px;\n white-space: nowrap;\n\n :hover {\n background-color: ${({ color, theme }) => (color ? darken(0.1, color) : darken(0.1, theme.primary1))};\n }\n`\n\nexport const ButtonFaded = styled(Base)`\n background-color: ${({ theme }) => theme.bg2};\n color: (255, 255, 255, 0.5);\n white-space: nowrap;\n\n :hover {\n opacity: 0.5;\n }\n`\n\nexport function ButtonPlusDull({ disabled, children, ...rest }) {\n return (\n \n \n \n
{children}
\n
\n
\n )\n}\n\nexport function ButtonCustom({ children, bgColor, color, ...rest }) {\n return (\n \n {children}\n \n )\n}\n\nexport const OptionButton = styled.div`\n font-weight: 500;\n width: fit-content;\n white-space: nowrap;\n padding: 6px;\n border-radius: 6px;\n border: 1px solid ${({ theme }) => theme.bg4};\n background-color: ${({ active, theme }) => active && theme.bg3};\n color: ${({ theme }) => theme.text1};\n\n :hover {\n cursor: ${({ disabled }) => !disabled && 'pointer'};\n }\n`\n","import React, { useState, useMemo, useEffect, useRef } from 'react'\nimport { ResponsiveContainer } from 'recharts'\nimport { timeframeOptions } from '../../constants'\nimport { useGlobalChartData, useGlobalData } from '../../contexts/GlobalData'\nimport { useMedia } from 'react-use'\nimport DropdownSelect from '../DropdownSelect'\nimport TradingViewChart, { CHART_TYPES } from '../TradingviewChart'\nimport { RowFixed } from '../Row'\nimport { OptionButton } from '../ButtonStyled'\nimport { getTimeframe } from '../../utils'\nimport { TYPE } from '../../Theme'\n\nconst CHART_VIEW = {\n VOLUME: 'Volume',\n LIQUIDITY: 'Liquidity',\n}\n\nconst VOLUME_WINDOW = {\n WEEKLY: 'WEEKLY',\n DAYS: 'DAYS',\n}\nconst GlobalChart = ({ display }) => {\n // chart options\n const [chartView, setChartView] = useState(display === 'volume' ? CHART_VIEW.VOLUME : CHART_VIEW.LIQUIDITY)\n\n // time window and window size for chart\n const timeWindow = timeframeOptions.ALL_TIME\n const [volumeWindow, setVolumeWindow] = useState(VOLUME_WINDOW.DAYS)\n\n // global historical data\n const [dailyData, weeklyData] = useGlobalChartData()\n const { totalLiquidityUSD, oneDayVolumeUSD, volumeChangeUSD, liquidityChangeUSD, oneWeekVolume, weeklyVolumeChange } =\n useGlobalData()\n\n // based on window, get starttim\n let utcStartTime = getTimeframe(timeWindow)\n\n const chartDataFiltered = useMemo(() => {\n let currentData = volumeWindow === VOLUME_WINDOW.DAYS ? dailyData : weeklyData\n return (\n currentData &&\n Object.keys(currentData)\n ?.map((key) => {\n let item = currentData[key]\n if (item.date > utcStartTime) {\n return item\n } else {\n return null\n }\n })\n .filter((item) => {\n return !!item\n })\n )\n }, [dailyData, utcStartTime, volumeWindow, weeklyData])\n const below800 = useMedia('(max-width: 800px)')\n\n // update the width on a window resize\n const ref = useRef()\n const isClient = typeof window === 'object'\n const [width, setWidth] = useState(ref?.current?.container?.clientWidth)\n useEffect(() => {\n if (!isClient) {\n return false\n }\n function handleResize() {\n setWidth(ref?.current?.container?.clientWidth ?? width)\n }\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [isClient, width]) // Empty array ensures that effect is only run on mount and unmount\n\n return chartDataFiltered ? (\n <>\n {below800 && (\n \n )}\n\n {chartDataFiltered && chartView === CHART_VIEW.LIQUIDITY && (\n \n \n \n )}\n {chartDataFiltered && chartView === CHART_VIEW.VOLUME && (\n \n \n \n )}\n {display === 'volume' && (\n \n setVolumeWindow(VOLUME_WINDOW.DAYS)}\n >\n D\n \n setVolumeWindow(VOLUME_WINDOW.WEEKLY)}\n >\n W\n \n \n )}\n \n ) : (\n ''\n )\n}\n\nexport default GlobalChart\n","import React, { useState, useEffect, useMemo, useRef } from 'react'\nimport styled from 'styled-components'\n\nimport Row, { RowFixed } from '../Row'\nimport TokenLogo from '../TokenLogo'\nimport { Search as SearchIcon, X } from 'react-feather'\nimport { BasicLink } from '../Link'\n\nimport { useAllTokenData, useTokenData } from '../../contexts/TokenData'\nimport { useAllPairData, usePairData } from '../../contexts/PairData'\nimport DoubleTokenLogo from '../DoubleLogo'\nimport { useMedia } from 'react-use'\nimport { useAllPairsInUniswap, useAllTokensInUniswap } from '../../contexts/GlobalData'\nimport { OVERVIEW_TOKEN_BLACKLIST, PAIR_BLACKLIST } from '../../constants'\n\nimport { transparentize } from 'polished'\nimport { client } from '../../apollo/client'\nimport { PAIR_SEARCH, TOKEN_SEARCH } from '../../apollo/queries'\nimport FormattedName from '../FormattedName'\nimport { TYPE } from '../../Theme'\nimport { updateNameData } from '../../utils/data'\n\nconst Container = styled.div`\n height: 48px;\n z-index: 30;\n position: relative;\n\n @media screen and (max-width: 600px) {\n width: 100%;\n }\n`\n\nconst Wrapper = styled.div`\n display: flex;\n position: relative;\n flex-direction: row;\n align-items: center;\n justify-content: flex-end;\n padding: 12px 16px;\n border-radius: 12px;\n background: ${({ theme, small, open }) =>\n small ? (open ? transparentize(0.4, theme.bg1) : 'none') : transparentize(0.4, theme.bg6)};\n border-bottom-right-radius: ${({ open }) => (open ? '0px' : '12px')};\n border-bottom-left-radius: ${({ open }) => (open ? '0px' : '12px')};\n z-index: 9999;\n width: 100%;\n min-width: 300px;\n box-sizing: border-box;\n box-shadow: ${({ open, small }) =>\n !open && !small\n ? '0px 24px 32px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 0px 1px rgba(0, 0, 0, 0.04) '\n : 'none'};\n @media screen and (max-width: 500px) {\n background: ${({ theme }) => transparentize(0.4, theme.bg1)};\n box-shadow: ${({ open }) =>\n !open\n ? '0px 24px 32px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 0px 1px rgba(0, 0, 0, 0.04) '\n : 'none'};\n }\n`\nconst Input = styled.input`\n position: relative;\n display: flex;\n align-items: center;\n white-space: nowrap;\n background: none;\n border: none;\n outline: none;\n width: 100%;\n color: ${({ theme }) => theme.text1};\n font-size: ${({ large }) => (large ? '20px' : '14px')};\n\n ::placeholder {\n color: ${({ theme }) => theme.text3};\n font-size: 16px;\n }\n\n @media screen and (max-width: 640px) {\n ::placeholder {\n font-size: 1rem;\n }\n }\n`\n\nconst SearchIconLarge = styled(SearchIcon)`\n height: 20px;\n width: 20px;\n margin-right: 0.5rem;\n position: absolute;\n right: 10px;\n pointer-events: none;\n color: ${({ theme }) => theme.text3};\n`\n\nconst CloseIcon = styled(X)`\n height: 20px;\n width: 20px;\n margin-right: 0.5rem;\n position: absolute;\n right: 10px;\n color: ${({ theme }) => theme.text3};\n :hover {\n cursor: pointer;\n }\n`\n\nconst Menu = styled.div`\n display: flex;\n flex-direction: column;\n z-index: 9999;\n width: 100%;\n top: 50px;\n max-height: 540px;\n overflow: auto;\n left: 0;\n padding-bottom: 20px;\n background: ${({ theme }) => theme.bg6};\n border-bottom-right-radius: 12px;\n border-bottom-left-radius: 12px;\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.04), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n 0px 24px 32px rgba(0, 0, 0, 0.04);\n display: ${({ hide }) => hide && 'none'};\n`\n\nconst MenuItem = styled(Row)`\n padding: 1rem;\n font-size: 0.85rem;\n & > * {\n margin-right: 6px;\n }\n :hover {\n cursor: pointer;\n background-color: ${({ theme }) => theme.bg2};\n }\n`\n\nconst Heading = styled(Row)`\n padding: 1rem;\n display: ${({ hide = false }) => hide && 'none'};\n`\n\nconst Gray = styled.span`\n color: #888d9b;\n`\n\nconst Blue = styled.span`\n color: #2172e5;\n :hover {\n cursor: pointer;\n }\n`\n\nexport const Search = ({ small = false }) => {\n let allTokens = useAllTokensInUniswap()\n const allTokenData = useAllTokenData()\n\n let allPairs = useAllPairsInUniswap()\n const allPairData = useAllPairData()\n\n const [showMenu, toggleMenu] = useState(false)\n const [value, setValue] = useState('')\n const [, toggleShadow] = useState(false)\n const [, toggleBottomShadow] = useState(false)\n\n // fetch new data on tokens and pairs if needed\n useTokenData(value)\n usePairData(value)\n\n const below700 = useMedia('(max-width: 700px)')\n const below470 = useMedia('(max-width: 470px)')\n const below410 = useMedia('(max-width: 410px)')\n\n useEffect(() => {\n if (value !== '') {\n toggleMenu(true)\n } else {\n toggleMenu(false)\n }\n }, [value])\n\n const [searchedTokens, setSearchedTokens] = useState([])\n const [searchedPairs, setSearchedPairs] = useState([])\n\n useEffect(() => {\n async function fetchData() {\n try {\n if (value?.length > 0) {\n let tokens = await client.query({\n query: TOKEN_SEARCH,\n variables: {\n value: value ? value.toUpperCase() : '',\n id: value,\n },\n })\n\n let pairs = await client.query({\n query: PAIR_SEARCH,\n variables: {\n tokens: tokens.data.asSymbol?.map((t) => t.id),\n id: value,\n },\n })\n\n setSearchedPairs(\n updateNameData(pairs.data.as0)\n .concat(updateNameData(pairs.data.as1))\n .concat(updateNameData(pairs.data.asAddress))\n )\n const foundTokens = tokens.data.asSymbol.concat(tokens.data.asAddress).concat(tokens.data.asName)\n setSearchedTokens(foundTokens)\n }\n } catch (e) {\n console.log(e)\n }\n }\n fetchData()\n }, [value])\n\n function escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') // $& means the whole matched string\n }\n\n // add the searched tokens to the list if not found yet\n allTokens = allTokens.concat(\n searchedTokens.filter((searchedToken) => {\n let included = false\n updateNameData()\n allTokens.map((token) => {\n if (token.id === searchedToken.id) {\n included = true\n }\n return true\n })\n return !included\n })\n )\n\n let uniqueTokens = []\n let found = {}\n allTokens &&\n allTokens.map((token) => {\n if (!found[token.id]) {\n found[token.id] = true\n uniqueTokens.push(token)\n }\n return true\n })\n\n allPairs = allPairs.concat(\n searchedPairs.filter((searchedPair) => {\n let included = false\n allPairs.map((pair) => {\n if (pair.id === searchedPair.id) {\n included = true\n }\n return true\n })\n return !included\n })\n )\n\n let uniquePairs = []\n let pairsFound = {}\n allPairs &&\n allPairs.map((pair) => {\n if (!pairsFound[pair.id]) {\n pairsFound[pair.id] = true\n uniquePairs.push(pair)\n }\n return true\n })\n\n const filteredTokenList = useMemo(() => {\n return uniqueTokens\n ? uniqueTokens\n .sort((a, b) => {\n if (OVERVIEW_TOKEN_BLACKLIST.includes(a.id)) {\n return 1\n }\n if (OVERVIEW_TOKEN_BLACKLIST.includes(b.id)) {\n return -1\n }\n const tokenA = allTokenData[a.id]\n const tokenB = allTokenData[b.id]\n if (tokenA?.oneDayVolumeUSD && tokenB?.oneDayVolumeUSD) {\n return tokenA.oneDayVolumeUSD > tokenB.oneDayVolumeUSD ? -1 : 1\n }\n if (tokenA?.oneDayVolumeUSD && !tokenB?.oneDayVolumeUSD) {\n return -1\n }\n if (!tokenA?.oneDayVolumeUSD && tokenB?.oneDayVolumeUSD) {\n return tokenA?.totalLiquidity > tokenB?.totalLiquidity ? -1 : 1\n }\n return 1\n })\n .filter((token) => {\n if (OVERVIEW_TOKEN_BLACKLIST.includes(token.id)) {\n return false\n }\n const regexMatches = Object.keys(token).map((tokenEntryKey) => {\n const isAddress = value.slice(0, 2) === '0x'\n if (tokenEntryKey === 'id' && isAddress) {\n return token[tokenEntryKey].match(new RegExp(escapeRegExp(value), 'i'))\n }\n if (tokenEntryKey === 'symbol' && !isAddress) {\n return token[tokenEntryKey].match(new RegExp(escapeRegExp(value), 'i'))\n }\n if (tokenEntryKey === 'name' && !isAddress) {\n return token[tokenEntryKey].match(new RegExp(escapeRegExp(value), 'i'))\n }\n return false\n })\n return regexMatches.some((m) => m)\n })\n : []\n }, [allTokenData, uniqueTokens, value])\n\n const filteredPairList = useMemo(() => {\n return uniquePairs\n ? uniquePairs\n .sort((a, b) => {\n const pairA = allPairData[a.id]\n const pairB = allPairData[b.id]\n if (pairA?.trackedReserveBNB && pairB?.trackedReserveBNB) {\n return parseFloat(pairA.trackedReserveBNB) > parseFloat(pairB.trackedReserveBNB) ? -1 : 1\n }\n if (pairA?.trackedReserveBNB && !pairB?.trackedReserveBNB) {\n return -1\n }\n if (!pairA?.trackedReserveBNB && pairB?.trackedReserveBNB) {\n return 1\n }\n return 0\n })\n .filter((pair) => {\n if (PAIR_BLACKLIST.includes(pair.id)) {\n return false\n }\n if (value && value.includes(' ')) {\n const pairA = value.split(' ')[0]?.toUpperCase()\n const pairB = value.split(' ')[1]?.toUpperCase()\n return (\n (pair.token0.symbol.includes(pairA) || pair.token0.symbol.includes(pairB)) &&\n (pair.token1.symbol.includes(pairA) || pair.token1.symbol.includes(pairB))\n )\n }\n if (value && value.includes('-')) {\n const pairA = value.split('-')[0]?.toUpperCase()\n const pairB = value.split('-')[1]?.toUpperCase()\n return (\n (pair.token0.symbol.includes(pairA) || pair.token0.symbol.includes(pairB)) &&\n (pair.token1.symbol.includes(pairA) || pair.token1.symbol.includes(pairB))\n )\n }\n const regexMatches = Object.keys(pair).map((field) => {\n const isAddress = value.slice(0, 2) === '0x'\n if (field === 'id' && isAddress) {\n return pair[field].match(new RegExp(escapeRegExp(value), 'i'))\n }\n if (field === 'token0') {\n return (\n pair[field].symbol.match(new RegExp(escapeRegExp(value), 'i')) ||\n pair[field].name.match(new RegExp(escapeRegExp(value), 'i'))\n )\n }\n if (field === 'token1') {\n return (\n pair[field].symbol.match(new RegExp(escapeRegExp(value), 'i')) ||\n pair[field].name.match(new RegExp(escapeRegExp(value), 'i'))\n )\n }\n return false\n })\n return regexMatches.some((m) => m)\n })\n : []\n }, [allPairData, uniquePairs, value])\n\n useEffect(() => {\n if (Object.keys(filteredTokenList).length > 2) {\n toggleShadow(true)\n } else {\n toggleShadow(false)\n }\n }, [filteredTokenList])\n\n useEffect(() => {\n if (Object.keys(filteredPairList).length > 2) {\n toggleBottomShadow(true)\n } else {\n toggleBottomShadow(false)\n }\n }, [filteredPairList])\n\n const [tokensShown, setTokensShown] = useState(3)\n const [pairsShown, setPairsShown] = useState(3)\n\n function onDismiss() {\n setPairsShown(3)\n setTokensShown(3)\n toggleMenu(false)\n setValue('')\n }\n\n // refs to detect clicks outside modal\n const wrapperRef = useRef()\n const menuRef = useRef()\n\n const handleClick = (e) => {\n if (\n !(menuRef.current && menuRef.current.contains(e.target)) &&\n !(wrapperRef.current && wrapperRef.current.contains(e.target))\n ) {\n setPairsShown(3)\n setTokensShown(3)\n toggleMenu(false)\n }\n }\n\n useEffect(() => {\n document.addEventListener('click', handleClick)\n return () => {\n document.removeEventListener('click', handleClick)\n }\n })\n\n return (\n \n \n {\n setValue(e.target.value)\n }}\n onFocus={() => {\n if (!showMenu) {\n toggleMenu(true)\n }\n }}\n />\n {!showMenu ? : toggleMenu(false)} />}\n \n \n \n Pairs\n \n
\n {filteredPairList && Object.keys(filteredPairList).length === 0 && (\n \n No results\n \n )}\n {filteredPairList &&\n filteredPairList.slice(0, pairsShown).map((pair) => {\n //format incorrect names\n updateNameData(pair)\n return (\n \n \n \n \n {pair.token0.symbol + '-' + pair.token1.symbol} Pair\n \n \n \n )\n })}\n 3 && Object.keys(filteredPairList).length >= pairsShown)}\n >\n {\n setPairsShown(pairsShown + 5)\n }}\n >\n See more...\n \n \n
\n \n Tokens\n \n
\n {Object.keys(filteredTokenList).length === 0 && (\n \n No results\n \n )}\n {filteredTokenList.slice(0, tokensShown).map((token) => {\n // update displayed names\n updateNameData({ token0: token })\n return (\n \n \n \n \n \n ()\n \n \n \n )\n })}\n\n 3 && Object.keys(filteredTokenList).length >= tokensShown)}\n >\n {\n setTokensShown(tokensShown + 5)\n }}\n >\n See more...\n \n \n
\n
\n
\n )\n}\n\nexport default Search\n","import React, { useState } from 'react'\nimport styled from 'styled-components'\nimport { RowFixed, RowBetween } from '../Row'\nimport { useMedia } from 'react-use'\nimport { useGlobalData, useBnbPrice } from '../../contexts/GlobalData'\nimport { formattedNum, localNumber } from '../../utils'\n\nimport { TYPE } from '../../Theme'\n\nconst Header = styled.div`\n width: 100%;\n position: sticky;\n top: 0;\n`\n\nconst Medium = styled.span`\n font-weight: 500;\n`\n\nexport default function GlobalStats() {\n const below1295 = useMedia('(max-width: 1295px)')\n const below1180 = useMedia('(max-width: 1180px)')\n const below1024 = useMedia('(max-width: 1024px)')\n const below400 = useMedia('(max-width: 400px)')\n const below816 = useMedia('(max-width: 816px)')\n\n const [, setShowPriceCard] = useState(false)\n\n const { oneDayVolumeUSD, oneDayTxns, pairCount } = useGlobalData()\n const [bnbPrice] = useBnbPrice()\n const formattedEthPrice = bnbPrice ? formattedNum(bnbPrice, true) : '-'\n const oneDayFees = oneDayVolumeUSD ? formattedNum(oneDayVolumeUSD * 0.002, true) : ''\n\n return (\n
\n \n \n {!below400 && (\n {\n setShowPriceCard(true)\n }}\n onMouseLeave={() => {\n setShowPriceCard(false)\n }}\n style={{ position: 'relative' }}\n >\n BNB Price: {formattedEthPrice}\n \n )}\n\n {!below1180 && (\n \n Transactions (24H): {localNumber(oneDayTxns)}\n \n )}\n {!below1024 && (\n \n Pairs: {localNumber(pairCount)}\n \n )}\n {!below1295 && (\n \n Fees (24H): {oneDayFees} \n \n )}\n \n \n
\n )\n}\n","import { Box as RebassBox } from 'rebass'\nimport styled, { css } from 'styled-components'\n\nconst panelPseudo = css`\n :after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 10px;\n }\n\n @media only screen and (min-width: 40em) {\n :after {\n content: unset;\n }\n }\n`\n\nconst Panel = styled(RebassBox)`\n position: relative;\n background-color: ${({ theme }) => theme.advancedBG};\n padding: 1.25rem;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid ${({ theme }) => theme.bg3};\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.05); /* box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.01), 0px 16px 24px rgba(0, 0, 0, 0.01), 0px 24px 32px rgba(0, 0, 0, 0.01); */\n :hover {\n cursor: ${({ hover }) => hover && 'pointer'};\n border: ${({ hover, theme }) => hover && '1px solid' + theme.bg5};\n }\n\n ${(props) => props.background && `background-color: ${props.theme.advancedBG};`}\n\n ${(props) => (props.area ? `grid-area: ${props.area};` : null)}\n\n ${(props) =>\n props.grouped &&\n css`\n @media only screen and (min-width: 40em) {\n &:first-of-type {\n border-radius: 20px 20px 0 0;\n }\n &:last-of-type {\n border-radius: 0 0 20px 20px;\n }\n }\n `}\n\n ${(props) =>\n props.rounded &&\n css`\n border-radius: 8px;\n @media only screen and (min-width: 40em) {\n border-radius: 10px;\n }\n `};\n\n ${(props) => !props.last && panelPseudo}\n`\n\nexport default Panel\n\n// const Panel = styled.div`\n// width: 100%;\n// height: 100%;\n// display: flex;\n// flex-direction: column;\n// justify-content: flex-start;\n// border-radius: 12px;\n// background-color: ${({ theme }) => theme.advancedBG};\n// padding: 1.25rem;\n// box-sizing: border-box;\n// box-shadow: 0 1.1px 2.8px -9px rgba(0, 0, 0, 0.008), 0 2.7px 6.7px -9px rgba(0, 0, 0, 0.012),\n// 0 5px 12.6px -9px rgba(0, 0, 0, 0.015), 0 8.9px 22.6px -9px rgba(0, 0, 0, 0.018),\n// 0 16.7px 42.2px -9px rgba(0, 0, 0, 0.022), 0 40px 101px -9px rgba(0, 0, 0, 0.03);\n// `\n","import React, { useEffect } from 'react'\nimport { withRouter } from 'react-router-dom'\nimport { Box } from 'rebass'\nimport styled from 'styled-components'\n\nimport { AutoRow, RowBetween } from '../components/Row'\nimport { AutoColumn } from '../components/Column'\nimport PairList from '../components/PairList'\nimport TopTokenList from '../components/TokenList'\nimport TxnList from '../components/TxnList'\nimport GlobalChart from '../components/GlobalChart'\nimport Search from '../components/Search'\nimport GlobalStats from '../components/GlobalStats'\n\nimport { useGlobalData, useGlobalTransactions } from '../contexts/GlobalData'\nimport { useAllPairData } from '../contexts/PairData'\nimport { useMedia } from 'react-use'\nimport Panel from '../components/Panel'\nimport { useAllTokenData } from '../contexts/TokenData'\nimport { formattedNum, formattedPercent } from '../utils'\nimport { TYPE, ThemedBackground } from '../Theme'\nimport { transparentize } from 'polished'\nimport { CustomLink } from '../components/Link'\n\nimport { PageWrapper, ContentWrapper } from '../components'\n\nconst ListOptions = styled(AutoRow)`\n height: 40px;\n width: 100%;\n font-size: 1.25rem;\n font-weight: 600;\n\n @media screen and (max-width: 640px) {\n font-size: 1rem;\n }\n`\n\nconst GridRow = styled.div`\n display: grid;\n width: 100%;\n grid-template-columns: 1fr 1fr;\n column-gap: 6px;\n align-items: start;\n justify-content: space-between;\n`\n\nfunction GlobalPage() {\n // get data for lists and totals\n const allPairs = useAllPairData()\n const allTokens = useAllTokenData()\n const transactions = useGlobalTransactions()\n const { totalLiquidityUSD, oneDayVolumeUSD, volumeChangeUSD, liquidityChangeUSD } = useGlobalData()\n\n // breakpoints\n const below800 = useMedia('(max-width: 800px)')\n\n // scrolling refs\n\n useEffect(() => {\n document.querySelector('body').scrollTo({\n behavior: 'smooth',\n top: 0,\n })\n }, [])\n\n return (\n \n \n \n
\n \n {below800 ? 'Analytics' : 'Neverswap Analytics'}\n \n \n \n {below800 && ( // mobile card\n \n \n \n \n \n \n Volume (24hrs)\n
\n \n \n \n {formattedNum(oneDayVolumeUSD, true)}\n \n {formattedPercent(volumeChangeUSD)}\n \n \n \n \n Total Liquidity\n
\n \n \n \n {formattedNum(totalLiquidityUSD, true)}\n \n {formattedPercent(liquidityChangeUSD)}\n \n \n \n \n \n \n )}\n {!below800 && (\n \n \n \n \n \n \n \n \n )}\n {below800 && (\n \n \n \n \n \n )}\n \n \n Top Tokens\n See All\n \n \n \n \n \n \n \n Top Pairs\n See All\n \n \n \n \n \n\n \n \n Transactions\n \n \n \n \n \n
\n \n \n )\n}\n\nexport default withRouter(GlobalPage)\n","import React, { useState, useEffect, useRef } from 'react'\nimport { createChart, CrosshairMode } from 'lightweight-charts'\nimport dayjs from 'dayjs'\nimport { formattedNum } from '../../utils'\nimport { usePrevious } from 'react-use'\nimport styled from 'styled-components'\nimport { Play } from 'react-feather'\nimport { useDarkModeManager } from '../../contexts/LocalStorage'\n\nconst IconWrapper = styled.div`\n position: absolute;\n right: 10px;\n color: ${({ theme }) => theme.text1}\n border-radius: 3px;\n height: 16px;\n width: 16px;\n padding: 0px;\n bottom: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n`\n\nconst CandleStickChart = ({\n data,\n width,\n height = 300,\n base,\n margin = true,\n valueFormatter = (val) => formattedNum(val, true),\n}) => {\n // reference for DOM element to create with chart\n const ref = useRef()\n\n const formattedData = data?.map((entry) => {\n return {\n time: parseFloat(entry.timestamp),\n open: parseFloat(entry.open),\n low: parseFloat(entry.open),\n close: parseFloat(entry.close),\n high: parseFloat(entry.close),\n }\n })\n\n if (formattedData && formattedData.length > 0) {\n formattedData.push({\n time: dayjs.utc().unix(),\n open: parseFloat(formattedData[formattedData.length - 1].close),\n close: parseFloat(base),\n low: Math.min(parseFloat(base), parseFloat(formattedData[formattedData.length - 1].close)),\n high: Math.max(parseFloat(base), parseFloat(formattedData[formattedData.length - 1].close)),\n })\n }\n\n // pointer to the chart object\n const [chartCreated, setChartCreated] = useState(false)\n const dataPrev = usePrevious(data)\n\n const [darkMode] = useDarkModeManager()\n const textColor = darkMode ? 'white' : 'black'\n const previousTheme = usePrevious(darkMode)\n\n // reset the chart if theme switches\n useEffect(() => {\n if (chartCreated && previousTheme !== darkMode) {\n // remove the tooltip element\n let tooltip = document.getElementById('tooltip-id')\n let node = document.getElementById('test-id')\n node.removeChild(tooltip)\n chartCreated.resize(0, 0)\n setChartCreated()\n }\n }, [chartCreated, darkMode, previousTheme])\n\n useEffect(() => {\n if (data !== dataPrev && chartCreated) {\n // remove the tooltip element\n let tooltip = document.getElementById('tooltip-id')\n let node = document.getElementById('test-id')\n node.removeChild(tooltip)\n chartCreated.resize(0, 0)\n setChartCreated()\n }\n }, [chartCreated, data, dataPrev])\n\n // if no chart created yet, create one with options and add to DOM manually\n useEffect(() => {\n if (!chartCreated) {\n const chart = createChart(ref.current, {\n width: width,\n height: height,\n layout: {\n backgroundColor: 'transparent',\n textColor: textColor,\n },\n grid: {\n vertLines: {\n color: 'rgba(197, 203, 206, 0.5)',\n },\n horzLines: {\n color: 'rgba(197, 203, 206, 0.5)',\n },\n },\n crosshair: {\n mode: CrosshairMode.Normal,\n },\n rightPriceScale: {\n borderColor: 'rgba(197, 203, 206, 0.8)',\n visible: true,\n },\n timeScale: {\n borderColor: 'rgba(197, 203, 206, 0.8)',\n },\n localization: {\n priceFormatter: (val) => formattedNum(val),\n },\n })\n\n var candleSeries = chart.addCandlestickSeries({\n upColor: 'green',\n downColor: 'red',\n borderDownColor: 'red',\n borderUpColor: 'green',\n wickDownColor: 'red',\n wickUpColor: 'green',\n })\n\n candleSeries.setData(formattedData)\n\n var toolTip = document.createElement('div')\n toolTip.setAttribute('id', 'tooltip-id')\n toolTip.className = 'three-line-legend'\n ref.current.appendChild(toolTip)\n toolTip.style.display = 'block'\n toolTip.style.left = (margin ? 116 : 10) + 'px'\n toolTip.style.top = 50 + 'px'\n toolTip.style.backgroundColor = 'transparent'\n\n // get the title of the chart\n function setLastBarText() {\n toolTip.innerHTML = base\n ? `
` + valueFormatter(base) + '
'\n : ''\n }\n setLastBarText()\n\n // update the title when hovering on the chart\n chart.subscribeCrosshairMove(function (param) {\n if (\n param === undefined ||\n param.time === undefined ||\n param.point.x < 0 ||\n param.point.x > width ||\n param.point.y < 0 ||\n param.point.y > height\n ) {\n setLastBarText()\n } else {\n var price = param.seriesPrices.get(candleSeries).close\n const time = dayjs.unix(param.time).format('MM/DD h:mm A')\n toolTip.innerHTML =\n `
` +\n valueFormatter(price) +\n `` +\n time +\n ' UTC' +\n '' +\n '
'\n }\n })\n\n chart.timeScale().fitContent()\n\n setChartCreated(chart)\n }\n }, [chartCreated, formattedData, width, height, valueFormatter, base, margin, textColor])\n\n // responsiveness\n useEffect(() => {\n if (width) {\n chartCreated && chartCreated.resize(width, height)\n chartCreated && chartCreated.timeScale().scrollToPosition(0)\n }\n }, [chartCreated, height, width])\n\n return (\n
\n
\n \n {\n chartCreated && chartCreated.timeScale().fitContent()\n }}\n />\n \n
\n )\n}\n\nexport default CandleStickChart\n","import React, { useState, useRef, useEffect } from 'react'\nimport styled from 'styled-components'\nimport { Area, XAxis, YAxis, ResponsiveContainer, Tooltip, AreaChart, BarChart, Bar } from 'recharts'\nimport { AutoRow, RowBetween, RowFixed } from '../Row'\n\nimport { toK, toNiceDate, toNiceDateYear, formattedNum, getTimeframe } from '../../utils'\nimport { OptionButton } from '../ButtonStyled'\nimport { darken } from 'polished'\nimport { useMedia, usePrevious } from 'react-use'\nimport { timeframeOptions } from '../../constants'\nimport { useTokenChartData, useTokenPriceData } from '../../contexts/TokenData'\nimport DropdownSelect from '../DropdownSelect'\nimport CandleStickChart from '../CandleChart'\nimport LocalLoader from '../LocalLoader'\nimport { AutoColumn } from '../Column'\nimport { Activity } from 'react-feather'\nimport { useDarkModeManager } from '../../contexts/LocalStorage'\n\nconst ChartWrapper = styled.div`\n height: 100%;\n min-height: 300px;\n\n @media screen and (max-width: 600px) {\n min-height: 200px;\n }\n`\n\nconst PriceOption = styled(OptionButton)`\n border-radius: 2px;\n`\n\nconst CHART_VIEW = {\n VOLUME: 'Volume',\n LIQUIDITY: 'Liquidity',\n PRICE: 'Price',\n LINE_PRICE: 'Price (Line)',\n}\n\nconst DATA_FREQUENCY = {\n DAY: 'DAY',\n HOUR: 'HOUR',\n LINE: 'LINE',\n}\n\nconst TokenChart = ({ address, color, base }) => {\n // settings for the window and candle width\n const [chartFilter, setChartFilter] = useState(CHART_VIEW.PRICE)\n const [frequency, setFrequency] = useState(DATA_FREQUENCY.HOUR)\n\n const [darkMode] = useDarkModeManager()\n const textColor = darkMode ? 'white' : 'black'\n\n // reset view on new address\n const addressPrev = usePrevious(address)\n useEffect(() => {\n if (address !== addressPrev && addressPrev) {\n setChartFilter(CHART_VIEW.LIQUIDITY)\n }\n }, [address, addressPrev])\n\n let chartData = useTokenChartData(address)\n\n const [timeWindow, setTimeWindow] = useState(timeframeOptions.ALL_TIME)\n const prevWindow = usePrevious(timeWindow)\n\n // hourly and daily price data based on the current time window\n const hourlyWeek = useTokenPriceData(address, timeframeOptions.WEEK, 3600)\n const hourlyMonth = useTokenPriceData(address, timeframeOptions.MONTH, 3600)\n const hourlyAll = useTokenPriceData(address, timeframeOptions.ALL_TIME, 3600)\n const dailyWeek = useTokenPriceData(address, timeframeOptions.WEEK, 86400)\n const dailyMonth = useTokenPriceData(address, timeframeOptions.MONTH, 86400)\n const dailyAll = useTokenPriceData(address, timeframeOptions.ALL_TIME, 86400)\n\n const priceData =\n timeWindow === timeframeOptions.MONTH\n ? // monthly selected\n frequency === DATA_FREQUENCY.DAY\n ? dailyMonth\n : hourlyMonth\n : // weekly selected\n timeWindow === timeframeOptions.WEEK\n ? frequency === DATA_FREQUENCY.DAY\n ? dailyWeek\n : hourlyWeek\n : // all time selected\n frequency === DATA_FREQUENCY.DAY\n ? dailyAll\n : hourlyAll\n\n // switch to hourly data when switched to week window\n useEffect(() => {\n if (timeWindow === timeframeOptions.WEEK && prevWindow && prevWindow !== timeframeOptions.WEEK) {\n setFrequency(DATA_FREQUENCY.HOUR)\n }\n }, [prevWindow, timeWindow])\n\n // switch to daily data if switche to month or all time view\n useEffect(() => {\n if (timeWindow === timeframeOptions.MONTH && prevWindow && prevWindow !== timeframeOptions.MONTH) {\n setFrequency(DATA_FREQUENCY.DAY)\n }\n if (timeWindow === timeframeOptions.ALL_TIME && prevWindow && prevWindow !== timeframeOptions.ALL_TIME) {\n setFrequency(DATA_FREQUENCY.DAY)\n }\n }, [prevWindow, timeWindow])\n\n const below1080 = useMedia('(max-width: 1080px)')\n const below600 = useMedia('(max-width: 600px)')\n\n let utcStartTime = getTimeframe(timeWindow)\n const domain = [(dataMin) => (dataMin > utcStartTime ? dataMin : utcStartTime), 'dataMax']\n const aspect = below1080 ? 60 / 32 : below600 ? 60 / 42 : 60 / 22\n\n chartData = chartData?.filter((entry) => entry.date >= utcStartTime)\n\n // update the width on a window resize\n const ref = useRef()\n const isClient = typeof window === 'object'\n const [width, setWidth] = useState(ref?.current?.container?.clientWidth)\n useEffect(() => {\n if (!isClient) {\n return false\n }\n function handleResize() {\n setWidth(ref?.current?.container?.clientWidth ?? width)\n }\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [isClient, width]) // Empty array ensures that effect is only run on mount and unmount\n\n return (\n \n {below600 ? (\n \n \n \n \n ) : (\n \n \n \n setChartFilter(CHART_VIEW.LIQUIDITY)}\n style={{ marginRight: '6px' }}\n >\n Liquidity\n \n setChartFilter(CHART_VIEW.VOLUME)}\n style={{ marginRight: '6px' }}\n >\n Volume\n \n {\n setChartFilter(CHART_VIEW.PRICE)\n }}\n >\n Price\n \n \n {chartFilter === CHART_VIEW.PRICE && (\n \n {\n setTimeWindow(timeframeOptions.MONTH)\n setFrequency(DATA_FREQUENCY.DAY)\n }}\n >\n D\n \n setFrequency(DATA_FREQUENCY.HOUR)}\n >\n H\n \n setFrequency(DATA_FREQUENCY.LINE)}\n >\n \n \n \n )}\n \n \n setTimeWindow(timeframeOptions.WEEK)}\n >\n 1W\n \n setTimeWindow(timeframeOptions.MONTH)}\n >\n 1M\n \n setTimeWindow(timeframeOptions.ALL_TIME)}\n >\n All\n \n \n \n )}\n {chartFilter === CHART_VIEW.LIQUIDITY && chartData && (\n \n \n \n \n \n \n \n \n toNiceDate(tick)}\n dataKey=\"date\"\n tick={{ fill: textColor }}\n type={'number'}\n domain={['dataMin', 'dataMax']}\n />\n '$' + toK(tick)}\n axisLine={false}\n tickLine={false}\n interval=\"preserveEnd\"\n minTickGap={80}\n yAxisId={0}\n tick={{ fill: textColor }}\n />\n formattedNum(val, true)}\n labelFormatter={(label) => toNiceDateYear(label)}\n labelStyle={{ paddingTop: 4 }}\n contentStyle={{\n padding: '10px 14px',\n borderRadius: 10,\n borderColor: color,\n color: 'black',\n }}\n wrapperStyle={{ top: -70, left: -10 }}\n />\n \n \n \n )}\n {chartFilter === CHART_VIEW.PRICE &&\n (frequency === DATA_FREQUENCY.LINE ? (\n \n \n \n \n \n \n \n \n toNiceDate(tick)}\n dataKey=\"date\"\n tick={{ fill: textColor }}\n type={'number'}\n domain={domain}\n />\n '$' + toK(tick)}\n axisLine={false}\n tickLine={false}\n interval=\"preserveEnd\"\n minTickGap={80}\n yAxisId={0}\n tick={{ fill: textColor }}\n />\n formattedNum(val, true)}\n labelFormatter={(label) => toNiceDateYear(label)}\n labelStyle={{ paddingTop: 4 }}\n contentStyle={{\n padding: '10px 14px',\n borderRadius: 10,\n borderColor: color,\n color: 'black',\n }}\n wrapperStyle={{ top: -70, left: -10 }}\n />\n \n \n \n ) : priceData ? (\n \n \n \n ) : (\n \n ))}\n\n {chartFilter === CHART_VIEW.VOLUME && (\n \n \n toNiceDate(tick)}\n dataKey=\"date\"\n tick={{ fill: textColor }}\n type={'number'}\n domain={['dataMin', 'dataMax']}\n />\n '$' + toK(tick)}\n tickLine={false}\n orientation=\"right\"\n interval=\"preserveEnd\"\n minTickGap={80}\n yAxisId={0}\n tick={{ fill: textColor }}\n />\n formattedNum(val, true)}\n labelFormatter={(label) => toNiceDateYear(label)}\n labelStyle={{ paddingTop: 4 }}\n contentStyle={{\n padding: '10px 14px',\n borderRadius: 10,\n borderColor: color,\n color: 'black',\n }}\n wrapperStyle={{ top: -70, left: -10 }}\n />\n \n \n \n )}\n \n )\n}\n\nexport default TokenChart\n","import React from 'react'\nimport styled from 'styled-components'\nimport { useCopyClipboard } from '../../hooks'\nimport { CheckCircle, Copy } from 'react-feather'\nimport { StyledIcon } from '..'\n\nconst CopyIcon = styled.div`\n color: #aeaeae;\n flex-shrink: 0;\n margin-right: 1rem;\n margin-left: 0.5rem;\n text-decoration: none;\n :hover,\n :active,\n :focus {\n text-decoration: none;\n opacity: 0.8;\n cursor: pointer;\n }\n`\nconst TransactionStatusText = styled.span`\n margin-left: 0.25rem;\n ${({ theme }) => theme.flexRowNoWrap};\n align-items: center;\n color: black;\n`\n\nexport default function CopyHelper({ toCopy }) {\n const [isCopied, setCopied] = useCopyClipboard()\n\n return (\n setCopied(toCopy)}>\n {isCopied ? (\n \n \n \n \n \n ) : (\n \n \n \n \n \n )}\n \n )\n}\n","import React from 'react'\nimport 'feather-icons'\nimport styled from 'styled-components'\nimport { Text } from 'rebass'\nimport { AlertTriangle } from 'react-feather'\nimport { RowBetween, RowFixed } from '../Row'\nimport { ButtonDark } from '../ButtonStyled'\nimport { AutoColumn } from '../Column'\nimport { Hover } from '..'\nimport Link from '../Link'\nimport { useMedia } from 'react-use'\n\nconst WarningWrapper = styled.div`\n border-radius: 20px;\n border: 1px solid #f82d3a;\n background: rgba(248, 45, 58, 0.05);\n padding: 1rem;\n color: #f82d3a;\n display: ${({ show }) => !show && 'none'};\n margin: 0 2rem 2rem 2rem;\n position: relative;\n\n @media screen and (max-width: 800px) {\n width: 80% !important;\n margin-left: 5%;\n }\n`\n\nconst StyledWarningIcon = styled(AlertTriangle)`\n min-height: 20px;\n min-width: 20px;\n stroke: red;\n`\n\nexport default function Warning({ type, show, setShow, address }) {\n const below800 = useMedia('(max-width: 800px)')\n\n const textContent = below800 ? (\n
\n \n Anyone can create and name any BEP20 token on BSC, including creating fake versions of existing tokens and\n tokens that claim to represent projects that do not have a token.\n \n \n Similar to bscscan.com, this site automatically tracks analytics for all BEP20 tokens independent of token\n integrity. Please do your own research before interacting with any BEP20 token.\n \n
\n ) : (\n \n Anyone can create and name any BEP20 token on BSC, including creating fake versions of existing tokens and tokens\n that claim to represent projects that do not have a token. Similar to bscscan.com, this site automatically tracks\n analytics for all BEP20 tokens independent of token integrity. Please do your own research before interacting with\n any BEP20 token.\n \n )\n\n return (\n \n \n \n \n \n Token Safety Alert\n \n \n {textContent}\n {below800 ? (\n
\n \n \n View {type === 'token' ? 'token' : 'pair'} contract on bscscan.com\n \n \n \n
\n setShow(false)}>\n I understand\n \n \n
\n ) : (\n \n \n \n View {type === 'token' ? 'token' : 'pair'} contract on bscscan.com\n \n \n setShow(false)}>\n I understand\n \n \n )}\n \n \n )\n}\n","import React, { useState } from 'react'\nimport 'feather-icons'\nimport { withRouter } from 'react-router-dom'\nimport { Text } from 'rebass'\nimport styled from 'styled-components'\nimport Link from '../components/Link'\nimport Panel from '../components/Panel'\nimport TokenLogo from '../components/TokenLogo'\nimport PairList from '../components/PairList'\nimport Loader from '../components/LocalLoader'\nimport { AutoRow, RowBetween, RowFixed } from '../components/Row'\nimport Column, { AutoColumn } from '../components/Column'\nimport { ButtonLight, ButtonDark } from '../components/ButtonStyled'\nimport TxnList from '../components/TxnList'\nimport TokenChart from '../components/TokenChart'\nimport { BasicLink } from '../components/Link'\nimport Search from '../components/Search'\nimport { formattedNum, formattedPercent, getPoolLink, getSwapLink, localNumber } from '../utils'\nimport { useTokenData, useTokenTransactions, useTokenPairs } from '../contexts/TokenData'\nimport { TYPE, ThemedBackground } from '../Theme'\nimport { transparentize } from 'polished'\nimport { useColor } from '../hooks'\nimport CopyHelper from '../components/Copy'\nimport { useMedia } from 'react-use'\nimport { useDataForList } from '../contexts/PairData'\nimport { useEffect } from 'react'\nimport Warning from '../components/Warning'\nimport { usePathDismissed, useSavedTokens } from '../contexts/LocalStorage'\nimport { Hover, PageWrapper, ContentWrapper, StyledIcon } from '../components'\nimport { PlusCircle, Bookmark } from 'react-feather'\nimport FormattedName from '../components/FormattedName'\nimport { useListedTokens } from '../contexts/Application'\n\nconst DashboardWrapper = styled.div`\n width: 100%;\n`\n\nconst PanelWrapper = styled.div`\n grid-template-columns: repeat(3, 1fr);\n grid-template-rows: max-content;\n gap: 6px;\n display: inline-grid;\n width: 100%;\n align-items: start;\n @media screen and (max-width: 1024px) {\n grid-template-columns: 1fr;\n align-items: stretch;\n > * {\n grid-column: 1 / 4;\n }\n\n > * {\n &:first-child {\n width: 100%;\n }\n }\n }\n`\n\nconst TokenDetailsLayout = styled.div`\n display: inline-grid;\n width: 100%;\n grid-template-columns: auto auto auto 1fr;\n column-gap: 30px;\n align-items: start;\n\n &:last-child {\n align-items: center;\n justify-items: end;\n }\n @media screen and (max-width: 1024px) {\n grid-template-columns: 1fr;\n align-items: stretch;\n > * {\n grid-column: 1 / 4;\n margin-bottom: 1rem;\n }\n\n &:last-child {\n align-items: start;\n justify-items: start;\n }\n }\n`\n\nconst WarningGrouping = styled.div`\n opacity: ${({ disabled }) => disabled && '0.4'};\n pointer-events: ${({ disabled }) => disabled && 'none'};\n`\n\nfunction TokenPage({ address, history }) {\n const {\n id,\n name,\n symbol,\n priceUSD,\n oneDayVolumeUSD,\n totalLiquidityUSD,\n volumeChangeUSD,\n oneDayVolumeUT,\n volumeChangeUT,\n priceChangeUSD,\n liquidityChangeUSD,\n oneDayTxns,\n txnChange,\n } = useTokenData(address)\n\n useEffect(() => {\n document.querySelector('body').scrollTo(0, 0)\n }, [])\n\n // detect color from token\n const backgroundColor = useColor(id, symbol)\n\n const allPairs = useTokenPairs(address)\n\n // pairs to show in pair list\n const fetchedPairsList = useDataForList(allPairs)\n\n // all transactions with this token\n const transactions = useTokenTransactions(address)\n\n // price\n const price = priceUSD ? formattedNum(priceUSD, true) : ''\n const priceChange = priceChangeUSD ? formattedPercent(priceChangeUSD) : ''\n\n // volume\n const volume =\n oneDayVolumeUSD || oneDayVolumeUSD === 0\n ? formattedNum(oneDayVolumeUSD === 0 ? oneDayVolumeUT : oneDayVolumeUSD, true)\n : oneDayVolumeUSD === 0\n ? '$0'\n : '-'\n\n // mark if using untracked volume\n const [usingUtVolume, setUsingUtVolume] = useState(false)\n useEffect(() => {\n setUsingUtVolume(oneDayVolumeUSD === 0 ? true : false)\n }, [oneDayVolumeUSD])\n\n const volumeChange = formattedPercent(!usingUtVolume ? volumeChangeUSD : volumeChangeUT)\n\n // liquidity\n const liquidity = totalLiquidityUSD ? formattedNum(totalLiquidityUSD, true) : totalLiquidityUSD === 0 ? '$0' : '-'\n const liquidityChange = formattedPercent(liquidityChangeUSD)\n\n // transactions\n const txnChangeFormatted = formattedPercent(txnChange)\n\n const below1080 = useMedia('(max-width: 1080px)')\n const below800 = useMedia('(max-width: 800px)')\n const below600 = useMedia('(max-width: 600px)')\n const below500 = useMedia('(max-width: 500px)')\n\n // format for long symbol\n const LENGTH = below1080 ? 10 : 16\n const formattedSymbol = symbol?.length > LENGTH ? symbol.slice(0, LENGTH) + '...' : symbol\n\n const [dismissed, markAsDismissed] = usePathDismissed(history.location.pathname)\n const [savedTokens, addToken] = useSavedTokens()\n const listedTokens = useListedTokens()\n\n useEffect(() => {\n window.scrollTo({\n behavior: 'smooth',\n top: 0,\n })\n }, [])\n\n return (\n \n \n\n \n \n \n \n \n {'Tokens '}→ {symbol}\n {' '}\n \n \n \n ({address.slice(0, 8) + '...' + address.slice(36, 42)})\n \n \n \n {!below600 && }\n \n\n \n \n \n \n \n \n \n \n {' '}\n {formattedSymbol ? `(${formattedSymbol})` : ''}\n \n {' '}\n {!below1080 && (\n <>\n \n {price}\n \n {priceChange}\n \n )}\n \n \n \n \n {!!!savedTokens[address] && !below800 ? (\n addToken(address, symbol)}>\n \n \n \n \n ) : !below1080 ? (\n \n \n \n ) : (\n <>\n )}\n \n + Add Liquidity\n \n \n \n Trade\n \n \n \n \n
\n\n <>\n \n {below1080 && price && (\n \n \n \n Price\n
\n \n \n {' '}\n \n {price}\n \n {priceChange}\n \n \n \n )}\n \n \n \n Total Liquidity\n
\n \n \n \n {liquidity}\n \n {liquidityChange}\n \n \n \n \n \n \n Volume (24hrs) {usingUtVolume && '(Untracked)'}\n
\n \n \n \n {volume}\n \n {volumeChange}\n \n \n \n\n \n \n \n Transactions (24hrs)\n
\n \n \n \n {oneDayTxns ? localNumber(oneDayTxns) : oneDayTxns === 0 ? 0 : '-'}\n \n {txnChangeFormatted}\n \n \n \n \n \n \n \n \n\n \n \n Top Pairs\n \n \n \n {address && fetchedPairsList ? (\n \n ) : (\n \n )}\n \n \n Transactions
\n \n \n {transactions ? : }\n \n <>\n \n Token Information{' '}\n \n \n \n \n Symbol\n \n \n \n \n \n Name\n \n \n \n \n \n Address\n \n \n {address.slice(0, 8) + '...' + address.slice(36, 42)}\n \n \n \n \n \n \n View on bscscan.com ↗\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default withRouter(TokenPage)\n","import React, { useState, useRef, useEffect } from 'react'\nimport styled from 'styled-components'\nimport { Area, XAxis, YAxis, ResponsiveContainer, Tooltip, AreaChart, BarChart, Bar } from 'recharts'\nimport { RowBetween, AutoRow } from '../Row'\n\nimport { toK, toNiceDate, toNiceDateYear, formattedNum, getTimeframe } from '../../utils'\nimport { OptionButton } from '../ButtonStyled'\nimport { darken } from 'polished'\nimport { usePairChartData, useHourlyRateData, usePairData } from '../../contexts/PairData'\nimport { timeframeOptions } from '../../constants'\nimport { useMedia } from 'react-use'\nimport { EmptyCard } from '..'\nimport DropdownSelect from '../DropdownSelect'\nimport CandleStickChart from '../CandleChart'\nimport LocalLoader from '../LocalLoader'\nimport { useDarkModeManager } from '../../contexts/LocalStorage'\n\nconst ChartWrapper = styled.div`\n height: 100%;\n max-height: 340px;\n\n @media screen and (max-width: 600px) {\n min-height: 200px;\n }\n`\n\nconst OptionsRow = styled.div`\n display: flex;\n flex-direction: row;\n width: 100%;\n margin-bottom: 40px;\n`\n\nconst CHART_VIEW = {\n VOLUME: 'Volume',\n LIQUIDITY: 'Liquidity',\n RATE0: 'Rate 0',\n RATE1: 'Rate 1',\n}\n\nconst PairChart = ({ address, color, base0, base1 }) => {\n const [chartFilter, setChartFilter] = useState(CHART_VIEW.LIQUIDITY)\n\n const [timeWindow, setTimeWindow] = useState(timeframeOptions.ALL_TIME)\n\n const [darkMode] = useDarkModeManager()\n const textColor = darkMode ? 'white' : 'black'\n\n // update the width on a window resize\n const ref = useRef()\n const isClient = typeof window === 'object'\n const [width, setWidth] = useState(ref?.current?.container?.clientWidth)\n const [height, setHeight] = useState(ref?.current?.container?.clientHeight)\n useEffect(() => {\n if (!isClient) {\n return false\n }\n function handleResize() {\n setWidth(ref?.current?.container?.clientWidth ?? width)\n setHeight(ref?.current?.container?.clientHeight ?? height)\n }\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [height, isClient, width]) // Empty array ensures that effect is only run on mount and unmount\n\n // get data for pair, and rates\n const pairData = usePairData(address)\n let chartData = usePairChartData(address)\n const hourlyData = useHourlyRateData(address, timeWindow)\n const hourlyRate0 = hourlyData && hourlyData[0]\n const hourlyRate1 = hourlyData && hourlyData[1]\n\n // formatted symbols for overflow\n const formattedSymbol0 =\n pairData?.token0?.symbol.length > 6 ? pairData?.token0?.symbol.slice(0, 5) + '...' : pairData?.token0?.symbol\n const formattedSymbol1 =\n pairData?.token1?.symbol.length > 6 ? pairData?.token1?.symbol.slice(0, 5) + '...' : pairData?.token1?.symbol\n\n const below1600 = useMedia('(max-width: 1600px)')\n const below1080 = useMedia('(max-width: 1080px)')\n const below600 = useMedia('(max-width: 600px)')\n\n let utcStartTime = getTimeframe(timeWindow)\n chartData = chartData?.filter((entry) => entry.date >= utcStartTime)\n\n if (chartData && chartData.length === 0) {\n return (\n \n No historical data yet.{' '}\n \n )\n }\n\n /**\n * Used to format values on chart on scroll\n * Needs to be raw html for chart API to parse styles\n * @param {*} val\n */\n function valueFormatter(val) {\n if (chartFilter === CHART_VIEW.RATE0) {\n return (\n formattedNum(val) +\n `${formattedSymbol1}/${formattedSymbol0}`\n )\n }\n if (chartFilter === CHART_VIEW.RATE1) {\n return (\n formattedNum(val) +\n `${formattedSymbol0}/${formattedSymbol1}`\n )\n }\n }\n\n const aspect = below1080 ? 60 / 20 : below1600 ? 60 / 28 : 60 / 22\n\n return (\n \n {below600 ? (\n \n \n \n \n ) : (\n \n \n {\n setTimeWindow(timeframeOptions.ALL_TIME)\n setChartFilter(CHART_VIEW.LIQUIDITY)\n }}\n >\n Liquidity\n \n {\n setTimeWindow(timeframeOptions.ALL_TIME)\n setChartFilter(CHART_VIEW.VOLUME)\n }}\n >\n Volume\n \n {\n setTimeWindow(timeframeOptions.WEEK)\n setChartFilter(CHART_VIEW.RATE0)\n }}\n >\n {pairData.token0 ? formattedSymbol1 + '/' + formattedSymbol0 : '-'}\n \n {\n setTimeWindow(timeframeOptions.WEEK)\n setChartFilter(CHART_VIEW.RATE1)\n }}\n >\n {pairData.token0 ? formattedSymbol0 + '/' + formattedSymbol1 : '-'}\n \n \n \n setTimeWindow(timeframeOptions.WEEK)}\n >\n 1W\n \n setTimeWindow(timeframeOptions.MONTH)}\n >\n 1M\n \n setTimeWindow(timeframeOptions.ALL_TIME)}\n >\n All\n \n \n \n )}\n {chartFilter === CHART_VIEW.LIQUIDITY && (\n \n \n \n \n \n \n \n \n toNiceDate(tick)}\n dataKey=\"date\"\n tick={{ fill: textColor }}\n type={'number'}\n domain={['dataMin', 'dataMax']}\n />\n '$' + toK(tick)}\n axisLine={false}\n tickLine={false}\n interval=\"preserveEnd\"\n minTickGap={80}\n yAxisId={0}\n tickMargin={16}\n tick={{ fill: textColor }}\n />\n formattedNum(val, true)}\n labelFormatter={(label) => toNiceDateYear(label)}\n labelStyle={{ paddingTop: 4 }}\n contentStyle={{\n padding: '10px 14px',\n borderRadius: 10,\n borderColor: color,\n color: 'black',\n }}\n wrapperStyle={{ top: -70, left: -10 }}\n />\n \n \n \n )}\n\n {chartFilter === CHART_VIEW.RATE1 &&\n (hourlyRate1 ? (\n \n \n \n ) : (\n \n ))}\n\n {chartFilter === CHART_VIEW.RATE0 &&\n (hourlyRate0 ? (\n \n \n \n ) : (\n \n ))}\n\n {chartFilter === CHART_VIEW.VOLUME && (\n \n \n toNiceDate(tick)}\n dataKey=\"date\"\n tick={{ fill: textColor }}\n type={'number'}\n domain={['dataMin', 'dataMax']}\n />\n '$' + toK(tick)}\n tickLine={false}\n interval=\"preserveEnd\"\n orientation=\"right\"\n minTickGap={80}\n yAxisId={0}\n tick={{ fill: textColor }}\n />\n formattedNum(val, true)}\n labelFormatter={(label) => toNiceDateYear(label)}\n labelStyle={{ paddingTop: 4 }}\n contentStyle={{\n padding: '10px 14px',\n borderRadius: 10,\n borderColor: color,\n color: 'black',\n }}\n wrapperStyle={{ top: -70, left: -10 }}\n />\n \n \n \n )}\n \n )\n}\n\nexport default PairChart\n","import React, { useEffect, useState } from 'react'\nimport { withRouter } from 'react-router-dom'\nimport 'feather-icons'\nimport styled from 'styled-components'\nimport Panel from '../components/Panel'\nimport { PageWrapper, ContentWrapperLarge, StyledIcon } from '../components/index'\nimport { AutoRow, RowBetween, RowFixed } from '../components/Row'\nimport Column, { AutoColumn } from '../components/Column'\nimport { ButtonLight, ButtonDark } from '../components/ButtonStyled'\nimport PairChart from '../components/PairChart'\nimport Link from '../components/Link'\nimport TxnList from '../components/TxnList'\nimport Loader from '../components/LocalLoader'\nimport { BasicLink } from '../components/Link'\nimport Search from '../components/Search'\nimport { formattedNum, formattedPercent, getPoolLink, getSwapLink } from '../utils'\nimport { useColor } from '../hooks'\nimport { usePairData, usePairTransactions } from '../contexts/PairData'\nimport { TYPE, ThemedBackground } from '../Theme'\nimport { transparentize } from 'polished'\nimport CopyHelper from '../components/Copy'\nimport { useMedia } from 'react-use'\nimport DoubleTokenLogo from '../components/DoubleLogo'\nimport TokenLogo from '../components/TokenLogo'\nimport { Hover } from '../components'\nimport { useBnbPrice } from '../contexts/GlobalData'\nimport Warning from '../components/Warning'\nimport { usePathDismissed, useSavedPairs } from '../contexts/LocalStorage'\n\nimport { Bookmark, PlusCircle } from 'react-feather'\nimport FormattedName from '../components/FormattedName'\nimport { useListedTokens } from '../contexts/Application'\n\nconst DashboardWrapper = styled.div`\n width: 100%;\n`\n\nconst PanelWrapper = styled.div`\n grid-template-columns: repeat(3, 1fr);\n grid-template-rows: max-content;\n gap: 6px;\n display: inline-grid;\n width: 100%;\n align-items: start;\n @media screen and (max-width: 1024px) {\n grid-template-columns: 1fr;\n align-items: stretch;\n > * {\n grid-column: 1 / 4;\n }\n\n > * {\n &:first-child {\n width: 100%;\n }\n }\n }\n`\n\nconst TokenDetailsLayout = styled.div`\n display: inline-grid;\n width: 100%;\n grid-template-columns: auto auto auto auto 1fr;\n column-gap: 60px;\n align-items: start;\n\n &:last-child {\n align-items: center;\n justify-items: end;\n }\n @media screen and (max-width: 1024px) {\n grid-template-columns: 1fr;\n align-items: stretch;\n > * {\n grid-column: 1 / 4;\n margin-bottom: 1rem;\n }\n\n &:last-child {\n align-items: start;\n justify-items: start;\n }\n }\n`\n\nconst FixedPanel = styled(Panel)`\n width: fit-content;\n padding: 8px 12px;\n border-radius: 10px;\n\n :hover {\n cursor: pointer;\n background-color: ${({ theme }) => theme.bg2};\n }\n`\n\nconst HoverSpan = styled.span`\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n`\n\nconst WarningGrouping = styled.div`\n opacity: ${({ disabled }) => disabled && '0.4'};\n pointer-events: ${({ disabled }) => disabled && 'none'};\n`\n\nfunction PairPage({ pairAddress, history }) {\n const {\n token0,\n token1,\n reserve0,\n reserve1,\n reserveUSD,\n trackedReserveUSD,\n oneDayVolumeUSD,\n volumeChangeUSD,\n oneDayVolumeUntracked,\n volumeChangeUntracked,\n liquidityChangeUSD,\n } = usePairData(pairAddress)\n\n useEffect(() => {\n document.querySelector('body').scrollTo(0, 0)\n }, [])\n\n const transactions = usePairTransactions(pairAddress)\n const backgroundColor = useColor(pairAddress)\n\n // liquidity\n const liquidity = trackedReserveUSD\n ? formattedNum(trackedReserveUSD, true)\n : reserveUSD\n ? formattedNum(reserveUSD, true)\n : '-'\n const liquidityChange = formattedPercent(liquidityChangeUSD)\n\n // mark if using untracked liquidity\n const [usingTracked, setUsingTracked] = useState(true)\n useEffect(() => {\n setUsingTracked(!trackedReserveUSD ? false : true)\n }, [trackedReserveUSD])\n\n // volume\t // volume\n const volume =\n oneDayVolumeUSD || oneDayVolumeUSD === 0\n ? formattedNum(oneDayVolumeUSD === 0 ? oneDayVolumeUntracked : oneDayVolumeUSD, true)\n : oneDayVolumeUSD === 0\n ? '$0'\n : '-'\n\n // mark if using untracked volume\n const [usingUtVolume, setUsingUtVolume] = useState(false)\n useEffect(() => {\n setUsingUtVolume(oneDayVolumeUSD === 0 ? true : false)\n }, [oneDayVolumeUSD])\n\n const volumeChange = formattedPercent(!usingUtVolume ? volumeChangeUSD : volumeChangeUntracked)\n\n // get fees\t // get fees\n const fees =\n oneDayVolumeUSD || oneDayVolumeUSD === 0\n ? usingUtVolume\n ? formattedNum(oneDayVolumeUntracked * 0.002, true)\n : formattedNum(oneDayVolumeUSD * 0.002, true)\n : '-'\n\n // token data for usd\n const [bnbPrice] = useBnbPrice()\n const token0USD =\n token0?.derivedBNB && bnbPrice ? formattedNum(parseFloat(token0.derivedBNB) * parseFloat(bnbPrice), true) : ''\n\n const token1USD =\n token1?.derivedBNB && bnbPrice ? formattedNum(parseFloat(token1.derivedBNB) * parseFloat(bnbPrice), true) : ''\n\n // rates\n const token0Rate = reserve0 && reserve1 ? formattedNum(reserve1 / reserve0) : '-'\n const token1Rate = reserve0 && reserve1 ? formattedNum(reserve0 / reserve1) : '-'\n\n // formatted symbols for overflow\n const formattedSymbol0 = token0?.symbol.length > 6 ? token0?.symbol.slice(0, 5) + '...' : token0?.symbol\n const formattedSymbol1 = token1?.symbol.length > 6 ? token1?.symbol.slice(0, 5) + '...' : token1?.symbol\n\n const below1080 = useMedia('(max-width: 1080px)')\n const below900 = useMedia('(max-width: 900px)')\n const below600 = useMedia('(max-width: 600px)')\n\n const [dismissed, markAsDismissed] = usePathDismissed(history.location.pathname)\n\n useEffect(() => {\n window.scrollTo({\n behavior: 'smooth',\n top: 0,\n })\n }, [])\n\n const [savedPairs, addPair] = useSavedPairs()\n\n const listedTokens = useListedTokens()\n\n return (\n \n \n \n \n \n \n \n {'Pairs '}→ {token0?.symbol}-{token1?.symbol}\n \n {!below600 && }\n \n \n \n \n \n \n \n {token0 && token1 && (\n \n )}{' '}\n \n {token0 && token1 ? (\n <>\n history.push(`/token/${token0?.id}`)}>{token0.symbol}\n -\n history.push(`/token/${token1?.id}`)}>\n {token1.symbol}\n {' '}\n Pair\n \n ) : (\n ''\n )}\n \n \n \n \n {!!!savedPairs[pairAddress] && !below1080 ? (\n addPair(pairAddress, token0.id, token1.id, token0.symbol, token1.symbol)}>\n \n \n \n \n ) : !below1080 ? (\n \n \n \n ) : (\n <>\n )}\n\n \n + Add Liquidity\n \n \n \n Trade\n \n \n \n
\n \n \n history.push(`/token/${token0?.id}`)}>\n \n \n \n {token0 && token1\n ? `1 ${formattedSymbol0} = ${token0Rate} ${formattedSymbol1} ${\n parseFloat(token0?.derivedBNB) ? '(' + token0USD + ')' : ''\n }`\n : '-'}\n \n \n \n history.push(`/token/${token1?.id}`)}>\n \n \n \n {token0 && token1\n ? `1 ${formattedSymbol1} = ${token1Rate} ${formattedSymbol0} ${\n parseFloat(token1?.derivedBNB) ? '(' + token1USD + ')' : ''\n }`\n : '-'}\n \n \n \n \n <>\n {!below1080 && Pair Stats}\n \n \n \n \n Total Liquidity {!usingTracked ? '(Untracked)' : ''}\n
\n \n \n \n {liquidity}\n \n {liquidityChange}\n \n \n \n \n \n \n Volume (24hrs) {usingUtVolume && '(Untracked)'}\n
\n \n \n \n {volume}\n \n {volumeChange}\n \n \n \n \n \n \n Fees (24hrs)\n
\n \n \n \n {fees}\n \n {volumeChange}\n \n \n \n\n \n \n \n Pooled Tokens\n
\n \n history.push(`/token/${token0?.id}`)} fade={true}>\n \n \n \n \n {reserve0 ? formattedNum(reserve0) : ''}{' '}\n \n \n \n \n \n history.push(`/token/${token1?.id}`)} fade={true}>\n \n \n \n \n {reserve1 ? formattedNum(reserve1) : ''}{' '}\n \n \n \n \n \n \n \n \n \n \n \n \n Transactions\n {' '}\n \n {transactions ? : }\n \n \n Pair Information{' '}\n \n \n \n \n Pair Name\n \n \n \n -\n \n \n \n \n \n Pair Address\n \n \n {pairAddress.slice(0, 6) + '...' + pairAddress.slice(38, 42)}\n \n \n \n \n \n \n \n {' '}\n Address\n \n \n \n \n {token0 && token0.id.slice(0, 6) + '...' + token0.id.slice(38, 42)}\n \n \n \n \n \n \n \n {' '}\n Address\n \n \n \n \n {token1 && token1.id.slice(0, 6) + '...' + token1.id.slice(38, 42)}\n \n \n \n \n \n \n View on bscscan.com ↗\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default withRouter(PairPage)\n","import React, { useMemo, useEffect, useCallback } from 'react'\nimport styled from 'styled-components'\nimport { useUserTransactions } from '../contexts/User'\nimport TxnList from '../components/TxnList'\nimport Panel from '../components/Panel'\nimport { formattedNum } from '../utils'\nimport { AutoRow, RowBetween } from '../components/Row'\nimport { AutoColumn } from '../components/Column'\nimport { TYPE } from '../Theme'\nimport { PageWrapper, ContentWrapper, StyledIcon } from '../components'\nimport { Bookmark } from 'react-feather'\nimport Link from '../components/Link'\nimport { BasicLink } from '../components/Link'\nimport { useMedia } from 'react-use'\nimport Search from '../components/Search'\nimport { useSavedAccounts } from '../contexts/LocalStorage'\n\nconst AccountWrapper = styled.div`\n background-color: rgba(255, 255, 255, 0.2);\n padding: 6px 16px;\n border-radius: 100px;\n display: flex;\n align-items: center;\n justify-content: center;\n`\n\nconst Header = styled.div``\n\nconst DashboardWrapper = styled.div`\n width: 100%;\n`\n\nfunction AccountPage({ account }) {\n // get data for this account\n const transactions = useUserTransactions(account)\n\n // get data for user stats\n const transactionCount = transactions?.swaps?.length + transactions?.burns?.length + transactions?.mints?.length\n\n // get derived totals\n let totalSwappedUSD = useMemo(() => {\n return transactions?.swaps\n ? transactions?.swaps.reduce((total, swap) => {\n return total + parseFloat(swap.amountUSD)\n }, 0)\n : 0\n }, [transactions])\n\n useEffect(() => {\n window.scrollTo({\n behavior: 'smooth',\n top: 0,\n })\n }, [])\n\n const below600 = useMedia('(max-width: 600px)')\n\n // adding/removing account from saved accounts\n const [savedAccounts, addAccount, removeAccount] = useSavedAccounts()\n const isBookmarked = savedAccounts.includes(account)\n const handleBookmarkClick = useCallback(() => {\n ;(isBookmarked ? removeAccount : addAccount)(account)\n }, [account, isBookmarked, addAccount, removeAccount])\n\n return (\n \n \n \n \n {'Accounts '}→{' '}\n \n {' '}\n {account?.slice(0, 42)}{' '}\n \n \n {!below600 && }\n \n
\n \n \n {account?.slice(0, 6) + '...' + account?.slice(38, 42)}\n \n View on bscscan.com\n \n \n \n \n \n \n \n \n
\n \n \n Wallet Stats\n {' '}\n \n \n \n {totalSwappedUSD ? formattedNum(totalSwappedUSD, true) : '-'}\n Total Value Swapped\n \n \n \n {totalSwappedUSD ? formattedNum(totalSwappedUSD * 0.002, true) : '-'}\n \n Total Fees Paid\n \n \n {transactionCount ? transactionCount : '-'}\n Total Transactions\n \n \n \n \n Transactions\n {' '}\n \n \n \n \n
\n
\n )\n}\n\nexport default AccountPage\n","import React, { useEffect } from 'react'\nimport 'feather-icons'\n\nimport TopTokenList from '../components/TokenList'\nimport { TYPE } from '../Theme'\nimport Panel from '../components/Panel'\nimport { useAllTokenData } from '../contexts/TokenData'\nimport { PageWrapper, FullWrapper } from '../components'\nimport { RowBetween } from '../components/Row'\nimport Search from '../components/Search'\nimport { useMedia } from 'react-use'\n\nfunction AllTokensPage() {\n const allTokens = useAllTokenData()\n\n useEffect(() => {\n window.scrollTo(0, 0)\n }, [])\n\n const below600 = useMedia('(max-width: 800px)')\n\n return (\n \n \n \n Top Tokens\n {!below600 && }\n \n \n \n \n \n \n )\n}\n\nexport default AllTokensPage\n","import React, { useEffect } from 'react'\nimport 'feather-icons'\n\nimport { TYPE } from '../Theme'\nimport Panel from '../components/Panel'\nimport { useAllPairData } from '../contexts/PairData'\nimport PairList from '../components/PairList'\nimport { PageWrapper, FullWrapper } from '../components'\nimport { RowBetween } from '../components/Row'\nimport Search from '../components/Search'\nimport { useMedia } from 'react-use'\n\nfunction AllPairsPage() {\n const allPairs = useAllPairData()\n\n useEffect(() => {\n window.scrollTo(0, 0)\n }, [])\n\n const below800 = useMedia('(max-width: 800px)')\n\n return (\n \n \n \n Top Pairs\n {!below800 && }\n \n \n \n \n \n \n )\n}\n\nexport default AllPairsPage\n","import React, { useState } from 'react'\nimport 'feather-icons'\nimport { withRouter } from 'react-router-dom'\nimport styled from 'styled-components'\nimport { ButtonLight, ButtonFaded } from '../ButtonStyled'\nimport { AutoRow, RowBetween } from '../Row'\nimport { isAddress } from '../../utils'\nimport { useSavedAccounts } from '../../contexts/LocalStorage'\nimport { AutoColumn } from '../Column'\nimport { TYPE } from '../../Theme'\nimport { Hover, StyledIcon } from '..'\nimport Panel from '../Panel'\nimport { Divider } from '..'\nimport { Flex } from 'rebass'\n\nimport { X } from 'react-feather'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-end;\n width: 100%;\n border-radius: 12px;\n`\n\nconst Input = styled.input`\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n white-space: nowrap;\n background: none;\n border: none;\n outline: none;\n padding: 12px 16px;\n border-radius: 12px;\n color: ${({ theme }) => theme.text1};\n background-color: ${({ theme }) => theme.bg1};\n font-size: 16px;\n margin-right: 1rem;\n border: 1px solid ${({ theme }) => theme.bg3};\n\n ::placeholder {\n color: ${({ theme }) => theme.text3};\n font-size: 14px;\n }\n\n @media screen and (max-width: 640px) {\n ::placeholder {\n font-size: 1rem;\n }\n }\n`\n\nconst AccountLink = styled.span`\n display: flex;\n cursor: pointer;\n color: ${({ theme }) => theme.link};\n font-size: 14px;\n font-weight: 500;\n`\n\nconst DashGrid = styled.div`\n display: grid;\n grid-gap: 1em;\n grid-template-columns: 1fr;\n grid-template-areas: 'account';\n padding: 0 4px;\n\n > * {\n justify-content: flex-end;\n }\n`\n\nfunction AccountSearch({ history, small }) {\n const [accountValue, setAccountValue] = useState()\n const [savedAccounts, addAccount, removeAccount] = useSavedAccounts()\n\n function handleAccountSearch() {\n if (isAddress(accountValue)) {\n history.push('/account/' + accountValue)\n if (!savedAccounts.includes(accountValue)) {\n addAccount(accountValue)\n }\n }\n }\n\n return (\n \n {!small && (\n <>\n \n \n {\n setAccountValue(e.target.value)\n }}\n />\n \n Load Account Details\n \n \n )}\n\n \n {!small && (\n \n \n Saved Accounts\n \n \n {savedAccounts?.length > 0 ? (\n savedAccounts.map((account) => {\n return (\n \n history.push('/account/' + account)}\n >\n {account?.slice(0, 42)}\n {\n e.stopPropagation()\n removeAccount(account)\n }}\n >\n \n \n \n \n \n \n )\n })\n ) : (\n No saved accounts\n )}\n \n )}\n\n {small && (\n <>\n {'Accounts'}\n {savedAccounts?.length > 0 ? (\n savedAccounts.map((account) => {\n return (\n \n history.push('/account/' + account)}>\n {small ? (\n {account?.slice(0, 6) + '...' + account?.slice(38, 42)}\n ) : (\n {account?.slice(0, 42)}\n )}\n \n removeAccount(account)}>\n \n \n \n \n \n )\n })\n ) : (\n No pinned wallets\n )}\n \n )}\n \n \n )\n}\n\nexport default withRouter(AccountSearch)\n","import React from 'react'\nimport { withRouter } from 'react-router-dom'\nimport styled from 'styled-components'\nimport { RowBetween, RowFixed } from '../Row'\nimport { AutoColumn } from '../Column'\nimport { TYPE } from '../../Theme'\nimport { useSavedTokens, useSavedPairs } from '../../contexts/LocalStorage'\nimport { Hover } from '..'\nimport TokenLogo from '../TokenLogo'\nimport AccountSearch from '../AccountSearch'\nimport { Bookmark, ChevronRight, X } from 'react-feather'\nimport { ButtonFaded } from '../ButtonStyled'\nimport FormattedName from '../FormattedName'\n\nconst RightColumn = styled.div`\n position: fixed;\n right: 0;\n top: 0px;\n height: 100vh;\n width: ${({ open }) => (open ? '160px' : '23px')};\n padding: 1.25rem;\n border-left: ${({ theme, open }) => '1px solid' + theme.bg3};\n background-color: ${({ theme }) => theme.bg1};\n z-index: 9999;\n overflow: auto;\n :hover {\n cursor: pointer;\n }\n`\n\nconst SavedButton = styled(RowBetween)`\n padding-bottom: ${({ open }) => open && '20px'};\n border-bottom: ${({ theme, open }) => open && '1px solid' + theme.bg3};\n margin-bottom: ${({ open }) => open && '1.25rem'};\n\n :hover {\n cursor: pointer;\n }\n`\n\nconst ScrollableDiv = styled(AutoColumn)`\n overflow: auto;\n padding-bottom: 60px;\n`\n\nconst StyledIcon = styled.div`\n color: ${({ theme }) => theme.text2};\n`\n\nfunction PinnedData({ history, open, setSavedOpen }) {\n const [savedPairs, , removePair] = useSavedPairs()\n const [savedTokens, , removeToken] = useSavedTokens()\n\n return !open ? (\n setSavedOpen(true)}>\n \n \n \n \n \n \n ) : (\n \n setSavedOpen(false)} open={open}>\n \n \n \n \n Saved\n \n \n \n \n \n \n \n \n Pinned Pairs\n {Object.keys(savedPairs).filter((key) => {\n return !!savedPairs[key]\n }).length > 0 ? (\n Object.keys(savedPairs)\n .filter((address) => {\n return !!savedPairs[address]\n })\n .map((address) => {\n const pair = savedPairs[address]\n return (\n \n history.push('/pair/' + address)}>\n \n \n \n \n \n \n removePair(pair.address)}>\n \n \n \n \n \n )\n })\n ) : (\n Pinned pairs will appear here.\n )}\n \n \n Pinned Tokens\n {Object.keys(savedTokens).filter((key) => {\n return !!savedTokens[key]\n }).length > 0 ? (\n Object.keys(savedTokens)\n .filter((address) => {\n return !!savedTokens[address]\n })\n .map((address) => {\n const token = savedTokens[address]\n return (\n \n history.push('/token/' + address)}>\n \n \n \n \n \n \n \n removeToken(address)}>\n \n \n \n \n \n )\n })\n ) : (\n Pinned tokens will appear here.\n )}\n \n \n \n )\n}\n\nexport default withRouter(PinnedData)\n","import React from 'react'\nimport { useHistory } from 'react-router-dom'\nimport styled from 'styled-components'\n\nimport { Flex } from 'rebass'\nimport Link from '../Link'\nimport { RowFixed } from '../Row'\nimport Logo from '../../assets/logo-white.png'\n\nconst TitleWrapper = styled.div`\n text-decoration: none;\n\n &:hover {\n cursor: pointer;\n }\n\n z-index: 10;\n`\n\nconst UniIcon = styled(Link)`\n transition: transform 0.3s ease;\n :hover {\n transform: rotate(-5deg);\n }\n`\n\nexport default function Title() {\n const history = useHistory()\n\n return (\n history.push('/')}>\n \n \n history.push('/')}>\n \"logo\"\n \n \n \n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Sun, Moon } from 'react-feather'\n\nconst IconWrapper = styled.div<{ isActive?: boolean }>`\n opacity: ${({ isActive }) => (isActive ? 0.8 : 0.4)};\n\n :hover {\n opacity: 1;\n }\n`\n\nconst StyledToggle = styled.div`\n display: flex;\n width: fit-content;\n cursor: pointer;\n text-decoration: none;\n margin-top: 1rem;\n color: white;\n\n :hover {\n text-decoration: none;\n }\n`\n\nexport interface ToggleProps {\n isActive: boolean\n toggle: () => void\n}\n\nexport default function Toggle({ isActive, toggle }: ToggleProps) {\n return (\n \n \n \n \n \n \n {' / '}\n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { AutoColumn } from '../Column'\nimport Title from '../Title'\nimport { BasicLink } from '../Link'\nimport { useMedia } from 'react-use'\nimport { transparentize } from 'polished'\nimport { TYPE } from '../../Theme'\nimport { withRouter } from 'react-router-dom'\nimport { TrendingUp, List, PieChart, Disc } from 'react-feather'\nimport Link from '../Link'\nimport { useSessionStart } from '../../contexts/Application'\nimport { useDarkModeManager } from '../../contexts/LocalStorage'\nimport Toggle from '../Toggle'\n\nconst Wrapper = styled.div`\n height: ${({ isMobile }) => (isMobile ? 'initial' : '100vh')};\n background-color: ${({ theme }) => transparentize(0.4, theme.bg1)};\n color: ${({ theme }) => theme.text1};\n padding: 0.5rem 0.5rem 0.5rem 0.75rem;\n position: sticky;\n top: 0px;\n z-index: 9999;\n box-sizing: border-box;\n background: linear-gradient(193.68deg, #1b1c22 0.68%, #000000 100.48%);\n color: ${({ theme }) => theme.bg2};\n\n @media screen and (max-width: 800px) {\n grid-template-columns: 1fr;\n position: relative;\n }\n\n @media screen and (max-width: 600px) {\n padding: 1rem;\n }\n`\n\nconst Option = styled.div`\n font-weight: 500;\n font-size: 14px;\n opacity: ${({ activeText }) => (activeText ? 1 : 0.6)};\n color: ${({ theme }) => theme.white};\n display: flex;\n :hover {\n opacity: 1;\n }\n`\n\nconst DesktopWrapper = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100vh;\n`\n\nconst MobileWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`\n\nconst HeaderText = styled.div`\n margin-right: 0.75rem;\n font-size: 0.825rem;\n font-weight: 500;\n display: inline-box;\n display: -webkit-inline-box;\n opacity: 0.8;\n :hover {\n opacity: 1;\n }\n a {\n color: ${({ theme }) => theme.white};\n }\n`\n\nconst Polling = styled.div`\n position: fixed;\n display: flex;\n left: 0;\n bottom: 0;\n padding: 1rem;\n color: white;\n opacity: 0.4;\n transition: opacity 0.25s ease;\n :hover {\n opacity: 1;\n }\n`\nconst PollingDot = styled.div`\n width: 8px;\n height: 8px;\n min-height: 8px;\n min-width: 8px;\n margin-right: 0.5rem;\n margin-top: 3px;\n border-radius: 50%;\n background-color: ${({ theme }) => theme.green1};\n`\n\nfunction SideNav({ history }) {\n const below1080 = useMedia('(max-width: 1080px)')\n\n const below1180 = useMedia('(max-width: 1180px)')\n\n const seconds = useSessionStart()\n\n const [isDark, toggleDarkMode] = useDarkModeManager()\n\n return (\n \n {!below1080 ? (\n \n \n \n {!below1080 && (\n <AutoColumn gap=\"1.25rem\" style={{ marginTop: '1rem' }}>\n <BasicLink to=\"/home\">\n <Option activeText={history.location.pathname === '/home' ?? undefined}>\n <TrendingUp size={20} style={{ marginRight: '.75rem' }} />\n Overview\n </Option>\n </BasicLink>\n <BasicLink to=\"/tokens\">\n <Option\n activeText={\n (history.location.pathname.split('/')[1] === 'tokens' ||\n history.location.pathname.split('/')[1] === 'token') ??\n undefined\n }\n >\n <Disc size={20} style={{ marginRight: '.75rem' }} />\n Tokens\n </Option>\n </BasicLink>\n <BasicLink to=\"/pairs\">\n <Option\n activeText={\n (history.location.pathname.split('/')[1] === 'pairs' ||\n history.location.pathname.split('/')[1] === 'pair') ??\n undefined\n }\n >\n <PieChart size={20} style={{ marginRight: '.75rem' }} />\n Pairs\n </Option>\n </BasicLink>\n\n <BasicLink to=\"/accounts\">\n <Option\n activeText={\n (history.location.pathname.split('/')[1] === 'accounts' ||\n history.location.pathname.split('/')[1] === 'account') ??\n undefined\n }\n >\n <List size={20} style={{ marginRight: '.75rem' }} />\n Accounts\n </Option>\n </BasicLink>\n </AutoColumn>\n )}\n </AutoColumn>\n <AutoColumn gap=\"0.5rem\" style={{ marginLeft: '.75rem', marginBottom: '4rem' }}>\n <HeaderText>\n <Link href=\"https://neverswap.com/\" target=\"_blank\">\n Neverswap\n </Link>\n </HeaderText>\n <HeaderText>\n <Link href=\"https://docs.neverswap.com\" target=\"_blank\">\n Docs\n </Link>\n </HeaderText>\n <HeaderText>\n <Link href=\"https://twitter.com/neverswap1\" target=\"_blank\">\n Twitter\n </Link>\n </HeaderText>\n <Toggle isActive={isDark} toggle={toggleDarkMode} />\n </AutoColumn>\n {!below1180 && (\n <Polling style={{ marginLeft: '.5rem' }}>\n <PollingDot />\n <a href=\"/\" style={{ color: 'white' }}>\n <TYPE.small color={'white'}>\n Updated {!!seconds ? seconds + 's' : '-'} ago <br />\n </TYPE.small>\n </a>\n </Polling>\n )}\n </DesktopWrapper>\n ) : (\n <MobileWrapper>\n <Title />\n </MobileWrapper>\n )}\n </Wrapper>\n )\n}\n\nexport default withRouter(SideNav)\n","import React, { useEffect } from 'react'\nimport 'feather-icons'\nimport { withRouter } from 'react-router-dom'\nimport { TYPE } from '../Theme'\nimport { PageWrapper, FullWrapper } from '../components'\nimport styled from 'styled-components'\nimport AccountSearch from '../components/AccountSearch'\nimport { RowBetween } from '../components/Row'\nimport { useMedia } from 'react-use'\nimport Search from '../components/Search'\n\nconst AccountWrapper = styled.div`\n @media screen and (max-width: 600px) {\n width: 100%;\n }\n`\n\nfunction AccountLookup() {\n // scroll to top\n useEffect(() => {\n window.scrollTo(0, 0)\n }, [])\n\n const below600 = useMedia('(max-width: 600px)')\n\n return (\n <PageWrapper>\n <FullWrapper>\n <RowBetween>\n <TYPE.largeHeader>Wallet analytics</TYPE.largeHeader>\n {!below600 && <Search small={true} />}\n </RowBetween>\n <AccountWrapper>\n <AccountSearch />\n </AccountWrapper>\n </FullWrapper>\n </PageWrapper>\n )\n}\n\nexport default withRouter(AccountLookup)\n","import React, { useState } from 'react'\nimport styled from 'styled-components'\nimport { ApolloProvider } from 'react-apollo'\nimport { client } from './apollo/client'\nimport { Route, Switch, BrowserRouter, Redirect } from 'react-router-dom'\nimport GlobalPage from './pages/GlobalPage'\nimport TokenPage from './pages/TokenPage'\nimport PairPage from './pages/PairPage'\nimport { useGlobalData, useGlobalChartData } from './contexts/GlobalData'\nimport { isAddress } from './utils'\nimport AccountPage from './pages/AccountPage'\nimport AllTokensPage from './pages/AllTokensPage'\nimport AllPairsPage from './pages/AllPairsPage'\nimport PinnedData from './components/PinnedData'\n\nimport SideNav from './components/SideNav'\nimport AccountLookup from './pages/AccountLookup'\nimport { OVERVIEW_TOKEN_BLACKLIST, PAIR_BLACKLIST } from './constants'\nimport LocalLoader from './components/LocalLoader'\nimport { useLatestBlocks } from './contexts/Application'\n\nconst AppWrapper = styled.div`\n position: relative;\n width: 100%;\n`\nconst ContentWrapper = styled.div`\n display: grid;\n grid-template-columns: ${({ open }) => (open ? '220px 1fr 200px' : '220px 1fr 64px')};\n\n @media screen and (max-width: 1400px) {\n grid-template-columns: 220px 1fr;\n }\n\n @media screen and (max-width: 1080px) {\n grid-template-columns: 1fr;\n max-width: 100vw;\n overflow: hidden;\n grid-gap: 0;\n }\n`\n\nconst Right = styled.div`\n position: fixed;\n right: 0;\n bottom: 0rem;\n z-index: 99;\n width: ${({ open }) => (open ? '220px' : '64px')};\n height: ${({ open }) => (open ? 'fit-content' : '64px')};\n overflow: auto;\n background-color: ${({ theme }) => theme.bg1};\n @media screen and (max-width: 1400px) {\n display: none;\n }\n`\n\nconst Center = styled.div`\n height: 100%;\n z-index: 9999;\n transition: width 0.25s ease;\n background-color: ${({ theme }) => theme.onlyLight};\n`\n\nconst WarningWrapper = styled.div`\n width: 100%;\n display: flex;\n justify-content: center;\n`\n\nconst WarningBanner = styled.div`\n background-color: ${({ theme }) => theme.bg1};\n padding: 1.5rem;\n color: white;\n width: 100%;\n text-align: center;\n font-weight: 500;\n`\n\n/**\n * Wrap the component with the header and sidebar pinned tab\n */\nconst LayoutWrapper = ({ children, savedOpen, setSavedOpen }) => {\n return (\n <>\n <ContentWrapper open={savedOpen}>\n <SideNav />\n <Center id=\"center\">{children}</Center>\n <Right open={savedOpen}>\n <PinnedData open={savedOpen} setSavedOpen={setSavedOpen} />\n </Right>\n </ContentWrapper>\n </>\n )\n}\n\nconst BLOCK_DIFFERENCE_THRESHOLD = 30\n\nfunction App() {\n const [savedOpen, setSavedOpen] = useState(false)\n\n const globalData = useGlobalData()\n const globalChartData = useGlobalChartData()\n const [latestBlock, headBlock] = useLatestBlocks()\n\n // show warning\n const showWarning = headBlock && latestBlock ? headBlock - latestBlock > BLOCK_DIFFERENCE_THRESHOLD : false\n\n return (\n <ApolloProvider client={client}>\n <AppWrapper>\n {showWarning && (\n <WarningWrapper>\n <WarningBanner>\n {`The data on this site has only synced to BSC Chain block ${latestBlock} (out of ${headBlock}). Please check back soon.`}\n </WarningBanner>\n </WarningWrapper>\n )}\n {globalData &&\n Object.keys(globalData).length > 0 &&\n globalChartData &&\n Object.keys(globalChartData).length > 0 ? (\n <BrowserRouter>\n <Switch>\n <Route\n exacts\n strict\n path=\"/token/:tokenAddress\"\n render={({ match }) => {\n if (OVERVIEW_TOKEN_BLACKLIST.includes(match.params.tokenAddress.toLowerCase())) {\n return <Redirect to=\"/home\" />\n }\n if (isAddress(match.params.tokenAddress.toLowerCase())) {\n return (\n <LayoutWrapper savedOpen={savedOpen} setSavedOpen={setSavedOpen}>\n <TokenPage address={match.params.tokenAddress.toLowerCase()} />\n </LayoutWrapper>\n )\n } else {\n return <Redirect to=\"/home\" />\n }\n }}\n />\n <Route\n exacts\n strict\n path=\"/pair/:pairAddress\"\n render={({ match }) => {\n if (PAIR_BLACKLIST.includes(match.params.pairAddress.toLowerCase())) {\n return <Redirect to=\"/home\" />\n }\n if (isAddress(match.params.pairAddress.toLowerCase())) {\n return (\n <LayoutWrapper savedOpen={savedOpen} setSavedOpen={setSavedOpen}>\n <PairPage pairAddress={match.params.pairAddress.toLowerCase()} />\n </LayoutWrapper>\n )\n } else {\n return <Redirect to=\"/home\" />\n }\n }}\n />\n <Route\n exacts\n strict\n path=\"/account/:accountAddress\"\n render={({ match }) => {\n if (isAddress(match.params.accountAddress.toLowerCase())) {\n return (\n <LayoutWrapper savedOpen={savedOpen} setSavedOpen={setSavedOpen}>\n <AccountPage account={match.params.accountAddress.toLowerCase()} />\n </LayoutWrapper>\n )\n } else {\n return <Redirect to=\"/home\" />\n }\n }}\n />\n\n <Route path=\"/home\">\n <LayoutWrapper savedOpen={savedOpen} setSavedOpen={setSavedOpen}>\n <GlobalPage />\n </LayoutWrapper>\n </Route>\n\n <Route path=\"/tokens\">\n <LayoutWrapper savedOpen={savedOpen} setSavedOpen={setSavedOpen}>\n <AllTokensPage />\n </LayoutWrapper>\n </Route>\n\n <Route path=\"/pairs\">\n <LayoutWrapper savedOpen={savedOpen} setSavedOpen={setSavedOpen}>\n <AllPairsPage />\n </LayoutWrapper>\n </Route>\n\n <Route path=\"/accounts\">\n <LayoutWrapper savedOpen={savedOpen} setSavedOpen={setSavedOpen}>\n <AccountLookup />\n </LayoutWrapper>\n </Route>\n\n <Redirect to=\"/home\" />\n </Switch>\n </BrowserRouter>\n ) : (\n <LocalLoader fill=\"true\" />\n )}\n </AppWrapper>\n </ApolloProvider>\n )\n}\n\nexport default App\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport ThemeProvider, { GlobalStyle } from './Theme'\nimport LocalStorageContextProvider, { Updater as LocalStorageContextUpdater } from './contexts/LocalStorage'\nimport TokenDataContextProvider, { Updater as TokenDataContextUpdater } from './contexts/TokenData'\nimport GlobalDataContextProvider from './contexts/GlobalData'\nimport PairDataContextProvider, { Updater as PairDataContextUpdater } from './contexts/PairData'\nimport ApplicationContextProvider from './contexts/Application'\nimport UserContextProvider from './contexts/User'\nimport App from './App'\n\nfunction ContextProviders({ children }) {\n return (\n <LocalStorageContextProvider>\n <ApplicationContextProvider>\n <TokenDataContextProvider>\n <GlobalDataContextProvider>\n <PairDataContextProvider>\n <UserContextProvider>{children}</UserContextProvider>\n </PairDataContextProvider>\n </GlobalDataContextProvider>\n </TokenDataContextProvider>\n </ApplicationContextProvider>\n </LocalStorageContextProvider>\n )\n}\n\nfunction Updaters() {\n return (\n <>\n <LocalStorageContextUpdater />\n <PairDataContextUpdater />\n <TokenDataContextUpdater />\n </>\n )\n}\n\nReactDOM.render(\n <ContextProviders>\n <Updaters />\n <ThemeProvider>\n <>\n <GlobalStyle />\n <App />\n </>\n </ThemeProvider>\n </ContextProviders>,\n document.getElementById('root')\n)\n"],"sourceRoot":""}