{"version":3,"file":"2203.2a83a975.js","mappings":"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C,kBCtDO,SAASb,IACd,MAAO,MACT,C,8FCKA,MAoBac,EAAmB,CAC9BtkB,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,WAEFigB,UAAW,WAEPsE,EAAmB,CAAEvkB,OAAQskB,EAAiBtkB,OAAOwkB,QAAQC,UAAWxE,UAAWqE,EAAiBrE,WACpGyE,EAAc,CAAE1kB,OAAQskB,EAAiBtkB,OAAOwkB,MAAM,EAAG,IAAIC,UAAWxE,UAAWqE,EAAiBrE,WACpG0E,EAAgB,CAAE3kB,OAAQskB,EAAiBtkB,OAAOwkB,MAAM,IAAKvE,UAAWqE,EAAiBrE,WA49DzF2E,EAA0B,CAC9B5kB,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,WAEFigB,UAAW,QAg/BA4E,EAAiD,CAC5D,CAAC1E,EAAAA,GAAQ2E,iBAAkBR,EAC3B,CAACnE,EAAAA,GAAQC,SAAUkE,EACnBS,GAAIT,EACJU,IAAKV,EACLW,IAAKX,EACLY,IAAKZ,EACLa,IAAKb,EACLc,QA97HmB,CACnBplB,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,WAEFigB,UAAW,WAo9FXoF,IAAKd,EACLe,KAAMf,EACNgB,KAAMhB,EACNiB,IAAKjB,EACLkB,IAAKlB,EACLmB,KAAMf,EACNgB,OAAQrB,EACRsB,OAAQlB,EACRmB,KAAMvB,EACNwB,UA39FuB,CACvB9lB,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,WAEFigB,UAAW,WAi/DX8F,cAAezB,EACf0B,cAAe1B,EACf2B,gBAAiB3B,GAGNtE,EAAuD,CAClE,CAACG,EAAAA,GAAQ2E,iBAAkBF,EAC3B,CAACzE,EAAAA,GAAQC,SAAUwE,EACnBG,GAAIH,EACJI,IAAKJ,EACLK,IAAKL,EACLM,IAAKN,EACLO,IAAKP,EACLQ,QA9gC0B,CAC1BplB,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,WAEFigB,UAAW,QAoCXoF,IAAKT,EACLU,KAAMV,EACNW,KAAMX,EACNY,IAAKZ,EACLa,IAAKb,EACLc,KAAMd,EACNe,OAAQf,EACRgB,OAAQhB,EACRiB,KAAMjB,EACNkB,UAAWlB,EACXmB,cAAenB,EACfoB,cAAepB,EACfqB,gBAAiBrB,GAGNsB,EA3iIiB,CAC5BlmB,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFigB,UAAW,U,yGCrBb,MAAMkG,EACJ,mIAEK,SAASC,EACd/d,GAIQ,IAAAge,EAAAC,EAAAC,EAAA,IAHRC,EAAgB5iB,UAAA+D,OAAA,QAAA6B,IAAA5F,UAAA,IAAAA,UAAA,GAChB6iB,EAAS7iB,UAAA+D,OAAA,QAAA6B,IAAA5F,UAAA,GAAA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","sources":["webpack://@finviz/website/./js/app/bubbles/services/api.ts","webpack://@finviz/website/./js/app/bubbles/Share.tsx","webpack://@finviz/website/./js/app/bubbles/actions/bubbleActionCreators.ts","webpack://@finviz/website/./js/app/bubbles/bubblesHoverCanvas.tsx","webpack://@finviz/website/./js/app/bubbles/legend.tsx","webpack://@finviz/website/./js/app/bubbles/draggable.tsx","webpack://@finviz/website/./js/app/bubbles/slider.tsx","webpack://@finviz/website/./js/app/bubbles/bubbleChart.tsx","webpack://@finviz/website/./js/app/bubbles/bubblesHover.tsx","webpack://@finviz/website/./js/app/bubbles/constants/constants.ts","webpack://@finviz/website/./js/app/bubbles/dispatcher/appDispatcher.ts","webpack://@finviz/website/./js/app/bubbles/presets.tsx","webpack://@finviz/website/./js/app/bubbles/selects.ts","webpack://@finviz/website/./js/app/bubbles/input.tsx","webpack://@finviz/website/./js/app/bubbles/sidebar.tsx","webpack://@finviz/website/./js/app/bubbles/stores/bubbleStore.ts","webpack://@finviz/website/./js/app/bubbles/stores/hoverStore.ts","webpack://@finviz/website/./js/app/bubbles/stores/store.ts","webpack://@finviz/website/./js/app/bubbles/utils.ts","webpack://@finviz/website/./js/app/maps/components/MapSelect.tsx","webpack://@finviz/website/./js/app/maps/components/Topbar/Topbar.tsx","webpack://@finviz/website/./js/app/shared/components/HoverChart.tsx","webpack://@finviz/website/./js/app/shared/components/Share.tsx","webpack://@finviz/website/./js/app/shared/drawShareMap.ts","webpack://@finviz/website/./js/app/shared/getTextFontFamily.ts","webpack://@finviz/website/./js/app/shared/gradients.ts","webpack://@finviz/website/./js/app/shared/hover-chart.ts","webpack://@finviz/website/./js/app/shared/loadImage.ts","webpack://@finviz/website/./js/app/shared/retinafy.ts","webpack://@finviz/website/./js/main/components/button-switch/button-switch.tsx","webpack://@finviz/website/./js/main/components/checkbox.tsx","webpack://@finviz/website/./js/main/components/color-picker/draggable.tsx","webpack://@finviz/website/./js/main/components/color-picker/pointer.tsx","webpack://@finviz/website/./js/main/components/color-picker/util.ts","webpack://@finviz/website/./js/main/components/color-picker/alpha.tsx","webpack://@finviz/website/./js/main/components/color-picker/color-palette.tsx","webpack://@finviz/website/./js/main/components/color-picker/hue-saturation.tsx","webpack://@finviz/website/./js/main/components/color-picker/lightness.tsx","webpack://@finviz/website/./js/main/components/color-picker/color-preview.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker-input.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker-button.tsx","webpack://@finviz/website/./js/main/components/copy-to-clipboard/copy-to-clipboard.tsx","webpack://@finviz/website/./js/main/components/dropdown/dropdown.tsx","webpack://@finviz/website/./js/main/components/dropdown/dropdown-item.tsx","webpack://@finviz/website/./js/main/components/dropdown/hooks.ts","webpack://@finviz/website/./js/main/components/context-menu/utils.ts","webpack://@finviz/website/./js/main/components/context-menu/context-menu.tsx","webpack://@finviz/website/./js/main/components/grid/grid.tsx","webpack://@finviz/website/./js/main/components/inner-state/inner-state.tsx","webpack://@finviz/website/./js/main/components/range.tsx","webpack://@finviz/website/./js/main/components/toolbar/interfaces.ts","webpack://@finviz/website/./js/main/components/toolbar/hooks.ts","webpack://@finviz/website/./js/main/components/toolbar/toolbar.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-button.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-group.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-item.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-divider.tsx","webpack://@finviz/website/./js/main/components/tour/step-content.tsx","webpack://@finviz/website/./js/main/components/tour/utils.ts","webpack://@finviz/website/./js/main/components/tour/hooks.tsx","webpack://@finviz/website/./js/main/components/tabs/tab.tsx","webpack://@finviz/website/./js/main/components/tabs/tab-list.tsx","webpack://@finviz/website/./js/main/components/tabs/tab-panel.tsx","webpack://@finviz/website/./js/main/components/tabs/tabs.tsx","webpack://@finviz/website/./js/main/components/badge.tsx","webpack://@finviz/website/./js/main/components/tag.tsx","webpack://@finviz/website/./js/main/components/loading.tsx","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/components/social-share/DownloadImageButton.tsx","webpack://@finviz/website/./js/main/components/social-share/SocialShare.tsx","webpack://@finviz/website/./js/main/components/tooltip-input.tsx"],"sourcesContent":["import { ContentType, apiRequest } from '../../../main/services/api'\r\n\r\nexport interface UploadBubblesResponse {\r\n imgUrl: string\r\n shareUrl: string\r\n}\r\n\r\nexport function uploadMap({ query, data }: { query: string; data: string }) {\r\n const body = new URLSearchParams(query)\r\n\r\n body.set('file', data.replace('data:image/png;base64,', ''))\r\n body.set('isScreener', `${window.location.pathname.includes('screener')}`)\r\n\r\n return apiRequest(`/publish_bubbles_submit.ashx`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': ContentType.FormUrlEncoded,\r\n },\r\n body,\r\n })\r\n}\r\n","import { useMutation } from '@tanstack/react-query'\r\nimport * as React from 'react'\r\n\r\nimport { Share as ShareDialog } from '../shared/components/Share'\r\nimport { drawShareMap } from '../shared/drawShareMap'\r\nimport { colors, sizes } from './selects'\r\nimport * as api from './services/api'\r\nimport BubbleStore from './stores/bubbleStore'\r\nimport { decodeQueryString } from './utils'\r\n\r\ninterface ShareMapProps {\r\n extendedFilters?: boolean\r\n className?: string\r\n}\r\n\r\nexport function Share(props: ShareMapProps) {\r\n const uploadImage = useMutation(api.uploadMap)\r\n const [imageData, setImageData] = React.useState(null)\r\n\r\n const onShareClick = React.useCallback(async () => {\r\n const queryString = decodeQueryString(props.extendedFilters)\r\n const size = sizes.find((o) => o.value === queryString.size)!.label\r\n const color = colors.find((o) => o.value === queryString.color)!.label\r\n const canvas = document.getElementById('bubble-chart-canvas') as HTMLCanvasElement\r\n\r\n const data = await drawShareMap(canvas, [`size: ${size}`, `color: ${color}`, BubbleStore.getDataUpdateTimeString()])\r\n\r\n if (data) {\r\n uploadImage.mutate({ data, query: window.location.search })\r\n setImageData(data)\r\n }\r\n }, [uploadImage, props.extendedFilters])\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { CancelablePromise, apiRequest } from '../../../main/services/api'\r\nimport { getMapsRefreshInterval } from '../../maps/utils'\r\nimport { intervalCallbackOnWindowVisible } from '../../shared/documentVisibility'\r\nimport { ActionTypes } from '../constants/constants'\r\nimport AppDispatcher from '../dispatcher/appDispatcher'\r\nimport BubbleStore from '../stores/bubbleStore'\r\nimport { BubbleNode, BubblesLoadParam, Range } from '../types'\r\nimport { encodeQueryString } from '../utils'\r\n\r\nlet _lastRequest: CancelablePromise | null = null\r\nlet _cancelRefetchInterval: () => void\r\n\r\nconst actions = {\r\n initReload(url: string, params: BubblesLoadParam) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.LOAD_DATA_STARTED,\r\n params: params,\r\n })\r\n\r\n async function loadData() {\r\n _lastRequest?.cancel?.()\r\n _lastRequest = apiRequest(url, { query: params }, true)\r\n try {\r\n const data = await _lastRequest\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.LOAD_DATA_COMPLETED,\r\n data,\r\n })\r\n } catch (error) {\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.LOAD_DATA_FAILED,\r\n errorStatus: (error as { status: string }).status,\r\n })\r\n }\r\n }\r\n\r\n _cancelRefetchInterval = intervalCallbackOnWindowVisible({ interval: getMapsRefreshInterval }, loadData)\r\n void loadData()\r\n },\r\n\r\n cancelReload() {\r\n _cancelRefetchInterval()\r\n },\r\n\r\n changeRange(type: string, range: Range) {\r\n if (range.min > range.max) {\r\n var temp = range.min\r\n range.min = range.max\r\n range.max = temp\r\n }\r\n\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.CHANGE_RANGE,\r\n rangeType: type,\r\n range,\r\n })\r\n\r\n window.history?.replaceState?.(\r\n {},\r\n document.title,\r\n `${window.location.pathname}?` + encodeQueryString(BubbleStore.getParams())\r\n )\r\n },\r\n\r\n setHoveredNode(node?: BubbleNode) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.SET_HOVERED_NODE,\r\n node: node,\r\n })\r\n },\r\n\r\n setHoveredColor(color: string | null) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.SET_HOVERED_COLOR,\r\n color: color,\r\n })\r\n },\r\n}\r\n\r\nexport default actions\r\n","import * as d3 from 'd3'\r\nimport Hammer from 'hammerjs'\r\nimport * as React from 'react'\r\n\r\nimport { isFirefoxDesktop } from '../shared/isMobile'\r\nimport { retinafy } from '../shared/retinafy'\r\nimport BubbleActionCreators from './actions/bubbleActionCreators'\r\nimport { BubbleSettings } from './constants/settings'\r\nimport HoverStore from './stores/hoverStore'\r\nimport { BubbleNode } from './types'\r\n\r\ninterface BubblesHoverCanvasProps {\r\n width: number\r\n height: number\r\n margin: { top: number; right: number; bottom: number; left: number }\r\n bubbles: BubbleNode[]\r\n onDoubleTap: HammerListener\r\n settings: BubbleSettings\r\n}\r\n\r\nclass BubblesHoverCanvas extends React.Component {\r\n canvasRef = React.createRef()\r\n declare canvasContext: CanvasRenderingContext2D\r\n\r\n componentDidMount() {\r\n HoverStore.addChangeListener(this._onChange)\r\n\r\n const canvas = this.canvasRef.current\r\n const context = canvas?.getContext('2d', isFirefoxDesktop() ? { willReadFrequently: true } : undefined)\r\n\r\n if (!canvas || !context) return\r\n\r\n this.canvasContext = context\r\n\r\n retinafy(\r\n canvas,\r\n this.canvasContext,\r\n this.props.width + this.props.margin.left + this.props.margin.right,\r\n this.props.height + this.props.margin.top + this.props.margin.bottom\r\n )\r\n\r\n const hammertime = new Hammer(canvas)\r\n hammertime.on('doubletap', this.props.onDoubleTap)\r\n }\r\n\r\n componentWillUnmount() {\r\n HoverStore.removeChangeListener(this._onChange)\r\n }\r\n\r\n _onChange = () => {\r\n this.setState({ hoveredNode: HoverStore.getHoveredNode() })\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n\r\n _onMouseMove = (e: React.MouseEvent) => {\r\n const { settings } = this.props\r\n var hoverContext = this.canvasContext,\r\n data = this.props.bubbles,\r\n width = this.props.width,\r\n height = this.props.height,\r\n margin = this.props.margin\r\n\r\n var hovered = this._getHoveredNode(e)\r\n const canvas = this.canvasRef.current\r\n\r\n if (canvas) {\r\n canvas.style.cursor = hovered ? 'pointer' : 'default'\r\n }\r\n\r\n if (HoverStore.getHoveredNode() !== hovered) {\r\n hoverContext.clearRect(0, 0, width + margin.left + margin.right, height + margin.top + margin.bottom)\r\n if (hovered) {\r\n hoverContext.save()\r\n hoverContext.lineWidth = 1.1\r\n hoverContext.textAlign = 'center'\r\n hoverContext.textBaseline = 'middle'\r\n hoverContext.translate(margin.left, margin.top)\r\n var d = hovered\r\n\r\n var clr = d.sc\r\n var rgb = d3.rgb(clr)\r\n rgb.r = Math.round(rgb.r + 255 * 0.15)\r\n rgb.g = Math.round(rgb.g + 255 * 0.15)\r\n rgb.b = Math.round(rgb.b + 255 * 0.15)\r\n var fillStyle = 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + 0.8 + ')'\r\n\r\n rgb.r = Math.round(rgb.r * 0.9 + 255 * 0.3)\r\n rgb.g = Math.round(rgb.g * 0.9 + 255 * 0.3)\r\n rgb.b = Math.round(rgb.b * 0.9 + 255 * 0.3)\r\n var strokeStyle = 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + 1 + ')'\r\n\r\n hoverContext.beginPath()\r\n hoverContext.arc(d.sx, d.sy, d.sr, 0, 2 * Math.PI, true)\r\n hoverContext.fillStyle = fillStyle\r\n hoverContext.strokeStyle = strokeStyle\r\n hoverContext.stroke()\r\n\r\n this._renderText(hoverContext, data, hovered, clr, strokeStyle, settings)\r\n hoverContext.restore()\r\n }\r\n }\r\n\r\n BubbleActionCreators.setHoveredNode(hovered)\r\n }\r\n\r\n _renderText = (\r\n context: CanvasRenderingContext2D,\r\n data: BubbleNode[],\r\n d: BubbleNode,\r\n clr: string,\r\n strokeStyle: string,\r\n settings: BubbleSettings\r\n ) => {\r\n var showText = true\r\n var px = d.sx,\r\n py = d.sy,\r\n pr = d.sr + (d.sr > 10 ? 0 : 15),\r\n ax1 = px - pr,\r\n ax2 = px + pr,\r\n ay1 = py - pr,\r\n ay2 = py + pr\r\n for (var j = 0; j < data.length; j++) {\r\n var d2 = data[j]\r\n // eslint-disable-next-line eqeqeq\r\n if (d == d2) {\r\n continue\r\n }\r\n\r\n var bpx = d2.sx,\r\n bpy = d2.sy,\r\n bpr = d2.sr,\r\n bx1 = bpx - bpr,\r\n bx2 = bpx + bpr,\r\n by1 = bpy - bpr,\r\n by2 = bpy + bpr\r\n\r\n if (!(ax1 > bx2 || bx1 > ax2 || ay1 > by2 || by1 > ay2)) {\r\n showText = false\r\n break\r\n }\r\n }\r\n\r\n if (showText) {\r\n if (d.sr > 10) {\r\n var rgb = d3.rgb(clr)\r\n rgb.r = Math.round(rgb.r * 0.9 + 255 * 0.55)\r\n rgb.g = Math.round(rgb.g * 0.9 + 255 * 0.55)\r\n rgb.b = Math.round(rgb.b * 0.9 + 255 * 0.55)\r\n // eslint-disable-next-line @typescript-eslint/no-redeclare\r\n var strokeStyle = 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + 1 + ')'\r\n\r\n context.font = '12px Lato'\r\n if (settings.bubble.textShadow) {\r\n context.fillStyle = settings.bubble.textShadow\r\n context.fillText(d.ticker, px + 1, py + 1)\r\n }\r\n context.fillStyle = settings.bubble.color ?? strokeStyle\r\n context.fillText(d.ticker, px, py)\r\n } else {\r\n context.font = '11px Lato'\r\n if (settings.textShadow) {\r\n context.fillStyle = settings.textShadow\r\n context.fillText(d.ticker, px + 1, py + d.sr + 11)\r\n }\r\n context.fillStyle = settings.color ?? strokeStyle\r\n context.fillText(d.ticker, px, py + d.sr + 10)\r\n }\r\n }\r\n }\r\n\r\n _getHoveredNode = (e: React.MouseEvent) => {\r\n var data = this.props.bubbles\r\n var p = this._getArea(e)\r\n p.x -= this.props.margin.left\r\n p.y -= this.props.margin.top\r\n var hovered\r\n for (var i = data.length - 1; i >= 0; i--) {\r\n var d = data[i]\r\n if (Math.pow(p.x - d.sx, 2) + Math.pow(p.y - d.sy, 2) < Math.pow(d.sr, 2)) {\r\n hovered = d\r\n break\r\n }\r\n }\r\n return hovered\r\n }\r\n\r\n _getArea = (e: React.MouseEvent) => {\r\n // @ts-ignore\r\n var rect = e.target.getBoundingClientRect()\r\n return {\r\n x: e.clientX - rect.left,\r\n y: e.clientY - rect.top,\r\n }\r\n }\r\n}\r\n\r\nexport default BubblesHoverCanvas\r\n","import * as d3 from 'd3'\r\nimport { Component } from 'react'\r\n\r\nimport { Icon } from '../../main/components/icon'\r\nimport ActionCreators from './actions/bubbleActionCreators'\r\nimport HoverStore from './stores/hoverStore'\r\n\r\ninterface LegendProps {\r\n colorFn: any\r\n}\r\n\r\nclass Legend extends Component {\r\n state = { color: null }\r\n componentDidMount() {\r\n HoverStore.addChangeListener(this._handleStateUpdate)\r\n }\r\n\r\n componentWillUnmount() {\r\n HoverStore.removeChangeListener(this._handleStateUpdate)\r\n }\r\n\r\n _handleStateUpdate = () => {\r\n this.setState({ color: HoverStore.getHoveredColor() })\r\n }\r\n\r\n render() {\r\n var domain = this.props.colorFn.domain()\r\n const isNumberDomain = domain.every((d: any) => Number.isFinite(d))\r\n var steps = domain\r\n if (domain.length === 2 && isNumberDomain) {\r\n steps = [Math.round(domain[0] * 10) / 10]\r\n var diff = Math.round(domain[1] * 10) / 10 - steps[0]\r\n var step = diff / 6\r\n for (var i = 1; i < 7; i++) {\r\n steps.push(Math.round((steps[0] + step * i) * 10) / 10)\r\n }\r\n }\r\n\r\n /*if (this.props.scale.id === '_rec') {\r\n steps = [5, 4, 3, 2, 1];\r\n }*/\r\n\r\n var onlyPositive = domain[0] >= 0 && domain[1] >= 0\r\n return (\r\n
\r\n
\r\n Double-click on a bubble to display detailed information\r\n in a new window.\r\n
\r\n
\r\n {steps.map((step: any) => {\r\n var n = step\r\n if (step > 1 || step < -1) {\r\n n = d3.format('.2s')(step).replace('G', 'B')\r\n }\r\n n = (step > 0 && !onlyPositive ? '+' : '') + n\r\n var format = '%N' //scaleStepFormat[this.props.scale.id];\r\n if (typeof format !== 'string') {\r\n format = format[n]\r\n }\r\n\r\n var rgb = d3.rgb(this.props.colorFn(step))\r\n var style = {\r\n background: 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + 0.85 + ')',\r\n width: domain.length === 2 && isNumberDomain ? 50 : 'auto',\r\n paddingLeft: 6,\r\n paddingRight: 6,\r\n textShadow: '0px 1px 0 rgba(0,0,0,0.25)',\r\n opacity: !this.state.color || this.state.color === n ? 1 : 0.4,\r\n }\r\n return (\r\n {\r\n if (steps.length > 1) {\r\n ActionCreators.setHoveredColor(step)\r\n }\r\n }}\r\n onMouseOut={() => {\r\n ActionCreators.setHoveredColor(null)\r\n }}\r\n >\r\n {format.replace('%N', n)}\r\n
\r\n )\r\n })}\r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default Legend\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport ReactDOM from 'react-dom'\r\n\r\nimport { formatValue } from './utils'\r\n\r\nvar getOffset = function (el: Element) {\r\n var clientRect = el.getBoundingClientRect()\r\n return {\r\n top: clientRect.top + window.pageYOffset,\r\n left: clientRect.left + window.pageXOffset,\r\n }\r\n}\r\n\r\ninterface DraggablePos {\r\n x: number\r\n y: number\r\n}\r\n\r\ninterface DraggableProps {\r\n type: string\r\n initialPos: DraggablePos\r\n onChanged: (pos: number) => void\r\n onChange: (pos: number) => void\r\n style: React.CSSProperties\r\n onMouseEnter: () => void\r\n onMouseLeave: () => void\r\n tooltipValue: any\r\n tooltipFormat?: string\r\n tooltipShown: boolean\r\n}\r\n\r\ninterface DraggableState {\r\n pos: DraggablePos\r\n dragging: boolean\r\n hovered: boolean\r\n rel: DraggablePos | null\r\n touch: boolean\r\n}\r\n\r\nclass Draggable extends React.Component {\r\n static defaultProps = {\r\n initialPos: { x: 0, y: 0 },\r\n }\r\n\r\n state: DraggableState = {\r\n pos: this.props.initialPos,\r\n dragging: false,\r\n hovered: false,\r\n rel: null,\r\n touch: false,\r\n }\r\n\r\n handleRef = React.createRef()\r\n\r\n componentDidUpdate(props: DraggableProps, state: DraggableState) {\r\n if (this.state.dragging && !state.dragging) {\r\n if (this.state.touch) {\r\n document.addEventListener('touchmove', this.onMouseMove)\r\n document.addEventListener('touchend', this.onMouseUp)\r\n } else {\r\n document.addEventListener('mousemove', this.onMouseMove)\r\n document.addEventListener('mouseup', this.onMouseUp)\r\n }\r\n } else if (!this.state.dragging && state.dragging) {\r\n if (this.state.touch) {\r\n document.removeEventListener('touchmove', this.onMouseMove)\r\n document.removeEventListener('touchend', this.onMouseUp)\r\n } else {\r\n document.removeEventListener('mousemove', this.onMouseMove)\r\n document.removeEventListener('mouseup', this.onMouseUp)\r\n }\r\n }\r\n }\r\n\r\n onMouseDown = (e: MouseEvent) => {\r\n if (e.button !== 0 || !this.handleRef.current) {\r\n return\r\n }\r\n var offset = getOffset(this.handleRef.current)\r\n this.setState({\r\n dragging: true,\r\n touch: false,\r\n rel: {\r\n x: e.pageX - offset.left,\r\n y: e.pageY - offset.top,\r\n },\r\n })\r\n e.stopPropagation()\r\n e.preventDefault()\r\n }\r\n\r\n onTouchStart = (e: TouchEvent) => {\r\n if (!this.handleRef.current) return\r\n\r\n var offset = getOffset(this.handleRef.current)\r\n this.setState({\r\n dragging: true,\r\n touch: true,\r\n rel: {\r\n x: e.touches[0].pageX - offset.left,\r\n y: e.touches[0].pageY - offset.top,\r\n },\r\n })\r\n e.stopPropagation()\r\n e.preventDefault()\r\n }\r\n\r\n onMouseUp = (e: MouseEvent | TouchEvent) => {\r\n this.setState({ dragging: false })\r\n this.props.onChanged(this.props.type === 'vertical' ? this.state.pos.y : this.state.pos.x)\r\n e.stopPropagation()\r\n e.preventDefault()\r\n }\r\n\r\n onMouseMove = (e: MouseEvent | TouchEvent) => {\r\n if (!this.state.dragging) return\r\n\r\n var pageX = this.state.touch ? (e as TouchEvent).touches[0].pageX : (e as MouseEvent).pageX\r\n var pageY = this.state.touch ? (e as TouchEvent).touches[0].pageY : (e as MouseEvent).pageY\r\n // @ts-ignore\r\n var offset = getOffset(ReactDOM.findDOMNode(this).parentNode.parentNode)\r\n var changedPos = { x: this.state.pos.x, y: this.state.pos.y }\r\n if (this.props.type === 'vertical') {\r\n changedPos.y = pageY - offset.top - this.state.rel!.y - (this.props.style.marginTop as any)\r\n } else {\r\n changedPos.x = pageX - offset.left - this.state.rel!.x - (this.props.style.marginLeft as any)\r\n }\r\n\r\n var retVal = this.props.onChange(this.props.type === 'vertical' ? changedPos.y : changedPos.x)\r\n if (typeof retVal !== 'undefined') {\r\n if (this.props.type === 'vertical') {\r\n // @ts-ignore\r\n this.setState({ pos: { y: retVal } })\r\n } else {\r\n // @ts-ignore\r\n this.setState({ pos: { x: retVal } })\r\n }\r\n } else {\r\n this.setState({ pos: changedPos })\r\n }\r\n\r\n e.stopPropagation()\r\n e.preventDefault()\r\n }\r\n\r\n onMouseEnter = () => {\r\n this.setState({ hovered: true })\r\n this.props.onMouseEnter()\r\n }\r\n\r\n onMouseLeave = () => {\r\n this.setState({ hovered: false })\r\n this.props.onMouseLeave()\r\n }\r\n\r\n render() {\r\n const isVertical = this.props.type === 'vertical'\r\n\r\n return (\r\n \r\n
\r\n {formatValue(this.props.tooltipValue, this.props.tooltipFormat)}\r\n
\r\n \r\n )\r\n }\r\n\r\n isDragged = () => this.state.dragging\r\n\r\n isHovered = () => this.state.hovered\r\n}\r\n\r\nexport default Draggable\r\n","import * as d3 from 'd3'\r\nimport * as React from 'react'\r\n\r\nimport { isFirefoxDesktop } from '../shared/isMobile'\r\nimport { BubbleSettings } from './constants/settings'\r\nimport Draggable from './draggable'\r\nimport { BubbleNode, Range } from './types'\r\nimport { getSizeScale } from './utils'\r\n\r\ninterface SliderProps {\r\n bubbles: BubbleNode[]\r\n type: string\r\n height: number\r\n width: number\r\n scale: any\r\n range: Range\r\n format?: string\r\n onRangeChange: (range: Range) => void\r\n settings: BubbleSettings\r\n}\r\n\r\ninterface SliderState {\r\n leftHandle: number\r\n rightHandle: number\r\n leftHandleDragging: boolean\r\n leftHandleHovered: boolean\r\n rightHandleDragging: boolean\r\n rightHandleHovered: boolean\r\n tooltipShown: boolean\r\n counts: number[]\r\n opacity: (count: number) => number\r\n max: number\r\n}\r\n\r\nclass Slider extends React.Component {\r\n // @ts-ignore\r\n canvasContext: CanvasRenderingContext2D\r\n\r\n canvas = React.createRef()\r\n\r\n constructor(props: SliderProps) {\r\n super(props)\r\n const counts = Slider._getCounts(props)\r\n const min = 0\r\n const max = Math.max.apply(\r\n null,\r\n counts.filter((d) => d >= 0)\r\n )\r\n const opacity = d3.scaleLinear().range([2, 100]).domain([min, max])\r\n\r\n let leftHandle = 0\r\n let rightHandle = props.type === 'vertical' ? props.height : props.width\r\n if (props.range) {\r\n leftHandle = Math.max(leftHandle, props.scale.copy().clamp(true)(props.range.min))\r\n rightHandle = Math.min(rightHandle, props.scale.copy().clamp(true)(props.range.max))\r\n if (leftHandle > rightHandle) {\r\n const temp = leftHandle\r\n leftHandle = rightHandle\r\n rightHandle = temp\r\n }\r\n }\r\n\r\n this.state = {\r\n leftHandle,\r\n rightHandle,\r\n leftHandleHovered: false,\r\n leftHandleDragging: false,\r\n rightHandleHovered: false,\r\n rightHandleDragging: false,\r\n tooltipShown: false,\r\n counts,\r\n opacity,\r\n max,\r\n }\r\n }\r\n\r\n render() {\r\n var width = this.props.width,\r\n height = 9,\r\n style = {\r\n width: 9,\r\n height: 17,\r\n marginTop: 3,\r\n marginLeft: -5,\r\n }\r\n if (this.props.type === 'vertical') {\r\n width = 9\r\n height = this.props.height\r\n style.width = 17\r\n style.height = 9\r\n style.marginTop = -3\r\n style.marginLeft = -4\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 static getDerivedStateFromProps(props: SliderProps) {\r\n return {\r\n counts: Slider._getCounts(props),\r\n }\r\n }\r\n\r\n static _getCounts({ bubbles, type, height, width, scale }: SliderProps) {\r\n var size = type === 'vertical' ? height : width\r\n var counts: number[] = []\r\n for (var i = 0; i < size; i++) {\r\n counts[i] = 0\r\n }\r\n\r\n var rScale = getSizeScale(bubbles)\r\n bubbles.forEach((d) => {\r\n var val = (type === 'vertical' ? d.y : d.x) ?? 0\r\n var x = Math.round(scale(val))\r\n var r = Math.max(Math.round(rScale(d.size)), 1.5)\r\n counts[x]++\r\n for (let i = 1; i < r; i++) {\r\n if (x - i >= 0) {\r\n counts[x - i] += 1\r\n }\r\n }\r\n for (let i = 1; i < r && x + i < size; i++) {\r\n counts[x + i] += 1\r\n }\r\n })\r\n\r\n return counts\r\n }\r\n\r\n componentDidMount() {\r\n const canvas = this.canvas.current\r\n const context = canvas?.getContext('2d', isFirefoxDesktop() ? { willReadFrequently: true } : undefined)\r\n\r\n if (!canvas || !context) return\r\n\r\n this.canvasContext = context\r\n this._renderCanvas()\r\n }\r\n\r\n componentDidUpdate() {\r\n this._renderCanvas()\r\n }\r\n\r\n _renderCanvas = () => {\r\n var { counts, opacity, max } = this.state\r\n const settings = this.props.settings.slider\r\n var size = this.props.type === 'vertical' ? this.props.height : this.props.width\r\n var context = this.canvasContext\r\n\r\n var width = this.props.width,\r\n height = 9\r\n if (this.props.type === 'vertical') {\r\n width = 9\r\n height = this.props.height\r\n }\r\n\r\n context.save()\r\n context.clearRect(0, 0, width, height)\r\n\r\n if (this.props.type === 'vertical') {\r\n context.translate(width, 0)\r\n context.rotate(Math.PI / 2)\r\n }\r\n\r\n context.strokeStyle = settings.stroke\r\n context.beginPath()\r\n context.moveTo(0, 4.5)\r\n context.lineTo(size, 4.5)\r\n context.stroke()\r\n\r\n if (this.state.leftHandle !== 0 || this.state.rightHandle !== size) {\r\n context.strokeStyle = settings.highlightStroke\r\n context.beginPath()\r\n context.moveTo(this.state.leftHandle + 1, 4.5)\r\n context.lineTo(this.state.rightHandle, 4.5)\r\n context.stroke()\r\n }\r\n\r\n for (var i = 0; i < size; i++) {\r\n var count = counts[i]\r\n if (count === 0) {\r\n continue\r\n }\r\n if (\r\n i >= this.state.leftHandle &&\r\n i <= this.state.rightHandle &&\r\n (this.state.leftHandle !== 0 || this.state.rightHandle !== size)\r\n ) {\r\n context.fillStyle = settings.distributionHighligt(opacity(count) / 100)\r\n } else {\r\n context.fillStyle = settings.distribution(opacity(count) / 100)\r\n }\r\n context.fillRect(i, count > max * 0.6 ? 3 : 4, 1, count > max * 0.6 ? 3 : 1)\r\n }\r\n\r\n if (this.state.leftHandle !== 0 || this.state.rightHandle !== size) {\r\n context.fillStyle = settings.highlight\r\n context.fillRect(this.state.leftHandle + 1, 0, this.state.rightHandle - this.state.leftHandle, 9)\r\n }\r\n\r\n context.restore()\r\n }\r\n\r\n _onHandleChange = (type: string, value: number) => {\r\n var size = this.props.type === 'vertical' ? this.props.height : this.props.width\r\n if (value < 0) {\r\n value = 0\r\n } else if (value > size) {\r\n value = size\r\n }\r\n\r\n if (type === 'left' && value >= this.state.rightHandle) {\r\n value = this.state.rightHandle - 1\r\n } else if (type === 'right' && value <= this.state.leftHandle) {\r\n value = this.state.leftHandle + 1\r\n }\r\n\r\n var state: Record = {}\r\n state[type + 'Handle'] = value\r\n state[type + 'HandleDragging'] = true\r\n // @ts-ignore\r\n this.setState(state)\r\n\r\n return value\r\n }\r\n\r\n _onHandleChanged = (type: string, value: number) => {\r\n var state: Record = {}\r\n state[type + 'Handle'] = value\r\n state[type + 'HandleDragging'] = false\r\n // @ts-ignore\r\n this.setState(state)\r\n\r\n // @ts-ignore\r\n var range: Range = {\r\n min: this.state.leftHandle,\r\n max: this.state.rightHandle,\r\n }\r\n if (type === 'left') {\r\n range.min = value\r\n } else {\r\n range.max = value\r\n }\r\n\r\n range.scaled = {\r\n min: this.props.scale.invert(range.min),\r\n max: this.props.scale.invert(range.max),\r\n }\r\n\r\n this.props.onRangeChange(range)\r\n }\r\n\r\n _showTooltip = (type: string) => {\r\n var state: Record = {}\r\n state[type + 'HandleHovered'] = true\r\n // @ts-ignore\r\n this.setState(state)\r\n }\r\n\r\n _hideTooltip = (type: string) => {\r\n var state: Record = {}\r\n state[type + 'HandleHovered'] = false\r\n // @ts-ignore\r\n this.setState(state)\r\n }\r\n}\r\n\r\nexport default Slider\r\n","import * as d3 from 'd3'\r\nimport throttle from 'lodash.throttle'\r\nimport { Component, MouseEvent, createRef } from 'react'\r\n\r\nimport { isFirefoxDesktop, isMobile } from '../shared/isMobile'\r\nimport { retinafy } from '../shared/retinafy'\r\nimport BubbleActionCreators from './actions/bubbleActionCreators'\r\nimport BubblesHoverCanvas from './bubblesHoverCanvas'\r\nimport { BubbleSettings } from './constants/settings'\r\nimport Legend from './legend'\r\nimport * as Selects from './selects'\r\nimport Slider from './slider'\r\nimport BubbleStore from './stores/bubbleStore'\r\nimport HoverStore from './stores/hoverStore'\r\nimport { BubbleNode, Range } from './types'\r\nimport { getScales, getXScale, getYScale } from './utils'\r\n\r\nconst BUBBLES_MIN_WIDTH = 794\r\nconst SIDEBAR_WIDTH = 200\r\nconst TOOLTIP_WIDTH = 60\r\nconst SLIDER_WIDTH = 24\r\n\r\ninterface SelectOption {\r\n value: string\r\n label: string\r\n format?: string\r\n}\r\n\r\nvar labelX: SelectOption, labelY: SelectOption // TODO\r\n\r\ninterface BubbleProps {\r\n settings: BubbleSettings\r\n}\r\n\r\ninterface BubbleChartState {\r\n bubbles: any\r\n errorCode: any\r\n hasError: any\r\n isLoading: any\r\n params: any\r\n scales: any\r\n width: number\r\n height: number\r\n hoveredColor: string | null\r\n}\r\n\r\nclass BubbleChart extends Component {\r\n canvasRef = createRef()\r\n declare canvasContext: CanvasRenderingContext2D\r\n\r\n constructor(props: any) {\r\n super(props)\r\n\r\n this.state = this._getState()\r\n }\r\n\r\n componentDidMount() {\r\n BubbleStore.addChangeListener(this._updateState)\r\n HoverStore.addChangeListener(this._onHoverStoreChange)\r\n const canvas = this.canvasRef.current\r\n const context = canvas?.getContext('2d', isFirefoxDesktop() ? { willReadFrequently: true } : undefined)\r\n\r\n if (!canvas || !context) return\r\n\r\n this.canvasContext = context\r\n\r\n Selects.xys.forEach((option) => {\r\n if (option.value === this.state.params.x) {\r\n labelX = option\r\n }\r\n if (option.value === this.state.params.y) {\r\n labelY = option\r\n }\r\n })\r\n\r\n if (isMobile()) {\r\n window.addEventListener('orientationchange', this._onResize)\r\n } else {\r\n window.addEventListener('resize', this._onResize)\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n BubbleStore.removeChangeListener(this._updateState)\r\n HoverStore.removeChangeListener(this._onHoverStoreChange)\r\n window.removeEventListener('resize', this._onResize)\r\n window.removeEventListener('orientationchange', this._onResize)\r\n }\r\n\r\n _onResize = throttle(() => {\r\n const size = this._getSize()\r\n if (size.width !== this.state.width && size.height !== this.state.height) {\r\n this._updateState()\r\n }\r\n }, 100)\r\n\r\n _updateState = () => {\r\n this.setState(this._getState())\r\n }\r\n\r\n _getSize() {\r\n const browserWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)\r\n const browserHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)\r\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\r\n const isScreener = document.body.classList.contains('is-screener')\r\n const container = document.getElementById(isScreener ? 'root' : 'bubbles')\r\n const containerWidth = (container?.clientWidth ?? BUBBLES_MIN_WIDTH) - scrollbarWidth\r\n const spacing = this.props.settings.margin.left + this.props.settings.margin.right + SIDEBAR_WIDTH\r\n let width = containerWidth - spacing\r\n\r\n if (browserWidth - containerWidth < TOOLTIP_WIDTH) {\r\n width = width - TOOLTIP_WIDTH / 2\r\n }\r\n\r\n if (browserWidth - containerWidth - TOOLTIP_WIDTH > TOOLTIP_WIDTH) {\r\n width = width + SLIDER_WIDTH\r\n }\r\n\r\n const ratio =\r\n (browserWidth <= 1650 && browserHeight < 880) || (browserWidth >= 1650 && browserHeight < 980) ? 2 : 1.85\r\n const height = ~~(width / ratio)\r\n\r\n return { width, height }\r\n }\r\n\r\n _addShowTextToBubbles(bubbles: BubbleNode[]) {\r\n for (let i = 0; i < bubbles.length; i++) {\r\n const d = bubbles[i]\r\n const px = d.sx,\r\n py = d.sy,\r\n pr = d.sr + (d.sr > 10 ? 0 : 15),\r\n ax1 = px - pr,\r\n ax2 = px + pr,\r\n ay1 = py - pr,\r\n ay2 = py + pr\r\n\r\n d.showText = { px, py }\r\n\r\n for (let j = 0; j < bubbles.length; j++) {\r\n const d2 = bubbles[j]\r\n // eslint-disable-next-line eqeqeq\r\n if (d == d2) {\r\n continue\r\n }\r\n const bpx = d2.sx,\r\n bpy = d2.sy,\r\n bpr = d2.sr,\r\n bx1 = bpx - bpr,\r\n bx2 = bpx + bpr,\r\n by1 = bpy - bpr,\r\n by2 = bpy + bpr\r\n if (!(ax1 > bx2 || bx1 > ax2 || ay1 > by2 || by1 > ay2)) {\r\n d.showText = false\r\n break\r\n }\r\n }\r\n }\r\n }\r\n\r\n _getState = () => {\r\n // precompute scaled x, y, size\r\n const bubblesInRange = BubbleStore.getBubblesInRange()\r\n const params = BubbleStore.getParams()\r\n const size = this._getSize()\r\n const scales = getScales(bubblesInRange, size.width, size.height, params.color, this.props.settings.colorPalette)\r\n const hoveredColor = HoverStore.getHoveredColor()\r\n\r\n const bubbles = bubblesInRange.map((node) => ({\r\n ...node,\r\n sx: Math.round(scales.x(node.x)),\r\n sy: Math.round(scales.y(node.y)),\r\n sr: Math.max(Math.round(scales.r(node.size)), 1.5),\r\n sc: scales.c(node.color),\r\n }))\r\n this._addShowTextToBubbles(bubbles)\r\n\r\n return {\r\n bubbles,\r\n params,\r\n scales,\r\n isLoading: BubbleStore.isLoading(),\r\n hasError: BubbleStore.hasError(),\r\n errorCode: BubbleStore.getErrorCode(),\r\n width: size.width,\r\n height: size.height,\r\n hoveredColor,\r\n }\r\n }\r\n\r\n _onHoverStoreChange = () => {\r\n const hoveredColor = HoverStore.getHoveredColor()\r\n if (hoveredColor !== this.state.hoveredColor) {\r\n this.setState({ hoveredColor })\r\n }\r\n }\r\n\r\n render() {\r\n const { width, height } = this.state\r\n const { margin } = this.props.settings\r\n\r\n var message\r\n if (this.state.isLoading) {\r\n message = 'Loading...'\r\n } else if (this.state.hasError) {\r\n message = 'Oops, something went wrong. Please refresh the page or try again.'\r\n if (this.state.errorCode === 400) {\r\n message = 'Page not found.'\r\n }\r\n } else if (!this.state.isLoading && !this.state.hasError && this.state.bubbles.length === 0) {\r\n message = 'No stocks selected.'\r\n }\r\n\r\n var { c } = this.state.scales\r\n var allBubbles = BubbleStore.getBubbles()\r\n\r\n var formatX = Selects.xys.filter((o) => o.value === this.state.params.x)[0].format\r\n var formatY = Selects.xys.filter((o) => o.value === this.state.params.y)[0].format\r\n\r\n return (\r\n
\r\n \r\n {document.title}\r\n \r\n \r\n\r\n {!this.state.isLoading && !this.state.hasError && this.state.bubbles.length >= 0 && (\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n {/* @ts-ignore */}\r\n \r\n
\r\n\r\n
\r\n {/* @ts-ignore */}\r\n \r\n
\r\n
\r\n )}\r\n\r\n {message &&

{message}

}\r\n
\r\n )\r\n }\r\n\r\n componentDidUpdate() {\r\n this._render()\r\n }\r\n\r\n _render = () => {\r\n const { width, height } = this.state\r\n if (this.state.isLoading || this.state.hasError) {\r\n return\r\n }\r\n\r\n var context = this.canvasContext,\r\n data = this.state.bubbles\r\n const { settings } = this.props\r\n\r\n var { x, y } = this.state.scales\r\n\r\n retinafy(\r\n context.canvas,\r\n context,\r\n width + settings.margin.left + settings.margin.right,\r\n height + settings.margin.top + settings.margin.bottom\r\n )\r\n\r\n context.save()\r\n context.lineWidth = 1\r\n context.fillStyle = settings.background\r\n context.fillRect(\r\n 0,\r\n 0,\r\n width + settings.margin.left + settings.margin.right,\r\n height + settings.margin.top + settings.margin.bottom\r\n )\r\n context.translate(settings.margin.left, settings.margin.top)\r\n\r\n context.strokeStyle = settings.grid\r\n var xTicks = x.ticks(10)\r\n context.beginPath()\r\n for (var i = 0; i < xTicks.length; i++) {\r\n var tick = xTicks[i]\r\n var dx = Math.round(x(tick)) + 0.5\r\n context.moveTo(dx, 0)\r\n context.lineTo(dx, height)\r\n }\r\n context.stroke()\r\n\r\n var yTicks = y.ticks(10)\r\n context.beginPath()\r\n for (i = 0; i < yTicks.length; i++) {\r\n tick = yTicks[i]\r\n var dy = Math.round(y(tick)) + 0.5\r\n context.moveTo(0.5, dy)\r\n context.lineTo(width + 0.5, dy)\r\n }\r\n context.stroke()\r\n\r\n context.strokeStyle = settings.axis.stroke\r\n context.beginPath()\r\n dx = Math.round(x(x.domain()[0])) + 0.5\r\n context.moveTo(dx, 0)\r\n context.lineTo(dx, height)\r\n for (i = 0; i < xTicks.length; i++) {\r\n tick = xTicks[i]\r\n dx = Math.round(x(tick)) + 0.5\r\n context.moveTo(dx, height)\r\n context.lineTo(dx, height + 6.5)\r\n }\r\n context.stroke()\r\n\r\n context.beginPath()\r\n dy = Math.round(y(y.domain()[0])) + 0.5\r\n context.moveTo(0.5, dy)\r\n context.lineTo(width + 0.5, dy)\r\n for (i = 0; i < yTicks.length; i++) {\r\n tick = yTicks[i]\r\n dy = Math.round(y(tick)) + 0.5\r\n context.moveTo(0.5, dy)\r\n context.lineTo(-6.5, dy)\r\n }\r\n context.stroke()\r\n\r\n context.font = '8pt Verdana'\r\n context.fillStyle = settings.axis.text\r\n context.textAlign = 'center'\r\n context.textBaseline = 'bottom'\r\n for (i = 0; i < xTicks.length; i++) {\r\n tick = xTicks[i]\r\n dx = Math.round(x(tick)) + 0.5\r\n context.fillText(formatXAxis(tick), dx, height + 22)\r\n }\r\n\r\n context.textAlign = 'right'\r\n context.textBaseline = 'middle'\r\n for (i = 0; i < yTicks.length; i++) {\r\n tick = yTicks[i]\r\n dy = Math.round(y(tick)) + 0.5\r\n context.fillText(formatYAxis(tick), -12, dy)\r\n }\r\n\r\n context.fillText(labelX.label, width - 1, height - 10)\r\n\r\n context.textAlign = 'right'\r\n context.save()\r\n context.translate(10, 1)\r\n context.rotate((-90 * Math.PI) / 180)\r\n context.fillText(labelY.label, 0, 0)\r\n context.restore()\r\n\r\n context.lineWidth = 1.1\r\n context.textAlign = 'center'\r\n context.textBaseline = 'middle'\r\n for (i = 0; i < data.length; i++) {\r\n var d = data[i]\r\n\r\n var clr = d.sc\r\n var isBubbleDimmed = !!this.state.hoveredColor && this.state.hoveredColor !== d.color\r\n var rgb, fillStyle, strokeStyle\r\n\r\n if (isBubbleDimmed) {\r\n fillStyle = settings.bubble.fill\r\n strokeStyle = settings.bubble.stroke\r\n } else {\r\n rgb = d3.rgb(clr)\r\n fillStyle = 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + 0.85 + ')'\r\n rgb.r = Math.round(rgb.r * 0.9 + 255 * 0.15)\r\n rgb.g = Math.round(rgb.g * 0.9 + 255 * 0.15)\r\n rgb.b = Math.round(rgb.b * 0.9 + 255 * 0.15)\r\n strokeStyle = 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + 1 + ')'\r\n }\r\n\r\n context.beginPath()\r\n context.arc(d.sx, d.sy, d.sr, 0, 2 * Math.PI, true)\r\n context.fillStyle = fillStyle\r\n context.fill()\r\n context.strokeStyle = strokeStyle\r\n context.stroke()\r\n\r\n this._renderText(context, d, clr, strokeStyle, settings, isBubbleDimmed)\r\n }\r\n context.restore()\r\n }\r\n\r\n _renderText = (\r\n context: CanvasRenderingContext2D,\r\n d: BubbleNode,\r\n clr: string,\r\n strokeStyle: string,\r\n settings: BubbleSettings,\r\n isBubbleDimmed: boolean\r\n ) => {\r\n if (d.showText) {\r\n const { px, py } = d.showText\r\n if (d.sr > 10) {\r\n if (!isBubbleDimmed) {\r\n var rgb = d3.rgb(clr)\r\n rgb.r = Math.round(rgb.r * 0.9 + 255 * 0.55)\r\n rgb.g = Math.round(rgb.g * 0.9 + 255 * 0.55)\r\n rgb.b = Math.round(rgb.b * 0.9 + 255 * 0.55)\r\n strokeStyle = 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + 1 + ')'\r\n }\r\n\r\n context.font = '12px Lato'\r\n if (settings.bubble.textShadow) {\r\n context.fillStyle = settings.bubble.textShadow\r\n context.fillText(d.ticker, px + 1, py + 1)\r\n }\r\n context.fillStyle = settings.bubble.color ?? strokeStyle\r\n context.fillText(d.ticker, px, py)\r\n } else {\r\n context.font = '11px Lato'\r\n if (settings.textShadow) {\r\n context.fillStyle = settings.textShadow\r\n context.fillText(d.ticker, px + 1, py + d.sr + 11)\r\n }\r\n context.fillStyle = settings.color ?? strokeStyle\r\n context.fillText(d.ticker, px, py + d.sr + 10)\r\n }\r\n }\r\n }\r\n\r\n _onDoubleTap = (e: HammerInput) => {\r\n e.preventDefault()\r\n const hovered = this._getHoveredNode(e.pointers[0])\r\n if (hovered) {\r\n window.open('/quote.ashx?t=' + hovered.ticker)\r\n }\r\n }\r\n\r\n _onRangeChange = (type: string, range: Range) => {\r\n BubbleActionCreators.changeRange(type, range.scaled!)\r\n }\r\n\r\n _getHoveredNode = (e: MouseEvent) => {\r\n var data = this.state.bubbles\r\n var p = this._getArea(e)\r\n p.x -= this.props.settings.margin.left\r\n p.y -= this.props.settings.margin.top\r\n var hovered\r\n for (var i = data.length - 1; i >= 0; i--) {\r\n var d = data[i]\r\n if (Math.pow(p.x - d.sx, 2) + Math.pow(p.y - d.sy, 2) < Math.pow(d.sr, 2)) {\r\n hovered = d\r\n break\r\n }\r\n }\r\n return hovered\r\n }\r\n\r\n _getArea = (e: MouseEvent) => {\r\n // @ts-ignore\r\n var rect = e.target.getBoundingClientRect()\r\n return {\r\n x: e.clientX - rect.left,\r\n y: e.clientY - rect.top,\r\n }\r\n }\r\n}\r\n\r\nvar format = d3.format('~s')\r\nfunction formatXAxis(value: number) {\r\n var formatted: string | number = parseFloat(value.toFixed(2))\r\n if (value > 1 || value < -1) {\r\n formatted = format(formatted).replace('G', 'B')\r\n }\r\n if (labelX.format === '%') {\r\n formatted += '%'\r\n }\r\n return formatted as string\r\n}\r\n\r\nfunction formatYAxis(value: number) {\r\n var formatted: string | number = parseFloat(value.toFixed(2))\r\n if (value > 1 || value < -1) {\r\n formatted = format(formatted).replace('G', 'B')\r\n }\r\n if (labelY.format === '%') {\r\n formatted += '%'\r\n }\r\n return formatted as string\r\n}\r\n\r\nexport { formatXAxis, formatYAxis, BubbleChart }\r\n","import { Component } from 'react'\r\n\r\nimport { HoverChart } from '../shared/components/HoverChart'\r\nimport { ETF_MARKET_CAP_LABEL, colors, sizes, xys } from './selects'\r\nimport HoverStore from './stores/hoverStore'\r\nimport { formatValue } from './utils'\r\n\r\ninterface BubblesHoverProps {\r\n labelX: string\r\n labelY: string\r\n labelSize: string\r\n labelColor: string\r\n}\r\n\r\nclass BubblesHover extends Component {\r\n state = { shown: false }\r\n\r\n componentDidMount() {\r\n HoverStore.addChangeListener(this._onChange)\r\n document.addEventListener('mousemove', this._onMouseMove)\r\n }\r\n\r\n componentWillUnmount() {\r\n HoverStore.removeChangeListener(this._onChange)\r\n document.removeEventListener('mousemove', this._onMouseMove)\r\n }\r\n\r\n _onChange = () => {\r\n this.setState({\r\n shown: !!HoverStore.getHoveredNode(),\r\n })\r\n }\r\n\r\n render() {\r\n if (!this.state.shown) {\r\n return null\r\n }\r\n\r\n // so we don't have duplicates\r\n var vals: Record = {}\r\n var hoveredNode = HoverStore.getHoveredNode()\r\n\r\n var x = xys.find((o) => o.value === this.props.labelX)\r\n if (x) {\r\n vals[x.value] = { label: x.label, value: hoveredNode.x, format: x.format }\r\n }\r\n\r\n var y = xys.find((o) => o.value === this.props.labelY)\r\n if (y) {\r\n vals[y.value] = { label: y.label, value: hoveredNode.y, format: y.format }\r\n }\r\n\r\n var size = sizes.find((o) => o.value === this.props.labelSize)\r\n if (size) {\r\n vals[size.value] = { label: size.label, value: hoveredNode.size }\r\n }\r\n\r\n var color = colors.find((o) => o.value === this.props.labelColor)\r\n if (color) {\r\n vals[color.value] = { label: color.label, value: hoveredNode.color, format: color.format }\r\n }\r\n\r\n return (\r\n \r\n
{hoveredNode.company}
\r\n
\r\n
\r\n {Object.keys(vals).map((key) => {\r\n const isETFMarketCap = hoveredNode.isETF && key === 'marketCap'\r\n const label = isETFMarketCap ? ETF_MARKET_CAP_LABEL : vals[key].label\r\n const value = formatValue(vals[key].value, vals[key].format, true)\r\n\r\n if (!['sector', 'order', 'ticker', 'const'].includes(key)) {\r\n return (\r\n
\r\n

{label}

\r\n {value}\r\n
\r\n
\r\n )\r\n }\r\n\r\n return null\r\n })}\r\n
\r\n \r\n
\r\n \r\n )\r\n }\r\n\r\n _onMouseMove = (e: MouseEvent) => {\r\n if (!this.state.shown) {\r\n return\r\n }\r\n var marginLeft = 100\r\n var marginTop = 0\r\n var el = document.getElementById('hover-bubbles')!\r\n var hoverWidth = Math.max(el.scrollWidth, 467)\r\n var hoverHeight = Math.max(el.scrollHeight, 213)\r\n var availWidth = document.documentElement.clientWidth\r\n var availHeight = document.documentElement.clientHeight\r\n if (e.clientX + hoverWidth + marginLeft * 1.5 < availWidth) {\r\n el.style.left = e.clientX + marginLeft + 'px'\r\n } else if (e.clientX - hoverWidth - marginLeft > 0) {\r\n el.style.left = e.clientX - marginLeft - hoverWidth + 'px'\r\n } else {\r\n marginLeft = 20\r\n if (e.clientX + hoverWidth + marginLeft < availWidth) {\r\n el.style.left = e.clientX + marginLeft + 'px'\r\n } else {\r\n el.style.left = e.clientX - marginLeft - hoverWidth + 'px'\r\n }\r\n }\r\n el.style.top =\r\n Math.max(0, e.clientY + marginTop - Math.max(0, e.clientY + marginTop + hoverHeight - availHeight)) + 'px'\r\n }\r\n}\r\n\r\nexport default BubblesHover\r\n","import keyMirror from 'keymirror'\r\n\r\nexport const ActionTypes = keyMirror({\r\n LOAD_DATA_STARTED: null,\r\n LOAD_DATA_COMPLETED: null,\r\n LOAD_DATA_FAILED: null,\r\n\r\n CHANGE_RANGE: null,\r\n\r\n SET_HOVERED_NODE: null,\r\n SET_HOVERED_COLOR: null,\r\n\r\n PUBLISH_BUBBLES_STARTED: null,\r\n PUBLISH_BUBBLES_COMPLETED: null,\r\n PUBLISH_BUBBLES_FAILED: null,\r\n PUBLISH_BUBBLES_CLOSE: null,\r\n})\r\n\r\nexport const PayloadSources = keyMirror({\r\n SERVER_ACTION: null,\r\n VIEW_ACTION: null,\r\n})\r\n","import { Dispatcher } from 'flux'\r\n\r\nimport { PayloadSources } from '../constants/constants'\r\n\r\nclass AppDispatcher extends Dispatcher {\r\n handleServerAction(action: any) {\r\n var payload = {\r\n source: PayloadSources.SERVER_ACTION,\r\n action: action,\r\n }\r\n //console.log(action, payload);\r\n this.dispatch(payload)\r\n }\r\n\r\n handleViewAction(action: any) {\r\n var payload = {\r\n source: PayloadSources.VIEW_ACTION,\r\n action: action,\r\n }\r\n //console.log(action, payload);\r\n this.dispatch(payload)\r\n }\r\n}\r\n\r\nconst dispatcher = new AppDispatcher()\r\nexport default dispatcher\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../../main/components/button'\r\nimport { generatePresetUrl } from './utils'\r\n\r\nconst SECTOR = [\r\n {\r\n href: { x: 'sector', y: 'instOwn', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: 'Institutional Ownership',\r\n },\r\n {\r\n href: { x: 'sector', y: 'forwardPE', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: 'Forward P/E Ratio',\r\n },\r\n {\r\n href: { x: 'sector', y: 'employees', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: 'Employees',\r\n },\r\n {\r\n href: { x: 'sector', y: 'grossMargin', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: 'Gross Margin',\r\n },\r\n {\r\n href: { x: 'sector', y: 'marketCap', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: 'Market Capitalization',\r\n },\r\n {\r\n href: { x: 'sector', y: 'averageVolumeUsd', size: 'averageVolumeUsd', color: 'sector', idx: 'sp500' },\r\n label: 'Average USD Volume',\r\n },\r\n {\r\n href: { x: 'sector', y: 'sma200', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: 'Simple Moving Average 200',\r\n },\r\n {\r\n href: { x: 'sector', y: 'rsi', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: 'Relative Strength Index 14',\r\n },\r\n {\r\n href: { x: 'sector', y: 'shortInterestRatio', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: 'Short Interest Ratio',\r\n },\r\n]\r\n\r\nconst PERFORMANCE = [\r\n {\r\n href: { x: 'sector', y: 'lastChange', size: 'relativeVolume', color: 'lastChange', idx: 'sp500' },\r\n label: 'Today’s performance by Relative Volume',\r\n },\r\n {\r\n href: { x: 'sector', y: 'lastChange', size: 'marketCap', color: 'lastChange', idx: 'sp500' },\r\n label: 'Today’s performance by Market Capitalization',\r\n },\r\n {\r\n href: { x: 'sector', y: 'lastChange', size: 'averageVolumeUsd', color: 'lastChange', idx: 'sp500' },\r\n label: 'Today’s performance by Average USD Volume',\r\n },\r\n {\r\n // prettier-ignore\r\n href: { x: 'sector', y: 'lastChange', size: 'relativeVolume', color: 'lastChange', idx: 'any', ind: 'exchangetradedfund'},\r\n label: 'Today’s performance by Relative Volume (ETFs)',\r\n },\r\n {\r\n href: { x: 'sector', y: 'perfYtd', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: 'Year-to-Date Performance',\r\n },\r\n {\r\n href: { x: 'sector', y: 'perf1w', size: 'marketCap', color: 'perf1w', idx: 'sp500' },\r\n label: '1-Week Performance',\r\n },\r\n {\r\n href: { x: 'sector', y: 'high52w', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: '52-Week High',\r\n },\r\n {\r\n href: { x: 'sector', y: 'low52w', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: '52-Week Low',\r\n },\r\n {\r\n href: { x: 'high52w', y: 'low52w', size: 'const', color: 'sector', idx: 'sp500' },\r\n label: '52-Week High vs Low',\r\n },\r\n {\r\n href: { x: 'insiderTrans', y: 'perf26w', size: 'marketCap', color: 'perf26w', idx: 'sp500' },\r\n label: 'Insider Transactions vs 6-Month Performance',\r\n },\r\n {\r\n href: { x: 'instOwn', y: 'perf26w', size: 'marketCap', color: 'perf26w', idx: 'sp500' },\r\n label: 'Institutional Ownership vs 6-Month Performance',\r\n },\r\n {\r\n href: { x: 'marketCap', y: 'perf52w', size: 'marketCap', color: 'perf52w', idx: 'sp500' },\r\n label: 'Market Capitalization vs 12-Month Performance',\r\n },\r\n {\r\n href: { x: 'roa', y: 'perf52w', size: 'marketCap', color: 'perf52w', idx: 'sp500' },\r\n label: 'ROA vs 12-Month Performance',\r\n },\r\n {\r\n href: { x: 'rsi', y: 'perf4w', size: 'marketCap', color: 'perf4w', idx: 'sp500' },\r\n label: 'Relative Strength Index 14 vs 4-Week Performance',\r\n },\r\n {\r\n href: { x: 'shortInterestRatio', y: 'rsi', size: 'marketCap', color: 'perf4w', idx: 'sp500' },\r\n label: 'Short Interest Ratio vs Relative Strength Index 14',\r\n },\r\n]\r\n\r\nconst OTHER = [\r\n {\r\n href: { x: 'employees', y: 'sales', size: 'marketCap', color: 'const', tickers: 'AAPL,GOOG,MSFT,AMZN,FB' },\r\n label: 'Employees vs Sales in AAPL, GOOG, MSFT, AMZN, FB',\r\n },\r\n {\r\n href: { x: 'PE', y: 'forwardPE', size: 'marketCap', color: 'perf52w', sec: 'technology', cap: 'largeover' },\r\n label: 'P/E vs Forward P/E Ratio in Large cap. Technology Stocks',\r\n },\r\n {\r\n href: { x: 'consRecom', y: 'order', size: 'const', color: 'consRecom' },\r\n label: 'Analyst Recommendations Distribution - Buy Bias',\r\n },\r\n {\r\n href: { x: 'consRecom', y: 'sector', size: 'const', color: 'consRecom' },\r\n label: 'Analyst Recommendations Distribution by sector - Buy Bias',\r\n },\r\n {\r\n href: { x: 'income', y: 'sales', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: 'Income vs Sales (S&P 500)',\r\n },\r\n {\r\n href: { x: 'eps5Years', y: 'sales5Years', size: 'marketCap', color: 'sector', idx: 'sp500' },\r\n label: '5-Year EPS vs Sales growth (S&P 500)',\r\n },\r\n]\r\n\r\ninterface PresetsModalProps {\r\n className?: string\r\n generatePresetUrl: (preset: Record) => string\r\n onClose: (ev: React.MouseEvent) => void\r\n}\r\n\r\nclass PresetsModal extends React.Component {\r\n static defaultProps = {\r\n generatePresetUrl,\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

Bubbles presets

\r\n \r\n
\r\n
\r\n

By Sector (S&P 500)

\r\n {SECTOR.map((link) => (\r\n \r\n {link.label}\r\n
\r\n
\r\n ))}\r\n\r\n

By Performance (S&P 500)

\r\n {PERFORMANCE.map((link) => (\r\n \r\n {link.label}\r\n
\r\n
\r\n ))}\r\n\r\n

Other

\r\n {OTHER.map((link) => (\r\n \r\n {link.label}\r\n
\r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n _closeModal = (e: React.MouseEvent) => {\r\n e.preventDefault()\r\n this.props.onClose(e)\r\n }\r\n\r\n _hideModalOverlay = (e: React.MouseEvent) => {\r\n if (e.target === e.currentTarget) {\r\n this._closeModal(e)\r\n }\r\n }\r\n}\r\n\r\ninterface PresetsProps {\r\n generatePresetUrl?: (preset: Record) => string\r\n className?: string\r\n isDark?: boolean\r\n}\r\n\r\nexport function Presets({ className, generatePresetUrl, isDark }: PresetsProps) {\r\n const [showPresets, setShowPresets] = React.useState(false)\r\n return (\r\n <>\r\n \r\n {showPresets && (\r\n setShowPresets(false)}\r\n generatePresetUrl={generatePresetUrl}\r\n />\r\n )}\r\n \r\n )\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 classname from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Input, InputHTMLProps, InputProps } from '../../main/components/input'\r\n\r\nenum BubblesInputTheme {\r\n light,\r\n dark,\r\n}\r\n\r\ninterface BubblesInputThemeReturn {\r\n label: React.HTMLProps\r\n input: InputProps\r\n}\r\n\r\nfunction getInputTheme(theme: BubblesInputTheme): BubblesInputThemeReturn {\r\n switch (theme) {\r\n case BubblesInputTheme.light:\r\n return {\r\n label: {\r\n className: 'text-gray-400',\r\n },\r\n input: {\r\n theme: 'none',\r\n rounding: 'none',\r\n inputClass: 'bg-[#4a505f] border border-[#585f72] focus:bg-[#535a6b] focus:border-[#707990]',\r\n },\r\n }\r\n case BubblesInputTheme.dark:\r\n return {\r\n label: {\r\n className: 'text-gray-500',\r\n },\r\n input: {},\r\n }\r\n }\r\n}\r\n\r\ninterface BubblesInputProps extends Omit, Omit {\r\n theme?: keyof typeof BubblesInputTheme\r\n}\r\n\r\nexport function BubblesInput({ theme = 'light', label, ...props }: BubblesInputProps) {\r\n const inputTheme = React.useMemo(() => getInputTheme(BubblesInputTheme[theme]), [theme])\r\n\r\n return (\r\n {label}}\r\n {...inputTheme.input}\r\n {...props}\r\n />\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Button } from '../../main/components/button'\r\nimport { Icon } from '../../main/components/icon'\r\nimport { MapSelect, MapSelectTheme } from '../maps/components/MapSelect'\r\nimport { BubblesInput } from './input'\r\nimport {\r\n BubbleSelectOption,\r\n MARKET_CAP_VALUE,\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\n\r\ntype OptionName =\r\n | 'x'\r\n | 'y'\r\n | 'size'\r\n | 'color'\r\n | 'idx'\r\n | 'sec'\r\n | 'ind'\r\n | 'cap'\r\n | 'sh_avgvol'\r\n | 'tickers'\r\n | 'excludeTickers'\r\n\r\ninterface SidebarContentProps {\r\n hasETFs?: boolean\r\n linkClassName?: string\r\n extendedFilters?: boolean\r\n theme?: keyof typeof MapSelectTheme\r\n selected: Partial>\r\n onChange: (value: Partial>) => void\r\n}\r\n\r\nexport function SidebarContent(props: SidebarContentProps) {\r\n const { selected, onChange } = props\r\n\r\n const handleSwitchAxis = React.useCallback(() => {\r\n onChange({ ...selected, x: selected.y, y: selected.x })\r\n }, [selected, onChange])\r\n\r\n const handleSelect = React.useCallback(\r\n (item: BubbleSelectOption, name: OptionName) => {\r\n onChange({ ...selected, [name]: item.value })\r\n },\r\n [selected, onChange]\r\n )\r\n\r\n const handleBlur = React.useCallback(\r\n (ev: React.ChangeEvent) => {\r\n const name = ev.currentTarget.name as OptionName\r\n const value = ev.currentTarget.value\r\n\r\n if (value !== (selected[name] ?? '')) {\r\n onChange({ ...selected, [name]: value })\r\n }\r\n },\r\n [selected, onChange]\r\n )\r\n\r\n const handleKeyDown = React.useCallback(\r\n (ev: React.KeyboardEvent) => {\r\n if (ev.key === 'Enter') {\r\n onChange({\r\n ...selected,\r\n [ev.currentTarget.name]: ev.currentTarget.value,\r\n })\r\n }\r\n },\r\n [selected, onChange]\r\n )\r\n\r\n const xOptions = React.useMemo(\r\n () =>\r\n xys.filter(\r\n (option) =>\r\n !(\r\n (selected.y === 'order' && ['ticker', 'sector'].includes(option.value)) ||\r\n (option.value === 'order' && ['', 'order', 'sector', 'ticker'].includes(selected.y!))\r\n )\r\n ),\r\n [selected.y]\r\n )\r\n\r\n const yOptions = React.useMemo(\r\n () =>\r\n xys.filter(\r\n (option) =>\r\n !(\r\n (selected.x === 'order' && ['ticker', 'sector'].includes(option.value)) ||\r\n (option.value === 'order' && ['', 'order', 'sector', 'ticker'].includes(selected.x!))\r\n )\r\n ),\r\n [selected.x]\r\n )\r\n\r\n const sizeOptions = React.useMemo(\r\n () =>\r\n sizes.map((option) => {\r\n if (props.hasETFs && option.value === MARKET_CAP_VALUE) {\r\n return { ...option, label: 'Market Capitalization', subtitle: 'ETFs: Assets Under Management' }\r\n }\r\n\r\n return option\r\n }),\r\n [props.hasETFs]\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 \r\n \r\n {props.extendedFilters && (\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","import { getFormattedDateString } from '../../header/utils'\r\nimport { ActionTypes } from '../constants/constants'\r\nimport AppDispatcher from '../dispatcher/appDispatcher'\r\nimport { BubbleNode, BubblesLoadParam, Range } from '../types'\r\nimport Store from './store'\r\n\r\nvar _isLoading: boolean\r\nvar _hasError: boolean\r\nvar _errorCode: any\r\n\r\nvar _params: BubblesLoadParam\r\n\r\nvar _bubbles: BubbleNode[] = []\r\nvar _bubblesInRange: BubbleNode[] = []\r\nvar _rangeX: Range\r\nvar _rangeY: Range\r\n\r\nvar _dataUpdateTimeString: string\r\nvar _modal = { shown: false, failed: false, completed: false, imgUrl: '', shareUrl: '' }\r\nclass BubbleStore extends Store {\r\n isLoading() {\r\n return _isLoading\r\n }\r\n\r\n hasError() {\r\n return _hasError\r\n }\r\n\r\n getErrorCode() {\r\n return _errorCode\r\n }\r\n\r\n getParams() {\r\n return _params\r\n }\r\n\r\n getBubbles() {\r\n return _bubbles\r\n }\r\n\r\n getBubblesInRange() {\r\n return _bubblesInRange\r\n }\r\n\r\n getRange(type: string) {\r\n if (type === 'x') {\r\n return _rangeX\r\n } else {\r\n return _rangeY\r\n }\r\n }\r\n\r\n getRanges() {\r\n return {\r\n x: _rangeX,\r\n y: _rangeY,\r\n }\r\n }\r\n\r\n getModal() {\r\n return _modal\r\n }\r\n\r\n getDataUpdateTimeString() {\r\n return _dataUpdateTimeString\r\n }\r\n}\r\nvar bubbleStore = new BubbleStore()\r\n\r\nvar parseRange = function (range: string) {\r\n try {\r\n var parts = range.split('|')\r\n return {\r\n min: parseFloat(parts[0]),\r\n max: parseFloat(parts[1]),\r\n }\r\n } catch {}\r\n return false\r\n}\r\n\r\nvar changeRange = function (type: string, range: Range) {\r\n if (type === 'x') {\r\n _rangeX = range\r\n } else {\r\n _rangeY = range\r\n }\r\n\r\n _bubblesInRange = _bubbles.filter(function (d) {\r\n var val = true\r\n if (_rangeX) {\r\n val = val && d.x >= _rangeX.min && d.x <= _rangeX.max\r\n }\r\n if (_rangeY) {\r\n val = val && d.y >= _rangeY.min && d.y <= _rangeY.max\r\n }\r\n return val\r\n })\r\n\r\n if (_rangeX) {\r\n _params.rangeX = _rangeX.min + '|' + _rangeX.max\r\n }\r\n if (_rangeY) {\r\n _params.rangeY = _rangeY.min + '|' + _rangeY.max\r\n }\r\n}\r\n\r\n// @ts-ignore\r\nbubbleStore.dispatchToken = AppDispatcher.register(function (payload: any) {\r\n var action = payload.action\r\n\r\n switch (action.type) {\r\n case ActionTypes.LOAD_DATA_STARTED:\r\n _params = action.params\r\n _isLoading = true\r\n _hasError = false\r\n bubbleStore.emitChange()\r\n break\r\n\r\n case ActionTypes.LOAD_DATA_COMPLETED:\r\n _isLoading = false\r\n _dataUpdateTimeString = getFormattedDateString()\r\n\r\n _bubbles = action.data.map((node: any) => {\r\n const parsedX = parseFloat(node.x)\r\n const parsedY = parseFloat(node.y)\r\n const parsedSize = parseFloat(node.size)\r\n const parsedColor = parseFloat(node.color)\r\n\r\n return {\r\n ...node,\r\n x: Number.isFinite(parsedX) ? parsedX : node.x,\r\n y: Number.isFinite(parsedY) ? parsedY : node.y,\r\n size: Number.isFinite(parsedSize) ? parsedSize : node.size,\r\n color: Number.isFinite(parsedColor) ? parsedColor : node.color,\r\n }\r\n })\r\n _bubbles.sort(function (a, b) {\r\n return b.size - a.size\r\n })\r\n\r\n _bubblesInRange = _bubbles\r\n\r\n if (_params.rangeX && parseRange(_params.rangeX)) {\r\n // @ts-ignore\r\n changeRange('x', parseRange(_params.rangeX))\r\n }\r\n\r\n if (_params.rangeY && parseRange(_params.rangeY)) {\r\n // @ts-ignore\r\n changeRange('y', parseRange(_params.rangeY))\r\n }\r\n\r\n bubbleStore.emitChange()\r\n break\r\n\r\n case ActionTypes.LOAD_DATA_FAILED:\r\n _isLoading = false\r\n _hasError = true\r\n _errorCode = action.errorStatus\r\n bubbleStore.emitChange()\r\n break\r\n\r\n case ActionTypes.CHANGE_RANGE:\r\n changeRange(action.rangeType, action.range)\r\n bubbleStore.emitChange()\r\n break\r\n\r\n case ActionTypes.PUBLISH_BUBBLES_STARTED:\r\n _modal.shown = true\r\n _modal.failed = false\r\n _modal.completed = false\r\n bubbleStore.emitChange()\r\n break\r\n\r\n case ActionTypes.PUBLISH_BUBBLES_COMPLETED:\r\n _modal.failed = false\r\n _modal.completed = true\r\n _modal.imgUrl = action.data.imgUrl\r\n _modal.shareUrl = action.data.shareUrl\r\n bubbleStore.emitChange()\r\n break\r\n\r\n case ActionTypes.PUBLISH_BUBBLES_FAILED:\r\n _modal.failed = true\r\n bubbleStore.emitChange()\r\n break\r\n\r\n case ActionTypes.PUBLISH_BUBBLES_CLOSE:\r\n _modal.shown = false\r\n bubbleStore.emitChange()\r\n break\r\n }\r\n})\r\n\r\nexport default bubbleStore\r\n","import { ActionTypes } from '../constants/constants'\r\nimport AppDispatcher from '../dispatcher/appDispatcher'\r\nimport { BubbleNode } from '../types'\r\nimport Store from './store'\r\n\r\nvar _hoveredNode: BubbleNode\r\nvar _hoveredColor: string\r\nclass HoverStore extends Store {\r\n getHoveredNode() {\r\n return _hoveredNode\r\n }\r\n\r\n getHoveredColor() {\r\n return _hoveredColor\r\n }\r\n}\r\nvar hoverStore = new HoverStore()\r\n\r\n// @ts-ignore\r\nhoverStore.dispatchToken = AppDispatcher.register(function (payload: any) {\r\n var action = payload.action\r\n\r\n switch (action.type) {\r\n case ActionTypes.SET_HOVERED_NODE: {\r\n if (action.node !== _hoveredNode) {\r\n _hoveredNode = action.node\r\n hoverStore.emitChange()\r\n }\r\n break\r\n }\r\n case ActionTypes.SET_HOVERED_COLOR: {\r\n if (action.color !== _hoveredColor) {\r\n _hoveredColor = action.color && !Number.isFinite(action.color) ? action.color : null\r\n hoverStore.emitChange()\r\n }\r\n break\r\n }\r\n }\r\n})\r\n\r\nexport default hoverStore\r\n","import { EventEmitter } from 'events'\r\n\r\nclass Store extends EventEmitter {\r\n static CHANGE_EVENT = 'change'\r\n\r\n emitChange() {\r\n this.emit(Store.CHANGE_EVENT)\r\n }\r\n\r\n addChangeListener(callback: (...args: any[]) => void) {\r\n this.on(Store.CHANGE_EVENT, callback)\r\n }\r\n\r\n removeChangeListener(callback: (...args: any[]) => void) {\r\n this.removeListener(Store.CHANGE_EVENT, callback)\r\n }\r\n}\r\n\r\nexport default Store\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 classnames from 'classnames'\r\nimport classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Select, SelectListProps, SelectProps } from '../../../main/components'\r\nimport { ButtonHTMLProps, ButtonProps } from '../../../main/components/button'\r\nimport { Icon } from '../../../main/components/icon'\r\nimport { isSelectItemGroup } from '../../../main/components/select/utils'\r\n\r\nexport enum MapSelectTheme {\r\n light,\r\n dark,\r\n}\r\n\r\ninterface MapSelectThemeReturn {\r\n label: React.HTMLProps\r\n button: ButtonProps & ButtonHTMLProps\r\n popover: SelectListProps\r\n}\r\n\r\nconst hasRedesign = FinvizSettings.hasRedesignEnabled\r\n\r\nfunction getMapSelectTheme(theme: MapSelectTheme): MapSelectThemeReturn | undefined {\r\n switch (theme) {\r\n case MapSelectTheme.dark:\r\n return {\r\n label: {\r\n className: 'text-gray-400',\r\n },\r\n button: {\r\n theme: 'transparent',\r\n rounding: 'none',\r\n className: 'w-full border border-[#585f72] bg-[#4a505f] hover:border-[#707990] hover:bg-[#535a6b]',\r\n rightContent: ,\r\n },\r\n popover: {\r\n rounding: 'none',\r\n theme: 'none',\r\n className:\r\n 'border border-[#585f72] bg-[#4a505f] [--bg-primary:74_80_95] [--border-primary:103,111,133] [--scrollbar-radius:0] dark:[--thumb-bg-hover:#262931] dark:[--thumb-bg:#363a46] dark:[--track-bg-hover:transparent] dark:[--track-bg:transparent]',\r\n },\r\n }\r\n\r\n case MapSelectTheme.light:\r\n return {\r\n label: { className: 'text-gray-500' },\r\n button: {\r\n rounding: 'none',\r\n className: 'w-full bg-primary',\r\n },\r\n popover: {\r\n rounding: 'none',\r\n className: classnames('overflow-y-auto max-h-80', {\r\n '[--scrollbar-radius:0]': !hasRedesign,\r\n }),\r\n },\r\n }\r\n }\r\n}\r\n\r\ninterface MapSelectProps extends Omit, 'theme'> {\r\n /**\r\n * Theme for the map select\r\n *\r\n * @default dark\r\n */\r\n theme?: keyof typeof MapSelectTheme\r\n}\r\n\r\nexport function MapSelect({\r\n label,\r\n 'aria-label': ariaLabel,\r\n theme = 'dark',\r\n items,\r\n onChange,\r\n ...props\r\n}: MapSelectProps) {\r\n const selectTheme = React.useMemo(() => getMapSelectTheme(MapSelectTheme[theme]), [theme])\r\n const itemOptions = React.useMemo(\r\n () =>\r\n items?.map((item) => {\r\n if (isSelectItemGroup(item)) {\r\n return {\r\n ...item,\r\n hasBorder: false,\r\n className: 'border-t border-gray-100 dark:border-gray-700',\r\n }\r\n }\r\n\r\n return item\r\n }),\r\n [items]\r\n )\r\n\r\n return (\r\n
\r\n {label && (\r\n

{label}

\r\n )}\r\n \r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\ninterface TopbarProps {\r\n className?: string\r\n navContent?: React.ReactNode\r\n contentClass?: string\r\n mapControls?: React.ReactNode\r\n}\r\n\r\nexport function Topbar(props: React.PropsWithChildren) {\r\n return (\r\n
\r\n {props.navContent && (\r\n \r\n {props.navContent}\r\n
\r\n )}\r\n
{props.children}
\r\n {props.mapControls}\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport * as utils from '../hover-chart'\r\n\r\nexport interface ImageProps\r\n extends React.DetailedHTMLProps, HTMLImageElement> {\r\n ticker: string\r\n}\r\n\r\nexport function HoverChart({ ticker, ...props }: ImageProps) {\r\n const referrerPolicy = utils.getReferrerPolicy()\r\n const dimensions = utils.getHoverChartDimensions()\r\n const url = utils.getHoverChartUrl(ticker, true)\r\n const srcSet = utils.getSrcSet(url)\r\n\r\n return \r\n}\r\n","import { UseMutationResult } from '@tanstack/react-query'\r\n\r\nimport { Button } from '../../../main/components/button'\r\nimport {\r\n Dialog,\r\n DialogBody,\r\n DialogDismiss,\r\n DialogFooter,\r\n DialogHeader,\r\n useDialogState,\r\n} from '../../../main/components/dialog'\r\nimport { ErrorView } from '../../../main/components/error-view'\r\nimport { Loading } from '../../../main/components/loading'\r\nimport { SocialShare } from '../../../main/components/social-share/SocialShare'\r\n\r\ninterface ShareResponse {\r\n imgUrl: string\r\n shareUrl: string\r\n}\r\n\r\ninterface ShareProps {\r\n state: UseMutationResult\r\n onShareClick: () => void\r\n className?: string\r\n disabled?: boolean\r\n base64ImageData: string | null\r\n}\r\n\r\nexport function Share(props: ShareProps) {\r\n const dialogState = useDialogState()\r\n\r\n return (\r\n <>\r\n {\r\n props.onShareClick()\r\n dialogState.show()\r\n }}\r\n >\r\n Share map\r\n \r\n\r\n \r\n Share map\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\ninterface ShareDialogBodyProps {\r\n isError: boolean\r\n isLoading: boolean\r\n data?: ResponseType\r\n base64ImageData: string | null\r\n}\r\n\r\nfunction ShareDialogBody(props: ShareDialogBodyProps) {\r\n if (props.isLoading) {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n if (props.isError || !props.data) {\r\n return (\r\n
\r\n \r\n There’s been an error sharing the map.\r\n
\r\n Please try sharing the map again and if the problem persists, please contact support.\r\n \r\n }\r\n />\r\n
\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n {document.title}\r\n
\r\n \r\n
\r\n \r\n )\r\n}\r\n","import logoBase64 from './assets/logo.png'\r\nimport { getTextFontFamily } from './getTextFontFamily'\r\nimport { isFirefoxDesktop } from './isMobile'\r\nimport { loadImage } from './loadImage'\r\nimport { getScaleRatio } from './retinafy'\r\n\r\nexport async function drawShareMap(canvasEl: HTMLCanvasElement, text: string[]) {\r\n const fontFamily = getTextFontFamily()\r\n\r\n const ratio = getScaleRatio()\r\n const width = canvasEl.width / ratio\r\n const height = canvasEl.height / ratio\r\n\r\n const canvas = document.createElement('canvas')\r\n const context = canvas.getContext('2d', isFirefoxDesktop() ? { willReadFrequently: true } : undefined)!\r\n canvas.width = width\r\n canvas.height = height + 22\r\n\r\n // Background\r\n context.fillStyle = '#fff'\r\n context.fillRect(0, 0, width, height)\r\n\r\n // Logo\r\n const logo = await loadImage(logoBase64)\r\n context.drawImage(logo, 2, 4)\r\n\r\n // Labels\r\n const label = text.map((t) => t.toUpperCase())\r\n let x = width\r\n const y = 11\r\n\r\n context.textBaseline = 'middle'\r\n context.textAlign = 'right'\r\n context.font = '9pt ' + fontFamily\r\n for (let i = label.length - 1; i >= 0; i--) {\r\n const text = label[i]\r\n let textWidth = context.measureText(text).width\r\n\r\n context.fillStyle = '#4c5261'\r\n context.fillText(text, x, y)\r\n\r\n if (i > 0) {\r\n const divider = ' • '\r\n context.fillStyle = '#5faaf4'\r\n context.fillText(divider, x - textWidth, y)\r\n textWidth = textWidth + context.measureText(divider).width\r\n }\r\n\r\n x = x - textWidth\r\n }\r\n\r\n context.drawImage(canvasEl, 0, 0, width * ratio, height * ratio, 0, 22, width, height)\r\n\r\n return canvas.toDataURL()\r\n}\r\n","export function getTextFontFamily() {\r\n return 'Lato'\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 _percentHundred: 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 _percentHundred: redGreenGradientBubbles,\r\n}\r\n\r\nexport const gradientSmall = redGreenGradientSmall\r\n","import { HTMLAttributeReferrerPolicy } from 'react'\r\n\r\nimport { encodeQueryString } from '../queryString'\r\n\r\nconst DEFAULT_OVERLAYS =\r\n '&o[0][ot]=sma&o[0][op]=50&o[0][oc]=FF8F33C6&o[1][ot]=sma&o[1][op]=200&o[1][oc]=DCB3326D&o[2][ot]=patterns&o[2][op]=&o[2][oc]=000'\r\n\r\nexport function getHoverChartUrl(\r\n ticker: string,\r\n escaped: boolean = false,\r\n timeframe = FinvizSettings.hoverCharts?.stock?.timeframe,\r\n dateRange = FinvizSettings.hoverCharts?.stock?.dateRange\r\n): string {\r\n const theme = FinvizSettings.hasDarkTheme ? 'd' : undefined\r\n const overlays = FinvizSettings.hasUserPremium && FinvizSettings.hoverCharts?.stock?.patterns ? DEFAULT_OVERLAYS : ''\r\n const query = encodeQueryString({\r\n cs: 'm',\r\n t: ticker,\r\n tf: timeframe ?? 'd',\r\n ct: 'candle_stick',\r\n r: dateRange,\r\n tm: theme,\r\n })\r\n\r\n let imgUrl = `${FinvizSettings.nodeChartsDomain}/chart.ashx?${query}${overlays}`\r\n\r\n if (escaped) {\r\n // \"Escaping\" [ and ] because of how boxover.js works\r\n imgUrl = imgUrl.replace(/\\[/g, '[[').replace(/]/g, ']]')\r\n }\r\n return imgUrl\r\n}\r\n\r\nexport function getHoverChartDimensions() {\r\n switch (FinvizSettings.hoverCharts?.stock?.timeframe) {\r\n case 'i3':\r\n case 'i15':\r\n return { width: 584, height: 180 }\r\n case 'i5':\r\n return { width: 376, height: 180 }\r\n case 'd':\r\n if (FinvizSettings.hoverCharts?.stock?.patterns) return { width: 464, height: 230 }\r\n return { width: 324, height: 180 }\r\n default:\r\n return { width: 324, height: 180 }\r\n }\r\n}\r\n\r\nexport function getReferrerPolicy(): HTMLAttributeReferrerPolicy {\r\n return 'no-referrer-when-downgrade'\r\n}\r\n\r\nexport function getHoverChartImg(\r\n ticker: string,\r\n escaped: boolean = false,\r\n timeframe = FinvizSettings.hoverCharts?.stock?.timeframe,\r\n dateRange?: string\r\n) {\r\n const chartSize = getHoverChartDimensions()\r\n const referrerPolicy = getReferrerPolicy()\r\n const url = getHoverChartUrl(ticker, escaped, timeframe, dateRange)\r\n const srcSet = getSrcSet(url)\r\n const srcsetString = srcSet?.length ? ` srcset='${srcSet}'` : ''\r\n\r\n return {\r\n img: ``,\r\n ...chartSize,\r\n }\r\n}\r\n\r\nexport function getSrcSet(url: string) {\r\n // You must keep a space after , for refresh to work\r\n return `${url} 1x, ${url}&sf=2 2x`\r\n}\r\n","/**\r\n * Load image before we can render it in canvas\r\n */\r\nexport function loadImage(src: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n var image = new Image()\r\n\r\n image.onload = function () {\r\n resolve(image)\r\n }\r\n\r\n image.onerror = function () {\r\n reject()\r\n }\r\n\r\n image.src = src\r\n })\r\n}\r\n","export function getScaleRatio() {\r\n return window.devicePixelRatio ?? 1\r\n}\r\n\r\nexport function retinafy(\r\n canvas: HTMLCanvasElement | undefined | null,\r\n context: CanvasRenderingContext2D | undefined,\r\n width: number,\r\n height: number\r\n) {\r\n if (!canvas || !context) return\r\n\r\n const ratio = getScaleRatio()\r\n\r\n canvas.width = width * ratio\r\n canvas.height = height * ratio\r\n canvas.style.width = width + 'px'\r\n canvas.style.height = height + 'px'\r\n context.scale(ratio, ratio)\r\n\r\n return ratio\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonRoundingType, ButtonSizeType, ButtonThemeType } from '../button'\r\nimport { ButtonGroup, ButtonGroupProps } from '../button-group'\r\nimport { SelectItem } from '../select/types'\r\n\r\nexport type ButtonSwitchItem = Pick, 'value' | 'label' | 'disabled'>\r\n\r\nexport interface ButtonSwitchProps> extends ButtonGroupProps {\r\n /**\r\n * Label to display above the select\r\n */\r\n label?: string\r\n\r\n /**\r\n * Class names for label\r\n */\r\n labelClassNames?: string\r\n\r\n /**\r\n * Array of items to display as button options\r\n */\r\n items: ItemType[]\r\n\r\n /**\r\n * Currently selected value\r\n */\r\n value?: ValueType\r\n\r\n /**\r\n * Default value when uncontrolled\r\n */\r\n defaultValue?: ValueType\r\n\r\n /**\r\n * Callback when item changes. Called for both controlled and uncontrolled selects\r\n */\r\n onChange?: (value: ItemType) => void\r\n\r\n /**\r\n * If applied styles will be as if the component was enabled but clicking buttons won't do anything\r\n */\r\n readonly?: boolean\r\n\r\n /**\r\n * Optional className for the ButtonGroup wrapper\r\n */\r\n className?: string\r\n\r\n /**\r\n * Set the button theme when it is selected\r\n */\r\n activeTheme?: ButtonThemeType\r\n\r\n /**\r\n * Size of the button\r\n *\r\n * @default \"regular\"\r\n */\r\n size?: ButtonSizeType\r\n\r\n /**\r\n * Data test id\r\n *\r\n * @default \"\"\r\n */\r\n 'data-testid'?: string\r\n\r\n groupRounding?: ButtonRoundingType\r\n}\r\n\r\nexport function ButtonSwitch>(\r\n props: Omit, 'children'>\r\n) {\r\n const {\r\n items,\r\n value: controlledValue,\r\n label,\r\n defaultValue,\r\n onChange,\r\n className = 'flex p-0.5',\r\n size,\r\n labelClassNames,\r\n rounding = 'regular',\r\n groupRounding = 'regular',\r\n activeTheme = 'blue',\r\n readonly = false,\r\n ...restProps\r\n } = props\r\n const [internalValue, setInternalValue] = React.useState(defaultValue)\r\n const value = controlledValue !== undefined ? controlledValue : internalValue\r\n\r\n const handleChange = React.useCallback(\r\n (newValue: ItemType) => {\r\n setInternalValue(newValue.value)\r\n onChange?.(newValue)\r\n },\r\n [onChange]\r\n )\r\n\r\n return (\r\n
\r\n \r\n {items.map((option, index) => (\r\n handleChange(option)}\r\n >\r\n {option.label}\r\n \r\n ))}\r\n \r\n {label && {label}}\r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { ForwardedRef, HTMLProps, PropsWithChildren, ReactNode, forwardRef } from 'react'\r\n\r\nimport { Icon } from './icon'\r\n\r\nexport enum ColorVariant {\r\n violet = 'violet',\r\n emerald = 'emerald',\r\n orange = 'orange',\r\n teal = 'teal',\r\n pink = 'pink',\r\n lime = 'lime',\r\n purple = 'purple',\r\n green = 'green',\r\n yellow = 'yellow',\r\n blue = 'blue',\r\n red = 'red',\r\n gray = 'gray',\r\n default = 'default',\r\n darkGray = 'darkGray',\r\n}\r\n\r\nexport enum CheckboxSize {\r\n none = '', // Do not set fixed size\r\n small = 'min-h-6 text-2xs', // 24px\r\n regular = 'min-h-7 text-sm', // 28px\r\n}\r\nexport type CheckboxSizeType = keyof typeof CheckboxSize\r\n\r\ninterface CheckboxProps extends Omit, 'label' | 'size'> {\r\n /**\r\n * Text that gets displayed on the right side of the checkbox\r\n */\r\n label?: ReactNode\r\n\r\n checked: boolean\r\n\r\n /**\r\n * Size of the checkbox\r\n *\r\n * @default \"regular\"\r\n */\r\n size?: CheckboxSizeType\r\n\r\n /**\r\n * Color of the checkbox\r\n *\r\n * @default \"default\"\r\n */\r\n color?: ColorVariant\r\n}\r\n\r\nfunction CheckboxComponent(\r\n {\r\n className,\r\n label,\r\n size = 'regular',\r\n color = ColorVariant.default,\r\n children,\r\n ...props\r\n }: PropsWithChildren,\r\n ref: ForwardedRef\r\n) {\r\n const checked = props.checked ?? props.defaultChecked\r\n\r\n return (\r\n \r\n
\r\n \r\n {checked && (\r\n \r\n )}\r\n
\r\n {label ?? children}\r\n \r\n )\r\n}\r\n\r\nexport const Checkbox = forwardRef(CheckboxComponent)\r\n","import classnames from 'classnames'\r\nimport { HTMLProps, PropsWithChildren, memo, useCallback, useLayoutEffect, useRef, useState } from 'react'\r\n\r\nexport interface Interaction {\r\n left: number\r\n top: number\r\n}\r\n\r\n/**\r\n * Clamp value between two bounds\r\n */\r\nfunction clamp(num: number, min = 0, max = 1) {\r\n return num > max ? max : num < min ? min : num\r\n}\r\n\r\n/**\r\n * Check if an event was triggered by touch\r\n */\r\nfunction isTouch(event: MouseEvent | TouchEvent): event is TouchEvent {\r\n return 'touches' in event\r\n}\r\n\r\n/**\r\n * Returns a relative position of the pointer inside the node's bounding box\r\n */\r\nfunction getRelativePosition(node: HTMLDivElement, event: MouseEvent | TouchEvent): Interaction {\r\n const rect = node.getBoundingClientRect()\r\n\r\n // Get user's pointer position from `touches` array if it's a `TouchEvent`\r\n const pointer = isTouch(event) ? event.touches[0] : (event as MouseEvent)\r\n\r\n return {\r\n left: clamp((pointer.pageX - (rect.left + window.pageXOffset)) / rect.width),\r\n top: clamp((pointer.pageY - (rect.top + window.pageYOffset)) / rect.height),\r\n }\r\n}\r\n\r\n/**\r\n * Browsers introduced an intervention, making touch events passive by default.\r\n * This workaround removes `preventDefault` call from the touch handlers.\r\n * @see https://github.com/facebook/react/issues/19651\r\n */\r\nfunction preventDefaultMove(event: MouseEvent | TouchEvent) {\r\n !isTouch(event) && event.preventDefault()\r\n}\r\n\r\ninterface Props {\r\n onMove: (interaction: Interaction) => void\r\n onKey: (offset: Interaction) => void\r\n}\r\n\r\nfunction DraggablePickerComponent({\r\n onMove,\r\n onKey,\r\n className,\r\n ...props\r\n}: PropsWithChildren & HTMLProps) {\r\n const container = useRef(null)\r\n const hasTouched = useRef(false)\r\n const [isDragging, setDragging] = useState(false)\r\n\r\n /**\r\n * Prevent mobile browsers from handling mouse events (conflicting with touch ones).\r\n * If we detected a touch interaction before, we prefer reacting to touch events only.\r\n */\r\n const isValid = useRef((event: MouseEvent | TouchEvent): boolean => {\r\n if (hasTouched.current && !isTouch(event)) return false\r\n if (!hasTouched.current) hasTouched.current = isTouch(event)\r\n return true\r\n })\r\n\r\n const handleMove = useCallback(\r\n (event: MouseEvent | TouchEvent) => {\r\n preventDefaultMove(event)\r\n\r\n // If user moves the pointer outside of the window or iframe bounds and release it there,\r\n // `mouseup`/`touchend` won't be fired. In order to stop the picker from following the cursor\r\n // after the user has moved the mouse/finger back to the document, we check `event.buttons`\r\n // and `event.touches`. It allows us to detect that the user is just moving his pointer\r\n // without pressing it down\r\n const isDown = isTouch(event) ? event.touches.length > 0 : event.buttons > 0\r\n\r\n if (isDown && container.current) {\r\n onMove(getRelativePosition(container.current, event))\r\n } else {\r\n setDragging(false)\r\n }\r\n },\r\n [onMove]\r\n )\r\n\r\n const handleMoveStart = useCallback(\r\n ({ nativeEvent }: React.MouseEvent | React.TouchEvent) => {\r\n preventDefaultMove(nativeEvent)\r\n\r\n if (!isValid.current(nativeEvent)) return\r\n\r\n // The node/ref must actually exist when user start an interaction.\r\n // We won't suppress the ESLint warning though, as it should probably be something to be aware of.\r\n onMove(getRelativePosition(container.current!, nativeEvent))\r\n setDragging(true)\r\n },\r\n [onMove]\r\n )\r\n\r\n const handleKeyDown = useCallback(\r\n (event: React.KeyboardEvent) => {\r\n const keyCode = event.which || event.keyCode\r\n\r\n // Ignore all keys except arrow ones\r\n if (keyCode < 37 || keyCode > 40) return\r\n // Do not scroll page by arrow keys when document is focused on the element\r\n event.preventDefault()\r\n // Send relative offset to the parent component.\r\n // We use codes (37←, 38↑, 39→, 40↓) instead of keys ('ArrowRight', 'ArrowDown', etc)\r\n // to reduce the size of the library\r\n onKey({\r\n left: keyCode === 39 ? 0.05 : keyCode === 37 ? -0.05 : 0,\r\n top: keyCode === 40 ? 0.05 : keyCode === 38 ? -0.05 : 0,\r\n })\r\n },\r\n [onKey]\r\n )\r\n\r\n const handleMoveEnd = useCallback(() => setDragging(false), [])\r\n\r\n const toggleDocumentEvents = useCallback(\r\n (state: boolean) => {\r\n // add or remove additional pointer event listeners\r\n const toggleEvent = state ? window.addEventListener : window.removeEventListener\r\n toggleEvent(hasTouched.current ? 'touchmove' : 'mousemove', handleMove)\r\n toggleEvent(hasTouched.current ? 'touchend' : 'mouseup', handleMoveEnd)\r\n },\r\n [handleMove, handleMoveEnd]\r\n )\r\n\r\n useLayoutEffect(() => {\r\n toggleDocumentEvents(isDragging)\r\n return () => {\r\n isDragging && toggleDocumentEvents(false)\r\n }\r\n }, [isDragging, toggleDocumentEvents])\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const DraggablePicker = memo(DraggablePickerComponent)\r\n","interface PointerProps {\r\n className?: string\r\n top?: number\r\n left: number\r\n color: string\r\n}\r\n\r\nexport function Pointer({ color, left, top = 0.5 }: PointerProps) {\r\n return (\r\n \r\n
\r\n
\r\n )\r\n}\r\n","/**\r\n * Keep this file in sync with `app/utils/colors.ts` in charts repo\r\n * */\r\n\r\nexport interface RGBA {\r\n r: number\r\n g: number\r\n b: number\r\n a: number\r\n}\r\n\r\nexport interface HSVA {\r\n h: number\r\n s: number\r\n v: number\r\n a: number\r\n}\r\n\r\nexport interface HSLA {\r\n h: number\r\n s: number\r\n l: number\r\n a: number\r\n}\r\n\r\n/**\r\n * Convert Hex string to RGBA object.\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hexStringToRGBA(hexString: string): RGBA {\r\n const hexColor = removeHashSymbol(hexString)\r\n let r: string | number = 0\r\n let g: string | number = 0\r\n let b: string | number = 0\r\n let a: string | number = 255\r\n\r\n // 3 digits\r\n if (hexColor.length === 3 || hexColor.length === 4) {\r\n r = '0x' + hexColor[0] + hexColor[0]\r\n g = '0x' + hexColor[1] + hexColor[1]\r\n b = '0x' + hexColor[2] + hexColor[2]\r\n // Get channel if defined\r\n a = hexColor.length === 4 ? '0x' + hexColor[3] + hexColor[3] : a\r\n\r\n // 6 digits\r\n } else if (hexColor.length === 6 || hexColor.length === 8) {\r\n r = '0x' + hexColor[0] + hexColor[1]\r\n g = '0x' + hexColor[2] + hexColor[3]\r\n b = '0x' + hexColor[4] + hexColor[5]\r\n // Get channel if defined\r\n a = hexColor.length === 8 ? '0x' + hexColor[6] + hexColor[7] : a\r\n }\r\n\r\n return { r: Number(r), g: Number(g), b: Number(b), a: Math.min(Math.round((Number(a) / 255) * 100) / 100, 1) }\r\n}\r\n\r\n/**\r\n * Convert HEX string to HSVA color representation.\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n */\r\nexport function hexStringToHSVA(hexString: string) {\r\n return rgbaToHSVA(hexStringToRGBA(hexString))\r\n}\r\n\r\n/**\r\n * Convert HEX string to HSLA color representation.\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n */\r\nexport function hexStringToHSLA(hexString: string) {\r\n return rgbaToHSLA(hexStringToRGBA(hexString))\r\n}\r\n\r\n/**\r\n * Convert alpha value to hex value\r\n *\r\n * Input: [0,1]\r\n *\r\n * Output: alpha in HEX format\r\n */\r\nexport function alphaToHex(alpha: number) {\r\n return Math.max(Math.min(Math.round(alpha * 255), 255), 0)\r\n .toString(16)\r\n .padStart(2, '0')\r\n}\r\n\r\n/**\r\n * Convert RGBA color to HEX string.\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: color in hex6 or hex8 depending on whether or not alpha is enabled\r\n */\r\nexport function rgbaToHexString(color: RGBA, alpha = false) {\r\n const r = color.r.toString(16)\r\n const g = color.g.toString(16)\r\n const b = color.b.toString(16)\r\n const hexString = '#' + r.padStart(2, '0') + g.padStart(2, '0') + b.padStart(2, '0')\r\n\r\n if (!alpha || color.a === 1) {\r\n return hexString\r\n }\r\n\r\n return `${hexString}${alphaToHex(color.a)}`\r\n}\r\n\r\n/**\r\n * Convert HSVA object to HEX string\r\n *\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hsvaToHEXString(color: HSVA, alpha = false) {\r\n const rgbaColor = hsvaToRGBA(color)\r\n\r\n return rgbaToHexString(rgbaColor, alpha)\r\n}\r\n\r\n/**\r\n * Convert HSLA object to HEX string\r\n *\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hslaToHexString(color: HSLA, alpha = false) {\r\n const rgbaColor = hslaToRGBA(color)\r\n\r\n return rgbaToHexString(rgbaColor, alpha)\r\n}\r\n\r\n/**\r\n * Convert RGBA color to HSVA\r\n * @see https://stackoverflow.com/a/54070620/6662683\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n */\r\nexport function rgbaToHSVA(color: RGBA): HSVA {\r\n const r = color.r / 255\r\n const g = color.g / 255\r\n const b = color.b / 255\r\n\r\n const v = Math.max(r, g, b)\r\n const c = v - Math.min(r, g, b)\r\n const h = c && (v === r ? (g - b) / c : v === g ? 2 + (b - r) / c : 4 + (r - g) / c)\r\n\r\n return {\r\n h: 60 * (h < 0 ? h + 6 : h),\r\n s: v ? c / v : 0,\r\n v: v,\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert RGBA to HSLA\r\n * @see https://stackoverflow.com/a/54071699/6662683\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n */\r\nexport function rgbaToHSLA(color: RGBA): HSLA {\r\n const r = color.r / 255\r\n const g = color.g / 255\r\n const b = color.b / 255\r\n\r\n const v = Math.max(r, g, b)\r\n const c = v - Math.min(r, g, b)\r\n const f = 1 - Math.abs(v + v - c - 1)\r\n const h = c && (v === r ? (g - b) / c : v === g ? 2 + (b - r) / c : 4 + (r - g) / c)\r\n\r\n return {\r\n h: 60 * (h < 0 ? h + 6 : h),\r\n s: f ? c / f : 0,\r\n l: (v + v - c) / 2,\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSVA color to RGBA\r\n * @see https://stackoverflow.com/a/54024653/6662683\r\n *\r\n * Input: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hsvaToRGBA(color: HSVA): RGBA {\r\n const f = (n: number, k = (n + color.h / 60) % 6) => color.v - color.v * color.s * Math.max(Math.min(k, 4 - k, 1), 0)\r\n\r\n return {\r\n r: Math.round(f(5) * 255),\r\n g: Math.round(f(3) * 255),\r\n b: Math.round(f(1) * 255),\r\n a: Math.round(color.a * 100) / 100,\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSLA color to RGBA\r\n * @see https://stackoverflow.com/a/54014428/6662683\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hslaToRGBA(color: HSLA): RGBA {\r\n const a = color.s * Math.min(color.l, 1 - color.l)\r\n const f = (n: number, k = (n + color.h / 30) % 12) => color.l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)\r\n\r\n return {\r\n r: Math.round(f(0) * 255),\r\n g: Math.round(f(8) * 255),\r\n b: Math.round(f(4) * 255),\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert RGBA color to rgba() string\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: rgba(r, g, b, a)\r\n */\r\nexport function rgbaToRGBAString(color: RGBA) {\r\n return `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`\r\n}\r\n\r\n/**\r\n * Convert rgba() string to RGBA color\r\n *\r\n * Input: rgba(r, g, b, a)\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function rgbaStringToObject(color: string) {\r\n const colorParts = /^rgba?\\(([0-9]{1,3})[ ,]+([0-9]{1,3})[ ,]+([0-9]{1,3})[ ,]*([01].?[0-9]*)?\\)$/.exec(color)\r\n const [red, green, blue, alpha = '1'] = colorParts?.slice(1) || [0, 0, 0, 1].map(String)\r\n return {\r\n r: Number.parseInt(red),\r\n g: Number.parseInt(green),\r\n b: Number.parseInt(blue),\r\n a: Number.parseFloat(alpha),\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSLA color to hsla() string\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: hsla(h, s, l, a)\r\n */\r\nexport function hslaToHSLAString(color: HSLA) {\r\n return `hsla(${Math.round(color.h)}, ${Math.round(color.s * 10000) / 100}%, ${Math.round(color.l * 10000) / 100}%, ${\r\n color.a\r\n })`\r\n}\r\n\r\nexport function removeHashSymbol(strColor: string) {\r\n return strColor.replace(/#/g, '')\r\n}\r\n\r\n/**\r\n * Check if the param is a valid color by setting it as style\r\n */\r\nexport function isValidColor(strColor: string) {\r\n const isRgb = strColor.startsWith('rgba')\r\n const s = new Option().style\r\n\r\n s.color = isRgb ? strColor : `#${removeHashSymbol(strColor)}`\r\n\r\n return s.color !== ''\r\n}\r\n\r\n/**\r\n * Normalize color to be a hex value\r\n */\r\nexport function convertColorToHEX(strColor: string) {\r\n const isRgb = getIsRgb(strColor)\r\n\r\n if (isRgb) {\r\n return rgbaToHexString(rgbaStringToObject(strColor), true)\r\n }\r\n\r\n return strColor\r\n}\r\n\r\n/**\r\n * Returns true if color is rgb or rgba\r\n */\r\nexport function getIsRgb(strColor: string, isAlphaAllowed = true) {\r\n const rgbKeys = ['rgb']\r\n if (isAlphaAllowed) {\r\n rgbKeys.push('rgba')\r\n }\r\n return rgbKeys.some((startsWith) => strColor.startsWith(startsWith))\r\n}\r\n\r\n/**\r\n * Convert any color format to HSVA (internal color picker representation)\r\n */\r\nexport function getHSVAFromColor(strColor: string) {\r\n if (getIsRgb(strColor)) {\r\n return rgbaToHSVA(rgbaStringToObject(strColor))\r\n }\r\n\r\n return hexStringToHSVA(strColor)\r\n}\r\n\r\n/**\r\n * Stringify HSVA color representation into a output format\r\n */\r\nexport function stringifyHSVAColor(color: HSVA, output: 'rgba' | 'hex', canSelectAlpha?: boolean) {\r\n switch (output) {\r\n case 'rgba':\r\n return rgbaToRGBAString(hsvaToRGBA(color))\r\n default:\r\n return hsvaToHEXString(color, canSelectAlpha)\r\n }\r\n}\r\n\r\n/**\r\n * Get luma value from RGBA color using the Rec. 709 coefficients\r\n * @see https://en.wikipedia.org/wiki/Luma_%28video%29\r\n *\r\n * If luma is >= 165 the foreground color should be dark\r\n */\r\nexport function getLumaFromRGBA(color: RGBA) {\r\n return 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b\r\n}\r\n\r\n/**\r\n * Checks if luma is >= 165 or alpha < 0.3\r\n */\r\nexport function getIsColorTooLightOrTransparent(color: RGBA) {\r\n return getLumaFromRGBA(color) >= 165 || color.a < 0.5\r\n}\r\n\r\n/**\r\n * Set specific alpha for a hex color\r\n */\r\nexport function getHEXWithSpecificAplha(color: string, alpha = 1) {\r\n const rgbaColor = hexStringToRGBA(color)\r\n return rgbaToHexString({ ...rgbaColor, a: alpha }, true)\r\n}\r\n\r\n/**\r\n * Get rgba from valid color string\r\n */\r\nexport function getRGBAValueFromValidColorString(value: string) {\r\n if (getIsRgb(value)) return rgbaToRGBAString(rgbaStringToObject(value))\r\n return rgbaToRGBAString(hexStringToRGBA(value))\r\n}\r\n","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface LightnessProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nexport function Alpha({ color, onChange }: LightnessProps) {\r\n const changeLightness = useCallback((pos: Interaction) => onChange({ ...color, a: 1 - pos.left }), [onChange, color])\r\n\r\n const gradientPreview = useMemo(() => {\r\n const gradientFrom = hsvaToHEXString({ ...color, a: 1 })\r\n const gradientTo = hsvaToHEXString({ ...color, a: 0 }, true)\r\n\r\n return `linear-gradient(90deg, ${gradientFrom}, ${gradientTo})`\r\n // Don’t recalculate when alpha changes\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [color.h, color.s, color.v])\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n}\r\n","import { Icon } from '../icon'\r\nimport { HSVA, hexStringToHSVA } from './util'\r\n\r\nconst DEFAULT_COLORS = [\r\n { title: 'Rose', value: '#f43f5e' },\r\n { title: 'Pink', value: '#db2777' },\r\n { title: 'Fuchsia', value: '#c026d3' },\r\n { title: 'Purple', value: '#9333ea' },\r\n { title: 'Violet', value: '#7c3aed' },\r\n { title: 'Indigo', value: '#4f46e5' },\r\n { title: 'Blue', value: '#2563eb' },\r\n { title: 'Light Blue', value: '#0284c7' },\r\n { title: 'Cyan', value: '#0891b2' },\r\n { title: 'Teal', value: '#0d9488' },\r\n { title: 'Emerald', value: '#059669' },\r\n { title: 'Green', value: '#16a34a' },\r\n { title: 'Lime', value: '#65a30d' },\r\n { title: 'Yellow', value: '#eab308' },\r\n { title: 'Amber', value: '#d97706' },\r\n { title: 'Red', value: '#dc2626' },\r\n]\r\n\r\ninterface ColorItem {\r\n /**\r\n * Name of the color\r\n */\r\n title: string\r\n\r\n /**\r\n * Hex value\r\n */\r\n value: string\r\n}\r\n\r\ninterface ColorPaletteProps {\r\n /**\r\n * Current selected color in HEX format (supports HEX8 for alpha)\r\n */\r\n color: string\r\n\r\n /**\r\n * List of colors to display in the palette\r\n *\r\n * @default DEFAULT_COLORS\r\n */\r\n colors?: ColorItem[]\r\n\r\n /**\r\n * Callback when user picks a color\r\n */\r\n onChange: (color: string, originalColor: HSVA) => void\r\n}\r\n\r\nexport function ColorPalette({ color, colors = DEFAULT_COLORS, onChange }: ColorPaletteProps) {\r\n const lowerCaseColor = color.toLowerCase()\r\n\r\n return (\r\n
\r\n {colors.map((colorObj) => {\r\n const isSelected = lowerCaseColor.startsWith(colorObj.value)\r\n return (\r\n onChange(colorObj.value, hexStringToHSVA(colorObj.value))}\r\n >\r\n {isSelected && }\r\n
\r\n )\r\n })}\r\n
\r\n )\r\n}\r\n","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface HueSaturationProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nfunction getPositionFromHSLA(color: HSVA) {\r\n return {\r\n left: color.h / 360,\r\n top: 1 - color.s,\r\n }\r\n}\r\n\r\nexport function HueSaturation({ color, onChange }: HueSaturationProps) {\r\n const position = useMemo(() => getPositionFromHSLA(color), [color])\r\n\r\n const colorPreview = useMemo(() => hsvaToHEXString({ h: color.h, s: color.s, v: 1, a: 1 }), [color.h, color.s])\r\n\r\n const changeSaturation = useCallback(\r\n (pos: Interaction) =>\r\n onChange({\r\n h: Math.round(pos.left * 360),\r\n s: 1 - pos.top,\r\n v: 1,\r\n a: color.a,\r\n }),\r\n [color.a, onChange]\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","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface LightnessProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nexport function Lightness({ color, onChange }: LightnessProps) {\r\n const changeLightness = useCallback((pos: Interaction) => onChange({ ...color, v: 1 - pos.left }), [onChange, color])\r\n\r\n const colorPreview = useMemo(\r\n () => hsvaToHEXString({ h: color.h, s: color.s, v: color.v, a: 1 }),\r\n [color.h, color.s, color.v]\r\n )\r\n\r\n const gradientPreview = useMemo(() => {\r\n const gradientFrom = hsvaToHEXString({ h: color.h, s: color.s, v: 1, a: 1 })\r\n const gradientTo = hsvaToHEXString({ h: color.h, s: color.s, v: 0, a: 1 })\r\n\r\n return `linear-gradient(90deg, ${gradientFrom}, ${gradientTo})`\r\n }, [color.h, color.s])\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { Icon, IconNameType, isValidIconName } from '../icon'\r\nimport { getIsColorTooLightOrTransparent, hexStringToRGBA } from './util'\r\n\r\ninterface ColorPreviewProps {\r\n /**\r\n * Name of an icon or JSX.Element\r\n */\r\n icon?: JSX.Element | IconNameType\r\n\r\n /**\r\n * One or more colors to show in the preview\r\n */\r\n color: string | string[]\r\n\r\n /**\r\n * Wrapper classname\r\n */\r\n className?: string\r\n}\r\n\r\nexport function ColorPreview({ icon, color, className }: ColorPreviewProps) {\r\n const colors = Array.isArray(color) ? color : [color]\r\n const isTooLight = getIsColorTooLightOrTransparent(hexStringToRGBA(colors[0]))\r\n return (\r\n \r\n {icon && (\r\n
\r\n {isValidIconName(icon) ? (\r\n \r\n ) : (\r\n icon\r\n )}\r\n
\r\n )}\r\n {colors.map((color, index) => (\r\n //   has to be there because of a bug on safari which ignores h-full when empty element\r\n
\r\n  \r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React, { ForwardedRef, useCallback, useEffect, useState } from 'react'\r\n\r\nimport { Input, InputComponentProps } from '../input'\r\nimport { ColorPreview } from './color-preview'\r\nimport { ColorPickerProps } from './picker'\r\nimport * as colorUtil from './util'\r\n\r\ninterface PickerInputProps extends Omit {\r\n color: ColorPickerProps['color']\r\n onChange: ColorPickerProps['onChange']\r\n\r\n /*\r\n * Is color preview square visible\r\n *\r\n * @default true\r\n * */\r\n hasColorPreview?: boolean\r\n}\r\nexport const PickerInput = React.forwardRef(\r\n (\r\n { color, inputClass, hasColorPreview = true, onChange, ...props }: PickerInputProps,\r\n ref: ForwardedRef\r\n ) => {\r\n const [colorInput, setColorInput] = useState(colorUtil.removeHashSymbol(color))\r\n const isRgba = colorUtil.getIsRgb(colorInput)\r\n\r\n useEffect(() => {\r\n setColorInput(colorUtil.removeHashSymbol(color))\r\n }, [color])\r\n\r\n const handleColorInputChange = useCallback(\r\n (event: React.KeyboardEvent) => {\r\n const value = colorUtil.removeHashSymbol(event.currentTarget.value)\r\n const isRgba = value.startsWith('rgba')\r\n const colorValue = isRgba ? value : `#${value}`\r\n\r\n setColorInput(value)\r\n if ((value.length >= 6 || (isRgba && value.length >= 16)) && colorUtil.isValidColor(colorValue)) {\r\n onChange(colorValue, colorUtil.hexStringToHSVA(colorValue))\r\n }\r\n },\r\n [onChange]\r\n )\r\n return (\r\n \r\n {hasColorPreview && (\r\n
\r\n \r\n
\r\n )}\r\n {!isRgba && #}\r\n
\r\n }\r\n onChange={handleColorInputChange}\r\n />\r\n )\r\n }\r\n)\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport React, { ReactNode, useCallback, useEffect, useRef, useState } from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { Button } from '../button'\r\nimport { Popover, PopoverTrigger, usePopoverState } from '../popover'\r\nimport { Alpha } from './alpha'\r\nimport { ColorPalette } from './color-palette'\r\nimport { HueSaturation } from './hue-saturation'\r\nimport { Lightness } from './lightness'\r\nimport { PickerInput } from './picker-input'\r\nimport * as colorUtil from './util'\r\n\r\nexport interface ColorPickerProps {\r\n /**\r\n * The selected color in HEX format (supports HEX8 for alpha)\r\n */\r\n color: string\r\n\r\n /**\r\n * Whether or not the user is able to select custom color\r\n *\r\n * @default true\r\n */\r\n canSelectCustom?: boolean\r\n\r\n /**\r\n * Whether or not the user is able to change alpha channel. Only applicable\r\n * when `canSelectCustom` is true\r\n *\r\n * @default true\r\n */\r\n canSelectAlpha?: boolean\r\n\r\n /**\r\n * Sets the output format for the color picker\r\n *\r\n * @default 'hex'\r\n */\r\n outputFormat?: 'hex' | 'rgba'\r\n\r\n /**\r\n * Callback when user changes color. Use the second parameter to do color space\r\n * conversions otherwise the color could differ due to rounding\r\n */\r\n onChange: (color: string, originalColor: colorUtil.HSVA) => void\r\n\r\n /**\r\n * Callback when user clicks on a palette item. Used to close popover\r\n */\r\n onPaletteItemClick?: () => void\r\n}\r\n\r\nexport function ColorPicker({\r\n color,\r\n canSelectCustom = true,\r\n canSelectAlpha = true,\r\n outputFormat = 'hex',\r\n onChange,\r\n onPaletteItemClick,\r\n}: ColorPickerProps) {\r\n const cachedColor = useRef(color)\r\n const [hsvaColor, setColor] = useState(colorUtil.getHSVAFromColor(color))\r\n const popover = Ariakit.usePopoverContext()\r\n const input = popover?.useState('disclosureElement')\r\n\r\n /**\r\n * Update state if the color from outside changed\r\n */\r\n useEffect(() => {\r\n const currentColor = colorUtil.removeHashSymbol(cachedColor.current)\r\n const newColor = colorUtil.removeHashSymbol(color)\r\n\r\n if (currentColor === newColor || !colorUtil.isValidColor(newColor)) return\r\n\r\n cachedColor.current = color\r\n setColor(colorUtil.getHSVAFromColor(color))\r\n }, [color])\r\n\r\n /**\r\n * Handle color change\r\n * 1. update cache so we can correctly check when outside color updates\r\n * 2. Update internal color representation\r\n * 3. call onChange with string color\r\n */\r\n const onChangeCallback = useCallback(\r\n (color: colorUtil.HSVA) => {\r\n const stringColor = colorUtil.stringifyHSVAColor(color, outputFormat, canSelectAlpha)\r\n cachedColor.current = stringColor\r\n onChange(stringColor, color)\r\n setColor(color)\r\n },\r\n [onChange, canSelectAlpha, outputFormat]\r\n )\r\n\r\n const onSetCustomCodeClick = useCallback(() => {\r\n const value = prompt('Enter a color code')?.trim()\r\n\r\n if (!value) return\r\n\r\n const isValid = colorUtil.isValidColor(value)\r\n\r\n if (!isValid) {\r\n return alert('The code is not a valid color')\r\n }\r\n\r\n onChangeCallback(colorUtil.getHSVAFromColor(value))\r\n }, [onChangeCallback])\r\n\r\n return (\r\n
\r\n {canSelectCustom && (\r\n <>\r\n {isMobile() && (\r\n \r\n )}\r\n \r\n \r\n\r\n {canSelectAlpha && }\r\n \r\n )}\r\n\r\n \r\n {\r\n input?.focus({ preventScroll: true })\r\n onPaletteItemClick?.()\r\n onChangeCallback({ ...orignalColor, a: hsvaColor.a })\r\n }}\r\n />\r\n
\r\n
\r\n )\r\n}\r\n\r\ninterface InputColorPickerProps extends ColorPickerProps {\r\n /**\r\n * Label for the input\r\n */\r\n label?: ReactNode\r\n inputDataTestId?: string\r\n}\r\n\r\nexport function InputColorPicker({ label, inputDataTestId, onChange, ...props }: InputColorPickerProps) {\r\n const popoverState = usePopoverState()\r\n const canSelectCustom = props.canSelectCustom !== false\r\n const isMobileDevice = isMobile()\r\n\r\n return (\r\n <>\r\n \r\n }\r\n />\r\n \r\n \r\n {\r\n if (canSelectCustom) return\r\n popoverState.hide()\r\n }}\r\n />\r\n
\r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { Button, ButtonComponentProps, ButtonRounding, ButtonSizeType } from '../button'\r\nimport { ButtonGroup } from '../button-group'\r\nimport { IconNameType } from '../icon'\r\nimport { Popover, PopoverTrigger, usePopoverState } from '../popover'\r\nimport { ColorPreview } from './color-preview'\r\nimport { ColorPicker, ColorPickerProps } from './picker'\r\nimport { PickerInput } from './picker-input'\r\nimport * as colorUtil from './util'\r\n\r\ninterface MultiColorPickerProps extends ColorPickerProps {\r\n /**\r\n * Label for color text input\r\n *\r\n * @default undefined\r\n */\r\n colorInputLabel?: string\r\n}\r\n\r\nexport function MultiColorPicker({\r\n colorInputLabel,\r\n onChange,\r\n canSelectCustom = true,\r\n ...props\r\n}: MultiColorPickerProps) {\r\n const isMobileDevice = isMobile()\r\n\r\n return (\r\n <>\r\n {canSelectCustom && !isMobileDevice && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n {}} />\r\n \r\n \r\n )\r\n}\r\n\r\ninterface ColorTabButtonProps extends ButtonComponentProps {\r\n /*\r\n * Preview color\r\n * */\r\n color: string\r\n}\r\n\r\nexport function ColorTabButton({ color, children, ...props }: ColorTabButtonProps) {\r\n return (\r\n }\r\n {...props}\r\n >\r\n {children}\r\n \r\n )\r\n}\r\n\r\ntype ButtonColorProperties = { color: string; label: string }\r\n\r\ninterface ButtonColorPickerProps\r\n extends Omit {\r\n /**\r\n * Temporary prop to enable/disable multi picker funcionality,\r\n * in the future we'll only use secondaryColor prop to decide if the picker is multi picker or not\r\n *\r\n * @default undefined\r\n */\r\n isMultiPicker?: boolean\r\n\r\n /**\r\n * Button classname\r\n */\r\n className?: string\r\n\r\n /**\r\n * Array of objects with color and value\r\n */\r\n colors: ColorType[]\r\n\r\n /**\r\n * Color onchange callback\r\n */\r\n onChange: (colors: ColorType[], originalColor: colorUtil.HSVA) => void\r\n\r\n /**\r\n * Button size\r\n *\r\n * @default undefined\r\n */\r\n size?: ButtonSizeType\r\n /**\r\n * Label for color text input\r\n *\r\n * @default undefined\r\n */\r\n colorInputLabel?: string\r\n\r\n /**\r\n * Name of an icon or JSX.Element\r\n */\r\n icon?: JSX.Element | IconNameType\r\n\r\n /**\r\n * Identifier for e2e testing\r\n *\r\n * @default undefined\r\n */\r\n buttonPickerDataTestId?: string\r\n}\r\n\r\nexport function ButtonColorPicker({\r\n size,\r\n icon,\r\n colors,\r\n className,\r\n onChange,\r\n buttonPickerDataTestId,\r\n ...props\r\n}: ButtonColorPickerProps) {\r\n const popoverState = usePopoverState()\r\n const isOpen = popoverState.useState('open')\r\n const isMultiPicker = !!props.isMultiPicker && colors.length > 1\r\n const [activeColorIndex, setActiveColorIndex] = React.useState(0)\r\n const handleColorChange = React.useCallback(\r\n (color: string, originalColor: colorUtil.HSVA) => {\r\n onChange(\r\n colors.map((colorObject, index) => (index === activeColorIndex ? { ...colorObject, color } : colorObject)),\r\n originalColor\r\n )\r\n },\r\n [activeColorIndex, colors, onChange]\r\n )\r\n return (\r\n <>\r\n \r\n color)}\r\n className={classnames('h-full w-full', ButtonRounding.small)}\r\n />\r\n \r\n \r\n {isMultiPicker && (\r\n
\r\n \r\n {colors.map(({ color, label }, index) => (\r\n setActiveColorIndex(index)}\r\n >\r\n {label}\r\n \r\n ))}\r\n \r\n
\r\n )}\r\n \r\n
\r\n \r\n )\r\n}\r\n","import copy from 'copy-to-clipboard'\r\nimport React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { InputProps, Textarea } from '../input'\r\n\r\ninterface Props extends Pick {\r\n className?: string\r\n text: string\r\n bottomLeftContent?: React.ReactNode\r\n}\r\n\r\nexport const CopyToClipboard: React.FC = ({ className, label, text, bottomLeftContent }) => {\r\n const [isCopied, setIsCopied] = React.useState(false)\r\n\r\n const handleCopyToClipboard = React.useCallback(() => {\r\n setIsCopied(true)\r\n copy(text)\r\n }, [text])\r\n\r\n React.useEffect(() => {\r\n let timeout: number\r\n const resetTimer = () => {\r\n if (!timeout) return\r\n clearTimeout(timeout)\r\n }\r\n if (isCopied) {\r\n resetTimer()\r\n timeout = window.setTimeout(() => {\r\n setIsCopied(false)\r\n }, 2000)\r\n }\r\n\r\n return () => {\r\n resetTimer()\r\n }\r\n }, [isCopied])\r\n\r\n return (\r\n
\r\n e.currentTarget.select()}\r\n inputClass=\"h-12\"\r\n data-testid=\"copy-to-clipboard-textarea\"\r\n value={text}\r\n />\r\n
\r\n {bottomLeftContent &&
{bottomLeftContent}
}\r\n \r\n {isCopied ? 'Copied' : 'Copy'}\r\n \r\n
\r\n
\r\n )\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 { usePrevious } from '../../hooks/use-previous'\r\nimport { usePopoverPlacement } from '../../hooks/usePopoverPlacement'\r\nimport { blurWithoutScroll, focusWithoutScroll, preventDefault } from '../../util'\r\n\r\nenum DropdownRounding {\r\n none = '',\r\n regular = 'rounded-lg',\r\n}\r\n\r\nenum DropdownTheme {\r\n none = '',\r\n default = 'border border-primary bg-primary',\r\n}\r\n\r\ninterface StatelessDropdownProps\r\n extends Omit, 'ref'>,\r\n Pick {\r\n /**\r\n * Trigger button for the dropdown\r\n */\r\n trigger: JSX.Element | null\r\n\r\n /**\r\n * Disable interaction with other page elements when the dropdown is open\r\n *\r\n * @default true\r\n */\r\n modal?: boolean\r\n\r\n /**\r\n * When true, the dropdown will show when dropdown is hovered. Combine with\r\n * `backdrop={false}` to make the popover hide on mouse out\r\n */\r\n showOnHover?: boolean\r\n\r\n /**\r\n * Placement of the dropdown\r\n *\r\n */\r\n placement?: Ariakit.MenuProviderProps['placement']\r\n\r\n /**\r\n * Orientation in which the items are laid out. Changes which arrows control next/prev item\r\n *\r\n * @default vertical\r\n */\r\n orientation?: 'vertical' | 'horizontal'\r\n\r\n /**\r\n * Set rounding for the dropdown list\r\n *\r\n * @default regular\r\n */\r\n rounding?: keyof typeof DropdownRounding\r\n\r\n /**\r\n * Dropdown theme\r\n *\r\n * @default default\r\n */\r\n theme?: keyof typeof DropdownTheme\r\n\r\n /**\r\n * The amount of space between button and its popover\r\n *\r\n * @default 4\r\n */\r\n gutter?: number\r\n\r\n /**\r\n * Show backdrop on the dialog. Provide your own element if you want to add background or animation\r\n *\r\n */\r\n backdrop?: false | JSX.Element\r\n\r\n /**\r\n * Do not render the items when the popover is not visible\r\n *\r\n * @default true\r\n */\r\n unmountOnHide?: boolean\r\n\r\n /**\r\n * If true, the dropdown will overlay the trigger if necessary instead of going\r\n * out of bounds and overflowing\r\n */\r\n overlap?: boolean\r\n\r\n /**\r\n * Callback before the menu starts hiding. Event can be prevented which keeps the menu open\r\n * This callback isn’t called on backdrop click. Use `backdrop={
}` to react on backdrop clicks\r\n */\r\n onClose?: (ev: Event) => void\r\n\r\n /**\r\n * Used to provide virtual anchor, useful for context menu, etc\r\n */\r\n getAnchorRect?: () => { x: number; y: number }\r\n\r\n /**\r\n * Set which element gets focus when the dialog visibility changes. If `false`, the focus stays on the previous element.\r\n * Defaults to focusing without scrolling the page or keeping the focus on trigger if input-like.\r\n */\r\n autoFocusOnShow?: false | ((element: HTMLElement) => boolean)\r\n\r\n /**\r\n * Set which element gets focus when the dialog visibility changes. If `false`, the focus stays on the previous element.\r\n * Defaults to focusing without scrolling the page or keeping the focus on trigger if input-like.\r\n */\r\n autoFocusOnHide?: false | ((element: HTMLElement) => boolean)\r\n\r\n /**\r\n * Callback which is called when the dialog opens and all animations complete\r\n */\r\n onFullyOpen?: () => void\r\n\r\n /**\r\n * Callback which is called when the dialog closes and all animations complete\r\n */\r\n onFullyClosed?: () => void\r\n}\r\n\r\nexport const StatelessDropdown = React.forwardRef(function DropdownComponent(\r\n {\r\n trigger,\r\n modal = true,\r\n rounding = 'regular',\r\n theme = 'default',\r\n gutter,\r\n unmountOnHide = true,\r\n children,\r\n backdrop,\r\n showOnHover,\r\n hideOnInteractOutside,\r\n autoFocusOnShow,\r\n autoFocusOnHide,\r\n onFullyOpen,\r\n onFullyClosed,\r\n ...props\r\n }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const store = Ariakit.useMenuContext()\r\n const { placement, zIndex, updatePosition } = usePopoverPlacement(store)\r\n const isOpen = store?.useState('open')\r\n const [isFullyOpen, setIsFullyOpen] = React.useState(false)\r\n const isMounted = store?.useState('mounted')\r\n const wasMounted = usePrevious(isMounted)\r\n const menuGutter = gutter ?? (store?.parent ? 6 : 4)\r\n\r\n React.useEffect(() => {\r\n if (wasMounted && !isMounted) {\r\n onFullyClosed?.()\r\n }\r\n // We want to call it only on isMounted change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isMounted])\r\n\r\n return (\r\n <>\r\n {trigger && (\r\n \r\n )}\r\n }\r\n // Update zIndex when popover position changes\r\n updatePosition={updatePosition}\r\n // E2E tests don’t wait for transitions to complete and it could lead to bugs with other popover components (ResizeObserver loop exceeded)\r\n // or visual diffs due a screenshot being captured while the dropdown still in transition\r\n // If you encounter this problem, just do `cy.get('[data-fully-open=true]').should('exist')` before continuing to wait for the dropdown\r\n data-fully-open={isFullyOpen}\r\n className={classNames(\r\n props.className,\r\n zIndex,\r\n DropdownRounding[rounding],\r\n DropdownTheme[theme],\r\n 'custom-scrollbar absolute flex flex-col overflow-hidden shadow-modal outline-none dark:shadow-modal-dark',\r\n // These are set by popper, we just need to make sure we don’t encroach on the safe insets\r\n 'min-w-[--popover-anchor-width] max-w-[--popover-available-width]',\r\n // Animations\r\n 'opacity-0 transition duration-[250ms] data-[enter]:translate-y-0 data-[enter]:opacity-100',\r\n {\r\n // When in combobox mode, the padding is smaller so we can render a gradient under the combobox input.\r\n // Change the custom scrollbar offset so the top of the first item fits the top of our scrollbar\r\n '[--scrollbar-radius:0]': DropdownRounding[rounding] === DropdownRounding.none,\r\n // Direction based styles\r\n 'max-h-[calc(var(--popover-available-height)-env(safe-area-inset-bottom))] motion-safe:-translate-y-1':\r\n placement?.startsWith('bottom'),\r\n 'max-h-[calc(var(--popover-available-height)-env(safe-area-inset-top))] motion-safe:translate-y-1':\r\n placement?.startsWith('top'),\r\n }\r\n )}\r\n onTransitionEnd={(ev) => {\r\n if (ev.target === ev.currentTarget && isOpen) {\r\n setIsFullyOpen(true)\r\n onFullyOpen?.()\r\n }\r\n }}\r\n >\r\n \r\n {children}\r\n
\r\n \r\n \r\n )\r\n})\r\n\r\nexport interface DropdownProps extends StatelessDropdownProps {\r\n state?: Ariakit.MenuStore\r\n}\r\n\r\nexport const Dropdown = React.forwardRef(\r\n (\r\n { state, placement, orientation = 'vertical', ...props }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n ) => (\r\n \r\n \r\n \r\n )\r\n)\r\n","import * as Ariakit from '@ariakit/react'\r\nimport * as React from 'react'\r\n\r\nimport { OptionButton, OptionButtonProps } from '../OptionButton'\r\nimport { BUTTON_DEFAULT_ELEMENT } from '../button'\r\nimport { PropsWithAs } from '../types'\r\n\r\ninterface DropdownItemProps extends OptionButtonProps {\r\n store?: Ariakit.MenuStore\r\n\r\n subtitle?: React.ReactNode\r\n\r\n /**\r\n * Whether clicking the item should also close the dropdown. Only applies to\r\n * items without a submenu\r\n *\r\n * @default true\r\n */\r\n hideOnClick?: boolean\r\n}\r\n\r\nfunction DropdownItemComponent(\r\n { as: asComponent, ...props }: PropsWithAs & DropdownItemProps,\r\n ref: React.ForwardedRef\r\n) {\r\n return } />\r\n}\r\n\r\n/**\r\n * We need to forward ref to the function, but typescript looses the type of the\r\n * props param so we need to typecast to get suggestions to work\r\n */\r\nexport const DropdownItem = React.forwardRef(DropdownItemComponent) as <\r\n TagType extends React.ElementType = typeof BUTTON_DEFAULT_ELEMENT,\r\n>(\r\n props: PropsWithAs & DropdownItemProps & { ref?: React.ForwardedRef }\r\n) => ReturnType\r\n","import * as Ariakit from '@ariakit/react'\r\n\r\nexport const useDropdownState = Ariakit.useMenuStore\r\n","import * as React from 'react'\r\n\r\nexport const CHART_CONTEXT_MENU_ID = 'chartContextMenu'\r\n\r\nexport function hasChartContextMenuGainedFocus(blurEvent: React.FocusEvent | undefined) {\r\n const chartContextMenu = document.getElementById(CHART_CONTEXT_MENU_ID)\r\n if (chartContextMenu && blurEvent?.relatedTarget) {\r\n return chartContextMenu === blurEvent.relatedTarget || chartContextMenu.contains(blurEvent?.relatedTarget)\r\n }\r\n\r\n return false\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { PartialBy } from '../../types'\r\nimport { MenuGroup } from '../MenuGroup'\r\nimport { Dropdown, DropdownItem, DropdownProps } from '../dropdown'\r\nimport { ObjectHash } from '../types'\r\nimport { CHART_CONTEXT_MENU_ID } from './utils'\r\n\r\nexport interface IContextMenuOption {\r\n type?: never\r\n id: string\r\n label: React.ReactNode\r\n onClick?: () => void\r\n options?: ContextMenuItem[]\r\n gtag?: ObjectHash\r\n}\r\n\r\ninterface IContextMenuDivider {\r\n type: 'divider'\r\n label?: React.ReactNode\r\n}\r\n\r\nexport type ContextMenuItem = IContextMenuOption | IContextMenuDivider\r\n\r\ninterface ContextMenuInnerProps extends PartialBy {\r\n /**\r\n * Items visible in the menu\r\n */\r\n items: ContextMenuItem[]\r\n}\r\n\r\nexport function ContextMenuInner(\r\n { trigger, items, onClose, ...props }: ContextMenuInnerProps,\r\n ref: React.ForwardedRef\r\n) {\r\n return (\r\n ev.preventDefault()}\r\n >\r\n {items?.map((item, index) => {\r\n if (item.type === 'divider') {\r\n return \r\n }\r\n\r\n if (item?.options !== undefined) {\r\n return (\r\n \r\n {item.label}\r\n \r\n }\r\n />\r\n )\r\n }\r\n\r\n return (\r\n {\r\n item.onClick?.()\r\n window.gtag?.('event', 'context-menu', Object.assign({ menu_option: item.id }, item.gtag))\r\n }}\r\n data-testid={`dropdown-menu-${item.id}`}\r\n >\r\n {item.label}\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n\r\nexport const ContextMenu = React.forwardRef(ContextMenuInner)\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\ninterface GridLayoutProps extends React.HTMLProps {\r\n /**\r\n * Number of columns\r\n */\r\n columns?: number\r\n\r\n /**\r\n * Number of rows\r\n */\r\n rows?: number\r\n\r\n /**\r\n * Whether or not a border is rendered between and around items. eg. charts\r\n * on HP won’t have a border\r\n *\r\n * @default false\r\n */\r\n border?: boolean\r\n}\r\n\r\nexport const ChartGridCell = React.forwardRef(\r\n ({ children, gridArea, className, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n )\r\n)\r\n\r\ninterface ChartGridCellProps extends React.HTMLProps {\r\n /**\r\n * Css grid-area value\r\n */\r\n gridArea?: string\r\n}\r\n\r\nexport function GridLayout({ columns = 1, rows = 1, border = false, children, className, ...props }: GridLayoutProps) {\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\ninterface ChartGridProps extends GridLayoutProps {\r\n isResizable?: boolean\r\n}\r\n\r\nexport const ChartGrid: React.FC = (props) => \r\n","import * as React from 'react'\r\n\r\nimport { PropsWithAs, RequireByKey } from '../types'\r\n\r\nconst defaultValueAccessor: ValueAccessor = (data) => data\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst DEFAULT_VALUE_KEY = 'value'\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst DEFAULT_CHANGE_KEY = 'onChange'\r\n\r\ntype ValueAccessor<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps = typeof DEFAULT_VALUE_KEY,\r\n ChangeKey extends keyof React.ComponentProps = typeof DEFAULT_CHANGE_KEY,\r\n> = (...args: Parameters[ChangeKey]>) => React.ComponentProps[ValueKey]\r\n\r\nexport type InnerStateProps<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps,\r\n ChangeKey extends keyof React.ComponentProps,\r\n> = RequireByKey, 'as'> & {\r\n valueKey?: ValueKey\r\n changeKey?: ChangeKey\r\n valueAccessor?: ValueAccessor\r\n}\r\n\r\nexport function InnerState<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps = typeof DEFAULT_VALUE_KEY,\r\n ChangeKey extends keyof React.ComponentProps = typeof DEFAULT_CHANGE_KEY,\r\n>({\r\n as: asComponent,\r\n valueKey = 'value' as ValueKey,\r\n changeKey = 'onChange' as ChangeKey,\r\n valueAccessor = defaultValueAccessor,\r\n ...props\r\n}: InnerStateProps) {\r\n const { [valueKey]: value, [changeKey]: onChange } = props\r\n const [state, setState] = React.useState[ValueKey]>(value)\r\n\r\n const handleChange = React.useCallback>(\r\n (...args) => {\r\n setState(valueAccessor(...args))\r\n onChange(...args)\r\n },\r\n [onChange, valueAccessor]\r\n )\r\n\r\n return React.createElement(asComponent, {\r\n ...props,\r\n [valueKey]: state,\r\n [changeKey]: handleChange,\r\n })\r\n}\r\n","import classnames from 'classnames'\r\nimport { HTMLProps, ReactNode, useEffect, useMemo, useRef, useState } from 'react'\r\n\r\nimport { Label } from './typography'\r\n\r\nexport enum RangeSize {\r\n small = 'sm:h-6', // 24px height\r\n regular = 'sm:h-7', // 28px height\r\n medium = 'sm:h-8', // 32px height\r\n large = 'sm:h-9', // 36px height\r\n}\r\n\r\ntype InputProps = HTMLProps\r\n\r\ninterface RangeSliderProps extends Omit {\r\n /**\r\n * Label which is rendered above the select\r\n */\r\n label?: ReactNode\r\n\r\n /**\r\n * Range size. All inputs have forced height on mobile to avoid zoom\r\n *\r\n * @default regular\r\n */\r\n size?: keyof typeof RangeSize\r\n\r\n /**\r\n * Element which will be rendered on the left side of the slider\r\n */\r\n leftContent?: ReactNode\r\n\r\n /**\r\n * Element which will be rendered on the right side of the slider\r\n */\r\n rightContent?: ReactNode\r\n\r\n /**\r\n * Class name for the wrapper element\r\n */\r\n className?: string\r\n\r\n /**\r\n * Class name for the input element\r\n */\r\n inputClassName?: string\r\n\r\n /**\r\n * Min value for the input\r\n *\r\n * @default 0\r\n */\r\n min?: number\r\n\r\n /**\r\n * Max value for the input\r\n *\r\n * @default 100\r\n */\r\n max?: number\r\n\r\n /**\r\n * Step value for the input\r\n *\r\n * @default 1\r\n */\r\n step?: number\r\n\r\n /**\r\n * Current value\r\n */\r\n value: number\r\n\r\n /**\r\n * Callback when value changes\r\n */\r\n onChange: InputProps['onChange']\r\n}\r\n\r\nexport function RangeSlider({\r\n label,\r\n size = 'regular',\r\n leftContent,\r\n rightContent,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n className,\r\n inputClassName,\r\n ...props\r\n}: RangeSliderProps) {\r\n const [hasTrack, setHasTrack] = useState(false)\r\n const trackRef = useRef(null)\r\n const thumbRef = useRef(null)\r\n\r\n useEffect(() => {\r\n setHasTrack(Boolean(trackRef.current && thumbRef.current))\r\n }, [])\r\n\r\n const thumbLeft = useMemo(() => {\r\n const track = trackRef.current\r\n const thumb = thumbRef.current\r\n const valuePercent = (props.value - min) / (max - min)\r\n\r\n if (!hasTrack || !track || !thumb) return\r\n\r\n const trackBox = track.getBoundingClientRect()\r\n const thumbBox = thumb.getBoundingClientRect()\r\n\r\n return ((valuePercent * (trackBox.width - thumbBox.width)) / trackBox.width) * 100\r\n }, [min, max, props.value, hasTrack])\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { ButtonRoundingType, ButtonThemeType } from '../button'\r\nimport { IconNameType } from '../icon'\r\n\r\nexport enum ToolbarTheme {\r\n chipTransparent, // (default)\r\n alternative,\r\n}\r\n\r\nexport enum ToolbarDirection {\r\n vertical,\r\n horizontal,\r\n}\r\n\r\nexport type ToolbarDirectionType = keyof typeof ToolbarDirection\r\n\r\nexport interface IButtonThemeSettings {\r\n className?: string\r\n theme: ButtonThemeType\r\n rounding: ButtonRoundingType\r\n}\r\n\r\nexport interface IToolbarItem {\r\n id: string\r\n icon: IconNameType\r\n iconActive?: IconNameType\r\n iconAction?: IconNameType\r\n title: string\r\n titleActive?: string\r\n titleAction?: string\r\n}\r\n\r\nexport type ToolbarThemeType = keyof typeof ToolbarTheme\r\n","import * as React from 'react'\r\n\r\nimport { ToolbarDirection, ToolbarTheme } from './interfaces'\r\n\r\nexport interface IToolbarContext {\r\n direction: ToolbarDirection\r\n theme: ToolbarTheme\r\n isWrapped: boolean\r\n isStretched: boolean\r\n isMobile: boolean\r\n}\r\n\r\nexport const ToolbarContext = React.createContext({\r\n direction: ToolbarDirection.vertical,\r\n theme: ToolbarTheme.chipTransparent,\r\n isWrapped: false,\r\n isStretched: false,\r\n isMobile: false,\r\n})\r\n\r\nexport function useToolbarContext() {\r\n return React.useContext(ToolbarContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport throttle from 'lodash.throttle'\r\nimport React from 'react'\r\n\r\nimport { isSafariDesktop } from '../../../app/shared/isMobile'\r\nimport { StatelessDropdown } from '../dropdown'\r\nimport { IToolbarContext, ToolbarContext } from './hooks'\r\nimport { ToolbarDirection, ToolbarDirectionType, ToolbarTheme, ToolbarThemeType } from './interfaces'\r\n\r\nconst getToolbarSettings = ({\r\n direction,\r\n isWrapped,\r\n isMobile,\r\n theme,\r\n}: IToolbarContext): React.HTMLProps => {\r\n switch (isWrapped) {\r\n case true:\r\n return {\r\n className: classnames('shrink-0 items-center bg-white dark:bg-gray-800', {\r\n 'flex flex-wrap justify-between': direction === ToolbarDirection.vertical,\r\n 'grid border border-gray-100 dark:border-gray-600 p-1.5 gap-1 border-box rounded-md grid-cols-2':\r\n FinvizSettings.hasRedesignEnabled,\r\n }),\r\n }\r\n\r\n default:\r\n return {\r\n className: classnames('flex shrink-0 items-center bg-white dark:bg-gray-800', {\r\n 'p-1.5': !isMobile,\r\n 'space-x-1.5 px-1.5': direction === ToolbarDirection.horizontal && FinvizSettings.hasRedesignEnabled,\r\n 'flex-col overflow-hidden overflow-y-auto [--inset-l:0.5rem] landscape-primary:pl-inset-left':\r\n direction === ToolbarDirection.vertical,\r\n 'space-y-2': direction === ToolbarDirection.vertical && !isMobile,\r\n 'pb-inset-bottom [--inset-b:0.5rem]': theme !== ToolbarTheme.alternative && !isMobile,\r\n 'w-screen space-x-2 overflow-hidden overflow-x-auto':\r\n direction === ToolbarDirection.horizontal && theme !== ToolbarTheme.alternative,\r\n 'overflow-x-hidden': theme === ToolbarTheme.alternative,\r\n }),\r\n }\r\n }\r\n}\r\n\r\nexport interface ToolbarProps {\r\n /**\r\n * Toolbar direction\r\n *\r\n * @default vertical\r\n */\r\n direction?: ToolbarDirectionType\r\n\r\n /**\r\n * Toolbar buttons theme\r\n *\r\n * @default light\r\n */\r\n theme?: ToolbarThemeType\r\n\r\n /**\r\n * Charts mobile design\r\n *\r\n * @default false\r\n */\r\n isMobile?: boolean\r\n\r\n className?: string\r\n}\r\n\r\nexport function Toolbar({\r\n direction = 'vertical',\r\n theme = 'chipTransparent',\r\n isMobile = false,\r\n children,\r\n className,\r\n}: React.PropsWithChildren) {\r\n const hasFocusRings = React.useRef(false)\r\n const toolbarRef = React.useRef(null)\r\n const contextProviderValue = React.useMemo(\r\n () => ({\r\n direction: ToolbarDirection[direction],\r\n theme: ToolbarTheme[theme],\r\n isWrapped:\r\n ToolbarDirection[direction] === ToolbarDirection.vertical && ToolbarTheme[theme] === ToolbarTheme.alternative,\r\n isStretched:\r\n ToolbarDirection[direction] === ToolbarDirection.horizontal && ToolbarTheme[theme] === ToolbarTheme.alternative,\r\n isMobile,\r\n }),\r\n [direction, theme, isMobile]\r\n )\r\n const toolbarSettings = getToolbarSettings(contextProviderValue)\r\n\r\n React.useLayoutEffect(() => {\r\n // Workaround for Safari scrollbar bug https://github.com/finvizhq/charts/issues/1038\r\n // Safari injects scrollbar after layout render and doesn't trigger reflow\r\n if (ToolbarTheme[theme] !== ToolbarTheme.alternative && isSafariDesktop()) {\r\n const forceReflow = throttle(() => {\r\n if (toolbarRef.current !== null) {\r\n const originalWidth = toolbarRef.current.style.width\r\n toolbarRef.current.style.width = '0'\r\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n toolbarRef.current.offsetWidth\r\n toolbarRef.current.style.width = originalWidth\r\n }\r\n }, 200)\r\n\r\n forceReflow()\r\n window.addEventListener('resize', forceReflow)\r\n\r\n return () => {\r\n window.removeEventListener('resize', forceReflow)\r\n }\r\n }\r\n }, [theme])\r\n\r\n return (\r\n \r\n \r\n {children}\r\n {\r\n hasFocusRings.current = !!document.querySelector('[data-focus-visible]')\r\n return true\r\n }}\r\n autoFocusOnHide={(el: HTMLElement) => {\r\n // Only call focus when we previously had focus rings to prevent sticky focus rings\r\n if (hasFocusRings.current) el.focus({ preventScroll: true })\r\n hasFocusRings.current = false\r\n return false\r\n }}\r\n />\r\n \r\n \r\n )\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, ButtonHTMLProps, ButtonProps } from '../button'\r\nimport { Delayed } from '../delayed'\r\nimport { Icon } from '../icon'\r\nimport { Spinner } from '../spinner'\r\nimport { PropsWithAs } from '../types'\r\nimport { useToolbarContext } from './hooks'\r\nimport { IToolbarItem, ToolbarTheme } from './interfaces'\r\n\r\nfunction getButtonThemeSettings({\r\n className,\r\n theme,\r\n isActive,\r\n isStretched,\r\n isInAction,\r\n}: {\r\n className: string\r\n theme: ToolbarTheme\r\n isStretched: boolean\r\n isActive?: boolean\r\n isInAction?: boolean\r\n}): Omit & ButtonProps {\r\n const includeRedesign = FinvizSettings.hasRedesignEnabled\r\n switch (theme) {\r\n case ToolbarTheme.alternative:\r\n return {\r\n className: classnames(\r\n className,\r\n {\r\n grow: isStretched,\r\n 'h-10 w-10': !isStretched && !includeRedesign,\r\n 'animate-pulse': isInAction,\r\n },\r\n\r\n !includeRedesign && {\r\n 'active:bg-white disabled:bg-white disabled:text-gray-300 disabled:hover:text-gray-300': true,\r\n 'border border-white text-gray-500 hover:border-gray-100 hover:text-gray-900': !isActive,\r\n 'border border-gray-900 text-gray-900': isActive,\r\n }\r\n ),\r\n theme: includeRedesign ? 'chipTransparent' : 'transparent',\r\n rounding: includeRedesign ? undefined : 'none',\r\n size: isStretched || includeRedesign ? undefined : 'none',\r\n }\r\n default:\r\n return {\r\n className: classnames(\r\n className,\r\n 'border dark:disabled:bg-gray-800 dark:disabled:text-gray-600 disabled:text-gray-300 disabled:bg-white dark:disabled:hover:bg-gray-800 dark:disabled:hover:text-gray-600 disabled:hover:text-gray-300 disabled:hover:bg-white',\r\n {\r\n 'animate-pulse': isInAction,\r\n 'border-transparent text-gray-500 hover:bg-gray-200/30 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-500/30 dark:hover:text-gray-200':\r\n !isActive,\r\n 'border-blue-400 bg-blue-50 text-gray-900 dark:bg-gray-700 dark:text-white': isActive,\r\n }\r\n ),\r\n theme: 'transparent',\r\n rounding: 'small',\r\n }\r\n }\r\n}\r\n\r\nexport interface ToolbarButtonProps extends Omit {\r\n rowId?: number\r\n item: IToolbarItem\r\n disabledTooltip?: string\r\n isInAction?: boolean\r\n isLoading?: boolean\r\n}\r\n\r\nexport const ToolbarButton = React.forwardRef(function ToolbarButton(\r\n { item, disabledTooltip, isInAction: isInActionProp, isLoading, ...props }: PropsWithAs & ToolbarButtonProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const context = Ariakit.useMenuContext()\r\n const { theme, isStretched } = useToolbarContext()\r\n const isInAction = isInActionProp && item.iconAction !== undefined\r\n const buttonSettings = getButtonThemeSettings({\r\n className: props.className,\r\n theme,\r\n isStretched,\r\n isActive: props.active,\r\n isInAction: isInAction,\r\n })\r\n\r\n const getMainIcon = () => (\r\n \r\n )\r\n\r\n return (\r\n }\r\n store={context?.menubar || undefined}\r\n blurOnHoverEnd\r\n render={\r\n \r\n {isLoading ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n {props.children ??\r\n (isInAction ? (\r\n \r\n \r\n \r\n ) : (\r\n getMainIcon()\r\n ))}\r\n \r\n )}\r\n \r\n }\r\n />\r\n )\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 { isMobile } from '../../../app/shared/isMobile'\r\nimport { DropdownItem } from '../dropdown'\r\nimport { Icon } from '../icon'\r\nimport { NativeSelect } from '../select/NativeSelect'\r\nimport { useToolbarContext } from './hooks'\r\nimport { IToolbarItem, ToolbarTheme } from './interfaces'\r\nimport { ToolbarButton } from './toolbar-button'\r\n\r\nconst isMobileBrowser = isMobile()\r\n\r\nexport interface ToolbarGroupProps {\r\n /**\r\n * Main button item\r\n */\r\n defaultItem: IToolbarItem\r\n\r\n /**\r\n * Shows spinner instead of icon\r\n */\r\n isLoading?: boolean\r\n\r\n /**\r\n * Current selected item id\r\n */\r\n isActive: boolean\r\n\r\n /**\r\n * Should indicate some action in progress\r\n */\r\n isInAction?: boolean\r\n\r\n /**\r\n * Array of items\r\n */\r\n groupItems: IToolbarItem[]\r\n\r\n /**\r\n * Expand group button label\r\n */\r\n groupTitle?: string\r\n\r\n /**\r\n * On item select callback\r\n */\r\n onChange: (id: string, trigger: 'button' | 'select' | 'group') => void\r\n\r\n /**\r\n * Use native select for mobile devices\r\n *\r\n * @default true\r\n */\r\n useNativeSelect?: boolean\r\n\r\n /**\r\n * Is item disabled\r\n */\r\n disabled?: boolean\r\n\r\n /**\r\n * Tooltip message if item is disabled\r\n */\r\n disabledTooltip?: string\r\n\r\n rowId?: number\r\n}\r\n\r\nexport const ToolbarGroup = React.forwardRef(function ToolbarGroup(\r\n {\r\n defaultItem,\r\n isActive,\r\n isLoading,\r\n groupItems,\r\n groupTitle,\r\n onChange,\r\n useNativeSelect = isMobileBrowser,\r\n disabled,\r\n disabledTooltip,\r\n rowId,\r\n }: ToolbarGroupProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const { theme, isStretched } = useToolbarContext()\r\n const [selectedItem, setSelectedItem] = React.useState(defaultItem)\r\n const groupId = groupTitle?.replace(/\\s/g, '-').toLocaleLowerCase()\r\n const isAlternativeTheme = theme === ToolbarTheme.alternative\r\n\r\n // Setup states, pass Menubar context to this menu so we can control the shared menu\r\n const context = Ariakit.useMenuContext()\r\n const menu = Ariakit.useMenuStore({ store: context })\r\n\r\n // We have multiple menu triggers but just one shared menu so we need a way to know which button has been hovered\r\n const [menuButton, setMenuButton] = React.useState(null)\r\n const open = menu.useState((state) => state.mounted && state.anchorElement === menuButton)\r\n\r\n // Find the element to render the menu into using Portal\r\n const parentMenu = menu.useState('contentElement')\r\n const menuContentElement = React.useMemo(() => parentMenu?.querySelector('div'), [parentMenu])\r\n\r\n /**\r\n * Charts prevent bubling mouseover so we need to hide the menu manually\r\n */\r\n const hideMenu = menu.hide\r\n React.useEffect(() => {\r\n const onMouseLeave = () => hideMenu()\r\n\r\n parentMenu?.addEventListener('mouseleave', onMouseLeave)\r\n return () => parentMenu?.removeEventListener('mouseleave', onMouseLeave)\r\n }, [hideMenu, parentMenu])\r\n\r\n const showMenu = menu.show\r\n const handleMenuOpen = React.useCallback(\r\n (ev: React.SyntheticEvent) => {\r\n menu.setDisclosureElement(ev.currentTarget)\r\n menu.setAnchorElement(ev.currentTarget)\r\n showMenu()\r\n },\r\n [menu, showMenu]\r\n )\r\n\r\n const trigger = (\r\n \r\n \r\n \r\n \r\n )\r\n\r\n if (useNativeSelect) {\r\n return (\r\n \r\n {trigger}\r\n ({ value: item.id, label: item.title }))}\r\n onChange={(option) => {\r\n setSelectedItem(groupItems![groupItems!.findIndex((item) => item.id === option.value)])\r\n onChange(option.value, 'select')\r\n }}\r\n onClick={() => onChange(selectedItem.id, 'select')}\r\n />\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n ) => {\r\n // Preventing this means the dropdown will only open on hover not by a click\r\n ev.preventDefault()\r\n }}\r\n onPointerDown={(ev: React.PointerEvent) => {\r\n // Finally, pre-select the current group tool\r\n onChange(selectedItem.id, 'group')\r\n handleMenuOpen(ev)\r\n }}\r\n />\r\n {open && (\r\n // Render this menu's contents into the parent menu.\r\n }>\r\n {groupItems.map((item) => (\r\n }\r\n data-testid={`toolbar-group-${groupId}-${item.id}`}\r\n rounding={theme === ToolbarTheme.alternative && !FinvizSettings.hasRedesignEnabled ? 'none' : undefined}\r\n onPointerDown={() => {\r\n setSelectedItem(item)\r\n onChange(item.id, 'select')\r\n }}\r\n >\r\n {item.title}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n )\r\n})\r\n","import { PartialBy } from '../../types'\r\nimport { ToolbarButton } from './toolbar-button'\r\nimport { ToolbarGroup, ToolbarGroupProps } from './toolbar-group'\r\n\r\nexport function ToolbarItem({\r\n defaultItem,\r\n isLoading,\r\n isActive,\r\n isInAction,\r\n groupItems,\r\n groupTitle,\r\n onChange,\r\n useNativeSelect,\r\n disabled,\r\n disabledTooltip,\r\n rowId,\r\n}: PartialBy) {\r\n const isItemActive = isActive && !disabled\r\n\r\n if (!!groupItems?.length) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n {\r\n onChange(defaultItem.id, 'button')\r\n }}\r\n />\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { useToolbarContext } from './hooks'\r\nimport { ToolbarDirection, ToolbarTheme } from './interfaces'\r\n\r\ntype ToolbarDividerProps = {\r\n className?: string\r\n}\r\n\r\nexport function ToolbarDivider({ className }: ToolbarDividerProps) {\r\n const { direction, theme } = useToolbarContext()\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { Box } from '../box'\r\nimport { Heading, Paragraph } from '../typography'\r\nimport { TourStep } from './types'\r\n\r\nexport function StepContent({ step }: { step: TourStep }) {\r\n return (\r\n \r\n {step.title && (\r\n \r\n {step.title}\r\n \r\n )}\r\n {step.body && {step.body}}\r\n \r\n )\r\n}\r\n","import { offset, shift } from '@floating-ui/dom'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as ReactDOM from 'react-dom/server'\r\nimport Shepherd from 'shepherd.js'\r\n\r\nimport {\r\n BUTTON_BASE_CLASS,\r\n BUTTON_FOCUS_STYLES,\r\n ButtonPadding,\r\n ButtonRounding,\r\n ButtonSize,\r\n ButtonTheme,\r\n getButtonTheme,\r\n} from '../button'\r\nimport { StepContent } from './step-content'\r\nimport { TourDefinition, TourStep } from './types'\r\n\r\ntype ExcludesFalse = (x: T | false) => x is T\r\n\r\n/**\r\n * Async load Shepherd module when we need it\r\n */\r\nlet shepherdLibrary: typeof Shepherd\r\nexport async function loadShepherdLibrary(setLoading: (state: boolean) => void) {\r\n if (shepherdLibrary) return shepherdLibrary\r\n\r\n try {\r\n setLoading(true)\r\n const shepherdPromise = await import('shepherd.js')\r\n shepherdLibrary = shepherdPromise.default\r\n setLoading(false)\r\n\r\n return shepherdLibrary\r\n } catch {}\r\n}\r\n\r\n/**\r\n * Get buttons based on index in the step array\r\n */\r\nconst buttonClasses = classnames(BUTTON_BASE_CLASS, BUTTON_FOCUS_STYLES, ButtonSize.regular, ButtonRounding.regular)\r\nfunction getStepButtons(tour: Shepherd.Tour, step: TourStep, index: number, arr: TourStep[]) {\r\n return [\r\n {\r\n action: tour.complete,\r\n classes: classnames(\r\n buttonClasses,\r\n 'mr-auto',\r\n getButtonTheme({ theme: ButtonTheme.light }).button,\r\n ButtonPadding.regular\r\n ),\r\n text: 'Exit',\r\n },\r\n index > 0 && {\r\n action: tour.back,\r\n classes: classnames(buttonClasses, getButtonTheme({ theme: ButtonTheme.light }).button, ButtonPadding.regular),\r\n text: step.backButton ?? 'Back',\r\n },\r\n {\r\n classes: classnames(buttonClasses, getButtonTheme({ theme: ButtonTheme.blue }).button, ButtonPadding.regular),\r\n action: tour.next,\r\n text: step.nextButton ?? (index === arr.length - 1 ? 'Finish' : 'Next'),\r\n },\r\n ].filter(Boolean as unknown as ExcludesFalse)\r\n}\r\n\r\n/**\r\n * Convert tour steps to Shepherd steps\r\n */\r\nexport function processSteps(tour: Shepherd.Tour, steps: TourStep[]): Shepherd.StepOptions[] {\r\n return steps.map((step, index) => ({\r\n attachTo: { element: step.target, on: step.placement ?? 'auto' },\r\n classes: 'z-dialog bg-transparent m-0',\r\n floatingUIOptions: {\r\n middleware: [shift({ padding: 10 }), offset(step.offset ?? { mainAxis: 10, crossAxis: 0 })],\r\n },\r\n // Render the body\r\n text: ReactDOM.renderToString(React.createElement(StepContent, { step })),\r\n // Add buttons\r\n buttons: getStepButtons(tour, step, index, steps),\r\n modalOverlayOpeningRadius: step.overlayRadius ?? 8,\r\n modalOverlayOpeningPadding: step.overlayPadding ?? 0,\r\n }))\r\n}\r\n\r\nexport function getTourKey() {\r\n return `tour${window.location.pathname.replace(/[/.]/g, '-')}`\r\n}\r\n\r\nexport function getStepsForUser(tours: TourDefinition[]) {\r\n const lastFinishedTour = localStorage?.getItem(getTourKey())\r\n const lastTourIndex = tours.findIndex((tour) => tour.id === lastFinishedTour)\r\n const allToursViewed = lastTourIndex === tours.length - 1 || tours.slice(lastTourIndex + 1).every((item) => item.skip)\r\n const toursToView = allToursViewed ? tours : tours.slice(lastTourIndex + 1)\r\n const userTour = toursToView.reduce(\r\n (acc, current) =>\r\n current.skip\r\n ? acc\r\n : {\r\n ...acc,\r\n id: current.id,\r\n steps: [...acc.steps, ...current.steps],\r\n },\r\n { id: 'tour', steps: [], initialTour: toursToView[0].id }\r\n )\r\n\r\n return { hasNewTours: !allToursViewed, tour: userTour }\r\n}\r\n\r\nexport function completeTour(key: string) {\r\n localStorage?.setItem(getTourKey(), key)\r\n}\r\n","import * as React from 'react'\r\nimport Shepherd from 'shepherd.js'\r\n\r\nimport { TourDefinition } from './types'\r\nimport * as tourUtils from './utils'\r\n\r\nexport const DEFAULT_OPTIONS = {\r\n exitOnEsc: true,\r\n useModalOverlay: true,\r\n}\r\n\r\n/**\r\n * Hook which controls shepherd.js. The library is lazy-loaded when the tour starts\r\n *\r\n * Returns:\r\n * - `isLoading`: state of the library loading\r\n * - `currentTour`: tour object, only defined after library has loaded\r\n * - `startTour`: load the library and start tour. Returns `currentTour`\r\n * - `getStepsForUser`: returns a list of tour steps based on tours the user finished\r\n * - `completeTour`: persists the last finished tour to local storage\r\n */\r\nexport function useTour(options?: Shepherd.TourOptions) {\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [currentTour, setTour] = React.useState(null)\r\n\r\n /**\r\n * We’re loading shepherd asynchronously and want to have loading state so we use\r\n * AbortController to check if the component is still mounted.\r\n */\r\n const controller = React.useRef('AbortController' in window ? new AbortController() : undefined)\r\n const loadingSetter = React.useRef((state: boolean) => {\r\n if (controller.current?.signal.aborted) return\r\n\r\n setIsLoading(state)\r\n })\r\n // Cleanup effect to abort the controller\r\n React.useEffect(() => () => controller.current?.abort(), [])\r\n\r\n const startTour = React.useCallback(\r\n async (definition: TourDefinition, setComplete = true) => {\r\n const shepherdLibrary = await tourUtils.loadShepherdLibrary(loadingSetter.current)\r\n\r\n if (shepherdLibrary && !controller.current?.signal.aborted) {\r\n const tour = currentTour ?? new shepherdLibrary.Tour({ ...DEFAULT_OPTIONS, ...options })\r\n\r\n if (!currentTour) setTour(tour)\r\n\r\n // Reset the tour steps in case they were updated\r\n Array.from(tour.steps).forEach((step) => tour.removeStep(step.id))\r\n\r\n const processedSteps = tourUtils.processSteps(tour, definition.steps)\r\n tour.addSteps(processedSteps)\r\n\r\n if (setComplete) {\r\n tourUtils.completeTour(definition.id)\r\n }\r\n\r\n void tour.start()\r\n window.gtag?.('event', 'tour-start', { event_label: definition.initialTour ?? definition.id })\r\n\r\n return tour\r\n }\r\n },\r\n [currentTour, options]\r\n )\r\n\r\n return {\r\n isLoading,\r\n currentTour,\r\n startTour,\r\n getStepsForUser: tourUtils.getStepsForUser,\r\n completeTour: tourUtils.completeTour,\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-duplicate-enum-values */\r\nimport * as Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { BUTTON_DEFAULT_ELEMENT, Button, ButtonComponentProps } from '../button'\r\nimport { Icon, IconNameType, isValidIconName } from '../icon'\r\n\r\n// Must have the same keys as ButtonSize\r\nexport enum TabSpacing {\r\n xxsmall = 'space-x-0.5', // 2px spacing\r\n xsmall = 'space-x-1', // 4px spacing\r\n none = 'space-x-1.5', // 6px spacing\r\n small = 'space-x-1.5', // 6px spacing\r\n regular = 'space-x-1.5', // 6px spacing\r\n medium = 'space-x-2', // 8px spacing\r\n large = 'space-x-2', // 8px spacing\r\n xlarge = 'space-x-2', // 8px spacing\r\n}\r\n\r\nfunction getRightContent(content: JSX.Element | IconNameType | undefined, isActive: boolean) {\r\n if (isValidIconName(content)) return \r\n else if (React.isValidElement(content))\r\n return React.cloneElement(content as React.ReactElement<{ active: boolean }>, {\r\n active: isActive,\r\n })\r\n else return content\r\n}\r\n\r\nconst InternalTab = React.forwardRef(function InternalTab<\r\n TagType extends React.ElementType = typeof BUTTON_DEFAULT_ELEMENT,\r\n>(\r\n {\r\n rounding = 'none',\r\n theme = 'tab',\r\n size = 'medium',\r\n 'aria-selected': ariaSelected,\r\n children,\r\n ...props\r\n }: Omit, 'theme'>,\r\n ref: React.ForwardedRef\r\n) {\r\n const spacing = TabSpacing[size]\r\n const active = Boolean(ariaSelected)\r\n const rightContent = getRightContent(props.rightContent, active)\r\n\r\n return (\r\n )}\r\n ref={ref}\r\n active={active}\r\n theme={theme}\r\n size={size}\r\n rounding={rounding}\r\n rightContent={undefined}\r\n className={classNames('group/badge', props.className)}\r\n contentClass={classNames(spacing, 'flex', props.contentClass)}\r\n >\r\n {children}\r\n {rightContent}\r\n \r\n )\r\n})\r\n\r\nexport function Tab(\r\n props: React.PropsWithChildren>\r\n) {\r\n return } />\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\n\r\nexport function TabList(props: Ariakit.TabListProps) {\r\n return (\r\n \r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport React from 'react'\r\n\r\nexport function TabPanel(props: Ariakit.TabPanelProps) {\r\n return \r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport React from 'react'\r\n\r\nexport function Tabs({ children }: React.PropsWithChildren) {\r\n return (\r\n \r\n
{children}
\r\n
\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nenum BadgeSize {\r\n small = 'h-4 min-w-4', // 16px height\r\n medium = 'h-5 min-w-5', // 20px height\r\n}\r\ntype BadgeSizeType = keyof typeof BadgeSize\r\n\r\nenum BadgePadding {\r\n small = 'px-2 py-0', // 16px height\r\n medium = 'px-1.5 py-0.5', // 20px height\r\n}\r\ntype BadgePaddingType = keyof typeof BadgePadding\r\n\r\ntype BadgeProps = {\r\n className?: string\r\n size?: BadgeSizeType\r\n padding?: BadgePaddingType\r\n active?: boolean\r\n}\r\n\r\nexport function Badge({\r\n className,\r\n size = 'medium',\r\n padding = size,\r\n active,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const badgePadding = BadgePadding[padding]\r\n const badgeSize = BadgeSize[size]\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nenum TagSize {\r\n small = 'h-4 min-w-4', // 16px height\r\n medium = 'h-5 min-w-5', // 20px height\r\n large = 'min-w-5',\r\n}\r\ntype TagSizeType = keyof typeof TagSize\r\n\r\nenum TagPadding {\r\n small = 'px-[5px] py-0', // 16px height\r\n medium = 'px-1.5 py-0.5', // 20px height\r\n large = 'p-3',\r\n}\r\ntype TagPaddingType = keyof typeof TagPadding\r\n\r\nenum TagFont {\r\n small = 'text-3xs leading-3', // 10px/12px\r\n medium = 'text-2xs leading-4', // 12px/16px\r\n large = 'text-sm',\r\n}\r\n\r\nenum TagVariant {\r\n filled = 'border border-bg-primary bg-gray-50 text-gray-600 font-medium dark:bg-gray-600 dark:text-gray-50',\r\n bordered = 'border border-primary text-muted',\r\n}\r\n\r\ntype TagVariantType = keyof typeof TagVariant\r\n\r\nenum TagRounding {\r\n small = 'rounded-sm',\r\n // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\r\n medium = 'rounded-sm',\r\n large = 'rounded-md',\r\n}\r\n\r\ntype TagProps = {\r\n size?: TagSizeType\r\n padding?: TagPaddingType\r\n variant?: TagVariantType\r\n className?: string\r\n}\r\n\r\nexport function Tag({\r\n className,\r\n size = 'medium',\r\n padding = size,\r\n variant = 'filled',\r\n children,\r\n}: React.PropsWithChildren) {\r\n const tagPadding = TagPadding[padding]\r\n const tagSize = TagSize[size]\r\n const tagFont = TagFont[size]\r\n const tagRounding = TagRounding[size]\r\n const tagVariant = TagVariant[variant]\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import { link } from '../services/routing'\r\nimport { Delayed, DelayedProps } from './delayed'\r\nimport { ErrorView } from './error-view'\r\nimport { Spinner } from './spinner'\r\n\r\ntype LoadingProps = Pick\r\n\r\nexport function Loading({ delay, timeout, throwOnTimeout }: LoadingProps) {\r\n return (\r\n \r\n There’s been an error loading the application.\r\n
\r\n Please make sure your internet connection is stable and refresh the page. If the error persists, please{' '}\r\n \r\n contact support\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\nexport function LoadingScreen(props: LoadingProps) {\r\n return (\r\n
\r\n \r\n
\r\n )\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\nexport enum NotificationTheme {\r\n default,\r\n success,\r\n failure,\r\n}\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 theme?: NotificationTheme\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 theme = NotificationTheme.default,\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 React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { Icon } from '../icon'\r\n\r\nconst imgFromUrlToBase64 = (url: string) =>\r\n fetch(url).then(async (response) => URL.createObjectURL(await response.blob()))\r\n\r\nexport interface DownloadImageButtonProps {\r\n /**\r\n * The URL of the image to download. If not provided, button will be disabled\r\n */\r\n downloadUrl?: string | null\r\n\r\n /**\r\n * Optional base64 encoded image data. If provided, this will be used instead of downloadUrl\r\n */\r\n base64ImageData?: string | null\r\n}\r\n\r\nexport function DownloadImageButton({ downloadUrl, base64ImageData: dataUrl }: DownloadImageButtonProps) {\r\n const fileName = React.useMemo(() => {\r\n const name = downloadUrl?.split(/[/?#]/).pop() ?? 'image'\r\n return name.includes('.') ? name : `${name}.png`\r\n }, [downloadUrl])\r\n\r\n const [imageUri, setImageUri] = React.useState(null)\r\n React.useEffect(() => {\r\n const val = dataUrl || downloadUrl\r\n if (!val) return\r\n imgFromUrlToBase64(val)\r\n .then(setImageUri)\r\n .catch(() => {})\r\n }, [dataUrl, downloadUrl])\r\n\r\n return (\r\n imageUri && (\r\n {\r\n window.gtag?.('event', 'click', { event_category: 'social-share-image-download' })\r\n }}\r\n size=\"small\"\r\n contentClass=\"flex items-center\"\r\n leftContent={}\r\n >\r\n Download\r\n \r\n )\r\n )\r\n}\r\n","import { FacebookIcon, FacebookShareButton, TwitterIcon, TwitterShareButton } from 'react-share'\r\n\r\nimport { Button } from '../button'\r\nimport { CopyToClipboard } from '../copy-to-clipboard'\r\nimport { Heading } from '../typography'\r\nimport { DownloadImageButton } from './DownloadImageButton'\r\n\r\nexport function SocialShare({\r\n shareUrl,\r\n title,\r\n imageToDownloadURL,\r\n imageToDownloadBase64Data,\r\n}: {\r\n shareUrl: string\r\n title: string\r\n imageToDownloadURL?: string\r\n imageToDownloadBase64Data?: string | null\r\n}) {\r\n return (\r\n \r\n Copy and paste link in email, website, or forum\r\n \r\n }\r\n text={shareUrl}\r\n bottomLeftContent={\r\n
\r\n \r\n {\r\n window.gtag?.('event', 'click', { event_category: 'social-share-facebook-button' })\r\n }}\r\n leftContent={}\r\n >\r\n Share\r\n \r\n \r\n \r\n {\r\n window.gtag?.('event', 'click', { event_category: 'social-share-twitter-button' })\r\n }}\r\n leftContent={}\r\n >\r\n Twitter\r\n \r\n \r\n {imageToDownloadURL && (\r\n \r\n )}\r\n
\r\n }\r\n />\r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport * as React from 'react'\r\n\r\nimport { usePrevious } from '../hooks/use-previous'\r\nimport { Input, InputComponentProps } from './input'\r\nimport { Tooltip, TooltipColor, TooltipProps, TooltipTrigger } from './tooltip'\r\n\r\ninterface TooltipSettingsProps\r\n extends Pick,\r\n Pick {\r\n color?: keyof typeof TooltipColor\r\n}\r\n\r\ninterface TooltipInputProps extends InputComponentProps {\r\n /**\r\n * Settings for Tooltip component and useTooltipStore\r\n */\r\n tooltipSettings?: TooltipSettingsProps\r\n}\r\n\r\nfunction TooltipInputComponent(\r\n { tooltipSettings, name, children, ...props }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const { color, gutter, placement = 'bottom', isPointerEventsEnabled } = tooltipSettings ?? {}\r\n const prevMessage = usePrevious(children, true)\r\n\r\n const [isFocused, setIsFocused] = React.useState(false)\r\n const handleFocus = React.useRef(() => setIsFocused(true))\r\n const handleBlur = React.useRef(() => setIsFocused(false))\r\n\r\n const input = \r\n if (!children && !prevMessage) return input\r\n\r\n return (\r\n \r\n \r\n \r\n {children ?? prevMessage}\r\n \r\n \r\n )\r\n}\r\n\r\nexport const TooltipInput = React.forwardRef(TooltipInputComponent)\r\n"],"names":["uploadMap","_ref","query","data","body","URLSearchParams","set","replace","window","location","pathname","includes","apiRequest","method","headers","ContentType","FormUrlEncoded","Share","props","uploadImage","useMutation","api","imageData","setImageData","React","onShareClick","async","queryString","decodeQueryString","extendedFilters","size","sizes","find","o","value","label","color","colors","canvas","document","getElementById","drawShareMap","BubbleStore","getDataUpdateTimeString","mutate","search","_jsx","ShareDialog","className","state","base64ImageData","_cancelRefetchInterval","_lastRequest","initReload","url","params","loadData","_lastRequest2","_lastRequest2$cancel","cancel","call","AppDispatcher","handleServerAction","type","ActionTypes","LOAD_DATA_COMPLETED","error","LOAD_DATA_FAILED","errorStatus","status","handleViewAction","LOAD_DATA_STARTED","intervalCallbackOnWindowVisible","interval","getMapsRefreshInterval","cancelReload","changeRange","range","_window$history","_window$history$repla","min","max","temp","CHANGE_RANGE","rangeType","history","replaceState","title","encodeQueryString","getParams","setHoveredNode","node","SET_HOVERED_NODE","setHoveredColor","SET_HOVERED_COLOR","BubblesHoverCanvas","constructor","arguments","_defineProperty","this","setState","hoveredNode","HoverStore","getHoveredNode","e","settings","hoverContext","canvasContext","bubbles","width","height","margin","hovered","_getHoveredNode","canvasRef","current","style","cursor","clearRect","left","right","top","bottom","save","lineWidth","textAlign","textBaseline","translate","d","clr","sc","rgb","d3","r","Math","round","g","b","fillStyle","strokeStyle","beginPath","arc","sx","sy","sr","PI","stroke","_renderText","restore","BubbleActionCreators","context","showText","px","py","pr","ax1","ax2","ay1","ay2","j","length","d2","bpx","bpy","bpr","_settings$bubble$colo","font","bubble","textShadow","fillText","ticker","_settings$color","p","_getArea","x","y","i","pow","rect","target","getBoundingClientRect","clientX","clientY","componentDidMount","addChangeListener","_onChange","getContext","isFirefoxDesktop","willReadFrequently","undefined","retinafy","Hammer","on","onDoubleTap","componentWillUnmount","removeChangeListener","render","ref","position","onMouseMove","_onMouseMove","Legend","Component","getHoveredColor","_handleStateUpdate","domain","colorFn","isNumberDomain","every","Number","isFinite","steps","step","push","onlyPositive","_jsxs","children","Icon","name","map","n","format","background","paddingLeft","paddingRight","opacity","onMouseEnter","ActionCreators","onMouseOut","getOffset","el","clientRect","pageYOffset","pageXOffset","Draggable","pos","initialPos","dragging","rel","touch","button","handleRef","offset","pageX","pageY","stopPropagation","preventDefault","touches","onChanged","ReactDOM","parentNode","changedPos","marginTop","marginLeft","retVal","onChange","onMouseLeave","componentDidUpdate","addEventListener","onMouseUp","removeEventListener","isVertical","onMouseDown","onTouchStart","classnames","tooltipShown","formatValue","tooltipValue","tooltipFormat","Slider","super","counts","slider","rotate","moveTo","lineTo","leftHandle","rightHandle","highlightStroke","count","distributionHighligt","distribution","fillRect","highlight","scaled","scale","invert","onRangeChange","_getCounts","apply","filter","copy","clamp","leftHandleHovered","leftHandleDragging","rightHandleHovered","rightHandleDragging","_onHandleChange","bind","_onHandleChanged","_showTooltip","_hideTooltip","getDerivedStateFromProps","rScale","getSizeScale","forEach","_ref2","val","_renderCanvas","labelX","labelY","BubbleChart","createRef","throttle","_getSize","_updateState","_getState","bubblesInRange","getBubblesInRange","scales","getScales","colorPalette","hoveredColor","c","_addShowTextToBubbles","isLoading","hasError","errorCode","getErrorCode","grid","xTicks","ticks","tick","dx","yTicks","dy","axis","text","formatXAxis","formatYAxis","isBubbleDimmed","fill","pointers","open","_onHoverStoreChange","Selects","option","isMobile","_onResize","_container$clientWidt","browserWidth","documentElement","clientWidth","innerWidth","browserHeight","clientHeight","innerHeight","scrollbarWidth","isScreener","classList","contains","container","containerWidth","TOOLTIP_WIDTH","message","allBubbles","getBubbles","formatX","formatY","id","_onDoubleTap","getRange","getXScale","_onRangeChange","getYScale","_render","formatted","parseFloat","toFixed","BubblesHover","shown","hoverWidth","scrollWidth","hoverHeight","scrollHeight","availWidth","availHeight","vals","xys","labelSize","labelColor","company","Object","keys","key","isETF","ETF_MARKET_CAP_LABEL","HoverChart","keyMirror","PUBLISH_BUBBLES_STARTED","PUBLISH_BUBBLES_COMPLETED","PUBLISH_BUBBLES_FAILED","PUBLISH_BUBBLES_CLOSE","PayloadSources","SERVER_ACTION","VIEW_ACTION","Dispatcher","action","payload","source","dispatch","SECTOR","href","idx","PERFORMANCE","ind","OTHER","tickers","sec","cap","PresetsModal","onClose","currentTarget","_closeModal","onClick","_hideModalOverlay","link","generatePresetUrl","Presets","isDark","showPresets","setShowPresets","_Fragment","Button","leftContent","theme","MARKET_CAP_VALUE","ETF_SECTOR_VALUE","ETF_INDUSTRY_IDS","indexes","sectors","industries","marketCaps","averageVolumes","BubblesInputTheme","BubblesInput","inputTheme","light","input","rounding","inputClass","dark","getInputTheme","Input","classname","SidebarContent","selected","handleSwitchAxis","handleSelect","item","handleBlur","ev","_selected$name","handleKeyDown","xOptions","yOptions","sizeOptions","hasETFs","subtitle","MapSelect","items","comboBox","listProps","nativeSelect","appearance","linkClassName","sh_avgvol","placeholder","onBlur","onKeyDown","defaultValue","excludeTickers","_isLoading","_hasError","_errorCode","_params","_rangeX","_rangeY","_dataUpdateTimeString","_bubbles","_bubblesInRange","_modal","failed","completed","imgUrl","shareUrl","Store","getRanges","getModal","bubbleStore","parseRange","parts","split","rangeX","rangeY","dispatchToken","register","emitChange","getFormattedDateString","parsedX","parsedY","parsedSize","parsedColor","sort","a","_hoveredNode","_hoveredColor","hoverStore","EventEmitter","emit","CHANGE_EVENT","callback","removeListener","DEFAULT_COLOR_SCALE","getValueWithFallback","values","fallback","_v$value","v","getDefaultValues","_query$rangeX","_query$rangeY","_query$tickers","_query$excludeTickers","decode","percentile","arr","excelPercentile","sequence","concat","N","k","nice","_colorScales","getColorScale","colorOption","gradient","linearScale","colorScale","bubbleGradients","nullColor","abs","ScaleId","DayPerf","presetConfig","baseQuery","fromEntries","finiteFormatting","absValue","MapSelectTheme","hasRedesign","FinvizSettings","hasRedesignEnabled","_props$rounding","_props$size","_props$listProps","ariaLabel","selectTheme","rightContent","popover","getMapSelectTheme","itemOptions","isSelectItemGroup","hasBorder","Select","classNames","Topbar","navContent","contentClass","mapControls","referrerPolicy","utils","dimensions","srcSet","src","dialogState","useDialogState","show","Dialog","DialogHeader","DialogBody","ShareDialogBody","isError","DialogFooter","as","DialogDismiss","Loading","ErrorView","showRefresh","alt","SocialShare","imageToDownloadURL","imageToDownloadBase64Data","canvasEl","fontFamily","getTextFontFamily","ratio","getScaleRatio","createElement","logo","loadImage","logoBase64","drawImage","t","toUpperCase","textWidth","measureText","divider","toDataURL","redGreenGradient","greenRedGradient","slice","reverse","redGradient","greenGradient","redGreenGradientBubbles","gradients","IntradayReduced","_5","_10","_15","_20","_25","_relvol","_pe","_fpe","_peg","_ps","_pb","_div","_eps5y","_short","_rec","_earndate","_portfolioPct","_portfolioUsd","_percentHundred","gradientSmall","DEFAULT_OVERLAYS","getHoverChartUrl","_FinvizSettings$hover","_FinvizSettings$hover2","_FinvizSettings$hover3","escaped","timeframe","hoverCharts","stock","dateRange","hasDarkTheme","overlays","hasUserPremium","patterns","cs","tf","ct","tm","nodeChartsDomain","getHoverChartDimensions","_FinvizSettings$hover4","_FinvizSettings$hover5","getReferrerPolicy","getHoverChartImg","_FinvizSettings$hover6","chartSize","getSrcSet","img","Promise","resolve","reject","image","Image","onload","onerror","_window$devicePixelRa","devicePixelRatio","ButtonSwitch","controlledValue","labelClassNames","groupRounding","activeTheme","readonly","restProps","internalValue","setInternalValue","handleChange","newValue","ButtonGroup","hasDivider","index","disabled","ColorVariant","CheckboxSize","CheckboxComponent","_props$checked","default","checked","defaultChecked","violet","emerald","orange","teal","pink","lime","purple","green","yellow","blue","red","gray","darkGray","Checkbox","forwardRef","num","isTouch","event","getRelativePosition","pointer","preventDefaultMove","DraggablePickerComponent","onMove","onKey","useRef","hasTouched","isDragging","setDragging","useState","isValid","handleMove","useCallback","buttons","handleMoveStart","nativeEvent","keyCode","which","handleMoveEnd","toggleDocumentEvents","toggleEvent","useLayoutEffect","tabIndex","DraggablePicker","memo","Pointer","backgroundColor","hexStringToRGBA","hexString","hexColor","removeHashSymbol","hexStringToHSVA","rgbaToHSVA","alphaToHex","alpha","toString","padStart","rgbaToHexString","hsvaToHEXString","hsvaToRGBA","h","s","f","rgbaToRGBAString","rgbaStringToObject","colorParts","exec","String","parseInt","strColor","isValidColor","isRgb","startsWith","Option","convertColorToHEX","getIsRgb","rgbKeys","some","getHSVAFromColor","Alpha","changeLightness","gradientPreview","useMemo","backgroundImage","DEFAULT_COLORS","ColorPalette","lowerCaseColor","toLowerCase","colorObj","isSelected","HueSaturation","getPositionFromHSLA","colorPreview","changeSaturation","Lightness","ColorPreview","icon","Array","isArray","isTooLight","getLumaFromRGBA","getIsColorTooLightOrTransparent","isValidIconName","PickerInput","hasColorPreview","colorInput","setColorInput","colorUtil","isRgba","useEffect","handleColorInputChange","colorValue","ColorPicker","canSelectCustom","canSelectAlpha","outputFormat","onPaletteItemClick","cachedColor","hsvaColor","setColor","Ariakit","currentColor","newColor","onChangeCallback","stringColor","output","onSetCustomCodeClick","_prompt","prompt","trim","alert","_hex","orignalColor","focus","preventScroll","InputColorPicker","inputDataTestId","popoverState","usePopoverState","isMobileDevice","PopoverTrigger","Popover","hideOnInteractOutside","backdrop","hide","MultiColorPicker","colorInputLabel","ColorTabButton","ButtonRounding","small","ButtonColorPicker","_ref3","buttonPickerDataTestId","isOpen","isMultiPicker","activeColorIndex","setActiveColorIndex","handleColorChange","originalColor","colorObject","active","_ref4","childComponent","_ref5","CopyToClipboard","bottomLeftContent","isCopied","setIsCopied","handleCopyToClipboard","timeout","resetTimer","clearTimeout","setTimeout","Textarea","readOnly","select","DropdownRounding","DropdownTheme","StatelessDropdown","trigger","modal","gutter","unmountOnHide","showOnHover","autoFocusOnShow","autoFocusOnHide","onFullyOpen","onFullyClosed","store","placement","zIndex","updatePosition","usePopoverPlacement","isFullyOpen","setIsFullyOpen","isMounted","wasMounted","usePrevious","menuGutter","parent","focusable","portal","hideOnHoverOutside","preventBodyScroll","focusWithoutScroll","blurWithoutScroll","none","onTransitionEnd","Dropdown","orientation","focusLoop","virtualFocus","DropdownItemComponent","asComponent","OptionButton","DropdownItem","useDropdownState","CHART_CONTEXT_MENU_ID","hasChartContextMenuGainedFocus","blurEvent","chartContextMenu","relatedTarget","ContextMenuInner","onContextMenu","MenuGroup","options","_item$onClick","_window$gtag","_window","gtag","assign","menu_option","ContextMenu","ChartGridCell","gridArea","GridLayout","columns","rows","border","gridTemplateColumns","gridTemplateRows","ChartGrid","defaultValueAccessor","InnerState","valueKey","changeKey","valueAccessor","RangeSize","RangeSlider","inputClassName","hasTrack","setHasTrack","trackRef","thumbRef","Boolean","thumbLeft","track","thumb","valuePercent","trackBox","thumbBox","Label","ToolbarTheme","ToolbarDirection","ToolbarContext","direction","vertical","chipTransparent","isWrapped","isStretched","useToolbarContext","getToolbarSettings","horizontal","alternative","Toolbar","hasFocusRings","toolbarRef","contextProviderValue","toolbarSettings","isSafariDesktop","forceReflow","originalWidth","offsetWidth","showTimeout","hideTimeout","Provider","querySelector","ToolbarButton","_props$appearance","_buttonSettings$size","_props$children","disabledTooltip","isInAction","isInActionProp","iconAction","buttonSettings","isActive","includeRedesign","grow","getButtonThemeSettings","getMainIcon","iconActive","menubar","blurOnHoverEnd","titleActive","Delayed","delay","delayComponent","Spinner","isMobileBrowser","ToolbarGroup","defaultItem","groupItems","groupTitle","useNativeSelect","rowId","selectedItem","setSelectedItem","groupId","toLocaleLowerCase","isAlternativeTheme","menu","menuButton","setMenuButton","mounted","anchorElement","parentMenu","menuContentElement","hideMenu","showMenu","handleMenuOpen","setDisclosureElement","setAnchorElement","NativeSelect","findIndex","onFocusVisible","onPointerDown","portalElement","ToolbarItem","isItemActive","ToolbarDivider","StepContent","Box","Heading","level","Paragraph","shepherdLibrary","loadShepherdLibrary","setLoading","shepherdPromise","buttonClasses","BUTTON_BASE_CLASS","BUTTON_FOCUS_STYLES","ButtonSize","regular","getStepButtons","tour","_step$backButton","_step$nextButton","complete","classes","getButtonTheme","ButtonTheme","ButtonPadding","back","backButton","next","nextButton","getTourKey","getStepsForUser","tours","_localStorage","lastFinishedTour","localStorage","getItem","lastTourIndex","allToursViewed","skip","toursToView","hasNewTours","reduce","acc","initialTour","completeTour","_localStorage2","setItem","DEFAULT_OPTIONS","exitOnEsc","useModalOverlay","useTour","setIsLoading","currentTour","setTour","controller","AbortController","loadingSetter","_controller$current","signal","aborted","_controller$current2","abort","startTour","definition","_controller$current3","setComplete","tourUtils","_definition$initialTo","Tour","from","removeStep","processedSteps","_step$placement","_step$offset","_step$overlayRadius","_step$overlayPadding","attachTo","element","floatingUIOptions","middleware","shift","padding","mainAxis","crossAxis","modalOverlayOpeningRadius","overlayRadius","modalOverlayOpeningPadding","overlayPadding","addSteps","start","event_label","TabSpacing","InternalTab","ariaSelected","spacing","content","Tab","TabList","TabPanel","Tabs","BadgeSize","BadgePadding","Badge","badgePadding","badgeSize","TagSize","TagPadding","TagFont","TagVariant","TagRounding","Tag","variant","tagPadding","tagSize","tagFont","tagRounding","tagVariant","throwOnTimeout","timeoutComponent","showContact","toContact","LoadingScreen","NotificationPosition","NotificationContext","useNotification","NotificationWrapper","setIsOpen","notification","setNotification","viewport","setViewport","useVisualViewport","enabled","getVisualViewport","visualViewport","positionClass","_notification$options","BottomLeft","TopLeft","TopRight","BottomRight","WrapperComponent","inline","role","hideOnEscape","transform","willChange","withNotificationContext","WrappedComponent","_WrappedComponent$dis","displayName","WithNotificationContext","notificationContext","NotificationTheme","Notification","closeText","actions","timeoutInMs","timeoutId","success","failure","imgFromUrlToBase64","fetch","then","URL","createObjectURL","response","blob","DownloadImageButton","downloadUrl","dataUrl","fileName","_downloadUrl$split$po","pop","imageUri","setImageUri","catch","download","event_category","FacebookShareButton","FacebookIcon","TwitterShareButton","via","_window$gtag2","_window2","TwitterIcon","TooltipInputComponent","tooltipSettings","isPointerEventsEnabled","prevMessage","isFocused","setIsFocused","handleFocus","TooltipTrigger","hideOnBlur","onFocus","Tooltip","TooltipInput"],"sourceRoot":""}