{"version":3,"file":"quote.dac2ce8d.js","mappings":"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AAA,EAAaC,aACnBC,WAAY,GACZtkB,SAAUukB,EAAAA,GAASC,OAErB,CACEpY,KAAMqY,EAAAA,EAAaJ,aACnBC,WAAY,GACZtkB,SAAUukB,EAAAA,GAASC,UAK3BE,EAAAA,GAAAA,sBAAgC36B,OAAOsN,kBAAmB2sB,EAAkBC,EAAO,CAAEA,aAASlhC,EAChG,CAEA,OAAOgH,OAAOsN,iBAChB,+ECjCA,MAoBastB,EAAmB,CAC9B5/B,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFmE,UAAW,WAEP07B,EAAmB,CAAE7/B,OAAQ4/B,EAAiB5/B,OAAOiW,QAAQue,UAAWrwB,UAAWy7B,EAAiBz7B,WACpG27B,EAAc,CAAE9/B,OAAQ4/B,EAAiB5/B,OAAOiW,MAAM,EAAG,IAAIue,UAAWrwB,UAAWy7B,EAAiBz7B,WACpG47B,EAAgB,CAAE//B,OAAQ4/B,EAAiB5/B,OAAOiW,MAAM,IAAK9R,UAAWy7B,EAAiBz7B,WA49DzF67B,EAA0B,CAC9BhgC,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFmE,UAAW,QAg/BA87B,EAAiD,CAC5D,CAAC37B,EAAAA,GAAQ47B,iBAAkBN,EAC3B,CAACt7B,EAAAA,GAAQC,SAAUq7B,EACnBO,GAAIP,EACJQ,IAAKR,EACLS,IAAKT,EACLU,IAAKV,EACLW,IAAKX,EACLY,QA97HmB,CACnBxgC,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFmE,UAAW,WAo9FXs8B,IAAKZ,EACLa,KAAMb,EACNc,KAAMd,EACNe,IAAKf,EACLgB,IAAKhB,EACLiB,KAAMf,EACNgB,OAAQnB,EACRoB,OAAQlB,EACRmB,KAAMrB,EACNsB,UA39FuB,CACvBlhC,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFmE,UAAW,WAi/DXg9B,cAAevB,EACfwB,cAAexB,GAGJ17B,EAAuD,CAClE,CAACI,EAAAA,GAAQ47B,iBAAkBF,EAC3B,CAAC17B,EAAAA,GAAQC,SAAUy7B,EACnBG,GAAIH,EACJI,IAAKJ,EACLK,IAAKL,EACLM,IAAKN,EACLO,IAAKP,EACLQ,QA7gC0B,CAC1BxgC,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFmE,UAAW,QAmCXs8B,IAAKT,EACLU,KAAMV,EACNW,KAAMX,EACNY,IAAKZ,EACLa,IAAKb,EACLc,KAAMd,EACNe,OAAQf,EACRgB,OAAQhB,EACRiB,KAAMjB,EACNkB,UAAWlB,EACXmB,cAAenB,EACfoB,cAAepB,GAGJqB,EAziIiB,CAC5BrhC,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFmE,UAAW,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","sources":["webpack://@finviz/website/./js/app/backtest/utils.tsx","webpack://@finviz/website/./js/app/bubbles/selects.ts","webpack://@finviz/website/./js/app/bubbles/utils.ts","webpack://@finviz/website/./js/app/quote/utils.ts","webpack://@finviz/website/./js/app/quote/QuoteContext.tsx","webpack://@finviz/website/./js/app/quote/hooks/use-chart-layout-width-watch.ts","webpack://@finviz/website/./js/app/quote/components/Portal.tsx","webpack://@finviz/website/./js/main/hooks/useToggleStaticElement.ts","webpack://@finviz/website/./js/app/quote/components/Navigation/QuoteLinksWrapper.tsx","webpack://@finviz/website/./js/app/quote/hooks/use-chart-timeframe-path-watch.ts","webpack://@finviz/website/./js/app/quote/components/Navigation/QuoteLinkComponent.tsx","webpack://@finviz/website/./js/app/quote/components/Navigation/CreateAlertLink.tsx","webpack://@finviz/website/./js/app/quote/components/Navigation/SaveToPortfolioLink.tsx","webpack://@finviz/website/./js/app/quote/Navigation.tsx","webpack://@finviz/website/./js/app/quote/QuoteChart.tsx","webpack://@finviz/website/./js/app/quote/components/ComparePerformance.tsx","webpack://@finviz/website/../node_modules/recharts/es6/cartesian/CartesianGrid.js","webpack://@finviz/website/./js/app/quote/components/InsiderTradingChart/constants.ts","webpack://@finviz/website/./js/app/quote/components/InsiderTradingChart/ChartTooltip.tsx","webpack://@finviz/website/./js/app/quote/components/InsiderTradingChart/InsiderVolumeBar.tsx","webpack://@finviz/website/./js/app/quote/components/InsiderTradingChart/InsiderTradingVolumeChart.tsx","webpack://@finviz/website/./js/app/quote/components/InsiderTradingChart/utils.ts","webpack://@finviz/website/./js/main/components/QuotePrice.tsx","webpack://@finviz/website/./js/app/quote/components/Price/hooks.ts","webpack://@finviz/website/./js/app/quote/components/Price/QuoteHeader.tsx","webpack://@finviz/website/../node_modules/date-fns/esm/isBefore/index.js","webpack://@finviz/website/./js/app/quote/components/barChart.tsx","webpack://@finviz/website/./js/app/quote/components/Statements/constants.ts","webpack://@finviz/website/./js/app/quote/components/Statements/statements.tsx","webpack://@finviz/website/./js/app/quote/components/StaticChartHeader.tsx","webpack://@finviz/website/./js/app/quote/components/fundamentalCharts.tsx","webpack://@finviz/website/./js/app/quote/hooks/use-stock-detail-updater.tsx","webpack://@finviz/website/./js/app/quote/modules/etf-holdings/async-modules.ts","webpack://@finviz/website/./js/app/quote/modules/etf-holdings/index.tsx","webpack://@finviz/website/./js/app/quote/index.tsx","webpack://@finviz/website/./js/app/quote/types.ts","webpack://@finviz/website/./js/app/shared/chartLayoutConfig.ts","webpack://@finviz/website/./js/app/shared/components/Ads.tsx","webpack://@finviz/website/./js/app/shared/getInitChartConfig.ts","webpack://@finviz/website/./js/app/shared/gradients.ts","webpack://@finviz/website/./js/main/components/ChipSwitch.tsx","webpack://@finviz/website/./js/main/components/delayed.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTableContext.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTableRow.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTable.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTableStickyColumnWrapper.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsWidget.tsx","webpack://@finviz/website/./js/main/components/financials-table/utils.ts","webpack://@finviz/website/./js/main/components/notification/hooks.ts","webpack://@finviz/website/./js/main/components/notification/notification-wrapper.tsx","webpack://@finviz/website/./js/main/components/notification/with-notification-context.tsx","webpack://@finviz/website/./js/main/components/notification/notification.tsx","webpack://@finviz/website/./js/main/hooks/use-check-non-idea-chart-missing-config.ts","webpack://@finviz/website/./js/main/hooks/use-window-size.tsx","webpack://@finviz/website/./js/main/hooks/useVisualViewport.ts","webpack://@finviz/website/./js/main/modules/charts/util.ts","webpack://@finviz/website/../node_modules/react-router-dom/dist/index.js","webpack://@finviz/website/../node_modules/recharts/es6/cartesian/Area.js","webpack://@finviz/website/../node_modules/recharts/es6/cartesian/ZAxis.js","webpack://@finviz/website/../node_modules/recharts/es6/util/ScatterUtils.js","webpack://@finviz/website/../node_modules/recharts/es6/cartesian/Scatter.js","webpack://@finviz/website/../node_modules/recharts/es6/chart/ComposedChart.js","webpack://@finviz/website/../node_modules/recharts/es6/component/ResponsiveContainer.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/5KB2YIDT.js","webpack://@finviz/website/../node_modules/@ariakit/react-core/esm/__chunks/JJ3MV4KB.js"],"sourcesContent":["export function round(n: number, places: number = 2) {\r\n return (+(Math.round(Number(n + 'e+' + places)) + 'e-' + places)).toFixed(places)\r\n}\r\n\r\nexport const format = {\r\n totalReturn: (totalReturn: number | string) => round(Number(totalReturn) * 100) + '%',\r\n maxDrawdown: (maxDrawdown: number | string) => round(Number(maxDrawdown) * 100) + '%',\r\n sharpeRatio: (sharpeRatio: number) => round(sharpeRatio),\r\n calmarRatio: (calmarRatio: number) => round(calmarRatio),\r\n CAGR: (CAGR: number) => round(CAGR * 100) + '%',\r\n cagr: (CAGR: number) => round(CAGR * 100) + '%',\r\n volatility: (volatility: number) => round(volatility * 100) + '%',\r\n numberOfTrades: (numberOfTrades: any) => numberOfTrades,\r\n positiveDays: (positiveDays: any) => positiveDays,\r\n negativeDays: (negativeDays: any) => negativeDays,\r\n bestMonth: (bestMonth: number) => round(bestMonth * 100) + '%',\r\n worstMonth: (worstMonth: number) => round(worstMonth * 100) + '%',\r\n}\r\n\r\nexport const figureSpace = ' '\r\n\r\nexport const BACKTEST_MIN_MAX_DATES = Object.freeze({\r\n min: new Date(1996, 5, 3),\r\n max: new Date(2023, 0, 31),\r\n})\r\n","import { SelectItem } from '../../main/components'\r\n\r\nexport type BubbleSelectOption = SelectItem & { format?: string }\r\n\r\nexport const ETF_MARKET_CAP_LABEL = 'Assets under management'\r\nexport const MARKET_CAP_VALUE = 'marketCap'\r\nexport const ETF_SECTOR_VALUE = 'financial'\r\nexport const ETF_INDUSTRY_IDS = [\r\n 'exchangetradedfund',\r\n 'closedendfunddebt',\r\n 'closedendfundequity',\r\n 'closedendfundforeign',\r\n]\r\n\r\nvar xys = [\r\n { value: 'sector', label: 'Sector' },\r\n { value: 'ticker', label: 'Ticker' },\r\n { value: 'order', label: 'Order' },\r\n { value: MARKET_CAP_VALUE, label: 'Market Capitalization' },\r\n { value: 'dividendYield', label: 'Dividend Yield', format: '%' },\r\n { value: 'payoutRatio', label: 'Payout Ratio', format: '%' },\r\n { value: 'employees', label: 'Employees' },\r\n { value: 'income', label: 'Income' },\r\n { value: 'sales', label: 'Sales' },\r\n { value: 'epsQoQ', label: 'EPS growth Q/Q', format: '%' },\r\n { value: 'epsYoY', label: 'EPS growth this Y/Y', format: '%' },\r\n { value: 'epsYoY1', label: 'EPS growth next Y/Y', format: '%' },\r\n { value: 'eps5Years', label: 'EPS growth past 5 years', format: '%' },\r\n { value: 'estLTGrowth', label: 'EPS growth long term est.', format: '%' },\r\n { value: 'salesQoQ', label: 'Sales growth Q/Q', format: '%' },\r\n { value: 'sales5Years', label: 'Sales growth past 5 years', format: '%' },\r\n { value: 'PE', label: 'P/E' },\r\n { value: 'forwardPE', label: 'Forward P/E' },\r\n { value: 'PEG', label: 'PEG' },\r\n { value: 'PS', label: 'P/S' },\r\n { value: 'PB', label: 'P/B' },\r\n { value: 'PC', label: 'P/C' },\r\n { value: 'PFCF', label: 'P/FCF' },\r\n { value: 'roi', label: 'ROI' },\r\n { value: 'roe', label: 'ROE' },\r\n { value: 'roa', label: 'ROA' },\r\n { value: 'grossMargin', label: 'Gross Margin', format: '%' },\r\n { value: 'operMargin', label: 'Operating Margin', format: '%' },\r\n { value: 'netMargin', label: 'Profit Margin', format: '%' },\r\n { value: 'curRatio', label: 'Current Ratio' },\r\n { value: 'quickRatio', label: 'Quick Ratio' },\r\n { value: 'ltdebtEq', label: 'Long Term Debt to Equity' },\r\n { value: 'debtEq', label: 'Total Debt to Equity' },\r\n { value: 'lastChange', label: 'Change', format: '%' },\r\n { value: 'changeOpen', label: 'Change from Open', format: '%' },\r\n { value: 'gap', label: 'Gap', format: '%' },\r\n { value: 'lastVolume', label: 'Volume' },\r\n { value: 'lastVolumeUsd', label: 'Volume USD' },\r\n { value: 'averageVolume', label: 'Average Volume' },\r\n { value: 'averageVolumeUsd', label: 'Average Volume USD' },\r\n { value: 'relativeVolume', label: 'Relative Volume' },\r\n { value: 'perf1w', label: '1 Week Performance', format: '%' },\r\n { value: 'perf4w', label: '1 Month Performance', format: '%' },\r\n { value: 'perf13w', label: '3 Month Performance', format: '%' },\r\n { value: 'perf26w', label: '6 Month Performance', format: '%' },\r\n { value: 'perf52w', label: '1 Year Performance', format: '%' },\r\n { value: 'perfYtd', label: 'Year To Date Performance', format: '%' },\r\n { value: 'volatility1w', label: 'Weekly Volatility', format: '%' },\r\n { value: 'volatility4w', label: 'Monthly Volatlity', format: '%' },\r\n { value: 'beta', label: 'Beta' },\r\n { value: 'low52w', label: '52-Week Low', format: '%' },\r\n { value: 'high52w', label: '52-Week High', format: '%' },\r\n { value: 'sma20', label: 'Simple Moving Average 20', format: '%' },\r\n { value: 'sma50', label: 'Simple Moving Average 50', format: '%' },\r\n { value: 'sma200', label: 'Simple Moving Average 200', format: '%' },\r\n { value: 'rsi', label: 'Relative Strength Index 14' },\r\n { value: 'insiderOwn', label: 'Insider Ownership', format: '%' },\r\n { value: 'insiderTrans', label: 'Insider Transactions', format: '%' },\r\n { value: 'instOwn', label: 'Institutional Ownership', format: '%' },\r\n { value: 'instTrans', label: 'Institutional Transactions', format: '%' },\r\n { value: 'shortInterestShare', label: 'Short Interest Share', format: '%' },\r\n { value: 'shortInterestRatio', label: 'Short Interest Ratio' },\r\n { value: 'consRecom', label: 'Analyst Recommendation' },\r\n { value: 'targetPrice', label: 'Target Price', format: '%' },\r\n]\r\n\r\nvar sizes = [\r\n { value: 'const', label: 'Constant' },\r\n { value: 'marketCap', label: 'Market Capitalization' },\r\n { value: 'lastVolume', label: 'Volume' },\r\n { value: 'lastVolumeUsd', label: 'Volume USD' },\r\n { value: 'averageVolume', label: 'Average Volume' },\r\n { value: 'averageVolumeUsd', label: 'Average Volume USD' },\r\n { value: 'relativeVolume', label: 'Relative Volume' },\r\n]\r\n\r\nvar colors = [\r\n { value: 'const', label: 'Constant' },\r\n { value: 'sector', label: 'Sector' },\r\n { value: 'industry', label: 'Industry' },\r\n { value: 'country', label: 'Country' },\r\n { value: 'marketCap', label: 'Market Capitalization' },\r\n { value: 'lastChange', label: 'Change', format: '%' },\r\n { value: 'perf1w', label: '1 Week Performance', format: '%' },\r\n { value: 'perf4w', label: '1 Month Performance', format: '%' },\r\n { value: 'perf13w', label: '3 Month Performance', format: '%' },\r\n { value: 'perf26w', label: '6 Month Performance', format: '%' },\r\n { value: 'perf52w', label: '1 Year Performance', format: '%' },\r\n { value: 'perfYtd', label: 'Year To Date Performance', format: '%' },\r\n { value: 'lastVolume', label: 'Volume' },\r\n { value: 'lastVolumeUsd', label: 'Volume USD' },\r\n { value: 'averageVolume', label: 'Average Volume' },\r\n { value: 'averageVolumeUsd', label: 'Average Volume USD' },\r\n { value: 'relativeVolume', label: 'Relative Volume' },\r\n { value: 'consRecom', label: 'Analyst Recommendation' },\r\n]\r\n\r\nvar indexes = [\r\n { value: 'any', label: 'Any' },\r\n { value: 'sp500', label: 'S&P 500' },\r\n { value: 'ndx', label: 'NASDAQ 100' },\r\n { value: 'dji', label: 'DJIA' },\r\n { value: 'rut', label: 'RUSSELL 2000' },\r\n]\r\n\r\nvar sectors = [\r\n { value: '', label: 'Any' },\r\n { value: 'basicmaterials', label: 'Basic Materials' },\r\n { value: 'communicationservices', label: 'Communication Services' },\r\n { value: 'consumercyclical', label: 'Consumer Cyclical' },\r\n { value: 'consumerdefensive', label: 'Consumer Defensive' },\r\n { value: 'energy', label: 'Energy' },\r\n { value: ETF_SECTOR_VALUE, label: 'Financial' },\r\n { value: 'healthcare', label: 'Healthcare' },\r\n { value: 'industrials', label: 'Industrials' },\r\n { value: 'realestate', label: 'Real Estate' },\r\n { value: 'technology', label: 'Technology' },\r\n { value: 'utilities', label: 'Utilities' },\r\n]\r\n\r\nvar industries = [\r\n { value: '', label: 'Any' },\r\n { value: 'stocksonly', label: 'Stocks only (ex-Funds)' },\r\n { value: 'exchangetradedfund', label: 'Exchange Traded Fund' },\r\n { value: 'advertisingagencies', label: 'Advertising Agencies' },\r\n { value: 'aerospacedefense', label: 'Aerospace & Defense' },\r\n { value: 'agriculturalinputs', label: 'Agricultural Inputs' },\r\n { value: 'airlines', label: 'Airlines' },\r\n { value: 'airportsairservices', label: 'Airports & Air Services' },\r\n { value: 'aluminum', label: 'Aluminum' },\r\n { value: 'apparelmanufacturing', label: 'Apparel Manufacturing' },\r\n { value: 'apparelretail', label: 'Apparel Retail' },\r\n { value: 'assetmanagement', label: 'Asset Management' },\r\n { value: 'automanufacturers', label: 'Auto Manufacturers' },\r\n { value: 'autoparts', label: 'Auto Parts' },\r\n { value: 'autotruckdealerships', label: 'Auto & Truck Dealerships' },\r\n { value: 'banksdiversified', label: 'Banks - Diversified' },\r\n { value: 'banksregional', label: 'Banks - Regional' },\r\n { value: 'beveragesbrewers', label: 'Beverages - Brewers' },\r\n { value: 'beveragesnonalcoholic', label: 'Beverages - Non-Alcoholic' },\r\n { value: 'beverageswineriesdistilleries', label: 'Beverages - Wineries & Distilleries' },\r\n { value: 'biotechnology', label: 'Biotechnology' },\r\n { value: 'broadcasting', label: 'Broadcasting' },\r\n { value: 'buildingmaterials', label: 'Building Materials' },\r\n { value: 'buildingproductsequipment', label: 'Building Products & Equipment' },\r\n { value: 'businessequipmentsupplies', label: 'Business Equipment & Supplies' },\r\n { value: 'capitalmarkets', label: 'Capital Markets' },\r\n { value: 'chemicals', label: 'Chemicals' },\r\n { value: 'closedendfunddebt', label: 'Closed-End Fund - Debt' },\r\n { value: 'closedendfundequity', label: 'Closed-End Fund - Equity' },\r\n { value: 'closedendfundforeign', label: 'Closed-End Fund - Foreign' },\r\n { value: 'cokingcoal', label: 'Coking Coal' },\r\n { value: 'communicationequipment', label: 'Communication Equipment' },\r\n { value: 'computerhardware', label: 'Computer Hardware' },\r\n { value: 'confectioners', label: 'Confectioners' },\r\n { value: 'conglomerates', label: 'Conglomerates' },\r\n { value: 'consultingservices', label: 'Consulting Services' },\r\n { value: 'consumerelectronics', label: 'Consumer Electronics' },\r\n { value: 'copper', label: 'Copper' },\r\n { value: 'creditservices', label: 'Credit Services' },\r\n { value: 'departmentstores', label: 'Department Stores' },\r\n { value: 'diagnosticsresearch', label: 'Diagnostics & Research' },\r\n { value: 'discountstores', label: 'Discount Stores' },\r\n { value: 'drugmanufacturersgeneral', label: 'Drug Manufacturers - General' },\r\n { value: 'drugmanufacturersspecialtygeneric', label: 'Drug Manufacturers - Specialty & Generic' },\r\n { value: 'educationtrainingservices', label: 'Education & Training Services' },\r\n { value: 'electricalequipmentparts', label: 'Electrical Equipment & Parts' },\r\n { value: 'electroniccomponents', label: 'Electronic Components' },\r\n { value: 'electronicgamingmultimedia', label: 'Electronic Gaming & Multimedia' },\r\n { value: 'electronicscomputerdistribution', label: 'Electronics & Computer Distribution' },\r\n { value: 'engineeringconstruction', label: 'Engineering & Construction' },\r\n { value: 'entertainment', label: 'Entertainment' },\r\n { value: 'farmheavyconstructionmachinery', label: 'Farm & Heavy Construction Machinery' },\r\n { value: 'farmproducts', label: 'Farm Products' },\r\n { value: 'financialconglomerates', label: 'Financial Conglomerates' },\r\n { value: 'financialdatastockexchanges', label: 'Financial Data & Stock Exchanges' },\r\n { value: 'fooddistribution', label: 'Food Distribution' },\r\n { value: 'footwearaccessories', label: 'Footwear & Accessories' },\r\n { value: 'furnishingsfixturesappliances', label: 'Furnishings, Fixtures & Appliances' },\r\n { value: 'gambling', label: 'Gambling' },\r\n { value: 'gold', label: 'Gold' },\r\n { value: 'grocerystores', label: 'Grocery Stores' },\r\n { value: 'healthcareplans', label: 'Healthcare Plans' },\r\n { value: 'healthinformationservices', label: 'Health Information Services' },\r\n { value: 'homeimprovementretail', label: 'Home Improvement Retail' },\r\n { value: 'householdpersonalproducts', label: 'Household & Personal Products' },\r\n { value: 'industrialdistribution', label: 'Industrial Distribution' },\r\n { value: 'informationtechnologyservices', label: 'Information Technology Services' },\r\n { value: 'infrastructureoperations', label: 'Infrastructure Operations' },\r\n { value: 'insurancebrokers', label: 'Insurance Brokers' },\r\n { value: 'insurancediversified', label: 'Insurance - Diversified' },\r\n { value: 'insurancelife', label: 'Insurance - Life' },\r\n { value: 'insurancepropertycasualty', label: 'Insurance - Property & Casualty' },\r\n { value: 'insurancereinsurance', label: 'Insurance - Reinsurance' },\r\n { value: 'insurancespecialty', label: 'Insurance - Specialty' },\r\n { value: 'integratedfreightlogistics', label: 'Integrated Freight & Logistics' },\r\n { value: 'internetcontentinformation', label: 'Internet Content & Information' },\r\n { value: 'internetretail', label: 'Internet Retail' },\r\n { value: 'leisure', label: 'Leisure' },\r\n { value: 'lodging', label: 'Lodging' },\r\n { value: 'lumberwoodproduction', label: 'Lumber & Wood Production' },\r\n { value: 'luxurygoods', label: 'Luxury Goods' },\r\n { value: 'marineshipping', label: 'Marine Shipping' },\r\n { value: 'medicalcarefacilities', label: 'Medical Care Facilities' },\r\n { value: 'medicaldevices', label: 'Medical Devices' },\r\n { value: 'medicaldistribution', label: 'Medical Distribution' },\r\n { value: 'medicalinstrumentssupplies', label: 'Medical Instruments & Supplies' },\r\n { value: 'metalfabrication', label: 'Metal Fabrication' },\r\n { value: 'mortgagefinance', label: 'Mortgage Finance' },\r\n { value: 'oilgasdrilling', label: 'Oil & Gas Drilling' },\r\n { value: 'oilgasep', label: 'Oil & Gas E&P' },\r\n { value: 'oilgasequipmentservices', label: 'Oil & Gas Equipment & Services' },\r\n { value: 'oilgasintegrated', label: 'Oil & Gas Integrated' },\r\n { value: 'oilgasmidstream', label: 'Oil & Gas Midstream' },\r\n { value: 'oilgasrefiningmarketing', label: 'Oil & Gas Refining & Marketing' },\r\n { value: 'otherindustrialmetalsmining', label: 'Other Industrial Metals & Mining' },\r\n { value: 'otherpreciousmetalsmining', label: 'Other Precious Metals & Mining' },\r\n { value: 'packagedfoods', label: 'Packaged Foods' },\r\n { value: 'packagingcontainers', label: 'Packaging & Containers' },\r\n { value: 'paperpaperproducts', label: 'Paper & Paper Products' },\r\n { value: 'personalservices', label: 'Personal Services' },\r\n { value: 'pharmaceuticalretailers', label: 'Pharmaceutical Retailers' },\r\n { value: 'pollutiontreatmentcontrols', label: 'Pollution & Treatment Controls' },\r\n { value: 'publishing', label: 'Publishing' },\r\n { value: 'railroads', label: 'Railroads' },\r\n { value: 'realestatedevelopment', label: 'Real Estate - Development' },\r\n { value: 'realestatediversified', label: 'Real Estate - Diversified' },\r\n { value: 'realestateservices', label: 'Real Estate Services' },\r\n { value: 'recreationalvehicles', label: 'Recreational Vehicles' },\r\n { value: 'reitdiversified', label: 'REIT - Diversified' },\r\n { value: 'reithealthcarefacilities', label: 'REIT - Healthcare Facilities' },\r\n { value: 'reithotelmotel', label: 'REIT - Hotel & Motel' },\r\n { value: 'reitindustrial', label: 'REIT - Industrial' },\r\n { value: 'reitmortgage', label: 'REIT - Mortgage' },\r\n { value: 'reitoffice', label: 'REIT - Office' },\r\n { value: 'reitresidential', label: 'REIT - Residential' },\r\n { value: 'reitretail', label: 'REIT - Retail' },\r\n { value: 'reitspecialty', label: 'REIT - Specialty' },\r\n { value: 'rentalleasingservices', label: 'Rental & Leasing Services' },\r\n { value: 'residentialconstruction', label: 'Residential Construction' },\r\n { value: 'resortscasinos', label: 'Resorts & Casinos' },\r\n { value: 'restaurants', label: 'Restaurants' },\r\n { value: 'scientifictechnicalinstruments', label: 'Scientific & Technical Instruments' },\r\n { value: 'securityprotectionservices', label: 'Security & Protection Services' },\r\n { value: 'semiconductorequipmentmaterials', label: 'Semiconductor Equipment & Materials' },\r\n { value: 'semiconductors', label: 'Semiconductors' },\r\n { value: 'shellcompanies', label: 'Shell Companies' },\r\n { value: 'silver', label: 'Silver' },\r\n { value: 'softwareapplication', label: 'Software - Application' },\r\n { value: 'softwareinfrastructure', label: 'Software - Infrastructure' },\r\n { value: 'solar', label: 'Solar' },\r\n { value: 'specialtybusinessservices', label: 'Specialty Business Services' },\r\n { value: 'specialtychemicals', label: 'Specialty Chemicals' },\r\n { value: 'specialtyindustrialmachinery', label: 'Specialty Industrial Machinery' },\r\n { value: 'specialtyretail', label: 'Specialty Retail' },\r\n { value: 'staffingemploymentservices', label: 'Staffing & Employment Services' },\r\n { value: 'steel', label: 'Steel' },\r\n { value: 'telecomservices', label: 'Telecom Services' },\r\n { value: 'textilemanufacturing', label: 'Textile Manufacturing' },\r\n { value: 'thermalcoal', label: 'Thermal Coal' },\r\n { value: 'tobacco', label: 'Tobacco' },\r\n { value: 'toolsaccessories', label: 'Tools & Accessories' },\r\n { value: 'travelservices', label: 'Travel Services' },\r\n { value: 'trucking', label: 'Trucking' },\r\n { value: 'uranium', label: 'Uranium' },\r\n { value: 'utilitiesdiversified', label: 'Utilities - Diversified' },\r\n { value: 'utilitiesindependentpowerproducers', label: 'Utilities - Independent Power Producers' },\r\n { value: 'utilitiesregulatedelectric', label: 'Utilities - Regulated Electric' },\r\n { value: 'utilitiesregulatedgas', label: 'Utilities - Regulated Gas' },\r\n { value: 'utilitiesregulatedwater', label: 'Utilities - Regulated Water' },\r\n { value: 'utilitiesrenewable', label: 'Utilities - Renewable' },\r\n { value: 'wastemanagement', label: 'Waste Management' },\r\n]\r\n\r\nvar marketCaps = [\r\n { value: '', label: 'Any' },\r\n { value: 'mega', label: 'Mega ($200bln and more)' },\r\n { value: 'large', label: 'Large ($10bln to $200bln)' },\r\n { value: 'mid', label: 'Mid ($2bln to $10bln)' },\r\n { value: 'small', label: 'Small ($300mln to $2bln)' },\r\n { value: 'micro', label: 'Micro ($50mln to $300mln)' },\r\n { value: 'nano', label: 'Nano (under $50mln)' },\r\n { value: 'largeover', label: '+Large (over $10bln)' },\r\n { value: 'midover', label: '+Mid (over $2bln)' },\r\n { value: 'smallover', label: '+Small (over $300mln)' },\r\n { value: 'microover', label: '+Micro (over $50mln)' },\r\n { value: 'largeunder', label: '-Large (under $200bln)' },\r\n { value: 'midunder', label: '-Mid (under $10bln)' },\r\n { value: 'smallunder', label: '-Small (under $2bln)' },\r\n { value: 'microunder', label: '-Micro (under $300mln)' },\r\n]\r\n\r\nvar averageVolumes = [\r\n { value: '', label: 'Any' },\r\n { value: 'u50', label: 'Under 50K' },\r\n { value: 'u100', label: 'Under 100K' },\r\n { value: 'u500', label: 'Under 500K' },\r\n { value: 'u750', label: 'Under 750K' },\r\n { value: 'u1000', label: 'Under 1M' },\r\n { value: 'o50', label: 'Over 50K' },\r\n { value: 'o100', label: 'Over 100K' },\r\n { value: 'o200', label: 'Over 200K' },\r\n { value: 'o300', label: 'Over 300K' },\r\n { value: 'o400', label: 'Over 400K' },\r\n { value: 'o500', label: 'Over 500K' },\r\n { value: 'o750', label: 'Over 750K' },\r\n { value: 'o1000', label: 'Over 1M' },\r\n { value: 'o2000', label: 'Over 2M' },\r\n { value: '100to500', label: '100K to 500K' },\r\n { value: '100to1000', label: '100K to 1M' },\r\n { value: '500to1000', label: '500K to 1M' },\r\n { value: '500to10000', label: '500K to 10M' },\r\n]\r\n\r\nexport { xys, sizes, colors, indexes, sectors, industries, marketCaps, averageVolumes }\r\n","import * as d3 from 'd3'\r\n\r\nimport { ScaleId } from '../maps/types'\r\nimport { decodeQueryString as decode, encodeQueryString } from '../queryString'\r\nimport { GradientDefinition, bubbleGradients } from '../shared/gradients'\r\nimport {\r\n BubbleSelectOption,\r\n averageVolumes,\r\n colors,\r\n indexes,\r\n industries,\r\n marketCaps,\r\n sectors,\r\n sizes,\r\n xys,\r\n} from './selects'\r\nimport { BubbleNode } from './types'\r\n\r\nconst DEFAULT_COLOR_SCALE = [\r\n '#ff4146',\r\n '#ea580c',\r\n '#ff9300',\r\n '#84cc16',\r\n '#34aa00',\r\n '#00d16d',\r\n '#14b8a6',\r\n '#18a3e0',\r\n '#5963d1',\r\n '#4f46e5',\r\n '#9425c2',\r\n '#c026d3',\r\n '#ff80ff',\r\n '#ff5888',\r\n '#ffe100',\r\n]\r\n\r\nfunction getValueWithFallback(values: BubbleSelectOption[], value: string | undefined, fallback: string) {\r\n const v = values.find((v) => v.value === value)\r\n\r\n return v?.value ?? fallback\r\n}\r\n\r\nfunction getDefaultValues(query: Record = {}, extendedFilters: boolean = false) {\r\n let state: Record = {\r\n x: getValueWithFallback(xys, query.x, 'sector'),\r\n y: getValueWithFallback(xys, query.y, 'lastChange'),\r\n size: getValueWithFallback(sizes, query.size, 'marketCap'),\r\n color: getValueWithFallback(colors, query.color, 'sector'),\r\n idx: getValueWithFallback(indexes, query.idx, 'sp500'),\r\n rangeX: query.rangeX ?? '',\r\n rangeY: query.rangeY ?? '',\r\n }\r\n\r\n if (extendedFilters) {\r\n state = {\r\n ...state,\r\n sec: getValueWithFallback(sectors, query.sec, ''),\r\n ind: getValueWithFallback(industries, query.ind, ''),\r\n cap: getValueWithFallback(marketCaps, query.cap, ''),\r\n sh_avgvol: getValueWithFallback(averageVolumes, query.sh_avgvol, ''),\r\n tickers: query.tickers ?? '',\r\n excludeTickers: query.excludeTickers ?? '',\r\n }\r\n }\r\n\r\n return state\r\n}\r\n\r\nfunction decodeQueryString(extendedFilters?: boolean) {\r\n return getDefaultValues(decode(), extendedFilters)\r\n}\r\n\r\nvar percentile = function (arr: number[], excelPercentile: number) {\r\n var sequence = arr.concat().sort(function (a, b) {\r\n return a - b\r\n })\r\n var N = sequence.length\r\n var n = (N - 1) * excelPercentile + 1\r\n\r\n if (n === 1) {\r\n return sequence[0]\r\n } else if (n === N) {\r\n return sequence[N - 1]\r\n } else {\r\n var k = ~~n\r\n var d = n - k\r\n return sequence[k - 1] + d * (sequence[k] - sequence[k - 1])\r\n }\r\n}\r\n\r\nvar getXScale = function (data: BubbleNode[], width: number) {\r\n var x = d3\r\n .scaleLinear()\r\n .range([0, width])\r\n .domain(d3.extent(data, (d: BubbleNode) => d.x) as [number, number])\r\n .nice(10)\r\n if (data.length === 1) {\r\n x.domain([x.domain()[0] * 0.9, x.domain()[0] * 1.1]).nice(10)\r\n }\r\n return x\r\n}\r\n\r\nvar getYScale = function (data: BubbleNode[], height: number) {\r\n var y = d3\r\n .scaleLinear()\r\n .range([height, 0])\r\n .domain(d3.extent(data, (d: BubbleNode) => d.y) as [number, number])\r\n .nice(10)\r\n if (data.length === 1) {\r\n y.domain([y.domain()[0] * 0.9, y.domain()[0] * 1.1]).nice(10)\r\n }\r\n return y\r\n}\r\n\r\nvar _colorScales: Record = {}\r\nfunction getColorScale(data: BubbleNode[], colorOption: string, colorScale = DEFAULT_COLOR_SCALE) {\r\n if (_colorScales[colorOption]) {\r\n return _colorScales[colorOption]\r\n }\r\n\r\n let c: any\r\n let colors: number[]\r\n let min: number\r\n let max: number\r\n let gradient: GradientDefinition\r\n let linearScale: d3.ScaleLinear\r\n switch (colorOption) {\r\n case 'exchange':\r\n case 'sector':\r\n case 'industry':\r\n case 'country':\r\n c = d3.scaleOrdinal().range(colorScale)\r\n break\r\n case 'marketCap':\r\n case 'averageVolume':\r\n case 'relativeVolume':\r\n case 'lastVolume':\r\n case 'averageVolumeUsd':\r\n case 'lastVolumeUsd':\r\n colors = data.map((d) => Number(d.color)).filter(Number.isFinite)\r\n min = percentile(colors, 0.05)\r\n max = percentile(colors, 0.95)\r\n gradient = bubbleGradients['_relvol']\r\n linearScale = d3\r\n .scaleLinear()\r\n .domain([min, max])\r\n .range([0, gradient.colors.length - 1])\r\n c = (d?: number) => {\r\n if (typeof d === 'undefined' || d === null) {\r\n return gradient.nullColor\r\n }\r\n if (d > max) d = max\r\n if (d < min) d = min\r\n var i = Math.round(linearScale(d))\r\n return gradient.colors[i]\r\n }\r\n c.domain = () => [min, max]\r\n break\r\n case 'lastChange':\r\n case 'perf1w':\r\n case 'perf4w':\r\n case 'perf13w':\r\n case 'perf26w':\r\n case 'perf52w':\r\n case 'perfYtd':\r\n colors = data.map((d) => Number(d.color)).filter(Number.isFinite)\r\n\r\n min = percentile(colors, 0.05)\r\n max = percentile(colors, 0.95)\r\n max = Math.max(Math.abs(min), Math.abs(max))\r\n min = -max\r\n\r\n gradient = bubbleGradients[ScaleId.DayPerf]\r\n linearScale = d3\r\n .scaleLinear()\r\n .domain([min, max])\r\n .range([0, gradient.colors.length - 1])\r\n c = (d?: number) => {\r\n if (typeof d === 'undefined' || d === null) {\r\n return gradient.nullColor\r\n }\r\n if (d > max) d = max\r\n if (d < min) d = min\r\n var i = Math.round(linearScale(d))\r\n return gradient.colors[i]\r\n }\r\n c.domain = () => [min, max]\r\n break\r\n case 'consRecom':\r\n min = 5\r\n max = 1\r\n gradient = bubbleGradients[ScaleId.DayPerf]\r\n linearScale = d3\r\n .scaleLinear()\r\n .domain([min, max])\r\n .range([0, gradient.colors.length - 1])\r\n c = (d?: number) => {\r\n if (typeof d === 'undefined' || d === null) {\r\n return gradient.nullColor\r\n }\r\n if (d < max) d = max\r\n if (d > min) d = min\r\n var i = Math.round(linearScale(d))\r\n return gradient.colors[i]\r\n }\r\n c.domain = () => [min, max]\r\n break\r\n case 'const':\r\n default:\r\n c = function () {\r\n return '#18a3e0'\r\n }\r\n c.domain = () => ['Constant']\r\n break\r\n }\r\n\r\n if (data.length > 0) {\r\n _colorScales[colorOption] = c\r\n }\r\n return c\r\n}\r\n\r\nvar getSizeScale = function (data: BubbleNode[]) {\r\n var r = d3\r\n .scaleSqrt()\r\n .range([0, 40])\r\n .domain(d3.extent(data, (d: BubbleNode) => d.size) as [number, number])\r\n .nice(10)\r\n\r\n if (r.domain()[0] === 1 && r.domain()[1] === 1) {\r\n r.domain([0, 50])\r\n }\r\n return r\r\n}\r\n\r\nvar getScales = function (\r\n data: BubbleNode[],\r\n width: number,\r\n height: number,\r\n colorOption: string,\r\n colorScale?: string[]\r\n) {\r\n return {\r\n x: getXScale(data, width),\r\n y: getYScale(data, height),\r\n r: getSizeScale(data),\r\n c: getColorScale(data, colorOption, colorScale),\r\n }\r\n}\r\n\r\nfunction generatePresetUrl(presetConfig: Record, baseQuery?: URLSearchParams) {\r\n const query = encodeQueryString({ ...Object.fromEntries(baseQuery ?? []), ...presetConfig })\r\n\r\n return `${window.location.pathname}?${query}`\r\n}\r\n\r\nfunction formatValue(value: number | string, format?: string, finiteFormatting?: boolean) {\r\n if (finiteFormatting && !Number.isFinite(value)) {\r\n return '—'\r\n }\r\n\r\n if (typeof value === 'number') {\r\n const absValue = Math.abs(value)\r\n\r\n if (absValue < 1000) {\r\n value = value.toFixed(2)\r\n } else if (absValue < 1000 * 1000) {\r\n value = (value / 1000).toFixed(2) + 'K'\r\n } else if (absValue < 1000 * 1000 * 1000) {\r\n value = (value / 1000000).toFixed(2) + 'M'\r\n } else {\r\n value = (value / 1000000000).toFixed(2) + 'B'\r\n }\r\n }\r\n\r\n if (format === '%') {\r\n value += '%'\r\n }\r\n\r\n return value\r\n}\r\n\r\nexport {\r\n getDefaultValues,\r\n encodeQueryString,\r\n decodeQueryString,\r\n percentile,\r\n getXScale,\r\n getYScale,\r\n getColorScale,\r\n getSizeScale,\r\n getScales,\r\n generatePresetUrl,\r\n formatValue,\r\n}\r\n","import { QuoteSubview, QuoteView } from './types'\r\n\r\n// Keep in sync with FullViewUrlQuery.cs\r\nexport function getQuoteSubview(type: QuoteSubview | QuoteView) {\r\n return Object.values(QuoteSubview).find((value) => value === type) ?? null\r\n}\r\n\r\n// Keep in sync with FullViewUrlQuery.cs\r\nexport function getQuoteView(type: QuoteView | QuoteSubview) {\r\n switch (getQuoteSubview(type)) {\r\n case QuoteSubview.Dividends:\r\n case QuoteSubview.Eearnings:\r\n case QuoteSubview.Revenue:\r\n return QuoteView.Financials\r\n case QuoteSubview.OptionsChain:\r\n case QuoteSubview.OptionsVolatility:\r\n return QuoteView.Options\r\n case null:\r\n return QuoteView.ChartDetail // No subview is active == chart detail\r\n default:\r\n return null // Eg. Short interest doesn’t belong to any parent group\r\n }\r\n}\r\n","import * as React from 'react'\r\nimport { useSearchParams } from 'react-router-dom'\r\n\r\nimport { TIMEFRAME } from '../charts-lib'\r\nimport { QuoteQuery, QuoteSubview, QuoteView } from './types'\r\nimport { getQuoteSubview, getQuoteView } from './utils'\r\n\r\nexport const QuoteContext = React.createContext<{\r\n index: number\r\n ticker: string\r\n period: TIMEFRAME\r\n view: QuoteView | null\r\n subview: QuoteSubview | null\r\n}>({ index: -1, ticker: '', period: TIMEFRAME.d, view: null, subview: null })\r\n\r\nexport function QuoteContextProvider({\r\n ticker,\r\n index,\r\n children,\r\n}: React.PropsWithChildren<{ ticker: string; index: number }>) {\r\n const [query] = useSearchParams()\r\n const type = query.get(QuoteQuery.Type) as QuoteView | QuoteSubview\r\n const period = query.get(QuoteQuery.Period) as TIMEFRAME\r\n const contextValue = React.useMemo(\r\n () => ({ index, ticker, period, view: getQuoteView(type), subview: getQuoteSubview(type) }),\r\n [index, period, ticker, type]\r\n )\r\n\r\n return {children}\r\n}\r\n","import { isForexFuturesCryptoPage } from 'finviz-charts/app/utils/chart'\r\nimport * as React from 'react'\r\n\r\nimport { TIMEFRAME } from '../../../main/constants'\r\nimport { useWindowSize } from '../../../main/hooks/use-window-size'\r\nimport { getIntradayChartConfig, useChartLayoutGlobalModelAsync, useModelState } from '../../charts-lib'\r\n\r\nexport function getChartLayoutSizeConfig(\r\n layoutConfig: Pick<\r\n typeof window.globalChartConfig,\r\n 'idea' | 'barWidth' | 'barMargin' | 'charts' | 'specificChartFunctionality'\r\n >,\r\n p = TIMEFRAME.d\r\n) {\r\n const { clientWidth } = document.body\r\n const { premarket, aftermarket, dateRange } = layoutConfig.charts[0]\r\n const maxChartWidth = clientWidth - 40 // 40px left right chart padding = (19px * 2 for margin left/right) + (1px * 2 for border)\r\n let width = 990\r\n let barWidth = 3\r\n let barMargin = 1\r\n let timeframeMinutes = 0\r\n const isForexFuturesCrypto =\r\n layoutConfig.specificChartFunctionality && isForexFuturesCryptoPage(layoutConfig.specificChartFunctionality)\r\n\r\n switch (p) {\r\n case TIMEFRAME.i1:\r\n timeframeMinutes = 1\r\n barWidth = 1\r\n if (premarket || aftermarket || clientWidth < 1650) {\r\n barMargin = 0\r\n }\r\n break\r\n case TIMEFRAME.i2:\r\n timeframeMinutes = 2\r\n break\r\n case TIMEFRAME.i3:\r\n timeframeMinutes = 3\r\n if (premarket && aftermarket && clientWidth <= 1505) {\r\n barWidth = 2\r\n }\r\n break\r\n case TIMEFRAME.i5:\r\n timeframeMinutes = 5\r\n barWidth = 5\r\n barMargin = clientWidth >= 1100 ? 2 : 1\r\n break\r\n case TIMEFRAME.i10:\r\n width = 1058 // 39bars per day * 5days * 5px per bar + 35px left offset + 48px right offset\r\n barMargin = 0\r\n break\r\n case TIMEFRAME.i15:\r\n case TIMEFRAME.i30:\r\n width = 1019\r\n break\r\n case TIMEFRAME.h:\r\n width = 1008\r\n break\r\n case TIMEFRAME.h2:\r\n case TIMEFRAME.h4:\r\n width = 1020\r\n break\r\n case TIMEFRAME.d:\r\n width = 1282\r\n break\r\n case TIMEFRAME.w:\r\n case TIMEFRAME.m:\r\n width = 994\r\n break\r\n }\r\n\r\n switch (p) {\r\n case TIMEFRAME.i1:\r\n case TIMEFRAME.i2:\r\n case TIMEFRAME.i3:\r\n case TIMEFRAME.i5:\r\n const commonProps = {\r\n timeframeMinutes,\r\n barWidthWithMargin: barWidth + 2 + barMargin,\r\n hasAftermarket: aftermarket,\r\n hasPremarket: premarket,\r\n }\r\n width = getIntradayChartConfig({\r\n ...commonProps,\r\n maxWidth: maxChartWidth,\r\n canCropChart: !dateRange,\r\n }).chartWidthWithOffset\r\n break\r\n }\r\n\r\n // If FFC chart use DAILY type width\r\n if (isForexFuturesCrypto) width = 1282\r\n\r\n // If chart is wider than available space in vieport override width\r\n if (maxChartWidth <= width) {\r\n width = Math.max(994, maxChartWidth)\r\n if (p === TIMEFRAME.d) {\r\n barWidth = 2\r\n barMargin = 0\r\n width = 991\r\n }\r\n }\r\n\r\n // If idea chart or FFC chart use bar configs from layout\r\n if (layoutConfig.idea || isForexFuturesCrypto) {\r\n barWidth = layoutConfig.barWidth\r\n barMargin = layoutConfig.barMargin\r\n }\r\n\r\n return {\r\n width,\r\n barWidth,\r\n barMargin,\r\n }\r\n}\r\n\r\nexport function useChartLayoutWidthWatch() {\r\n const { innerWidth } = useWindowSize()\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const unwatchedFirstChart = React.useMemo(() => chartLayoutModel?.charts().all()[0] ?? null, [chartLayoutModel])\r\n const chartModel = useModelState(unwatchedFirstChart, { watchProperties: ['quote'] })\r\n const quote = useModelState(chartModel?.quote() ?? null, { watchProperties: ['ticker', 'timeframe', 'isFetching'] })\r\n const ideaId = chartLayoutModel?.idea?.id\r\n\r\n React.useEffect(() => {\r\n const settings = !ideaId ? chartLayoutModel?.settings : null\r\n const timeframe = quote?.timeframe\r\n if (chartLayoutModel && timeframe && settings) {\r\n const { width, barWidth, barMargin } = getChartLayoutSizeConfig(chartLayoutModel.toConfig(), timeframe)\r\n const newSettings = JSON.parse(JSON.stringify(settings))\r\n newSettings.ChartSettings.center.barWidth = barWidth\r\n newSettings.IndicatorSettings.center.barWidth = barWidth\r\n newSettings.ChartSettings.center.barMargin = barMargin\r\n newSettings.IndicatorSettings.center.barMargin = barMargin\r\n chartLayoutModel.updateAttributes({ width, settings: newSettings })\r\n }\r\n // We don't want to trigger this effect on any chartLayoutModel change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [quote?.premarket, quote?.aftermarket, quote?.timeframe, ideaId, innerWidth])\r\n}\r\n","import * as React from 'react'\r\nimport * as ReactDOM from 'react-dom'\r\nimport { ErrorBoundary } from 'react-error-boundary'\r\n\r\nimport { useToggleStaticElements } from '../../../main/hooks/useToggleStaticElement'\r\nimport { QuoteContext } from '../QuoteContext'\r\n\r\ntype AnyElement = Element | Element[] | NodeListOf\r\n\r\ninterface PortalContextProps {\r\n /**\r\n * The root element this component will get rendered into\r\n */\r\n rootElement?: HTMLElement\r\n\r\n /**\r\n * Static (server rendered) element associated with this component.\r\n * Hide this element when the component gets rendered\r\n */\r\n staticElement?: HTMLElement\r\n\r\n toggleStaticElement: () => void\r\n}\r\n\r\nexport const QuotePortalContext = React.createContext({\r\n rootElement: undefined,\r\n staticElement: undefined,\r\n toggleStaticElement: () => {},\r\n})\r\n\r\n/**\r\n * Portal component props\r\n */\r\ninterface QuotePortalProps {\r\n /**\r\n * Override the ticker index from context if you need to skip the first ticker\r\n */\r\n index?: number\r\n\r\n /**\r\n * Server rendered elements to replace with react components\r\n */\r\n staticElements?: AnyElement\r\n\r\n /**\r\n * Immediately replace the static element with react children.\r\n * Turn this off if the child component is suspended\r\n *\r\n * @default true (if root exists)\r\n */\r\n toggleStaticElement?: boolean\r\n\r\n /**\r\n * Elements to render the react components into\r\n */\r\n roots: AnyElement\r\n\r\n /**\r\n * Intentionally restricted to JSX element so that we don’t have to check children is valid react element\r\n */\r\n children: JSX.Element\r\n}\r\n\r\nexport function QuotePortal({ index, toggleStaticElement, staticElements, roots, children }: QuotePortalProps) {\r\n // We might need to offset the index if we want to skip the first ticker (eg. static image chart)\r\n const context = React.useContext(QuoteContext)\r\n const elementIndex = index ?? context.index\r\n\r\n // Get the root and associated static html element, get them by index if array\r\n const staticElement =\r\n staticElements instanceof NodeList || Array.isArray(staticElements) ? staticElements[elementIndex] : staticElements\r\n const rootElement = roots instanceof NodeList || Array.isArray(roots) ? roots[elementIndex] : roots\r\n\r\n /**\r\n * Set up element switching. We might want to hold off if we’re passing a suspendable component.\r\n * We can’t catch the promise here, it might have already been caught down the tree\r\n * and we want to avoid hiding the server-rendered element before the react content is ready\r\n */\r\n const [isEnabled, setIsEnabled] = React.useState(toggleStaticElement ?? (!!staticElement && !!rootElement))\r\n useToggleStaticElements(staticElement, rootElement, isEnabled)\r\n\r\n const portalContextValue = React.useMemo(\r\n () => ({\r\n // Cast here to make it easier to pass any `Element`s as props\r\n rootElement: rootElement as HTMLElement,\r\n staticElement: staticElement as HTMLElement,\r\n // A way to get notified when children get rendered, because they could be suspended and waiting for requests\r\n toggleStaticElement: () => setIsEnabled(true),\r\n }),\r\n [rootElement, staticElement]\r\n )\r\n\r\n if (!rootElement) return null\r\n\r\n return (\r\n setIsEnabled(false)}>\r\n \r\n {ReactDOM.createPortal(children, rootElement)}\r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\ntype QuerySelectorReturn = Element | null\r\ntype AnyElement = QuerySelectorReturn | QuerySelectorReturn[] | NodeListOf\r\n\r\nexport function useToggleStaticElements(elementToHide?: AnyElement, elementToShow: AnyElement = [], enabled = true) {\r\n React.useEffect(() => {\r\n if (!elementToHide) return\r\n\r\n const hideElement = (element?: QuerySelectorReturn) => element?.classList.add('hidden')\r\n const showElement = (element?: QuerySelectorReturn) => element?.classList.remove('hidden')\r\n const toggleElements = (element: AnyElement | undefined, toggleFn: typeof hideElement) => {\r\n if (element instanceof NodeList || Array.isArray(element)) {\r\n element.forEach(toggleFn)\r\n } else {\r\n toggleFn(element)\r\n }\r\n }\r\n\r\n toggleElements(elementToHide, enabled ? hideElement : showElement)\r\n toggleElements(elementToShow, enabled ? showElement : hideElement)\r\n\r\n return () => {\r\n toggleElements(elementToHide, showElement)\r\n toggleElements(elementToShow, hideElement)\r\n }\r\n }, [elementToHide, elementToShow, enabled])\r\n}\r\n","import React from 'react'\r\n\r\nimport { useChartTimeframePathWatch } from '../../hooks/use-chart-timeframe-path-watch'\r\nimport { QuotePortalContext } from '../Portal'\r\n\r\nexport type QuoteLinksContextType = ReturnType\r\n\r\nfunction getDefaultContextValue() {\r\n const urlObject = new URL(window.location.href)\r\n\r\n return {\r\n chartLayoutModel: null,\r\n location: urlObject,\r\n }\r\n}\r\n\r\nexport const QuoteLinksContext = React.createContext(getDefaultContextValue())\r\n\r\nexport function QuoteLinksWrapper({ children }: React.PropsWithChildren) {\r\n const { toggleStaticElement } = React.useContext(QuotePortalContext)\r\n const info = useChartTimeframePathWatch()\r\n\r\n React.useEffect(() => toggleStaticElement(), [toggleStaticElement])\r\n\r\n return {children}\r\n}\r\n","import { useChartModelCustomDateRangeValues } from 'finviz-charts/app/controllers/chart-controls/use-chart-model-custom-date-range-values'\r\nimport { useChartLayoutGlobalModelAsync, useModelState } from 'finviz-charts/app/lib-export'\r\n\r\nexport function useChartTimeframePathWatch() {\r\n const isPremium = window.FinvizSettings.hasUserPremium\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const chartModel = useModelState(chartLayoutModel?.activeChart ?? null, {\r\n watchProperties: ['timeframe', 'dateRange'],\r\n })\r\n const { generateChartLayoutRouterPath } = useChartModelCustomDateRangeValues({\r\n chartModel,\r\n isPremium,\r\n })\r\n\r\n if (!chartModel)\r\n return {\r\n location: new URL(`${window.location.pathname}${window.location.search}`, window.location.origin),\r\n chartLayoutModel,\r\n }\r\n\r\n const location = generateChartLayoutRouterPath({\r\n ticker: chartModel?.ticker,\r\n timeframe: chartModel?.timeframe,\r\n dateRange: chartModel?.dateRange,\r\n })\r\n\r\n return { location: new URL(`${location.pathname}${location.search}`, window.location.origin), chartLayoutModel }\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\nimport { Link, LinkProps, To } from 'react-router-dom'\r\n\r\nimport { getElitePageLink, getNavigationLinkUrl } from '../../../../main/util'\r\nimport { QuoteContext } from '../../QuoteContext'\r\nimport { QuoteQuery, QuoteSubview, QuoteView } from '../../types'\r\nimport { QuoteLinksContext, QuoteLinksContextType } from './QuoteLinksWrapper'\r\n\r\nconst isPremium = FinvizSettings.hasUserPremium\r\n\r\ninterface SharedNavigationLinkProps {\r\n /**\r\n * Mark as only available to elite users. When se to `true`, free users will be\r\n * redirected to elite landing when clicking the link\r\n */\r\n isEliteOnly?: boolean\r\n\r\n /**\r\n * Used together with isEliteOnly to set the correct utm campaign param\r\n */\r\n utmCampaign?: string\r\n}\r\n\r\ninterface NavigationLinkProps extends SharedNavigationLinkProps, Omit {\r\n /**\r\n * Keys to preserve from the current URL query. Runs first when manipulating the URL\r\n *\r\n * @default [Ticker, Type, Period, DateRange]\r\n */\r\n preserveQueryKeys?: Array\r\n\r\n /**\r\n * Keys to omit from the current URL query. Runs after `preserveQueryKeys`\r\n */\r\n removeQueryKeys?: Array\r\n\r\n /**\r\n * Additional values to set to the URL query after preserving/removing\r\n *\r\n * @default { Type: props.view }\r\n */\r\n additionalQueryValues?: Partial>\r\n\r\n /**\r\n * The view the component links to\r\n */\r\n view: QuoteView | QuoteSubview\r\n\r\n getLink?: never\r\n}\r\n\r\ninterface CustomNavigationLinkProps extends SharedNavigationLinkProps, Omit {\r\n view?: never\r\n preserveQueryKeys?: never\r\n removeQueryKeys?: never\r\n additionalQueryValues?: never\r\n\r\n /**\r\n * Custom function to get the link\r\n */\r\n getLink: (context: QuoteLinksContextType) => To\r\n}\r\n\r\nexport function NavigationLink({\r\n isEliteOnly,\r\n utmCampaign,\r\n view,\r\n getLink,\r\n reloadDocument = true,\r\n preserveQueryKeys = [QuoteQuery.Ticker, QuoteQuery.Type, QuoteQuery.Period, QuoteQuery.DateRange],\r\n removeQueryKeys,\r\n additionalQueryValues,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n const quoteContext = React.useContext(QuoteContext)\r\n const linkContext = React.useContext(QuoteLinksContext)\r\n\r\n const linkUrl = React.useMemo(() => {\r\n if (isEliteOnly && !isPremium) return getElitePageLink(utmCampaign)\r\n if (typeof getLink === 'function') return getLink(linkContext)\r\n\r\n return getNavigationLinkUrl(\r\n linkContext.location,\r\n preserveQueryKeys,\r\n removeQueryKeys,\r\n additionalQueryValues ?? { [QuoteQuery.Type]: view }\r\n ).toString()\r\n }, [isEliteOnly, utmCampaign, getLink, linkContext, preserveQueryKeys, removeQueryKeys, additionalQueryValues, view])\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Dialog, useDialogState } from '../../../../main/components/dialog'\r\nimport { Spinner } from '../../../../main/components/spinner'\r\nimport { useAsyncModule } from '../../../../main/services/async-modules-utils'\r\nimport { QuoteContext } from '../../QuoteContext'\r\nimport { createAlertAsyncModule } from '../../modules/create-alert/async-modules'\r\nimport { NavigationLink } from './QuoteLinkComponent'\r\n\r\nexport function CreateAlertLink() {\r\n const { ticker } = React.useContext(QuoteContext)\r\n const dialog = useDialogState()\r\n const isVisible = dialog.useState('open')\r\n\r\n const [createAlertModule] = useAsyncModule({\r\n ...createAlertAsyncModule,\r\n shouldLoadModule: isVisible,\r\n })\r\n const CreateAlert = createAlertModule?.CreateAlert\r\n\r\n return (\r\n <>\r\n `/create_alert.ashx?t=${ticker}`}\r\n onClick={(e) => {\r\n if (!FinvizSettings.hasUserPremium) return\r\n window.gtag?.('event', 'click', { event_category: 'create-alert' })\r\n if (e.ctrlKey || e.metaKey) return\r\n e.preventDefault() // needed to prevent opening parent link\r\n dialog.show()\r\n }}\r\n >\r\n Set Alert\r\n \r\n \r\n {CreateAlert ? (\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Dialog, useDialogState } from '../../../../main/components/dialog'\r\nimport { Spinner } from '../../../../main/components/spinner'\r\nimport { useAsyncModule } from '../../../../main/services/async-modules-utils'\r\nimport { QuoteContext } from '../../QuoteContext'\r\nimport { saveToPortfolioAsyncModule } from '../../modules/save-to-portfolio/async-modules'\r\nimport { NavigationLink } from './QuoteLinkComponent'\r\n\r\nexport function SaveToPortfolioLink() {\r\n const { ticker } = React.useContext(QuoteContext)\r\n const dialog = useDialogState()\r\n const isVisible = dialog.useState('open')\r\n\r\n const [saveToPortfolioModule] = useAsyncModule({\r\n ...saveToPortfolioAsyncModule,\r\n shouldLoadModule: isVisible,\r\n })\r\n const SaveToPortfolio = saveToPortfolioModule?.SaveToPortfolio\r\n\r\n return (\r\n <>\r\n `/save_to_portfolio.ashx?t=${ticker}`}\r\n onClick={(e) => {\r\n if (!FinvizSettings.email.length) return\r\n window.gtag?.('event', 'click', { event_category: 'save-to-portfolio' })\r\n if (e.ctrlKey || e.metaKey) return\r\n e.preventDefault() // needed to prevent opening parent link\r\n dialog.show()\r\n }}\r\n >\r\n Add to Portfolio\r\n \r\n \r\n {SaveToPortfolio ? (\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { CreateAlertLink } from './components/Navigation/CreateAlertLink'\r\nimport { NavigationLink } from './components/Navigation/QuoteLinkComponent'\r\nimport { QuoteLinksWrapper } from './components/Navigation/QuoteLinksWrapper'\r\nimport { SaveToPortfolioLink } from './components/Navigation/SaveToPortfolioLink'\r\nimport { QuotePortalContext } from './components/Portal'\r\nimport { QuoteQuery, QuoteSubview, QuoteView } from './types'\r\n\r\nexport function QuoteNavigation() {\r\n const { rootElement } = React.useContext(QuotePortalContext)\r\n const hasShortInterest = rootElement!.dataset.shortinterest === 'true'\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n Chart\r\n Stock Detail\r\n \r\n •\r\n\r\n \r\n Compare Perf.\r\n \r\n •\r\n\r\n {hasShortInterest && (\r\n <>\r\n Short Interest\r\n •\r\n \r\n )}\r\n\r\n Financials\r\n •\r\n\r\n {FinvizSettings.hasTrafficPageEnabled && (\r\n <>\r\n Traffic\r\n •\r\n \r\n )}\r\n\r\n \r\n Options\r\n \r\n •\r\n\r\n \r\n •\r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import { CHART_ELEMENT_ID } from 'finviz-charts/app/constants/common'\r\nimport ReactDOM from 'react-dom'\r\n\r\nimport { SpecificChartFunctionality, TIMEFRAME } from '../../main/constants'\r\nimport { ChartLayoutWithGlobalState, FREE_DATE_RANGES, Theme } from '../charts-lib'\r\nimport { decodeQueryString } from '../queryString'\r\nimport { getChartLayoutSizeConfig, useChartLayoutWidthWatch } from './hooks/use-chart-layout-width-watch'\r\n\r\nexport function QuoteChart() {\r\n useChartLayoutWidthWatch()\r\n const chartEl = document.getElementById(CHART_ELEMENT_ID)\r\n const chartConfig = window.globalChartConfig\r\n const theme = FinvizSettings.hasDarkTheme ? Theme.dark : Theme.light\r\n\r\n if (chartEl && chartConfig) {\r\n const { p = FinvizSettings.defaultPeriod as TIMEFRAME } = decodeQueryString<{ p?: TIMEFRAME }>()\r\n return ReactDOM.createPortal(\r\n ({\r\n ...chart,\r\n dateRange:\r\n FinvizSettings.hasUserPremium || FREE_DATE_RANGES.includes(chart.dateRange ?? '')\r\n ? chart.dateRange\r\n : null,\r\n })),\r\n theme,\r\n }}\r\n parentElement={chartEl}\r\n />,\r\n chartEl\r\n )\r\n }\r\n return null\r\n}\r\n","/* global FinvizQuoteTickers */\r\nimport classnames from 'classnames'\r\nimport * as dateFns from 'date-fns'\r\nimport React, { ChangeEvent, Component, FormEvent } from 'react'\r\n\r\nimport { DatePicker } from '../../../main/components/date-picker'\r\nimport { SpecificChartFunctionality } from '../../../main/constants'\r\nimport {\r\n ChartElementType,\r\n ChartLayout,\r\n Instrument,\r\n Quote,\r\n QuoteFetchType,\r\n TIMEFRAME,\r\n Theme,\r\n Utils,\r\n} from '../../charts-lib'\r\nimport { decodeQueryString } from '../../queryString'\r\nimport { getStaticChartConfig } from '../../shared/chartLayoutConfig'\r\nimport { getSanitizedTicker } from '../../shared/ticker-sanitizer'\r\nimport { formatDateToStringUS } from '../../shared/utils'\r\n\r\nconst redesignEnabled = !!FinvizSettings.hasRedesignEnabled\r\n\r\nvar colorScaleClass = function (value: number) {\r\n if (value < 0) {\r\n return 'color-text is-negative'\r\n } else if (value > 0) {\r\n return 'color-text is-positive'\r\n }\r\n return ''\r\n}\r\n\r\nvar monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n\r\nvar arraysEqual = function (arr1: unknown[], arr2: unknown[]) {\r\n if (arr1.length !== arr2.length) {\r\n return false\r\n }\r\n for (var i = 0; i < arr1.length; i++) {\r\n if (arr1[i] !== arr2[i]) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n\r\ninterface ChartProps {\r\n tickers: string[]\r\n fromDay: string\r\n toDay: string\r\n}\r\n\r\nclass Chart extends Component {\r\n containerRef = React.createRef()\r\n\r\n shouldComponentUpdate(nextProps: ChartProps) {\r\n return !arraysEqual(this.props.tickers, nextProps.tickers)\r\n }\r\n\r\n render() {\r\n const theme = FinvizSettings.hasDarkTheme ? Theme.dark : Theme.light\r\n const tickerQuote = Quote.select((q) => q.close.length > 0 && this.props.tickers.includes(q.ticker))\r\n const chartConfig = getStaticChartConfig({\r\n ticker: tickerQuote[0]?.ticker ?? '',\r\n timeframe: TIMEFRAME.d,\r\n paneElements: [\r\n {\r\n type: ChartElementType.PerfChart,\r\n tickers: this.props.tickers,\r\n fromDate: this.props.fromDay,\r\n toDate: this.props.toDay,\r\n overlays: [],\r\n },\r\n ],\r\n width: 1000,\r\n height: 450,\r\n refreshData: false,\r\n specificChartFunctionality: SpecificChartFunctionality.quotePerf,\r\n theme,\r\n })\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\ninterface TableProps {\r\n months: string[]\r\n rows: Array<{\r\n ticker: string\r\n months: string[]\r\n total: string\r\n }>\r\n}\r\n\r\n// mozno vyfarbovat tabulku?\r\nclass Table extends Component {\r\n render() {\r\n var { months, rows } = this.props,\r\n groupsCount = Math.ceil(months.length / 12)\r\n rows = rows.slice()\r\n const tdClasses = classnames('text-center', {\r\n 'body-table-nw font-bold': !redesignEnabled,\r\n })\r\n\r\n var trs = []\r\n for (let g = 0; g < groupsCount; g++) {\r\n trs.push(\r\n \r\n \r\n {months.splice(0, 12).map((month) => (\r\n \r\n {month}\r\n \r\n ))}\r\n {g === groupsCount - 1 && Total}\r\n \r\n )\r\n rows.forEach((row, i) => {\r\n trs.push(\r\n \r\n {row.ticker}\r\n {row.months.splice(0, 12).map((col, monthIndex) => (\r\n \r\n {col}\r\n \r\n ))}\r\n {g === groupsCount - 1 && (\r\n \r\n {row.total}\r\n \r\n )}\r\n \r\n )\r\n })\r\n }\r\n\r\n return (\r\n \r\n {trs}\r\n \r\n )\r\n }\r\n}\r\n\r\ninterface PerfState {\r\n tickersInput: string\r\n tickers: string[]\r\n months: Array<{\r\n value: string\r\n label: string\r\n }>\r\n fromMonth: {\r\n value: string\r\n label: string\r\n }\r\n toMonth: {\r\n value: string\r\n label: string\r\n }\r\n minDate: string\r\n maxDate: string\r\n fromDay: string\r\n toDay: string\r\n loading: boolean\r\n}\r\n\r\nexport class Perf extends Component {\r\n constructor(props: any) {\r\n super(props)\r\n var now = new Date(),\r\n months = []\r\n const startYear = new Date().getFullYear() - 36 // We have 37.25 years of data in DB, so leaving some offset\r\n for (var year = startYear; year <= now.getFullYear(); year++) {\r\n for (var month = 1; month <= 12; month++) {\r\n if (year === now.getFullYear() && month > now.getMonth() + 1) {\r\n break\r\n }\r\n months.push({\r\n value: month.toString().padStart(2, '0') + '/01/' + year,\r\n label: monthNames[month - 1] + ' ' + year.toString().substring(2),\r\n })\r\n }\r\n }\r\n\r\n this.state = {\r\n tickersInput: FinvizQuoteTickers.join(','),\r\n tickers: FinvizQuoteTickers,\r\n months: months,\r\n fromMonth: months[months.length - 12],\r\n toMonth: months[months.length - 1],\r\n /**\r\n * DB_BARS_LIMIT - code below is dependent on amount of data we store for specific timeframes\r\n * Search DB_BARS_LIMIT in the project to find other places with such code.\r\n */\r\n // 2510 bars = ±10 years\r\n minDate: formatDateToStringUS(dateFns.sub(new Date(), { years: 9, months: 11 })),\r\n maxDate: formatDateToStringUS(new Date()),\r\n fromDay: formatDateToStringUS(dateFns.subYears(new Date(), 1)),\r\n toDay: formatDateToStringUS(new Date()),\r\n loading: true,\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.loading) {\r\n return (\r\n \r\n Loading...\r\n \r\n )\r\n }\r\n\r\n var from = new Date(this.state.fromMonth.value)\r\n var to = new Date(this.state.toMonth.value)\r\n var monthsToShow = this.state.months\r\n .map((month) => month.value)\r\n .filter((month) => new Date(month) >= from && new Date(month) <= to)\r\n\r\n var quotes = Quote.select((q: any) => q.timeframe === 'm')\r\n var quotesPerf = quotes.map((q: any) => {\r\n var obj: { ticker: string; perf: Record } = { ticker: q.ticker, perf: {} }\r\n q.date.forEach((d: any, i: number) => {\r\n if (i === 0) {\r\n return\r\n }\r\n var date = Utils.dateFromUnixTimestamp(d)\r\n var perf = (q.close[i] * 100) / q.close[i - 1] - 100\r\n obj.perf[(date.getMonth() + 1).toString().padStart(2, '0') + '/01/' + date.getFullYear()] = perf\r\n })\r\n return obj\r\n })\r\n\r\n var months = monthsToShow.map(\r\n (month) => monthNames[new Date(month).getMonth()] + ' ' + new Date(month).getFullYear().toString().substring(2)\r\n )\r\n var rows = quotesPerf.map((quote: any) => {\r\n var cols: string[] = []\r\n var total = 1\r\n monthsToShow.forEach((month) => {\r\n var perf = Math.round(quote.perf[month] * 100) / 100\r\n if (!isNaN(perf)) {\r\n total *= quote.perf[month] / 100 + 1\r\n cols.push((perf > 0 ? '+' : '') + perf.toFixed(2) + '%')\r\n } else {\r\n cols.push('N/A')\r\n }\r\n })\r\n total = (total - 1) * 100\r\n return { ticker: quote.ticker, months: cols, total: (total > 0 ? '+' : '') + total.toFixed(2) + '%' }\r\n })\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Tickers:\r\n {\r\n this.setState({ tickersInput: e.target.value })\r\n }}\r\n style={{ width: '100%' }}\r\n data-testid=\"quote-compare-perf-tickers-input\"\r\n />\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n {\r\n this._onDatePickerChange('from', formatDateToStringUS(newValue))\r\n }}\r\n >\r\n \r\n \r\n
\r\n {' - '}\r\n
\r\n {\r\n this._onDatePickerChange('to', formatDateToStringUS(newValue))\r\n }}\r\n >\r\n \r\n \r\n
\r\n \r\n\r\n

\r\n Monthly performance from  \r\n \r\n {this.state.months.map((option) => (\r\n \r\n ))}\r\n \r\n   to  \r\n \r\n {this.state.months.map((option) => (\r\n \r\n ))}\r\n \r\n

\r\n \r\n\r\n
\r\n \r\n )\r\n }\r\n\r\n refetchQuotes = () => {\r\n this._fetch(this.state.tickers, false)\r\n }\r\n\r\n componentDidMount() {\r\n this._fetch(this.state.tickers)\r\n\r\n // We have to listen to these events to synchrnously update quote data, if we do after awaiting Quote.getAll in _fetch\r\n // there's a visual glitch because it rerenders with new data from the server (there's a complete refetch after 15 requests with no new data)\r\n // and then it rerenders again after updateQuoteData\r\n Quote.bind('refetch newerData', this.updateQuoteData)\r\n document.addEventListener('quoteFetchEvent', this.refetchQuotes)\r\n }\r\n\r\n componentWillUnmount() {\r\n Quote.unbind('refetch newerData', this.updateQuoteData)\r\n document.removeEventListener('quoteFetchEvent', this.refetchQuotes)\r\n }\r\n\r\n updateQuoteData = () => {\r\n const { fromDay, toDay } = this.state\r\n\r\n if (!fromDay || !toDay) {\r\n return\r\n }\r\n\r\n const dailyQuotes = Quote.select((q: any) => q.timeframe === 'd')\r\n const fromDate = new Date(fromDay + ' 00:00')\r\n const toDate = new Date(toDay + ' 23:59')\r\n dailyQuotes.forEach((q: any) => {\r\n const o = [],\r\n h = [],\r\n l = [],\r\n c = [],\r\n d = [],\r\n v = []\r\n for (let i = 0; i < q.close.length; i++) {\r\n const date = Utils.dateFromUnixTimestamp(q.date[i])\r\n if (fromDate <= date && date <= toDate) {\r\n o.push(q.open[i])\r\n h.push(q.high[i])\r\n l.push(q.low[i])\r\n c.push(q.close[i])\r\n d.push(q.date[i])\r\n v.push(q.volume[i])\r\n }\r\n }\r\n // Clear cache so we'll recalculate values after updating quote data on next line\r\n // Cache invalidates only on quote.fetchedAt change and in this case we mutate quote values and don't change fetchedAt (which is correct)\r\n // Updating quote this way should be an edge case and that's why we have to clear the cache manually\r\n q.clearCachedData()\r\n q.updateAttributes({\r\n open: o,\r\n high: h,\r\n low: l,\r\n close: c,\r\n date: d,\r\n volume: v,\r\n })\r\n })\r\n\r\n // This is to rerender perf table on quote update\r\n this.forceUpdate()\r\n }\r\n\r\n _fetch = async (tickers: string[], isRefetch = true) => {\r\n const { t } = decodeQueryString<{ t: string; p?: TIMEFRAME }>()\r\n if (isRefetch) {\r\n this.setState({ loading: true })\r\n }\r\n\r\n Quote.all().forEach(async (quote) => {\r\n if (quote.ticker === t && quote.timeframe === 'd' && !isRefetch) {\r\n // We don't want to trigger main ticker quote newer data fetch because it's done in withQuotePolling which also triggers this function\r\n // by emmiting quoteFetchEvent\r\n return\r\n }\r\n if (tickers.includes(quote.ticker)) {\r\n await quote.fetchData({ fetchType: isRefetch ? QuoteFetchType.Refetch : QuoteFetchType.NewerData })\r\n this.updateQuoteData()\r\n } else {\r\n quote.destroy()\r\n }\r\n })\r\n\r\n if (isRefetch) {\r\n var d = tickers.map((ticker) => ({ ticker: ticker, timeframe: TIMEFRAME.d, instrument: Instrument.Stock }))\r\n var m = tickers.map((ticker) => ({ ticker: ticker, timeframe: TIMEFRAME.m, instrument: Instrument.Stock }))\r\n await Quote.getAll(d.concat(m))\r\n\r\n this.setState({ loading: false })\r\n }\r\n\r\n this.updateQuoteData()\r\n }\r\n\r\n _onSubmit = (e: FormEvent) => {\r\n e.preventDefault()\r\n const tickersInput = getSanitizedTicker(this.state.tickersInput, true)\r\n const tickers = tickersInput.split(',')\r\n this.setState({ tickers, tickersInput }, () => {\r\n this._fetch(tickers)\r\n })\r\n }\r\n\r\n _onMonthChange = (type: string, e: ChangeEvent) => {\r\n var state: any = {}\r\n state[type + 'Month'] = this.state.months.filter((m) => m.value === e.target.value)[0]\r\n this.setState(state)\r\n }\r\n\r\n _onDatePickerChange = (type: string, date: any) => {\r\n var formattedDate = formatDateToStringUS(new Date(date))\r\n\r\n var state: any = {}\r\n state[type + 'Day'] = formattedDate\r\n state[type + 'DatePickerOpen'] = false\r\n this.setState(state, () => {\r\n this._fetch(this.state.tickers)\r\n })\r\n }\r\n}\r\n","var _excluded = [\"x1\", \"y1\", \"x2\", \"y2\", \"key\"],\n _excluded2 = [\"offset\"];\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Cartesian Grid\n */\nimport React, { PureComponent } from 'react';\nimport isFunction from 'lodash/isFunction';\nimport { isNumber } from '../util/DataUtils';\nimport { filterProps } from '../util/ReactUtils';\nexport var CartesianGrid = /*#__PURE__*/function (_PureComponent) {\n _inherits(CartesianGrid, _PureComponent);\n var _super = _createSuper(CartesianGrid);\n function CartesianGrid() {\n _classCallCheck(this, CartesianGrid);\n return _super.apply(this, arguments);\n }\n _createClass(CartesianGrid, [{\n key: \"renderHorizontal\",\n value:\n /**\n * Draw the horizontal grid lines\n * @param {Array} horizontalPoints either passed in as props or generated from function\n * @return {Group} Horizontal lines\n */\n function renderHorizontal(horizontalPoints) {\n var _this = this;\n var _this$props = this.props,\n x = _this$props.x,\n width = _this$props.width,\n horizontal = _this$props.horizontal;\n if (!horizontalPoints || !horizontalPoints.length) {\n return null;\n }\n var items = horizontalPoints.map(function (entry, i) {\n var props = _objectSpread(_objectSpread({}, _this.props), {}, {\n x1: x,\n y1: entry,\n x2: x + width,\n y2: entry,\n key: \"line-\".concat(i),\n index: i\n });\n return CartesianGrid.renderLineItem(horizontal, props);\n });\n return /*#__PURE__*/React.createElement(\"g\", {\n className: \"recharts-cartesian-grid-horizontal\"\n }, items);\n }\n\n /**\n * Draw vertical grid lines\n * @param {Array} verticalPoints either passed in as props or generated from function\n * @return {Group} Vertical lines\n */\n }, {\n key: \"renderVertical\",\n value: function renderVertical(verticalPoints) {\n var _this2 = this;\n var _this$props2 = this.props,\n y = _this$props2.y,\n height = _this$props2.height,\n vertical = _this$props2.vertical;\n if (!verticalPoints || !verticalPoints.length) {\n return null;\n }\n var items = verticalPoints.map(function (entry, i) {\n var props = _objectSpread(_objectSpread({}, _this2.props), {}, {\n x1: entry,\n y1: y,\n x2: entry,\n y2: y + height,\n key: \"line-\".concat(i),\n index: i\n });\n return CartesianGrid.renderLineItem(vertical, props);\n });\n return /*#__PURE__*/React.createElement(\"g\", {\n className: \"recharts-cartesian-grid-vertical\"\n }, items);\n }\n\n /**\n * Draw vertical grid stripes filled by colors\n * @param {Array} verticalPoints either passed in as props or generated from function\n * @return {Group} Vertical stripes\n */\n }, {\n key: \"renderVerticalStripes\",\n value: function renderVerticalStripes(verticalPoints) {\n var verticalFill = this.props.verticalFill;\n if (!verticalFill || !verticalFill.length) {\n return null;\n }\n var _this$props3 = this.props,\n fillOpacity = _this$props3.fillOpacity,\n x = _this$props3.x,\n y = _this$props3.y,\n width = _this$props3.width,\n height = _this$props3.height;\n var roundedSortedVerticalPoints = verticalPoints.map(function (e) {\n return Math.round(e + x - x);\n }).sort(function (a, b) {\n return a - b;\n });\n if (x !== roundedSortedVerticalPoints[0]) {\n roundedSortedVerticalPoints.unshift(0);\n }\n var items = roundedSortedVerticalPoints.map(function (entry, i) {\n var lastStripe = !roundedSortedVerticalPoints[i + 1];\n var lineWidth = lastStripe ? x + width - entry : roundedSortedVerticalPoints[i + 1] - entry;\n if (lineWidth <= 0) {\n return null;\n }\n var colorIndex = i % verticalFill.length;\n return /*#__PURE__*/React.createElement(\"rect\", {\n key: \"react-\".concat(i) // eslint-disable-line react/no-array-index-key\n ,\n x: entry,\n y: y,\n width: lineWidth,\n height: height,\n stroke: \"none\",\n fill: verticalFill[colorIndex],\n fillOpacity: fillOpacity,\n className: \"recharts-cartesian-grid-bg\"\n });\n });\n return /*#__PURE__*/React.createElement(\"g\", {\n className: \"recharts-cartesian-gridstripes-vertical\"\n }, items);\n }\n\n /**\n * Draw horizontal grid stripes filled by colors\n * @param {Array} horizontalPoints either passed in as props or generated from function\n * @return {Group} Horizontal stripes\n */\n }, {\n key: \"renderHorizontalStripes\",\n value: function renderHorizontalStripes(horizontalPoints) {\n var horizontalFill = this.props.horizontalFill;\n if (!horizontalFill || !horizontalFill.length) {\n return null;\n }\n var _this$props4 = this.props,\n fillOpacity = _this$props4.fillOpacity,\n x = _this$props4.x,\n y = _this$props4.y,\n width = _this$props4.width,\n height = _this$props4.height;\n var roundedSortedHorizontalPoints = horizontalPoints.map(function (e) {\n return Math.round(e + y - y);\n }).sort(function (a, b) {\n return a - b;\n });\n if (y !== roundedSortedHorizontalPoints[0]) {\n roundedSortedHorizontalPoints.unshift(0);\n }\n var items = roundedSortedHorizontalPoints.map(function (entry, i) {\n var lastStripe = !roundedSortedHorizontalPoints[i + 1];\n var lineHeight = lastStripe ? y + height - entry : roundedSortedHorizontalPoints[i + 1] - entry;\n if (lineHeight <= 0) {\n return null;\n }\n var colorIndex = i % horizontalFill.length;\n return /*#__PURE__*/React.createElement(\"rect\", {\n key: \"react-\".concat(i) // eslint-disable-line react/no-array-index-key\n ,\n y: entry,\n x: x,\n height: lineHeight,\n width: width,\n stroke: \"none\",\n fill: horizontalFill[colorIndex],\n fillOpacity: fillOpacity,\n className: \"recharts-cartesian-grid-bg\"\n });\n });\n return /*#__PURE__*/React.createElement(\"g\", {\n className: \"recharts-cartesian-gridstripes-horizontal\"\n }, items);\n }\n }, {\n key: \"renderBackground\",\n value: function renderBackground() {\n var fill = this.props.fill;\n if (!fill || fill === 'none') {\n return null;\n }\n var _this$props5 = this.props,\n fillOpacity = _this$props5.fillOpacity,\n x = _this$props5.x,\n y = _this$props5.y,\n width = _this$props5.width,\n height = _this$props5.height;\n return /*#__PURE__*/React.createElement(\"rect\", {\n x: x,\n y: y,\n width: width,\n height: height,\n stroke: \"none\",\n fill: fill,\n fillOpacity: fillOpacity,\n className: \"recharts-cartesian-grid-bg\"\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props6 = this.props,\n x = _this$props6.x,\n y = _this$props6.y,\n width = _this$props6.width,\n height = _this$props6.height,\n horizontal = _this$props6.horizontal,\n vertical = _this$props6.vertical,\n horizontalCoordinatesGenerator = _this$props6.horizontalCoordinatesGenerator,\n verticalCoordinatesGenerator = _this$props6.verticalCoordinatesGenerator,\n xAxis = _this$props6.xAxis,\n yAxis = _this$props6.yAxis,\n offset = _this$props6.offset,\n chartWidth = _this$props6.chartWidth,\n chartHeight = _this$props6.chartHeight,\n syncWithTicks = _this$props6.syncWithTicks,\n horizontalValues = _this$props6.horizontalValues,\n verticalValues = _this$props6.verticalValues;\n if (!isNumber(width) || width <= 0 || !isNumber(height) || height <= 0 || !isNumber(x) || x !== +x || !isNumber(y) || y !== +y) {\n return null;\n }\n var _this$props7 = this.props,\n horizontalPoints = _this$props7.horizontalPoints,\n verticalPoints = _this$props7.verticalPoints;\n\n // No horizontal points are specified\n if ((!horizontalPoints || !horizontalPoints.length) && isFunction(horizontalCoordinatesGenerator)) {\n var isHorizontalValues = horizontalValues && horizontalValues.length;\n horizontalPoints = horizontalCoordinatesGenerator({\n yAxis: yAxis ? _objectSpread(_objectSpread({}, yAxis), {}, {\n ticks: isHorizontalValues ? horizontalValues : yAxis.ticks\n }) : undefined,\n width: chartWidth,\n height: chartHeight,\n offset: offset\n }, isHorizontalValues ? true : syncWithTicks);\n }\n\n // No vertical points are specified\n if ((!verticalPoints || !verticalPoints.length) && isFunction(verticalCoordinatesGenerator)) {\n var isVerticalValues = verticalValues && verticalValues.length;\n verticalPoints = verticalCoordinatesGenerator({\n xAxis: xAxis ? _objectSpread(_objectSpread({}, xAxis), {}, {\n ticks: isVerticalValues ? verticalValues : xAxis.ticks\n }) : undefined,\n width: chartWidth,\n height: chartHeight,\n offset: offset\n }, isVerticalValues ? true : syncWithTicks);\n }\n return /*#__PURE__*/React.createElement(\"g\", {\n className: \"recharts-cartesian-grid\"\n }, this.renderBackground(), horizontal && this.renderHorizontal(horizontalPoints), vertical && this.renderVertical(verticalPoints), horizontal && this.renderHorizontalStripes(horizontalPoints), vertical && this.renderVerticalStripes(verticalPoints));\n }\n }], [{\n key: \"renderLineItem\",\n value: function renderLineItem(option, props) {\n var lineItem;\n if ( /*#__PURE__*/React.isValidElement(option)) {\n lineItem = /*#__PURE__*/React.cloneElement(option, props);\n } else if (isFunction(option)) {\n lineItem = option(props);\n } else {\n var x1 = props.x1,\n y1 = props.y1,\n x2 = props.x2,\n y2 = props.y2,\n key = props.key,\n others = _objectWithoutProperties(props, _excluded);\n var _filterProps = filterProps(others),\n __ = _filterProps.offset,\n restOfFilteredProps = _objectWithoutProperties(_filterProps, _excluded2);\n lineItem = /*#__PURE__*/React.createElement(\"line\", _extends({}, restOfFilteredProps, {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n fill: \"none\",\n key: key\n }));\n }\n return lineItem;\n }\n }]);\n return CartesianGrid;\n}(PureComponent);\n_defineProperty(CartesianGrid, \"displayName\", 'CartesianGrid');\n_defineProperty(CartesianGrid, \"defaultProps\", {\n horizontal: true,\n vertical: true,\n // The ordinates of horizontal grid lines\n horizontalPoints: [],\n // The abscissas of vertical grid lines\n verticalPoints: [],\n stroke: '#ccc',\n fill: 'none',\n // The fill of colors of grid lines\n verticalFill: [],\n horizontalFill: []\n});","import colors from '../../../../../../config/colors'\r\n\r\nexport const CHART_HEIGHT = 300\r\nexport const BAR_WIDTH = 8\r\nexport const BAR_BORDER_RADIUS: [number, number, number, number] = [2, 2, 0, 0]\r\nexport const STROKE_COLOR = FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[100]\r\nexport const LINE_COLOR = FinvizSettings.hasDarkTheme ? colors.blue[400] : colors.blue[400]\r\nexport const SALE_BAR_COLOR = colors.red[400]\r\nexport const BUY_BAR_COLOR = colors.green[400]\r\nexport const Y_TICK_STYLE = {\r\n fontSize: 10,\r\n fontWeight: 500,\r\n fill: FinvizSettings.hasDarkTheme ? colors.gray[300] : colors.gray[500],\r\n}\r\nexport const X_TICK_STYLE = {\r\n fontSize: 10,\r\n fontWeight: 400,\r\n fill: FinvizSettings.hasDarkTheme ? colors.gray[300] : colors.gray[500],\r\n}\r\nexport const TOOLTIP_WRAPPER_STYLE = { outline: 'none', zIndex: 10 }\r\nexport const CURSOR_STYLE = {\r\n border: 0,\r\n stroke: 0,\r\n fill: FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[50],\r\n opacity: 0.65,\r\n}\r\nexport const TRANSPARENT_CURSOR = { opacity: 0 }\r\n\r\nexport enum BarType {\r\n Buy = 'Buy',\r\n Sale = 'Sale',\r\n}\r\n\r\nexport const BarColorMap: Record = {\r\n [BarType.Buy]: BUY_BAR_COLOR,\r\n [BarType.Sale]: SALE_BAR_COLOR,\r\n}\r\n\r\nexport const BarLabelMap: Record = {\r\n [BarType.Buy]: 'Insider Buy Volume',\r\n [BarType.Sale]: 'Insider Sells Volume',\r\n}\r\n","import classNames from 'classnames'\r\nimport { endOfMonth, startOfMonth } from 'date-fns'\r\n\r\nimport { formatValue } from '../../../bubbles/utils'\r\nimport { BarColorMap, BarLabelMap, BarType } from './constants'\r\nimport { ChartData, VolumeChartDataPerTimeframe } from './types'\r\n\r\ntype ChartTooltipProps = {\r\n label?: number\r\n isActive?: boolean\r\n payload?: Array<{ payload?: ChartData }>\r\n activeKey: BarType | null\r\n}\r\n\r\nfunction formatDateTitle(date: number) {\r\n const startDate = startOfMonth(date)\r\n const endDate = endOfMonth(startDate)\r\n\r\n const month = startDate.toLocaleString('en-US', { month: 'short' })\r\n const startDay = startDate.getDate()\r\n const year = startDate.getFullYear()\r\n const endDay = endDate.getDate()\r\n return `${month} ${startDay}-${endDay}, ${year}`\r\n}\r\n\r\nfunction formatDataValue(barType: BarType, payload: Partial = {}) {\r\n const tradeCount = barType === BarType.Buy ? payload.buyTransactionCount : payload.saleTransactionCount\r\n const value = barType === BarType.Buy ? payload.buyAggregated : payload.saleAggregated\r\n return `${formatValue(value ?? 0)} (${tradeCount ?? 0} Trade${tradeCount === 1 ? '' : 's'})`\r\n}\r\n\r\nfunction BarTooltipLabel({\r\n activeKey,\r\n barType,\r\n payload,\r\n}: {\r\n activeKey: BarType | null\r\n barType: BarType\r\n payload?: VolumeChartDataPerTimeframe\r\n}) {\r\n return (\r\n \r\n {BarLabelMap[barType]}\r\n \r\n {formatDataValue(barType, payload)}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default function ChartTooltip({ isActive, activeKey, payload, label }: ChartTooltipProps) {\r\n const cursorPayload = payload?.[0]?.payload?.insider\r\n\r\n if (!isActive) return null\r\n\r\n return (\r\n \r\n {label && (\r\n
\r\n {formatDateTitle(label)}\r\n
\r\n )}\r\n \r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { Rectangle } from 'recharts'\r\n\r\nimport { BAR_WIDTH, BarType } from './constants'\r\n\r\nexport function InsiderVolumeBar({ x, width, ...props }: any) {\r\n let newX = x\r\n const value = props.payload[props.dataKey]\r\n const isCenteredBar = props.payload.saleAggregated === 0 || props.payload.buyAggregated === 0\r\n if (isCenteredBar) {\r\n if (props.name === BarType.Sale) newX += width / 2\r\n else newX -= width / 2\r\n }\r\n\r\n if (value === 0 || !Number.isFinite(value)) {\r\n // Needs to return an element, so return an empty node\r\n return \r\n }\r\n\r\n return (\r\n \r\n \r\n {props.name === BarType.Sale && (\r\n \r\n )}\r\n {props.name === BarType.Buy && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { endOfMonth, format, startOfMonth } from 'date-fns'\r\nimport { getInstrument } from 'finviz-charts/app/utils/chart'\r\nimport * as React from 'react'\r\nimport {\r\n Bar,\r\n CartesianGrid,\r\n ComposedChart,\r\n Line,\r\n Rectangle,\r\n RectangleProps,\r\n ResponsiveContainer,\r\n Tooltip,\r\n XAxis,\r\n YAxis,\r\n} from 'recharts'\r\n\r\nimport { parseRouteInitData } from '../../../../main/util'\r\nimport { formatValue } from '../../../bubbles/utils'\r\nimport { Quote, TIMEFRAME } from '../../../charts-lib'\r\nimport { getDate } from '../../../header/utils'\r\nimport { decodeQueryString } from '../../../queryString'\r\nimport { QuoteContext } from '../../QuoteContext'\r\nimport ChartTooltip from './ChartTooltip'\r\nimport { InsiderVolumeBar } from './InsiderVolumeBar'\r\nimport {\r\n BAR_BORDER_RADIUS,\r\n BUY_BAR_COLOR,\r\n BarType,\r\n CHART_HEIGHT,\r\n CURSOR_STYLE,\r\n LINE_COLOR,\r\n SALE_BAR_COLOR,\r\n STROKE_COLOR,\r\n TOOLTIP_WRAPPER_STYLE,\r\n TRANSPARENT_CURSOR,\r\n X_TICK_STYLE,\r\n Y_TICK_STYLE,\r\n} from './constants'\r\nimport { ChartData, TradingVolumeChartInit } from './types'\r\nimport { filterDataForChart } from './utils'\r\n\r\ninterface InsiderTradingVolumeChartProps {\r\n className?: string\r\n}\r\n\r\ninterface CustomCursorProps extends Partial> {\r\n numberOfDatapoints: number\r\n isActive: boolean\r\n points?: [{ x: number; y: number }]\r\n}\r\n\r\nfunction CustomCursor({ numberOfDatapoints, points, ...props }: CustomCursorProps) {\r\n const cursorWidth = props.width! / numberOfDatapoints\r\n const x = points![0].x - cursorWidth / 2\r\n const y = points![0].y\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction xAxisTickFormatter(value: any) {\r\n if (!Number.isFinite(value)) return ''\r\n\r\n const date = getDate(value)\r\n return date.getMonth() === 0 ? date.getFullYear().toString() : format(date, 'MMM')\r\n}\r\n\r\nexport function InsiderTradingVolumeChart({ className }: InsiderTradingVolumeChartProps) {\r\n const { index } = React.useContext(QuoteContext)\r\n const [isActive, setIsActive] = React.useState(false)\r\n const [chartData, setChartData] = React.useState([])\r\n const [activeKey, setActiveKey] = React.useState(null)\r\n\r\n const initData = React.useMemo(() => {\r\n const data = parseRouteInitData({\r\n elementId: `insider-init-data-${index}`,\r\n removeElement: false,\r\n })\r\n\r\n return {\r\n data,\r\n domain: data?.length\r\n ? [\r\n getDate(startOfMonth(getDate(data[0].date))).getTime(),\r\n getDate(endOfMonth(getDate(data[data.length - 1].date))).getTime(),\r\n ]\r\n : [],\r\n }\r\n }, [index])\r\n\r\n const hasInsiderTradingHistory = React.useMemo(\r\n () => initData.data?.some((x) => x.saleTransactionCount > 0 || x.buyTransactionCount > 0),\r\n [initData]\r\n )\r\n\r\n React.useEffect(() => {\r\n const { t: urlTicker } = decodeQueryString()\r\n const ticker = urlTicker.split(',')[index]\r\n async function fetchQuoteData() {\r\n if (!initData.data?.length) return\r\n const quote = await Quote.get({ ticker, instrument: getInstrument(ticker), timeframe: TIMEFRAME.d })\r\n const dateFrom = initData.data[0].date\r\n const dateTo = initData.data[initData.data.length - 1]!.date\r\n const data = filterDataForChart(quote, dateFrom, dateTo)\r\n setChartData(data.map((row, index) => ({ ...row, insider: initData.data?.[index] })))\r\n }\r\n\r\n if (hasInsiderTradingHistory) fetchQuoteData()\r\n }, [initData, hasInsiderTradingHistory, index])\r\n\r\n const commonProps = React.useMemo(\r\n () => ({\r\n bar: {\r\n yAxisId: 'yAxisVolume',\r\n activeBar: false,\r\n shape: InsiderVolumeBar,\r\n radius: BAR_BORDER_RADIUS,\r\n isAnimationActive: false,\r\n onMouseLeave: () => setActiveKey(null),\r\n },\r\n xAxis: {\r\n dataKey: 'date',\r\n scale: 'time' as const,\r\n type: 'number' as const,\r\n dy: 5,\r\n tick: X_TICK_STYLE,\r\n tickLine: false,\r\n axisLine: false,\r\n domain: initData.domain,\r\n tickFormatter: xAxisTickFormatter,\r\n },\r\n yAxis: {\r\n tick: Y_TICK_STYLE,\r\n tickLine: false,\r\n axisLine: false,\r\n tickFormatter: (value: number) => formatValue(value),\r\n },\r\n }),\r\n [initData.domain]\r\n )\r\n\r\n if (!initData.data?.length || !hasInsiderTradingHistory) return null\r\n\r\n return (\r\n
\r\n
\r\n \r\n Insider Trading Volume\r\n \r\n
\r\n setIsActive(true)}\r\n onMouseLeave={() => setIsActive(false)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n content={}\r\n />\r\n \r\n setActiveKey(BarType.Sale)}\r\n />\r\n setActiveKey(BarType.Buy)}\r\n />\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n","import { endOfMonth, startOfMonth } from 'date-fns'\r\nimport { type Quote } from 'finviz-charts/server/offScreenCanvasRender'\r\n\r\nimport { getDate } from '../../../header/utils'\r\nimport { ChartBaseData } from './types'\r\n\r\n/**\r\n * Only get data between from/to range\r\n */\r\nexport function filterDataForChart(quote: Quote, fromDate: number, toDate: number) {\r\n const monthlyData: ChartBaseData[] = []\r\n\r\n const fromTimestamp = getDate(startOfMonth(getDate(fromDate))).getTime()\r\n const toTimestamp = getDate(endOfMonth(getDate(toDate))).getTime()\r\n for (let index = 0; index < quote.date.length; index++) {\r\n const currentTimestamp = quote.date[index] * 1000\r\n const currentClose = quote.close[quote.barToDataIndex[index]]\r\n\r\n if (fromTimestamp > currentTimestamp || currentTimestamp > toTimestamp) continue\r\n\r\n monthlyData.push({ date: currentTimestamp, close: currentClose })\r\n }\r\n\r\n return monthlyData\r\n}\r\n","import classnames from 'classnames'\r\n\r\nimport { formatDate } from '../../app/header/utils'\r\nimport { formatNumber } from '../util'\r\nimport { RedGreenMultiline, RedGreenText } from './RedGreenText'\r\n\r\nexport interface QuotePriceProps {\r\n title?: string\r\n date?: Date | null\r\n dateLabel?: string | null\r\n price: number\r\n changeUsd: number\r\n changePct: number\r\n}\r\n\r\nexport function QuotePrice({ title, date, dateLabel, price, changeUsd, changePct }: QuotePriceProps) {\r\n const fractions = !isNaN(price) && price < 1 ? 4 : 2\r\n const hasValue = changeUsd && Number.isFinite(changeUsd)\r\n\r\n return (\r\n
\r\n {title &&
{title}
}\r\n\r\n {(date || dateLabel) && (\r\n \r\n {dateLabel ?? formatDate(date, '', 'MMM dd')}\r\n {date && (\r\n <>\r\n {' '}\r\n • {formatDate(date, '', 'hh:mmaa')} ET\r\n \r\n )}\r\n \r\n )}\r\n\r\n
\r\n {formatNumber(price, { defaultValue: '—', fractions })}\r\n
\r\n \r\n \r\n
Dollar change
\r\n {formatNumber(changeUsd, { showPlusSign: true, fractions })}\r\n
\r\n %}\r\n >\r\n
Percentage change
\r\n {formatNumber(changePct)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import { useModelState } from '../../../charts-lib'\r\n\r\nconst CHANGE_UPATE_EVENTS = ['change', 'update']\r\nconst QUOTE_MODEL_CHANGE_EVENTS = [...CHANGE_UPATE_EVENTS, 'refetch', 'newerData']\r\n\r\nexport interface HeaderPricesContext {\r\n prevClose: number\r\n lastClose: number\r\n lastTime: number\r\n lastDate?: number\r\n afterClose: number\r\n afterTime: number\r\n}\r\n\r\nexport function useChartContextPrices(chartLayoutModel: any): HeaderPricesContext | null {\r\n const chartModel = useModelState(chartLayoutModel?.charts().first(), {\r\n watchProperties: ['quote'],\r\n listenOnEvents: CHANGE_UPATE_EVENTS,\r\n })\r\n const quoteModel = useModelState(chartModel?.quote() ?? null, {\r\n watchProperties: ['lastClose', 'prevClose', 'afterClose', 'afterTime'],\r\n listenOnEvents: QUOTE_MODEL_CHANGE_EVENTS,\r\n })\r\n\r\n if (!quoteModel) return null\r\n\r\n return {\r\n prevClose: quoteModel.prevClose,\r\n lastClose: quoteModel.lastClose,\r\n lastTime: quoteModel.lastTime,\r\n lastDate: quoteModel.lastDate,\r\n afterClose: quoteModel.afterClose,\r\n afterTime: quoteModel.afterTime,\r\n }\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { QuotePrice } from '../../../../main/components/QuotePrice'\r\nimport {\r\n Quote,\r\n useChartLayoutGlobalModelAsync,\r\n withCompleteLayoutModelInit,\r\n withQuotePolling,\r\n} from '../../../charts-lib'\r\nimport { formatDate, getDate } from '../../../header/utils'\r\nimport { QuotePortalContext } from '../Portal'\r\nimport { HeaderPricesContext, useChartContextPrices } from './hooks'\r\n\r\nexport function ChartContextQuoteHeader() {\r\n const { toggleStaticElement } = React.useContext(QuotePortalContext)\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const data = useChartContextPrices(chartLayoutModel)\r\n\r\n React.useEffect(() => toggleStaticElement(), [toggleStaticElement])\r\n\r\n return \r\n}\r\n\r\ninterface QuoteHeaderWithManualInitProps {\r\n chartLayoutModel: any\r\n config: any\r\n}\r\n\r\nfunction ManualInitQuoteHeaderComponent({ chartLayoutModel, config }: QuoteHeaderWithManualInitProps) {\r\n const { toggleStaticElement } = React.useContext(QuotePortalContext)\r\n const data = useChartContextPrices(chartLayoutModel)\r\n\r\n /**\r\n * We need to instantiate layout model in order to use quote refetch on page\r\n * without an actual chart (options.) We also need to manually create a chart model\r\n *\r\n * It is then correctly caught in `useChartContextPrices`\r\n */\r\n React.useEffect(() => {\r\n async function fetchAndMapInitialQuote() {\r\n for (const chartConfig of config.charts) {\r\n const modelProperties = Object.assign({}, chartConfig)\r\n\r\n modelProperties.chart_layout = chartLayoutModel\r\n delete modelProperties.panes\r\n if (modelProperties.refreshData == null) {\r\n modelProperties.refreshData = true\r\n }\r\n chartLayoutModel.charts().create(modelProperties)\r\n }\r\n\r\n const chart = chartLayoutModel.charts().first()\r\n\r\n const quote = await Quote.get({\r\n ticker: chart.ticker,\r\n instrument: chart.instrument,\r\n timeframe: chart.timeframe,\r\n options: { maxBars: 0 },\r\n })\r\n\r\n chart.updateAttributes({ quote })\r\n toggleStaticElement()\r\n }\r\n\r\n fetchAndMapInitialQuote()\r\n }, [chartLayoutModel, config.charts, toggleStaticElement])\r\n\r\n return \r\n}\r\n\r\nexport const ManualInitQuoteHeader = withCompleteLayoutModelInit(withQuotePolling(ManualInitQuoteHeaderComponent))\r\n\r\nexport function QuoteHeaderContent({ data }: { data: HeaderPricesContext | null }) {\r\n if (!data) return null\r\n\r\n const isChange = Number.isFinite(data.prevClose)\r\n const isAfterChange = Number.isFinite(data.afterClose) && data.afterClose !== data.lastClose\r\n const lastTime = data.lastTime ? getDate(data.lastTime * 1000) : null\r\n const lastDate = !lastTime && data.lastDate ? formatDate(data.lastDate, 'yyyyMMdd', 'MMM dd, yyyy') : null\r\n const afterDate = data.afterTime ? getDate(data.afterTime * 1000) : null\r\n\r\n let afterhoursTitle\r\n if (lastTime && afterDate) {\r\n if (dateFns.isBefore(afterDate, lastTime)) afterhoursTitle = 'Premarket'\r\n else afterhoursTitle = 'Aftermarket'\r\n }\r\n\r\n return (\r\n <>\r\n {isChange && (\r\n \r\n )}\r\n {isAfterChange && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","import * as d3 from 'd3'\r\nimport { Component, RefObject, createRef } from 'react'\r\n\r\nexport interface Bar {\r\n name: string\r\n value: number\r\n}\r\n\r\ninterface BarChartProps {\r\n title?: string\r\n data: Bar[]\r\n width?: number\r\n height?: number\r\n valueFormatter?: (value: number) => string\r\n xAxisRotate?: boolean\r\n marginRight?: number\r\n className?: string\r\n}\r\n\r\nexport default class BarChart extends Component {\r\n svgRef: RefObject = createRef()\r\n\r\n // @ts-ignore\r\n _prevData: Bar[]\r\n\r\n componentDidMount() {\r\n this.renderChart()\r\n }\r\n\r\n componentDidUpdate() {\r\n this.renderChart()\r\n }\r\n\r\n renderChart() {\r\n const { data, title } = this.props\r\n if (data === this._prevData) {\r\n return\r\n }\r\n this._prevData = data\r\n this.svgRef.current!.innerHTML = ''\r\n\r\n const xAxisRotate = this.props.xAxisRotate === true\r\n\r\n var margin = { top: title ? 20 : 10, right: this.props.marginRight || 60, bottom: xAxisRotate ? 70 : 20, left: 15 }\r\n const totalWidth = this.props.width || 440\r\n const totalHeight = this.props.height || 330\r\n var width = totalWidth - margin.left - margin.right\r\n var height = totalHeight - margin.top - margin.bottom\r\n\r\n const x = d3\r\n .scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .rangeRound([0, width])\r\n .padding(0.1)\r\n\r\n let min = d3.min(data, (d: Bar) => d.value)!\r\n if (min < 0) {\r\n min = d3.min(data, (d: Bar) => Math.min(d.value, -d.value))!\r\n } else {\r\n min = 0\r\n }\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .range([height, 0])\r\n .domain([min, d3.max(data, (d: Bar) => Math.abs(d.value))!])\r\n .nice()\r\n const yFormat = this.props.valueFormatter ? this.props.valueFormatter : y.tickFormat()\r\n\r\n const svg = d3\r\n .select(this.svgRef.current)\r\n .property('value', [])\r\n .append('g')\r\n .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')\r\n\r\n var xAxis = d3.axisBottom(x)\r\n var yAxis = d3.axisRight(y).ticks(height > 200 ? 10 : 5)\r\n\r\n const makeYLines = () => d3.axisLeft(y)\r\n // @ts-ignore - tickFormat arg can be any string\r\n svg.append('g').attr('class', 'grid').call(makeYLines().tickSize(-width).tickSizeOuter(0).tickFormat(''))\r\n\r\n svg\r\n .append('g')\r\n .attr('class', 'x-axis axis')\r\n .attr('transform', 'translate(0,' + height + ')')\r\n .call(xAxis)\r\n\r\n svg\r\n .selectAll('.x-axis text')\r\n .style('text-anchor', xAxisRotate ? 'end' : 'middle')\r\n .attr('dx', xAxisRotate ? '-.8em' : 0)\r\n .attr('dy', xAxisRotate ? '.15em' : '0.8em')\r\n .attr('transform', 'rotate(' + (xAxisRotate ? -65 : 0) + ')')\r\n\r\n svg\r\n .append('g')\r\n .attr('class', 'y-axis axis')\r\n .attr('transform', 'translate(' + width + ', 0)')\r\n .call(yAxis)\r\n\r\n if (title) {\r\n svg\r\n .append('text')\r\n .attr('class', 'bar-chart-title')\r\n .attr('x', 4)\r\n .attr('y', -5)\r\n .attr('text-anchor', 'start')\r\n .text(title)\r\n }\r\n\r\n const getHeight = (d: Bar) => {\r\n let height = Math.abs(y(d.value ?? 0) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n }\r\n const isOutside = (height: number) => height < 14\r\n let bars = svg.selectAll('.bar').data(data)\r\n bars\r\n .enter()\r\n .append('rect')\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', (d: Bar) => x(d.name)!)\r\n .attr('y', (d: Bar) => y(Math.max(0, d.value)))\r\n .attr('height', getHeight)\r\n .attr('width', x.bandwidth())\r\n .attr('ry', FinvizSettings?.hasRedesignEnabled ? 2 : 0)\r\n\r\n svg\r\n .selectAll('.bar-label')\r\n .data(data)\r\n .enter()\r\n .append('text')\r\n .attr('class', 'divergence')\r\n .attr('x', (d: Bar) => x(d.name)! + x.bandwidth() / 2)\r\n .attr('y', (d: Bar) => {\r\n const height = getHeight(d)\r\n const outside = isOutside(height)\r\n if (d.value < 0) {\r\n return y(Math.max(0, d.value)) + height + (outside ? 12 : -4)\r\n }\r\n return y(Math.max(0, d.value)) + (outside ? -4 : 12)\r\n })\r\n .attr('fill', (d: Bar) => (!FinvizSettings.hasDarkTheme && isOutside(getHeight(d)) ? 'black' : 'white'))\r\n .attr('text-anchor', 'middle')\r\n .attr('font-size', '10px')\r\n .text((d: Bar) => (d.value !== null ? yFormat(d.value) : ''))\r\n\r\n this.svgRef.current!.style.width = totalWidth + 'px'\r\n this.svgRef.current!.style.height = totalHeight + 'px'\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","export enum StatementsDataEnum {\r\n yoyChange = 'yoyChange',\r\n yoyChangePct = 'yoyChangePct',\r\n}\r\n\r\nexport enum StatementsTimeframeEnum {\r\n annual = 'annual',\r\n quarterly = 'quarterly',\r\n}\r\n\r\nexport const SETTINGS_COOKIE_KEY = 'quoteStatementsTableSettings'\r\n\r\nexport const DEFAULT_SETTINGS = {\r\n [StatementsDataEnum.yoyChange]: false,\r\n [StatementsDataEnum.yoyChangePct]: false,\r\n statementsTimeframe: StatementsTimeframeEnum.annual,\r\n}\r\n\r\nexport type StatementsType = {\r\n [StatementsDataEnum.yoyChange]: boolean\r\n [StatementsDataEnum.yoyChangePct]: boolean\r\n statementsTimeframe: StatementsTimeframeEnum\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as d3 from 'd3'\r\nimport { isRedesignEnabled } from 'finviz-charts/app/utils'\r\nimport * as React from 'react'\r\nimport { Component, RefObject, createRef } from 'react'\r\n\r\nimport { ChipSwitch, ChipSwitchButton } from '../../../../main/components/ChipSwitch'\r\nimport { RedGreenText } from '../../../../main/components/RedGreenText'\r\nimport { FinancialsTableContextProvider, useFinancialsTableContext } from '../../../../main/components/financials-table'\r\nimport { Icon } from '../../../../main/components/icon'\r\nimport { getValue, setValue } from '../../../../main/services/local-storage'\r\nimport { shortFormatNumber } from '../../../../main/util'\r\nimport { decodeQueryString } from '../../../queryString'\r\nimport { AdTag, getInvestingChannelPage } from '../../../shared/components/Ads'\r\nimport BarChartBig from '../barChart'\r\nimport {\r\n DEFAULT_SETTINGS,\r\n SETTINGS_COOKIE_KEY,\r\n StatementsDataEnum,\r\n StatementsTimeframeEnum,\r\n StatementsType,\r\n} from './constants'\r\n\r\ninterface Bar {\r\n name: string\r\n value: number\r\n}\r\n\r\ninterface BarChartProps {\r\n data: Bar[]\r\n}\r\n\r\nclass BarChart extends Component {\r\n svgRef: RefObject\r\n\r\n constructor(props: BarChartProps) {\r\n super(props)\r\n this.svgRef = createRef()\r\n }\r\n\r\n componentDidMount() {\r\n this.renderChart()\r\n }\r\n\r\n componentDidUpdate() {\r\n this.renderChart()\r\n }\r\n\r\n renderChart() {\r\n const data = this.props.data\r\n\r\n const barWidth = 3\r\n const width = data.length * (barWidth + 1)\r\n const height = 16\r\n\r\n const x = d3\r\n .scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .range([0, width])\r\n\r\n let min = d3.min(data, (d: Bar) => d.value)!\r\n if (min < 0) {\r\n min = d3.min(data, (d: Bar) => Math.min(d.value, -d.value))!\r\n } else {\r\n min = 0\r\n }\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .range([height, 0])\r\n .domain([min, d3.max(data, (d: Bar) => Math.abs(d.value))] as [number, number])\r\n .nice()\r\n .unknown(height / 2)\r\n\r\n const svg = d3.select(this.svgRef.current).property('value', [])\r\n\r\n let bars = svg.selectAll('.bar').data(data)\r\n bars\r\n .enter()\r\n .append('rect')\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', function (d: Bar) {\r\n return x(d.name)!\r\n })\r\n .attr('y', function (d: Bar) {\r\n return y(Math.max(0, d.value))\r\n })\r\n .attr('height', function (d: Bar) {\r\n let height = Math.abs(y(d.value) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n })\r\n .attr('width', barWidth)\r\n bars\r\n .transition()\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', function (d: Bar) {\r\n return x(d.name)!\r\n })\r\n .attr('y', function (d: Bar) {\r\n return y(Math.max(0, d.value))\r\n })\r\n .attr('height', function (d: Bar) {\r\n let height = Math.abs(y(d.value) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n })\r\n .attr('width', barWidth)\r\n bars.exit().remove()\r\n\r\n this.svgRef.current!.style.width = width + 'px'\r\n this.svgRef.current!.style.height = height + 'px'\r\n }\r\n\r\n render() {\r\n return \r\n }\r\n}\r\n\r\nfunction EliteHoverAd() {\r\n return (\r\n
\r\n
\r\n \r\n

Upgrade your FINVIZ experience

\r\n

\r\n Join thousands of traders who make more informed decisions with our premium features. Real-time\r\n quotes, advanced visualizations, historical statements, and much more.\r\n

\r\n \r\n Learn more\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\ninterface BarChartWrapperProps {\r\n data: Bar[]\r\n}\r\n\r\nclass BarChartWrapper extends Component {\r\n state = {\r\n hover: false,\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n x.value !== null)}>\r\n \r\n \r\n \r\n {FinvizSettings.hasUserPremium ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst DEFAULT_SOURCE = 'F'\r\n\r\nconst _getDefaultSource = (): 'F' | 'R' => {\r\n if (!FinvizSettings.hasUserPremium) {\r\n return DEFAULT_SOURCE\r\n }\r\n\r\n return getValue('statements-source', DEFAULT_SOURCE) === 'R' ? 'R' : 'F'\r\n}\r\n\r\nconst getTimeframeFromStatementsSettingsTimeframe = (statementsTimeframe: StatementsTimeframeEnum) => {\r\n if (statementsTimeframe === StatementsTimeframeEnum.quarterly) {\r\n return 'Q'\r\n }\r\n\r\n // statementsTimeframe === StatementsTimeframeEnum.annual or fallback\r\n return 'A'\r\n}\r\n\r\ninterface StatementsState {\r\n source: 'F' | 'R'\r\n sheet: string\r\n currency: string | null\r\n data: Record | null\r\n}\r\n\r\nfunction StatementsComponent() {\r\n const { settings } = useFinancialsTableContext()\r\n const pageRef = React.useRef(getInvestingChannelPage())\r\n\r\n const [state, setState] = React.useState({\r\n source: _getDefaultSource(),\r\n sheet: 'I',\r\n currency: null,\r\n data: null,\r\n })\r\n\r\n const timeframe = getTimeframeFromStatementsSettingsTimeframe(settings.statementsTimeframe)\r\n\r\n const { data } = state\r\n const hasData = data && !data.error && Object.keys(data).length > 0\r\n const hasRedesignEnabled = FinvizSettings?.hasRedesignEnabled\r\n\r\n const _fetch = async () => {\r\n const { source, sheet } = state\r\n const { t } = decodeQueryString()\r\n\r\n try {\r\n const response = await fetch(`/api/statement.ashx?t=${t}&so=${source}&s=${sheet}${timeframe}`)\r\n const json = await response.json()\r\n\r\n setState({\r\n ...state,\r\n currency: json.currency,\r\n data: json.error ? json : json.data,\r\n })\r\n } catch {}\r\n }\r\n\r\n React.useEffect(() => {\r\n pageRef.current = getInvestingChannelPage()\r\n pageRef.current?.create()\r\n\r\n return () => {\r\n pageRef.current?.destroy()\r\n }\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n _fetch()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.sheet, state.source, timeframe])\r\n\r\n const _renderSheetLink = (id: string, text: string) => (\r\n {\r\n e.preventDefault()\r\n setState({\r\n ...state,\r\n sheet: id,\r\n })\r\n }}\r\n >\r\n {text}\r\n \r\n )\r\n\r\n if (data === null) {\r\n return null\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {FinvizSettings.hasUserPremium && (\r\n // TODO fix classname when css mixins removal is merged\r\n {\r\n e.preventDefault()\r\n const source = e.target.value === 'R' ? 'R' : 'F'\r\n setState({\r\n ...state,\r\n source: source,\r\n })\r\n setValue('statements-source', source, DEFAULT_SOURCE, false)\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n {FinvizSettings.hasUserPremium && <>   }\r\n\r\n \r\n {_renderSheetLink('I', 'Income Statement')} •{' '}\r\n {_renderSheetLink('B', 'Balance Sheet')} •{' '}\r\n {_renderSheetLink('C', 'Cash Flow')}\r\n \r\n \r\n \r\n
\r\n {hasData && }\r\n {!hasData && (\r\n \r\n \r\n \r\n \r\n The statement is not available. Try switching between FactSet-Reuters source.\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nfunction Statements() {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nfunction StatementsSettingsSection() {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const toggleSetting = (key: keyof StatementsType, value: StatementsType[keyof StatementsType]) => {\r\n setSettings({\r\n ...settings,\r\n [key]: value,\r\n })\r\n }\r\n\r\n const yoyGrowthLabel = React.useMemo(() => {\r\n const isQuarterlyTimeframe = settings.statementsTimeframe === StatementsTimeframeEnum.quarterly\r\n\r\n if (isQuarterlyTimeframe) {\r\n return 'QoQ Growth'\r\n }\r\n\r\n return 'YoY Growth'\r\n }, [settings.statementsTimeframe])\r\n\r\n return (\r\n
\r\n \r\n {\r\n toggleSetting(StatementsDataEnum.yoyChange, !settings[StatementsDataEnum.yoyChange])\r\n }}\r\n >\r\n {yoyGrowthLabel}\r\n \r\n {\r\n toggleSetting(StatementsDataEnum.yoyChangePct, !settings[StatementsDataEnum.yoyChangePct])\r\n }}\r\n >\r\n {`${yoyGrowthLabel} %`}\r\n \r\n \r\n\r\n \r\n {\r\n toggleSetting('statementsTimeframe', StatementsTimeframeEnum.annual)\r\n }}\r\n >\r\n Annual\r\n \r\n {\r\n toggleSetting('statementsTimeframe', StatementsTimeframeEnum.quarterly)\r\n }}\r\n >\r\n Quarterly\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nfunction isChartable(label: string) {\r\n switch (label) {\r\n case 'Period End Date':\r\n case 'Period Length':\r\n return false\r\n }\r\n\r\n return true\r\n}\r\n\r\nfunction parseData(data: Record, skipFirst: boolean) {\r\n let parsed: any = {}\r\n Object.keys(data).forEach((key) => {\r\n parsed[key] = data[key]\r\n .map((value, index) => {\r\n if (isChartable(key)) {\r\n let parsedValue\r\n if (value === '') {\r\n parsedValue = null\r\n } else {\r\n parsedValue = parseFloat(value.replace(/,/g, ''))\r\n }\r\n return {\r\n name: data['Period End Date'][index],\r\n value: parsedValue,\r\n }\r\n }\r\n return null\r\n })\r\n .slice(skipFirst ? 1 : 0)\r\n })\r\n\r\n return parsed as Record>\r\n}\r\n\r\nfunction isHighlightRow(label: string) {\r\n switch (label) {\r\n case 'Period End Date':\r\n case 'Total Revenue':\r\n case 'Total Premiums Earned':\r\n case 'Interest Income':\r\n case 'Gross Profit':\r\n case 'Total Operating Expense':\r\n case 'Operating Income':\r\n case 'Net Income Before Taxes':\r\n case 'Net Income':\r\n case 'Total Current Assets':\r\n case 'Total Assets':\r\n case 'Total Current Liabilities':\r\n case 'Total Liabilities':\r\n case 'Total Equity':\r\n case 'Total Liabilities and Equity':\r\n case 'Cash from Operating Activities':\r\n case 'Cash from Investing Activities':\r\n case 'Cash from Financing Activities':\r\n case 'Net Change in Cash':\r\n case 'Price To Earnings Ratio':\r\n case 'Price to Book Ratio':\r\n case 'Price to Free Cash Flow':\r\n return true\r\n }\r\n\r\n return false\r\n}\r\n\r\ntype StatementsTableProps = Pick\r\n\r\nfunction StatementsTable({ data, currency }: StatementsTableProps) {\r\n const { settings } = useFinancialsTableContext()\r\n const skipFirst = data?.['Period End Date'][0] === 'TTM'\r\n const parsedData = data ? parseData(data, skipFirst) : null\r\n\r\n const yoyData = React.useMemo(\r\n () =>\r\n parsedData\r\n ? Object.entries(parsedData).reduce<\r\n Record<\r\n string,\r\n {\r\n change: Array\r\n changePct: Array\r\n }\r\n >\r\n >((acc, [key, values]) => {\r\n if (!isChartable(key)) {\r\n return acc\r\n }\r\n const yoyData: Array<{ change: number | null; changePct: number | null }> = []\r\n let lastValue: number | null = null\r\n\r\n // values are in DESC order\r\n const reversedValues = [...values].reverse()\r\n\r\n reversedValues.forEach(({ value }) => {\r\n const isValidValue = typeof value === 'number'\r\n if (!isValidValue || lastValue === null || lastValue === 0) {\r\n yoyData.push({ change: null, changePct: null })\r\n } else {\r\n const change = value - lastValue\r\n yoyData.push({ change, changePct: (change / Math.abs(lastValue)) * 100 })\r\n }\r\n\r\n if (isValidValue) lastValue = value\r\n })\r\n\r\n const reversedYoyData = [...yoyData].reverse()\r\n return {\r\n ...acc,\r\n [key]: {\r\n change: reversedYoyData.map(({ change }) => change),\r\n changePct: reversedYoyData.map(({ changePct }) => changePct),\r\n },\r\n }\r\n }, {})\r\n : {},\r\n [parsedData]\r\n )\r\n\r\n const yoyGrowthLabel = React.useMemo(() => {\r\n const isQuarterlyTimeframe = settings.statementsTimeframe === StatementsTimeframeEnum.quarterly\r\n\r\n if (isQuarterlyTimeframe) {\r\n return 'QoQ Growth'\r\n }\r\n\r\n return 'YoY Growth'\r\n }, [settings.statementsTimeframe])\r\n\r\n if (!data || !parsedData) return null\r\n\r\n const hasRedesignEnabled = FinvizSettings?.hasRedesignEnabled\r\n const cellClass = classnames('align-top', {\r\n 'snapshot-td2 h-6 !leading-4 !pt-[4px]': !hasRedesignEnabled,\r\n })\r\n const adRowIndexStart = !hasRedesignEnabled && data['Period Length'] ? 2 : 1\r\n\r\n return (\r\n <>\r\n \r\n \r\n {Object.keys(data).map((key, rowIndex) => {\r\n const hasYoYData = !!yoyData[key] && data[key].some((value) => value)\r\n return (\r\n \r\n \r\n {key}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChange] && (\r\n <>\r\n
\r\n {yoyGrowthLabel}\r\n \r\n )}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChangePct] && (\r\n <>\r\n
\r\n {`${yoyGrowthLabel} %`}\r\n \r\n )}\r\n \r\n \r\n {isChartable(key) && }\r\n \r\n {data[key].map((value, index) => {\r\n const changeIndex = skipFirst ? index - 1 : index\r\n const yoyChangeValue = yoyData[key]?.change[changeIndex] ?? null\r\n const yoyChangePctValue = yoyData[key]?.changePct[changeIndex] ?? null\r\n if (!FinvizSettings.hasUserPremium) {\r\n if (rowIndex === adRowIndexStart && index === 3) {\r\n return (\r\n \r\n \r\n \r\n

Upgrade your FINVIZ experience

\r\n

\r\n Join thousands of traders who make more informed decisions with our premium\r\n features. Real-time quotes, advanced visualizations, historical statements, and much\r\n more.\r\n

\r\n \r\n Learn more\r\n \r\n \r\n )\r\n }\r\n if (\r\n index > 2 &&\r\n ((hasRedesignEnabled && key !== 'Period End Date') ||\r\n (key !== 'Period End Date' && key !== 'Period Length'))\r\n ) {\r\n return null\r\n }\r\n }\r\n\r\n return (\r\n \r\n {value}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChange] && (\r\n <>\r\n
\r\n \r\n {shortFormatNumber(yoyChangeValue, { defaultValue: '—' })}\r\n \r\n \r\n )}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChangePct] && (\r\n <>\r\n
\r\n \r\n {yoyChangePctValue?.toFixed(2) ?? '—'}\r\n \r\n \r\n )}\r\n \r\n )\r\n })}\r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
values in Millions, {currency}
\r\n \r\n )\r\n}\r\n\r\nexport default Statements\r\n","import classNames from 'classnames'\r\nimport { isRedesignEnabled } from 'finviz-charts/app/utils'\r\nimport React from 'react'\r\n\r\nimport { Button } from '../../../main/components'\r\nimport { SpecificChartFunctionality } from '../../../main/constants'\r\nimport { ChartTypesSelect, StockDetailTimeframeBar } from '../../charts-lib'\r\nimport { QuoteContext } from '../QuoteContext'\r\n\r\ninterface Props {\r\n isStockDetailUpdating: boolean\r\n}\r\n\r\nconst hasRedesign = isRedesignEnabled()\r\nconst isPremium = window.FinvizSettings.hasUserPremium\r\n\r\nexport function StaticChartHeader({ isStockDetailUpdating }: Props) {\r\n const { index, ticker, period } = React.useContext(QuoteContext)\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n Share\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { parseRouteInitData } from '../../../main/util'\r\nimport { round } from '../../backtest/utils'\r\nimport { QuoteContext } from '../QuoteContext'\r\nimport BarChart, { Bar } from './barChart'\r\n\r\nfunction convertData(endYear: number, values: any[]) {\r\n return values.map((value, index) => ({ name: endYear - index, value })).reverse() as unknown as Bar[]\r\n}\r\n\r\ninterface FAChartProps {\r\n year: number\r\n data: number[]\r\n title: string\r\n smallRoundPlaces?: number\r\n largeRoundPlaces?: number\r\n smallScale?: number\r\n largeScale?: number\r\n smallTitleSufix?: string\r\n largeTitleSufix?: string\r\n}\r\n\r\nfunction FAChart({\r\n year,\r\n data,\r\n title,\r\n smallRoundPlaces = 2,\r\n largeRoundPlaces = 0,\r\n smallScale = 1,\r\n largeScale = 1,\r\n smallTitleSufix = '',\r\n largeTitleSufix = '',\r\n}: FAChartProps) {\r\n const range = Math.max(...data.map((value) => Math.abs(value)).filter(Number))\r\n const isLarge = Math.abs(range) >= 1000\r\n const scale = isLarge ? largeScale : smallScale\r\n const values = data.map((value) => {\r\n const rounded = round(scale * value, isLarge ? largeRoundPlaces : smallRoundPlaces)\r\n return value == null || Number.isNaN(rounded) ? null : rounded\r\n })\r\n\r\n return (\r\n round(value, isLarge ? largeRoundPlaces : smallRoundPlaces)}\r\n width={280}\r\n height={150}\r\n marginRight={37}\r\n className=\"is-fa\"\r\n />\r\n )\r\n}\r\n\r\nexport default function FundamentalCharts() {\r\n const { index } = React.useContext(QuoteContext)\r\n\r\n const routeData = React.useMemo(\r\n () =>\r\n parseRouteInitData<{ year: number; values: Array }>({\r\n elementId: `fa-init-data-${index}`,\r\n removeElement: false,\r\n }),\r\n [index]\r\n )\r\n\r\n if (!routeData) return null\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport { decodeQueryString } from '../../queryString'\r\n\r\nconst CORRELATION_LINKS_CONTAINER_SELECTOR = 'js-quote-correlation-links-container'\r\nconst MULTITICKER_CHART_ELEMENT_SELECTOR = 'js-multi-ticker-chart'\r\nconst SET_SEARCH_EXT_SELECTOR = 'js-set-search-ext-argument'\r\n\r\nexport function useStockDetailUpdater() {\r\n const location = useLocation()\r\n const { p, ty } = decodeQueryString(location.search)\r\n const isInitializedRef = React.useRef(false)\r\n const [isStockDetailUpdating, setIsStockDetailUpdating] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const multiTickerElements = document.getElementsByClassName(MULTITICKER_CHART_ELEMENT_SELECTOR)\r\n const correlationElements = document.getElementsByClassName(CORRELATION_LINKS_CONTAINER_SELECTOR)\r\n const abortController = new AbortController()\r\n\r\n if (isInitializedRef.current) {\r\n if (multiTickerElements.length > 0) setIsStockDetailUpdating(true)\r\n\r\n fetch(location.pathname + location.search, { signal: abortController.signal })\r\n .then((response) => response.text())\r\n .then((text) => {\r\n const virtualDOM = new DOMParser().parseFromString(text, 'text/html')\r\n\r\n // Multiticker update\r\n if (multiTickerElements.length > 0) {\r\n const multiTickerHtmlElements = Array.from(multiTickerElements) as HTMLImageElement[]\r\n const newMultiTickerHtmlElements = Array.from(\r\n virtualDOM.getElementsByClassName(MULTITICKER_CHART_ELEMENT_SELECTOR)\r\n ) as HTMLImageElement[]\r\n\r\n if (newMultiTickerHtmlElements?.length === multiTickerHtmlElements.length) {\r\n multiTickerHtmlElements.forEach((element, index) => {\r\n element.onload = () => setIsStockDetailUpdating(false)\r\n element.src = newMultiTickerHtmlElements[index].src\r\n })\r\n } else {\r\n setIsStockDetailUpdating(false)\r\n }\r\n }\r\n\r\n // Correlation update\r\n const correlationLinksTableCellHtmlElements = Array.from(correlationElements) as HTMLTableCellElement[]\r\n const newCorrelationLinksTableCellHtmlElements = Array.from(\r\n virtualDOM.getElementsByClassName(CORRELATION_LINKS_CONTAINER_SELECTOR)\r\n ) as HTMLTableCellElement[]\r\n\r\n if (newCorrelationLinksTableCellHtmlElements?.length === correlationLinksTableCellHtmlElements.length) {\r\n correlationLinksTableCellHtmlElements.forEach((element, index) => {\r\n element.innerHTML = newCorrelationLinksTableCellHtmlElements[index].innerHTML\r\n })\r\n }\r\n\r\n // Search function update\r\n const newsearchFunctionWrapperElement = virtualDOM.getElementById(SET_SEARCH_EXT_SELECTOR) as HTMLDivElement\r\n if (newsearchFunctionWrapperElement?.dataset.setSearchExtArgument) {\r\n FinvizSettings.quoteSearchExt = newsearchFunctionWrapperElement.dataset.setSearchExtArgument\r\n }\r\n })\r\n .catch((err) => {\r\n setIsStockDetailUpdating(false)\r\n if (err.name !== 'AbortError') {\r\n Sentry.captureException(err)\r\n }\r\n })\r\n }\r\n isInitializedRef.current = true\r\n return () => {\r\n abortController.abort()\r\n }\r\n // We don't want to trigger effect on any location change just if period or type change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [p, ty])\r\n\r\n return { isStockDetailUpdating }\r\n}\r\n","export const etfHoldingsAsyncModule = {\r\n importFn: () => import(/* webpackChunkName: \"etf-holdings-widget\" */ './module-entry'),\r\n cacheKey: 'etf-holdings-widget',\r\n}\r\n","import { withNotificationContext } from '../../../../main/components/notification'\r\nimport { Spinner } from '../../../../main/components/spinner'\r\nimport { useAsyncModule } from '../../../../main/services/async-modules-utils'\r\nimport { etfHoldingsAsyncModule } from './async-modules'\r\n\r\nfunction LoadingFallback() {\r\n const widgetClass =\r\n 'ml-3 mt-3 flex max-h-85 min-h-85 min-w-152 max-w-175 shrink grow basis-0 rounded-md border border-primary justify-center items-center'\r\n return (\r\n
\r\n {Array.from(Array(2)).map((_, index) => (\r\n
\r\n \r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n\r\nfunction ETFHoldings() {\r\n const [etfHoldingsModule] = useAsyncModule({\r\n ...etfHoldingsAsyncModule,\r\n shouldLoadModule: true,\r\n errorSeverity: 'high',\r\n })\r\n const ETFHoldingsComponent = etfHoldingsModule?.ETFHoldings\r\n return ETFHoldingsComponent ? : \r\n}\r\n\r\nexport default withNotificationContext(ETFHoldings)\r\n","import * as React from 'react'\r\nimport ReactDOMClient from 'react-dom/client'\r\nimport { BrowserRouter } from 'react-router-dom'\r\n\r\nimport { NotificationWrapper } from '../../main/components/notification'\r\nimport { useCheckNonIdeaChartMissingConfig } from '../../main/hooks/use-check-non-idea-chart-missing-config'\r\nimport { initIdeaQuotes } from '../../main/modules/charts/util'\r\nimport { Quote } from '../charts-lib'\r\nimport { decodeQueryString } from '../queryString'\r\nimport { getInitChartConfig } from '../shared/getInitChartConfig'\r\nimport { ready } from '../shared/ready'\r\nimport { QuoteNavigation } from './Navigation'\r\nimport { QuoteChart } from './QuoteChart'\r\nimport { QuoteContext, QuoteContextProvider } from './QuoteContext'\r\nimport { Perf } from './components/ComparePerformance'\r\nimport { InsiderTradingVolumeChart } from './components/InsiderTradingChart'\r\nimport { QuotePortal } from './components/Portal'\r\nimport { ChartContextQuoteHeader, ManualInitQuoteHeader } from './components/Price'\r\nimport Statements from './components/Statements/statements'\r\nimport { StaticChartHeader } from './components/StaticChartHeader'\r\nimport FundamentalCharts from './components/fundamentalCharts'\r\nimport { useStockDetailUpdater } from './hooks/use-stock-detail-updater'\r\nimport EtfHoldings from './modules/etf-holdings'\r\nimport { QuoteQuery, QuoteSubview, QuoteView } from './types'\r\n\r\nif (FinvizSettings.hasUserPremium || FinvizSettings.hasRedesignEnabled) {\r\n import(/* webpackChunkName: \"recent_quotes\" */ '../shared/recent_quotes').then(({ RenderRecentQuotes }) => {\r\n RenderRecentQuotes()\r\n })\r\n}\r\n\r\nconst PRICE_STATIC = document.querySelectorAll('.js-quote-price-static')\r\nconst PRICE_ROOTS = document.querySelectorAll('.js-quote-price-root')\r\n\r\nconst NAVIGATION_STATIC = document.querySelectorAll('.js-quote-navigation-static')\r\nconst NAVIGATION_ROOTS = document.querySelectorAll('.js-quote-navigation-root')\r\n\r\nconst ETF_HOLDINGS_STATIC = document.querySelectorAll('.js-etf-holdings-static')\r\nconst ETF_HOLDINGS_ROOTS = document.querySelectorAll('.js-etf-holdings-root')\r\nconst isETF = !!ETF_HOLDINGS_ROOTS.length\r\n\r\nconst STATIC_CHART_HEADER_ROOTS = document.querySelectorAll('.quote-menu')\r\n\r\nconst FUNDAMENTAL_CHARTS_ROOTS = document.querySelectorAll('.js-quote-fa')\r\n\r\nconst STATEMENTS_ROOTS = document.querySelectorAll('#statements')\r\n\r\nconst INSIDER_CHART_ROOTS = document.querySelectorAll('.insider-trading-chart')\r\n\r\nfunction ReactComponentsContainer({ isStockDetailUpdating }: { isStockDetailUpdating: boolean }) {\r\n const context = React.useContext(QuoteContext)\r\n\r\n return (\r\n <>\r\n \r\n \r\n {context.view === QuoteView.ChartDetail ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n {context.view === QuoteView.ChartDetail && (\r\n \r\n {context.index === 0 && }\r\n\r\n {context.index > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n\r\n {context.subview === QuoteSubview.ComparePerf && window.FinvizQuoteTickers && context.index === 0 && }\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nfunction QuoteTickerComponents() {\r\n useCheckNonIdeaChartMissingConfig()\r\n\r\n const query = decodeQueryString()\r\n const tickers = query[QuoteQuery.Ticker].split(',')\r\n const { isStockDetailUpdating } = useStockDetailUpdater()\r\n\r\n return tickers.map((ticker, index) => (\r\n \r\n \r\n \r\n ))\r\n}\r\n\r\nready(() => {\r\n const reactRootElement = document.getElementById('react-root')\r\n\r\n if (!reactRootElement) return\r\n\r\n if (FinvizSettings.quoteData) {\r\n Quote.create(FinvizSettings.quoteData)\r\n }\r\n\r\n if (window.globalChartConfig && !window.globalChartConfig.idea) {\r\n window.globalChartConfig = getInitChartConfig()\r\n\r\n if (window.globalChartConfig?.ideaQuotes) {\r\n initIdeaQuotes(window.globalChartConfig.ideaQuotes, window.globalChartConfig)\r\n }\r\n }\r\n\r\n ReactDOMClient.createRoot(reactRootElement).render(\r\n \r\n \r\n \r\n \r\n \r\n )\r\n})\r\n\r\nconst revealRatingButtonsCollection = document.getElementsByClassName('js-reveal-ratings-button')\r\nconst revealRatingButtons = Array.from(revealRatingButtonsCollection) as HTMLButtonElement[]\r\nrevealRatingButtons.forEach((revealRatingButton) => {\r\n revealRatingButton.onclick = (e) => {\r\n e.preventDefault()\r\n const ratingsRowWithTable = revealRatingButton.previousElementSibling\r\n\r\n ratingsRowWithTable?.querySelectorAll('table tr').forEach((rating, index, rows) => {\r\n if (rating.classList.contains('is-last')) {\r\n rating.classList.remove('is-last')\r\n }\r\n\r\n rating.classList.remove('hidden')\r\n\r\n if (index === rows.length - 1) {\r\n rating.classList.add('is-last')\r\n }\r\n })\r\n\r\n revealRatingButton.classList.add('hidden')\r\n window.gtag && window.gtag('event', 'click', { event_category: 'reveal-ratings' })\r\n }\r\n})\r\n","export enum QuoteQuery {\r\n Ticker = 't',\r\n Type = 'ty',\r\n Period = 'p',\r\n DateRange = 'r',\r\n}\r\n\r\n// Keep in sync with FullViewUrlQuery.cs\r\nexport enum QuoteView {\r\n // Default subviews for views\r\n ChartDetail = 'c',\r\n Financials = 'dv',\r\n Options = 'oc',\r\n}\r\n\r\n// Keep in sync with FullViewUrlQuery.cs\r\nexport enum QuoteSubview {\r\n ComparePerf = 'p',\r\n OptionsChain = 'oc',\r\n OptionsVolatility = 'ocv',\r\n Dividends = 'dv',\r\n Eearnings = 'ea',\r\n Revenue = 'rv',\r\n ShortInterest = 'si',\r\n Traffic = 'tr',\r\n}\r\n","import { SpecificChartFunctionality } from '../../main/constants'\r\nimport { ChartConfigChartPaneElement, Instrument, LayoutType, ScaleType, TIMEFRAME, Theme } from '../charts-lib'\r\nimport { getParsedCookies } from './cookie'\r\n\r\ninterface PaneElementProps extends ChartConfigChartPaneElement {\r\n label?: string\r\n fromDate?: string\r\n toDate?: string\r\n min?: number\r\n tickers: string[]\r\n}\r\n\r\ninterface StaticChartConfigProps {\r\n width?: number\r\n height?: number\r\n ticker: string\r\n timeframe: TIMEFRAME\r\n paneElements: PaneElementProps[]\r\n specificChartFunctionality?: SpecificChartFunctionality\r\n colorsOverride?: Array\r\n theme?: Theme\r\n colors?: ReturnType\r\n refreshData?: boolean\r\n}\r\n\r\nexport function getStaticChartConfig({\r\n width = 800,\r\n height = 400,\r\n ticker,\r\n timeframe,\r\n paneElements,\r\n specificChartFunctionality = SpecificChartFunctionality.default,\r\n colorsOverride,\r\n theme,\r\n colors = getCustomColorsFromCookies(),\r\n refreshData = false,\r\n}: StaticChartConfigProps) {\r\n return {\r\n layout: LayoutType['1h1v'],\r\n width,\r\n height,\r\n barWidth: 1,\r\n barMargin: 0,\r\n scrollable: false,\r\n editable: false,\r\n specificChartFunctionality,\r\n colorsOverride,\r\n theme,\r\n colors,\r\n charts: [\r\n {\r\n width: 0,\r\n premarket: false,\r\n aftermarket: false,\r\n dateRange: null,\r\n height,\r\n timeframe,\r\n scale: ScaleType.Linear,\r\n ticker: ticker,\r\n leftOffset: 0,\r\n instrument: Instrument.Stock,\r\n refreshData,\r\n stretch: true,\r\n panes: [\r\n {\r\n height,\r\n elements: paneElements,\r\n },\r\n ],\r\n },\r\n ],\r\n }\r\n}\r\n\r\nexport function getCustomColorsFromCookies() {\r\n try {\r\n return JSON.parse(getParsedCookies('customColors') as string)\r\n } catch {\r\n return undefined\r\n }\r\n}\r\n","import * as React from 'react'\r\n\r\nimport * as tracking from '../tracking'\r\n\r\nexport const IC_PUBLISHER_ID = 'df0d0d52-cc7f-11e8-82a5-0abbb61c4a6a'\r\n\r\nenum AdTagName {\r\n IC_TickerInContent = 'IC_D_3x3',\r\n IC_MapsLeftRail = 'IC_D_125x125',\r\n IC_Statements = 'IC_D_300x60',\r\n IC_Groups = 'IC_D_300x250',\r\n}\r\n\r\nconst tagDefinition = {\r\n [AdTagName.IC_TickerInContent]: { placements: 3, style: { width: 970, minHeight: 250 } },\r\n [AdTagName.IC_MapsLeftRail]: { placements: 2, style: { width: 125, minHeight: 125 } },\r\n [AdTagName.IC_Statements]: { placements: 1, style: { width: 300, minHeight: 60 } },\r\n [AdTagName.IC_Groups]: { placements: 1, style: { width: 336, minHeight: 280 } },\r\n}\r\n\r\nconst hasInvestingChannelAds = tracking.getAdsProvider() === tracking.AdsProvider.InvestingChannel\r\n\r\n/**\r\n * Get create/destroy methods to control ads insertion\r\n */\r\nexport function getInvestingChannelPage() {\r\n var page: ICPageReturn\r\n\r\n function create() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n let config = window['FINVIZ_IC_UAT_CONFIG'] ?? {}\r\n page = window.InvestingChannel?.UAT.Run(IC_PUBLISHER_ID, config)\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n function destroy() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n page?.destroy()\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n return { create, destroy }\r\n}\r\n\r\n/**\r\n * Hook which recreates ads on deps change (SPA navigation,…)\r\n */\r\nexport function useInvestingChannelAds(deps: unknown[] = []) {\r\n React.useLayoutEffect(() => {\r\n const page = getInvestingChannelPage()\r\n\r\n page.create()\r\n\r\n return () => page.destroy()\r\n // eslint cannot statically check the dependencies and complains about it\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, deps)\r\n\r\n return hasInvestingChannelAds\r\n}\r\n\r\ninterface AdTagProps extends Omit, 'name'> {\r\n /**\r\n * Name of the ad tag\r\n */\r\n name: keyof typeof AdTagName\r\n\r\n /**\r\n * Manually set the placement position for this tag\r\n *\r\n * @default 1\r\n */\r\n position?: number\r\n\r\n /**\r\n * Additional class names for the wrapper div\r\n */\r\n className?: string\r\n}\r\n\r\nexport function AdTag({ name, position = 1, ...props }: AdTagProps) {\r\n const tagName = AdTagName[name]\r\n const tagProps = tagDefinition[tagName]\r\n const placementName = `${tagName}_${Math.min(Math.max(position, 1), tagProps.placements)}`\r\n\r\n if (!hasInvestingChannelAds) return null\r\n\r\n return
\r\n}\r\n","import { ShrtflConfig } from 'finviz-charts/app/indicators/configs/shrtfl'\r\nimport { ShrtraConfig } from 'finviz-charts/app/indicators/configs/shrtra'\r\nimport { Position } from 'finviz-charts/types/shared'\r\n\r\nimport { QuoteRoutes } from '../../main/constants'\r\nimport { Utils, convertTa } from '../charts-lib'\r\nimport { decodeQueryString } from '../queryString'\r\n\r\nexport function getInitChartConfig() {\r\n const { ty } = decodeQueryString<{ ty?: string }>()\r\n window.globalChartConfig.scrollable = false\r\n if (FinvizSettings.hasUserPremium) {\r\n window.globalChartConfig.scrollable = window.globalChartConfig.editable || !Utils.isMobile()\r\n }\r\n\r\n if (FinvizSettings.TA) {\r\n let finvizSettingsTa = FinvizSettings.TA\r\n const COTs = FinvizSettings.COTs\r\n if (ty === QuoteRoutes.ShortInterest) {\r\n finvizSettingsTa = {\r\n ...finvizSettingsTa,\r\n overlays: [],\r\n indicators: [\r\n {\r\n name: ShrtflConfig.abbreviation,\r\n parameters: '',\r\n position: Position.Below,\r\n },\r\n {\r\n name: ShrtraConfig.abbreviation,\r\n parameters: '',\r\n position: Position.Below,\r\n },\r\n ],\r\n }\r\n }\r\n convertTa.mergeChartAndTAConfig(window.globalChartConfig, finvizSettingsTa, COTs ? { COTs } : undefined)\r\n }\r\n\r\n return window.globalChartConfig\r\n}\r\n","import { ScaleId } from '../maps/types'\r\n\r\nexport interface GradientDefinition {\r\n colors: string[]\r\n nullColor: string\r\n}\r\n\r\nconst redGreenGradientSmall = {\r\n colors: [\r\n '#e01427',\r\n '#ce252b',\r\n '#bb2f30',\r\n '#aa3534',\r\n '#993938',\r\n '#853c3c',\r\n '#743d3f',\r\n '#414554',\r\n '#3e5f50',\r\n '#3f704f',\r\n '#3f814d',\r\n '#3c924a',\r\n '#36a446',\r\n '#2bb642',\r\n '#12c93b',\r\n ],\r\n nullColor: '#2f323d',\r\n}\r\nexport const redGreenGradient = {\r\n colors: [\r\n '#f63538',\r\n '#ee373a',\r\n '#e6393b',\r\n '#df3a3d',\r\n '#d73c3f',\r\n '#ce3d41',\r\n '#c73e43',\r\n '#bf4045',\r\n '#b64146',\r\n '#ae4248',\r\n '#a5424a',\r\n '#9d434b',\r\n '#94444d',\r\n '#8b444e',\r\n '#824450',\r\n '#784551',\r\n '#6f4552',\r\n '#644553',\r\n '#5a4554',\r\n '#4f4554',\r\n '#414554',\r\n '#3f4c53',\r\n '#3d5451',\r\n '#3b5a50',\r\n '#3a614f',\r\n '#38694f',\r\n '#366f4e',\r\n '#35764e',\r\n '#347d4e',\r\n '#32844e',\r\n '#31894e',\r\n '#31904e',\r\n '#30974f',\r\n '#2f9e4f',\r\n '#2fa450',\r\n '#2faa51',\r\n '#2fb152',\r\n '#2fb854',\r\n '#30be56',\r\n '#30c558',\r\n '#30cc5a',\r\n ],\r\n nullColor: '#2f323d',\r\n}\r\nconst greenRedGradient = { colors: redGreenGradient.colors.slice().reverse(), nullColor: redGreenGradient.nullColor }\r\nconst redGradient = { colors: redGreenGradient.colors.slice(0, 22).reverse(), nullColor: redGreenGradient.nullColor }\r\nconst greenGradient = { colors: redGreenGradient.colors.slice(21), nullColor: redGreenGradient.nullColor }\r\nconst blueGradient = {\r\n colors: [\r\n '#3d4251',\r\n '#3d4250',\r\n '#3d4250',\r\n '#3e4251',\r\n '#3e4251',\r\n '#3d4350',\r\n '#3d4350',\r\n '#3d4350',\r\n '#3e4351',\r\n '#3e4350',\r\n '#3d4351',\r\n '#3d4352',\r\n '#3f4353',\r\n '#3f4353',\r\n '#3f4453',\r\n '#3f4554',\r\n '#3e4354',\r\n '#3e4354',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4555',\r\n '#3f4556',\r\n '#3f4457',\r\n '#3f4457',\r\n '#3f4457',\r\n '#3f4557',\r\n '#3f4657',\r\n '#3f4657',\r\n '#3f4657',\r\n '#3f4557',\r\n '#3e4557',\r\n '#3e4558',\r\n '#3f465a',\r\n '#3f4659',\r\n '#3f4759',\r\n '#3f4759',\r\n '#3f475a',\r\n '#3f4759',\r\n '#3f465a',\r\n '#3f465a',\r\n '#3f4759',\r\n '#3f475b',\r\n '#40475b',\r\n '#40475b',\r\n '#40465b',\r\n '#40465c',\r\n '#40465d',\r\n '#40485d',\r\n '#40485c',\r\n '#40475c',\r\n '#40465c',\r\n '#40465c',\r\n '#40465c',\r\n '#40485d',\r\n '#40485d',\r\n '#40485e',\r\n '#40485f',\r\n '#40495e',\r\n '#40495e',\r\n '#40485e',\r\n '#40485f',\r\n '#40495e',\r\n '#40485e',\r\n '#40485f',\r\n '#404960',\r\n '#404960',\r\n '#404860',\r\n '#404861',\r\n '#404a62',\r\n '#404962',\r\n '#404962',\r\n '#404a62',\r\n '#404a62',\r\n '#404861',\r\n '#404961',\r\n '#404a63',\r\n '#404a64',\r\n '#404a65',\r\n '#404b64',\r\n '#404b64',\r\n '#404a65',\r\n '#404a65',\r\n '#404a65',\r\n '#404a65',\r\n '#404b65',\r\n '#404b65',\r\n '#414c65',\r\n '#424c65',\r\n '#424b65',\r\n '#414b66',\r\n '#414b67',\r\n '#414b67',\r\n '#414c67',\r\n '#424b67',\r\n '#424c67',\r\n '#414c67',\r\n '#414b67',\r\n '#414c67',\r\n '#414c67',\r\n '#414c69',\r\n '#414c6a',\r\n '#414c6a',\r\n '#414c6a',\r\n '#414d6a',\r\n '#424e6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6b',\r\n '#414d6c',\r\n '#414e6c',\r\n '#414f6c',\r\n '#414e6c',\r\n '#414d6c',\r\n '#414d6c',\r\n '#414e6c',\r\n '#424e6d',\r\n '#424e6d',\r\n '#414f6d',\r\n '#424f6f',\r\n '#414e6f',\r\n '#414e6f',\r\n '#424f70',\r\n '#414f6f',\r\n '#414f6f',\r\n '#414f6f',\r\n '#414e6f',\r\n '#414e6f',\r\n '#414f6f',\r\n '#414f6f',\r\n '#414f71',\r\n '#414f72',\r\n '#425073',\r\n '#425173',\r\n '#415072',\r\n '#425173',\r\n '#425173',\r\n '#425173',\r\n '#415072',\r\n '#415072',\r\n '#415172',\r\n '#415173',\r\n '#415174',\r\n '#415174',\r\n '#415074',\r\n '#415074',\r\n '#415174',\r\n '#415074',\r\n '#415074',\r\n '#415074',\r\n '#415175',\r\n '#415275',\r\n '#425276',\r\n '#425277',\r\n '#415177',\r\n '#415177',\r\n '#425278',\r\n '#425378',\r\n '#415277',\r\n '#415378',\r\n '#415378',\r\n '#415277',\r\n '#415378',\r\n '#42537a',\r\n '#42537c',\r\n '#42537b',\r\n '#41537a',\r\n '#41527a',\r\n '#41537a',\r\n '#41547a',\r\n '#42547b',\r\n '#41547a',\r\n '#41547a',\r\n '#41547c',\r\n '#41547c',\r\n '#41557c',\r\n '#41557c',\r\n '#41557c',\r\n '#41557c',\r\n '#41557d',\r\n '#41547d',\r\n '#41547c',\r\n '#42557d',\r\n '#41557d',\r\n '#41557d',\r\n '#41557f',\r\n '#415580',\r\n '#41567f',\r\n '#41567f',\r\n '#415580',\r\n '#41567f',\r\n '#415580',\r\n '#415580',\r\n '#41557f',\r\n '#415680',\r\n '#415680',\r\n '#415680',\r\n '#415681',\r\n '#415681',\r\n '#415781',\r\n '#415781',\r\n '#415681',\r\n '#415781',\r\n '#415781',\r\n '#415781',\r\n '#415782',\r\n '#415784',\r\n '#415784',\r\n '#425885',\r\n '#425885',\r\n '#415784',\r\n '#415784',\r\n '#415784',\r\n '#415784',\r\n '#425885',\r\n '#425885',\r\n '#415885',\r\n '#415885',\r\n '#425987',\r\n '#415887',\r\n '#415887',\r\n '#415987',\r\n '#415887',\r\n '#425988',\r\n '#425988',\r\n '#415887',\r\n '#415987',\r\n '#415988',\r\n '#415988',\r\n '#415988',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#41598a',\r\n '#405a8b',\r\n '#405a8c',\r\n '#405b8c',\r\n '#405b8c',\r\n '#405b8c',\r\n '#405a8c',\r\n '#405a8c',\r\n '#405a8c',\r\n '#405a8c',\r\n '#405b8c',\r\n '#415c8d',\r\n '#415c8e',\r\n '#405b8e',\r\n '#415c90',\r\n '#405b8f',\r\n '#405c8f',\r\n '#415d90',\r\n '#405b8f',\r\n '#405c8f',\r\n '#405c8f',\r\n '#405b8f',\r\n '#405c8f',\r\n '#405c90',\r\n '#405c91',\r\n '#405c91',\r\n '#405c91',\r\n '#405d91',\r\n '#405e91',\r\n '#405d91',\r\n '#415e91',\r\n '#405e91',\r\n '#415e91',\r\n '#415e92',\r\n '#3f5d94',\r\n '#3f5d93',\r\n '#3f5d93',\r\n '#3f5e94',\r\n '#405e94',\r\n '#3f5d94',\r\n '#3f5d94',\r\n '#3f5d94',\r\n '#3f5e94',\r\n '#3f5e95',\r\n '#3f5e96',\r\n '#3f5e96',\r\n '#3f5e96',\r\n '#405f97',\r\n '#405f97',\r\n '#3f5e96',\r\n '#3f5e97',\r\n '#3f5f97',\r\n '#3f6097',\r\n '#3f5f97',\r\n '#3f6097',\r\n '#3f5f98',\r\n '#3f5f99',\r\n '#3e5f99',\r\n '#3e6199',\r\n '#3e6099',\r\n '#3e5f99',\r\n '#3e5f99',\r\n '#3e5f98',\r\n '#3e6099',\r\n '#3d609a',\r\n '#3d6099',\r\n '#3e609b',\r\n '#3e619c',\r\n '#3e619c',\r\n '#3e619c',\r\n '#3e609b',\r\n '#3e609c',\r\n '#3e609c',\r\n '#3e619b',\r\n '#3e629c',\r\n '#3e629c',\r\n '#3e619c',\r\n '#3d619d',\r\n '#3d639f',\r\n '#3d629f',\r\n '#3d629f',\r\n '#3d639f',\r\n '#3d629f',\r\n '#3c619e',\r\n '#3c619e',\r\n '#3d629f',\r\n '#3d62a0',\r\n '#3d63a0',\r\n '#3d63a0',\r\n '#3d62a0',\r\n '#3d63a1',\r\n '#3d62a0',\r\n '#3d63a0',\r\n '#3d64a1',\r\n '#3d63a0',\r\n '#3c63a0',\r\n '#3b63a2',\r\n '#3c64a3',\r\n '#3c65a3',\r\n '#3b63a3',\r\n '#3b63a3',\r\n '#3b63a3',\r\n '#3b63a3',\r\n '#3c63a3',\r\n '#3c65a3',\r\n '#3c65a3',\r\n '#3b64a4',\r\n '#3a65a5',\r\n '#3b66a6',\r\n '#3c65a6',\r\n '#3a65a5',\r\n '#3a64a5',\r\n '#3a64a5',\r\n '#3b65a5',\r\n '#3a65a5',\r\n '#3a66a6',\r\n '#3b66a6',\r\n '#3b66a6',\r\n '#3a66a8',\r\n '#3a67a8',\r\n '#3b67a8',\r\n '#3b66a8',\r\n '#3b66a8',\r\n '#3b66a8',\r\n '#3b67a8',\r\n '#3a66a8',\r\n '#3966a9',\r\n '#3967a9',\r\n '#3a67aa',\r\n '#3a67ab',\r\n '#3967ab',\r\n '#3a68ab',\r\n '#3a68ab',\r\n '#3968ab',\r\n '#3966aa',\r\n '#3966aa',\r\n '#3968ab',\r\n '#3968ab',\r\n '#3867ac',\r\n '#3867ac',\r\n '#3868ac',\r\n '#3869ad',\r\n '#3969ad',\r\n '#3968ad',\r\n '#3868ac',\r\n '#3868ac',\r\n '#3869ae',\r\n '#3868ad',\r\n '#3868ad',\r\n '#3769af',\r\n '#3869b0',\r\n '#3769af',\r\n '#3769af',\r\n '#386ab0',\r\n '#386ab0',\r\n '#376aaf',\r\n '#376aaf',\r\n '#376ab0',\r\n '#366ab1',\r\n '#366ab2',\r\n '#366ab2',\r\n '#366ab2',\r\n '#366ab3',\r\n '#366bb3',\r\n '#366ab2',\r\n '#3669b2',\r\n '#366ab2',\r\n '#366ab2',\r\n '#366ab2',\r\n '#356bb3',\r\n '#346bb4',\r\n '#356cb4',\r\n '#356cb4',\r\n '#346bb4',\r\n '#356cb4',\r\n '#356cb5',\r\n '#356cb5',\r\n '#356cb5',\r\n '#346cb5',\r\n '#346cb5',\r\n '#346cb6',\r\n '#336db7',\r\n '#326cb7',\r\n '#326db7',\r\n '#336db7',\r\n '#336cb7',\r\n '#326bb6',\r\n '#326cb6',\r\n '#326db7',\r\n '#326db8',\r\n '#316dba',\r\n '#316eb9',\r\n '#316eb9',\r\n '#326eba',\r\n '#316eba',\r\n '#316db9',\r\n '#316db9',\r\n '#316eb9',\r\n '#306eba',\r\n '#306dba',\r\n '#306dba',\r\n '#306ebb',\r\n '#306dbb',\r\n '#306dbc',\r\n '#306fbc',\r\n '#306fbc',\r\n '#306ebb',\r\n '#306eba',\r\n '#306fbc',\r\n '#2f6fbd',\r\n '#2d6ebe',\r\n '#2d6ebe',\r\n '#2d6fbe',\r\n '#2e70be',\r\n '#2e70be',\r\n '#2e6fbe',\r\n '#2e6fbe',\r\n '#2e6fbe',\r\n '#2c6fc0',\r\n '#2d70c0',\r\n '#2d70c0',\r\n '#2b70c1',\r\n '#2b70c1',\r\n '#2c70c1',\r\n '#2c70c1',\r\n '#2b71c1',\r\n '#2c70c1',\r\n '#2c70c1',\r\n '#2c71c1',\r\n '#2c71c1',\r\n '#2a72c3',\r\n '#2971c3',\r\n '#2a71c2',\r\n '#2972c3',\r\n '#2a71c3',\r\n '#2a71c3',\r\n '#2972c3',\r\n '#2972c3',\r\n '#2972c3',\r\n '#2872c5',\r\n '#2872c6',\r\n '#2872c5',\r\n '#2773c6',\r\n '#2773c6',\r\n '#2772c6',\r\n '#2772c5',\r\n '#2672c5',\r\n '#2673c5',\r\n '#2673c5',\r\n '#2673c7',\r\n '#2472c8',\r\n '#2473c8',\r\n '#2474c8',\r\n '#2573c9',\r\n '#2573c9',\r\n '#2573c9',\r\n '#2573c9',\r\n '#2474c8',\r\n '#2374c9',\r\n '#2374c9',\r\n '#2374c9',\r\n '#2375c9',\r\n '#2374c9',\r\n '#2374c9',\r\n '#2475c9',\r\n '#2575ca',\r\n '#2476ca',\r\n '#2476ca',\r\n '#2476ca',\r\n '#2575cb',\r\n '#2577ca',\r\n '#2577ca',\r\n '#2576ca',\r\n '#2577ca',\r\n '#2577ca',\r\n '#2577ca',\r\n '#2677ca',\r\n '#2678ca',\r\n '#2678cb',\r\n '#2778cb',\r\n '#2778cb',\r\n '#2679cb',\r\n '#2779cb',\r\n '#2779cb',\r\n '#2779cb',\r\n '#2779cb',\r\n '#2879cb',\r\n '#287acb',\r\n '#287acb',\r\n '#2879cb',\r\n '#287acb',\r\n '#287bcb',\r\n '#287acb',\r\n '#287acb',\r\n '#287bcc',\r\n '#287bcc',\r\n '#297bcc',\r\n '#297bcc',\r\n '#297bcc',\r\n '#297bcc',\r\n '#297ccc',\r\n '#297ccc',\r\n '#297dcc',\r\n '#297dcc',\r\n '#2a7dcc',\r\n '#2a7dcc',\r\n '#2a7ecd',\r\n '#2a7ecd',\r\n '#2a7ecc',\r\n '#2a7ecc',\r\n '#2b7ecd',\r\n '#2c7ecd',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2b7ecc',\r\n '#2b7ecc',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2b7fcd',\r\n '#2b80cd',\r\n '#2c80ce',\r\n '#2d80ce',\r\n '#2d80ce',\r\n '#2c81cd',\r\n '#2d82ce',\r\n '#2d82ce',\r\n '#2d81ce',\r\n '#2d82ce',\r\n '#2d82ce',\r\n '#2d82cd',\r\n '#2e82cd',\r\n '#2e83ce',\r\n '#2e82ce',\r\n '#2d82cd',\r\n '#2d83cd',\r\n '#2e83cf',\r\n '#2e84cf',\r\n '#2e84cf',\r\n '#2e83ce',\r\n '#2e83ce',\r\n '#3084cf',\r\n '#3085cf',\r\n '#2f85ce',\r\n '#3085cf',\r\n '#2f86ce',\r\n '#2f86ce',\r\n '#2f86cf',\r\n '#2f85cf',\r\n '#2f86ce',\r\n '#2f86cf',\r\n '#2f86cf',\r\n '#2f87cf',\r\n '#2f86d0',\r\n '#2f86d0',\r\n '#2f86d0',\r\n '#3087cf',\r\n '#3088d0',\r\n '#3088d0',\r\n '#3087cf',\r\n '#3088cf',\r\n '#3188d0',\r\n '#3188d1',\r\n '#3088d0',\r\n '#3089d0',\r\n '#3089d0',\r\n '#3088d0',\r\n '#3188d0',\r\n '#3189d0',\r\n '#3289d0',\r\n '#3289d0',\r\n '#328ad1',\r\n '#328ad1',\r\n '#318ad0',\r\n '#318ad0',\r\n '#318ad0',\r\n '#328bd1',\r\n '#328ad1',\r\n '#328ad1',\r\n '#338bd2',\r\n '#338bd2',\r\n '#338cd1',\r\n '#338cd1',\r\n '#338cd2',\r\n '#338cd2',\r\n '#338dd1',\r\n '#338dd1',\r\n '#338dd2',\r\n '#338dd1',\r\n '#338ed2',\r\n '#338ed2',\r\n '#338ed2',\r\n '#348ed2',\r\n '#348ed2',\r\n '#348ed2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#3390d2',\r\n '#3391d2',\r\n '#3491d3',\r\n '#3490d3',\r\n '#3491d3',\r\n '#3491d3',\r\n '#3591d3',\r\n '#3591d3',\r\n '#3691d4',\r\n '#3690d4',\r\n '#3590d3',\r\n '#3592d3',\r\n '#3592d4',\r\n '#3592d4',\r\n '#3592d3',\r\n '#3593d3',\r\n '#3592d4',\r\n '#3592d4',\r\n '#3592d4',\r\n '#3593d4',\r\n '#3694d4',\r\n '#3695d4',\r\n '#3694d4',\r\n '#3693d4',\r\n '#3693d4',\r\n '#3695d4',\r\n '#3695d4',\r\n '#3695d4',\r\n '#3796d4',\r\n '#3796d4',\r\n '#3695d4',\r\n '#3695d5',\r\n '#3696d5',\r\n '#3696d5',\r\n '#3696d5',\r\n '#3695d4',\r\n '#3696d4',\r\n '#3797d5',\r\n '#3796d5',\r\n '#3797d5',\r\n '#3898d5',\r\n '#3898d5',\r\n '#3797d5',\r\n '#3798d5',\r\n '#3899d5',\r\n '#3899d5',\r\n '#3899d6',\r\n '#3799d6',\r\n '#3799d6',\r\n '#3799d6',\r\n '#389ad6',\r\n '#389ad6',\r\n '#3799d5',\r\n '#3799d5',\r\n '#3799d6',\r\n '#379ad6',\r\n '#379ad6',\r\n '#399ad6',\r\n '#399ad6',\r\n '#389bd5',\r\n '#389bd5',\r\n '#389bd6',\r\n '#389bd6',\r\n '#399cd7',\r\n '#399bd7',\r\n '#399cd7',\r\n '#399dd7',\r\n '#389cd7',\r\n '#389cd6',\r\n '#389dd6',\r\n '#399ed7',\r\n '#389dd6',\r\n '#389dd6',\r\n '#389fd6',\r\n '#399fd7',\r\n '#399ed6',\r\n '#399ed6',\r\n '#399fd7',\r\n '#399fd7',\r\n '#399fd7',\r\n '#3aa0d8',\r\n '#3aa0d8',\r\n '#3a9fd8',\r\n '#3a9fd8',\r\n '#3a9fd8',\r\n '#3aa0d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa2d9',\r\n '#3aa1d9',\r\n '#3aa1d8',\r\n '#39a2d8',\r\n '#3aa2d9',\r\n '#3aa3d9',\r\n '#3ba3d9',\r\n '#3ba3d9',\r\n '#3ba2d8',\r\n '#3aa2d8',\r\n '#3aa4d8',\r\n '#3ba4d9',\r\n '#3aa3d8',\r\n '#3aa3d9',\r\n '#3ba5da',\r\n '#3ba5d9',\r\n '#3ba4d9',\r\n '#3ba4d9',\r\n '#3ba4d9',\r\n '#3aa5d9',\r\n '#3ba5da',\r\n '#3ba6da',\r\n '#3ba6da',\r\n '#3ba6da',\r\n '#3ba6d9',\r\n '#3ba6d9',\r\n '#3ba6da',\r\n '#3aa5da',\r\n '#3ba6da',\r\n '#3ca7da',\r\n '#3ca7da',\r\n '#3ba7da',\r\n '#3ba6da',\r\n '#3ca7da',\r\n '#3ca8da',\r\n '#3ca8da',\r\n '#3ca8da',\r\n '#3ca9db',\r\n '#3ca9db',\r\n '#3ca9da',\r\n '#3ca8db',\r\n '#3ba8db',\r\n '#3baadb',\r\n '#3caadb',\r\n '#3ca9db',\r\n '#3caadb',\r\n '#3caadb',\r\n '#3ca9db',\r\n '#3ca9db',\r\n '#3ca9db',\r\n '#3cabdb',\r\n '#3cabdc',\r\n '#3caadb',\r\n '#3cabdb',\r\n '#3cacdc',\r\n '#3cacdc',\r\n '#3cacdc',\r\n '#3caddc',\r\n '#3caddc',\r\n '#3caddc',\r\n '#3caedc',\r\n '#3caddd',\r\n '#3caddd',\r\n '#3caedc',\r\n '#3eaedd',\r\n '#3eaddd',\r\n '#3daddc',\r\n '#3daedc',\r\n '#3daedc',\r\n '#3dafdd',\r\n '#3dafdd',\r\n '#3daedd',\r\n '#3dafdd',\r\n '#3dafdd',\r\n '#3dafdd',\r\n '#3db0dd',\r\n '#3db0dd',\r\n '#3db0dc',\r\n '#3db0dc',\r\n '#3db1dd',\r\n '#3db1dd',\r\n '#3db0dd',\r\n '#3db0dd',\r\n '#3db1dd',\r\n '#3db1de',\r\n '#3db1de',\r\n '#3db1de',\r\n '#3db2de',\r\n '#3db2de',\r\n '#3db2dd',\r\n '#3db2dd',\r\n '#3db3dd',\r\n '#3db2de',\r\n '#3db3de',\r\n '#3db4de',\r\n '#3db3dd',\r\n '#3db4de',\r\n '#3db4de',\r\n '#3db4de',\r\n '#3db5df',\r\n '#3db5df',\r\n '#3db4df',\r\n '#3db4df',\r\n '#3db5df',\r\n '#3db5de',\r\n '#3db5de',\r\n '#3db5de',\r\n '#3db6df',\r\n '#3db6df',\r\n '#3db6de',\r\n '#3db6de',\r\n '#3db7df',\r\n '#3db7e0',\r\n '#3db8e0',\r\n '#3db8e0',\r\n '#3db7e0',\r\n '#3db7df',\r\n '#3db7df',\r\n '#3eb7df',\r\n '#3eb8df',\r\n '#3eb8df',\r\n '#3eb9e0',\r\n '#3eb9e0',\r\n '#3eb8df',\r\n '#3eb9df',\r\n '#3fb9df',\r\n '#3fb9e0',\r\n '#3ebae1',\r\n '#3ebae0',\r\n '#3ebae0',\r\n '#3ebae0',\r\n '#3eb9e0',\r\n '#3fbae1',\r\n '#3fbbe1',\r\n '#3ebae0',\r\n '#3ebbe1',\r\n '#3ebae0',\r\n '#3ebbe0',\r\n '#3ebce1',\r\n '#3fbce1',\r\n '#3ebce0',\r\n '#3ebce2',\r\n '#3ebce2',\r\n '#3ebde2',\r\n '#3fbde2',\r\n '#3fbde2',\r\n '#3ebde1',\r\n '#3ebee1',\r\n '#3ebde2',\r\n '#3fbde2',\r\n '#3fbde2',\r\n '#3ebee1',\r\n '#3ebfe1',\r\n '#3ebfe1',\r\n '#3ebfe1',\r\n '#3fbfe2',\r\n '#3ebfe1',\r\n '#3ebee1',\r\n '#3ebee2',\r\n '#3ebfe2',\r\n '#3ebfe2',\r\n '#3ebfe2',\r\n '#3ec0e2',\r\n '#3ec1e2',\r\n '#3fc0e3',\r\n '#3fc0e3',\r\n '#3ec0e2',\r\n '#3ec1e2',\r\n '#3ec2e2',\r\n '#3ec2e2',\r\n '#3ec2e2',\r\n '#3ec3e3',\r\n '#3ec3e3',\r\n '#3ec3e3',\r\n '#3ec2e3',\r\n '#3ec2e3',\r\n '#3fc3e3',\r\n '#3fc4e3',\r\n '#3ec4e3',\r\n '#3ec3e3',\r\n '#3ec3e3',\r\n '#3ec5e4',\r\n '#3fc5e4',\r\n '#3fc5e3',\r\n '#3fc4e4',\r\n '#3fc5e4',\r\n '#3ec6e4',\r\n '#3ec5e4',\r\n '#3ec4e4',\r\n '#3ec5e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec7e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec7e4',\r\n '#3dc8e4',\r\n '#3dc8e4',\r\n '#3dc7e5',\r\n '#3dc7e5',\r\n '#3dc8e5',\r\n '#3dc8e4',\r\n '#3dc8e4',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e4',\r\n '#3dc9e5',\r\n '#3dcae6',\r\n '#3dcbe6',\r\n '#3dcae6',\r\n '#3dcae6',\r\n '#3dcae6',\r\n '#3dcbe6',\r\n '#3dcce6',\r\n '#3ecce6',\r\n '#3ecce6',\r\n '#3dcbe6',\r\n '#3dcce6',\r\n '#3dcce6',\r\n '#3dcce6',\r\n '#3dcce5',\r\n '#3dcce5',\r\n '#3dcce6',\r\n '#3dcde7',\r\n '#3dcde7',\r\n '#3dcde7',\r\n '#3dcfe7',\r\n '#3dcfe7',\r\n '#3dcfe7',\r\n '#3dcee7',\r\n '#3dcee6',\r\n '#3dcee6',\r\n '#3dcfe7',\r\n '#3dcfe7',\r\n '#3dcfe6',\r\n '#3dcfe6',\r\n '#3dd0e8',\r\n '#3ed1e8',\r\n '#3ed1e7',\r\n '#3dd0e7',\r\n '#3dd0e8',\r\n '#3dd0e7',\r\n '#3dd1e7',\r\n '#3dd1e7',\r\n '#3dd0e7',\r\n '#3cd1e8',\r\n '#3cd2e8',\r\n '#3cd1e8',\r\n '#3cd1e7',\r\n '#3cd1e7',\r\n '#3cd2e8',\r\n '#3cd3e9',\r\n '#3cd2e8',\r\n '#3cd2e9',\r\n '#3cd2e9',\r\n '#3cd3e8',\r\n '#3cd4e8',\r\n '#3cd3e8',\r\n '#3cd3e8',\r\n ],\r\n nullColor: '#2f323d',\r\n}\r\nconst earningsGradient = {\r\n colors: [\r\n '#592d48',\r\n '#592d49',\r\n '#5b2d49',\r\n '#5b2d49',\r\n '#5b2d49',\r\n '#5b2e49',\r\n '#5b2e49',\r\n '#5b2e4a',\r\n '#5c2e4a',\r\n '#5d2f4b',\r\n '#5c2f4b',\r\n '#5c2e4b',\r\n '#5f2f4c',\r\n '#5f2f4c',\r\n '#5e2e4c',\r\n '#5e2e4c',\r\n '#60304d',\r\n '#60304d',\r\n '#5f2f4d',\r\n '#5f2f4d',\r\n '#62304f',\r\n '#62304f',\r\n '#61304f',\r\n '#62314f',\r\n '#62314f',\r\n '#633150',\r\n '#633150',\r\n '#63314f',\r\n '#63304f',\r\n '#643150',\r\n '#643151',\r\n '#643151',\r\n '#653152',\r\n '#653051',\r\n '#653051',\r\n '#663152',\r\n '#673253',\r\n '#673253',\r\n '#673253',\r\n '#673253',\r\n '#683254',\r\n '#683254',\r\n '#683254',\r\n '#693254',\r\n '#693354',\r\n '#6a3354',\r\n '#6a3354',\r\n '#6a3355',\r\n '#6a3356',\r\n '#6a3456',\r\n '#6c3456',\r\n '#6c3356',\r\n '#6c3457',\r\n '#6c3457',\r\n '#6c3457',\r\n '#6c3457',\r\n '#6d3458',\r\n '#6e3559',\r\n '#6f3559',\r\n '#6f3459',\r\n '#6f345a',\r\n '#70355b',\r\n '#70365b',\r\n '#6f355a',\r\n '#70365b',\r\n '#71355a',\r\n '#71355a',\r\n '#71365b',\r\n '#72355b',\r\n '#72365c',\r\n '#72365d',\r\n '#72355c',\r\n '#73355c',\r\n '#73355d',\r\n '#73375d',\r\n '#73375d',\r\n '#76375e',\r\n '#76375f',\r\n '#76375f',\r\n '#76375f',\r\n '#76365e',\r\n '#76365e',\r\n '#76375f',\r\n '#763860',\r\n '#773861',\r\n '#783860',\r\n '#783860',\r\n '#783861',\r\n '#793861',\r\n '#793862',\r\n '#793762',\r\n '#793761',\r\n '#7b3962',\r\n '#7b3962',\r\n '#7a3962',\r\n '#7a3962',\r\n '#7b3963',\r\n '#7c3964',\r\n '#7d3a64',\r\n '#7d3b64',\r\n '#7d3a65',\r\n '#7d3a65',\r\n '#7d3a65',\r\n '#7e3b65',\r\n '#803b66',\r\n '#7f3a66',\r\n '#7e3a66',\r\n '#7f3a67',\r\n '#7f3b67',\r\n '#803c67',\r\n '#803c67',\r\n '#7f3b67',\r\n '#813c68',\r\n '#823b69',\r\n '#823b69',\r\n '#813b69',\r\n '#823c69',\r\n '#823c69',\r\n '#823c69',\r\n '#823c69',\r\n '#843d6a',\r\n '#843d6a',\r\n '#843d6a',\r\n '#843c6b',\r\n '#863c6c',\r\n '#853c6c',\r\n '#853d6c',\r\n '#863e6c',\r\n '#863d6c',\r\n '#873d6c',\r\n '#873d6c',\r\n '#873d6d',\r\n '#893e6e',\r\n '#8a3e6f',\r\n '#8a3e6f',\r\n '#893e6e',\r\n '#893d6e',\r\n '#893e6e',\r\n '#8a3f6f',\r\n '#8b3f70',\r\n '#8b3f71',\r\n '#8b3e70',\r\n '#8b3e70',\r\n '#8c3f70',\r\n '#8c4071',\r\n '#8c4070',\r\n '#8c4070',\r\n '#8d4071',\r\n '#8d4072',\r\n '#8d4072',\r\n '#8f4073',\r\n '#8f4074',\r\n '#8f4073',\r\n '#8f4173',\r\n '#8f4173',\r\n '#904173',\r\n '#904174',\r\n '#904175',\r\n '#904175',\r\n '#914175',\r\n '#924175',\r\n '#924275',\r\n '#924275',\r\n '#914175',\r\n '#924277',\r\n '#934277',\r\n '#934277',\r\n '#944278',\r\n '#954277',\r\n '#954278',\r\n '#954278',\r\n '#954278',\r\n '#954378',\r\n '#964378',\r\n '#964379',\r\n '#96447a',\r\n '#96437a',\r\n '#96437a',\r\n '#98437a',\r\n '#98447b',\r\n '#98457b',\r\n '#98457b',\r\n '#98457b',\r\n '#99447b',\r\n '#9a457d',\r\n '#9b457d',\r\n '#9b457d',\r\n '#9a447c',\r\n '#9a457c',\r\n '#9b457c',\r\n '#9b457e',\r\n '#9b467e',\r\n '#9c467e',\r\n '#9d467f',\r\n '#9e467f',\r\n '#9d467f',\r\n '#9e467e',\r\n '#9e477f',\r\n '#9e4780',\r\n '#9e477f',\r\n '#9f4680',\r\n '#a04680',\r\n '#a04880',\r\n '#a04881',\r\n '#a04881',\r\n '#a04881',\r\n '#a24883',\r\n '#a24883',\r\n '#a24882',\r\n '#a24883',\r\n '#a24883',\r\n '#a24883',\r\n '#a24883',\r\n '#a34983',\r\n '#a34983',\r\n '#a34984',\r\n '#a44985',\r\n '#a54986',\r\n '#a54986',\r\n '#a54986',\r\n '#a54a85',\r\n '#a54a85',\r\n '#a54a85',\r\n '#a64a86',\r\n '#a74a87',\r\n '#a84a88',\r\n '#a84a88',\r\n '#a74a87',\r\n '#a84b87',\r\n '#a84b88',\r\n '#a84b88',\r\n '#a84b88',\r\n '#a94b89',\r\n '#aa4b89',\r\n '#ab4b89',\r\n '#ab4b89',\r\n '#ab4c8a',\r\n '#aa4c8a',\r\n '#aa4c8a',\r\n '#ab4c8a',\r\n '#ad4c8b',\r\n '#ad4c8b',\r\n '#ad4c8b',\r\n '#ad4c8c',\r\n '#ae4d8d',\r\n '#ae4c8c',\r\n '#ae4d8d',\r\n '#af4e8e',\r\n '#af4e8d',\r\n '#b04e8d',\r\n '#b04e8d',\r\n '#b04d8e',\r\n '#b04e8e',\r\n '#b04d8e',\r\n '#b04e8e',\r\n '#b14f8f',\r\n '#b14e90',\r\n '#b14e90',\r\n '#b14f90',\r\n '#b25090',\r\n '#b34f90',\r\n '#b34f90',\r\n '#b34f90',\r\n '#b35091',\r\n '#b44f91',\r\n '#b55092',\r\n '#b55092',\r\n '#b55092',\r\n '#b55192',\r\n '#b55092',\r\n '#b55092',\r\n '#b55093',\r\n '#b65094',\r\n '#b75194',\r\n '#b85193',\r\n '#b75093',\r\n '#b85095',\r\n '#b85095',\r\n '#b85295',\r\n '#b85295',\r\n '#ba5296',\r\n '#b95197',\r\n '#b95197',\r\n '#ba5297',\r\n '#ba5297',\r\n '#ba5296',\r\n '#ba5296',\r\n '#bb5397',\r\n '#bc5297',\r\n '#bd5298',\r\n '#bd5499',\r\n '#bc5499',\r\n '#bc5499',\r\n '#bc5499',\r\n '#bd5499',\r\n '#be549a',\r\n '#bf549b',\r\n '#bf549b',\r\n '#bf549b',\r\n '#bf549b',\r\n '#c0559b',\r\n '#c0559b',\r\n '#c0559b',\r\n '#c0559b',\r\n '#c0549c',\r\n '#c0549c',\r\n '#c2569c',\r\n '#c2569d',\r\n '#c2569e',\r\n '#c2569e',\r\n '#c4569e',\r\n '#c4569e',\r\n '#c4569f',\r\n '#c3579e',\r\n '#c3579e',\r\n '#c5579e',\r\n '#c658a0',\r\n '#c5579f',\r\n '#c4579f',\r\n '#c557a0',\r\n '#c757a0',\r\n '#c657a0',\r\n '#c658a1',\r\n '#c759a2',\r\n '#c758a2',\r\n '#c758a2',\r\n '#c858a2',\r\n '#c959a3',\r\n '#ca59a3',\r\n '#c958a2',\r\n '#c958a2',\r\n '#c959a3',\r\n '#ca59a4',\r\n '#cb59a4',\r\n '#cb59a4',\r\n '#cb59a4',\r\n '#cb5aa5',\r\n '#cc5ba5',\r\n '#cc5ba5',\r\n '#cc5aa5',\r\n '#cd5ba6',\r\n '#cd5ba6',\r\n '#cd5ba6',\r\n '#ce5ba7',\r\n '#ce5ca7',\r\n '#cf5ca7',\r\n '#cf5ca7',\r\n '#cf5ca7',\r\n '#d05ca8',\r\n '#d05ba9',\r\n '#d05ba9',\r\n '#d05ba9',\r\n '#d15ca9',\r\n '#d15da9',\r\n '#d15da9',\r\n '#d15ca9',\r\n '#d25caa',\r\n '#d25dab',\r\n '#d25eab',\r\n '#d25eab',\r\n '#d35eab',\r\n '#d35dab',\r\n '#d35dab',\r\n '#d45eac',\r\n '#d45dac',\r\n '#d55ead',\r\n '#d55ead',\r\n '#d55dad',\r\n '#d65eac',\r\n '#d65fad',\r\n '#d65fae',\r\n '#d65fae',\r\n '#d75fae',\r\n '#d75fae',\r\n '#d75fae',\r\n '#d75fae',\r\n '#d75faf',\r\n '#d760b0',\r\n '#d960b0',\r\n '#d95fb0',\r\n '#d961b0',\r\n '#d961b1',\r\n '#d961b1',\r\n '#da61b0',\r\n '#dc61b2',\r\n '#dc60b2',\r\n '#db60b2',\r\n '#db61b2',\r\n '#dc61b2',\r\n '#dd61b3',\r\n '#dd61b3',\r\n '#dd62b3',\r\n '#de62b3',\r\n '#de63b4',\r\n '#de63b5',\r\n '#dd62b4',\r\n '#de62b4',\r\n '#df63b5',\r\n '#e063b5',\r\n '#e063b5',\r\n '#e063b6',\r\n '#e164b6',\r\n '#e164b6',\r\n '#e164b6',\r\n '#e164b7',\r\n '#e264b7',\r\n '#e264b7',\r\n '#e264b7',\r\n '#e264b8',\r\n '#e265b8',\r\n '#e265b8',\r\n '#e365b8',\r\n '#e364b8',\r\n '#e465b9',\r\n '#e565ba',\r\n '#e565ba',\r\n '#e566b9',\r\n '#e566ba',\r\n '#e566bb',\r\n '#e666ba',\r\n '#e766bb',\r\n '#e665bb',\r\n '#e665bb',\r\n '#e666bb',\r\n '#e867bc',\r\n '#e867bc',\r\n '#e867bc',\r\n '#e867bc',\r\n '#e968bd',\r\n '#e967be',\r\n '#e968be',\r\n '#e969bd',\r\n '#ea68bf',\r\n '#ea69bf',\r\n '#ea69bf',\r\n '#eb69c0',\r\n '#eb69c0',\r\n '#eb6ac0',\r\n '#eb6ac0',\r\n '#ec6ac1',\r\n '#ed6ac2',\r\n '#ec6bc2',\r\n '#ec6bc2',\r\n '#ed6bc2',\r\n '#ed6bc3',\r\n '#ed6bc3',\r\n '#ed6bc3',\r\n '#ee6bc2',\r\n '#ef6bc3',\r\n '#ef6cc3',\r\n '#ef6cc3',\r\n '#f06cc4',\r\n '#f06cc5',\r\n '#f16cc4',\r\n '#f16cc4',\r\n '#f16cc5',\r\n '#f16dc6',\r\n '#f16dc6',\r\n '#f36dc6',\r\n '#f36dc7',\r\n '#f36dc6',\r\n '#f36dc7',\r\n '#f36dc7',\r\n '#f46dc7',\r\n '#f56ec7',\r\n '#f46ec7',\r\n '#f46ec7',\r\n '#f46ec8',\r\n '#f56ec8',\r\n '#f56fc8',\r\n '#f66fc8',\r\n '#f76fc9',\r\n '#f76fc9',\r\n '#f76fc9',\r\n '#f86fca',\r\n '#f970cb',\r\n '#f971cb',\r\n '#f870cb',\r\n '#f870cb',\r\n '#f870cc',\r\n '#f970cd',\r\n '#fa71cd',\r\n '#fa71cd',\r\n '#fa71cd',\r\n '#fa72ce',\r\n '#fb71ce',\r\n '#fb71ce',\r\n '#fb71ce',\r\n '#fc72cf',\r\n '#fb72ce',\r\n '#fb72ce',\r\n '#fc72cf',\r\n '#fd72d0',\r\n '#fe73d1',\r\n '#ff73d1',\r\n '#ff72d1',\r\n '#fe72d1',\r\n '#ff73d2',\r\n '#ff74d2',\r\n '#fe74d2',\r\n '#02dfce',\r\n '#02dece',\r\n '#02dece',\r\n '#03dfce',\r\n '#03dfce',\r\n '#03dfcd',\r\n '#03ddcd',\r\n '#03ddcd',\r\n '#03ddcc',\r\n '#02dccb',\r\n '#02dccb',\r\n '#03dccc',\r\n '#03dbcb',\r\n '#03dbca',\r\n '#03dbca',\r\n '#03dbca',\r\n '#03daca',\r\n '#04dbcb',\r\n '#04dacb',\r\n '#03d9ca',\r\n '#03d8c9',\r\n '#04d9c9',\r\n '#04dac9',\r\n '#04d9c9',\r\n '#04d9c8',\r\n '#04d7c7',\r\n '#04d6c7',\r\n '#04d7c8',\r\n '#05d7c7',\r\n '#05d6c7',\r\n '#05d6c7',\r\n '#04d6c7',\r\n '#05d5c6',\r\n '#05d5c6',\r\n '#05d5c6',\r\n '#05d5c5',\r\n '#06d4c5',\r\n '#05d4c5',\r\n '#05d4c5',\r\n '#06d4c5',\r\n '#06d3c4',\r\n '#06d2c4',\r\n '#06d2c4',\r\n '#06d2c3',\r\n '#06d2c3',\r\n '#07d2c2',\r\n '#07d0c1',\r\n '#07d0c2',\r\n '#07d0c1',\r\n '#07cfc1',\r\n '#07cfc1',\r\n '#07d0c1',\r\n '#09cfc0',\r\n '#08cfc0',\r\n '#09cfc0',\r\n '#0acec1',\r\n '#0acec0',\r\n '#09cdbf',\r\n '#09cdbf',\r\n '#0acebf',\r\n '#0accbe',\r\n '#0bccbf',\r\n '#0bccbf',\r\n '#0bccbe',\r\n '#0bcbbe',\r\n '#0bcbbe',\r\n '#0bcbbd',\r\n '#0ccabc',\r\n '#0ccbbd',\r\n '#0dcbbd',\r\n '#0dcabc',\r\n '#0cc9bb',\r\n '#0dc8ba',\r\n '#0ec9bb',\r\n '#0ec9bb',\r\n '#0dc8ba',\r\n '#0ec8bb',\r\n '#0dc7ba',\r\n '#0ec7ba',\r\n '#0fc7ba',\r\n '#0ec6b9',\r\n '#0fc6b9',\r\n '#0fc6b9',\r\n '#0fc5b8',\r\n '#0fc6b8',\r\n '#0fc6b8',\r\n '#0fc4b8',\r\n '#10c4b7',\r\n '#10c4b7',\r\n '#10c3b6',\r\n '#10c3b6',\r\n '#10c3b6',\r\n '#12c2b6',\r\n '#11c2b6',\r\n '#11c2b6',\r\n '#12c3b6',\r\n '#12c2b5',\r\n '#12c1b5',\r\n '#12c0b5',\r\n '#13c0b4',\r\n '#13c1b4',\r\n '#13c0b3',\r\n '#13bfb3',\r\n '#13c0b4',\r\n '#13bfb2',\r\n '#13beb3',\r\n '#13beb3',\r\n '#13bfb2',\r\n '#14beb1',\r\n '#14beb1',\r\n '#14beb1',\r\n '#14bdb1',\r\n '#14bdb1',\r\n '#15bdb1',\r\n '#16bdb1',\r\n '#15bcb0',\r\n '#16baaf',\r\n '#16bab0',\r\n '#16bbb0',\r\n '#15bbaf',\r\n '#15b9ae',\r\n '#15b9ae',\r\n '#16baae',\r\n '#17baae',\r\n '#17b9ae',\r\n '#17b8ae',\r\n '#17b8ac',\r\n '#17b8ac',\r\n '#18b8ac',\r\n '#18b7ab',\r\n '#18b7ab',\r\n '#18b7ab',\r\n '#19b7ac',\r\n '#18b7ac',\r\n '#18b5ac',\r\n '#18b5ab',\r\n '#18b5aa',\r\n '#19b4aa',\r\n '#1ab4aa',\r\n '#1ab5aa',\r\n '#19b3a9',\r\n '#19b3a9',\r\n '#19b4a9',\r\n '#19b4a9',\r\n '#19b2a8',\r\n '#1ab3a8',\r\n '#1ab3a8',\r\n '#1ab2a7',\r\n '#1bb1a7',\r\n '#1ab0a7',\r\n '#1ab0a7',\r\n '#1ab0a7',\r\n '#1bb1a6',\r\n '#1bb1a6',\r\n '#1bafa6',\r\n '#1bafa6',\r\n '#1cafa5',\r\n '#1cafa5',\r\n '#1cafa5',\r\n '#1caea4',\r\n '#1caea4',\r\n '#1caea4',\r\n '#1caea4',\r\n '#1cada3',\r\n '#1caca2',\r\n '#1caca2',\r\n '#1caca2',\r\n '#1caca2',\r\n '#1eaba2',\r\n '#1eaca2',\r\n '#1eaca2',\r\n '#1eaba2',\r\n '#1daaa1',\r\n '#1ea9a1',\r\n '#1ea9a1',\r\n '#1daaa0',\r\n '#1ea89f',\r\n '#1fa9a0',\r\n '#1fa8a0',\r\n '#1ea79f',\r\n '#1fa79e',\r\n '#1fa89f',\r\n '#1fa79e',\r\n '#1ea69d',\r\n '#1ea79d',\r\n '#1ea79c',\r\n '#1ea59c',\r\n '#1ea59c',\r\n '#20a59c',\r\n '#1fa59c',\r\n '#1fa59c',\r\n '#20a49b',\r\n '#20a49c',\r\n '#1fa49c',\r\n '#1fa49a',\r\n '#1fa39a',\r\n '#20a29a',\r\n '#20a39a',\r\n '#20a39a',\r\n '#20a29a',\r\n '#21a199',\r\n '#21a099',\r\n '#21a099',\r\n '#21a198',\r\n '#21a098',\r\n '#219f98',\r\n '#219f98',\r\n '#21a098',\r\n '#219f97',\r\n '#219f97',\r\n '#219e97',\r\n '#219d96',\r\n '#219d97',\r\n '#229d96',\r\n '#229d96',\r\n '#229d96',\r\n '#229c95',\r\n '#239d95',\r\n '#239d95',\r\n '#239c95',\r\n '#229a94',\r\n '#229a93',\r\n '#229a93',\r\n '#239b93',\r\n '#229a93',\r\n '#239892',\r\n '#239892',\r\n '#239992',\r\n '#249991',\r\n '#249991',\r\n '#249791',\r\n '#239791',\r\n '#249791',\r\n '#249791',\r\n '#249791',\r\n '#239690',\r\n '#239590',\r\n '#24968f',\r\n '#24968f',\r\n '#23958f',\r\n '#24958e',\r\n '#24948e',\r\n '#24948e',\r\n '#24958e',\r\n '#25938d',\r\n '#25938d',\r\n '#25938d',\r\n '#24938c',\r\n '#24928c',\r\n '#25928c',\r\n '#25928c',\r\n '#25928c',\r\n '#25918c',\r\n '#25908b',\r\n '#25908b',\r\n '#25908b',\r\n '#248f8a',\r\n '#258f8a',\r\n '#258f8a',\r\n '#25908b',\r\n '#258f8a',\r\n '#248e89',\r\n '#258e89',\r\n '#268e89',\r\n '#268e88',\r\n '#268e88',\r\n '#268d88',\r\n '#268c88',\r\n '#268c86',\r\n '#268c86',\r\n '#268c87',\r\n '#268c87',\r\n '#268b86',\r\n '#268a87',\r\n '#268a86',\r\n '#268a85',\r\n '#268a86',\r\n '#268a86',\r\n '#268884',\r\n '#268884',\r\n '#268884',\r\n '#278783',\r\n '#278783',\r\n '#268883',\r\n '#278682',\r\n '#278682',\r\n '#278682',\r\n '#278682',\r\n '#278681',\r\n '#278681',\r\n '#278581',\r\n '#278480',\r\n '#278580',\r\n '#278480',\r\n '#278381',\r\n '#278481',\r\n '#27837f',\r\n '#288480',\r\n '#288380',\r\n '#27827f',\r\n '#27827f',\r\n '#27817e',\r\n '#27817e',\r\n '#27817e',\r\n '#27807d',\r\n '#27807d',\r\n '#27807d',\r\n '#28807d',\r\n '#27807c',\r\n '#277f7b',\r\n '#277f7b',\r\n '#277f7b',\r\n '#287e7b',\r\n '#287d7a',\r\n '#287d7a',\r\n '#297e7b',\r\n '#297d7b',\r\n '#297c7b',\r\n '#297c7b',\r\n '#297d7b',\r\n '#287b79',\r\n '#287c79',\r\n '#287b79',\r\n '#297a79',\r\n '#297a78',\r\n '#297b78',\r\n '#297b78',\r\n '#287a77',\r\n '#287976',\r\n '#287876',\r\n '#287876',\r\n '#287876',\r\n '#287775',\r\n '#297876',\r\n '#297976',\r\n '#297776',\r\n '#287675',\r\n '#297776',\r\n '#297775',\r\n '#287674',\r\n '#297574',\r\n '#297574',\r\n '#297574',\r\n '#297474',\r\n '#287472',\r\n '#297472',\r\n '#297472',\r\n '#297472',\r\n '#297271',\r\n '#287271',\r\n '#287271',\r\n '#297271',\r\n '#297271',\r\n '#287171',\r\n '#28716f',\r\n '#29716f',\r\n '#28706f',\r\n '#297070',\r\n '#297070',\r\n '#296f6f',\r\n '#296f6f',\r\n '#286e6e',\r\n '#286e6e',\r\n '#286f6e',\r\n '#296e6e',\r\n '#286d6d',\r\n '#286d6d',\r\n '#296d6d',\r\n '#296e6d',\r\n '#296e6d',\r\n '#296c6b',\r\n '#286c6b',\r\n '#286c6b',\r\n '#296c6b',\r\n '#296a6b',\r\n '#286a6a',\r\n '#286a6a',\r\n '#296969',\r\n '#2a6969',\r\n '#296969',\r\n '#296869',\r\n '#2a6969',\r\n '#2a6969',\r\n '#2a6969',\r\n '#2a6868',\r\n '#296768',\r\n '#296768',\r\n '#2a6767',\r\n '#2a6767',\r\n '#2a6767',\r\n '#2a6567',\r\n '#296566',\r\n '#286666',\r\n '#286565',\r\n '#286565',\r\n '#296565',\r\n '#286465',\r\n '#296464',\r\n '#296464',\r\n '#286364',\r\n '#286263',\r\n '#286263',\r\n '#286263',\r\n '#286163',\r\n '#286062',\r\n '#286062',\r\n '#286162',\r\n '#296163',\r\n '#285f62',\r\n '#296062',\r\n '#296062',\r\n '#295f61',\r\n '#296061',\r\n '#285f60',\r\n '#285d5f',\r\n '#285d5f',\r\n '#285d60',\r\n '#285c5f',\r\n '#285c5e',\r\n '#285c5f',\r\n '#295b5e',\r\n '#285b5d',\r\n '#285b5d',\r\n '#285c5d',\r\n '#295c5d',\r\n '#285b5c',\r\n '#285b5c',\r\n '#285b5c',\r\n '#285a5d',\r\n '#28595d',\r\n '#28595b',\r\n '#28595b',\r\n '#29585c',\r\n '#28585b',\r\n '#28585a',\r\n '#28575a',\r\n '#29585b',\r\n '#29585b',\r\n '#29575a',\r\n '#295659',\r\n '#285558',\r\n '#285658',\r\n '#285658',\r\n '#295558',\r\n '#295557',\r\n '#285457',\r\n '#285357',\r\n '#285457',\r\n '#285356',\r\n '#295456',\r\n '#295356',\r\n '#285256',\r\n '#295256',\r\n '#285255',\r\n '#285255',\r\n '#295255',\r\n '#295155',\r\n '#284f54',\r\n '#274f54',\r\n '#275054',\r\n '#275054',\r\n '#275054',\r\n '#274e52',\r\n '#274e52',\r\n '#284e52',\r\n '#274d51',\r\n '#274d51',\r\n '#274e52',\r\n '#274c50',\r\n '#274c50',\r\n '#274e51',\r\n '#284e51',\r\n '#274c50',\r\n '#284c50',\r\n '#284b50',\r\n '#274a50',\r\n '#284a50',\r\n '#284a50',\r\n '#28494e',\r\n '#27484e',\r\n '#274a4e',\r\n '#274a4d',\r\n '#27494d',\r\n '#28484e',\r\n '#27474c',\r\n '#26484d',\r\n '#26484d',\r\n '#26484c',\r\n '#25464b',\r\n '#26464b',\r\n '#26474b',\r\n '#26474b',\r\n '#26454a',\r\n '#26454a',\r\n '#26464a',\r\n '#26464a',\r\n '#254349',\r\n '#264349',\r\n '#264349',\r\n '#26444a',\r\n ],\r\n nullColor: '#414554',\r\n}\r\n\r\nconst redGreenGradientBubbles = {\r\n colors: [\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f23538',\r\n '#f23538',\r\n '#f23538',\r\n '#f23538',\r\n '#f13538',\r\n '#f13538',\r\n '#f13538',\r\n '#f13538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ee3639',\r\n '#ee3639',\r\n '#ee3639',\r\n '#ed3639',\r\n '#ed3639',\r\n '#ed3639',\r\n '#ec3639',\r\n '#ec3639',\r\n '#ec3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#ea3639',\r\n '#ea3639',\r\n '#ea3639',\r\n '#e93639',\r\n '#e93639',\r\n '#e83538',\r\n '#e83538',\r\n '#e83538',\r\n '#e73538',\r\n '#e73538',\r\n '#e73538',\r\n '#e63538',\r\n '#e63639',\r\n '#e63639',\r\n '#e63639',\r\n '#e63639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e43639',\r\n '#e43639',\r\n '#e43639',\r\n '#e33639',\r\n '#e33639',\r\n '#e33639',\r\n '#e23639',\r\n '#e23639',\r\n '#e23639',\r\n '#e13639',\r\n '#e13639',\r\n '#e13639',\r\n '#e03639',\r\n '#e0363a',\r\n '#e0363a',\r\n '#e0363a',\r\n '#df363a',\r\n '#df363a',\r\n '#df363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#dd363a',\r\n '#dd373b',\r\n '#dd373b',\r\n '#dc373b',\r\n '#dc373b',\r\n '#dc373b',\r\n '#db373b',\r\n '#db373b',\r\n '#db373b',\r\n '#da373b',\r\n '#da373d',\r\n '#da373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d8373e',\r\n '#d8373e',\r\n '#d7383e',\r\n '#d7383e',\r\n '#d7383e',\r\n '#d6383e',\r\n '#d6383e',\r\n '#d5383e',\r\n '#d5383e',\r\n '#d4383e',\r\n '#d4383e',\r\n '#d4383f',\r\n '#d3383f',\r\n '#d3383f',\r\n '#d3393f',\r\n '#d33940',\r\n '#d23940',\r\n '#d23940',\r\n '#d13940',\r\n '#d13941',\r\n '#d03941',\r\n '#d03941',\r\n '#cf3941',\r\n '#cf3942',\r\n '#cf3942',\r\n '#cf3a42',\r\n '#ce3a42',\r\n '#cd3a43',\r\n '#cd3a43',\r\n '#cc3943',\r\n '#cc3943',\r\n '#cb3944',\r\n '#cb3944',\r\n '#ca3944',\r\n '#ca3944',\r\n '#c93a45',\r\n '#c93a45',\r\n '#c83a45',\r\n '#c73a45',\r\n '#c73a45',\r\n '#c53a45',\r\n '#c53a45',\r\n '#c43a45',\r\n '#c43a46',\r\n '#c43a46',\r\n '#c43c46',\r\n '#c33c47',\r\n '#c33c47',\r\n '#c23c47',\r\n '#c23c47',\r\n '#c13c48',\r\n '#c13c48',\r\n '#c03c48',\r\n '#c03c48',\r\n '#bf3c48',\r\n '#bf3d4a',\r\n '#be3d4a',\r\n '#be3d4a',\r\n '#bd3d4a',\r\n '#bd3d4b',\r\n '#bc3d4b',\r\n '#bc3d4b',\r\n '#bb3d4b',\r\n '#bb3d4b',\r\n '#bb3d4c',\r\n '#bb3d4c',\r\n '#ba3d4c',\r\n '#ba3e4c',\r\n '#b83e4c',\r\n '#b83e4c',\r\n '#b83e4c',\r\n '#b73e4c',\r\n '#b73e4c',\r\n '#b63e4c',\r\n '#b63e4c',\r\n '#b53e4d',\r\n '#b53e4d',\r\n '#b53e4d',\r\n '#b43e4d',\r\n '#b43e4d',\r\n '#b33e4d',\r\n '#b33f4d',\r\n '#b23f4e',\r\n '#b23f4e',\r\n '#b23f4e',\r\n '#b13f4e',\r\n '#b13f4e',\r\n '#b03e4e',\r\n '#b03e4e',\r\n '#b03e4f',\r\n '#b03e4f',\r\n '#b03e4f',\r\n '#ae3e4f',\r\n '#ae3e4f',\r\n '#ad3e4f',\r\n '#ad3e4f',\r\n '#ac3e4f',\r\n '#ac3f50',\r\n '#ab3f50',\r\n '#ab3f50',\r\n '#aa3f50',\r\n '#aa3f50',\r\n '#a93f50',\r\n '#a93f50',\r\n '#a73f50',\r\n '#a73f50',\r\n '#a63f50',\r\n '#a63f51',\r\n '#a53f51',\r\n '#a53f51',\r\n '#a43f50',\r\n '#a43f50',\r\n '#a43f50',\r\n '#a43f50',\r\n '#a24050',\r\n '#a24050',\r\n '#a14050',\r\n '#a04051',\r\n '#a04051',\r\n '#9f4051',\r\n '#9f4051',\r\n '#9e4051',\r\n '#9c4051',\r\n '#9c4051',\r\n '#9b4051',\r\n '#9a4051',\r\n '#9a4053',\r\n '#994053',\r\n '#994153',\r\n '#984153',\r\n '#974153',\r\n '#974153',\r\n '#964153',\r\n '#954153',\r\n '#954153',\r\n '#934054',\r\n '#934054',\r\n '#924054',\r\n '#914054',\r\n '#914054',\r\n '#904053',\r\n '#8e4053',\r\n '#8e4153',\r\n '#8d4153',\r\n '#8d4153',\r\n '#8d4154',\r\n '#8b4154',\r\n '#8b4154',\r\n '#8a4154',\r\n '#894154',\r\n '#894154',\r\n '#884154',\r\n '#884154',\r\n '#864154',\r\n '#864154',\r\n '#854154',\r\n '#844155',\r\n '#844255',\r\n '#824255',\r\n '#824255',\r\n '#824255',\r\n '#824255',\r\n '#814255',\r\n '#814255',\r\n '#804255',\r\n '#804255',\r\n '#7e4255',\r\n '#7e4255',\r\n '#7d4255',\r\n '#7d4256',\r\n '#7c4256',\r\n '#7c4256',\r\n '#7b4256',\r\n '#7b4256',\r\n '#7b4256',\r\n '#794256',\r\n '#794256',\r\n '#784256',\r\n '#784356',\r\n '#774256',\r\n '#774256',\r\n '#774256',\r\n '#764256',\r\n '#764256',\r\n '#764256',\r\n '#754256',\r\n '#754256',\r\n '#744255',\r\n '#744255',\r\n '#744255',\r\n '#734255',\r\n '#734255',\r\n '#734255',\r\n '#724255',\r\n '#724255',\r\n '#724255',\r\n '#714255',\r\n '#714255',\r\n '#6f4255',\r\n '#6f4255',\r\n '#6f4255',\r\n '#6e4255',\r\n '#6e4255',\r\n '#6e4255',\r\n '#6d4255',\r\n '#6d4255',\r\n '#6d4255',\r\n '#6c4255',\r\n '#6c4255',\r\n '#6c4255',\r\n '#6b4155',\r\n '#6b4155',\r\n '#694155',\r\n '#694155',\r\n '#694155',\r\n '#684155',\r\n '#684155',\r\n '#684155',\r\n '#684155',\r\n '#684155',\r\n '#674155',\r\n '#674155',\r\n '#674155',\r\n '#664154',\r\n '#664154',\r\n '#654154',\r\n '#654154',\r\n '#654154',\r\n '#634154',\r\n '#634154',\r\n '#624154',\r\n '#624154',\r\n '#614154',\r\n '#614154',\r\n '#614154',\r\n '#604054',\r\n '#604054',\r\n '#5f4054',\r\n '#5f4054',\r\n '#5f4054',\r\n '#5e4054',\r\n '#5e4054',\r\n '#5d4054',\r\n '#5d4054',\r\n '#5d4054',\r\n '#5c4053',\r\n '#5c4053',\r\n '#5c4053',\r\n '#5b4053',\r\n '#5b4053',\r\n '#5a4053',\r\n '#5a4053',\r\n '#5a4053',\r\n '#593f53',\r\n '#593f53',\r\n '#593f53',\r\n '#583f53',\r\n '#583f53',\r\n '#583f53',\r\n '#573f53',\r\n '#573e53',\r\n '#573e53',\r\n '#563e53',\r\n '#563e53',\r\n '#563e53',\r\n '#563e53',\r\n '#553e52',\r\n '#553e52',\r\n '#553e52',\r\n '#543e52',\r\n '#543e52',\r\n '#543e52',\r\n '#543e52',\r\n '#543e52',\r\n '#533e52',\r\n '#533e52',\r\n '#533e52',\r\n '#533e52',\r\n '#533e52',\r\n '#523e51',\r\n '#523e51',\r\n '#523e51',\r\n '#523e51',\r\n '#523e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503f51',\r\n '#503f51',\r\n '#4f3f51',\r\n '#4f3f51',\r\n '#4f3f51',\r\n '#4d3f51',\r\n '#4d3f51',\r\n '#4d4151',\r\n '#4b4151',\r\n '#4b4151',\r\n '#4a4152',\r\n '#494152',\r\n '#484253',\r\n '#484253',\r\n '#474253',\r\n '#474253',\r\n '#464353',\r\n '#454353',\r\n '#454353',\r\n '#444454',\r\n '#444454',\r\n '#434454',\r\n '#434454',\r\n '#424454',\r\n '#424554',\r\n '#424554',\r\n '#424554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#404654',\r\n '#404654',\r\n '#404654',\r\n '#404653',\r\n '#404653',\r\n '#3f4653',\r\n '#3f4753',\r\n '#3f4753',\r\n '#3e4753',\r\n '#3e4753',\r\n '#3e4852',\r\n '#3d4852',\r\n '#3d4852',\r\n '#3c4951',\r\n '#3c4951',\r\n '#3b4951',\r\n '#3b4a51',\r\n '#3b4a50',\r\n '#3b4a50',\r\n '#3a4c50',\r\n '#394c50',\r\n '#394c50',\r\n '#394c50',\r\n '#394c50',\r\n '#394c50',\r\n '#384c4f',\r\n '#384c4f',\r\n '#384c4f',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384e50',\r\n '#364e50',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364f4f',\r\n '#364f4f',\r\n '#354f4f',\r\n '#354f4f',\r\n '#354f4f',\r\n '#354f4f',\r\n '#35514f',\r\n '#35514f',\r\n '#35514f',\r\n '#34514f',\r\n '#34514f',\r\n '#34524f',\r\n '#34524f',\r\n '#34524f',\r\n '#34524f',\r\n '#33524e',\r\n '#33534e',\r\n '#33534e',\r\n '#33534e',\r\n '#32534e',\r\n '#32544e',\r\n '#32544e',\r\n '#32544e',\r\n '#32544e',\r\n '#31554e',\r\n '#31554e',\r\n '#31554e',\r\n '#31564d',\r\n '#31564d',\r\n '#31564d',\r\n '#31564d',\r\n '#31574d',\r\n '#30574d',\r\n '#30574d',\r\n '#30584d',\r\n '#30584d',\r\n '#2f584d',\r\n '#2f594d',\r\n '#2f594d',\r\n '#2f594c',\r\n '#2e5a4c',\r\n '#2e5a4c',\r\n '#2e5a4c',\r\n '#2d5b4c',\r\n '#2d5b4c',\r\n '#2d5b4c',\r\n '#2d5b4c',\r\n '#2c5c4c',\r\n '#2c5c4c',\r\n '#2c5c4c',\r\n '#2b5d4b',\r\n '#2b5d4b',\r\n '#2b5d4b',\r\n '#2b5e4b',\r\n '#2a5e4b',\r\n '#2a5e4b',\r\n '#2a5f4b',\r\n '#2a5f4b',\r\n '#2a5f4b',\r\n '#2a604b',\r\n '#2a604b',\r\n '#2a604b',\r\n '#29624b',\r\n '#29624b',\r\n '#29624b',\r\n '#29624b',\r\n '#29634b',\r\n '#29634b',\r\n '#29634b',\r\n '#29644b',\r\n '#28644b',\r\n '#28644b',\r\n '#28644b',\r\n '#28654b',\r\n '#28654a',\r\n '#27654a',\r\n '#27664a',\r\n '#27664a',\r\n '#27664a',\r\n '#27664a',\r\n '#26684a',\r\n '#26684a',\r\n '#26684a',\r\n '#26684a',\r\n '#26694a',\r\n '#25694a',\r\n '#25694a',\r\n '#25694a',\r\n '#256a4a',\r\n '#256a4a',\r\n '#256a4a',\r\n '#256a4a',\r\n '#246a4a',\r\n '#246b49',\r\n '#246b49',\r\n '#246b49',\r\n '#246b49',\r\n '#246c49',\r\n '#246c49',\r\n '#236c49',\r\n '#236c49',\r\n '#236e49',\r\n '#236e49',\r\n '#236e49',\r\n '#236e49',\r\n '#236f49',\r\n '#236f49',\r\n '#236f49',\r\n '#226f49',\r\n '#227049',\r\n '#227049',\r\n '#227049',\r\n '#227149',\r\n '#227149',\r\n '#227149',\r\n '#227149',\r\n '#227349',\r\n '#217349',\r\n '#217349',\r\n '#217449',\r\n '#217449',\r\n '#217449',\r\n '#217449',\r\n '#217549',\r\n '#217549',\r\n '#217549',\r\n '#207649',\r\n '#207649',\r\n '#207649',\r\n '#207847',\r\n '#207847',\r\n '#207847',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207b47',\r\n '#207b47',\r\n '#207b47',\r\n '#207c47',\r\n '#207c47',\r\n '#207c47',\r\n '#207d47',\r\n '#207d47',\r\n '#207e48',\r\n '#207e48',\r\n '#207e48',\r\n '#208048',\r\n '#208048',\r\n '#208048',\r\n '#208148',\r\n '#208148',\r\n '#208148',\r\n '#208248',\r\n '#1f8247',\r\n '#1f8247',\r\n '#1f8347',\r\n '#1f8347',\r\n '#1f8347',\r\n '#1f8547',\r\n '#1f8547',\r\n '#1f8547',\r\n '#1f8647',\r\n '#1f8647',\r\n '#1f8647',\r\n '#1e8747',\r\n '#1e8747',\r\n '#1e8747',\r\n '#1e8747',\r\n '#1e8947',\r\n '#1e8947',\r\n '#1e8947',\r\n '#1e8a47',\r\n '#1e8a47',\r\n '#1e8a47',\r\n '#1e8b47',\r\n '#1e8b47',\r\n '#1e8b47',\r\n '#1e8b47',\r\n '#1e8c47',\r\n '#1e8c47',\r\n '#1e8c47',\r\n '#1e8c47',\r\n '#1e8e47',\r\n '#1e8e47',\r\n '#1e8e47',\r\n '#1e8f47',\r\n '#1d8f47',\r\n '#1d8f47',\r\n '#1d8f47',\r\n '#1d9047',\r\n '#1d9047',\r\n '#1e9047',\r\n '#1e9047',\r\n '#1e9147',\r\n '#1e9147',\r\n '#1e9147',\r\n '#1e9347',\r\n '#1e9347',\r\n '#1e9347',\r\n '#1e9347',\r\n '#1e9447',\r\n '#1e9447',\r\n '#1e9447',\r\n '#1e9548',\r\n '#1e9548',\r\n '#1e9548',\r\n '#1e9648',\r\n '#1e9648',\r\n '#1e9648',\r\n '#1f9848',\r\n '#1f9848',\r\n '#1f9848',\r\n '#209948',\r\n '#209948',\r\n '#209948',\r\n '#209a48',\r\n '#209a48',\r\n '#209a48',\r\n '#209b48',\r\n '#209b48',\r\n '#209b48',\r\n '#209b48',\r\n '#219c48',\r\n '#219c48',\r\n '#219d48',\r\n '#219d48',\r\n '#219e48',\r\n '#219e48',\r\n '#219e48',\r\n '#219f48',\r\n '#219f48',\r\n '#21a048',\r\n '#21a048',\r\n '#21a048',\r\n '#21a148',\r\n '#21a148',\r\n '#21a348',\r\n '#21a348',\r\n '#22a449',\r\n '#22a449',\r\n '#22a449',\r\n '#22a549',\r\n '#22a549',\r\n '#22a649',\r\n '#22a649',\r\n '#22a64a',\r\n '#23a74a',\r\n '#23a74a',\r\n '#23a84a',\r\n '#23a84a',\r\n '#23aa4a',\r\n '#23aa4a',\r\n '#23aa4a',\r\n '#24ab4a',\r\n '#24ab4a',\r\n '#24ab4a',\r\n '#25ac4a',\r\n '#25ac4a',\r\n '#25ad4a',\r\n '#25ad4a',\r\n '#25ad4a',\r\n '#26ae4a',\r\n '#26ae4a',\r\n '#26ae4a',\r\n '#26af4a',\r\n '#26af4a',\r\n '#26b04a',\r\n '#26b04a',\r\n '#26b04a',\r\n '#27b14a',\r\n '#27b14a',\r\n '#27b14a',\r\n '#27b24a',\r\n '#27b24a',\r\n '#27b24a',\r\n '#27b24a',\r\n '#27b34a',\r\n '#27b34a',\r\n '#27b34a',\r\n '#28b54b',\r\n '#28b54b',\r\n '#28b54b',\r\n '#28b54b',\r\n '#28b64b',\r\n '#28b64b',\r\n '#28b64d',\r\n '#28b64d',\r\n '#28b74d',\r\n '#28b74d',\r\n '#28b74d',\r\n '#29b74d',\r\n '#29b84d',\r\n '#29b84d',\r\n '#29b84d',\r\n '#29b84d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2abb4e',\r\n '#2abb4e',\r\n '#2abb4f',\r\n '#2abb4f',\r\n '#2abc4f',\r\n '#2abc4f',\r\n '#2abc4f',\r\n '#2bbc4f',\r\n '#2bbc4f',\r\n '#2bbd4f',\r\n '#2bbd4f',\r\n '#2bbd50',\r\n '#2bbd50',\r\n '#2bbd50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbf51',\r\n '#2cbf51',\r\n '#2cbf51',\r\n '#2cbf51',\r\n '#2cc051',\r\n '#2cc051',\r\n '#2cc051',\r\n '#2cc052',\r\n '#2cc052',\r\n '#2cc152',\r\n '#2cc152',\r\n '#2cc152',\r\n '#2cc152',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2ec453',\r\n '#2ec453',\r\n '#2ec454',\r\n '#2ec454',\r\n '#2ec454',\r\n '#2ec554',\r\n '#2ec554',\r\n '#2fc554',\r\n '#2fc554',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc755',\r\n '#2fc755',\r\n '#2fc756',\r\n '#2fc756',\r\n '#2fc756',\r\n '#2fc756',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc858',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fca58',\r\n '#2fca58',\r\n '#2fca58',\r\n '#2fca59',\r\n '#2fca59',\r\n '#2fca59',\r\n '#2fca59',\r\n '#2fca59',\r\n '#30ca59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n ],\r\n nullColor: 'pink',\r\n}\r\nconst blueGradientBubbles = {\r\n colors: [\r\n '#0c3574',\r\n '#0b3475',\r\n '#0b3475',\r\n '#0c3475',\r\n '#0c3575',\r\n '#0c3475',\r\n '#0c3475',\r\n '#0c3576',\r\n '#0c3677',\r\n '#0c3677',\r\n '#0d3776',\r\n '#0d3676',\r\n '#0e3677',\r\n '#0e3576',\r\n '#0d3576',\r\n '#0d3677',\r\n '#0d3777',\r\n '#0e3778',\r\n '#0e3778',\r\n '#0d3877',\r\n '#0d3878',\r\n '#0d3878',\r\n '#0d3878',\r\n '#0d3878',\r\n '#0d3978',\r\n '#0e3778',\r\n '#0e3779',\r\n '#0e397a',\r\n '#0f3979',\r\n '#0f3a7a',\r\n '#0f3a7b',\r\n '#0f3a7b',\r\n '#0e3a7a',\r\n '#0e3a7a',\r\n '#0f3a7a',\r\n '#0e3a7a',\r\n '#0f3a7c',\r\n '#0f3a7c',\r\n '#0f3a7b',\r\n '#0f3b7b',\r\n '#0f3a7b',\r\n '#0e3a7b',\r\n '#0e3b7c',\r\n '#0f3c7c',\r\n '#0f3c7c',\r\n '#0f3d7d',\r\n '#0f3d7d',\r\n '#0f3c7d',\r\n '#0f3c7e',\r\n '#0f3d7e',\r\n '#0f3d7e',\r\n '#0f3d7e',\r\n '#0f3e7e',\r\n '#0f3d7e',\r\n '#103e7e',\r\n '#113e7f',\r\n '#103e7e',\r\n '#103d7e',\r\n '#103e7f',\r\n '#103e7e',\r\n '#113e80',\r\n '#113f80',\r\n '#103f7f',\r\n '#114080',\r\n '#113f81',\r\n '#114081',\r\n '#113f81',\r\n '#103e80',\r\n '#103f81',\r\n '#104181',\r\n '#104181',\r\n '#103f81',\r\n '#114082',\r\n '#103f82',\r\n '#103f81',\r\n '#114081',\r\n '#114282',\r\n '#114282',\r\n '#114282',\r\n '#124182',\r\n '#114082',\r\n '#114182',\r\n '#114283',\r\n '#124384',\r\n '#114384',\r\n '#114383',\r\n '#124383',\r\n '#124485',\r\n '#114384',\r\n '#114384',\r\n '#114384',\r\n '#114484',\r\n '#124585',\r\n '#124585',\r\n '#124585',\r\n '#134587',\r\n '#134586',\r\n '#134586',\r\n '#134687',\r\n '#134687',\r\n '#134586',\r\n '#134686',\r\n '#134687',\r\n '#134787',\r\n '#134788',\r\n '#134688',\r\n '#134688',\r\n '#134687',\r\n '#124788',\r\n '#124789',\r\n '#134688',\r\n '#134688',\r\n '#134688',\r\n '#134788',\r\n '#134889',\r\n '#13488a',\r\n '#13488a',\r\n '#13488a',\r\n '#134889',\r\n '#134789',\r\n '#13478a',\r\n '#13498a',\r\n '#14498a',\r\n '#15498b',\r\n '#14488b',\r\n '#14498c',\r\n '#15498c',\r\n '#14498b',\r\n '#15498c',\r\n '#15498c',\r\n '#14498c',\r\n '#154a8d',\r\n '#144b8c',\r\n '#144b8c',\r\n '#154b8d',\r\n '#144c8d',\r\n '#154b8d',\r\n '#154b8d',\r\n '#154c8d',\r\n '#144c8d',\r\n '#154c8d',\r\n '#154c8d',\r\n '#164c8e',\r\n '#164c8e',\r\n '#164c8e',\r\n '#164c8e',\r\n '#154d8e',\r\n '#154d8f',\r\n '#164e90',\r\n '#164e90',\r\n '#164e90',\r\n '#154e8f',\r\n '#154d90',\r\n '#154e90',\r\n '#164e90',\r\n '#154e91',\r\n '#154f91',\r\n '#155091',\r\n '#165091',\r\n '#164f91',\r\n '#164f92',\r\n '#165092',\r\n '#165092',\r\n '#165092',\r\n '#165092',\r\n '#155192',\r\n '#155192',\r\n '#175093',\r\n '#175293',\r\n '#175293',\r\n '#175093',\r\n '#175093',\r\n '#175293',\r\n '#175293',\r\n '#175193',\r\n '#175294',\r\n '#175394',\r\n '#175394',\r\n '#175294',\r\n '#175395',\r\n '#175295',\r\n '#175295',\r\n '#175395',\r\n '#175395',\r\n '#185495',\r\n '#185495',\r\n '#175396',\r\n '#175497',\r\n '#175397',\r\n '#175497',\r\n '#175597',\r\n '#175597',\r\n '#175597',\r\n '#175497',\r\n '#185497',\r\n '#195698',\r\n '#195798',\r\n '#185597',\r\n '#185497',\r\n '#185599',\r\n '#195799',\r\n '#195799',\r\n '#185799',\r\n '#185699',\r\n '#195699',\r\n '#195799',\r\n '#195799',\r\n '#19589a',\r\n '#185899',\r\n '#185899',\r\n '#18589a',\r\n '#18589a',\r\n '#18599a',\r\n '#18589a',\r\n '#18579a',\r\n '#19589b',\r\n '#19599b',\r\n '#19599a',\r\n '#18599a',\r\n '#1a5a9c',\r\n '#1a5a9d',\r\n '#1a5a9c',\r\n '#1a599d',\r\n '#1a5a9d',\r\n '#1a5a9e',\r\n '#1a5a9e',\r\n '#195a9d',\r\n '#195a9d',\r\n '#195a9d',\r\n '#195a9d',\r\n '#1a5a9e',\r\n '#1a5b9f',\r\n '#1a5b9e',\r\n '#1a5b9e',\r\n '#1a5d9e',\r\n '#1a5c9f',\r\n '#195c9f',\r\n '#195c9f',\r\n '#195da0',\r\n '#195d9f',\r\n '#195ca0',\r\n '#1a5ca0',\r\n '#1a5d9f',\r\n '#1a5ea1',\r\n '#1a5ea1',\r\n '#1a5da0',\r\n '#1a5da0',\r\n '#195ea0',\r\n '#195ea0',\r\n '#1a5ea0',\r\n '#1a5ea1',\r\n '#1c5fa3',\r\n '#1c5fa3',\r\n '#1b5fa3',\r\n '#1b5ea2',\r\n '#1b5ea2',\r\n '#1b5ea2',\r\n '#1b5fa3',\r\n '#1b60a3',\r\n '#1b60a3',\r\n '#1b5fa3',\r\n '#1b60a3',\r\n '#1c61a4',\r\n '#1b60a4',\r\n '#1b60a4',\r\n '#1b61a4',\r\n '#1b60a4',\r\n '#1b60a4',\r\n '#1b60a4',\r\n '#1b62a4',\r\n '#1b62a5',\r\n '#1b61a5',\r\n '#1b62a5',\r\n '#1b62a5',\r\n '#1b61a5',\r\n '#1d61a6',\r\n '#1d63a6',\r\n '#1c62a6',\r\n '#1d63a6',\r\n '#1d62a6',\r\n '#1c62a6',\r\n '#1c63a7',\r\n '#1d64a8',\r\n '#1c64a7',\r\n '#1c64a7',\r\n '#1d65a8',\r\n '#1c63a8',\r\n '#1d64a9',\r\n '#1d65a9',\r\n '#1d65a9',\r\n '#1d65a9',\r\n '#1d65a9',\r\n '#1d66a9',\r\n '#1d66a9',\r\n '#1c65a9',\r\n '#1d66aa',\r\n '#1d66aa',\r\n '#1c65aa',\r\n '#1c66aa',\r\n '#1c66aa',\r\n '#1d66aa',\r\n '#1c66ab',\r\n '#1c68ab',\r\n '#1c67ab',\r\n '#1c67ab',\r\n '#1d68ab',\r\n '#1d68ac',\r\n '#1e68ac',\r\n '#1e67ab',\r\n '#1d67ab',\r\n '#1e69ac',\r\n '#1e69ac',\r\n '#1d68ac',\r\n '#1d68ac',\r\n '#1e69ae',\r\n '#1e6aae',\r\n '#1e6aad',\r\n '#1e69ad',\r\n '#1e6aae',\r\n '#1d69ae',\r\n '#1d6aae',\r\n '#1e6bae',\r\n '#1e6aaf',\r\n '#1e6baf',\r\n '#1e6baf',\r\n '#1e6bb0',\r\n '#1e6cb0',\r\n '#1d6baf',\r\n '#1d6baf',\r\n '#1e6bb0',\r\n '#1d6ab0',\r\n '#1d6cb0',\r\n '#1d6db1',\r\n '#1e6cb1',\r\n '#1e6db0',\r\n '#1e6cb1',\r\n '#1d6cb1',\r\n '#1d6cb0',\r\n '#1f6db1',\r\n '#1f6cb1',\r\n '#1f6cb1',\r\n '#1f6db2',\r\n '#1f6cb1',\r\n '#1f6db1',\r\n '#1f6eb3',\r\n '#1f6fb3',\r\n '#1f6eb3',\r\n '#1f6eb3',\r\n '#1f6fb3',\r\n '#1f6fb3',\r\n '#1f6fb4',\r\n '#1f6fb4',\r\n '#1f6fb4',\r\n '#2070b5',\r\n '#1f70b4',\r\n '#1f70b4',\r\n '#1f70b4',\r\n '#1f71b5',\r\n '#1f71b5',\r\n '#1f71b5',\r\n '#1f71b5',\r\n '#1f70b5',\r\n '#1f71b5',\r\n '#1f72b6',\r\n '#1f72b6',\r\n '#1f71b6',\r\n '#1f71b6',\r\n '#1f72b5',\r\n '#2072b6',\r\n '#2172b7',\r\n '#2172b7',\r\n '#2172b6',\r\n '#2172b6',\r\n '#2172b7',\r\n '#2072b7',\r\n '#2073b8',\r\n '#2173b9',\r\n '#2173b9',\r\n '#2075b8',\r\n '#2075b8',\r\n '#2174b8',\r\n '#2174b9',\r\n '#2175ba',\r\n '#2174ba',\r\n '#2174ba',\r\n '#2175ba',\r\n '#2175ba',\r\n '#2176bb',\r\n '#2176bb',\r\n '#2076ba',\r\n '#2076ba',\r\n '#2176bb',\r\n '#2176bb',\r\n '#2076bb',\r\n '#2077bb',\r\n '#2177bc',\r\n '#2077bb',\r\n '#2077bb',\r\n '#2077bc',\r\n '#2077bc',\r\n '#2077bc',\r\n '#2177bd',\r\n '#2078bc',\r\n '#2078bc',\r\n '#2178bd',\r\n '#2279be',\r\n '#2178be',\r\n '#2179be',\r\n '#2179be',\r\n '#2279bf',\r\n '#2278bf',\r\n '#2179bf',\r\n '#217abf',\r\n '#227ac0',\r\n '#2279c0',\r\n '#227ac0',\r\n '#227abf',\r\n '#227ac0',\r\n '#217bc0',\r\n '#227bc0',\r\n '#227bc0',\r\n '#217bc0',\r\n '#217ac0',\r\n '#217bc0',\r\n '#217cc1',\r\n '#227cc1',\r\n '#217cc1',\r\n '#217cc1',\r\n '#227cc1',\r\n '#217cc1',\r\n '#227cc2',\r\n '#227cc2',\r\n '#227dc2',\r\n '#217dc1',\r\n '#217dc2',\r\n '#217dc2',\r\n '#217dc3',\r\n '#217ec3',\r\n '#217ec3',\r\n '#217ec3',\r\n '#227ec4',\r\n '#237fc4',\r\n '#237ec5',\r\n '#237ec5',\r\n '#237ec5',\r\n '#237ec4',\r\n '#237ec4',\r\n '#237ec6',\r\n '#237fc6',\r\n '#2380c6',\r\n '#237fc5',\r\n '#237fc5',\r\n '#2380c5',\r\n '#2380c7',\r\n '#2381c6',\r\n '#2381c6',\r\n '#2380c6',\r\n '#2381c7',\r\n '#2380c6',\r\n '#2380c7',\r\n '#2381c8',\r\n '#2382c7',\r\n '#2381c7',\r\n '#2381c7',\r\n '#2382c8',\r\n '#2382c8',\r\n '#2383c8',\r\n '#2384c9',\r\n '#2384c9',\r\n '#2383c8',\r\n '#2383c9',\r\n '#2383ca',\r\n '#2384ca',\r\n '#2384ca',\r\n '#2383ca',\r\n '#2383ca',\r\n '#2384ca',\r\n '#2384ca',\r\n '#2484cb',\r\n '#2485cb',\r\n '#2385cb',\r\n '#2384cb',\r\n '#2385cb',\r\n '#2485cb',\r\n '#2585cc',\r\n '#2586cc',\r\n '#2485cc',\r\n '#2485cc',\r\n '#2485cc',\r\n '#2486cd',\r\n '#2586cd',\r\n '#2587cd',\r\n '#2487cc',\r\n '#2486cd',\r\n '#2587cd',\r\n '#2587cd',\r\n '#2487ce',\r\n '#2588ce',\r\n '#2588ce',\r\n '#2588ce',\r\n '#2488cf',\r\n '#2588cf',\r\n '#2589ce',\r\n '#2589ce',\r\n '#2688cf',\r\n '#2589ce',\r\n '#2789cf',\r\n '#2889d0',\r\n '#2889d0',\r\n '#288ad0',\r\n '#2889d0',\r\n '#298ad0',\r\n '#2b8bd0',\r\n '#2a89cf',\r\n '#2989cf',\r\n '#2b8bcf',\r\n '#2c8cd0',\r\n '#2c8ccf',\r\n '#2d8cd0',\r\n '#2d8cd0',\r\n '#2c8bd0',\r\n '#2e8cd1',\r\n '#2e8cd1',\r\n '#2e8cd0',\r\n '#2e8cd1',\r\n '#2e8dd0',\r\n '#308ed0',\r\n '#318ed1',\r\n '#318dd1',\r\n '#308dd0',\r\n '#308dd0',\r\n '#318fd0',\r\n '#338fd1',\r\n '#328dd1',\r\n '#338ed1',\r\n '#348fd1',\r\n '#348fd2',\r\n '#338ed2',\r\n '#338ed1',\r\n '#348fd1',\r\n '#3590d1',\r\n '#368fd2',\r\n '#3690d1',\r\n '#3690d1',\r\n '#3690d2',\r\n '#3791d3',\r\n '#3791d3',\r\n '#3791d2',\r\n '#3790d2',\r\n '#3790d2',\r\n '#3892d2',\r\n '#3892d2',\r\n '#3992d2',\r\n '#3a92d3',\r\n '#3a93d3',\r\n '#3b92d3',\r\n '#3b92d3',\r\n '#3a93d3',\r\n '#3a93d3',\r\n '#3b93d3',\r\n '#3c94d3',\r\n '#3d94d3',\r\n '#3d94d3',\r\n '#3d94d3',\r\n '#3d93d3',\r\n '#3f93d4',\r\n '#3f96d4',\r\n '#3f96d4',\r\n '#3e95d3',\r\n '#3e96d3',\r\n '#3f96d4',\r\n '#4095d4',\r\n '#4095d4',\r\n '#3f96d4',\r\n '#3f96d4',\r\n '#4096d4',\r\n '#4297d4',\r\n '#4197d4',\r\n '#4096d3',\r\n '#4196d3',\r\n '#4397d5',\r\n '#4398d5',\r\n '#4397d5',\r\n '#4398d5',\r\n '#4398d5',\r\n '#4499d5',\r\n '#4499d5',\r\n '#4499d5',\r\n '#4499d5',\r\n '#459ad5',\r\n '#459ad4',\r\n '#459ad4',\r\n '#459ad4',\r\n '#459ad5',\r\n '#459ad6',\r\n '#469bd6',\r\n '#469bd5',\r\n '#469ad5',\r\n '#469ad5',\r\n '#479bd5',\r\n '#499cd6',\r\n '#499cd6',\r\n '#499cd5',\r\n '#499cd5',\r\n '#499cd6',\r\n '#4a9dd6',\r\n '#4a9fd6',\r\n '#4a9ed6',\r\n '#4a9ed5',\r\n '#4a9ed6',\r\n '#4b9ed7',\r\n '#4b9ed7',\r\n '#4b9fd7',\r\n '#4a9ed7',\r\n '#4b9ed7',\r\n '#4ca0d7',\r\n '#4c9ed7',\r\n '#4b9ed7',\r\n '#4c9fd7',\r\n '#4da0d7',\r\n '#4da0d8',\r\n '#4da0d8',\r\n '#4c9fd8',\r\n '#4c9fd7',\r\n '#4da0d7',\r\n '#4ea2d8',\r\n '#4ea2d8',\r\n '#4ea1d8',\r\n '#4ea2d7',\r\n '#4ea2d7',\r\n '#4ea2d8',\r\n '#4ea2d7',\r\n '#4ea2d7',\r\n '#4fa3d9',\r\n '#50a3d9',\r\n '#50a3d8',\r\n '#4fa2d8',\r\n '#4fa3d8',\r\n '#51a3d8',\r\n '#51a3d8',\r\n '#51a3d9',\r\n '#51a3d8',\r\n '#51a3d8',\r\n '#52a4d9',\r\n '#52a5da',\r\n '#52a4d9',\r\n '#52a4d9',\r\n '#52a5da',\r\n '#53a5da',\r\n '#53a5da',\r\n '#53a5da',\r\n '#54a5da',\r\n '#54a5da',\r\n '#54a6d9',\r\n '#54a7d9',\r\n '#54a6d9',\r\n '#54a7d9',\r\n '#55a8da',\r\n '#55a8da',\r\n '#56a8db',\r\n '#55a7da',\r\n '#56a8db',\r\n '#57a8db',\r\n '#56a7da',\r\n '#57a8db',\r\n '#57a8db',\r\n '#57a8db',\r\n '#58a9da',\r\n '#58aada',\r\n '#57a9da',\r\n '#57a8da',\r\n '#57a9da',\r\n '#58aadb',\r\n '#59aadb',\r\n '#59aadb',\r\n '#59aadc',\r\n '#59abdb',\r\n '#5aacdb',\r\n '#5aabdb',\r\n '#59abdb',\r\n '#5babdb',\r\n '#5babdc',\r\n '#5babdc',\r\n '#5aabdc',\r\n '#5baddc',\r\n '#5bacdc',\r\n '#5cacdc',\r\n '#5bacdc',\r\n '#5caedc',\r\n '#5caddc',\r\n '#5cacdc',\r\n '#5caddc',\r\n '#5dafdc',\r\n '#5dafdc',\r\n '#5caedc',\r\n '#5daedc',\r\n '#5eb0dd',\r\n '#5db0dd',\r\n '#5eafdd',\r\n '#5eafdd',\r\n '#5fb1dd',\r\n '#5fb1dd',\r\n '#5fafdd',\r\n '#5fafdd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#61b1de',\r\n '#61b1de',\r\n '#61b1de',\r\n '#61b1de',\r\n '#61b2dd',\r\n '#61b2dd',\r\n '#62b2dd',\r\n '#62b2de',\r\n '#62b2de',\r\n '#62b2de',\r\n '#63b3dd',\r\n '#63b4de',\r\n '#63b4df',\r\n '#63b4df',\r\n '#63b3df',\r\n '#63b4de',\r\n '#63b4de',\r\n '#63b4df',\r\n '#63b5df',\r\n '#64b6df',\r\n '#64b6df',\r\n '#64b6df',\r\n '#64b5de',\r\n '#65b6e0',\r\n '#65b7e0',\r\n '#65b7df',\r\n '#65b6e0',\r\n '#65b6e0',\r\n '#65b6df',\r\n '#66b6df',\r\n '#67b7e0',\r\n '#67b8e0',\r\n '#66b8df',\r\n '#66b8e0',\r\n '#67b8df',\r\n '#67b7df',\r\n '#67b8e0',\r\n '#67b9e0',\r\n '#67b8e0',\r\n '#68b9e1',\r\n '#69bae1',\r\n '#69bae1',\r\n '#68b8e0',\r\n '#69b9e0',\r\n '#69bae0',\r\n '#69bae0',\r\n '#6abbe1',\r\n '#69bbe0',\r\n '#69bbe0',\r\n '#69bbe1',\r\n '#6abce1',\r\n '#6abbe0',\r\n '#6abbe0',\r\n '#6abbe1',\r\n '#6abce1',\r\n '#6abce2',\r\n '#6bbde2',\r\n '#6bbee1',\r\n '#6cbde2',\r\n '#6cbde2',\r\n '#6bbde1',\r\n '#6cbde1',\r\n '#6cbde2',\r\n '#6cbde2',\r\n '#6cbde2',\r\n '#6cbee2',\r\n '#6cbee2',\r\n '#6dbfe2',\r\n '#6dbfe2',\r\n '#6dbee2',\r\n '#6ebee3',\r\n '#6fbfe3',\r\n '#6fc0e3',\r\n '#6fc0e2',\r\n '#6ebfe3',\r\n '#6ec0e3',\r\n '#6ec1e3',\r\n '#6ec1e3',\r\n '#6ec1e4',\r\n '#6fc0e3',\r\n '#70c1e3',\r\n '#70c2e3',\r\n '#70c2e4',\r\n '#6fc1e3',\r\n '#6fc1e3',\r\n '#70c2e3',\r\n '#71c2e4',\r\n '#70c3e4',\r\n '#70c2e4',\r\n '#70c2e4',\r\n '#72c4e4',\r\n '#72c4e4',\r\n '#71c2e4',\r\n '#71c2e4',\r\n '#73c4e4',\r\n '#72c3e4',\r\n '#72c3e4',\r\n '#72c3e4',\r\n '#72c4e4',\r\n '#73c5e4',\r\n '#73c5e4',\r\n '#72c5e4',\r\n '#73c6e4',\r\n '#73c5e4',\r\n '#73c6e4',\r\n '#74c7e5',\r\n '#73c6e4',\r\n '#75c8e5',\r\n '#74c7e5',\r\n '#74c7e5',\r\n '#74c6e5',\r\n '#75c6e5',\r\n '#76c7e5',\r\n '#75c7e5',\r\n '#76c8e5',\r\n '#75c8e5',\r\n '#75c8e6',\r\n '#76c8e6',\r\n '#77c8e5',\r\n '#76c9e6',\r\n '#76c9e5',\r\n '#76c9e5',\r\n '#77cae6',\r\n '#77c9e6',\r\n '#77c9e6',\r\n '#77c9e6',\r\n '#78cae6',\r\n '#77cbe7',\r\n '#77cbe7',\r\n '#78cbe7',\r\n '#78cbe7',\r\n '#79cae6',\r\n '#78cae6',\r\n '#78cbe7',\r\n '#78cae6',\r\n '#79cae6',\r\n '#7acce6',\r\n '#7acde7',\r\n '#7acbe7',\r\n '#79cce6',\r\n '#79cee7',\r\n '#7acee8',\r\n '#7acde8',\r\n '#79cde7',\r\n '#7acde7',\r\n '#7bcee8',\r\n '#7acee7',\r\n '#7acfe7',\r\n '#7acee7',\r\n '#7ccee8',\r\n '#7bcee7',\r\n '#7bcfe7',\r\n '#7bcfe7',\r\n '#7bcfe8',\r\n '#7dd0e9',\r\n '#7dd0e9',\r\n '#7ccfe8',\r\n '#7ccfe8',\r\n '#7cd1e8',\r\n '#7cd1e8',\r\n '#7cd0e8',\r\n '#7cd0e8',\r\n '#7dd1e8',\r\n '#7dd2e9',\r\n '#7dd2e9',\r\n '#7ed2e9',\r\n '#7dd1e8',\r\n '#7dd2e8',\r\n '#7fd3ea',\r\n '#7fd3ea',\r\n '#7ed3e9',\r\n '#7ed2ea',\r\n '#80d2ea',\r\n '#7fd3e9',\r\n '#7fd2e9',\r\n '#80d4ea',\r\n '#80d5ea',\r\n '#7fd4e9',\r\n '#7fd4e9',\r\n '#80d4e9',\r\n '#81d6ea',\r\n '#81d6eb',\r\n '#80d4ea',\r\n '#80d5ea',\r\n '#80d6ea',\r\n '#80d5ea',\r\n '#81d6ea',\r\n '#81d6ea',\r\n '#82d6ea',\r\n '#82d7ea',\r\n '#82d8ea',\r\n '#81d6ea',\r\n '#81d6ea',\r\n '#82d8ea',\r\n '#82d7eb',\r\n '#82d8eb',\r\n '#82d8eb',\r\n '#82d7eb',\r\n '#83d9eb',\r\n '#84d9ec',\r\n '#84d9ec',\r\n '#83d8eb',\r\n '#83d8eb',\r\n '#85d8eb',\r\n '#85d9eb',\r\n '#84daeb',\r\n '#85daeb',\r\n '#85dbec',\r\n '#85dbec',\r\n '#84daec',\r\n '#85dbec',\r\n '#86dbec',\r\n '#86dbec',\r\n '#85dbec',\r\n '#85dbec',\r\n '#85dbec',\r\n '#85dcec',\r\n '#86ddec',\r\n '#86dceb',\r\n '#86dceb',\r\n '#87ddec',\r\n '#86dced',\r\n '#86dcec',\r\n '#86deec',\r\n '#86deed',\r\n '#87ddec',\r\n '#87deed',\r\n '#87dfec',\r\n '#87deec',\r\n '#88deed',\r\n '#89deec',\r\n '#88deec',\r\n '#88dfed',\r\n '#88dfec',\r\n '#89e0ed',\r\n '#89e0ee',\r\n '#88dfee',\r\n '#89e0ee',\r\n '#88dfed',\r\n '#88dfed',\r\n '#8ae1ee',\r\n '#89e1ed',\r\n '#8ae2ee',\r\n '#8ae2ee',\r\n '#8ae2ee',\r\n '#8ae1ee',\r\n '#8be3ee',\r\n '#8be3ee',\r\n '#8be2ee',\r\n '#8be2ee',\r\n '#8be2ef',\r\n '#8ce2ef',\r\n '#8ce3ef',\r\n '#8be3ee',\r\n '#8ce4ef',\r\n '#8be3ef',\r\n '#8be3ee',\r\n '#8de5ef',\r\n '#8de4ef',\r\n '#8de4ef',\r\n '#8de5ef',\r\n '#8ce4ef',\r\n '#8de4ef',\r\n '#8de4ef',\r\n '#8de4f0',\r\n '#8ee6f0',\r\n '#8ee6f0',\r\n '#8ee6ef',\r\n '#8ee6ef',\r\n '#8de7ef',\r\n '#8de6ef',\r\n '#8fe7f0',\r\n '#8fe8f1',\r\n '#8ee6ef',\r\n '#8ee6ef',\r\n '#8ee8f1',\r\n '#8fe8f1',\r\n '#8fe7f0',\r\n '#90e8f1',\r\n '#90e8f1',\r\n '#8fe8f0',\r\n '#90eaf1',\r\n '#8fe9f0',\r\n '#8fe9f0',\r\n '#90eaf1',\r\n '#90eaf1',\r\n '#91eaf1',\r\n '#91eaf1',\r\n '#91eaf1',\r\n '#92ebf2',\r\n '#91eaf1',\r\n ],\r\n nullColor: 'pink',\r\n}\r\n\r\nexport const gradients: Record = {\r\n [ScaleId.IntradayReduced]: redGreenGradient,\r\n [ScaleId.DayPerf]: redGreenGradient,\r\n _5: redGreenGradient,\r\n _10: redGreenGradient,\r\n _15: redGreenGradient,\r\n _20: redGreenGradient,\r\n _25: redGreenGradient,\r\n _relvol: blueGradient,\r\n _pe: greenRedGradient,\r\n _fpe: greenRedGradient,\r\n _peg: greenRedGradient,\r\n _ps: greenRedGradient,\r\n _pb: greenRedGradient,\r\n _div: greenGradient,\r\n _eps5y: redGreenGradient,\r\n _short: redGradient,\r\n _rec: redGreenGradient,\r\n _earndate: earningsGradient,\r\n _portfolioPct: redGreenGradient,\r\n _portfolioUsd: redGreenGradient,\r\n}\r\n\r\nexport const bubbleGradients: Record = {\r\n [ScaleId.IntradayReduced]: redGreenGradientBubbles,\r\n [ScaleId.DayPerf]: redGreenGradientBubbles,\r\n _5: redGreenGradientBubbles,\r\n _10: redGreenGradientBubbles,\r\n _15: redGreenGradientBubbles,\r\n _20: redGreenGradientBubbles,\r\n _25: redGreenGradientBubbles,\r\n _relvol: blueGradientBubbles,\r\n _pe: redGreenGradientBubbles,\r\n _fpe: redGreenGradientBubbles,\r\n _peg: redGreenGradientBubbles,\r\n _ps: redGreenGradientBubbles,\r\n _pb: redGreenGradientBubbles,\r\n _div: redGreenGradientBubbles,\r\n _eps5y: redGreenGradientBubbles,\r\n _short: redGreenGradientBubbles, // TODO red skala\r\n _rec: redGreenGradientBubbles,\r\n _earndate: redGreenGradientBubbles,\r\n _portfolioPct: redGreenGradientBubbles,\r\n _portfolioUsd: redGreenGradientBubbles,\r\n}\r\n\r\nexport const gradientSmall = redGreenGradientSmall\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonComponentProps, ButtonProps } from './button'\r\nimport { Paragraph } from './typography'\r\n\r\ninterface Props {\r\n children: (React.ReactElement | null)[]\r\n label: string\r\n size?: ButtonProps['size']\r\n rounding?: ButtonProps['rounding']\r\n}\r\n\r\nexport function ChipSwitch({ children, label, size, rounding }: Props) {\r\n return (\r\n
\r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n\r\n {React.Children.map(children, (child: React.ReactElement | null) => {\r\n if (React.isValidElement(child) && child.type === Button) {\r\n return React.cloneElement(child, {\r\n size,\r\n rounding,\r\n theme: child.props.theme ?? 'chipTransparent',\r\n className: classnames(child.props.className, {\r\n // @todo - these style should be applied globally onto all chipTransparent buttons\r\n '!text-gray-600 dark:!text-gray-400': !child.props.active,\r\n '!text-gray-800 dark:!text-white': child.props.active,\r\n }),\r\n })\r\n }\r\n\r\n return child\r\n })}\r\n
\r\n )\r\n}\r\n\r\nexport const ChipSwitchButton = Button\r\n","import * as React from 'react'\r\n\r\nexport interface DelayedProps {\r\n /**\r\n * The delay in milliseconds before the component is rendered.\r\n *\r\n * @default 300\r\n */\r\n delay?: number\r\n\r\n /**\r\n * Delay in milliseconds before rendering timeout state.\r\n */\r\n timeout?: number\r\n\r\n /**\r\n * Throw on timeout (suspense)\r\n */\r\n throwOnTimeout?: boolean\r\n\r\n /**\r\n * Component visible during the delay.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n delayComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when timeout is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n timeoutComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when delay is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n children?: React.ReactNode\r\n}\r\n\r\nexport function Delayed({\r\n delay = 300,\r\n timeout = 0,\r\n throwOnTimeout = false,\r\n delayComponent,\r\n timeoutComponent,\r\n children,\r\n}: DelayedProps) {\r\n const [visible, setVisible] = React.useState(false)\r\n const [hasTimedOut, setHasTimedOut] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const visibilityTimeout = window.setTimeout(() => setVisible(true), delay)\r\n\r\n let failedTimeout: number\r\n if (timeout > 0) {\r\n failedTimeout = window.setTimeout(() => {\r\n setHasTimedOut(true)\r\n if (throwOnTimeout) throw new Error()\r\n }, timeout)\r\n }\r\n\r\n return () => {\r\n clearTimeout(visibilityTimeout)\r\n clearTimeout(failedTimeout)\r\n }\r\n }, [delay, timeout, throwOnTimeout])\r\n\r\n if (!visible) return <>{delayComponent}\r\n\r\n if (hasTimedOut) {\r\n return <>{timeoutComponent}\r\n }\r\n\r\n return <>{children}\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { getCookie } from '../../../app/shared/cookie'\r\nimport { setCookieRequest } from '../../services/api'\r\n\r\n/*\r\n * Context.\r\n */\r\nexport type FinancialsTableSettingsType = Record\r\n\r\nexport type FinancialsTableScrollInfo = {\r\n yPosition: number\r\n}\r\n\r\nexport interface FinancialsTableContextProps {\r\n settings: T\r\n setSettings: (settings: T) => void\r\n scrollInfo?: FinancialsTableScrollInfo\r\n}\r\n\r\nexport const FinancialsTableContext = React.createContext>({\r\n settings: {},\r\n setSettings: () => null,\r\n scrollInfo: undefined,\r\n})\r\n\r\n/*\r\n * Hook.\r\n */\r\n\r\nexport function useFinancialsTableContext() {\r\n return React.useContext(FinancialsTableContext) as FinancialsTableContextProps\r\n}\r\n\r\n/*\r\n * Component.\r\n */\r\n\r\ninterface Props {\r\n children: React.ReactNode\r\n defaultSettings: FinancialsTableSettingsType\r\n cookieKey: string\r\n}\r\n\r\nexport const FinancialsTableContextProvider = ({ children, cookieKey, defaultSettings }: Props) => {\r\n const [scrollInfo, setScrollInfo] = React.useState()\r\n const [settings, setSettings] = React.useState(() => {\r\n const cookieValue = decodeURIComponent(getCookie(cookieKey))\r\n if (cookieValue.length === 0) return defaultSettings\r\n\r\n try {\r\n return { ...defaultSettings, ...JSON.parse(cookieValue) } as FinancialsTableSettingsType\r\n } catch {\r\n return defaultSettings\r\n }\r\n })\r\n\r\n const handleSetSettingsChange = (settings: FinancialsTableSettingsType) => {\r\n setScrollInfo({ yPosition: window.scrollY })\r\n setSettings(settings)\r\n setCookieRequest(cookieKey, JSON.stringify(settings))\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\n\r\nimport { TableAlign, TableBody, TableCell, TableRow } from '../Table'\r\nimport { Checkbox } from '../checkbox'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsTableRowProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n data: RowDataType\r\n columns: ColumnDefinition[]\r\n subColumns?: Record[]>\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n isFirst: boolean\r\n isLast: boolean\r\n}\r\n\r\nexport default function FinancialsTableRow<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n data,\r\n columns,\r\n subColumns,\r\n onVisibilityChange,\r\n isFirst,\r\n isLast,\r\n}: FinancialsTableRowProps) {\r\n const { id, label, labelElement, labelColumnClassName, isSelected, color, subData } = data\r\n\r\n return (\r\n {\r\n onVisibilityChange(id, !isSelected)\r\n }}\r\n >\r\n \r\n \r\n {label}}\r\n className=\"cursor-pointer\"\r\n color={color}\r\n size=\"none\"\r\n />\r\n \r\n\r\n {columns.map((column) => (\r\n \r\n {column.renderColumn(data)}\r\n \r\n ))}\r\n \r\n {subData.map((item, index, array) => (\r\n \r\n \r\n {item.label}\r\n \r\n {subColumns?.[item.id].map((column) => (\r\n \r\n {column.renderColumn(item as SubColumnDefinition)}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Table } from '../Table'\r\nimport FinancialsTableRow from './FinancialsTableRow'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsTableProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n tableHead?: React.ReactNode\r\n tableFooter?: React.ReactNode\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n subColumns?: Record[]>\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n}\r\n\r\nexport default function FinancialsTable<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n tableHead,\r\n tableFooter,\r\n columns,\r\n subColumns,\r\n data,\r\n onVisibilityChange,\r\n}: FinancialsTableProps) {\r\n return (\r\n \r\n {tableHead}\r\n {data.map((row, index) => (\r\n \r\n ))}\r\n {tableFooter}\r\n
\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\ninterface Props {\r\n children: React.ReactElement\r\n className?: string\r\n}\r\n\r\nenum ShadowPosition {\r\n none,\r\n left,\r\n right,\r\n leftAndRight,\r\n}\r\n\r\ninterface TableScrollShadowProps {\r\n position: ShadowPosition.left | ShadowPosition.right\r\n offset: number\r\n className?: string\r\n isVisible: boolean\r\n}\r\n\r\nfunction TableScrollShadow({ className, position, offset, isVisible }: TableScrollShadowProps) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport function FinancialsTableStickyColumnWrapper({ children, className }: Props) {\r\n const stickyRef = React.useRef(null)\r\n const [shadowPosition, setShadowPosition] = React.useState(ShadowPosition.none)\r\n const [firstRowTdWidth, setFirstRowTdWidth] = React.useState(0)\r\n\r\n React.useEffect(() => {\r\n const stickyElement = stickyRef.current\r\n if (!stickyElement) return\r\n\r\n const onScroll = throttle(function () {\r\n const stickyElement = stickyRef.current\r\n if (!stickyElement) return\r\n\r\n let newShadowPosition = ShadowPosition.none\r\n const hasScrollSpaceToLeft = stickyElement.scrollLeft > 0\r\n const hasScrollSpaceToRight = stickyElement.offsetWidth + stickyElement.scrollLeft < stickyElement.scrollWidth\r\n if (hasScrollSpaceToLeft && hasScrollSpaceToRight) {\r\n newShadowPosition = ShadowPosition.leftAndRight\r\n } else if (hasScrollSpaceToLeft) {\r\n newShadowPosition = ShadowPosition.left\r\n } else if (hasScrollSpaceToRight) {\r\n newShadowPosition = ShadowPosition.right\r\n }\r\n\r\n setShadowPosition(newShadowPosition)\r\n }, 100)\r\n\r\n onScroll()\r\n\r\n stickyElement.scrollTo({\r\n left: stickyElement.scrollWidth,\r\n })\r\n\r\n const firstRowTd = stickyRef.current?.querySelector('tr > td')\r\n setFirstRowTdWidth(firstRowTd?.clientWidth ?? 0)\r\n\r\n stickyElement.addEventListener('scroll', onScroll)\r\n window.addEventListener('resize', onScroll)\r\n\r\n return () => {\r\n stickyElement.removeEventListener('scroll', onScroll)\r\n window.removeEventListener('resize', onScroll)\r\n }\r\n }, [])\r\n\r\n return (\r\n
\r\n \r\n
\r\n {children}\r\n
\r\n \r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport FinancialsTable from './FinancialsTable'\r\nimport { FinancialsTableStickyColumnWrapper } from './FinancialsTableStickyColumnWrapper'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsWidgetProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n children: React.ReactNode\r\n header?: React.ReactNode\r\n tableHead?: React.ReactNode\r\n tableFooter?: React.ReactNode\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n hasStickyColumnWrapper?: boolean\r\n stickyColumnWrapperClassName?: string\r\n subColumns?: Record[]>\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n}\r\n\r\nexport function FinancialsWidget<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n children,\r\n tableHead,\r\n tableFooter,\r\n columns,\r\n stickyColumnWrapperClassName,\r\n subColumns,\r\n header,\r\n data,\r\n hasStickyColumnWrapper,\r\n onVisibilityChange,\r\n}: FinancialsWidgetProps) {\r\n const financialsTable = (\r\n \r\n )\r\n return (\r\n
\r\n
\r\n {header}\r\n {children}\r\n
\r\n {hasStickyColumnWrapper ? (\r\n \r\n {financialsTable}\r\n \r\n ) : (\r\n financialsTable\r\n )}\r\n
\r\n )\r\n}\r\n","import { FinancialsRowValue } from './types'\r\n\r\nexport function getYoYData(data: T[]) {\r\n const sortedData = [...data].sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year))\r\n return sortedData.reduce<{\r\n change: Record\r\n changePct: Record\r\n }>(\r\n (acc, { year, value }, i) => {\r\n const prev = sortedData[i - 1]?.value ?? null\r\n let change: number | null = null\r\n let changePct: number | null = null\r\n\r\n if (value !== null && prev !== null && value !== 0 && prev !== 0) {\r\n change = value - prev\r\n changePct = ((value - prev) / Math.abs(prev)) * 100\r\n }\r\n\r\n return {\r\n change: {\r\n ...acc.change,\r\n [year]: change,\r\n },\r\n changePct: {\r\n ...acc.changePct,\r\n [year]: changePct,\r\n },\r\n }\r\n },\r\n { change: {}, changePct: {} }\r\n )\r\n}\r\n\r\nexport function getMoMPercentageData(data: T[]) {\r\n const sortedData = [...data].sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year))\r\n return sortedData.reduce>((acc, { year, value }, i) => {\r\n const prev = sortedData[i - 1]?.value ?? null\r\n let changePct: number | null = null\r\n\r\n if (value !== null && prev !== null && value !== 0 && prev !== 0) {\r\n changePct = ((value - prev) / Math.abs(prev)) * 100\r\n }\r\n\r\n return {\r\n ...acc,\r\n [year]: changePct,\r\n }\r\n }, {})\r\n}\r\n\r\nexport function getIsCompact(numOfCols: number, barWidth: number) {\r\n // ~1400 is max container width\r\n const maxContainerWidth = Math.min(window.innerWidth, 1400)\r\n\r\n const barsWindowWidthRatio = (barWidth * numOfCols) / maxContainerWidth\r\n return barsWindowWidthRatio > 0.65\r\n}\r\n\r\nexport function getHeatmapClassNames(value: number | null = null) {\r\n if (value === null || value === 0) return 'bg-neutral text-neutral'\r\n\r\n // Negative\r\n if (value < -80) return 'bg-danger-5 text-danger-5'\r\n if (value < -60) return 'bg-danger-4 text-danger-4'\r\n if (value < -40) return 'bg-danger-3 text-danger-3'\r\n if (value < -20) return 'bg-danger-2 text-danger-2'\r\n if (value < 0) return 'bg-danger-1 text-danger-1'\r\n\r\n // Positive\r\n if (value > 80) return 'bg-success-5 text-success-5'\r\n if (value > 60) return 'bg-success-4 text-success-4'\r\n if (value > 40) return 'bg-success-3 text-success-3'\r\n if (value > 20) return 'bg-success-2 text-success-2'\r\n if (value > 0) return 'bg-success-1 text-success-1'\r\n}\r\n","import * as React from 'react'\r\n\r\nexport type NotificationContextType = ReturnType\r\n\r\nexport enum NotificationPosition {\r\n TopLeft,\r\n TopRight,\r\n BottomLeft,\r\n BottomRight,\r\n}\r\n\r\nexport interface NotificationOptions {\r\n position?: NotificationPosition\r\n inline?: boolean\r\n}\r\n\r\nexport const NotificationContext = React.createContext<{\r\n show: (element: JSX.Element, options?: NotificationOptions) => void\r\n hide: () => void\r\n}>({\r\n show: () => {},\r\n hide: () => {},\r\n})\r\n\r\nexport function useNotification() {\r\n return React.useContext(NotificationContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { getVisualViewport, useVisualViewport } from '../../hooks/useVisualViewport'\r\nimport { NotificationContext, NotificationOptions, NotificationPosition } from './hooks'\r\n\r\ninterface NotificationState {\r\n element: JSX.Element\r\n options: Partial\r\n}\r\n\r\nexport function NotificationWrapper(props: React.PropsWithChildren) {\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const [notification, setNotification] = React.useState(null)\r\n const { viewport, setViewport } = useVisualViewport({ enabled: !!notification })\r\n\r\n const context = React.useRef({\r\n show: (element: JSX.Element, options: Partial = {}) => {\r\n setViewport(() => getVisualViewport(window.visualViewport))\r\n setNotification({ element, options })\r\n setIsOpen(true)\r\n },\r\n hide: () => setIsOpen(false),\r\n })\r\n\r\n const positionClass = React.useMemo(() => {\r\n const { position = NotificationPosition.BottomLeft } = notification?.options ?? {}\r\n return {\r\n '[--inset-t:1rem] items-start pt-inset-top': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.TopRight,\r\n ].includes(position),\r\n '[--inset-r:1rem] justify-end landscape-secondary:pr-inset-right': [\r\n NotificationPosition.TopRight,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-b:1rem] items-end pb-inset-bottom': [\r\n NotificationPosition.BottomLeft,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-l:1rem] justify-start landscape-primary:pl-inset-left': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.BottomLeft,\r\n ].includes(position),\r\n }\r\n }, [notification?.options])\r\n\r\n const WrapperComponent = React.useMemo(\r\n () => (notification?.options.inline ? React.Fragment : Ariakit.Portal),\r\n [notification?.options.inline]\r\n )\r\n\r\n return (\r\n \r\n {props.children}\r\n {isOpen && (\r\n \r\n \r\n {notification?.element}\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { NotificationContextType, useNotification } from './hooks'\r\n\r\nexport function withNotificationContext(\r\n WrappedComponent: React.ComponentType\r\n) {\r\n const displayName = WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\r\n const WithNotificationContext = (props: Omit) => {\r\n const notification = useNotification()\r\n return \r\n }\r\n\r\n WithNotificationContext.displayName = `withNotificationContext(${displayName})`\r\n\r\n return WithNotificationContext\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { useNotification } from './hooks'\r\n\r\ninterface NotificationProps {\r\n className?: string\r\n /**\r\n * Default button text\r\n * @default Close\r\n */\r\n closeText?: string\r\n\r\n /**\r\n * Custom buttons. Overrides `closeText`\r\n */\r\n actions?: JSX.Element\r\n\r\n /**\r\n * When set, the notification will automatically close\r\n */\r\n timeoutInMs?: number\r\n}\r\n\r\nexport function Notification({\r\n className,\r\n closeText = 'Close',\r\n actions,\r\n timeoutInMs,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const notification = useNotification()\r\n\r\n React.useEffect(() => {\r\n let timeoutId: number\r\n if (timeoutInMs) {\r\n timeoutId = window.setTimeout(() => {\r\n notification.hide()\r\n }, timeoutInMs)\r\n }\r\n\r\n return () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId)\r\n }\r\n }\r\n }, [notification, timeoutInMs])\r\n\r\n return (\r\n \r\n
{children}
\r\n
\r\n {actions ?? (\r\n \r\n )}\r\n
\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport { decodeQueryString } from '../../app/queryString'\r\n\r\nexport function useCheckNonIdeaChartMissingConfig() {\r\n const location = useLocation()\r\n\r\n React.useEffect(() => {\r\n // Navigation (back/forward) from nonexisting idea page doesn't fully reload the page\r\n // So if we're on non idea page and have still isIdeaNotFoundPage flag we want to reload the page\r\n const { i } = decodeQueryString(location.search)\r\n if (!i && window.isIdeaNotFoundPage) {\r\n window.location.reload()\r\n }\r\n }, [location.search])\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\ninterface Props {\r\n throttleWaitInMs?: number\r\n isWatching?: boolean\r\n}\r\n\r\nexport function useWindowSize({ throttleWaitInMs = 300, isWatching = true }: Props = {}) {\r\n const [size, setSize] = React.useState({\r\n clientWidth: document.documentElement.clientWidth,\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (!isWatching) return\r\n\r\n const handleResize = throttle(() => {\r\n setSize({\r\n clientWidth: document.documentElement.clientWidth,\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n }, throttleWaitInMs)\r\n\r\n window.addEventListener('resize', handleResize)\r\n\r\n return () => {\r\n handleResize.cancel()\r\n window.removeEventListener('resize', handleResize)\r\n }\r\n }, [throttleWaitInMs, isWatching])\r\n\r\n return size\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nexport function getVisualViewport(visualViewport: VisualViewport | null) {\r\n const width = visualViewport?.width ?? window.innerWidth\r\n const height = visualViewport?.height ?? window.innerHeight\r\n const scale = visualViewport?.scale ?? 1\r\n\r\n return {\r\n top: visualViewport?.offsetTop ?? 0,\r\n left: visualViewport?.offsetLeft ?? 0,\r\n scale: Math.round((1 / scale) * 100) / 100,\r\n width: Math.round(width * scale),\r\n height: Math.round(height * scale),\r\n unscaledWidth: width,\r\n unscaledHeight: height,\r\n }\r\n}\r\n\r\nexport function useVisualViewport({ enabled = true, onScroll = true }: { enabled?: boolean; onScroll?: boolean } = {}) {\r\n const [viewport, setViewport] = React.useState(getVisualViewport(window.visualViewport))\r\n\r\n React.useEffect(() => {\r\n if (!enabled) return\r\n\r\n const handleChange = throttle((ev: Event) => {\r\n const viewport = ev.currentTarget as VisualViewport\r\n if (viewport) {\r\n setViewport(() => getVisualViewport(viewport))\r\n }\r\n }, 50)\r\n\r\n window.visualViewport?.addEventListener('resize', handleChange)\r\n if (onScroll) window.visualViewport?.addEventListener('scroll', handleChange)\r\n handleChange({ currentTarget: window.visualViewport } as Event)\r\n\r\n return () => {\r\n window.visualViewport?.removeEventListener('resize', handleChange)\r\n window.visualViewport?.removeEventListener('scroll', handleChange)\r\n }\r\n }, [enabled, onScroll])\r\n\r\n return React.useMemo(() => ({ viewport, setViewport }), [viewport])\r\n}\r\n","import Quote from 'finviz-charts/app/models/quote'\r\n\r\nimport { convertTa } from '../../../app/charts-lib'\r\nimport { ObjectHash } from '../../components/types'\r\nimport { getInstrumentForTicker } from '../../util'\r\n\r\nconst PADDING = 2 // Border widths\r\n\r\nexport function getChartsDimensions(chartElementId: string) {\r\n const containerElement = document.getElementById(chartElementId)\r\n\r\n const box = containerElement?.getBoundingClientRect()\r\n\r\n return {\r\n width: Math.max((box?.width ?? 0) - PADDING, 0),\r\n height: Math.max((box?.height ?? 0) - PADDING, 0),\r\n }\r\n}\r\n\r\nexport function getChartConfig(idea: any, chartElementId: string) {\r\n const chartsDimensions = getChartsDimensions(chartElementId)\r\n\r\n if (idea) {\r\n const chartConfig = Object.assign({}, FinvizChartsSettings.ideaChart, {\r\n colors: FinvizChartsSettings.colors,\r\n width: chartsDimensions.width,\r\n height: chartsDimensions.height,\r\n scrollable: true,\r\n editors: ['layout', 'settings', 'publish', 'tools'],\r\n })\r\n for (let i = 0; i < chartConfig.charts.length; i++) {\r\n if (!chartConfig.charts[i].instrument) {\r\n chartConfig.charts[i].instrument = 'stock'\r\n }\r\n }\r\n\r\n return chartConfig\r\n }\r\n\r\n return {\r\n newCharts: true,\r\n width: chartsDimensions.width,\r\n height: chartsDimensions.height,\r\n barWidth: 3,\r\n barMargin: 1,\r\n scrollable: true,\r\n alignChartsToRight: true,\r\n theme: FinvizChartsSettings.theme,\r\n colors: FinvizChartsSettings.colors,\r\n editors: ['layout', 'settings', 'publish', 'tools'],\r\n layout: FinvizChartsSettings.layout,\r\n charts: FinvizChartsSettings.tickers.map(function (ticker: string, index: number) {\r\n return {\r\n timeframe: FinvizChartsSettings.periods[index],\r\n dateRange: FinvizChartsSettings.ranges[index],\r\n scale: FinvizChartsSettings.taConfig.scale || 'linear',\r\n ticker: ticker,\r\n instrument: getInstrumentForTicker(ticker),\r\n premarket: FinvizChartsSettings.taConfig.premarket,\r\n aftermarket: FinvizChartsSettings.taConfig.aftermarket,\r\n hasChartEvents: FinvizChartsSettings.taConfig.hasChartEvents,\r\n refreshData: true,\r\n panes: convertTa.getPanes(FinvizChartsSettings.taConfig),\r\n }\r\n }),\r\n }\r\n}\r\n\r\nexport const initIdeaQuotes = (quotes: Array, ideaChart: ObjectHash) => {\r\n const hasPatterns = JSON.stringify(ideaChart).includes('patterns')\r\n\r\n for (let i = 0; i < quotes.length; i++) {\r\n const quote = quotes[i]\r\n\r\n if (quote.timeframe === 'i1' || quote.timeframe === 'i3' || quote.timeframe === 'i5' || quote.timeframe === 'i15') {\r\n if (!quote.hasOwnProperty('drawMinutesPerDay')) {\r\n quote.drawMinutesPerDay = quote.timeframe === 'i15' ? 390 : 420\r\n }\r\n\r\n if (!quote.hasOwnProperty('marketStartMinutes')) {\r\n quote.marketStartMinutes = quote.timeframe === 'i15' ? 570 : 540\r\n }\r\n\r\n if (!quote.hasOwnProperty('premarketLengthMinutes')) {\r\n quote.premarketLengthMinutes = quote.timeframe === 'i15' ? 0 : 30\r\n }\r\n\r\n if (!quote.hasOwnProperty('aftermarketLengthMinutes')) {\r\n quote.aftermarketLengthMinutes = 0\r\n }\r\n }\r\n\r\n if (!quote.hasOwnProperty('hasPatterns')) {\r\n quote.hasPatterns = hasPatterns\r\n }\r\n\r\n quote.ideaID = ideaChart.idea.id\r\n\r\n Quote.create(quote)\r\n }\r\n}\r\n","/**\n * React Router DOM v6.26.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\nexport { UNSAFE_ErrorResponseImpl } from '@remix-run/router';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && (\n // Ignore everything but left clicks\n !target || target === \"_self\") &&\n // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nfunction createSearchParams(init) {\n if (init === void 0) {\n init = \"\";\n }\n return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0);\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `
`/`` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\"Cannot submit a