{"version":3,"file":"7751.fb7d41d8.js","mappings":"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9CZ,SAASO,iBAAiB,mBAAoBe,GAEvC,KACDP,GAAgBQ,aAAaR,GACjCf,SAASS,oBAAoB,mBAAoBa,EAAuB,CAE5E,gCClFO,SAASG,IACd,MAAO,MACT,4GCKA,MAoBaC,EAAmB,CAC9BC,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,WAEFC,UAAW,WAEPC,EAAmB,CAAEF,OAAQD,EAAiBC,OAAOG,QAAQC,UAAWH,UAAWF,EAAiBE,WACpGI,EAAc,CAAEL,OAAQD,EAAiBC,OAAOG,MAAM,EAAG,IAAIC,UAAWH,UAAWF,EAAiBE,WACpGK,EAAgB,CAAEN,OAAQD,EAAiBC,OAAOG,MAAM,IAAKF,UAAWF,EAAiBE,WA49DzFM,EAA0B,CAC9BP,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,WAEFC,UAAW,QAg/BAO,EAAiD,CAC5D,CAACC,EAAAA,GAAQC,SAAUX,EACnBY,GAAIZ,EACJa,IAAKb,EACLc,IAAKd,EACLe,IAAKf,EACLgB,IAAKhB,EACLiB,QA77HmB,CACnBhB,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,WAEFC,UAAW,WAm9FXgB,IAAKf,EACLgB,KAAMhB,EACNiB,KAAMjB,EACNkB,IAAKlB,EACLmB,IAAKnB,EACLoB,KAAMhB,EACNiB,OAAQxB,EACRyB,OAAQnB,EACRoB,KAAM1B,EACN2B,UA19FuB,CACvB1B,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,WAEFC,UAAW,WAg/DX0B,cAAe5B,EACf6B,cAAe7B,GAGJ8B,EAAuD,CAClE,CAACpB,EAAAA,GAAQC,SAAUH,EACnBI,GAAIJ,EACJK,IAAKL,EACLM,IAAKN,EACLO,IAAKP,EACLQ,IAAKR,EACLS,QA3gC0B,CAC1BhB,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,WAEFC,UAAW,QAiCXgB,IAAKV,EACLW,KAAMX,EACNY,KAAMZ,EACNa,IAAKb,EACLc,IAAKd,EACLe,KAAMf,EACNgB,OAAQhB,EACRiB,OAAQjB,EACRkB,KAAMlB,EACNmB,UAAWnB,EACXoB,cAAepB,EACfqB,cAAerB,GAGJuB,EAviIiB,CAC5B9B,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFC,UAAW,yCCtBN,SAAS8B,EAAUC,GACxB,OAAO,IAAIC,SAAQ,CAACC,EAASC,KAC3B,IAAIC,EAAQ,IAAIC,MAEhBD,EAAME,OAAS,WACbJ,EAAQE,EACV,EAEAA,EAAMG,QAAU,WACdJ,GACF,EAEAC,EAAMJ,IAAMA,CAAG,GAEnB,gDCjBO,SAASQ,IAAgB,IAAAC,EAC9B,OAA8B,QAA9BA,EAAOlD,OAAOmD,wBAAgB,IAAAD,EAAA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","sources":["webpack://@finviz/website/../config/colors.js","webpack://@finviz/website/./js/app/maps/components/MapSelect.tsx","webpack://@finviz/website/./js/app/shared/documentVisibility.ts","webpack://@finviz/website/./js/app/shared/getTextFontFamily.ts","webpack://@finviz/website/./js/app/shared/gradients.ts","webpack://@finviz/website/./js/app/shared/loadImage.ts","webpack://@finviz/website/./js/app/shared/retinafy.ts","webpack://@finviz/website/./js/main/components/button-group/button-group.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/date-picker/index.tsx","webpack://@finviz/website/./js/main/components/dropdown/hooks.ts","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/dropdown-separator.tsx","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/popover/popover.tsx","webpack://@finviz/website/./js/main/components/popover/hooks.ts","webpack://@finviz/website/./js/main/components/popover/popover-trigger.tsx","webpack://@finviz/website/./js/main/components/select/NativeSelect.tsx","webpack://@finviz/website/./js/main/components/select/ItemsGroup.tsx","webpack://@finviz/website/./js/main/components/select/SelectOption.tsx","webpack://@finviz/website/./js/main/components/select/SelectItems.tsx","webpack://@finviz/website/./js/main/components/select/SelectList.tsx","webpack://@finviz/website/./js/main/components/select/SelectTooltipWrapper.tsx","webpack://@finviz/website/./js/main/components/select/DesktopSelect.tsx","webpack://@finviz/website/./js/main/components/select/SelectButton.tsx","webpack://@finviz/website/./js/main/components/select/Select.tsx","webpack://@finviz/website/./js/main/components/select/utils.ts","webpack://@finviz/website/./js/main/components/timeframe-bar/daterange-select.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/label-with-delayed-spinner.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/timeframe-select.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/timeframe-bar.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/utils.ts","webpack://@finviz/website/./js/main/components/timeframe-bar/custom-date-range-utils.ts","webpack://@finviz/website/./js/main/components/timeframe-bar/custom-date-range.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/use-custom-date-range-dialog.tsx","webpack://@finviz/website/./js/main/components/timeframe-bar/use-favorite-timeframes.tsx","webpack://@finviz/website/./js/main/hooks/use-sync-local-storage.ts","webpack://@finviz/website/./js/main/components/tooltip-input.tsx","webpack://@finviz/website/./js/main/hooks/use-popover-maxHeight.ts","webpack://@finviz/website/./js/main/hooks/use-window-size.tsx","webpack://@finviz/website/./js/main/services/local-storage.ts","webpack://@finviz/website/./js/main/services/wait-for-previous-promise.ts","webpack://@finviz/website/../node_modules/flux/index.js","webpack://@finviz/website/../node_modules/flux/lib/Dispatcher.js","webpack://@finviz/website/../node_modules/flux/lib/invariant.js","webpack://@finviz/website/../node_modules/hammerjs/hammer.js","webpack://@finviz/website/../node_modules/keymirror/index.js"],"sourcesContent":["// Keep in sync with charts repository colors.js file in: app/constants/colors.js\r\n\r\nmodule.exports = {\r\n white: '#fff',\r\n black: '#000',\r\n inherit: 'inherit',\r\n transparent: 'transparent',\r\n current: 'currentColor',\r\n finviz: {\r\n 'blue-gray': '#262931',\r\n blue: '#4fa4f4',\r\n },\r\n gray: {\r\n 50: '#f3f3f5',\r\n 100: '#dedfe5',\r\n 200: '#c3c6d0',\r\n 300: '#a3a8b9',\r\n 400: '#868ea5',\r\n 500: '#676f85',\r\n 600: '#4c5263',\r\n 700: '#353945',\r\n 750: '#2c303b',\r\n 800: '#22262f',\r\n 900: '#14161d',\r\n },\r\n red: {\r\n 50: '#fef0f0',\r\n 100: '#fcd6d6',\r\n 200: '#fbb4b4',\r\n 300: '#fd8487',\r\n 400: '#fb5057',\r\n 500: '#d91e2b',\r\n 600: '#9f1f2a',\r\n 700: '#691f24',\r\n 800: '#45171a',\r\n 900: '#280e0f',\r\n },\r\n orange: {\r\n 50: '#fef2eb',\r\n 100: '#fdd9c5',\r\n 200: '#fab889',\r\n 300: '#ef9323',\r\n 400: '#ca7b14',\r\n 500: '#a0600e',\r\n 600: '#79460a',\r\n 700: '#583006',\r\n 800: '#3d1e03',\r\n 900: '#261101',\r\n },\r\n amber: {\r\n 50: '#fef2e7',\r\n 100: '#fedab5',\r\n 200: '#fbba56',\r\n 300: '#de9c1a',\r\n 400: '#bb830f',\r\n 500: '#956600',\r\n 600: '#704b00',\r\n 700: '#4f3400',\r\n 800: '#372200',\r\n 900: '#211300',\r\n },\r\n yellow: {\r\n 50: '#fdf2df',\r\n 100: '#fcdc86',\r\n 200: '#f3c736',\r\n 300: '#cda30b',\r\n 400: '#b08900',\r\n 500: '#8b6a00',\r\n 600: '#664e21',\r\n 700: '#46371e',\r\n 800: '#2f2516',\r\n 900: '#1b150d',\r\n },\r\n brightYellow: {\r\n 50: '#fff699',\r\n 100: '#fff200',\r\n },\r\n lime: {\r\n 50: '#ebfad6',\r\n 100: '#caec90',\r\n 200: '#aad547',\r\n 300: '#8db61e',\r\n 400: '#769913',\r\n 500: '#5b7800',\r\n 600: '#435900',\r\n 700: '#2e3e00',\r\n 800: '#1e2a00',\r\n 900: '#111900',\r\n },\r\n green: {\r\n 50: '#e7f7e8',\r\n 100: '#beeac1',\r\n 200: '#86d895',\r\n 300: '#34c062',\r\n 400: '#00a449',\r\n 500: '#19803d',\r\n 600: '#265d35',\r\n 700: '#1e4027',\r\n 800: '#162b1b',\r\n 900: '#0d1810',\r\n },\r\n emerald: {\r\n 50: '#ddfaee',\r\n 100: '#a2f0d2',\r\n 200: '#4dddaf',\r\n 300: '#25be93',\r\n 400: '#1d9f7b',\r\n 500: '#157e60',\r\n 600: '#035d47',\r\n 700: '#004139',\r\n 800: '#002c22',\r\n 900: '#001a13',\r\n },\r\n teal: {\r\n 50: '#e0f8fc',\r\n 100: '#9beef7',\r\n 200: '#4fd8e5',\r\n 300: '#27b9c4',\r\n 400: '#109ba5',\r\n 500: '#007c83',\r\n 600: '#005b62',\r\n 700: '#004045',\r\n 800: '#002b2e',\r\n 900: '#00191b',\r\n },\r\n blue: {\r\n 50: '#ebf4fe',\r\n 100: '#cae2fc',\r\n 200: '#9bcbfa',\r\n 300: '#57aefb',\r\n 400: '#2f91ef',\r\n 500: '#306dca',\r\n 600: '#2f5091',\r\n 700: '#263766',\r\n 800: '#1b2542',\r\n 900: '#101527',\r\n },\r\n violet: {\r\n 50: '#f4f2fe',\r\n 100: '#e1dbfd',\r\n 200: '#c9befc',\r\n 300: '#ad9bfb',\r\n 400: '#9978f9',\r\n 500: '#7c51e7',\r\n 600: '#5e36b8',\r\n 700: '#402979',\r\n 800: '#2a1e4e',\r\n 900: '#18122c',\r\n },\r\n purple: {\r\n 50: '#f9f1fe',\r\n 100: '#eed8fd',\r\n 200: '#e1b6fc',\r\n 300: '#d38bfb',\r\n 400: '#c85bf9',\r\n 500: '#ae27e0',\r\n 600: '#8514ac',\r\n 700: '#60077e',\r\n 800: '#44005a',\r\n 900: '#2a003a',\r\n },\r\n pink: {\r\n 50: '#fef1f4',\r\n 100: '#fdd6e1',\r\n 200: '#fcb2c7',\r\n 300: '#f984aa',\r\n 400: '#f25090',\r\n 500: '#cd2a74',\r\n 600: '#9d1658',\r\n 700: '#700c42',\r\n 800: '#4e052b',\r\n 900: '#32011a',\r\n },\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\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\r\n return (\r\n
\r\n {label && (\r\n

{label}

\r\n )}\r\n \r\n
\r\n )\r\n}\r\n","import { waitForPreviousPromise } from '../../main/services/wait-for-previous-promise'\r\n\r\nfunction getCurrentDateInMs() {\r\n return new Date().valueOf()\r\n}\r\n\r\nfunction getIsDocumentVisible() {\r\n return document.visibilityState === 'visible' || document.hidden === false\r\n}\r\n\r\n/**\r\n * Invoke a callback when page visibility changes. Turns the callback into a promise\r\n * and waits for the previous promise to finish before invoking it again\r\n */\r\nexport function notifyOnVisibilityChange(callback: (visible: boolean) => void | Promise) {\r\n const promisifiedCallback = waitForPreviousPromise(() => callback(getIsDocumentVisible()))\r\n\r\n document.addEventListener('visibilitychange', promisifiedCallback)\r\n\r\n return {\r\n callback: promisifiedCallback,\r\n unsubscribe: () => {\r\n document.removeEventListener('visibilitychange', promisifiedCallback)\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * Calls callback based on interval and document visibility. Returns unsubscribe function.\r\n * How it works:\r\n * - document is hidden: interval cleared\r\n * - document visible: interval set-up with remaining time from last interval. Call immediately if interval elapsed\r\n */\r\nexport function intervalCallbackOnWindowVisible(\r\n interval: number | (() => number),\r\n callback: () => void | Promise\r\n) {\r\n const getInterval = typeof interval === 'function' ? interval : () => interval\r\n let refreshPromise: Promise | void | null = null\r\n let nextRefresh = getCurrentDateInMs() + getInterval()\r\n let refreshTimeout: number | null = null\r\n\r\n async function refresh() {\r\n nextRefresh = getCurrentDateInMs() + getInterval()\r\n // Call callback asynchronously\r\n refreshPromise = callback()\r\n await refreshPromise\r\n refreshPromise = null\r\n\r\n // Queue next refresh\r\n if (getIsDocumentVisible()) {\r\n refreshTimeout = window.setTimeout(refresh, Math.max(0, nextRefresh - getCurrentDateInMs()))\r\n }\r\n }\r\n\r\n /**\r\n * Handle the visibility change event, compute callback remaining time or call immediately\r\n */\r\n function handleVisibilityChange() {\r\n if (refreshTimeout) clearTimeout(refreshTimeout)\r\n\r\n if (getIsDocumentVisible() && refreshPromise === null) {\r\n const currentDateMs = getCurrentDateInMs()\r\n // Refresh if the document is stale, otherwise set a timeout to refresh later\r\n if (nextRefresh <= currentDateMs) {\r\n refresh()\r\n } else {\r\n refreshTimeout = window.setTimeout(refresh, nextRefresh - currentDateMs)\r\n }\r\n }\r\n }\r\n\r\n if (getIsDocumentVisible()) {\r\n refreshTimeout = window.setTimeout(refresh, getInterval())\r\n }\r\n\r\n document.addEventListener('visibilitychange', handleVisibilityChange)\r\n\r\n return () => {\r\n if (refreshTimeout) clearTimeout(refreshTimeout)\r\n document.removeEventListener('visibilitychange', handleVisibilityChange)\r\n }\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.DayPerf]: redGreenGradient,\r\n _5: redGreenGradient,\r\n _10: redGreenGradient,\r\n _15: redGreenGradient,\r\n _20: redGreenGradient,\r\n _25: redGreenGradient,\r\n _relvol: blueGradient,\r\n _pe: greenRedGradient,\r\n _fpe: greenRedGradient,\r\n _peg: greenRedGradient,\r\n _ps: greenRedGradient,\r\n _pb: greenRedGradient,\r\n _div: greenGradient,\r\n _eps5y: redGreenGradient,\r\n _short: redGradient,\r\n _rec: redGreenGradient,\r\n _earndate: earningsGradient,\r\n _portfolioPct: redGreenGradient,\r\n _portfolioUsd: redGreenGradient,\r\n}\r\n\r\nexport const bubbleGradients: Record = {\r\n [ScaleId.DayPerf]: redGreenGradientBubbles,\r\n _5: redGreenGradientBubbles,\r\n _10: redGreenGradientBubbles,\r\n _15: redGreenGradientBubbles,\r\n _20: redGreenGradientBubbles,\r\n _25: redGreenGradientBubbles,\r\n _relvol: blueGradientBubbles,\r\n _pe: redGreenGradientBubbles,\r\n _fpe: redGreenGradientBubbles,\r\n _peg: redGreenGradientBubbles,\r\n _ps: redGreenGradientBubbles,\r\n _pb: redGreenGradientBubbles,\r\n _div: redGreenGradientBubbles,\r\n _eps5y: redGreenGradientBubbles,\r\n _short: redGreenGradientBubbles, // TODO red skala\r\n _rec: redGreenGradientBubbles,\r\n _earndate: redGreenGradientBubbles,\r\n _portfolioPct: redGreenGradientBubbles,\r\n _portfolioUsd: redGreenGradientBubbles,\r\n}\r\n\r\nexport const gradientSmall = redGreenGradientSmall\r\n","/**\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, ButtonRounding, ButtonRoundingType } from '../button'\r\n\r\nexport enum GroupTheme {\r\n light,\r\n dark,\r\n}\r\n\r\nexport interface ButtonGroupProps {\r\n children: React.ReactNode\r\n\r\n /**\r\n * Border radius of entire group wrapper\r\n *\r\n * @default \"regular\"\r\n */\r\n rounding?: ButtonRoundingType\r\n\r\n className?: string\r\n\r\n /**\r\n * If a pipe divider between buttons should be rendered\r\n *\r\n * @default true\r\n */\r\n hasDivider?: boolean\r\n\r\n /**\r\n * If group wrapper has a border\r\n *\r\n * @default true\r\n */\r\n hasBorder?: boolean\r\n\r\n /**\r\n * Group color theme\r\n *\r\n * @default \"light\"\r\n */\r\n theme?: keyof typeof GroupTheme\r\n\r\n /**\r\n * Custom button component which extends Button\r\n *\r\n * @default undefined\r\n */\r\n childComponent?: string | React.JSXElementConstructor\r\n}\r\n\r\nfunction getGroupTheme(theme: GroupTheme) {\r\n switch (theme) {\r\n case GroupTheme.dark:\r\n return {\r\n wrapper: 'bg-gray-800 border-gray-600',\r\n divider: 'bg-gray-600',\r\n }\r\n default:\r\n return {\r\n wrapper: 'bg-white dark:bg-gray-800 border-gray-100 dark:border-gray-600',\r\n divider: 'bg-gray-100 dark:bg-gray-600',\r\n }\r\n }\r\n}\r\n\r\nexport function ButtonGroup({\r\n className,\r\n children,\r\n theme = 'light',\r\n hasDivider = true,\r\n hasBorder = true,\r\n rounding = 'regular',\r\n childComponent,\r\n}: ButtonGroupProps) {\r\n const buttonRounding = ButtonRounding[rounding]\r\n const groupTheme = React.useMemo(() => getGroupTheme(GroupTheme[theme]), [theme])\r\n return (\r\n \r\n {React.Children.map(children, (child, index) => {\r\n if (!React.isValidElement(child) || ![Button, childComponent].filter(Boolean).includes(child.type)) {\r\n return child\r\n }\r\n\r\n return (\r\n \r\n {hasDivider && index > 0 &&
}\r\n {React.cloneElement(child as React.ReactElement>, {\r\n rounding: child.props.rounding ?? 'none',\r\n theme: child.props.theme ?? (GroupTheme[theme] === GroupTheme.dark ? 'menuItemDark' : 'menuItem'),\r\n })}\r\n \r\n )\r\n })}\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}\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) => {\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) => {\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 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\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 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 popoverState.hide()}\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, PopoverProps, 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 * Hides color picker when clicked outside of popover,\r\n * works with changing focus from the trigger component to another one\r\n *\r\n * @default true\r\n */\r\n hideOnClickOutside: PopoverProps['hideOnClickOutside']\r\n\r\n /**\r\n * Popover overlay click callback, if nothing's provided it calls hide when clicked outside of popover on its overlay\r\n * If false is provided, overlay click calls hide func on popover state object\r\n *\r\n * @default undefined\r\n */\r\n onOverlayClick?: (() => void) | false\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 hideOnClickOutside = true,\r\n onOverlayClick,\r\n ...props\r\n}: ButtonColorPickerProps) {\r\n const popoverState = usePopoverState()\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 React from 'react'\r\nimport { CalendarProps } from 'react-calendar'\r\n\r\nimport { Box } from '../box'\r\nimport { ZIndexContext, getExtendedDialogState } from '../dialog'\r\nimport { Popover, PopoverTrigger, usePopoverState } from '../popover'\r\nimport { Spinner } from '../spinner'\r\n\r\nconst DatePickerComponent = React.lazy(() => import('./picker'))\r\n\r\ntype RangePickerCallback = (value: [Date, Date], ev: React.ChangeEvent) => void\r\ntype PickerCallback = (value: Date, ev: React.ChangeEvent) => void\r\n\r\ninterface DatePickerProps extends Omit {\r\n /**\r\n * Trigger element for the picker\r\n */\r\n children: JSX.Element\r\n\r\n onChange: PickerCallback | RangePickerCallback\r\n\r\n zIndex?: string\r\n}\r\n\r\nexport function StatelessDatePicker({\r\n state,\r\n children,\r\n zIndex,\r\n ...props\r\n}: DatePickerProps & { state: ReturnType; zIndex?: string }) {\r\n const { isFullyClosed } = getExtendedDialogState(state)\r\n return (\r\n <>\r\n \r\n {(triggerProps: React.HTMLProps) =>\r\n React.Children.map(children, (child) => {\r\n if (React.isValidElement(child))\r\n return React.cloneElement(child, { ...triggerProps, ...(child.props as any) })\r\n })\r\n }\r\n \r\n {!isFullyClosed && (\r\n \r\n \r\n \r\n \r\n \r\n }\r\n >\r\n ) => {\r\n state.hide()\r\n props.onChange?.(value, ev)\r\n }}\r\n />\r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport function DatePicker(props: DatePickerProps) {\r\n const popover = usePopoverState()\r\n\r\n return \r\n}\r\n","import * as React from 'react'\r\nimport * as Reakit from 'reakit/Menu'\r\n\r\nimport { COMPONENT_ANIMATION_DURATION } from '../constants'\r\n\r\nexport type DropdownStateReturn = ReturnType\r\n\r\nexport const DropdownContext = React.createContext<{\r\n parent: Reakit.MenuStateReturn\r\n root: Reakit.MenuStateReturn\r\n} | null>(null)\r\n\r\nexport function useDropdownState(settings?: Reakit.MenuInitialState) {\r\n const context = React.useContext(DropdownContext)\r\n\r\n return Reakit.useMenuState({\r\n ...settings,\r\n loop: true,\r\n animated: COMPONENT_ANIMATION_DURATION,\r\n unstable_virtual: true,\r\n unstable_offset: settings?.unstable_offset ?? (context?.root ? [-5, 4] : [0, 5]),\r\n modal: false,\r\n })\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Menu'\r\nimport { Portal } from 'reakit/Portal'\r\n\r\nimport { Box, BoxProps, BoxRounding } from '../box'\r\nimport { getExtendedDialogState, useZIndex } from '../dialog'\r\nimport { DropdownContext, useDropdownState } from './hooks'\r\n\r\ninterface DropdownBaseProps extends Omit {\r\n /**\r\n * Trigger button for the dropdown\r\n */\r\n label: JSX.Element\r\n\r\n /**\r\n * @private\r\n * Any additional props to the trigger button. Used by nested dropdown wrapper\r\n */\r\n triggerProps?: Reakit.MenuButtonHTMLProps\r\n\r\n /**\r\n * Rounding of all trigger button, dropdown wrapper and dropdown items\r\n */\r\n rounding?: keyof typeof BoxRounding\r\n}\r\n\r\ninterface RootDropdownProps {\r\n /**\r\n * The returned object from `useDropdownState`. For nested dropdowns use the `isNested` prop\r\n */\r\n state: Reakit.MenuStateReturn\r\n isNested?: never\r\n /**\r\n * When set to true the dropdown will not render in Portal and will not use position absolute + transform.\r\n */\r\n isStatic?: boolean\r\n}\r\n\r\ninterface NestedDropdownProps {\r\n state?: never\r\n /**\r\n * When set to true the dropdown will compute its own state. Only usable with\r\n * nested dropdowns\r\n */\r\n isNested: true\r\n\r\n isStatic?: never\r\n}\r\n\r\ntype DropdownProps = DropdownBaseProps & (RootDropdownProps | NestedDropdownProps)\r\n\r\nfunction DropdownComponent(\r\n {\r\n label,\r\n triggerProps,\r\n state,\r\n 'aria-label': ariaLabel,\r\n children,\r\n isNested,\r\n rounding,\r\n isStatic,\r\n ...props\r\n }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const zIndex = useZIndex()\r\n const context = React.useContext(DropdownContext)\r\n // Required due to the way conditional props work\r\n const dropdownState = state!\r\n const { isFullyClosed } = getExtendedDialogState(state ?? { visible: false, animating: false })\r\n\r\n if (!isNested && !dropdownState) {\r\n throw new Error('Dropdowns require either `state` or `isNested` prop defined!')\r\n }\r\n\r\n const ContainerElement = React.useRef(isNested || isStatic ? React.Fragment : Portal).current\r\n\r\n return (\r\n <>\r\n \r\n {(buttonProps) =>\r\n React.cloneElement(label, {\r\n ...buttonProps,\r\n ...label.props,\r\n rounding,\r\n active: label.props.active ?? dropdownState.visible,\r\n })\r\n }\r\n \r\n {!isFullyClosed && (\r\n \r\n \r\n {({ onTransitionEnd, onAnimationEnd, ...innerProps }) => (\r\n \r\n \r\n \r\n {React.Children.map(children, (child) => {\r\n if (!React.isValidElement(child)) return child\r\n\r\n if (child.type === Dropdown) {\r\n return {child}\r\n }\r\n\r\n return React.cloneElement(child, {\r\n ...child.props,\r\n rounding,\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\nexport const Dropdown = React.forwardRef(DropdownComponent)\r\n\r\ninterface NestedDropdownWrapperProps {\r\n /**\r\n * State of parrent dropdown to be passed to MenuItem for correct navigation\r\n * handling\r\n */\r\n parentState: Reakit.MenuStateReturn\r\n\r\n /**\r\n * Nested dropdown element\r\n */\r\n children: JSX.Element\r\n}\r\n\r\n/**\r\n * The `useDropdownState` requires parent context to be defined in order to work\r\n * with nested Dropdowns. So we need to create a wrapper to be able to get to the\r\n * parent context\r\n */\r\nfunction NestedDropdownWrapper({ parentState, children }: NestedDropdownWrapperProps) {\r\n const state = useDropdownState()\r\n\r\n return (\r\n \r\n {(itemProps) => React.cloneElement(children, { ...children.props, triggerProps: itemProps, state })}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Menu'\r\n\r\nimport { Button, ButtonProps } from '../button'\r\nimport { Icon, isValidIconName } from '../icon'\r\nimport { PropsWithAs } from '../types'\r\nimport { DropdownContext } from './hooks'\r\n\r\nconst DEFAULT_ELEMENT = 'button'\r\n\r\ninterface DropdownItemProps extends ButtonProps {\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 closeOnClick?: boolean\r\n}\r\n\r\nfunction DropdownItemComponent(\r\n {\r\n as: asComponent,\r\n state,\r\n subtitle,\r\n closeOnClick = true,\r\n children,\r\n rounding,\r\n size,\r\n ...props\r\n }: PropsWithAs & DropdownItemProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const context = React.useContext(DropdownContext)\r\n\r\n return (\r\n \r\n {(itemProps) => {\r\n const active = itemProps['aria-selected'] && !context?.parent.animating\r\n const hasSubmenu = Boolean(itemProps['aria-haspopup'])\r\n\r\n const iconTheme = {\r\n 'text-gray-300': !active,\r\n 'text-gray-white dark:text-white': active,\r\n }\r\n\r\n return (\r\n \r\n ) : (\r\n props.leftContent\r\n )\r\n }\r\n rightContent={\r\n isValidIconName(props.rightContent) ? (\r\n \r\n ) : (\r\n props.rightContent\r\n )\r\n }\r\n onClick={(ev: React.MouseEvent) => {\r\n // Close if we clicked on an item which doesn’t have a submenu\r\n if (closeOnClick && !hasSubmenu) {\r\n context?.root.hide()\r\n }\r\n\r\n itemProps.onClick?.(ev)\r\n }}\r\n >\r\n {children}\r\n {subtitle &&
{subtitle}
}\r\n \r\n )\r\n }}\r\n
\r\n )\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 DEFAULT_ELEMENT,\r\n>(\r\n props: PropsWithAs & DropdownItemProps & { ref?: React.ForwardedRef }\r\n) => ReturnType\r\n","import * as Reakit from 'reakit/Menu'\r\n\r\nimport { Paragraph } from '../typography'\r\n\r\nexport function DropdownSeparator(props: Partial) {\r\n return (\r\n \r\n
\r\n {props.children && (\r\n \r\n {props.children}\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { usePopper } from 'react-popper'\r\n\r\nimport { usePopoverMaxHeight } from '../../hooks/use-popover-maxHeight'\r\nimport { Button } from '../button'\r\nimport { getExtendedDialogState } from '../dialog'\r\nimport { Dropdown, DropdownItem, DropdownSeparator, useDropdownState } from '../dropdown'\r\nimport { ObjectHash } from '../types'\r\n\r\nconst DEFAULT_OFFSETS: [number, number] = [5, 5]\r\n\r\nfunction getVirtualRef(top: number, left: number) {\r\n return {\r\n getBoundingClientRect(): DOMRect {\r\n const rect = {\r\n top: top - window.scrollY,\r\n x: top - window.scrollY,\r\n left: left - window.scrollX,\r\n y: left - window.scrollX,\r\n bottom: top,\r\n right: left,\r\n width: 0,\r\n height: 0,\r\n }\r\n\r\n return {\r\n ...rect,\r\n toJSON: () => rect,\r\n }\r\n },\r\n }\r\n}\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 ContextMenuProps {\r\n /**\r\n * Top coordinate of the click\r\n */\r\n top: number\r\n\r\n /**\r\n * Left coordinate of the click\r\n */\r\n left: number\r\n\r\n /**\r\n * Can limit the max height of the menu\r\n *\r\n * @default undefined\r\n */\r\n menuMaxHeight?: number\r\n\r\n /**\r\n * Items visible in the menu\r\n */\r\n items: ContextMenuItem[]\r\n\r\n /**\r\n * Callback to hide the menu\r\n */\r\n hide: () => void\r\n}\r\n\r\nexport function ContextMenu({ top, left, menuMaxHeight, hide, items }: ContextMenuProps) {\r\n const [popperElement, setPopperElement] = React.useState(null)\r\n const virtualRef = React.useMemo(() => getVirtualRef(top, left), [left, top])\r\n const dropdownState = useDropdownState({ placement: 'bottom-start' })\r\n const { isFullyClosed } = getExtendedDialogState(dropdownState)\r\n const hasBeenOpen = React.useRef(false)\r\n\r\n const { styles, attributes } = usePopper(virtualRef, popperElement, {\r\n placement: 'auto-end',\r\n modifiers: [\r\n {\r\n name: 'offset',\r\n options: {\r\n offset: DEFAULT_OFFSETS,\r\n },\r\n },\r\n ],\r\n })\r\n\r\n /**\r\n * This effect handles closing the context menu (parent element) itself\r\n */\r\n React.useEffect(() => {\r\n if (isFullyClosed && hasBeenOpen.current) hide()\r\n }, [isFullyClosed, hide])\r\n\r\n /**\r\n * This effect handles opening/closing the inner dropdown\r\n */\r\n React.useEffect(() => {\r\n dropdownState.show()\r\n hasBeenOpen.current = true // This acts as a way to differentiate the first render\r\n\r\n return () => dropdownState.hide()\r\n // This needs to run only on mount/unmount for obvious reasons\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n return (\r\n \r\n }\r\n menuMaxHeight={menuMaxHeight}\r\n state={dropdownState}\r\n items={items}\r\n isStatic\r\n />\r\n
\r\n )\r\n}\r\n\r\ninterface ContextMenuInnerProps {\r\n label: JSX.Element\r\n items: ContextMenuItem[]\r\n state: ReturnType\r\n isStatic?: boolean\r\n menuMaxHeight?: number\r\n}\r\n\r\nfunction ContextMenuInner(\r\n { label, items, state, isStatic, menuMaxHeight = Number.MAX_SAFE_INTEGER }: ContextMenuInnerProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const innerState = useDropdownState({ placement: 'right-start' })\r\n const maxHeightStyle = usePopoverMaxHeight({\r\n maxHeightLimit: menuMaxHeight,\r\n hasViewportHeightLimit: true,\r\n offsets: DEFAULT_OFFSETS,\r\n state,\r\n })\r\n\r\n return (\r\n \r\n {items.map((item, index) => {\r\n if (item.type === 'divider') {\r\n return {item.label}\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 items={item.options}\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 className=\"shrink-0\"\r\n >\r\n {item.label}\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n\r\nconst ContextMenuDropdown = 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\nconst DEFAULT_VALUE_KEY = 'value'\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 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 { 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 p-1.5 bg-white dark:bg-gray-800', {\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 'relative z-10 rounded-md border border-gray-100 dark:border-gray-600': isMobile,\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 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 // reason for key is that popover is sealing initial state, description in\r\n // https://github.com/finvizhq/Finviz-Website/pull/402\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import 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 theme,\r\n isActive,\r\n isStretched,\r\n isInAction,\r\n}: {\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 {\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 '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 item: IToolbarItem\r\n disabledTooltip?: string\r\n isInAction?: boolean\r\n isLoading?: boolean\r\n}\r\n\r\nexport function ToolbarButton({\r\n item,\r\n disabledTooltip,\r\n isInAction: isInActionProp,\r\n isLoading,\r\n ...props\r\n}: PropsWithAs & ToolbarButtonProps) {\r\n const { theme, isStretched } = useToolbarContext()\r\n const isInAction = isInActionProp && item.iconAction !== undefined\r\n const buttonSettings = getButtonThemeSettings({\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 & ToolbarButtonProps)}\r\n appearance={props.appearance ?? 'square'}\r\n title={props.disabled && disabledTooltip ? disabledTooltip : (props.active && item.titleActive) || item.title}\r\n size={\r\n buttonSettings.size ??\r\n (theme === ToolbarTheme.chipTransparent || FinvizSettings.hasRedesignEnabled ? 'medium' : 'large')\r\n }\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","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { Icon } from '../icon'\r\nimport { List, ListItem, useListState } from '../list'\r\nimport { useList } from '../list/hooks'\r\nimport { Popover, PopoverTrigger, useHoverPopover } from '../popover'\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\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\r\nexport function ToolbarGroup({\r\n defaultItem,\r\n isActive,\r\n isLoading,\r\n groupItems,\r\n groupTitle,\r\n onChange,\r\n useNativeSelect = isMobile(),\r\n disabled,\r\n disabledTooltip,\r\n}: ToolbarGroupProps) {\r\n const listState = useListState({ currentId: null })\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 const popoverState = useHoverPopover({\r\n placement: isAlternativeTheme && isStretched ? 'bottom' : 'right-start',\r\n })\r\n const select = useList(\r\n popoverState,\r\n selectedItem.id,\r\n groupItems?.map((i) => ({ value: i.id, label: i.title })) ?? [],\r\n (option) => {\r\n setSelectedItem(groupItems![groupItems!.findIndex((item) => item.id === option.value)])\r\n onChange(option.value, 'select')\r\n }\r\n )\r\n\r\n return (\r\n \r\n ) => {\r\n ev.preventDefault()\r\n ev.stopPropagation()\r\n onChange(selectedItem.id, 'group')\r\n }}\r\n >\r\n \r\n \r\n \r\n\r\n {useNativeSelect ? (\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 {groupItems.map((item) => (\r\n }\r\n data-testid={`toolbar-group-${groupId}-${item.id}`}\r\n >\r\n {item.title}\r\n \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}: 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 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(buttonClasses, 'mr-auto', getButtonTheme(ButtonTheme.light).button, ButtonPadding.regular),\r\n text: 'Exit',\r\n },\r\n index > 0 && {\r\n action: tour.back,\r\n classes: classnames(buttonClasses, getButtonTheme(ButtonTheme.light).button, ButtonPadding.regular),\r\n text: step.backButton ?? 'Back',\r\n },\r\n {\r\n classes: classnames(buttonClasses, getButtonTheme(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.Step.StepOptions[] {\r\n return steps.map((step, index) => ({\r\n attachTo: { element: step.target, on: step.placement ?? 'auto' },\r\n classes: 'z-dialog',\r\n // Add offset\r\n popperOptions: {\r\n modifiers: [\r\n {\r\n name: 'offset',\r\n options: {\r\n offset: step.offset ?? [0, 10],\r\n },\r\n },\r\n ],\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.Tour.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 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","import * 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}\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-[5px] 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 size?: BadgeSizeType\r\n padding?: BadgePaddingType\r\n active?: boolean\r\n}\r\n\r\nexport function Badge({ size = 'medium', padding = size, active, children }: 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 * as React from 'react'\r\nimport * as Reakit from 'reakit/Popover'\r\nimport { Portal } from 'reakit/Portal'\r\n\r\nimport { usePopoverMaxHeight } from '../../hooks/use-popover-maxHeight'\r\nimport { useWindowSize } from '../../hooks/use-window-size'\r\nimport { Box, BoxProps, BoxTheme } from '../box'\r\nimport { getExtendedDialogState, useZIndex } from '../dialog'\r\nimport { TooltipArrow } from '../tooltip/tooltip-arrow'\r\nimport { PopoverStateReturn } from './hooks'\r\n\r\nexport interface PopoverProps extends BoxProps, Pick {\r\n /**\r\n * The returned object from `usePopoverState`\r\n */\r\n state: PopoverStateReturn\r\n\r\n /**\r\n * Focus the popover when it opens\r\n *\r\n * @default true\r\n */\r\n focusOnShow?: Reakit.PopoverProps['unstable_autoFocusOnShow']\r\n\r\n /**\r\n * Focus the anchor element when it closes\r\n *\r\n * @default true\r\n */\r\n focusOnHide?: Reakit.PopoverProps['unstable_autoFocusOnHide']\r\n\r\n /**\r\n * Focus the anchor element when it closes\r\n *\r\n * @default undefined\r\n */\r\n finalFocusRef?: Reakit.PopoverProps['unstable_finalFocusRef']\r\n\r\n /**\r\n * Hides when clicked outside of popover, works with changing focus from the trigger component to another one\r\n *\r\n * @default true\r\n */\r\n hideOnClickOutside?: Reakit.PopoverProps['hideOnClickOutside']\r\n\r\n /**\r\n * Overlay click callback or if false is provided, overlay click calls hide func on popover state object\r\n *\r\n * @default undefined\r\n */\r\n onOverlayClick?: (() => void) | false\r\n\r\n /**\r\n * Popover wrapper css style object\r\n *\r\n * @default undefined\r\n */\r\n popoverWrapperStyle?: React.CSSProperties\r\n\r\n /**\r\n * Show popover arrow\r\n *\r\n * @default false\r\n */\r\n hasArrow?: boolean\r\n\r\n /**\r\n * Enable or disable backdrop click events\r\n *\r\n * @default true\r\n */\r\n hasBackdrop?: boolean\r\n\r\n /**\r\n * Set the popover to height to be limited by the viewport instead of having full height\r\n *\r\n * @default false\r\n */\r\n hasViewportHeightLimit?: boolean\r\n\r\n /**\r\n * Set the popover max-width to be limited by the trigger button\r\n */\r\n hasButtonWidthLimit?: boolean\r\n\r\n /**\r\n * Can be used together with `hasViewportHeightLimit` to limit the height of the popover\r\n *\r\n * @default undefined\r\n */\r\n popoverMaxHeight?: number\r\n}\r\n\r\nexport function Popover({\r\n state,\r\n children,\r\n focusOnShow = true,\r\n focusOnHide = true,\r\n finalFocusRef,\r\n 'aria-label': ariaLabel,\r\n hide,\r\n hideOnClickOutside = true,\r\n hasArrow = false,\r\n hasBackdrop = true,\r\n onOverlayClick,\r\n popoverWrapperStyle,\r\n popoverMaxHeight = Number.MAX_SAFE_INTEGER,\r\n theme = 'light',\r\n hasViewportHeightLimit = false,\r\n hasButtonWidthLimit = false,\r\n ...props\r\n}: PopoverProps) {\r\n const zIndex = useZIndex()\r\n const { isFullyClosed } = getExtendedDialogState(state)\r\n const { innerHeight } = useWindowSize({ isWatching: !isFullyClosed })\r\n\r\n const buttonElement = state.unstable_referenceRef.current\r\n const maxHeightStyle = usePopoverMaxHeight({\r\n maxHeightLimit: popoverMaxHeight,\r\n hasViewportHeightLimit,\r\n offsets: state.offsets,\r\n state,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (!buttonElement || !state.visible || !(hasViewportHeightLimit || hasButtonWidthLimit)) return\r\n\r\n const buttonRect = buttonElement.getBoundingClientRect()\r\n const popoverId = buttonElement.getAttribute('aria-controls')\r\n const popoverWrapper = popoverId ? document.getElementById(popoverId) : null\r\n\r\n // Limit popover max-width to be width of the trigger button\r\n if (hasButtonWidthLimit) {\r\n popoverWrapper?.style.setProperty('max-width', `${buttonRect.width}px`)\r\n }\r\n }, [\r\n state.visible,\r\n state.offsets,\r\n buttonElement,\r\n hasViewportHeightLimit,\r\n hasButtonWidthLimit,\r\n innerHeight,\r\n state.placement,\r\n popoverMaxHeight,\r\n ])\r\n\r\n if (isFullyClosed) return null\r\n\r\n return (\r\n \r\n \r\n {({ onTransitionEnd, onAnimationEnd, ...innerProps }) => (\r\n <>\r\n {\r\n // prevents from page scroll when clicked outside of popover\r\n event.preventDefault()\r\n }}\r\n />\r\n \r\n \r\n {hasArrow && (\r\n \r\n \r\n \r\n )}\r\n {children}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport * as Reakit from 'reakit/Popover'\r\n\r\nimport { COMPONENT_ANIMATION_DURATION } from '../constants'\r\n\r\nexport type PopoverStateReturn = ReturnType\r\n\r\nconst DEFAULT_OFFSET: [number, number] = [0, 5]\r\nconst HOVER_TIMEOUT = 150\r\n\r\nconst preventDefault = (ev: React.MouseEvent) => {\r\n ev.preventDefault()\r\n}\r\n\r\n/**\r\n * Hook which provides state to dialogs\r\n */\r\nexport function usePopoverState(settings?: Reakit.PopoverInitialState) {\r\n const offsets = (settings?.unstable_offset ?? DEFAULT_OFFSET) as [number, number]\r\n const popover = Reakit.usePopoverState({\r\n ...settings,\r\n placement: settings?.placement ?? 'bottom-start',\r\n unstable_offset: offsets,\r\n animated: COMPONENT_ANIMATION_DURATION,\r\n modal: false,\r\n })\r\n\r\n return { ...popover, offsets }\r\n}\r\n\r\nexport function useHoverPopover(settings?: Reakit.PopoverInitialState) {\r\n const popover = usePopoverState(settings)\r\n const showTimeout = React.useRef(null)\r\n const hideTimeout = React.useRef(null)\r\n\r\n const clearTimeouts = React.useRef(() => {\r\n if (showTimeout.current !== null) {\r\n window.clearTimeout(showTimeout.current)\r\n }\r\n if (hideTimeout.current !== null) {\r\n window.clearTimeout(hideTimeout.current)\r\n }\r\n })\r\n\r\n const showPopover = React.useRef(() => {\r\n clearTimeouts.current()\r\n showTimeout.current = window.setTimeout(() => {\r\n popover.show()\r\n }, HOVER_TIMEOUT)\r\n })\r\n\r\n const hidePopover = React.useRef(() => {\r\n clearTimeouts.current()\r\n hideTimeout.current = window.setTimeout(() => {\r\n popover.hide()\r\n }, HOVER_TIMEOUT)\r\n })\r\n\r\n // Unmount cleanup\r\n React.useEffect(() => () => clearTimeouts.current(), [])\r\n\r\n return {\r\n ...popover,\r\n show: showPopover.current,\r\n hide: hidePopover.current,\r\n onMouseOver: showPopover.current,\r\n onMouseOut: hidePopover.current,\r\n onMouseDown: preventDefault,\r\n }\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as Reakit from 'reakit/Popover'\r\n\r\nimport { useZIndex } from '../dialog'\r\n\r\ninterface PopoverButtonProps extends Reakit.PopoverDisclosureHTMLProps {\r\n state: Reakit.PopoverStateReturn\r\n as?: React.ElementType\r\n}\r\n/**\r\n * The trigger button component which handles ref & focus return, etc.\r\n */\r\nexport const PopoverTrigger = React.forwardRef(\r\n ({ state, ...props }: PopoverButtonProps, ref: React.ForwardedRef) => {\r\n const zIndex = useZIndex()\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n }\r\n)\r\n","import * as React from 'react'\r\nimport { useNavigate } from 'react-router-dom'\r\n\r\nimport { SelectItem, SelectItemGroup } from './types'\r\nimport { flattenItems, isSelectItemGroup } from './utils'\r\n\r\ninterface NativeSelectProps extends Omit, 'onChange'> {\r\n items: ItemType[]\r\n onChange?: (item: ItemType) => void\r\n}\r\n\r\nexport function NativeSelect | SelectItem>({\r\n items,\r\n onChange,\r\n placeholder = 'Select value',\r\n ...props\r\n}: NativeSelectProps) {\r\n const showPlaceholder = props.value === -1\r\n const handleNativeSelectChange = React.useCallback(\r\n (e: React.ChangeEvent) => {\r\n const itemIndex = e.target.selectedIndex + (showPlaceholder ? -1 : 0)\r\n const selectedItem = flattenItems(items)[itemIndex] as SelectItem\r\n\r\n if (!selectedItem) return\r\n\r\n onChange?.(selectedItem as any)\r\n\r\n if (!selectedItem.href || !selectedItem.reloadDocument) {\r\n return\r\n }\r\n\r\n if (typeof selectedItem.href === 'string') {\r\n window.location.href = selectedItem.href\r\n return\r\n }\r\n\r\n const newUrl = new URL(selectedItem.href.pathname!, window.location.href)\r\n newUrl.search = selectedItem.href.search ?? ''\r\n newUrl.hash = selectedItem.href.hash ?? ''\r\n\r\n window.location.href = newUrl.toString()\r\n },\r\n [items, onChange, showPlaceholder]\r\n )\r\n\r\n return (\r\n \r\n {showPlaceholder && }\r\n {items.map((item, itemIndex) => {\r\n if (isSelectItemGroup(item)) {\r\n return (\r\n \r\n {item.items.map((option, optionIndex) => (\r\n \r\n ))}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n\r\nexport function NativeSelectInRouterContext | SelectItem>(\r\n props: NativeSelectProps\r\n) {\r\n const navigate = useNavigate()\r\n\r\n const onChangeWithNavigate = React.useCallback(\r\n (item: SelectItem) => {\r\n props.onChange?.(item as any)\r\n\r\n if (item.href) navigate(item.href)\r\n },\r\n // We don’t need the whole props here, just onChange and items\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [navigate, props.onChange, props.items]\r\n )\r\n\r\n return \r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\ninterface ItemsGroupProps extends Omit, 'ref' | 'label'> {\r\n /**\r\n * Group label\r\n */\r\n label?: string\r\n}\r\n\r\nexport const ItemsGroup = React.forwardRef(function ItemsGroup(\r\n { label, children, ...props }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n return (\r\n \r\n {label && {label}}\r\n {children}\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_DEFAULT_ELEMENT, Button, ButtonComponentProps, ButtonPadding, ButtonThemeType } from '../button'\r\n\r\ninterface InternalOptionProps {\r\n /**\r\n * Description for the option\r\n */\r\n subtitle?: React.ReactNode\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 * Set the base button theme when not selected\r\n */\r\n theme?: ButtonThemeType | ((isHovered: boolean) => ButtonThemeType)\r\n}\r\n\r\nfunction getDefaultTheme(isHovered: boolean) {\r\n return isHovered ? 'menuItem' : 'menuItemTransparent'\r\n}\r\n\r\nconst InternalOption = React.forwardRef(function InternalOption<\r\n TagType extends React.ElementType = typeof BUTTON_DEFAULT_ELEMENT,\r\n>(\r\n {\r\n subtitle,\r\n children,\r\n 'aria-selected': ariaSelected,\r\n 'data-active-item': dataActiveItem,\r\n rounding = 'small',\r\n activeTheme = 'blue',\r\n theme = getDefaultTheme,\r\n ...props\r\n }: Omit, 'theme'> & InternalOptionProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const isSelected = ariaSelected === true\r\n const isHovered = dataActiveItem === true\r\n const defaultTheme = typeof theme === 'function' ? theme(isHovered) : theme\r\n\r\n return (\r\n )}\r\n ref={ref}\r\n align=\"left\"\r\n className={classNames(props.className, ButtonPadding.regular, 'select-none', {\r\n 'text-2xs': !!subtitle && !props.theme,\r\n })}\r\n contentClass={classNames(props.contentClass, 'font-normal')}\r\n rounding={rounding}\r\n active={props.active ?? (isHovered && !isSelected)}\r\n theme={isSelected ? activeTheme : defaultTheme}\r\n size={props.size ?? (subtitle ? 'none' : props.size)}\r\n aria-selected={ariaSelected}\r\n data-active-item={dataActiveItem}\r\n >\r\n {children}\r\n {subtitle && (\r\n \r\n {subtitle}\r\n \r\n )}\r\n \r\n )\r\n})\r\n\r\ninterface SelectOptionProps extends InternalOptionProps {\r\n value: ValueType\r\n}\r\n\r\nexport const SelectOption = React.forwardRef(function SelectOption<\r\n ValueType,\r\n TagType extends React.ElementType = typeof BUTTON_DEFAULT_ELEMENT,\r\n>(\r\n { as, ...props }: Omit, 'value' | 'theme'> & SelectOptionProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const context = Ariakit.useSelectContext()!\r\n const isComboBox = !!context.combobox\r\n\r\n return (\r\n } /> : }\r\n />\r\n )\r\n})\r\n","import { SelectRenderer, SelectRendererItemProps } from '@ariakit/react-core/select/select-renderer'\r\nimport classNames from 'classnames'\r\nimport * as React from 'react'\r\nimport { useInRouterContext } from 'react-router-dom'\r\n\r\nimport { ButtonRoundingType } from '../button'\r\nimport { ItemsGroup } from './ItemsGroup'\r\nimport { SelectOption } from './SelectOption'\r\nimport { SelectItem, SelectItemGroup } from './types'\r\nimport { filterSelectOptions, getSelectItemProps, isSelectItem } from './utils'\r\n\r\ninterface SelectItemsVirtualizedProps {\r\n hasGroups: boolean\r\n itemRenderer: (item: SelectItem, providedProps?: any) => React.ReactNode\r\n}\r\n\r\nfunction SelectItemsVirtualized(props: SelectItemsVirtualizedProps) {\r\n return (\r\n \r\n {({ value: groupOritem, index, label, ...restProps }: any) => {\r\n if (isSelectItem(groupOritem)) {\r\n return props.itemRenderer(groupOritem, { key: index, ...restProps })\r\n }\r\n\r\n return (\r\n (\r\n \r\n {rendererProps.children}\r\n \r\n )}\r\n >\r\n {({ value, index, ...restItem }: SelectRendererItemProps<{ value: SelectItem }>) =>\r\n props.itemRenderer(value, { key: index, ...restItem })\r\n }\r\n \r\n )\r\n }}\r\n \r\n )\r\n}\r\n\r\ninterface SelectItemsProps {\r\n searchValue: string\r\n items?: ItemType[]\r\n rounding?: ButtonRoundingType\r\n parentTestId?: string\r\n}\r\n\r\nexport function SelectItems | SelectItemGroup>({\r\n items,\r\n rounding,\r\n searchValue,\r\n parentTestId,\r\n virtualized,\r\n}: SelectItemsProps & { virtualized?: boolean }) {\r\n const isInRouterContext = useInRouterContext()\r\n const filteredItems = React.useMemo(() => filterSelectOptions(items, searchValue), [items, searchValue])\r\n\r\n const getItem = React.useCallback(\r\n (innerItem: SelectItem, providedProps?: any) => (\r\n \r\n {innerItem.label}\r\n \r\n ),\r\n [isInRouterContext, parentTestId, rounding, virtualized]\r\n )\r\n\r\n if (!filteredItems.length) {\r\n return
Nothing to select
\r\n }\r\n\r\n if (virtualized) {\r\n const hasGroups = isSelectItem(items?.[0]) === false\r\n return \r\n }\r\n\r\n return (\r\n <>\r\n {filteredItems.map((item, index) => {\r\n if (isSelectItem(item)) {\r\n return getItem(item, { key: index })\r\n }\r\n\r\n return (\r\n \r\n {item.items.map((item, itemIndex) => getItem(item, { key: itemIndex }))}\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 { Input } from '../input'\r\n\r\nenum ListRounding {\r\n none = '',\r\n regular = 'rounded-lg',\r\n}\r\n\r\nenum ListTheme {\r\n none = '',\r\n default = 'border border-primary bg-primary',\r\n}\r\n\r\nfunction focusWithoutScroll(element: HTMLElement | null) {\r\n element?.focus({ preventScroll: true })\r\n\r\n return !element\r\n}\r\n\r\nfunction onBackdropClick(ev: React.MouseEvent) {\r\n ev.preventDefault()\r\n}\r\n\r\nexport interface SelectListProps {\r\n /**\r\n * Internal prop which enables input at the top of the popover list\r\n */\r\n isComboBox?: boolean\r\n\r\n /**\r\n * Set rounding for the popover list\r\n *\r\n * @default regular\r\n */\r\n rounding?: keyof typeof ListRounding\r\n\r\n /**\r\n * Popover theme\r\n */\r\n theme?: keyof typeof ListTheme\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 * Change how the items are laid out\r\n *\r\n * @default vertical\r\n */\r\n orientation?: 'vertical' | 'horizontal'\r\n\r\n /**\r\n * Custom popover class\r\n */\r\n className?: string\r\n\r\n /**\r\n * Internal prop used to display no results when automatic `item` filtering doesn’t return any items\r\n */\r\n hasItemChildren?: boolean\r\n\r\n /**\r\n * Do not render the items when the popover is not visible\r\n *\r\n * @default false\r\n */\r\n unmountOnHide?: boolean\r\n}\r\n\r\nexport function SelectList({\r\n isComboBox,\r\n rounding = 'regular',\r\n theme = 'default',\r\n gutter = 4,\r\n orientation = 'vertical',\r\n className,\r\n unmountOnHide = false,\r\n hasItemChildren,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const ListElement = React.useMemo(\r\n () => (isComboBox ? Ariakit.ComboboxList : (wrapperProps: any) =>
),\r\n [isComboBox]\r\n )\r\n const context = Ariakit.useSelectContext()!\r\n const placement = context.useState('currentPlacement')\r\n const hasChildren = hasItemChildren || React.Children.count(children) > 0\r\n\r\n return (\r\n }\r\n className={classNames(\r\n className,\r\n ListRounding[rounding],\r\n ListTheme[theme],\r\n 'custom-scrollbar absolute z-dialog 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-offset-top:theme(spacing.1)]': isComboBox,\r\n '[--scrollbar-radius:0]': ListRounding[rounding] === ListRounding.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 >\r\n {isComboBox && (\r\n
\r\n
\r\n \r\n }\r\n />\r\n
\r\n
\r\n
\r\n )}\r\n \r\n {hasChildren ? children :
Nothing to select
}\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 { notifyOnVisibilityChange } from '../../../app/shared/documentVisibility'\r\nimport { Tooltip, TooltipTrigger, useTooltipState } from '../tooltip'\r\n\r\nexport function SelectTooltip({ content, children }: { content: React.ReactNode; children: JSX.Element }) {\r\n const tooltipState = useTooltipState({ placement: 'bottom', showTimeout: 300 })\r\n const context = Ariakit.useSelectContext()\r\n const isSelectOpen = context?.useState('open')\r\n const hasShownTooltip = React.useRef(false)\r\n\r\n React.useEffect(() => {\r\n if (isSelectOpen) hasShownTooltip.current = true\r\n }, [isSelectOpen])\r\n\r\n /**\r\n * Ignore focus re-trigger (do not show tooltip) when page visibility/focus state changes\r\n * - some browsers re-trigger focus on `activeElement` when document becomes visible\r\n */\r\n React.useEffect(() => {\r\n const subscription = notifyOnVisibilityChange((visible) => {\r\n if (!visible) tooltipState?.hide()\r\n })\r\n return () => {\r\n subscription.unsubscribe()\r\n }\r\n // Changing this to `tooltip` dependency will run this effect on every render\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n return (\r\n <>\r\n {\r\n // Do not open again unless user focuses the button again (or presses another ESC)\r\n if (hasShownTooltip.current) ev.preventDefault()\r\n hasShownTooltip.current = false\r\n }}\r\n />\r\n {content}\r\n \r\n )\r\n}\r\n\r\nexport function SelectTooltipWrapper({ content, children }: { content?: React.ReactNode; children: JSX.Element }) {\r\n if (!content) return null\r\n\r\n return {children}\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport { Placement } from '@popperjs/core'\r\nimport * as React from 'react'\r\n\r\nimport { SelectButtonProps } from './SelectButton'\r\nimport { SelectItems } from './SelectItems'\r\nimport { SelectList, SelectListProps } from './SelectList'\r\nimport { SelectTooltipWrapper } from './SelectTooltipWrapper'\r\nimport { SelectItem, SelectItemGroup } from './types'\r\nimport { isSelectItem } from './utils'\r\n\r\nexport interface DesktopSelectProps\r\n extends Omit<\r\n SelectButtonProps,\r\n // Fix clash with `button` element html props\r\n 'value' | 'defaultValue' | 'onChange' | 'label' | 'name' | 'valueOverride'\r\n >,\r\n Pick {\r\n /**\r\n * Name of the select which coudl be used to distinguish onChange events.\r\n * Passed as 2nd argument to `onChange`\r\n */\r\n name?: Name\r\n\r\n /**\r\n * Set value for the select\r\n */\r\n value?: ValueType\r\n\r\n /**\r\n * Set default value for an uncontrolled select\r\n */\r\n defaultValue?: ValueType\r\n\r\n /**\r\n * Label to display above the select\r\n */\r\n label?: React.ReactNode\r\n\r\n /**\r\n * Callback when item changes. Called for both controlled and uncontrolled selects\r\n */\r\n onChange?: (\r\n item: ItemType extends SelectItemGroup\r\n ? ValueType extends SelectItem\r\n ? ValueType\r\n : SelectItem\r\n : ItemType,\r\n name: Name\r\n ) => void\r\n\r\n /**\r\n * Options to select from. When defined, the options are constructed automatically\r\n * so you don’t have to pass children to the select.\r\n *\r\n * When `nativeSelect` is set to \"mobile\", children take precedence on desktop\r\n */\r\n items?: ItemType[]\r\n\r\n /**\r\n * Enable virtualization of select items to improve performance of long lists\r\n *\r\n * @default items.length > 50\r\n */\r\n virtualized?: boolean\r\n\r\n /**\r\n * Custom button renderer for the select\r\n */\r\n trigger?: JSX.Element\r\n\r\n /**\r\n * Text for the button (usually the selected value). Falls back to placeholder if not set\r\n */\r\n triggerContent?: React.ReactNode\r\n\r\n /**\r\n * Show tooltip on the select\r\n */\r\n tooltip?: React.ReactNode\r\n\r\n /**\r\n * Popover placement\r\n *\r\n * @default \"bottom-start\"\r\n */\r\n placement?: Placement\r\n\r\n /**\r\n * Change the direction of the items placement in popover\r\n *\r\n * @default vertical\r\n */\r\n orientation?: 'vertical' | 'horizontal'\r\n\r\n /**\r\n * Set whether or not the Select is interactive to save resources. If not interactive,\r\n * the select only renders a placeholder button\r\n *\r\n * @default true\r\n */\r\n isInteractive?: boolean\r\n\r\n /**\r\n * Callback when the select opens or closes\r\n */\r\n onInteractionChange?: (open: boolean) => void\r\n\r\n /**\r\n * ### Only applicable for desktop selects without `children`, when passing `items`.\r\n * ### If you want to pass `children`, use the `onSearch` prop instead.\r\n *\r\n * Specifies whether or not to show a search input inside of the popover. Number\r\n * specifies the >= number of items after which search will be visible.\r\n * Search is made for both value and label props\r\n *\r\n * @default 10\r\n */\r\n comboBox?: boolean | number\r\n\r\n /**\r\n * ### Only applicable for desktop selects with `children`.\r\n * ### Use `comboBox` if you have `items` prop\r\n * When defined, the select is considered being a combobox and will display\r\n * input for filtering items. The filtering is up to the user.\r\n */\r\n onSearch?: (value: string) => void\r\n\r\n /**\r\n * When combined with `items` the children will automatically have testid assigned.\r\n * Otherwise just passed to the trigger button\r\n */\r\n 'data-testid'?: string\r\n\r\n listProps?: SelectListProps\r\n}\r\n\r\nfunction getCollectionItem(item: SelectItem, index: number) {\r\n return {\r\n id: `item-${index}-${String(item.value).replace(/\\W/g, '')}`,\r\n label: item.label,\r\n value: item,\r\n children: item.label,\r\n }\r\n}\r\n\r\nexport function DesktopSelect<\r\n ValueType,\r\n ItemType extends SelectItem | SelectItemGroup,\r\n Name = never,\r\n>({\r\n name,\r\n label,\r\n value,\r\n defaultValue,\r\n onChange,\r\n items,\r\n virtualized = (items?.length ?? 0) > 50,\r\n trigger,\r\n tooltip,\r\n onInteractionChange,\r\n comboBox,\r\n onSearch,\r\n children,\r\n gutter,\r\n placement = 'bottom-start',\r\n orientation,\r\n listProps,\r\n ...props\r\n}: React.PropsWithChildren>) {\r\n // Used when `items` are passed to construct a desktop select with comboBox\r\n const [internalSearch, setInternalSearch] = React.useState('')\r\n\r\n // Setup combobox if enabled\r\n const isComboBox =\r\n !!onSearch || comboBox === true || (typeof comboBox === 'number' && !!items && items.length > comboBox)\r\n const SelectWrapper = isComboBox ? Ariakit.ComboboxProvider : React.Fragment\r\n const wrapperProps = React.useMemo(\r\n () =>\r\n isComboBox ? { resetValueOnHide: true, includesBaseElement: false, setValue: onSearch ?? setInternalSearch } : {},\r\n [isComboBox, onSearch]\r\n )\r\n\r\n // Handle tooltip prop\r\n const ButtonWrapper = tooltip ? SelectTooltipWrapper : React.Fragment\r\n const buttonWrapperProps = React.useMemo(() => (tooltip ? { content: tooltip } : {}), [tooltip])\r\n\r\n if (isComboBox && !!children && !onSearch) {\r\n console.warn(\r\n 'ComboBoxes with children options require `onSearch` prop, otherwise searching will not work. \\n Either provide `onSearch` or disable this behavior by passing `comboBox={false}`'\r\n )\r\n }\r\n\r\n const listItems = React.useMemo(\r\n () =>\r\n items?.map((item, index) =>\r\n isSelectItem(item) ? getCollectionItem(item, index) : { ...item, items: item.items.map(getCollectionItem) }\r\n ) as ItemType[],\r\n [items]\r\n )\r\n\r\n return (\r\n \r\n {/* @ts-expect-error - The types are wrong here, the select allows any values, not just strings or ints */}\r\n \r\n // Loop to the first item after pressing arrow down on last item\r\n focusLoop\r\n virtualFocus\r\n value={value}\r\n defaultValue={defaultValue ?? ''}\r\n // Item will always be of ItemType\r\n setValue={(item) => setTimeout(() => onChange?.(item as any, name!), 50)}\r\n setOpen={onInteractionChange}\r\n placement={placement}\r\n orientation={orientation}\r\n defaultItems={listItems}\r\n >\r\n {label && {label}}\r\n\r\n \r\n \r\n \r\n\r\n \r\n {/* Either construct options from children or provided items prop */}\r\n {children ?? (\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 { Button, ButtonHTMLProps, ButtonProps, ButtonSize } from '../button'\r\nimport { Delayed } from '../delayed'\r\nimport { Icon, IconNameType, isValidIconName } from '../icon'\r\nimport { Spinner } from '../spinner'\r\nimport { SelectItem } from './types'\r\nimport { isSelectItem } from './utils'\r\n\r\ntype ValueType = SelectItem | string\r\n\r\nconst DEFAULT_RIGHT_ICON = 'caretDown'\r\n\r\nexport interface SelectButtonProps extends Omit, Omit {\r\n /**\r\n * Show a spinner in place of the button caret. The spinner is wrapped in Delayed\r\n * and uses the default timeout\r\n */\r\n isLoading?: boolean\r\n\r\n /**\r\n * Placeholder when no value is selected\r\n */\r\n placeholder?: string\r\n\r\n /**\r\n * Override for the select value from context. Used to provide value for native\r\n * select trigger\r\n */\r\n valueOverride?: ValueType\r\n\r\n rightContent?: boolean | IconNameType | JSX.Element\r\n}\r\n\r\nexport const SelectButton = React.forwardRef>(\r\n function SelectButton(\r\n {\r\n isLoading,\r\n placeholder = 'Select value',\r\n children,\r\n valueOverride,\r\n theme = 'outline',\r\n rightContent = DEFAULT_RIGHT_ICON,\r\n ...props\r\n },\r\n ref\r\n ) {\r\n const context = Ariakit.useSelectContext()\r\n const contextValue = context?.useState('value') as ValueType\r\n const isOpen = context?.useState('open')\r\n const selectedValue = valueOverride ?? contextValue\r\n\r\n let buttonText = placeholder\r\n if (isSelectItem(selectedValue)) buttonText = selectedValue.label ?? selectedValue.value\r\n else if (typeof selectedValue === 'string' && selectedValue.length) buttonText = selectedValue\r\n else if (selectedValue) buttonText = String(selectedValue)\r\n\r\n const rightIcon =\r\n isValidIconName(rightContent) || rightContent === true ? (\r\n \r\n ) : React.isValidElement(rightContent) ? (\r\n rightContent\r\n ) : undefined\r\n\r\n return (\r\n \r\n \r\n \r\n ) : (\r\n rightIcon\r\n )\r\n }\r\n >\r\n {children ?? buttonText}\r\n \r\n )\r\n }\r\n)\r\n","import * as React from 'react'\r\nimport { useInRouterContext } from 'react-router-dom'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { DesktopSelect, DesktopSelectProps } from './DesktopSelect'\r\nimport { NativeSelect, NativeSelectInRouterContext } from './NativeSelect'\r\nimport { SelectButton } from './SelectButton'\r\nimport { SelectItem } from './types'\r\nimport { findSelectedIndex, findSelectedValue } from './utils'\r\n\r\nconst isMobileDevice = isMobile()\r\n\r\nexport interface SelectProps extends DesktopSelectProps {\r\n /**\r\n * Whether or not to show a native select when clicking the button.\r\n * When rendering native select, you must provide `items`, `value` and `onChange`\r\n *\r\n * @default false\r\n */\r\n nativeSelect?: boolean | 'mobile'\r\n}\r\n\r\nexport function Select({\r\n name,\r\n label,\r\n value: providedValue,\r\n defaultValue: providedDefaultValue,\r\n onChange,\r\n items,\r\n trigger,\r\n gutter,\r\n orientation,\r\n triggerContent,\r\n isInteractive = true,\r\n onInteractionChange,\r\n nativeSelect = false,\r\n comboBox = 10,\r\n onSearch,\r\n 'data-testid': dataTestid,\r\n listProps,\r\n virtualized,\r\n ...props\r\n}: React.PropsWithChildren>) {\r\n // Used by native select to handle navigation for link items\r\n const isInRouterContext = useInRouterContext()\r\n // Let users either provide the selected item or its value. Items can also be grouped so we need to find the correct value\r\n const value = findSelectedValue(items, providedValue) ?? providedValue\r\n const defaultValue = findSelectedValue(items, providedDefaultValue) ?? providedDefaultValue\r\n\r\n // Extracted trigger to a variable because it is used in every branch\r\n const selectTrigger = trigger ?? (\r\n ) : undefined\r\n }\r\n data-testid={dataTestid}\r\n >\r\n {triggerContent}\r\n \r\n )\r\n\r\n // Save some resources by rendering the trigger only\r\n if (!isInteractive) {\r\n return selectTrigger\r\n }\r\n\r\n const renderNativeSelect = nativeSelect === true || (nativeSelect === 'mobile' && isMobileDevice)\r\n if (renderNativeSelect) {\r\n const NativeSelectComponent = isInRouterContext ? NativeSelectInRouterContext : NativeSelect\r\n const selectedIndex = findSelectedIndex(items, providedValue ?? providedDefaultValue)\r\n\r\n return (\r\n
\r\n {selectTrigger}\r\n
\r\n )\r\n }\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { Link } from 'react-router-dom'\r\n\r\nimport { SelectItem, SelectItemGroup } from './types'\r\n\r\nexport function getSelectItemProps(item: SelectItem, inRouterContext?: boolean) {\r\n if (item.href) {\r\n if (inRouterContext) return { as: Link, to: item.href, reloadDocument: item.reloadDocument }\r\n else return { as: 'a', href: item.href }\r\n }\r\n\r\n return {}\r\n}\r\n\r\nexport function isSelectItem(item: unknown): item is SelectItem {\r\n return !!(item?.hasOwnProperty('label') && item?.hasOwnProperty('value')) && !item?.hasOwnProperty('items')\r\n}\r\n\r\nexport function isSelectItemGroup(item: unknown): item is SelectItemGroup {\r\n return !!item?.hasOwnProperty('items')\r\n}\r\n\r\nfunction matchesSearchTerm(item: SelectItem, searchTerm: string) {\r\n const lowerSearch = searchTerm.toLowerCase()\r\n\r\n return (\r\n (typeof item.value === 'string' && item.value.toLowerCase().includes(lowerSearch)) ||\r\n item.label.toLowerCase().includes(lowerSearch)\r\n )\r\n}\r\n\r\nfunction isSameItem(obj1: unknown, obj2?: unknown) {\r\n if (isSelectItem(obj1) && isSelectItem(obj2)) return obj1.value === obj2.value\r\n else if (isSelectItem(obj1)) return obj1.value === obj2\r\n return obj1 === obj2\r\n}\r\n\r\n/**\r\n * Used in combobox to find matching items\r\n */\r\nexport function filterSelectOptions | SelectItemGroup>(\r\n items: ItemType[] | undefined,\r\n searchTerm: string\r\n) {\r\n const finalResults: ItemType[] = []\r\n\r\n items?.forEach((item) => {\r\n if (isSelectItemGroup(item)) {\r\n const filtered = item.items.filter((option) => matchesSearchTerm(option, searchTerm))\r\n if (filtered.length) finalResults.push({ ...item, items: filtered })\r\n } else if (matchesSearchTerm(item, searchTerm)) {\r\n finalResults.push(item)\r\n }\r\n })\r\n\r\n return finalResults\r\n}\r\n\r\n/**\r\n * Used in select to allow users to pass any kind of valid value\r\n */\r\nexport function findSelectedValue(\r\n items: ItemType[] = [],\r\n value?: ValueType | SelectItem\r\n) {\r\n for (const item of items) {\r\n if (isSelectItemGroup(item)) {\r\n const foundItem = item.items.find((option) => isSameItem(option, value)) as SelectItem\r\n if (foundItem) return foundItem\r\n } else if (isSameItem(item, value)) {\r\n return item as SelectItem\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Used for native selects to match against user provided value\r\n */\r\nexport function findSelectedIndex(\r\n items: ItemType[] = [],\r\n value?: ValueType | SelectItem\r\n) {\r\n for (let index = 0; index < items.length; index++) {\r\n const item = items[index]\r\n\r\n if (isSelectItemGroup(item)) {\r\n const itemIndex = item.items.findIndex((option) => isSameItem(option, value))\r\n if (itemIndex > -1) return `${index}${itemIndex}`\r\n } else if (isSameItem(item, value)) {\r\n return index\r\n }\r\n }\r\n\r\n return -1\r\n}\r\n\r\nexport function flattenItems(items: ItemType[]) {\r\n return items.flatMap((itemOrGroup) =>\r\n isSelectItemGroup(itemOrGroup) ? (itemOrGroup.items as ItemType[]) : itemOrGroup\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { Link, To } from 'react-router-dom'\r\n\r\nimport { TIMEFRAME } from '../../constants'\r\nimport { ButtonRoundingType, ButtonSizeType } from '../button'\r\nimport { DropdownSeparator } from '../dropdown'\r\nimport { Icon } from '../icon'\r\nimport { Select, SelectOption } from '../select'\r\nimport { SelectItem } from '../select/types'\r\n\r\nexport interface DateRangeBaseOption extends SelectItem {\r\n timeframe?: TIMEFRAME\r\n href?: To\r\n withReload?: boolean\r\n}\r\n\r\ninterface Props {\r\n chartIndex: number\r\n dateRangeGroups: Array<{ label?: string; dateRanges: DateRange[] }>\r\n selectedDateRange: string | null\r\n onDateRangeSelect: (value: DateRange) => void\r\n onCustomDateRangeClick?: () => void\r\n rounding?: ButtonRoundingType\r\n size?: ButtonSizeType\r\n}\r\n\r\nconst DATERANGE_TOOLTIP = 'Range'\r\n\r\nexport function DateRangeSelect({\r\n size,\r\n chartIndex,\r\n dateRangeGroups,\r\n selectedDateRange,\r\n onDateRangeSelect,\r\n onCustomDateRangeClick,\r\n rounding,\r\n}: Props) {\r\n const flatDateRanges = React.useMemo(() => dateRangeGroups.flatMap(({ dateRanges }) => dateRanges), [dateRangeGroups])\r\n\r\n return (\r\n {\r\n onDateRangeSelect(flatDateRanges.find((item) => item.value === value)!)\r\n }}\r\n rounding={rounding}\r\n appearance=\"square\"\r\n theme=\"chip\"\r\n size={size}\r\n triggerContent={}\r\n rightContent={false}\r\n active={selectedDateRange ? true : undefined}\r\n data-testid={`chart-${chartIndex}-date-range-select`}\r\n >\r\n {dateRangeGroups.flatMap(({ label, dateRanges }, index) => [\r\n {label},\r\n ...dateRanges.map(({ href, value, label, withReload, timeframe }) => {\r\n let linkProps = {}\r\n if (href) {\r\n linkProps = {\r\n as: Link,\r\n to: href,\r\n reloadDocument: withReload ?? !FinvizSettings.hasUserPremium,\r\n }\r\n }\r\n return (\r\n {\r\n if (!timeframe) onCustomDateRangeClick?.()\r\n }}\r\n >\r\n {label}\r\n \r\n )\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\nimport { Delayed } from '../delayed'\r\nimport { Spinner } from '../spinner'\r\n\r\ninterface Props {\r\n label: React.ReactNode\r\n isLoading: boolean\r\n}\r\n\r\nexport function LabelWithDelayedSpinner({ label, isLoading }: Props) {\r\n return (\r\n <>\r\n {label}\r\n {isLoading && (\r\n
\r\n {label}}>\r\n \r\n \r\n
\r\n )}\r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\nimport { Link, To } from 'react-router-dom'\r\n\r\nimport { Button, ButtonProps, ButtonRoundingType, ButtonSizeType } from '../button'\r\nimport { DropdownSeparator } from '../dropdown'\r\nimport { Icon } from '../icon'\r\nimport { SelectItem } from '../select'\r\nimport { Select, SelectOption } from '../select'\r\nimport { LabelWithDelayedSpinner } from './label-with-delayed-spinner'\r\n\r\nexport type TimeframeBaseOption = SelectItem & {\r\n labelShort?: string\r\n labelPageTitle?: string\r\n href?: To\r\n withReload?: boolean\r\n}\r\n\r\ninterface Props {\r\n chartIndex: number\r\n isCompactView: boolean\r\n isCompactOnly: boolean\r\n timeFrameGroups: Array<{ label: string; timeframes: TimeFrame[] }>\r\n selectedTimeframe: string\r\n onTimeframeSelect: (value: TimeFrame) => void\r\n favoriteTimeframes: string[]\r\n onFavoriteTimeframeToggle: (value: TimeFrame) => void\r\n rounding?: ButtonRoundingType\r\n size?: ButtonSizeType\r\n isLoading?: boolean\r\n isFavoritesEnabled: boolean\r\n theme?: ButtonProps['theme']\r\n}\r\n\r\nconst TIMEFRAME_TOOLTIP = 'Interval'\r\n\r\nexport function TimeframeSelect({\r\n size,\r\n chartIndex,\r\n timeFrameGroups,\r\n selectedTimeframe,\r\n favoriteTimeframes,\r\n isLoading = false,\r\n isCompactView,\r\n isCompactOnly,\r\n onTimeframeSelect,\r\n onFavoriteTimeframeToggle,\r\n rounding,\r\n isFavoritesEnabled,\r\n theme = 'chip',\r\n}: Props) {\r\n const flatTimeframes = React.useMemo(() => timeFrameGroups.flatMap(({ timeframes }) => timeframes), [timeFrameGroups])\r\n\r\n const getSelectedTimeframeLabel = React.useCallback(() => {\r\n if (isCompactView) {\r\n const selectedTimeframeItem = flatTimeframes.find(({ value }) => value === selectedTimeframe)\r\n return selectedTimeframeItem?.labelShort ?? selectedTimeframeItem?.label\r\n }\r\n return ''\r\n }, [flatTimeframes, isCompactView, selectedTimeframe])\r\n\r\n return (\r\n item.value === selectedTimeframe)}\r\n leftContent={\r\n
\r\n } isLoading={isLoading && isCompactView} />\r\n
\r\n }\r\n onChange={(item) => onTimeframeSelect(item as TimeFrame)}\r\n data-testid={`chart-${chartIndex}-timeframe-select`}\r\n >\r\n {timeFrameGroups.flatMap(({ timeframes }, groupIndex) => [\r\n ,\r\n ...timeframes.map((item) => {\r\n const isIconButtonActive = favoriteTimeframes.includes(item.value)\r\n let linkProps = {}\r\n if (item.href) {\r\n linkProps = {\r\n as: Link,\r\n to: item.href,\r\n reloadDocument: !!item.withReload,\r\n }\r\n }\r\n return (\r\n ) => {\r\n ev.stopPropagation()\r\n ev.preventDefault()\r\n onFavoriteTimeframeToggle(item)\r\n }}\r\n className={classNames('group -mr-2', {\r\n 'text-gray-300': !isIconButtonActive,\r\n 'text-yellow-200': isIconButtonActive,\r\n })}\r\n >\r\n \r\n \r\n \r\n ) : undefined\r\n }\r\n >\r\n {item.label}\r\n \r\n )\r\n }),\r\n ])}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport { Link } from 'react-router-dom'\r\n\r\nimport { useElementMeasure } from '../../hooks/use-element-measure'\r\nimport { Button, ButtonPadding, ButtonProps, ButtonRoundingType, ButtonSize, ButtonSizeType } from '../button'\r\nimport { DateRangeBaseOption, DateRangeSelect } from './daterange-select'\r\nimport { LabelWithDelayedSpinner } from './label-with-delayed-spinner'\r\nimport { TimeframeBaseOption, TimeframeSelect } from './timeframe-select'\r\n\r\ninterface Props {\r\n isPremium?: boolean\r\n chartIndex?: number\r\n compactViewMaxBreakpointPx?: number\r\n timeFrameGroups: Array<{ label: string; timeframes: TimeFrame[] }>\r\n dateRangeGroups: Array<{ label?: string; dateRanges: DateRange[] }>\r\n selectedTimeframe: string\r\n selectedDateRange: string | null\r\n onTimeframeSelect: (value: TimeFrame) => void\r\n onDateRangeSelect: (value: DateRange) => void\r\n onCustomDateRangeClick?: () => void\r\n favoriteTimeframes: string[]\r\n onFavoriteTimeframeToggle: (value: TimeFrame) => void\r\n size?: ButtonSizeType\r\n loadingTimeframe?: string\r\n rounding?: ButtonRoundingType\r\n isDateRangeAvailable?: boolean\r\n containerElement?: HTMLElement\r\n className?: string\r\n isFavoritesEnabled?: boolean\r\n isScrollIntoViewEnabled?: boolean\r\n isTimeframeSelectEnabled?: boolean\r\n isCompactOnly?: boolean\r\n theme?: ButtonProps['theme']\r\n}\r\n\r\nfunction getTimeframeChipElementId({ timeframe, chartIndex }: { timeframe: string; chartIndex: number }) {\r\n return `${chartIndex}-${timeframe}`\r\n}\r\n\r\nfunction getButtonPadding(size: ButtonSize): keyof typeof ButtonPadding {\r\n switch (size) {\r\n case ButtonSize.xxsmall:\r\n case ButtonSize.xsmall:\r\n case ButtonSize.small:\r\n case ButtonSize.regular:\r\n return 'small'\r\n case ButtonSize.medium:\r\n return 'regular'\r\n case ButtonSize.large:\r\n return 'medium'\r\n case ButtonSize.none:\r\n return 'none'\r\n }\r\n}\r\n\r\nexport function TimeframeBar({\r\n isPremium = FinvizSettings.hasUserPremium,\r\n chartIndex = 0,\r\n compactViewMaxBreakpointPx = 400,\r\n timeFrameGroups,\r\n dateRangeGroups,\r\n selectedTimeframe,\r\n selectedDateRange,\r\n favoriteTimeframes,\r\n loadingTimeframe,\r\n onTimeframeSelect,\r\n onDateRangeSelect,\r\n onCustomDateRangeClick,\r\n onFavoriteTimeframeToggle,\r\n size,\r\n rounding,\r\n isDateRangeAvailable = true,\r\n containerElement,\r\n className,\r\n isFavoritesEnabled = true,\r\n isScrollIntoViewEnabled = true,\r\n isTimeframeSelectEnabled,\r\n isCompactOnly = false,\r\n theme,\r\n}: Props) {\r\n const [scrollWrapperElement, setScrollWrapperElement] = React.useState(null)\r\n const [timeframeButtonsScrollLocation, setTimeframeButtonsScrollLocation] = React.useState({\r\n isOnLeftEdge: true,\r\n isOnRightEdge: true,\r\n })\r\n const { setElementRef, elementWidth } = useElementMeasure(containerElement)\r\n const flatTimeframes = React.useMemo(() => timeFrameGroups.flatMap(({ timeframes }) => timeframes), [timeFrameGroups])\r\n\r\n const timeframesInExpandedPanel = React.useMemo(\r\n () =>\r\n isFavoritesEnabled\r\n ? flatTimeframes.filter(({ value }) => value === selectedTimeframe || favoriteTimeframes.includes(value))\r\n : flatTimeframes,\r\n [flatTimeframes, selectedTimeframe, favoriteTimeframes, isFavoritesEnabled]\r\n )\r\n\r\n const isCompactView =\r\n isCompactOnly || elementWidth < compactViewMaxBreakpointPx || timeframesInExpandedPanel.length <= 1\r\n const checkTimeframeWrapperScrollPosition = React.useCallback(() => {\r\n if (scrollWrapperElement) {\r\n const isOnLeftEdge = scrollWrapperElement.scrollLeft === 0\r\n const isOnRightEdge =\r\n Math.ceil(scrollWrapperElement.offsetWidth + scrollWrapperElement.scrollLeft) >=\r\n scrollWrapperElement.scrollWidth\r\n\r\n if (\r\n timeframeButtonsScrollLocation.isOnLeftEdge !== isOnLeftEdge ||\r\n timeframeButtonsScrollLocation.isOnRightEdge !== isOnRightEdge\r\n ) {\r\n setTimeframeButtonsScrollLocation({ isOnLeftEdge, isOnRightEdge })\r\n }\r\n }\r\n }, [timeframeButtonsScrollLocation, scrollWrapperElement])\r\n\r\n React.useEffect(() => {\r\n checkTimeframeWrapperScrollPosition()\r\n }, [checkTimeframeWrapperScrollPosition, scrollWrapperElement, elementWidth])\r\n\r\n React.useEffect(() => {\r\n if (!isCompactView && isScrollIntoViewEnabled) {\r\n const timeframeElement = document.getElementById(\r\n getTimeframeChipElementId({ chartIndex, timeframe: selectedTimeframe })\r\n )\r\n\r\n if (timeframeElement && scrollWrapperElement) {\r\n const leftOffset =\r\n timeframeElement.offsetLeft + timeframeElement.clientWidth / 2 - scrollWrapperElement.clientWidth / 2\r\n\r\n scrollWrapperElement.scrollTo(Math.max(0, Math.min(leftOffset, scrollWrapperElement.scrollWidth)), 0)\r\n }\r\n }\r\n }, [isCompactView, chartIndex, selectedTimeframe, elementWidth, isScrollIntoViewEnabled, scrollWrapperElement])\r\n\r\n return (\r\n \r\n {(isTimeframeSelectEnabled ?? isFavoritesEnabled) && (\r\n
\r\n \r\n
\r\n )}\r\n {!isCompactView && (\r\n
\r\n \r\n {\r\n /*\r\n * Vertical scrolling doesn't scroll horizontally by default (it's possible when holding shift)\r\n * When using touchpad we may get values in both delatX and deltaY, so if someone's scrolling horizontally we don't want to do anything\r\n * but if they are scrolling vertically (deltaY > deltaX) we want to scroll horizontally the value they would nativally scroll in vertical direction\r\n * */\r\n const absDx = Math.abs(event.deltaX)\r\n const absDy = Math.abs(event.deltaY)\r\n if (absDy > absDx) {\r\n event.currentTarget.scrollLeft += event.deltaY\r\n }\r\n }}\r\n >\r\n {timeframesInExpandedPanel.map((timeframe) => {\r\n let linkProps = {}\r\n if (timeframe.href) {\r\n linkProps = {\r\n as: Link,\r\n to: timeframe.href,\r\n reloadDocument: timeframe.withReload ?? !isPremium,\r\n onClick: () => onTimeframeSelect(timeframe),\r\n }\r\n } else {\r\n linkProps = {\r\n onClick: (ev: React.MouseEvent) => {\r\n ev.preventDefault()\r\n onTimeframeSelect(timeframe)\r\n },\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 {isDateRangeAvailable && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n )\r\n}\r\n","import { type To } from 'react-router-dom'\r\n\r\nimport { decodeQueryString, encodeQueryString } from '../../../app/queryString'\r\nimport { SpecificChartFunctionality, TIMEFRAME } from '../../constants'\r\nimport { DateRangeType, Instrument } from '../../types'\r\nimport { CUSTOM_DATE_RANGE, CustomDateRangePrefixEnum, DATE_RANGE_PREFIX_DELMITER } from './custom-date-range-utils'\r\n\r\ninterface ITimeFrame {\r\n value: TIMEFRAME | 'intraday'\r\n label: string\r\n labelShort: string\r\n labelPageTitle?: string\r\n}\r\n\r\nexport interface ITimeframeGroup {\r\n label: string\r\n timeframes: ITimeFrame[]\r\n}\r\n\r\ninterface IDateRange {\r\n value: string\r\n label: string\r\n timeframe?: TIMEFRAME\r\n}\r\n\r\nexport interface IRangeGroup {\r\n label?: string\r\n dateRanges: IDateRange[]\r\n}\r\n\r\nexport const generateTimeframeGroups = (isPremium = true): ITimeframeGroup[] => {\r\n const premiumTimeframes: ITimeframeGroup[] = [\r\n {\r\n label: '',\r\n timeframes: [\r\n { value: TIMEFRAME.i1, label: '1 Minute', labelShort: '1M' },\r\n { value: TIMEFRAME.i2, label: '2 Minutes', labelShort: '2M' },\r\n { value: TIMEFRAME.i3, label: '3 Minutes', labelShort: '3M' },\r\n { value: TIMEFRAME.i5, label: '5 Minutes', labelShort: '5M' },\r\n { value: TIMEFRAME.i10, label: '10 Minutes', labelShort: '10M' },\r\n { value: TIMEFRAME.i15, label: '15 Minutes', labelShort: '15M' },\r\n { value: TIMEFRAME.i30, label: '30 Minutes', labelShort: '30M' },\r\n ],\r\n },\r\n {\r\n label: '',\r\n timeframes: [\r\n { value: TIMEFRAME.h, label: '1 Hour', labelShort: '1H', labelPageTitle: 'Hourly' },\r\n { value: TIMEFRAME.h2, label: '2 Hours', labelShort: '2H' },\r\n { value: TIMEFRAME.h4, label: '4 Hours', labelShort: '4H' },\r\n ],\r\n },\r\n {\r\n label: '',\r\n timeframes: [\r\n { value: TIMEFRAME.d, label: '1 Day', labelShort: 'D', labelPageTitle: 'Daily' },\r\n { value: TIMEFRAME.w, label: '1 Week', labelShort: 'W', labelPageTitle: 'Weekly' },\r\n { value: TIMEFRAME.m, label: '1 Month', labelShort: 'M', labelPageTitle: 'Monthly' },\r\n ],\r\n },\r\n ]\r\n\r\n const freeTimeframes = [\r\n {\r\n // intradayTimeframe is only for non premium users used as redirect to elite subscription\r\n label: '',\r\n timeframes: [{ value: 'intraday' as const, label: 'Intraday', labelShort: 'Intraday' }],\r\n },\r\n {\r\n label: '',\r\n timeframes: [\r\n { value: TIMEFRAME.d, label: '1 Day', labelShort: 'Daily' },\r\n { value: TIMEFRAME.w, label: '1 Week', labelShort: 'Weekly' },\r\n { value: TIMEFRAME.m, label: '1 Month', labelShort: 'Monthly' },\r\n ],\r\n },\r\n ]\r\n\r\n return isPremium ? premiumTimeframes : freeTimeframes\r\n}\r\n\r\nexport function getTimeframeGroups(isPremium: boolean) {\r\n return generateTimeframeGroups(isPremium)\r\n}\r\n\r\nexport const generateDateRangeGroups = ({\r\n isPremium,\r\n instrument,\r\n}: {\r\n isPremium: boolean\r\n instrument: Instrument\r\n}): IRangeGroup[] => {\r\n const isStock = instrument === Instrument.Stock\r\n const rangeGroups: Array<{ label?: string; dateRanges: IDateRange[] }> = [\r\n {\r\n label: 'Days',\r\n dateRanges: [\r\n { value: DateRangeType.d1, label: '1 Day', timeframe: isStock ? TIMEFRAME.i1 : TIMEFRAME.i5 },\r\n { value: DateRangeType.d5, label: '5 Days', timeframe: isStock ? TIMEFRAME.i5 : TIMEFRAME.i30 },\r\n ],\r\n },\r\n {\r\n label: 'Months',\r\n dateRanges: [\r\n { value: DateRangeType.m1, label: '1 Month', timeframe: TIMEFRAME.d },\r\n { value: DateRangeType.m3, label: '3 Months', timeframe: TIMEFRAME.d },\r\n { value: DateRangeType.m6, label: '6 Months', timeframe: TIMEFRAME.d },\r\n ],\r\n },\r\n {\r\n label: 'Years',\r\n dateRanges: [\r\n { value: DateRangeType.ytd, label: 'Year to Date', timeframe: TIMEFRAME.d },\r\n { value: DateRangeType.y1, label: '1 Year', timeframe: TIMEFRAME.d },\r\n { value: DateRangeType.y2, label: '2 Years', timeframe: TIMEFRAME.w },\r\n { value: DateRangeType.y5, label: '5 Years', timeframe: isPremium ? TIMEFRAME.w : TIMEFRAME.m },\r\n { value: DateRangeType.max, label: 'Max', timeframe: TIMEFRAME.m },\r\n ],\r\n },\r\n ]\r\n\r\n return rangeGroups\r\n}\r\n\r\nexport function getDateRangeGroups({\r\n isPremium,\r\n customRange,\r\n isCustomAvailable = true,\r\n instrument,\r\n}: {\r\n isPremium: boolean\r\n customRange?: string\r\n isCustomAvailable?: boolean\r\n instrument: Instrument\r\n}) {\r\n const rangeGroups = generateDateRangeGroups({ isPremium, instrument })\r\n\r\n if (isPremium && isCustomAvailable !== false) {\r\n const [dateRangePrefix] = customRange?.split(DATE_RANGE_PREFIX_DELMITER) ?? []\r\n rangeGroups.push({\r\n dateRanges: [\r\n {\r\n value:\r\n customRange && Object.values(CustomDateRangePrefixEnum).includes(dateRangePrefix)\r\n ? customRange\r\n : CUSTOM_DATE_RANGE,\r\n label: 'Custom',\r\n },\r\n ],\r\n })\r\n }\r\n\r\n return rangeGroups\r\n}\r\n\r\nexport function getDateRangeGroupsWithHref({\r\n isPremium,\r\n customRange,\r\n generatePath,\r\n withReload,\r\n isCustomAvailable,\r\n instrument,\r\n}: {\r\n isPremium: boolean\r\n isCustomAvailable?: boolean\r\n customRange?: string\r\n withReload?: boolean\r\n instrument: Instrument\r\n generatePath: (dateRange: IDateRange) => To\r\n}) {\r\n return getDateRangeGroups({\r\n isPremium,\r\n isCustomAvailable,\r\n customRange,\r\n instrument,\r\n }).map((dateRangeGroup: IRangeGroup) => ({\r\n label: dateRangeGroup.label,\r\n dateRanges: dateRangeGroup.dateRanges.map((dateRange) => ({\r\n ...dateRange,\r\n href:\r\n !isPremium || Object.values(DateRangeType).includes(dateRange.value as DateRangeType)\r\n ? generatePath(dateRange)\r\n : undefined,\r\n withReload: withReload ?? !isPremium,\r\n })),\r\n }))\r\n}\r\n\r\nconst FREE_PERIODS_STOCK = ['d', 'w', 'm']\r\n\r\nexport function generatePathForTimeframeDateRange({\r\n isPremium,\r\n pathname,\r\n timeframe,\r\n dateRange,\r\n utmCampaign,\r\n freeTimeframes = FREE_PERIODS_STOCK,\r\n dateRangeQueryKey = 'r',\r\n}: {\r\n isPremium: boolean\r\n pathname: string\r\n timeframe: TIMEFRAME | 'intraday'\r\n dateRange?: string | null\r\n utmCampaign?: string\r\n freeTimeframes?: string[]\r\n dateRangeQueryKey?: string\r\n}) {\r\n if (isPremium || freeTimeframes.includes(timeframe)) {\r\n return {\r\n pathname,\r\n search: `?${encodeQueryString({\r\n ...decodeQueryString(),\r\n i: undefined,\r\n p: timeframe,\r\n [dateRangeQueryKey]: dateRange ?? undefined,\r\n })}`,\r\n }\r\n }\r\n\r\n return {\r\n pathname: '/elite.ashx',\r\n search: `?${encodeQueryString({\r\n utm_source: 'finviz',\r\n utm_medium: 'banner',\r\n utm_campaign: utmCampaign || window.location.pathname,\r\n })}`,\r\n }\r\n}\r\n\r\nexport const timeframeUtm: Partial> = {\r\n [SpecificChartFunctionality.quotePage]: 'quote-timeframe',\r\n [SpecificChartFunctionality.futuresPage]: 'futures-timeframe',\r\n [SpecificChartFunctionality.forexPage]: 'forex-timeframe',\r\n [SpecificChartFunctionality.cryptoPage]: 'crypto-timeframe',\r\n}\r\n\r\nexport const daterangeUtm: Partial> = {\r\n [SpecificChartFunctionality.futuresPage]: 'futures-timeframe-daterange',\r\n [SpecificChartFunctionality.forexPage]: 'forex-timeframe-daterange',\r\n [SpecificChartFunctionality.cryptoPage]: 'crypto-timeframe-daterange',\r\n}\r\n","import * as dateFns from 'date-fns'\r\n\r\nimport { formatDateToStringUS } from '../../../app/shared/utils'\r\nimport { TIMEFRAME } from '../../constants'\r\nimport { Instrument } from '../../types'\r\nimport { generateDateRangeGroups } from './utils'\r\n\r\n// **************START**************\r\n// Functions from here until END have to be in sync with\r\n// charts: app/utils/chart-date-range-utils.ts\r\n// *********************************\r\n\r\nexport enum CustomDateRangePrefixEnum {\r\n Range = 'range',\r\n Prev = 'prev',\r\n}\r\n\r\nexport const CUSTOM_DATE_RANGE = 'custom'\r\nexport const DATE_RANGE_PREFIX_DELMITER = '_'\r\nconst CUSTOM_DATE_RANGE_DELIMITER = 'x'\r\nconst CUSTOM_PREV_RANGE_DELIMITER = '-'\r\n\r\nexport function getParsedDateRange(dateRange?: string) {\r\n return dateRange?.split(DATE_RANGE_PREFIX_DELMITER) ?? []\r\n}\r\n\r\nexport function parseCustomDateRangeUrlParam({ dateRange, anchorDate }: { dateRange: string; anchorDate: Date }) {\r\n const [dateRangePrefix, dateRangeValue] = getParsedDateRange(dateRange)\r\n\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Range) {\r\n const [dateFromString, dateToString] = dateRangeValue.replace(/-/g, '/').split(CUSTOM_DATE_RANGE_DELIMITER)\r\n const dateFrom = dateFromString ? new Date(dateFromString) : null\r\n const dateTo = dateToString ? new Date(dateToString) : null\r\n return {\r\n start: dateFrom && !Number.isNaN(dateFrom.getTime()) ? dateFrom : null,\r\n end: dateTo && !Number.isNaN(dateTo.getTime()) ? dateFns.endOfDay(dateTo) : null,\r\n }\r\n }\r\n\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Prev) {\r\n const [years, months, days] = dateRangeValue.split(CUSTOM_PREV_RANGE_DELIMITER).map(Number)\r\n\r\n if ([years, months, days].some(Number.isNaN)) {\r\n return { start: null, end: null }\r\n }\r\n\r\n return {\r\n start: dateFns.startOfDay(dateFns.sub(anchorDate, { years, months, days: days - 1 })),\r\n end: anchorDate,\r\n }\r\n }\r\n\r\n return { start: null, end: anchorDate }\r\n}\r\n\r\n// **************END**************\r\n// Functions below don't need to be\r\n// in sync with Website repository\r\n// *******************************\r\n\r\nconst DAYS_IN_YEAR = 365\r\n\r\nexport function getCustomStartEndDateRangeUrlParam({ start, end }: { start: Date | null; end: Date | null }) {\r\n const startString = start ? formatDateToStringUS(start) : ''\r\n const endString = end ? formatDateToStringUS(end) : ''\r\n\r\n const stringParts = [\r\n CustomDateRangePrefixEnum.Range,\r\n DATE_RANGE_PREFIX_DELMITER,\r\n startString,\r\n CUSTOM_DATE_RANGE_DELIMITER,\r\n endString,\r\n ]\r\n\r\n return stringParts.join('').replace(/\\//g, '-')\r\n}\r\n\r\nexport function getPrevPeriodDateRangeUrlParam({\r\n years,\r\n months,\r\n days,\r\n}: {\r\n years: number\r\n months: number\r\n days: number\r\n}) {\r\n const stringParts = [\r\n CustomDateRangePrefixEnum.Prev,\r\n DATE_RANGE_PREFIX_DELMITER,\r\n years,\r\n CUSTOM_PREV_RANGE_DELIMITER,\r\n months,\r\n CUSTOM_PREV_RANGE_DELIMITER,\r\n days,\r\n ]\r\n\r\n return stringParts.join('')\r\n}\r\n\r\nexport function getTimeframeForDateRangeType({\r\n dateRange,\r\n isPremium = true,\r\n instrument,\r\n}: {\r\n dateRange: string\r\n isPremium?: boolean\r\n instrument: Instrument\r\n}) {\r\n const dateRanges = generateDateRangeGroups({ isPremium, instrument }).flatMap(({ dateRanges }) => dateRanges)\r\n return dateRanges.find(({ value }) => value === dateRange)?.timeframe ?? null\r\n}\r\n\r\nexport function getTimeframeFromDateRange({\r\n dateRange,\r\n anchorDate,\r\n instrument,\r\n isPremium,\r\n}: {\r\n dateRange: string\r\n anchorDate: Date\r\n instrument: Instrument\r\n isPremium: boolean\r\n}) {\r\n const dateRangeTimeframe = getTimeframeForDateRangeType({ dateRange, instrument })\r\n if (dateRangeTimeframe) {\r\n return dateRangeTimeframe\r\n }\r\n const { start, end } = parseCustomDateRangeUrlParam({ dateRange, anchorDate })\r\n const startNyTime = start ?? new Date(0)\r\n const startToReferenceDateNumOfDays = dateFns.differenceInCalendarDays(anchorDate, startNyTime) + 1\r\n const rangeNumOfDays = dateFns.differenceInCalendarDays(end ?? anchorDate, startNyTime) + 1\r\n /**\r\n * DB_BARS_LIMIT - code below is dependent on amount of data we store for specific timeframes\r\n * Search DB_BARS_LIMIT in the project to find other places with such code.\r\n */\r\n if (rangeNumOfDays > 6 * DAYS_IN_YEAR) {\r\n return TIMEFRAME.m\r\n }\r\n\r\n if (rangeNumOfDays > 4 * DAYS_IN_YEAR) {\r\n return isPremium ? TIMEFRAME.w : TIMEFRAME.m\r\n }\r\n\r\n if (rangeNumOfDays > 1.5 * DAYS_IN_YEAR) {\r\n return TIMEFRAME.w\r\n }\r\n\r\n // Keep these values in sync with values in FetchQuoteIntraday in quote.cs\r\n if (instrument === Instrument.Stock) {\r\n if (rangeNumOfDays <= 1 && startToReferenceDateNumOfDays <= 11) {\r\n return TIMEFRAME.i1\r\n }\r\n\r\n if (rangeNumOfDays <= 5 && startToReferenceDateNumOfDays <= 16) {\r\n return TIMEFRAME.i5\r\n }\r\n\r\n if (rangeNumOfDays <= 7 && startToReferenceDateNumOfDays <= 200) {\r\n return TIMEFRAME.i30\r\n }\r\n } else {\r\n if (startToReferenceDateNumOfDays <= 2) {\r\n return TIMEFRAME.i5\r\n }\r\n if (startToReferenceDateNumOfDays <= 7) {\r\n return TIMEFRAME.i30\r\n }\r\n }\r\n\r\n return TIMEFRAME.d\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport * as React from 'react'\r\n\r\nimport { formatDateToStringUS } from '../../../app/shared/utils'\r\nimport { Button } from '../button'\r\nimport { ButtonGroup } from '../button-group'\r\nimport { DatePicker } from '../date-picker'\r\nimport { Delayed } from '../delayed'\r\nimport { Dialog, DialogBody, DialogDismiss, DialogFooter, DialogHeader } from '../dialog'\r\nimport { Input } from '../input'\r\nimport { Spinner } from '../spinner'\r\nimport {\r\n CustomDateRangePrefixEnum,\r\n getCustomStartEndDateRangeUrlParam,\r\n getParsedDateRange,\r\n getPrevPeriodDateRangeUrlParam,\r\n parseCustomDateRangeUrlParam,\r\n} from './custom-date-range-utils'\r\n\r\nconst DATA_YEAR_START = 1980\r\nconst DATE_PICKER_MIN_DATE = new Date(`01/01/${DATA_YEAR_START}`)\r\nconst YEARS_MAX_VALUE = new Date().getFullYear() - DATA_YEAR_START\r\n\r\nconst TAB_BUTTON_COMMON_PROPS = { type: 'button', className: 'flex-1', contentClass: 'text-center' } as const\r\n\r\nexport enum CustomRangeType {\r\n StartEnd,\r\n Manual,\r\n}\r\n\r\ninterface StartEndRange {\r\n kind: CustomRangeType.StartEnd\r\n start: Date | null\r\n end: Date | null\r\n}\r\n\r\ninterface ManualRange {\r\n kind: CustomRangeType.Manual\r\n days?: number\r\n months?: number\r\n years?: number\r\n}\r\n\r\nexport type CustomDateRangeType = StartEndRange | ManualRange\r\n\r\ninterface DialogContentProps {\r\n /**\r\n * Dialog state\r\n */\r\n dialogState: any\r\n dateRange?: string\r\n anchorDate: Date\r\n onDialogSubmit: (args: { dateRange: string | null }) => void\r\n isFetching?: boolean\r\n}\r\n\r\nconst DEFAULT_MANUAL_RANGE: ManualRange = {\r\n kind: CustomRangeType.Manual,\r\n days: 0,\r\n months: 0,\r\n years: 0,\r\n}\r\n\r\nconst DEFAULT_START_END_RANGE: StartEndRange = {\r\n kind: CustomRangeType.StartEnd,\r\n start: null,\r\n end: null,\r\n}\r\n\r\nfunction isValidManualRangeState({ years = 0, months = 0, days = 0 }: ManualRange) {\r\n return years + months + days > 0\r\n}\r\n\r\nfunction isValidStartEndRangeState({ start, end }: StartEndRange) {\r\n return !!(start || end)\r\n}\r\n\r\nfunction getDefaultSelectedTab(dateRange?: string) {\r\n if (dateRange) {\r\n const [dateRangePrefix] = getParsedDateRange(dateRange)\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Range) {\r\n return CustomRangeType.StartEnd\r\n }\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Prev) {\r\n return CustomRangeType.Manual\r\n }\r\n }\r\n return CustomRangeType.StartEnd\r\n}\r\n\r\nfunction getDefaultSelectedDate({\r\n dateRange,\r\n anchorDate,\r\n}: {\r\n dateRange?: string\r\n anchorDate: Date\r\n}): CustomDateRangeType {\r\n if (dateRange) {\r\n const [dateRangePrefix] = getParsedDateRange(dateRange)\r\n const { start, end } = parseCustomDateRangeUrlParam({ dateRange, anchorDate })\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Range) {\r\n return { kind: CustomRangeType.StartEnd, start, end }\r\n }\r\n if (dateRangePrefix === CustomDateRangePrefixEnum.Prev && start && end) {\r\n const { years, months, days } = dateFns.intervalToDuration({\r\n start: dateFns.sub(start, { days: 1 }),\r\n end,\r\n })\r\n return { kind: CustomRangeType.Manual, years, months, days }\r\n }\r\n }\r\n\r\n return DEFAULT_START_END_RANGE\r\n}\r\n\r\nexport function CustomDateRange({\r\n dialogState,\r\n dateRange,\r\n anchorDate,\r\n onDialogSubmit,\r\n isFetching,\r\n}: DialogContentProps) {\r\n const [selectedTab, setSelectedTab] = React.useState(getDefaultSelectedTab(dateRange))\r\n\r\n const [state, setState] = React.useState(getDefaultSelectedDate({ dateRange, anchorDate }))\r\n\r\n const { current: onChange } = React.useRef((kind: CustomRangeType, newValue: Partial) => {\r\n setState((prevState) => {\r\n if (kind === CustomRangeType.Manual) {\r\n const defaults = prevState?.kind === CustomRangeType.Manual ? prevState : DEFAULT_MANUAL_RANGE\r\n return { ...defaults, ...newValue } as ManualRange\r\n }\r\n if (kind === CustomRangeType.StartEnd) {\r\n const defaults = prevState?.kind === CustomRangeType.StartEnd ? prevState : DEFAULT_START_END_RANGE\r\n\r\n const newState = { ...defaults, ...newValue }\r\n if (newState.start && newState.end && newState.start.getTime() > newState.end.getTime()) {\r\n const newEnd = new Date(newState.start.getTime())\r\n newState.start = newState.end\r\n newState.end = newEnd\r\n }\r\n return newState\r\n }\r\n return prevState\r\n })\r\n })\r\n\r\n const handleSubmit = (ev: React.FormEvent) => {\r\n ev.preventDefault()\r\n\r\n let dateRange = null\r\n\r\n if (state?.kind === CustomRangeType.StartEnd && isValidStartEndRangeState(state)) {\r\n dateRange = getCustomStartEndDateRangeUrlParam({ start: state.start, end: state.end })\r\n } else if (state?.kind === CustomRangeType.Manual && isValidManualRangeState(state)) {\r\n dateRange = getPrevPeriodDateRangeUrlParam({\r\n days: state.days ?? 0,\r\n months: state.months ?? 0,\r\n years: state.years ?? 0,\r\n })\r\n }\r\n\r\n onDialogSubmit({ dateRange })\r\n }\r\n\r\n const isAbsolute = state?.kind === CustomRangeType.StartEnd\r\n const fromDate = isAbsolute ? state.start : DEFAULT_START_END_RANGE.start\r\n const toDate = isAbsolute ? state.end : DEFAULT_START_END_RANGE.end\r\n\r\n const manualRange = {\r\n ...DEFAULT_MANUAL_RANGE,\r\n ...(state?.kind === CustomRangeType.Manual ? state : {}),\r\n }\r\n\r\n return (\r\n \r\n Custom Date Range\r\n
\r\n \r\n \r\n setSelectedTab(CustomRangeType.StartEnd)}\r\n >\r\n Start / End\r\n \r\n setSelectedTab(CustomRangeType.Manual)}\r\n >\r\n Range\r\n \r\n \r\n\r\n {selectedTab === CustomRangeType.StartEnd ? (\r\n
\r\n onChange(CustomRangeType.StartEnd, { start })}\r\n >\r\n \r\n \r\n onChange(CustomRangeType.StartEnd, { end })}\r\n >\r\n \r\n \r\n
\r\n ) : (\r\n
\r\n ) =>\r\n onChange(CustomRangeType.Manual, { years: Number.parseInt(ev.currentTarget.value) })\r\n }\r\n />\r\n ) =>\r\n onChange(CustomRangeType.Manual, { months: Number.parseInt(ev.currentTarget.value) })\r\n }\r\n />\r\n ) =>\r\n onChange(CustomRangeType.Manual, { days: Number.parseInt(ev.currentTarget.value) })\r\n }\r\n />\r\n
\r\n )}\r\n
\r\n \r\n
\r\n \r\n setState(state.kind === CustomRangeType.Manual ? DEFAULT_MANUAL_RANGE : DEFAULT_START_END_RANGE)\r\n }\r\n >\r\n Reset\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\nimport { To, useNavigate } from 'react-router-dom'\r\n\r\nimport { TIMEFRAME } from '../../constants'\r\nimport { Instrument } from '../../types'\r\nimport { useDialogState } from '../dialog'\r\nimport { getTimeframeFromDateRange } from './custom-date-range-utils'\r\n\r\ninterface IPathForTimeframeDateRangeProps {\r\n timeframe: TIMEFRAME | 'intraday'\r\n dateRange?: string | null\r\n ticker?: string\r\n}\r\n\r\ninterface IUseCustomDateRangeDialogSubmitProps {\r\n anchorDate?: Date\r\n instrument?: Instrument\r\n shouldReloadOnNavigate?: boolean\r\n pathGenerator?: ({ ticker, timeframe, dateRange }: IPathForTimeframeDateRangeProps) => {\r\n pathname: string\r\n search: string\r\n }\r\n}\r\n\r\nexport function useCustomDateRangeDialog({\r\n anchorDate,\r\n instrument,\r\n pathGenerator,\r\n shouldReloadOnNavigate = false,\r\n}: IUseCustomDateRangeDialogSubmitProps) {\r\n const navigate = useNavigate()\r\n const customDateRangeDialogState = useDialogState()\r\n\r\n const isPremium = FinvizSettings.hasUserPremium\r\n\r\n const handleDateRangeSelect = React.useCallback(\r\n (\r\n { value, timeframe, href }: { value: string; timeframe?: TIMEFRAME; href?: To },\r\n callback?: ({ value, timeframe, href }: { value: string; timeframe: TIMEFRAME; href?: To }) => void\r\n ) => {\r\n if (!timeframe) return\r\n\r\n if (!href && pathGenerator) {\r\n const path = pathGenerator({ timeframe, dateRange: value })\r\n if (shouldReloadOnNavigate) {\r\n window.location.href = `${path.pathname}?${path.search}`\r\n } else {\r\n navigate(path)\r\n }\r\n }\r\n\r\n callback?.({ value, timeframe, href })\r\n },\r\n [navigate, pathGenerator, shouldReloadOnNavigate]\r\n )\r\n\r\n const getDateRangeTimeframe = React.useCallback(\r\n (dateRange: string | null) => {\r\n if (!anchorDate || !instrument || !dateRange) return null\r\n\r\n return {\r\n value: dateRange,\r\n timeframe: getTimeframeFromDateRange({\r\n dateRange: dateRange!,\r\n anchorDate,\r\n isPremium,\r\n instrument,\r\n }),\r\n }\r\n },\r\n [anchorDate, instrument, isPremium]\r\n )\r\n\r\n const onDialogSubmit = React.useCallback(\r\n ({ value: dateRange, timeframe: newTimeframe }: { value: string; timeframe: TIMEFRAME }) => {\r\n handleDateRangeSelect({\r\n value: dateRange,\r\n timeframe: newTimeframe,\r\n })\r\n customDateRangeDialogState.hide()\r\n },\r\n // We only want `customDateRangeDialogState.hide`, not the whole dialog\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [customDateRangeDialogState.hide, handleDateRangeSelect]\r\n )\r\n\r\n return { onDialogSubmit, customDateRangeDialogState, handleDateRangeSelect, getDateRangeTimeframe }\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { TIMEFRAME } from '../../constants'\r\nimport { useSyncLocalStorage } from '../../hooks/use-sync-local-storage'\r\n\r\ntype FavoriteTimeframesMap = { [K in TIMEFRAME | 'intraday']?: boolean }\r\n\r\nexport const TIMEFRAME_FAVORITE_DEFAULTS = {\r\n [TIMEFRAME.i1]: true,\r\n [TIMEFRAME.i2]: false,\r\n [TIMEFRAME.i3]: true,\r\n [TIMEFRAME.i5]: true,\r\n [TIMEFRAME.i10]: false,\r\n [TIMEFRAME.i15]: true,\r\n [TIMEFRAME.i30]: true,\r\n [TIMEFRAME.h]: true,\r\n [TIMEFRAME.h2]: false,\r\n [TIMEFRAME.h4]: false,\r\n [TIMEFRAME.d]: true,\r\n [TIMEFRAME.w]: true,\r\n [TIMEFRAME.m]: true,\r\n}\r\n\r\nexport const TIMEFRAME_FAVORITE_DEFAULTS_FREE = {\r\n ...TIMEFRAME_FAVORITE_DEFAULTS,\r\n intraday: true,\r\n}\r\n\r\nconst LOCAL_STORAGE_KEY = 'favoriteTimeframesMap'\r\n\r\nexport function useFavoriteTimeframes(isPremium = true) {\r\n const { state, setState } = useSyncLocalStorage(\r\n LOCAL_STORAGE_KEY,\r\n isPremium ? TIMEFRAME_FAVORITE_DEFAULTS : TIMEFRAME_FAVORITE_DEFAULTS_FREE\r\n )\r\n\r\n const toggleFavoriteTimeframe = React.useCallback(\r\n (timeframe: TIMEFRAME | 'intraday') => {\r\n setState((prevState) => ({\r\n ...prevState,\r\n [timeframe]: !prevState[timeframe],\r\n }))\r\n },\r\n [setState]\r\n )\r\n\r\n const favoriteTimeframes = React.useMemo(\r\n () => Object.keys(state).filter((key) => state[key as keyof FavoriteTimeframesMap]),\r\n [state]\r\n )\r\n\r\n return {\r\n favoriteTimeframes: isPremium ? favoriteTimeframes : Object.keys(TIMEFRAME_FAVORITE_DEFAULTS_FREE),\r\n toggleFavoriteTimeframe,\r\n }\r\n}\r\n","import * as React from 'react'\r\n\r\nimport * as storage from '../services/local-storage'\r\n\r\n/**\r\n * Hook to synchronize localStorage.setItem across all components on the page on all open tabs\r\n */\r\nexport function useSyncLocalStorage(storageKey: string, defaultValue: ValueType) {\r\n const [state, setState] = React.useState(storage.getValue(storageKey, defaultValue))\r\n\r\n React.useEffect(() => {\r\n const subscription = storage.subscribeToChanges(storageKey, defaultValue, setState)\r\n\r\n return () => {\r\n subscription.unsubscribe()\r\n }\r\n }, [storageKey, defaultValue])\r\n\r\n const setValue = React.useCallback(\r\n (valueGetter: React.SetStateAction) => storage.setValue(storageKey, valueGetter, defaultValue),\r\n [defaultValue, storageKey]\r\n )\r\n\r\n return {\r\n state,\r\n setState: setValue,\r\n }\r\n}\r\n","import * as AriaKit from '@ariakit/react'\r\nimport * as React from 'react'\r\n\r\nimport { Input, InputHTMLProps, InputProps } from './input'\r\nimport { Tooltip, TooltipColor, TooltipProps, TooltipTrigger, useTooltipState } from './tooltip'\r\n\r\ntype TooltipInputProps = InputProps & InputHTMLProps & { isInteractive?: boolean }\r\n\r\ninterface TooltipSettingsProps extends Pick, Pick {\r\n content?: React.ReactNode\r\n color?: keyof typeof TooltipColor\r\n}\r\n\r\nexport interface TooltipInputWrapperProps extends Pick {\r\n children: React.ReactElement\r\n /**\r\n * Settings for Tooltip component and useTooltipStore\r\n */\r\n tooltipSettings?: TooltipSettingsProps\r\n}\r\n\r\nfunction TooltipInputWrapper({ children, tooltipSettings = {}, name }: TooltipInputWrapperProps) {\r\n const { content, color, gutter, placement = 'bottom' } = tooltipSettings\r\n const tooltip = useTooltipState({ placement })\r\n\r\n return (\r\n <>\r\n \r\n {React.cloneElement(children, {\r\n onFocus: (event: React.FocusEvent) => {\r\n children.props.onFocus?.(event)\r\n tooltip.show()\r\n },\r\n onBlur: (event: React.FocusEvent) => {\r\n children.props.onBlur?.(event)\r\n tooltip.hide()\r\n },\r\n })}\r\n \r\n {content && (\r\n \r\n {content}\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nfunction TooltipInputComponent(\r\n { tooltipSettings, isInteractive = true, ...props }: TooltipInputProps & Omit,\r\n ref: React.ForwardedRef\r\n) {\r\n const input = \r\n\r\n if (!isInteractive) {\r\n return input\r\n }\r\n\r\n return (\r\n \r\n {input}\r\n \r\n )\r\n}\r\n\r\nexport const TooltipInput = React.forwardRef(TooltipInputComponent)\r\n","import React from 'react'\r\n\r\nimport { DropdownStateReturn } from '../components/dropdown'\r\nimport { PopoverStateReturn } from '../components/popover'\r\nimport { useWindowSize } from './use-window-size'\r\n\r\ntype Props = {\r\n maxHeightLimit: number\r\n hasViewportHeightLimit: boolean\r\n offsets: [number, number]\r\n state: PopoverStateReturn | DropdownStateReturn\r\n}\r\n\r\nconst MAX_HEIGHT_PROPERTY = '--popover-max-height'\r\nconst POPOVER_HEIGHT_LIMIT_STYLE = {\r\n maxHeight: `calc(var(${MAX_HEIGHT_PROPERTY}) - env(safe-area-inset-bottom))`,\r\n}\r\n\r\n/**\r\n * Limit popover height to be always in viewport is `hasViewportHeightLimit` is true\r\n */\r\nexport function usePopoverMaxHeight({ maxHeightLimit, hasViewportHeightLimit, offsets, state }: Props) {\r\n const { innerHeight } = useWindowSize({ isWatching: state.visible || state.animating })\r\n const buttonElement = state.unstable_referenceRef.current\r\n\r\n React.useEffect(() => {\r\n if (!buttonElement || !state.visible || !hasViewportHeightLimit) return\r\n\r\n // calculate height\r\n const buttonRect = buttonElement.getBoundingClientRect()\r\n const [, offsetY] = offsets\r\n let elementMaxHeight = 'auto'\r\n if (state.placement.startsWith('bottom')) {\r\n let height = innerHeight - buttonRect.bottom - offsetY * 2\r\n // when used on pages where is scrollable content, buttonRect.bottom is sometimes negative\r\n // in that case we need to subtract window.scrollY\r\n if (buttonRect.bottom < 0) height -= window.scrollY\r\n elementMaxHeight = `${Math.min(height, maxHeightLimit)}px`\r\n } else {\r\n const height = buttonRect.top - offsetY * 2\r\n elementMaxHeight = `${Math.min(height, maxHeightLimit)}px`\r\n }\r\n\r\n // set height\r\n const popoverId = buttonElement.getAttribute('aria-controls')\r\n const popoverWrapper = popoverId ? document.getElementById(popoverId) : null\r\n popoverWrapper?.style.setProperty(MAX_HEIGHT_PROPERTY, elementMaxHeight)\r\n }, [buttonElement, innerHeight, maxHeightLimit, hasViewportHeightLimit, offsets, state.placement, state.visible])\r\n\r\n return hasViewportHeightLimit ? POPOVER_HEIGHT_LIMIT_STYLE : undefined\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\ninterface Props {\r\n throttleWaitInMs?: number\r\n isWatching?: boolean\r\n}\r\n\r\nexport function useWindowSize({ throttleWaitInMs = 300, isWatching = true }: Props = {}) {\r\n const [size, setSize] = React.useState({\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (!isWatching) return\r\n\r\n const handleResize = throttle(() => {\r\n setSize({\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n }, throttleWaitInMs)\r\n\r\n window.addEventListener('resize', handleResize)\r\n\r\n return () => {\r\n handleResize.cancel()\r\n window.removeEventListener('resize', handleResize)\r\n }\r\n }, [throttleWaitInMs, isWatching])\r\n\r\n return size\r\n}\r\n","import { EventEmitter } from 'events'\r\nimport * as React from 'react'\r\n\r\nlet emitter: EventEmitter | undefined\r\n\r\n/**\r\n * Get the emitter which is used to sync components across the page, subscibe to\r\n * changes and attach event which handles changes across windows\r\n */\r\nexport function subscribeToChanges(\r\n key: string,\r\n defaultValue: ValueType,\r\n changeCallback?: (value: React.SetStateAction) => void\r\n) {\r\n if (!emitter) emitter = new EventEmitter()\r\n\r\n const onChange = (value: React.SetStateAction) => {\r\n const newValue = value ?? getValue(key, defaultValue)\r\n setValue(key, newValue, defaultValue, false)\r\n changeCallback?.(newValue)\r\n }\r\n\r\n const onStorageChange = (ev: StorageEvent) => {\r\n if (ev.key === key) {\r\n try {\r\n const value = ev.newValue ? JSON.parse(ev.newValue) : null\r\n onChange(value ?? defaultValue)\r\n } catch {\r\n onChange(defaultValue)\r\n }\r\n }\r\n }\r\n\r\n emitter.addListener(key, onChange)\r\n window.addEventListener('storage', onStorageChange)\r\n\r\n return {\r\n emitter,\r\n unsubscribe: () => {\r\n emitter?.removeListener(key, onChange)\r\n window.removeEventListener('storage', onStorageChange)\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * Get value from local storage or fall back to `defaultValue`\r\n */\r\nexport function getValue(key: string, defaultValue: ValueType): ValueType {\r\n try {\r\n const value = localStorage.getItem(key)\r\n const parsedValue = value ? JSON.parse(value) : null\r\n return parsedValue ?? defaultValue\r\n } catch {\r\n return defaultValue\r\n }\r\n}\r\n\r\n/**\r\n * Set value to local storage. Optionally emits the change to all other components\r\n * which are subscribed with the same `key`\r\n */\r\nexport function setValue(\r\n key: string,\r\n valueGetter: React.SetStateAction,\r\n defaultValue: ValueType,\r\n emit = true\r\n) {\r\n try {\r\n const state = getValue(key, defaultValue)\r\n const valueToStore = valueGetter instanceof Function ? valueGetter(state) : valueGetter\r\n\r\n localStorage.setItem(key, JSON.stringify(valueToStore))\r\n if (emit) emitter?.emit(key, valueToStore)\r\n } catch {}\r\n}\r\n\r\n/**\r\n * Removes value from local storage. Optionally emits the change to all other components\r\n * which are subscribed with the same `key`\r\n */\r\nexport function removeValue(key: string, emit = true) {\r\n try {\r\n localStorage.removeItem(key)\r\n if (emit) emitter?.emit(key, undefined)\r\n } catch {}\r\n}\r\n\r\n/**\r\n * Helper function to migrate old value type to new one (eg. boolean to object)\r\n */\r\nexport function migrateValue(\r\n key: string,\r\n /**\r\n * The migrate function might get called multiple times on the page, so `oldValue` in the callback\r\n * can actually be the already migrated value. Make sure to add a condition to only migrate once.\r\n */\r\n transformValue: NewValue | ((oldValue: PrevValue | NewValue) => NewValue),\r\n defaultValue: NewValue\r\n) {\r\n try {\r\n const oldValue = getValue(key, undefined)\r\n if (typeof oldValue === 'undefined') return\r\n const migratedValue = transformValue instanceof Function ? transformValue(oldValue) : transformValue\r\n setValue(key, migratedValue, defaultValue, false) // don’t emit to other components\r\n } catch {}\r\n}\r\n","/**\r\n * Ignore any subsequent callback calls until the previous callback has finished\r\n */\r\n\r\nexport function waitForPreviousPromise(callback: () => void | Promise) {\r\n let callbackPromise: Promise | void | null = null\r\n\r\n return async function () {\r\n if (callbackPromise !== null) return\r\n\r\n callbackPromise = callback()\r\n await callbackPromise\r\n callbackPromise = null\r\n }\r\n}\r\n","/**\n * Copyright (c) 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\nmodule.exports.Dispatcher = require('./lib/Dispatcher')\n","/*\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Dispatcher\n * @typechecks\n */\n\n\"use strict\";\n\nvar invariant = require('./invariant');\n\nvar _lastID = 1;\nvar _prefix = 'ID_';\n\n/**\n * Dispatcher is used to broadcast payloads to registered callbacks. This is\n * different from generic pub-sub systems in two ways:\n *\n * 1) Callbacks are not subscribed to particular events. Every payload is\n * dispatched to every registered callback.\n * 2) Callbacks can be deferred in whole or part until other callbacks have\n * been executed.\n *\n * For example, consider this hypothetical flight destination form, which\n * selects a default city when a country is selected:\n *\n * var flightDispatcher = new Dispatcher();\n *\n * // Keeps track of which country is selected\n * var CountryStore = {country: null};\n *\n * // Keeps track of which city is selected\n * var CityStore = {city: null};\n *\n * // Keeps track of the base flight price of the selected city\n * var FlightPriceStore = {price: null}\n *\n * When a user changes the selected city, we dispatch the payload:\n *\n * flightDispatcher.dispatch({\n * actionType: 'city-update',\n * selectedCity: 'paris'\n * });\n *\n * This payload is digested by `CityStore`:\n *\n * flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'city-update') {\n * CityStore.city = payload.selectedCity;\n * }\n * });\n *\n * When the user selects a country, we dispatch the payload:\n *\n * flightDispatcher.dispatch({\n * actionType: 'country-update',\n * selectedCountry: 'australia'\n * });\n *\n * This payload is digested by both stores:\n *\n * CountryStore.dispatchToken = flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'country-update') {\n * CountryStore.country = payload.selectedCountry;\n * }\n * });\n *\n * When the callback to update `CountryStore` is registered, we save a reference\n * to the returned token. Using this token with `waitFor()`, we can guarantee\n * that `CountryStore` is updated before the callback that updates `CityStore`\n * needs to query its data.\n *\n * CityStore.dispatchToken = flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'country-update') {\n * // `CountryStore.country` may not be updated.\n * flightDispatcher.waitFor([CountryStore.dispatchToken]);\n * // `CountryStore.country` is now guaranteed to be updated.\n *\n * // Select the default city for the new country\n * CityStore.city = getDefaultCityForCountry(CountryStore.country);\n * }\n * });\n *\n * The usage of `waitFor()` can be chained, for example:\n *\n * FlightPriceStore.dispatchToken =\n * flightDispatcher.register(function(payload) {\n * switch (payload.actionType) {\n * case 'country-update':\n * flightDispatcher.waitFor([CityStore.dispatchToken]);\n * FlightPriceStore.price =\n * getFlightPriceStore(CountryStore.country, CityStore.city);\n * break;\n *\n * case 'city-update':\n * FlightPriceStore.price =\n * FlightPriceStore(CountryStore.country, CityStore.city);\n * break;\n * }\n * });\n *\n * The `country-update` payload will be guaranteed to invoke the stores'\n * registered callbacks in order: `CountryStore`, `CityStore`, then\n * `FlightPriceStore`.\n */\n\n function Dispatcher() {\n this.$Dispatcher_callbacks = {};\n this.$Dispatcher_isPending = {};\n this.$Dispatcher_isHandled = {};\n this.$Dispatcher_isDispatching = false;\n this.$Dispatcher_pendingPayload = null;\n }\n\n /**\n * Registers a callback to be invoked with every dispatched payload. Returns\n * a token that can be used with `waitFor()`.\n *\n * @param {function} callback\n * @return {string}\n */\n Dispatcher.prototype.register=function(callback) {\n var id = _prefix + _lastID++;\n this.$Dispatcher_callbacks[id] = callback;\n return id;\n };\n\n /**\n * Removes a callback based on its token.\n *\n * @param {string} id\n */\n Dispatcher.prototype.unregister=function(id) {\n invariant(\n this.$Dispatcher_callbacks[id],\n 'Dispatcher.unregister(...): `%s` does not map to a registered callback.',\n id\n );\n delete this.$Dispatcher_callbacks[id];\n };\n\n /**\n * Waits for the callbacks specified to be invoked before continuing execution\n * of the current callback. This method should only be used by a callback in\n * response to a dispatched payload.\n *\n * @param {array} ids\n */\n Dispatcher.prototype.waitFor=function(ids) {\n invariant(\n this.$Dispatcher_isDispatching,\n 'Dispatcher.waitFor(...): Must be invoked while dispatching.'\n );\n for (var ii = 0; ii < ids.length; ii++) {\n var id = ids[ii];\n if (this.$Dispatcher_isPending[id]) {\n invariant(\n this.$Dispatcher_isHandled[id],\n 'Dispatcher.waitFor(...): Circular dependency detected while ' +\n 'waiting for `%s`.',\n id\n );\n continue;\n }\n invariant(\n this.$Dispatcher_callbacks[id],\n 'Dispatcher.waitFor(...): `%s` does not map to a registered callback.',\n id\n );\n this.$Dispatcher_invokeCallback(id);\n }\n };\n\n /**\n * Dispatches a payload to all registered callbacks.\n *\n * @param {object} payload\n */\n Dispatcher.prototype.dispatch=function(payload) {\n invariant(\n !this.$Dispatcher_isDispatching,\n 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.'\n );\n this.$Dispatcher_startDispatching(payload);\n try {\n for (var id in this.$Dispatcher_callbacks) {\n if (this.$Dispatcher_isPending[id]) {\n continue;\n }\n this.$Dispatcher_invokeCallback(id);\n }\n } finally {\n this.$Dispatcher_stopDispatching();\n }\n };\n\n /**\n * Is this Dispatcher currently dispatching.\n *\n * @return {boolean}\n */\n Dispatcher.prototype.isDispatching=function() {\n return this.$Dispatcher_isDispatching;\n };\n\n /**\n * Call the callback stored with the given id. Also do some internal\n * bookkeeping.\n *\n * @param {string} id\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_invokeCallback=function(id) {\n this.$Dispatcher_isPending[id] = true;\n this.$Dispatcher_callbacks[id](this.$Dispatcher_pendingPayload);\n this.$Dispatcher_isHandled[id] = true;\n };\n\n /**\n * Set up bookkeeping needed when dispatching.\n *\n * @param {object} payload\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_startDispatching=function(payload) {\n for (var id in this.$Dispatcher_callbacks) {\n this.$Dispatcher_isPending[id] = false;\n this.$Dispatcher_isHandled[id] = false;\n }\n this.$Dispatcher_pendingPayload = payload;\n this.$Dispatcher_isDispatching = true;\n };\n\n /**\n * Clear bookkeeping used for dispatching.\n *\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_stopDispatching=function() {\n this.$Dispatcher_pendingPayload = null;\n this.$Dispatcher_isDispatching = false;\n };\n\n\nmodule.exports = Dispatcher;\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n\"use strict\";\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (false) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n 'Invariant Violation: ' +\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","/**\n * Copyright 2013-2014 Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n\"use strict\";\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n * var COLORS = keyMirror({blue: null, red: null});\n * var myColor = COLORS.blue;\n * var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n * Input: {key1: val1, key2: val2}\n * Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function(obj) {\n var ret = {};\n var key;\n if (!(obj instanceof Object && !Array.isArray(obj))) {\n throw new Error('keyMirror(...): Argument must be an object.');\n }\n for (key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n ret[key] = key;\n }\n return ret;\n};\n\nmodule.exports = keyMirror;\n"],"names":["module","exports","white","black","inherit","transparent","current","finviz","blue","gray","red","orange","amber","yellow","brightYellow","lime","green","emerald","teal","violet","purple","pink","MapSelectTheme","hasRedesign","FinvizSettings","hasRedesignEnabled","MapSelect","_ref","_props$rounding","_props$size","_props$listProps","label","ariaLabel","theme","items","onChange","props","selectTheme","React","dark","className","button","rounding","rightContent","_jsx","Icon","name","popover","light","classnames","getMapSelectTheme","_jsxs","children","Select","value","size","undefined","placeholder","defaultValue","listProps","classNames","getCurrentDateInMs","Date","valueOf","getIsDocumentVisible","document","visibilityState","hidden","notifyOnVisibilityChange","callback","promisifiedCallback","waitForPreviousPromise","addEventListener","unsubscribe","removeEventListener","intervalCallbackOnWindowVisible","interval","getInterval","refreshPromise","nextRefresh","refreshTimeout","async","refresh","window","setTimeout","Math","max","handleVisibilityChange","clearTimeout","currentDateMs","getTextFontFamily","redGreenGradient","colors","nullColor","greenRedGradient","slice","reverse","redGradient","greenGradient","redGreenGradientBubbles","gradients","ScaleId","DayPerf","_5","_10","_15","_20","_25","_relvol","_pe","_fpe","_peg","_ps","_pb","_div","_eps5y","_short","_rec","_earndate","_portfolioPct","_portfolioUsd","bubbleGradients","gradientSmall","loadImage","src","Promise","resolve","reject","image","Image","onload","onerror","getScaleRatio","_window$devicePixelRa","devicePixelRatio","retinafy","canvas","context","width","height","ratio","style","scale","GroupTheme","ButtonGroup","hasDivider","hasBorder","childComponent","buttonRounding","ButtonRounding","groupTheme","wrapper","divider","getGroupTheme","role","border","map","child","index","_child$props$rounding","_child$props$theme","Button","filter","Boolean","includes","type","ColorVariant","CheckboxSize","CheckboxComponent","ref","_props$checked","color","default","checked","defaultChecked","disabled","Checkbox","forwardRef","clamp","num","min","arguments","length","isTouch","event","getRelativePosition","node","rect","getBoundingClientRect","pointer","touches","left","pageX","pageXOffset","top","pageY","pageYOffset","preventDefaultMove","preventDefault","DraggablePickerComponent","onMove","onKey","container","useRef","hasTouched","isDragging","setDragging","useState","isValid","handleMove","useCallback","buttons","handleMoveStart","_ref2","nativeEvent","handleKeyDown","keyCode","which","handleMoveEnd","toggleDocumentEvents","state","toggleEvent","useLayoutEffect","onTouchStart","onMouseDown","onKeyDown","tabIndex","DraggablePicker","memo","Pointer","concat","backgroundColor","hexStringToRGBA","hexString","hexColor","removeHashSymbol","r","g","b","a","Number","round","hexStringToHSVA","rgbaToHSVA","alphaToHex","alpha","toString","padStart","rgbaToHexString","hsvaToHEXString","hsvaToRGBA","v","c","h","s","f","n","k","rgbaToRGBAString","rgbaStringToObject","colorParts","exec","String","parseInt","parseFloat","strColor","replace","isValidColor","isRgb","startsWith","Option","convertColorToHEX","getIsRgb","rgbKeys","push","some","getHSVAFromColor","Alpha","changeLightness","pos","gradientPreview","useMemo","gradientFrom","gradientTo","backgroundImage","DEFAULT_COLORS","title","ColorPalette","lowerCaseColor","toLowerCase","colorObj","isSelected","onClick","HueSaturation","position","getPositionFromHSLA","colorPreview","changeSaturation","Lightness","ColorPreview","icon","Array","isArray","isTooLight","getLumaFromRGBA","getIsColorTooLightOrTransparent","isValidIconName","PickerInput","inputClass","hasColorPreview","colorInput","setColorInput","colorUtil","isRgba","useEffect","handleColorInputChange","currentTarget","colorValue","Input","leftContent","ColorPicker","canSelectCustom","canSelectAlpha","outputFormat","onPaletteItemClick","cachedColor","hsvaColor","setColor","currentColor","newColor","onChangeCallback","stringColor","output","onSetCustomCodeClick","_prompt","prompt","trim","alert","_Fragment","isMobile","contentClass","_hex","orignalColor","InputColorPicker","inputDataTestId","popoverState","usePopoverState","isMobileDevice","PopoverTrigger","as","onBlur","hide","Popover","focusOnShow","MultiColorPicker","colorInputLabel","ColorTabButton","small","ButtonColorPicker","_ref3","buttonPickerDataTestId","hideOnClickOutside","onOverlayClick","isMultiPicker","activeColorIndex","setActiveColorIndex","handleColorChange","originalColor","colorObject","appearance","active","visible","_ref4","_ref5","CopyToClipboard","text","bottomLeftContent","isCopied","setIsCopied","handleCopyToClipboard","copy","timeout","resetTimer","Textarea","readOnly","e","select","DatePickerComponent","StatelessDatePicker","zIndex","isFullyClosed","getExtendedDialogState","triggerProps","ZIndexContext","Provider","fallback","Box","Spinner","locale","minDetail","ev","_props$onChange","call","DatePicker","DropdownContext","useDropdownState","settings","_settings$unstable_of","Reakit","loop","animated","COMPONENT_ANIMATION_DURATION","unstable_virtual","unstable_offset","root","modal","DropdownComponent","isNested","isStatic","useZIndex","dropdownState","animating","Error","ContainerElement","Portal","buttonProps","_label$props$active","_context$root","onTransitionEnd","onAnimationEnd","innerProps","parent","placement","orientation","Dropdown","NestedDropdownWrapper","parentState","itemProps","DropdownItemComponent","asComponent","subtitle","closeOnClick","hasSubmenu","iconTheme","align","_itemProps$onClick","DropdownItem","DropdownSeparator","Paragraph","DEFAULT_OFFSETS","ContextMenu","menuMaxHeight","popperElement","setPopperElement","virtualRef","scrollY","x","scrollX","y","bottom","right","toJSON","getVirtualRef","hasBeenOpen","styles","attributes","usePopper","modifiers","options","offset","show","popper","ContextMenuDropdown","ContextMenuInner","MAX_SAFE_INTEGER","innerState","maxHeightStyle","usePopoverMaxHeight","maxHeightLimit","hasViewportHeightLimit","offsets","item","id","_item$onClick","_window$gtag","_window","gtag","Object","assign","menu_option","ChartGridCell","gridArea","GridLayout","columns","rows","gridTemplateColumns","gridTemplateRows","ChartGrid","defaultValueAccessor","data","InnerState","valueKey","changeKey","valueAccessor","setState","handleChange","RangeSize","RangeSlider","step","inputClassName","hasTrack","setHasTrack","trackRef","thumbRef","thumbLeft","track","thumb","valuePercent","trackBox","thumbBox","Label","ToolbarTheme","ToolbarDirection","ToolbarContext","direction","vertical","chipTransparent","isWrapped","isStretched","useToolbarContext","getToolbarSettings","horizontal","alternative","Toolbar","toolbarRef","contextProviderValue","toolbarSettings","isSafariDesktop","forceReflow","throttle","originalWidth","offsetWidth","ToolbarButton","_props$appearance","_buttonSettings$size","_props$children","disabledTooltip","isInAction","isInActionProp","isLoading","iconAction","buttonSettings","isActive","includeRedesign","grow","getButtonThemeSettings","getMainIcon","iconActive","titleActive","Delayed","delay","delayComponent","ToolbarGroup","_groupItems$map","defaultItem","groupItems","groupTitle","useNativeSelect","listState","useListState","currentId","selectedItem","setSelectedItem","groupId","toLocaleLowerCase","isAlternativeTheme","useHoverPopover","useList","i","option","findIndex","stopPropagation","NativeSelect","finalFocusRef","body","hasBackdrop","List","onItemChange","ListItem","ToolbarItem","isItemActive","ToolbarDivider","StepContent","Heading","level","shepherdLibrary","loadShepherdLibrary","setLoading","shepherdPromise","buttonClasses","BUTTON_BASE_CLASS","BUTTON_FOCUS_STYLES","ButtonSize","regular","getStepButtons","tour","arr","_step$backButton","_step$nextButton","action","complete","classes","getButtonTheme","ButtonTheme","ButtonPadding","back","backButton","next","nextButton","getTourKey","location","pathname","getStepsForUser","tours","_localStorage","lastFinishedTour","localStorage","getItem","lastTourIndex","allToursViewed","every","skip","toursToView","hasNewTours","reduce","acc","steps","initialTour","completeTour","key","_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","forEach","removeStep","processedSteps","_step$placement","_step$offset","_step$overlayRadius","_step$overlayPadding","attachTo","element","target","on","popperOptions","ReactDOM","modalOverlayOpeningRadius","overlayRadius","modalOverlayOpeningPadding","overlayPadding","addSteps","start","event_label","TabSpacing","InternalTab","ariaSelected","spacing","content","Tab","Ariakit","render","TabList","TabPanel","Tabs","BadgeSize","BadgePadding","Badge","padding","badgePadding","badgeSize","focusOnHide","hasArrow","popoverWrapperStyle","popoverMaxHeight","hasButtonWidthLimit","innerHeight","useWindowSize","isWatching","buttonElement","unstable_referenceRef","buttonRect","popoverId","getAttribute","popoverWrapper","getElementById","setProperty","unstable_autoFocusOnShow","unstable_autoFocusOnHide","unstable_finalFocusRef","TooltipArrow","BoxTheme","DEFAULT_OFFSET","HOVER_TIMEOUT","_settings$placement","showTimeout","hideTimeout","clearTimeouts","showPopover","hidePopover","onMouseOver","onMouseOut","_props$as","showPlaceholder","handleNativeSelectChange","_selectedItem$href$se","_selectedItem$href$ha","itemIndex","selectedIndex","flattenItems","href","reloadDocument","newUrl","URL","search","hash","isSelectItemGroup","optionIndex","NativeSelectInRouterContext","navigate","useNavigate","onChangeWithNavigate","ItemsGroup","getDefaultTheme","isHovered","InternalOption","_props$active","dataActiveItem","activeTheme","defaultTheme","SelectOption","isComboBox","combobox","SelectItemsVirtualized","SelectRenderer","itemSize","hasGroups","overscan","groupOritem","restProps","isSelectItem","itemRenderer","paddingStart","paddingEnd","rendererProps","restItem","SelectItems","searchValue","parentTestId","virtualized","isInRouterContext","useInRouterContext","filteredItems","filterSelectOptions","innerItem","providedProps","getSelectItemProps","truncate","ListRounding","ListTheme","focusWithoutScroll","focus","preventScroll","onBackdropClick","SelectList","gutter","unmountOnHide","hasItemChildren","ListElement","wrapperProps","hasChildren","count","preventBodyScroll","autoFocusOnHide","backdrop","none","autoSelect","SelectTooltip","tooltipState","useTooltipState","isSelectOpen","hasShownTooltip","subscription","TooltipTrigger","focusable","onFocusVisible","Tooltip","SelectTooltipWrapper","getCollectionItem","DesktopSelect","_items$length","_listProps$unmountOnH","trigger","tooltip","onInteractionChange","comboBox","onSearch","internalSearch","setInternalSearch","SelectWrapper","resetValueOnHide","includesBaseElement","setValue","ButtonWrapper","buttonWrapperProps","console","warn","listItems","focusLoop","virtualFocus","setOpen","defaultItems","DEFAULT_RIGHT_ICON","SelectButton","_selectedValue$label","valueOverride","contextValue","isOpen","selectedValue","buttonText","rightIcon","xxsmall","_findSelectedValue","_findSelectedValue2","providedValue","providedDefaultValue","triggerContent","isInteractive","nativeSelect","dataTestid","findSelectedValue","selectTrigger","NativeSelectComponent","findSelectedIndex","inRouterContext","Link","to","hasOwnProperty","matchesSearchTerm","searchTerm","lowerSearch","isSameItem","obj1","obj2","finalResults","filtered","foundItem","find","flatMap","itemOrGroup","DATERANGE_TOOLTIP","DateRangeSelect","chartIndex","dateRangeGroups","selectedDateRange","onDateRangeSelect","onCustomDateRangeClick","flatDateRanges","dateRanges","withReload","timeframe","linkProps","hasUserPremium","_createElement","LabelWithDelayedSpinner","invisible","TIMEFRAME_TOOLTIP","TimeframeSelect","timeFrameGroups","selectedTimeframe","favoriteTimeframes","isCompactView","isCompactOnly","onTimeframeSelect","onFavoriteTimeframeToggle","isFavoritesEnabled","flatTimeframes","timeframes","getSelectedTimeframeLabel","_selectedTimeframeIte","selectedTimeframeItem","labelShort","groupIndex","isIconButtonActive","getTimeframeChipElementId","getButtonPadding","xsmall","medium","large","TimeframeBar","isPremium","compactViewMaxBreakpointPx","loadingTimeframe","isDateRangeAvailable","containerElement","isScrollIntoViewEnabled","isTimeframeSelectEnabled","scrollWrapperElement","setScrollWrapperElement","timeframeButtonsScrollLocation","setTimeframeButtonsScrollLocation","isOnLeftEdge","isOnRightEdge","setElementRef","elementWidth","useElementMeasure","timeframesInExpandedPanel","checkTimeframeWrapperScrollPosition","scrollLeft","ceil","scrollWidth","timeframeElement","leftOffset","offsetLeft","clientWidth","scrollTo","onScroll","onWheel","absDx","abs","deltaX","deltaY","_timeframe$withReload","generateTimeframeGroups","premiumTimeframes","TIMEFRAME","i1","i2","i3","i5","i10","i15","i30","labelPageTitle","h2","h4","d","w","m","freeTimeframes","getTimeframeGroups","generateDateRangeGroups","instrument","isStock","Instrument","Stock","DateRangeType","d1","d5","m1","m3","m6","ytd","y1","y2","y5","getDateRangeGroups","customRange","isCustomAvailable","rangeGroups","_customRange$split","dateRangePrefix","split","DATE_RANGE_PREFIX_DELMITER","values","CustomDateRangePrefixEnum","CUSTOM_DATE_RANGE","getDateRangeGroupsWithHref","generatePath","dateRangeGroup","dateRange","FREE_PERIODS_STOCK","generatePathForTimeframeDateRange","utmCampaign","dateRangeQueryKey","encodeQueryString","decodeQueryString","p","utm_source","utm_medium","utm_campaign","timeframeUtm","SpecificChartFunctionality","quotePage","futuresPage","forexPage","cryptoPage","daterangeUtm","CUSTOM_DATE_RANGE_DELIMITER","CUSTOM_PREV_RANGE_DELIMITER","getParsedDateRange","_dateRange$split","parseCustomDateRangeUrlParam","anchorDate","dateRangeValue","Range","dateFromString","dateToString","dateFrom","dateTo","isNaN","getTime","end","dateFns","Prev","years","months","days","DAYS_IN_YEAR","getTimeframeFromDateRange","_ref7","dateRangeTimeframe","_dateRanges$find$time","_dateRanges$find","_ref6","getTimeframeForDateRangeType","startNyTime","startToReferenceDateNumOfDays","rangeNumOfDays","DATE_PICKER_MIN_DATE","YEARS_MAX_VALUE","getFullYear","TAB_BUTTON_COMMON_PROPS","CustomRangeType","DEFAULT_MANUAL_RANGE","kind","Manual","DEFAULT_START_END_RANGE","StartEnd","CustomDateRange","dialogState","onDialogSubmit","isFetching","selectedTab","setSelectedTab","getDefaultSelectedTab","getDefaultSelectedDate","newValue","prevState","newState","newEnd","isAbsolute","fromDate","toDate","manualRange","Dialog","DialogHeader","onSubmit","isValidStartEndRangeState","startString","formatDateToStringUS","endString","join","getCustomStartEndDateRangeUrlParam","isValidManualRangeState","_state$days","_state$months","_state$years","getPrevPeriodDateRangeUrlParam","DialogBody","minDate","DialogFooter","DialogDismiss","useCustomDateRangeDialog","pathGenerator","shouldReloadOnNavigate","customDateRangeDialogState","useDialogState","handleDateRangeSelect","path","getDateRangeTimeframe","newTimeframe","TIMEFRAME_FAVORITE_DEFAULTS","TIMEFRAME_FAVORITE_DEFAULTS_FREE","intraday","LOCAL_STORAGE_KEY","useFavoriteTimeframes","storageKey","storage","valueGetter","useSyncLocalStorage","toggleFavoriteTimeframe","keys","TooltipInputWrapper","tooltipSettings","isHideOnClickOutside","onFocus","_children$props$onFoc","_children$props","_children$props$onBlu","_children$props2","hideOnHoverOutside","TooltipInputComponent","input","TooltipInput","MAX_HEIGHT_PROPERTY","POPOVER_HEIGHT_LIMIT_STYLE","maxHeight","offsetY","elementMaxHeight","throttleWaitInMs","setSize","innerWidth","handleResize","cancel","emitter","subscribeToChanges","changeCallback","EventEmitter","getValue","onStorageChange","JSON","parse","addListener","_emitter","removeListener","parsedValue","emit","_emitter2","valueToStore","Function","stringify","removeValue","_emitter3","removeItem","migrateValue","transformValue","oldValue","callbackPromise","Dispatcher","invariant","_lastID","this","$Dispatcher_callbacks","$Dispatcher_isPending","$Dispatcher_isHandled","$Dispatcher_isDispatching","$Dispatcher_pendingPayload","prototype","register","unregister","waitFor","ids","ii","$Dispatcher_invokeCallback","dispatch","payload","$Dispatcher_startDispatching","$Dispatcher_stopDispatching","isDispatching","condition","format","error","args","argIndex","framesToPop","exportName","VENDOR_PREFIXES","TEST_ELEMENT","createElement","TYPE_FUNCTION","now","setTimeoutContext","fn","bindFn","invokeArrayArg","arg","each","obj","iterator","deprecate","method","message","deprecationMessage","stack","log","apply","TypeError","source","nextKey","extend","dest","merge","base","properties","childP","baseP","create","constructor","_super","boolOrFn","val","ifUndefined","val1","val2","addEventListeners","types","handler","splitStr","removeEventListeners","hasParent","parentNode","inStr","str","indexOf","inArray","findByKey","toArray","uniqueArray","sort","results","prefixed","property","prefix","prop","camelProp","toUpperCase","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","test","navigator","userAgent","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","COMPUTE_INTERVAL","INPUT_START","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","manager","self","inputTarget","domHandler","enable","init","inputHandler","eventType","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offsetDelta","prevDelta","prevInput","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","last","lastInterval","computeIntervalInputData","srcEvent","computeInputData","recognize","clientX","clientY","p1","p2","sqrt","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","MouseInput","pressed","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","storeIndex","pointerId","splice","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SingleTouchInput","started","normalizeSingleTouches","all","changed","changedTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","TouchInput","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","touch","DEDUP_TIMEOUT","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","t","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","set","compute","actions","update","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_POSSIBLE","STATE_FAILED","Recognizer","defaults","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","get","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","threshold","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","add","stop","force","stopped","curRecognizer","existing","remove","events","off","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","INPUT_MOVE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","Tap","Pan","Swipe","Pinch","Rotate","Press","ret"],"sourceRoot":""}