1(self["__LOADABLE_LOADED_CHUNKS__"]=self["__LOADABLE_LOADED_CHUNKS__"]||[]).push([[4101],{4101:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__);__webpack_require__.d(__webpack_exports__,{default:()=>components_Overview});var react=__webpack_require__(67294);var react_default=__webpack_require__.n(react);var es=__webpack_require__(37703);var redux=__webpack_require__(14890);var actions=__webpack_require__(41765);var styled_components_browser_esm=__webpack_require__(71893);var BeatLoader=__webpack_require__(18498);var BeatLoader_default=__webpack_require__.n(BeatLoader);;const fadeIn=styled_components_browser_esm.F4` 2 0% { 3 opacity: 0; 4 } 5`;const Container=styled_components_browser_esm.ZP.div` 6 display: flex; 7 flex-direction: column; 8 width: 100%; 9 flex: 2 1 auto; 10 justify-content: center; 11 opacity:1; 12 animation-duration: 1s; 13 animation-name: ${fadeIn}; 14 margin: auto; 15 overflow: hidden; 16 justify-content: flex-start; 17 background: white; 18 padding-top: 10px; 19`;const Header=styled_components_browser_esm.ZP.div` 20 display: flex; 21 padding: 0em 1em; 22 // margin-top: 15px; 23 // margin-bottom: 1em; 24 z-index: 1; 25 flex: 0 0 20px; 26 align-items: center; 27 justify-content: space-between; 28 @media (min-width: 1024px) { 29 // display: none; 30 // margin-bottom: 2em; 31 } 32 @media(max-width: 768px) { 33 margin-top: 0; 34 margin-bottom: 1em; 35 } 36 @media(max-width: 320px) { 37 font-size: 12px; 38 margin-bottom: 2em; 39 } 40`;const OverviewBalance=styled_components_browser_esm.ZP.h2` 41 margin: 0; 42 color: rgb(28, 46, 91); 43 font-weight: 500; 44 font-size: 20px; 45`;const Symbol=styled_components_browser_esm.ZP.span` 46 opacity: 0.5; 47 font-size: 30px; 48 margin-left: 8px; 49`;const TokenNameAndSymbolWrapper=styled_components_browser_esm.ZP.div` 50 display: flex; 51 align-items: baseline; 52 justify-content: center; 53 width: 100%; 54 padding: 0 15px; 55`;const TokenNameAndSymbol=styled_components_browser_esm.ZP.div` 56 text-align: center;safa 57`;const Logo=styled_components_browser_esm.ZP.img` 58 width: 30px; 59 height: 30px; 60 margin-right:5px; 61 display: inline-block; 62`;const ChartNav=styled_components_browser_esm.ZP.span` 63 color: hsl(0, 0%, 60%); 64 cursor: pointer; 65 &.active { 66 color: hsl(0, 0%, 30%); 67 font-weight: 600; 68 } 69`;const ChartNavSlash=styled_components_browser_esm.ZP.span` 70 padding: 0 5px; 71 color: hsl(0, 0%, 60%); 72`;const Empty=styled_components_browser_esm.ZP.div` 73 display: flex; 74 text-align: center; 75 justify-content: space-around; 76 padding: 0 15px 40px 15px; 77`;const EmptyMessage=styled_components_browser_esm.ZP.span` 78 font-size: 1em; 79 text-align: center; 80 color: hsl(0, 0%, 78%); 81 font-weight: 500; 82 margin-top: 15px; 83`;const Subtitle=styled_components_browser_esm.ZP.div` 84 font-weight: 400; 85 font-size: 16px; 86 margin: 2px 10px 20px; 87 color: hsl(0, 0%,60%); 88 z-index: 1; 89`;const Row=styled_components_browser_esm.ZP.div` 90 display: flex; 91 width: 100%; 92 min-width: 0; 93 flex: 1 0 300px; 94 overflow: hidden; 95 96 @media(max-width: 768px) { 97 flex-direction: column; 98 flex: 1 1 auto; 99 } 100`;const Column=styled_components_browser_esm.ZP.div` 101 flex: 1 1 50%; 102`;const LineChartContainer=styled_components_browser_esm.ZP.div` 103 display: flex; 104 width: 100%; 105 min-width: 0; 106 flex: 0 0 45%; 107 border-bottom: 1px solid hsl(0, 0%, 90%); 108 padding-top: 14px; 109 // padding: 0 1rem; 110 111 @media(max-width: 768px) { 112 flex: 1 0 275px; 113 } 114`;const PieContainer=styled_components_browser_esm.ZP.div` 115 flex: 1; 116 position: relative; 117 min-width: 350px; 118 max-width: 500px; 119 border-right: 1px solid hsl(0, 0%, 90%); 120 padding: 10px 0 20px; 121 opacity:1; 122 animation-duration: 1s; 123 animation-name: ${fadeIn}; 124 z-index: 0; 125 overflow: hidden; 126 127 @media (max-width: 1024px) { 128 flex: 1 0 325px; 129 max-width: none; 130 border-right: none; 131 border-bottom: 1px solid hsl(0, 0%, 90%); 132 } 133`;const EarnContainer=styled_components_browser_esm.ZP.div` 134 display: flex; 135 flex-direction: column; 136 flex: 1; 137 padding: 10px 0 0 0; 138 overflow: hidden; 139 opacity:1; 140 animation-duration: 1s; 141 animation-name: ${fadeIn}; 142 @media (max-width: 768px) { 143 flex-basis: 320px; 144 } 145`;const TransactionsContainer=styled_components_browser_esm.ZP.div` 146 display: flex; 147 flex-direction: column; 148 padding: 10px 0 15px; 149 overflow: hidden; 150 position: relative; 151 flex: 1 1 0; 152 opacity:1; 153 animation-duration: 1s; 154 animation-name: ${fadeIn}; 155 @media (max-width: 768px) { 156 flex-basis: auto; 157 padding-bottom: 0; 158 } 159`;const noHoldings=()=>{return react.createElement(Empty,null,react.createElement(EmptyMessage,null,"No holdings yet"))};const AchievementsContainer=styled_components_browser_esm.ZP.div` 160 display: flex; 161 flex-direction: column; 162 overflow: scroll; 163 opacity:1; 164 animation-duration: 1s; 165 animation-name: ${fadeIn}; 166`;const AchievementRow=styled_components_browser_esm.ZP.div` 167 display: flex; 168 align-items: center; 169 border-bottom: 1px solid hsl(0, 0%, 90%); 170 padding: 10px 10px; 171 flex: 0 0 44px; 172`;const AchievementIcon=styled_components_browser_esm.ZP.span` 173 flex: 0 0 30px; 174 text-align: center; 175 color: hsl(196, 69%, 45%); 176 font-size: 17px; 177 padding-right: 5px; 178`;const AchievmentDescription=styled_components_browser_esm.ZP.div``;const AchievementTitle=styled_components_browser_esm.ZP.div` 179 flex: 2 1 auto; 180 font-size: 12px; 181 font-weight: 700; 182 color: hsl(0, 0%, 49%); 183`;const AchievementAction=styled_components_browser_esm.ZP.div``;const AchievementCTA=styled_components_browser_esm.ZP.button` 184 outline: none; 185 border: 1px solid hsl(0, 0%, 90%); 186 border-radius: 3px; 187 font-weight: 500; 188 padding: 3px 10px; 189 color: hsl(196, 69%, 45%); 190 font-family: proxima-nova; 191 cursor: pointer; 192 background: none; 193`;const CompleteIcon=styled_components_browser_esm.ZP.span.attrs({className:"icon-checkmark"})` 194 color: hsl(120, 80%, 48%); 195 font-size: 14px; 196 padding-right: 16px; 197`;const BtnMore=styled_components_browser_esm.ZP.button` 198 border: 1px solid hsl(0, 0%, 90%); 199 border-radius: 3px; 200 padding: 3px 11px 4px; 201 color: hsl(0, 0%, 40%); 202 font-weight: 500; 203 font-size: 11px; 204 cursor: pointer; 205 outline: none; 206 background: none; 207 margin: 5px 18px 10px auto; 208 @media (min-width: 768px) { 209 position: absolute; 210 top: 12; 211 right: 10; 212 margin: 0; 213 } 214`;const PercentageCompleted=styled_components_browser_esm.ZP.div` 215 font-size: 17px; 216 color: hsl(0, 0%, 50%); 217 218 @media(max-width: 500px) { 219 font-size: 12px; 220 } 221`;const progressBarAnimation=styled_components_browser_esm.F4` 222 0% { 223 width: 0; 224 } 225`;const ProgressBar=styled_components_browser_esm.ZP.div` 226 display: flex; 227 margin: 0 0 0 auto; 228 justify-content: flex-start; 229 align-items: center; 230 flex: 0 0 50%; 231 height: 10px; 232 font-size: 12px; 233 background-color: hsl(0, 0%, 97%); 234 z-index:0; 235 align-self: center; 236 overflow: hidden; 237 border-radius: 6px; 238 box-shadow: inset 0 0 12px 0 rgba(0, 0, 0, 0.13); 239 position: relative; 240 overflow: visible; 241`;const PercentComplete=styled_components_browser_esm.ZP.div` 242 position: absolute; 243 left: -25px; 244 color: hsl(0, 0%, 10%); 245 font-size: 11px; 246 font-weight: 500; 247`;const ProgressBarShader=styled_components_browser_esm.ZP.div` 248 width: ${p=>p.progress}%; 249 min-width: 10px; 250 // background: hsl(120, 80%, 48%); 251 background-image: linear-gradient( 252 88deg, 253 hsl(199, 94%, 40%), 254 hsl(169, 76%, 44%) 55%, 255 hsl(164, 74%, 47%) 256 ); 257 height: 100%; 258 animation-duration: 2.5s; 259 animation-timing-function: ease-out; 260 animation-name: ${progressBarAnimation}; 261 display: flex; 262 justify-content: flex-end; 263 align-items: center; 264 white-space: nowrap; 265 color: white; 266 padding-right: 5px; 267 border-radius: 5px; 268 font-size: 12px; 269 font-weight: bold; 270`;const Bubble=styled_components_browser_esm.ZP.span` 271 position: absolute; 272 z-index: 1; 273 ${props=>props.location==="bottom"?"padding-top: 9px;":"padding-bottom: 9px;"} 274 transform: translateX(-50%); 275 width: ${props=>props.width?props.width:"200px"}; 276 ${props=>props.location==="bottom"?"top: 100%;":"bottom: 100%;"} 277 opacity:1; 278 animation-duration: 1s; 279 animation-name: ${fadeIn}; 280 &::after { 281 ${props=>props.location==="bottom"?"border-bottom: 9px solid #212121;":"border-top: 9px solid #212121;"} 282 ${props=>props.location==="bottom"?"top: 0;":"bottom: 0;"}; 283 border-left: 9px solid transparent; 284 border-right: 9px solid transparent; 285 left: 50%; 286 transform: translateX(-50%); 287 content: ''; 288 position: absolute; 289 z-index: 1; 290 } 291`;const Message=styled_components_browser_esm.ZP.div` 292 background: #212121; 293 border-radius: 3px; 294 color: white; 295 font-size: 12px; 296 line-height: 1.4; 297 padding: .75em; 298 text-align: center; 299`;const Loader=()=>{return react.createElement(EarnContainer,{style:{alignItems:"center",justifyContent:"space-around"}},react.createElement(BeatLoader_default(),{color:"#BDBDBD",size:30,margin:"2px"}))};const OverviewIntro={OverviewIntro:styled_components_browser_esm.ZP.div` 300 display: flex; 301 flex: 1; 302 width: 100%; 303 align-items: flex-start; 304 justify-content: center; 305 padding: 1rem; 306 border-radius: .25rem; 307 @media (max-width: 425px) { 308 background: white; 309 border-bottom: solid 1px rgba(0,0,0,.075); 310 border-radius: 0rem; 311 } 312 `,OverviewIntroHeader:styled_components_browser_esm.ZP.div` 313 background: linear-gradient(to bottom, #ffffff00, #c3e1ff78 34%, #e4f0ff94 50%, #ffffff00 100%); 314 margin-bottom: 1rem; 315 border-radius: .25rem; 316 min-height: 10rem; 317 box-shadow: 0 0 10px 10px white inset; 318 img { 319 width: 13rem; 320 margin: 1rem auto 1.25rem; 321 } 322 `,Content:styled_components_browser_esm.ZP.div` 323 text-align: center; 324 display: flex; 325 flex-direction: column; 326 width: 100%; 327 `,Headline:styled_components_browser_esm.ZP.h2` 328 color: ${p=>p.theme.colors.blueDarkFont}; 329 font-size: 1.75rem; 330 font-weight: 600; 331 margin: .75rem auto; 332 @media (max-width: 425px) { 333 font-size: 1.5rem; 334 } 335 `,Detail:styled_components_browser_esm.ZP.h4` 336 color: #878787; 337 font-size: 1.05rem; 338 font-weight: 400; 339 margin: 0 auto 1rem; 340 line-height: 1.6em; 341 342 @media (max-width: 425px) { 343 font-size: 1rem; 344 } 345 `,ButtonGroup:styled_components_browser_esm.ZP.div` 346 width: 100%; 347 margin: auto; 348 `,Button:styled_components_browser_esm.ZP.button` 349 display: flex; 350 align-items: center; 351 justify-content: flex-start; 352 width: 18rem; 353 padding: 0.75rem; 354 margin: .75rem auto; 355 background: #2a384a; 356 color: #ffffff; 357 border-color: #2a384a; 358 border-radius: 100px; 359 font-size: 15px; 360 font-weight: 500; 361 text-align: center; 362 box-shadow: 2px 3px 8px 0 rgba(0,0,0,0.2); 363 cursor: pointer; 364 transition: opacity .2s; 365 outline: none; 366 min-height: 55px; 367 368 span { 369 display: flex; 370 align-items: center; 371 justify-content: center; 372 width: 22px; 373 height: 22px; 374 padding: 0 0 1px 1px; 375 border-radius: 100%; 376 font-size: 15px; 377 font-weight: 700; 378 background: white; 379 border-radius: 100%; 380 color: ${p=>p.theme.colors.blueDarkFont}; 381 margin-right: .6rem; 382 background: white; 383 } 384 `,AchievementsHeader:styled_components_browser_esm.ZP.h3` 385 text-align: center; 386 font-weight: 400; 387 color: #293849; 388 font-size: 1.325rem; 389 margin-bottom: 0; 390 @media (max-width: 425px) { 391 margin-bottom: 15px; 392 } 393 `,BorrowLink:styled_components_browser_esm.ZP.p` 394 text-align: center; 395 font-size: 14px; 396 font-weight: 600; 397 margin-top: .75rem; 398 color: ${p=>p.theme.colors.blueLight}; 399 `};var esm_actions=__webpack_require__(75982);var types=__webpack_require__(86324);var walletService=__webpack_require__(19015);var bignumber=__webpack_require__(44431);var bignumber_default=__webpack_require__.n(bignumber);var numeral=__webpack_require__(92077);var numeral_default=__webpack_require__.n(numeral);var selectors=__webpack_require__(13581);var constants=__webpack_require__(70892);;var __pow=Math.pow;const Highcharts=__webpack_require__(78840);
399__webpack_require__(65705)(Highcharts);class PieChart extends react_default().Component{constructor(){super(...arguments);this.chart=void 0;this.state={};this.handleDocumentClick=ev=>{const target=ev.target;const className=target&&target.getAttribute&&target.getAttribute("class");if(className&&className.indexOf("js-pie-link")>-1){const symbol=className.split(" ")[1];symbol&&this.selectToken(symbol)}}}componentDidMount(){this.renderChart();document.addEventListener("click",this.handleDocumentClick)}componentWillUnmount(){document.removeEventListener("click",this.handleDocumentClick)}componentDidUpdate(prevProps){let didUpdateBalances=false;let didUpdateMM=false;if(this.props.portfolioValue!==prevProps.portfolioValue){didUpdateBalances=true}if(this.props.mmAccount!==prevProps.mmAccount){const prevMMValue=this.getMMValue(prevProps.mmAccount);const currentMMValue=this.getMMValue(this.props.mmAccount);didUpdateMM=currentMMValue!==prevMMValue}if(didUpdateBalances||didUpdateMM){return this.renderChart()}}selectToken(tokenSymbol){if(tokenSymbol){const{balances}=this.props;if(tokenSymbol==="CC"){this.props.push(`/wallet/assets/circlecoin`);return}if(tokenSymbol==="USD"){this.props.push("/wallet/assets/usd");return}if(tokenSymbol==="USD+"){this.props.push("/wallet/yield/dai");return}if(tokenSymbol==="Bitcoin+"||tokenSymbol==="BTC+"){this.props.push("/wallet/yield/btc");return}if(tokenSymbol==="Ethereum+"||tokenSymbol==="ETH+"){this.props.push("/wallet/yield/eth");return}if(tokenSymbol==="BTC"){this.props.push("/wallet/assets/bitcoin");return}if(tokenSymbol==="Collateral"){this.props.push("/wallet/lending/borrow");return}for(const token of balances){if(token.symbol===tokenSymbol){const tokenId=token.isPending?token.crowdsaleId:token.contractAddress;this.props.push(`/wallet/assets/${tokenId}`);break}}}}getEthValue(balances){const tokensValue=balances.reduce((sum,token)=>{const exp=new(bignumber_default())(__pow(10,+token.decimals));const bn=new(bignumber_default())(token.balance);const balance=bn.div(exp);const value=balance.mul(token.price_usd||0);return sum+value.toNumber()},0);return numeral_default()(tokensValue).format("$0,0.00")}calcMMValue(asset){const supply=parseFloat(asset.supplyBalance);return supply}getTokenBalance(token){const{mmAccount}=this.props;let bal=+token.balance;if(Object.values(types.t).includes(token.symbol)&&token.symbol!=="DAI"){if(mmAccount&&mmAccount.assets&&mmAccount.assets.length){const assets=mmAccount.assets.filter(a=>a.symbol===token.symbol);if(assets&&assets.length){for(const asset of assets){const mmVal=this.calcMMValue(asset);const decimals=+token.decimals;bal+=decimals>0?mmVal*__pow(10,decimals):mmVal}}}}return bal}getMMValue(mmAccount){return mmAccount&&mmAccount.assets.reduce((total,asset)=>{return total+=+asset.supplyBalance},0)}renderChart(){const{balances}=this.props;const portfolioValue=this.props.portfolioValue;if(portfolioValue===0)return;const minItemsMaxChartAllocation=.45;const minItemThreshold=.025;const innerLabelThreshold=.4;let minItemCount=0;const innerLabelStyle={distance:-55,connectorShape:"straight",style:{color:"white",textOutline:"1px #00000050",fontWeight:"normal",fontSize:"13px"}};const outerLabelStyle={distance:25,connectorShape:"straight",style:{color:"#00000090",textOutline:"2px contrast",fontWeight:"normal",fontSize:"10px"}};const chartData=balances.filter(b=>Number(b.balance)>0).map(token=>{const name=token.symbol!=="DAI"?token.symbol:"USD";const price=!token.isUSD?token.price_usd:1;const bal=this.getTokenBalance(token);const value=price?walletService.z.getDollarBalanceNum(price,bal.toString(),+token.decimals):0;const tokenWeight=+value/portfolioValue;const z=.7+tokenWeight;const isMinimumItem=tokenWeight<minItemThreshold&&tokenWeight>0;if(isMinimumItem)minItemCount++;return{name,isMinimumItem,tokenWeight,value,z,y:null,color:{linearGradient:{x1:0,x2:0,y1:0,y2:1},stops:[[0,`rgba(50,${(200*z).toFixed()}, 210, ${z>1?1:z.toFixed(2)})`],[1,`rgba(60,${(150*z).toFixed()}, 185, ${z>1?1:z.toFixed(2)})`]]}}});const ccItemZ=.72;const ccChartItem={name:"CC",isMinimumItem:true,tokenWeight:minItemThreshold,value:null,y:null,z:ccItemZ,color:{linearGradient:{x1:0,x2:0,y1:0,y2:1},stops:[[0,`rgba(50,${(200*ccItemZ).toFixed()},210, ${ccItemZ})`],[1,`rgba(60,${(150*ccItemZ).toFixed()},185, ${ccItemZ})`]]}};chartData.push(ccChartItem);minItemCount++;for(const savingsBalance of this.props.wyreWallet){const hasBalance=savingsBalance.decimaledBalance>0;if(!hasBalance)continue;const value=savingsBalance.usdValue;if(value<.01){continue}const tokenWeight=value/portfolioValue;const isMinimumItem=tokenWeight<minItemThreshold&&tokenWeight>0;if(isMinimumItem)minItemCount++;const z=.7+tokenWeight;const pieItem={name:savingsBalance.name,isMinimumItem,tokenWeight,z,y:null,value,color:{linearGradient:{x1:0,x2:0,y1:0,y2:1},stops:[[0,`rgba(50,${(200*z).toFixed()}, 210, ${z>1?1:z.toFixed(2)})`],[1,`rgba(60,${(150*z).toFixed()}, 185, ${z>1?1:z.toFixed(2)})`]]}};const similarAssetIndex=chartData.findIndex(d=>d.name===savingsBalance.name.replace("+",""));if(similarAssetIndex>-1){chartData.splice(similarAssetIndex,0,pieItem)}else{chartData.push(pieItem)}}chartData.map(item=>{item.name=item.name==="USD+"?"USD+ (DAI)":item.name;item.name=item.name==="USD"?"USD (DAI)":item.name;return item});const collateral=this.props.mmAccount&&this.props.mmAccount.assets.reduce((sum,a)=>sum+(a.symbol==="DAI"?Number(a.supplyBalance||0):Number(a.supplyBalanceValue||0)),0);const collateralUSDValue=collateral&&Number(collateral)||0;if(collateralUSDValue){const tokenWeight=collateralUSDValue/portfolioValue;const isMinimumItem=tokenWeight<minItemThreshold&&tokenWeight>0;if(isMinimumItem)minItemCount++;const z=.7+tokenWeight;const collateralItem={name:"Collateral",isMinimumItem:tokenWeight<minItemThreshold,tokenWeight,z,y:null,value:collateralUSDValue,color:{linearGradient:{x1:0,x2:0,y1:0,y2:1},stops:[[0,`rgba(50,${(200*z).toFixed()}, 210, ${z>1?1:z.toFixed(2)})`],[1,`rgba(60,${(150*z).toFixed()}, 185, ${z>1?1:z.toFixed(2)})`]]}};chartData.push(collateralItem)}function chartValues(){let minY=minItemThreshold;if(minItemCount>minItemsMaxChartAllocation/minItemThreshold){minY=minItemsMaxChartAllocation/minItemCount}let totalY=0;return chartData.map(token=>{const chartArea=token.tokenWeight>0?token.isMinimumItem?minY:token.tokenWeight:0;token.y=chartArea;
399totalY+=chartArea;return token}).filter(token=>token.y&&token.y>0).map(token=>{token.dataLabels=(token.y||0)/totalY>innerLabelThreshold?innerLabelStyle:outerLabelStyle;return token})}if(this.chart&&chartData.length){this.chart.series[0].setData(chartValues());return}const self2=this;const data=chartValues();const chartOptions={chart:{plotBackgroundColor:null,plotBorderWidth:null,type:"variablepie",height:"100%",margin:[10,0,0,0],spacing:[0,0,0,0]},credits:{enabled:false},title:{text:""},tooltip:{style:{pointerEvents:"auto"},followPointer:false,followTouchMove:false,pointFormatter(){const token=self2.props.tokens.find(t=>{let tokenName=this.name&&this.name.replace(" (DAI)","")||"";return t.symbol===tokenName});const pctChange=token&&token.percent_change_24h||0;let symbol=token&&token.symbol||this.name;if(symbol==="USD+"){symbol="USD+ (DAI)"}const pctChangeDisplay=pctChange!==0?`24h Change: <span class="js-pie-link ${symbol}" style="font-weight: 700; color: ${pctChange>0?"green":"red"}"> 400 ${pctChange>0?"+":""}${pctChange.toFixed(2)}% 401 </span>`:"";const viewDetails=` 402 <br /> 403 <span class="js-pie-link ${symbol}" style="text-decoration: underline; color #2499c4; cursor: pointer;"> 404 View Details 405 </span> 406 `;return` 407 ${token&&token.name&&`<strong>${token.name}</strong><br/>`||""} 408 <b class="js-pie-link ${symbol}">${this.name==="CC"&&this.z===ccItemZ&&this.value===null?`(${constants.CIRCLE_COIN_NAME})`:`$${Highcharts.numberFormat(this.value,2,".",",")}`}</b> 409 <br /> 410 ${this.name!=="USD+ (DAI)"?pctChangeDisplay:""} 411 ${viewDetails} 412 `}},plotOptions:{variablepie:{allowPointSelect:true,align:"center",cursor:"pointer",dataLabels:{distance:10,enabled:true,format:"<b>{point.name}</b>",padding:0,style:{color:Highcharts.theme&&Highcharts.theme.contrastTextColor||"black"},borderWidth:0}}},series:[{name:"",borderWidth:minItemCount>10?2:3,minPointSize:10,innerSize:"20%",zMin:0,colorByPoint:true,data}]};const delay=this.props.isDesktop?1500:0;setTimeout(()=>{const el=document.getElementById("pie-container");if(!el)return;this.chart=Highcharts.chart("pie-container",chartOptions)},delay)}render(){const{balances,mmAccount,isMobile,height,width,wyreWallet}=this.props;const holdings=balances.reduce((sum,b)=>sum+ +b.balance,0);const btcp=wyreWallet&&wyreWallet.find(b=>b.contractAddress==="SAVINGS:BTC");const ethp=wyreWallet&&wyreWallet.find(b=>b.contractAddress==="SAVINGS:ETH");const btcPlusBal=btcp?btcp.decimaledBalance:0;const ethPlusBal=ethp?ethp.decimaledBalance:0;const hasHoldings=holdings+btcPlusBal+ethPlusBal>0;if(!hasHoldings)return noHoldings();const size=Math.min(this.props.height||300,this.props.width||300);const scaled=size*.85;const isScaledForMobile=this.props.height||this.props.height;const chartStyle={position:"absolute",width:isScaledForMobile?`${scaled}px`:"100%",maxWidth:isScaledForMobile?"inherit":"18.5rem",left:"50%",top:"50%",transform:"translate(-50%, -50%)",maxHeight:isScaledForMobile?"inherit":"300px",height:isScaledForMobile?`${scaled}px`:"calc(95% - 10px)",margin:0,padding:0};const desktopStyle={height:`${scaled}px`,width:`${scaled}px`};return react_default().createElement("div",{id:"pie-container",style:isMobile?chartStyle:desktopStyle})}}const mapStateToProps=(state,ownProps)=>({mmAccount:state.wallet.moneyMarketAccount,isMobile:state.app.windowWidth<=768,tokens:state.wallet.tokens,usdPlus:selectors.selectComputedUSDPlus(state),wyreWallet:selectors.selectWyreWalletAsBalances(state),ethPrice:selectors.selectETHPrice(state),portfolioValue:selectors.selectWalletBalanceValue(state)});const mapDispatchToProps=d=>(0,redux.DE)({push:esm_actions.VF},d);const Overview_PieChart=(0,es.$j)(mapStateToProps,mapDispatchToProps)(PieChart);var moment=__webpack_require__(30381);var moment_default=__webpack_require__.n(moment);var fetch_token=__webpack_require__(47254);var activity_selectors=__webpack_require__(9901);var fetch_wallet_transfers=__webpack_require__(39439);var fetch_transactions=__webpack_require__(6633);var fetch_savings_accruals=__webpack_require__(40221);;function Worker_fn(){return new Worker(__webpack_require__.p+"cc-worker.8e6bb23c9dd191d7d95a.web-worker.js")}var WorkerPool=__webpack_require__(23479);var mobile_helpers=__webpack_require__(21466);;let numWorkers=6;if((0,mobile_helpers.isBrowsingInMobileWeb)()||(0,mobile_helpers.isBrowsingInMobileApp)()){numWorkers=3}let pool_navigator=window.navigator;if(pool_navigator.hardwareConcurrency){if(pool_navigator.hardwareConcurrency>10){numWorkers=10}else if(pool_navigator.hardwareConcurrency>=5){numWorkers=pool_navigator.hardwareConcurrency-2}else{numWorkers=Math.min(3,Math.max(pool_navigator.hardwareConcurrency,2))}}const pool=new WorkerPool.e(Worker_fn,numWorkers);const web_worker_pool=pool;;var PriceChart_pow=Math.pow;var __async=(__this,__arguments,generator)=>{return new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}};var rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}};var step=result=>{return result.done?resolve(result.value):Promise.resolve(result.value).then(fulfilled,rejected)};step((generator=generator.apply(__this,__arguments)).next())})};const PriceChart_Highcharts=__webpack_require__(95384);
412__webpack_require__(92414)(PriceChart_Highcharts);__webpack_require__(90038)(PriceChart_Highcharts);let redrawEnabled=true;function setMinMax(){if(redrawEnabled){redrawEnabled=false;let min=0;let max=0;this.series[0].points.forEach((point,i)=>{if(point.y>max||i===0)max=point.y;if(point.y<min||i===0)min=point.y});this.yAxis[0].setExtremes(Math.max(min,0),max);redrawEnabled=true}}PriceChart_Highcharts.setOptions({lang:{thousandsSep:",",rangeSelectorZoom:""}});const ONE_SECOND=1e3;const ONE_MINUTE=ONE_SECOND*60;const ONE_HOUR=ONE_MINUTE*60;const ONE_DAY=ONE_HOUR*24;const ONE_WEEK=ONE_DAY*7;const ONE_MONTH=ONE_DAY*30;const ONE_YEAR=ONE_DAY*365;const NOW=Date.now();const ONE_DAY_AGO=NOW-ONE_DAY;const ONE_WEEK_AGO=NOW-ONE_WEEK;const ONE_MONTH_AGO=NOW-ONE_MONTH;const THREE_MONTHS_AGO=NOW-ONE_MONTH*3;const ONE_YEAR_AGO=NOW-ONE_YEAR;function roundTimestamp(ts){if(ts<ONE_YEAR_AGO)return ts-ts%ONE_DAY;if(ts<THREE_MONTHS_AGO)return ts-ts%(ONE_HOUR*3);if(ts<ONE_MONTH_AGO)return ts-ts%ONE_HOUR;if(ts<ONE_WEEK_AGO)return ts-ts%ONE_HOUR;if(ts<ONE_DAY_AGO)return ts-ts%(ONE_MINUTE*5);return ts-ts%(ONE_MINUTE*10)}class PriceChart extends react_default().Component{constructor(){super(...arguments);this.state={chartData:[],valueNow:0,valueDayAgo:0,valueWeekAgo:0,valueMonthAgo:0,value3MonthAgo:0,value6MonthAgo:0,valueYearAgo:0,valueFiveYearsAgo:0,valueYTD:0,initialValue:0,valueMin:0,pcntChange:0,usdChange:0,rangeSelection:0,xMin:null,xMax:null,yMin:0,yMax:null};this.chart=null;this.t={dayAgo:moment_default()().utc().subtract(1,"day"),weekAgo:moment_default()().utc().subtract(1,"week"),monthAgo:moment_default()().utc().subtract(30,"day"),month3Ago:moment_default()().utc().subtract(3,"month"),month6Ago:moment_default()().utc().subtract(6,"month"),yearAgo:moment_default()().utc().subtract(1,"year"),fiveYearsAgo:moment_default()().utc().subtract(5,"year"),ytd:moment_default().utc().startOf("year")};this.xEventDepositVals=[];this.xEventWithdrawVals=[];this.updateGrouping=()=>{const{xMin,xMax}=this.state;if(!(xMax&&xMin))return;if(typeof xMin!=="number")return;if(typeof xMax!=="number")return;const width=xMax-xMin;let groupPixelWidth=2;if(xMin<=ONE_DAY_AGO){groupPixelWidth=2}if(xMin<=ONE_WEEK_AGO){groupPixelWidth=2}if(xMin<=ONE_MONTH_AGO){groupPixelWidth=3}if(xMin<=ONE_MONTH_AGO-ONE_MONTH){groupPixelWidth=4}if(xMin<=THREE_MONTHS_AGO){groupPixelWidth=3}if(xMin<=ONE_YEAR_AGO){groupPixelWidth=3}if(xMin<=ONE_YEAR_AGO-ONE_YEAR*3){groupPixelWidth=2}if(this.chart){this.chart.series[0].update({dataGrouping:{groupPixelWidth}})}};this.rangeChange=event=>{var _a,_b,_c;const{chartData}=this.state;let xMin=((_a=chartData[0])==null?void 0:_a[0])||0;let first=0;let xMax=((_b=chartData[chartData.length-1])==null?void 0:_b[0])||0;let last=event.max===event.dataMax?chartData&&chartData[chartData.length-2]&&((_c=chartData[chartData.length-2])==null?void 0:_c[1])||0:0;if(event.trigger==="rangeSelectorButton"||event.type==="setExtremes"&&!event.trigger){return}for(let i=0,max=chartData.length;i<max;i+=1){if(chartData[i][0]>=event.min&&!first){xMin=chartData[i][0];first=chartData[i][1]}if(chartData[i][0]>=event.max&&!last){xMax=chartData[i-1][0];last=chartData[i][1]}if(first&&last){break}}const pcnt=this.calcPcnt(first,last);const usdChange=this.calcChange(first,last);this.setState({pcntChange:pcnt,usdChange,rangeSelection:null,xMin,xMax});return};this.renderChart=()=>__async(this,null,function*(){const{chartData,rangeSelection,xMin,xMax,yMin,yMax}=this.state;const el=document.getElementById("chart-container");if(!el)return;if(this.chart&&chartData.length){this.chart.series[0].setData(chartData);this.setPcntChange(this.state.rangeSelection);return}const yAxisLabelFormatter=y=>{let val=numeral_default()(y.value).format("$0,0.00");if(y.value<1){val=numeral_default()(y.value).format("$0,0.000");if(y.value<=.1){val=numeral_default()(y.value).format("$0,0.0000")}}if(y.value>=1e3){val=numeral_default()(y.value).format("$,0")}return val};const verticalLines=this.xAxisPlotLines();const chartOptions={chart:{renderTo:"container",type:"area",spacingTop:40,spacingBottom:30,marginBottom:30},credits:{enabled:false},title:{text:""},navigator:{enabled:false},xAxis:{min:xMin||null,max:xMax||null,events:{afterSetExtremes:this.rangeChange},ordinal:false,gridLineColor:"hsl(0, 0%, 97%)",labels:false,tickLength:0,lineWidth:0,plotLines:verticalLines},yAxis:{opposite:true,labels:{align:"right",x:5,y:-8,formatter:yAxisLabelFormatter,style:{color:"hsl(213, 30%, 60%)",cursor:"default",fontSize:"9px"}},gridLineColor:"rgba(230,230,230,0.25)",floor:0,lineWidth:0,borderWidth:0},rangeSelector:{buttonSpacing:15,selected:rangeSelection,enabled:chartData.length,inputEnabled:false,
412y:-28,buttons:[{type:"day",count:1,text:"1d",events:{click:()=>{this.setPcntChange(0)}}},{type:"week",count:1,text:"1w",events:{click:()=>{this.setPcntChange(1)}}},{type:"month",count:1,text:"1m",events:{click:()=>{this.setPcntChange(2)}}},{type:"month",count:3,text:"3m",events:{click:()=>{this.setPcntChange(3)}}},{type:"year",count:1,text:"1y",events:{click:()=>{this.setPcntChange(4)}}},{type:"ytd",text:"YTD",events:{click:()=>{this.setPcntChange(5)}}},{type:"year",count:5,text:"5y",events:{click:()=>{this.setPcntChange(6)}}}]},scrollbar:{enabled:false},series:[{color:"hsla(196,69%,45%, 1)",name:"Value USD",data:chartData,fillColor:{linearGradient:{x1:0,x2:0,y1:0,y2:1},stops:[[0,PriceChart_Highcharts.Color("#6f7fe2").setOpacity(.7).get("rgba")],[1,PriceChart_Highcharts.Color("#00bfd9").setOpacity(0).get("rgba")]]},threshold:null,lineWidth:2,dataGrouping:{groupPixelWidth:2}}],tooltip:{formatter(){let val=numeral_default()(this.y).format("$0,0.00");if(this.y<1){val=numeral_default()(this.y).format("$0,0.000");if(this.y<=.1){val=numeral_default()(this.y).format("$0,0.0000")}}if(this.y>=1e3){val=numeral_default()(this.y).format("$,0")}return[moment_default()(this.x).format("MM/DD/YYYY h:mma"),`USD Value <b>${val}</b>`]}}};this.chart=PriceChart_Highcharts.stockChart("chart-container",chartOptions)})}componentDidMount(){return __async(this,null,function*(){this.getEnoughTxData();yield this.constructChartData()})}getMoreTxData(){return __async(this,null,function*(){yield Promise.all([this.props.fetchWyreWalletTransfers(),this.props.fetchTransactions(),this.props.fetchSavingsAccruals()])})}getEnoughTxData(ts=-1,ets=-1,n=1){return __async(this,null,function*(){if(ts>=this.props.earliestTimestamp){return}this.getMoreTxData().then(()=>{this.redrawPlotLines();if(ets===this.props.earliestTimestamp){return}if(ets>ts||ts===-1){this.getEnoughTxData(ts,this.props.earliestTimestamp,n+1);return}return});return})}redrawPlotLines(){if(this.chart&&this.chart.xAxis[0]&&this.chart.xAxis[0].options&&this.chart.xAxis[0].options.plotLines){const xAxis=this.chart.axes.find(axis=>!!axis.isXAxis);if(xAxis){const xMax=this.state.xMax||void 0;const extrm=xAxis.getExtremes();this.chart.xAxis[0].options.plotLines=this.xAxisPlotLines();this.chart.xAxis[0].update(this.chart.xAxis[0].options);if(xMax&&xMax>this.t.dayAgo.toDate().valueOf()){xAxis.setExtremes(extrm.min,extrm.max)}}}}componentDidUpdate(oldProps,prevState){return __async(this,null,function*(){const newProps=this.props;const wasDesktop=oldProps.windowWidth>1024;const isDesktop=newProps.windowWidth>1024;const didChangePath=oldProps.pathname!==newProps.pathname;const didReceiveData=oldProps.tokens!==this.props.tokens;const didChangeBalances=oldProps.balances!==this.props.balances;const walletValueChanged=oldProps.walletValue!==this.props.walletValue;const didReceiveMoneyMarket=!oldProps.mmAccount.liquidity&&this.props.mmAccount.liquidity;const didChangeSavings=oldProps.savingsWalletRaw!==this.props.savingsWalletRaw;if(didChangePath||isDesktop!==wasDesktop||didReceiveMoneyMarket||didChangeSavings){yield this.constructChartData()}if(prevState.xMin!==this.state.xMin||prevState.xMax!==this.state.xMax){this.updateGrouping()}})}calcPcnt(baseValue,endPriceVal){if(baseValue===0)return 0;const price=endPriceVal?endPriceVal:this.state.valueNow;const diff=price-baseValue;const percentage=diff/baseValue;return percentage}calcChange(baseValue,endPriceVal){if(baseValue===0)return 0;const price=endPriceVal?endPriceVal:this.state.valueNow;const diff=price-baseValue;return diff}calcXevents(){const xEventDepositValues=[];const xEventWithdrawValues=[];for(const k of Object.keys(this.props.depositWithdrawDeltas)){for(let i=0;i<this.props.depositWithdrawDeltas[k].length;i++){if(this.props.depositWithdrawDeltas[k][i][1]>0){xEventDepositValues.push(this.props.depositWithdrawDeltas[k][i][0])}else if(this.props.depositWithdrawDeltas[k][i][1]<0){xEventWithdrawValues.push(this.props.depositWithdrawDeltas[k][i][0])}}}this.xEventDepositVals=xEventDepositValues.sort();this.xEventWithdrawVals=xEventWithdrawValues.sort()}constructChartData(){return __async(this,null,function*(){const tm=yield web_worker_pool.sendCommand("PriceGraph.ConstructChartData",[{balances:this.props.balances,txHistoryBals:this.props.txHistoryBals,earliestTimestamp:this.props.earliestTimestamp,mmAccount:this.props.mmAccount,savingsWallet:this.props.savingsWallet,queryString:window.location.search}]);let dayAgoValue=0;let weekAgoValue=0;let monthAgoValue=0;let month3AgoValue=0;let month6AgoValue=0;let yearAgoValue=0;let ytdValue=0;let fiveYearsAgoValue=0;let currentValue=0;let valueMin=0;let yMin=Infinity;let yMax=0;let iFiveYearsAgo=0;tm.forEach(([ts,v],i)=>{const m=moment_default()(ts).utc();const isAfterDayAgo=m.isAfter(this.t.dayAgo);const isBeforeDayAgo=m.isBefore(this.t.dayAgo);const isBeforeWeekAgo=m.isBefore(this.t.weekAgo);const isBeforeMonthAgo=m.isBefore(this.t.monthAgo);const isBeforeMonth3Ago=m.isBefore(this.t.month3Ago);const isBeforeMonth6Ago=m.isBefore(this.t.month6Ago);const isBeforeYearAgo=m.isBefore(this.t.yearAgo);const isBeforeFiveYearsAgo=m.isBefore(this.t.fiveYearsAgo);const isBeforeYTD=m.isBefore(this.t.ytd);if(isAfterDayAgo){if(v<yMin){yMin=v}if(v>yMax){yMax=v}}if(isBeforeDayAgo){dayAgoValue=v}if(isBeforeWeekAgo){weekAgoValue=v}if(isBeforeMonthAgo){monthAgoValue=v}if(isBeforeMonth3Ago){month3AgoValue=v}if(isBeforeMonth6Ago){month6AgoValue=v}if(isBeforeYearAgo){yearAgoValue=v}if(isBeforeYTD){ytdValue=v}if(isBeforeFiveYearsAgo){iFiveYearsAgo=i;fiveYearsAgoValue=v}currentValue=v;if(valueMin===0||v<valueMin)valueMin=v});const firstVal=tm[0]&&Number(tm[0][1])||0;this.setState({chartData:tm.slice(iFiveYearsAgo),valueMin,valueNow:currentValue,valueDayAgo:dayAgoValue,valueWeekAgo:weekAgoValue,valueMonthAgo:monthAgoValue,value3MonthAgo:month3AgoValue,value6MonthAgo:month6AgoValue,valueYearAgo:yearAgoValue,valueFiveYearsAgo:fiveYearsAgoValue,valueYTD:ytdValue,initialValue:firstVal,yMin,yMax},()=>this.renderChart());setTimeout(()=>{this.setPcntChange(this.state.rangeSelection)},0)})}setPcntChange(range){var _a;if(range===null)return;const{chartData}=this.state;let pcnt=0;let baseVal=0;let xMin=0;const xMax=chartData&&((_a=chartData[chartData.length-1])==null?void 0:_a[0])||0;const{valueNow,valueDayAgo,valueWeekAgo,valueMonthAgo,value3MonthAgo,valueYearAgo,valueFiveYearsAgo,valueYTD,initialValue,valueMin}=this.state;switch(range){case 0:{baseVal=valueDayAgo||valueMin;xMin=this.t.dayAgo.valueOf();break}case 1:{baseVal=valueWeekAgo||valueMin;xMin=this.t.weekAgo.valueOf();break}case 2:{baseVal=valueMonthAgo||valueMin;xMin=this.t.monthAgo.valueOf();break}case 3:{baseVal=value3MonthAgo||valueMin;xMin=this.t.month3Ago.valueOf();break}case 4:{baseVal=valueYearAgo||valueMin;xMin=this.t.yearAgo.valueOf();break}case 5:{baseVal=valueYTD||valueMin;xMin=this.t.ytd.valueOf();break}case 6:{baseVal=valueFiveYearsAgo||valueMin;xMin=this.t.fiveYearsAgo.valueOf();break}}pcnt=this.calcPcnt(baseVal);const usdChange=this.calcChange(baseVal);xMin=Math.max(xMin,0);this.setState({usdChange,pcntChange:pcnt,rangeSelection:range,xMin,xMax},()=>{if(this.chart){this.chart.xAxis[0].setExtremes(xMin,xMax);if(this.chart.rangeSelector){this.chart.rangeSelector.clickButton(range)}this.chart.redraw()}})}xAxisPlotLines(){this.calcXevents();const verticalLines=[];const depositLineColor="#55ff76";const depositGrad={linearGradient:[0,700,0,0],stops:[[0,"#FFFFFF"],[1,depositLineColor]]};for(const xev of this.xEventDepositVals){verticalLines.push({color:depositGrad,dashStyle:"ShortDot",width:1,value:xev})}const withdrawLineColor="#ffb7db";const withdrawGrad={linearGradient:[0,0,0,600],stops:[[0,"#FFFFFF"],[1,withdrawLineColor]]};for(const xev of this.xEventWithdrawVals){verticalLines.push({color:withdrawGrad,dashStyle:"ShortDot",width:1,value:xev})}return verticalLines}getUSDValue(){const{balances}=this.props;if(!balances||!balances)return 0;const tokensValue=balances.reduce((sum,token)=>{const exp=new(bignumber_default())(PriceChart_pow(10,+token.decimals));const bn=new(bignumber_default())(token.balance);const balance=bn.div(exp);const value=balance.mul(token.price_usd||0);return sum+value.toNumber()},0);return numeral_default()(tokensValue).format("$0,0.00")}render(){const{valueNow,valueDayAgo,valueWeekAgo,valueMonthAgo,pcntChange}=this.state;const{wallet,isDesktop}=this.props;const pctnChangeFormatted=!isNaN(+pcntChange)?numeral_default()(Math.abs(pcntChange)).format("0,0.00%"):0;const rangeColorStyle=change2=>{return+change2===0?"rgba(0,0,0,.85)":+change2>0?"#00be90":"#ed5f47"};const stats=react_default().createElement(Stats,null,react_default().createElement(Stat,null,react_default().createElement(StatValue,{positive:this.state.usdChange>0,negative:this.state.usdChange<0},+pcntChange>0&&react_default().createElement(Arrs,null,"\u25B2"),+pcntChange<0&&react_default().createElement(Arrs,null,"\u25BC"),pctnChangeFormatted)));const change=react_default().createElement(ChangeRow,null,react_default().createElement(ChangeLabel,null,this.state.xMin&&`${moment_default()(this.state.xMin).format("MM/DD/YY")}`,` - `,this.state.xMax&&`${moment_default()(this.state.xMax).format("MM/DD/YY")}`),react_default().createElement(Change,{positive:this.state.usdChange>0,negative:this.state.usdChange<0},this.state.usdChange>0&&"+",numeral_default()(this.state.usdChange).format("$0,00.00")," ","(",+pcntChange>0&&react_default().createElement(Arrs,null,"\u25B2"),+pcntChange<0&&react_default().createElement(Arrs,null,"\u25BC"),pctnChangeFormatted,")"));return react_default().createElement(PriceChart_Container,null,change,react_default().createElement("div",{id:"chart-container",style:{position:"absolute",top:"0",left:"0",right:"0",bottom:"0"}},react_default().createElement(BeatLoader_default(),{css:"position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); opacity:0.5;",color:"grey",size:20})))}}const PriceChart_Container=styled_components_browser_esm.ZP.div` 413 position: relative; 414 width: 100%; 415 padding: 0; 416 margin: 0; 417 padding-top: 2px; 418 // z-index: 1; 419 // height: 100%; 420`;const PriceChart_Header=styled_components_browser_esm.ZP.div` 421 display: flex; 422 height: 40px; 423 justify-content: space-between; 424 margin-bottom: .5rem; 425 align-items: center; 426 427 ${p=>p.hideStats&&` 428 @media(max-width: 1024px) { 429 display: none; 430 } 431 `} 432`;const ChangeRow=styled_components_browser_esm.ZP.div` 433 z-index: 1; 434 position: relative; 435 top: -25px; 436 display: flex; 437 justify-content: space-between; 438 align-items: center; 439 padding: 0 15px; 440 441 @media(min-width: 1024px) { 442 top: -17px; 443 } 444`;const ChangeLabel=styled_components_browser_esm.ZP.div``;const Change=styled_components_browser_esm.ZP.div` 445 font-weight: 500; 446 ${p=>p.positive&&`color: ${p.theme.colors.positiveValueGreen};`} 447 ${p=>p.negative&&`color: ${p.theme.colors.negativeValueRed};`} 448`;const Title=styled_components_browser_esm.ZP.div` 449 color: ${p=>p.theme.colors.blueDarkFont}; 450 font-weight: 500; 451 font-size: 1.5em; 452 453 @media (max-width: 1024px) { 454 display: none; 455 } 456`;const Stats=styled_components_browser_esm.ZP.div` 457 display: flex; 458 justify-content: space-around; 459 z-index: 10; 460 position: absolute; 461 top: 8px; 462 right: 3; 463 @media (max-width: 1024px) { 464 top: 10px; 465 } 466 @media (max-width: 1024px) and (min-height: 800px) { 467 right: 10; 468 } 469`;const Stat=styled_components_browser_esm.ZP.div` 470 display: flex; 471 flex-direction: column; 472 margin: 0 20px; 473 flex: 0 0 40px; 474 color: ${p=>p.theme.colors.blueDarkFont}; 475 476 &:last-child { 477 margin-right: 5px; 478 } 479 480 @media(max-width: 768px) { 481 margin: 0 auto; 482 } 483`;const Arrs=styled_components_browser_esm.ZP.span` 484 vertical-align: 1px; 485 font-size: 0.7rem; 486 margin: 4px 1px 0 1px; 487`;const StatLabel=styled_components_browser_esm.ZP.div` 488 font-size: 10px; 489 color: hsl(0,0%,60%); 490 font-weight: 400; 491 text-transform: uppercase; 492`;const StatValue=styled_components_browser_esm.ZP.div` 493 font-size: 1.2rem; 494 font-weight: 500; 495 display: flex; 496 @media(max-width: 1024px) { 497 font-size: 1rem; 498 } 499 ${p=>p.positive&&`color: ${p.theme.colors.positiveValueGreen};`} 500 ${p=>p.negative&&`color: ${p.theme.colors.negativeValueRed};`} 501`;const Green=styled_components_browser_esm.ZP.span` 502 color: green; 503`;const Red=styled_components_browser_esm.ZP.span` 504 color: red; 505`;const PriceChart_mapStateToProps=state=>({wallet:state.wallet.wallet,savingsWallet:selectors.selectWyreWalletAsBalances(state),savingsWalletRaw:state.wyre.wallet,tokens:state.wallet.tokens,isDesktop:state.app.windowWidth>
5051024,mmAccount:state.wallet.moneyMarketAccount,txHistoryBals:(0,activity_selectors.selectTransactionDeltas)(state)[0],earliestTimestamp:Number((0,activity_selectors.selectTransactionDeltas)(state)[1]),depositWithdrawDeltas:(0,activity_selectors.selectTransactionDeltas)(state)[2]});const PriceChart_mapDispatchToProps=dispatch=>(0,redux.DE)({fetchToken:fetch_token.ZP,fetchTransactions:fetch_transactions.Z,fetchWyreWalletTransfers:fetch_wallet_transfers.Z,fetchSavingsAccruals:fetch_savings_accruals.Z},dispatch);const Overview_PriceChart=(0,es.$j)(PriceChart_mapStateToProps,PriceChart_mapDispatchToProps)(PriceChart);var lib_achievements=__webpack_require__(75232);var analytics=__webpack_require__(33397);var circlecoin_achievements=__webpack_require__(93999);var modal=__webpack_require__(96680);;function getPcntComplete(completed,totalAchievements){if(!completed||!totalAchievements){return 0}return Math.ceil(completed/totalAchievements*100)}function EarnCC(props){if(!(props.achievements||[]).length){return Loader()}const{geoipCountry,rewards}=props;const achievements=(0,lib_achievements.nH)((0,lib_achievements.xA)(rewards,geoipCountry,props.achievements));const achievementsCompleted=achievements.filter(a=>a.complete);const percentageCompleted=getPcntComplete(achievementsCompleted.length,achievements.length);const percentageCompletedStr=`${percentageCompleted}%`;const progressBar=react_default().createElement(ProgressBar,null,react_default().createElement(PercentComplete,{title:"Percent Completed"},percentageCompletedStr),react_default().createElement(ProgressBarShader,{progress:percentageCompleted}));return react_default().createElement(EarnContainer,null,react_default().createElement(Subtitle,{style:{paddingLeft:"5px",display:"flex"}},"Earn Crypto",progressBar),react_default().createElement(AchievementsContainer,null,achievements.map(achievement=>{const hasYieldWallet=!!props.wyreWallet&&props.wyreWallet.type==="SAVINGS";if(circlecoin_achievements.r1.includes(achievement.id)&&!hasYieldWallet){return null}return react_default().createElement(AchievementRow,{key:achievement.id},react_default().createElement(AchievementIcon,{className:`icon-${achievement.iconId}`}),react_default().createElement(AchievementTitle,null,achievement.title),react_default().createElement(AchievementAction,null,achievement.complete&&!achievement.isRepeatable?react_default().createElement(CompleteIcon,null):react_default().createElement(AchievementCTA,{onClick:()=>{const{queryParams,redirect}=props;const params=new URLSearchParams(queryParams);params.set("achievement",achievement.id);redirect({search:params.toString()});const label=`earn: ${achievement.id}`;(0,analytics.qe)(analytics.Vy.CLICK_ACHIEVEMENT,{label,category:"Rewards"})}},"Start")))})))}const OverviewAchievements_mapStateToProps=state=>({geoipCountry:state.app.geoipCountry,fetchingProfile:state.user&&state.user.isFetchingProfile,fetchingAchievements:state.earn&&state.earn.isFetchingAchievements,queryParams:state.router.location&&state.router.location.search||"",rewards:state.earn.rewards,wyreWallet:state.wyre.wallet});const OverviewAchievements_mapDispatchToProps=dispatch=>({redirect:to=>dispatch((0,esm_actions.VF)(to)),setModalView:v=>dispatch(modal.Nw.push(v))});const OverviewAchievements=(0,es.$j)(OverviewAchievements_mapStateToProps,OverviewAchievements_mapDispatchToProps)(EarnCC);var client_redux=__webpack_require__(25255);var modal_actions=__webpack_require__(72187);var modal_types=__webpack_require__(38205);var user=__webpack_require__(17234);;function OverviewIntro_OverviewIntro({modalPush,setModalData,redirect,contacts,eth,btc,isSecure,hasDevice,queryParams,isEmbeddedInMobileApp,needsVerification,usdBalance}){const user2=(0,client_redux.useSelector)(s=>s.user.profile);const setAchievementView=view=>{const params=new URLSearchParams(queryParams);view?params.set("achievement",view):params.delete("achievement");redirect({search:params.toString()})};return react_default().createElement(react_default().Fragment,null,react_default().createElement(OverviewIntro.OverviewIntro,null,react_default().createElement(OverviewIntro.Content,{style:{paddingBottom:"2.5rem"}},react_default().createElement(OverviewIntro.OverviewIntroHeader,null,react_default().createElement("img",{src:"https://cdn.coincircle.com/img/humaans.svg"})),react_default().createElement(OverviewIntro.Headline,null,"Welcome to your smart wallet."),react_default().createElement(OverviewIntro.Detail,null,"Here are some shortcuts to get started."),react_default().createElement(OverviewIntro.ButtonGroup,null,react_default().createElement(OverviewIntro.Button,{onClick:()=>
505{if(isEmbeddedInMobileApp){return window.rn.postMessage(window.rn.MessageTypes.START_CONTACTS_IMPORT_EARN)}setAchievementView("SEND_EMAIL_INVITES_ACHIEVEMENT_GMAIL")}},react_default().createElement("span",null,"1"),"Award Friends ",constants.CIRCLE_COIN_NAME),react_default().createElement(OverviewIntro.Button,{onClick:()=>{if(isSecure){if(!hasDevice){return modalPush(modal_types.k.ACCOUNT_REQUIREMENTS)}if((user2==null?void 0:user2.allowedPlusWalletType)==="NONE"){return redirect("/wallet/assets/usd?action=deposit")}return redirect("/wallet/yield/dai?action=deposit")}setModalData("This feature requires an account password.");modalPush(modal_types.k.SET_INIT_PASSWORD)}},react_default().createElement("span",null,"2"),`Fund Your ${constants.COMPANY_NAME} Wallet`),react_default().createElement(OverviewIntro.Button,{onClick:()=>{modalPush(modal_types.k.WALLET_RECEIVE)}},react_default().createElement("span",null,"3"),"Request Payment")),react_default().createElement(OverviewIntro.BorrowLink,null,"Interested in Borrowing Crypto?",react_default().createElement("span",{style:{textDecoration:"underline",marginLeft:"5px",cursor:"pointer"},onClick:()=>redirect("/wallet/lending/borrow")},"Click Here")))))}const OverviewIntro_mapStateToProps=state=>({isSecure:state.user.isSecured!==false,hasDevice:state.user.profile&&state.user.profile.device!==null,queryParams:state.router.location&&state.router.location.search,isEmbeddedInMobileApp:state.app.isEmbeddedInMobileApp,needsVerification:user.ZP.selectors.selectIsIDVerificationRequired(state),usdBalance:(0,selectors.selectUSDBalance)(state)});const OverviewIntro_mapDispatchToProps=dispatch=>({redirect:to=>dispatch((0,esm_actions.VF)(to)),modalPush:v=>dispatch(modal_actions.Z.push(v)),setModalData:v=>dispatch(modal_actions.Z.setModalData(v))});const Overview_OverviewIntro=(0,es.$j)(OverviewIntro_mapStateToProps,OverviewIntro_mapDispatchToProps)(OverviewIntro_OverviewIntro);var fetch_contacts=__webpack_require__(87992);var UI=__webpack_require__(61280);var CircleCoin_EarnCC=__webpack_require__(47921);var fetchAchievements=__webpack_require__(3705);var fetchMobileAchievements=__webpack_require__(64851);var get_vars=__webpack_require__(73703);var Lending=__webpack_require__(2255);;var Overview_pow=Math.pow;var Overview_async=(__this,__arguments,generator)=>{return new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}};var rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}};var step=result=>{return result.done?resolve(result.value):Promise.resolve(result.value).then(fulfilled,rejected)};step((generator=generator.apply(__this,__arguments)).next())})};class Overview extends react_default().Component{constructor(){super(...arguments);this.desktopPieContainer=null;this.state={tabViewIndex:0,achievements:[],pieHeight:null,pieWidth:null};this.handleTabChange=(event,value)=>{this.setState({tabViewIndex:value})};this.renderEarnAchievements=()=>{if(this.props.isFetchingContacts){return react_default().createElement(UI.aN,null)}return react_default().createElement(CircleCoin_EarnCC.Z,{contacts:this.props.contacts,showDescription:false})}}componentDidMount(){return Overview_async(this,null,function*(){const mobileVars=(0,get_vars.rD)();if(!this.props.achievements.length||mobileVars.inApp){if(mobileVars.inApp){this.props.fetchMobileAchievements()}else{this.props.fetchAchievements()}}if(!this.props.contacts.length){this.props.fetchContactsState()}})}isMemberLessThan30Days(){const{profile}=this.props;if(profile&&profile.memberSince){const dateThreshold=new Date(profile.memberSince).getTime()+30*24*60*60*1e3;const today=new Date().getTime();return today<=dateThreshold}return false}filterAchievements(achievmentsToFilter){const{isMobile}=this.props;return achievmentsToFilter.filter(a=>{return a.mobile===isMobile||a.desktop!==isMobile})}calcMMValue(asset){const supply=parseFloat(asset.supplyBalance);return supply}getTokenBalance(token){const{mmAccount,wyreBalances}=this.props;let bal=+token.balance;if(Object.values(types.t).includes(token.symbol)){if(mmAccount&&mmAccount.assets&&mmAccount.assets.length){const assets=mmAccount.assets.filter(a=>a.symbol===token.symbol);if(assets&&assets.length){for(const asset of assets){const mmVal=this.calcMMValue(asset);const decimals=+token.decimals;bal+=decimals>0?mmVal*Overview_pow(10,decimals):mmVal}}}}if(token.contractAddress==="0x0"){const s=wyreBalances.find(b=>b.contractAddress==="SAVINGS:ETH");if(s){bal+=+token.decimals>0?s.decimaledBalance*Overview_pow(10,+token.decimals):s.decimaledBalance}}if(token.contractAddress==="bitcoin"){const s=wyreBalances.find(b=>b.contractAddress==="SAVINGS:BTC");if(s){bal+=+token.decimals>0?s.decimaledBalance*Overview_pow(10,+token.decimals):s.decimaledBalance}}if(token.isUSD){const s=wyreBalances.find(b=>b.contractAddress==="SAVINGS:DAI");if(s){bal+=+token.decimals>0?s.decimaledBalance*Overview_pow(10,+token.decimals):s.decimaledBalance}}return bal.toString()}getWalletValue(balances){const tokensValue=balances.reduce((sum,token)=>{const exp=new(bignumber_default())(Overview_pow(10,+token.decimals));const tokenBalance=this.getTokenBalance(token);const bn=new(bignumber_default())(tokenBalance);const balance=bn.div(exp);const price=!token.isUSD?token.price_usd:1;const value=balance.mul(String(price||0));return sum+value.toNumber()},0);return numeral_default()(tokensValue).format("$0,0.00")}isChartRTG(){return this.props.balances&&this.props.wyreBalances&&this.props.mmAccount&&this.props.balances.length&&this.props.wyreBalances.length&&this.props.BTCPrice>0}render(){const{tabViewIndex}=this.state;const{isMobile,windowWidth,pathname,wallet,wallets,balances,allBalances}=this.props;const btcWallet=wallets.find(w=>w.protocol==="BTC");const mobileVars=(0,get_vars.rD)();const sortedAchievements=(0,lib_achievements.nH)(this.props.achievements);const filteredAchievements=this.filterAchievements(sortedAchievements);const isDesktop=windowWidth>768;const overviewPathTest=/^\/wallet\/overview/g.test(pathname);const oneBalanceHasAssetId=allBalances.some(b=>!!b.assetId);const noRenderPriceChart=!isDesktop&&!overviewPathTest;const willRenderPriceChart=!noRenderPriceChart&&oneBalanceHasAssetId;const holdings=allBalances.reduce((sum,b)=>
505{if(isNaN(Number(b.balance))){return sum}return sum+ +b.balance},0);const hasHoldings=holdings>0;const walletValue=this.getWalletValue(balances)||"";const iPhoneX=mobileVars.inApp&&mobileVars.isIphoneX;const isUSDOnly=this.props.onlyHasUSD;const willRenderHoldingsChart=()=>{let usdHoldingsCount=0;balances.map(token=>{if(+token.balance>0&&token.price_usd)usdHoldingsCount++});return usdHoldingsCount>1};let containerStyle={};if(!isDesktop){containerStyle={paddingTop:0}}if(this.props.inMobileApp||isMobile){containerStyle={paddingTop:0,maxHeight:"calc(100vh - 60px)",overflow:"scroll"}}if(!this.props.walletBalanceValue||isUSDOnly){return react_default().createElement(Overview_OverviewIntro,{contacts:this.props.contacts,btc:this.props.balances.find(b=>b.symbol==="BTC"),eth:this.props.balances.find(b=>b.symbol==="ETH")})}return react_default().createElement(Container,{style:containerStyle},react_default().createElement(Header,{iphonex:mobileVars.isIphoneX},react_default().createElement("h2",{style:{color:"rgb(28, 46, 91)",fontWeight:500,margin:0,fontSize:"20px"}},"Portfolio Value"),react_default().createElement(OverviewBalance,null,numeral_default()(this.props.walletBalanceValue).format("$0,0.00"))),react_default().createElement(LineChartContainer,null,willRenderPriceChart&&this.isChartRTG()&&react_default().createElement(Overview_PriceChart,{balances:this.props.balances,windowWidth,pathname,walletValue})||react_default().createElement(BeatLoader_default(),{css:"margin: auto; opacity:0.5;",color:"grey",size:20})),!isDesktop&&this.isChartRTG()&&react_default().createElement(PieContainer,{style:{display:"flex",alignItems:"center",flexDirection:"column",justifyContent:"center",flex:"0 0 50%",maxWidth:"none",maxHeight:"100%"},ref:ref=>{if(ref&&this.state.pieHeight!==ref.clientHeight){this.setState({pieHeight:ref.clientHeight,pieWidth:ref.clientWidth})}}},react_default().createElement(Subtitle,{style:{marginBottom:35,position:"absolute",top:"10px",left:"10px"}},"Holdings"),react_default().createElement(Overview_PieChart,{balances,isDesktop:false,height:this.state.pieHeight,width:this.state.pieWidth})),tabViewIndex===1&&!isDesktop&&react_default().createElement(Lending.default,null),isDesktop&&react_default().createElement(Row,{style:{minHeight:"350px"}},isDesktop&&hasHoldings&&!!this.props.walletBalanceValue&&this.isChartRTG()&&react_default().createElement(PieContainer,{style:{display:"flex",alignItems:"center",flexDirection:"column",justifyContent:"center",flex:"0 0 50%",maxWidth:"none",maxHeight:"100%"},ref:ref=>{if(ref&&this.state.pieHeight!==ref.clientHeight){this.setState({pieHeight:ref.clientHeight,pieWidth:ref.clientWidth})}}},react_default().createElement(Subtitle,{style:{marginBottom:35,position:"absolute",top:"10px",left:"10px"}},"Holdings"),this.state.pieHeight&&this.state.pieWidth&&this.isChartRTG()&&react_default().createElement(Overview_PieChart,{balances,isDesktop:true,height:this.state.pieHeight,width:this.state.pieWidth})||null)||null,isDesktop&&!!this.props.walletBalanceValue&&react_default().createElement(OverviewAchievements,{achievements:filteredAchievements})||null,isDesktop&&!this.props.walletBalanceValue&&this.renderEarnAchievements()))}}const Overview_mapStateToProps=state=>({isMobile:state.app.windowWidth<=768,inMobileApp:state.app.isEmbeddedInMobileApp,windowWidth:state.app.windowWidth,pathname:state.router.location&&state.router.location.pathname||"",achievements:state.earn&&state.earn.achievements,contacts:state.invite&&state.invite.contacts,isFetchingContacts:state.invite&&state.invite.isFetchingContacts,wallet:state.wallet.wallet,wallets:state.wallet.wallets,mmAccount:state.wallet.moneyMarketAccount,walletBalanceValue:selectors.selectWalletBalanceValue(state),walletUSDValue:selectors.selectUSDBalance(state),mmUSDValue:selectors.selectMoneyMarketBalanceValue(state),wyreBalances:selectors.selectWyreWalletAsBalances(state),profile:state.user&&state.user.profile,allBalances:selectors.selectBalancesWithSavings(state),balances:selectors.selectBalances(state),BTCPrice:selectors.selectBTCUSDPrice(state),onlyHasUSD:selectors.selectOnlyHasUSD(state)});const Overview_mapDispatchToProps=d=>(0,redux.DE)({setActiveToken:actions.Z.setActiveToken,fetchAchievements:fetchAchievements.ZP,fetchMobileAchievements:fetchMobileAchievements.Z,fetchContactsState:fetch_contacts.ZP},d);const Overview_Overview=(0,es.$j)(Overview_mapStateToProps,Overview_mapDispatchToProps)(Overview);;const components_Overview=Overview_Overview},61280:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{aN:()=>Loader,Xk:()=>Paper,mQ:()=>Tabs});var react=__webpack_require__(67294);var styled_components_browser_esm=__webpack_require__(71893);var BeatLoader=__webpack_require__(18498);var BeatLoader_default=__webpack_require__.n(BeatLoader);var UI=__webpack_require__(74315);var get_vars=__webpack_require__(73703);;function _getHeaderPadding(){const vars=getVars();if(vars.inApp&&vars.sys&&vars.sys.IOS){return vars.isIphoneX?30:10}return null}function _getHeaderHeight(){const vars=getVars();if(vars.inApp&&vars.sys&&vars.sys.IOS){return vars.isIphoneX?"5rem":"3.5rem"}return null}function getTokenDetailVars(){return{header:_getHeaderPadding(),height:_getHeaderHeight()}}function getIPhoneX(){const vars=getVars();return{isIPhoneX:vars.inApp&&vars.sys&&vars.sys.IOS&&vars.isIphoneX}}function getAndroid(){const vars=(0,get_vars.rD)();
505return{isDroid:vars.inApp&&vars.sys&&!vars.sys.IOS&&vars.sys.ANDROID}};const isDroid=getAndroid();const Tabs={Header:styled_components_browser_esm.ZP.div` 506 display: flex; 507 padding: 0em 1em; 508 margin-bottom: 2rem; 509 @media (max-width: 1024px) { 510 margin-bottom: 1rem; 511 } 512 @media(max-width: 320px) { 513 font-size: 12px; 514 } 515`,Tab:styled_components_browser_esm.ZP.div` 516 color: #d9d9d9; 517 cursor: pointer; 518 transition: .2s; 519 width: auto; 520 font-weight: 500; 521 padding: 0.5em 1em; 522 border-bottom-width: 2px; 523 border-bottom-style: solid; 524 border-bottom-color: #ffffff; 525 margin: 0 2; 526 text-align: center; 527 &.active { 528 color: #508DC0; 529 border-color: #508DC0; 530 }; 531 &:hover:not(.active) { 532 color: #9b9b9b; 533 border-color: #9b9b9b; 534 }; 535 @media(max-width: 420px) { 536 max-width: 90%; 537 } 538`,Close:styled_components_browser_esm.ZP.div` 539 font-size: 18px; 540 position: absolute; 541 right: 10px; 542 top: 10px; 543 cursor: pointer; 544 color: hsl(0,0%,15%); 545 @media (min-width: 1024px) { 546 display: none; 547 } 548`,BtnCopy:styled_components_browser_esm.ZP.button` 549 position: relative; 550 display: inline-block; 551 width: 20px; 552 height: 18px; 553 outline: none; 554 border: none; 555 color: hsl(198, 71%, 43%); 556 -webkit-transition: color 150ms ease-out; 557 transition: color 150ms ease-out; 558 background: none; 559 &:hover { color:#118fbd } 560 &[data-clipped="true"]:after { opacity:1 } 561 &:before { 562 position:absolute; 563 top:0; 564 left:0; 565 width:100%; 566 text-align:center; 567 line-height:1.4rem; 568 font-size: 0.85rem; 569 cursor: pointer; 570 } 571 &:after { 572 content: 'Address Copied!'; 573 position: absolute; 574 top: -2.35rem; 575 left: calc(100% - 6.5rem); 576 padding: 0 .5rem; 577 border: 1px solid hsla(0, 0%, 0%, 0.2); 578 border-radius: 3px; 579 line-height: 2rem; 580 color: hsl(0, 0%, 100%); 581 font-weight: 400; 582 font-family: 'proxima-nova',sans-serif; 583 font-size: 0.775rem; 584 white-space: nowrap; 585 z-index: 4; 586 pointer-events: none; 587 -webkit-transition: opacity 150ms ease-out; 588 transition: opacity 150ms ease-out; 589 background: hsla(0, 0%, 0%, 0.9); 590 opacity: 0; 591 } 592`,Title:styled_components_browser_esm.ZP.div` 593 margin: 15px 0 15px 25px; 594 font-weight: 300; 595 color: hsl(0, 0%, 50%); 596 `,Row:styled_components_browser_esm.ZP.div` 597 min-height: 40%; 598 `,Paginator:styled_components_browser_esm.ZP.div` 599 margin-top: auto; 600 display: flex; 601 align-items: center; 602 justify-content: space-between; 603 padding: 10px 15px; 604 color: hsl(0, 0%, 40%); 605`,PagePrev:styled_components_browser_esm.ZP.span.attrs({className:"icon-caret-left"})` 606 cursor: pointer; 607`,PageNext:styled_components_browser_esm.ZP.span.attrs({className:"icon-caret-right"})` 608 cursor: pointer; 609`,PageDetails:styled_components_browser_esm.ZP.div` 610 font-size: 14px; 611 margin: 0 auto; 612`};const Paper=styled_components_browser_esm.ZP.div` 613 position: relative; 614 display: flex; 615 flex-direction: column; 616 box-shadow: none; 617 border: 1px solid hsl(0, 0%, 90%); 618 border-left: none; 619 border-right: none; 620 background: #ffffff; 621 font-weight: 200; 622 flex: 1; 623 min-width: 0; 624 align-self: flex-start; 625 padding-top: 0rem; 626 width: 100%; 627 @media (min-width: 1024px) { 628 padding-top: 1.5rem; 629 } 630 @media(max-width: 768px) { 631 height: ${isDroid?"100%":"100vh"}; 632 } 633`;const PaperMobileHeaderBar=styled_components_browser_esm.ZP.div` 634 position: relative; 635 display: flex; 636 flex-direction: column; 637 box-shadow: none; 638 border: 1px solid hsl(0, 0%, 90%); 639 border-left: none; 640 border-right: none; 641 background: #ffffff; 642 font-weight: 200; 643 flex: 1; 644 min-width: 0; 645 align-self: flex-start; 646 padding-top: 0rem; 647`;const Loader=()=>{return react.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-around",flexGrow:2,padding:"30px",margin:"auto",minHeight:"40%"}},react.createElement(BeatLoader_default(),{color:"#BDBDBD",size:30,margin:"2px"}))};const noStats=()=>{return React.createElement(Detail.Wrapper,null,React.createElement(Detail.Body,null,React.createElement(Detail.Empty,null,React.createElement(Detail.EmptyMessage,null,"No stats for the selected token."))))}}}]); 648 649//# sourceMappingURL=4101.7f03485bef6f4021110a.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.