{"version":3,"file":"5909.583a1945.js","mappings":"ojDAOA,MACMA,EAAyD,CAAC,EAiBhE,MAAMC,UAAwBC,EAAAA,UAAgCC,WAAAA,GAAA,SAAAC,WAAAC,EAAA,eAKlCC,EAAAA,EAAAA,cAA8BD,EAAA,2BAyB1BE,IAC5B,MAAM,YAAEC,EAAW,MAAEC,EAAK,OAAEC,EAAM,gBAAEC,GAAoBC,KAAKC,MACvDC,EAAOC,OAAOD,KAAKN,GACzBM,EAAKE,SAAQ,CAACC,EAAKC,KACjB,MAAMC,EAAOX,EAAYS,GAEnBG,EADUR,KAAKS,cAAcC,YAAYH,GACrBV,MAC1B,IAAIc,EAAOhB,EAAEiB,OAAOP,IAEpB,GAAIC,IAAUJ,EAAKW,OAAS,EAAG,CAC7B,MAAMC,KAAgBjB,EAAQW,EAAY,GAE1C,GAAIT,EACFY,EAAOI,KAAKC,IAAIF,EA7DC,EA6DgCH,QAC5C,GAAIA,EAAOG,EAChB,MAEJ,MAAO,GAAc,IAAVR,EAAa,CACtB,MAAMW,KAAeT,EAAY,GAEjC,GAAIT,EACFY,EAAOI,KAAKG,IAAID,EArEC,EAqE+BN,QAC3C,GAAIA,EAAOM,EAChB,MAEJ,CAEAjB,KAAKS,cAAcU,SAASZ,EAAMI,EAAMb,EAAS,EAAE,GACnD,IACHL,EAAA,sBAEuB,KACtB,MAAM,KAAE2B,EAAI,MAAEvB,EAAK,OAAEC,EAAM,cAAEuB,EAAa,OAAEC,EAAM,UAAEC,EAAS,UAAEC,EAAS,aAAEC,EAAY,OAAEC,GAAW1B,KAAKC,OAExG0B,EAAAA,EAAAA,GAAS3B,KAAK4B,OAAOC,QAAS7B,KAAKS,cAAeZ,EAAOC,GAGzD,MAAMgC,EAAY,GAAGjC,KAASuB,EAAKP,SACnC,IAAIlB,EAAIP,EAAO0C,GACVnC,IACHA,EAAIoC,EAAAA,MAEDC,MAAM,EAAE,EAAGnC,EAAQ,IACnBoC,OAAO,CAAC,EAAGb,EAAKP,SACnBzB,EAAO0C,GAAanC,GAGtB,MAAMuC,EAAIH,EAAAA,MAEPC,MAAM,CAAClC,EAAS,EAAG,IACnBmC,OAAOF,EAAAA,IAAUX,GAAOe,GAAMA,KAE3BC,EAAgBrB,KAAKC,IAAID,KAAKsB,IAAIX,GAASD,GAC3Ca,EAAcjB,GAAiB,GAAO,GAAMI,EAAgBW,GAAeG,QAAQ,GAAK,EAI9F,GAFAvC,KAAKS,cAAc+B,UAAU,EAAG,EAAG3C,EAAOC,GAEtCwB,EAAQ,CACVtB,KAAKS,cAAcgC,UAAU,GAAK,IAElCzC,KAAKS,cAAciC,YAAc,wBACjC1C,KAAKS,cAAckC,YACnB,IAAK,IAAIC,EAAI,EAAGA,EAAIxB,EAAKP,OAAQ+B,IAC/B5C,KAAKS,cAAcoC,OAAOlD,EAAEiD,GAAIV,EAAEd,EAAKwB,KAEzC5C,KAAKS,cAAcqC,SAEnB9C,KAAKS,cAAcsC,UAAY,wBAC/B/C,KAAKS,cAAcuC,UAAY,SAC/BhD,KAAKS,cAAcwC,KAAO,WAC1BjD,KAAKkD,mBAAmBvD,GAExBK,KAAKS,cAAcgC,WAAW,IAAM,GACtC,CAEAzC,KAAKS,cAAciC,YAAcnB,QAAAA,EAAa,uBAAuBe,KACrEtC,KAAKS,cAAckC,YACnB,IAAK,IAAIC,EAAI,EAAGA,EAAIxB,EAAKP,OAAQ+B,IAC/B5C,KAAKS,cAAcoC,OAAOlD,EAAEiD,GAAIV,EAAEd,EAAKwB,KAEzC5C,KAAKS,cAAcqC,SAEnB9C,KAAKS,cAAcsC,UAAYvB,QAAAA,EAAa,uBAAuBc,KACnEtC,KAAKS,cAAcuC,UAAY,SAC/BhD,KAAKS,cAAcwC,KAAO,WAC1BjD,KAAKkD,mBAAmBvD,EAAE,GAC3B,CA5GDwD,qBAAAA,CAAsBC,GAEpB,OAAOA,EAAUhC,MAAQpB,KAAKC,MAAMmB,MAAQgC,EAAUvD,QAAUG,KAAKC,MAAMJ,KAC7E,CAEAwD,iBAAAA,GACErD,KAAKS,cAAgBT,KAAK4B,OAAOC,QAASyB,WACxC,MACAC,EAAAA,EAAAA,MAAqB,CAAEC,oBAAoB,QAASC,GAEtDzD,KAAK0D,eACP,CAEAC,kBAAAA,GACE3D,KAAK0D,eACP,CAEAE,MAAAA,GACE,MAAM,MAAE/D,EAAK,OAAEC,EAAM,UAAE+D,GAAc7D,KAAKC,MAC1C,OAAO6D,EAAAA,EAAAA,KAAA,UAAQD,UAAWE,IAAW,YAAaF,GAAYhE,MAAOA,EAAOC,OAAQA,EAAQkE,IAAKhE,KAAK4B,QACxG,EAyFDnC,EArHKJ,EAAe,eACG,CACpBgC,eAAe,IAqHnB,S,mEC9IO,MAAM4C,EAAcC,IAAU,CACnCC,KAAM,KACNC,WAAY,KAEZC,YAAa,KAEbC,yBAA0B,KAC1BC,2BAA4B,KAC5BC,wBAAyB,OAGdC,EAAiBP,IAAU,CACtCQ,cAAe,KACfC,YAAa,M,6DCXf,MAAMC,UAAsBC,EAAAA,WAC1BC,kBAAAA,CAAmBC,GACjB,IAAIC,EAAU,CACZC,OAAQR,EAAAA,EAAeC,cACvBK,OAAQA,GAGV/E,KAAKkF,SAASF,EAChB,CAEAG,gBAAAA,CAAiBJ,GACf,IAAIC,EAAU,CACZC,OAAQR,EAAAA,EAAeE,YACvBI,OAAQA,GAGV/E,KAAKkF,SAASF,EAChB,EAGF,MACA,EADmB,IAAIJ,C,wECnBvB,SAASQ,EAAQC,GACf,OAAOlF,OAAOmF,OAAOD,GAClBE,KAAI,SAAUC,GACb,MAAO,CACLC,MAAOD,EAAKC,MACZC,MAAOF,EAAK9D,OAEhB,IACCiE,MAAK,SAAUC,EAAGC,GACjB,OAAOA,EAAEH,MAAQE,EAAEF,KACrB,GACJ,CAEA,IAAII,EAAa,KACbC,EAAoC,GACxC,MAAMC,UAAkBC,EAAAA,EACtBC,YAAAA,GACE,OAAOJ,CACT,CAEAV,OAAAA,GACE,OAAOW,CACT,EAEF,IAAII,EAAY,IAAIH,EAGpBG,EAAUC,cAAgBxB,EAAAA,EAAcyB,UAAS,SAAUrB,GACzD,IAAID,EAASC,EAAQD,OAErB,OAAQA,EAAOuB,MACb,KAAKrC,EAAAA,EAAYE,KACf,IAAIoC,EAAsC,CAAC,EAC3CxB,EAAOyB,KAAKpG,SAASqG,IACnBA,EAAMC,UAAUtG,SAASuG,IACvBJ,EAAOI,EAASC,QAAUD,CAAQ,GAClC,IAGJZ,EAAQX,EAAQmB,GACZxB,EAAO8B,YACTf,EAAaf,EAAO8B,WAEtBV,EAAUW,aACV,MAEF,KAAK7C,EAAAA,EAAYK,yBACfwB,EAAaf,EAAOgC,OACpBZ,EAAUW,aACV,MAEF,KAAK7C,EAAAA,EAAYI,YACf0B,EAAQX,EAAQL,EAAOM,OACvBc,EAAUW,aAGhB,IAEA,S,iEC7DA,MAAMb,UAAce,EAAAA,aAGlBF,UAAAA,GACE9G,KAAKiH,KAAKhB,EAAMiB,aAClB,CAEAC,iBAAAA,CAAkBC,GAChBpH,KAAKqH,GAAGpB,EAAMiB,aAAcE,EAC9B,CAEAE,oBAAAA,CAAqBF,GACnBpH,KAAKuH,eAAetB,EAAMiB,aAAcE,EAC1C,E,EAbInB,E,EACkB,U,sUADb,mB,wFAgBX,S,iFCbIuB,EAAuC,CAAC,EACxCjB,EAAsC,CAAC,EACvCkB,EAAuB,GAC3B,MAAMC,UAAmBzB,EAAAA,EACvB0B,QAAAA,GACE,OAAOpB,CACT,CAEAqB,YAAAA,GACE,OAAOzH,OAAOD,KAAKqG,GAChBhB,KAAI,SAAUlF,GACb,OAAOkG,EAAOlG,EAChB,IACCsF,MAAK,CAACC,EAAGC,IAAM4B,EAAWI,QAAQjC,EAAEgB,QAAUa,EAAWI,QAAQhC,EAAEe,SACxE,CAEAkB,OAAAA,CAAQlB,GACN,OAAOL,EAAOK,EAChB,CAEAmB,aAAAA,CAAcnB,GACZ,OAAOY,EAAaZ,EACtB,CAEAoB,eAAAA,CAAgBvB,GACd,IAAIwB,EAAIxB,EAAMyB,cACd,OAAOlI,KAAK4H,eAAeO,QAAQ3C,GAASgC,EAAahC,EAAKoB,UAAYqB,GAC5E,EAEF,IAAIG,EAAa,IAAIV,EACrBU,EAAWC,gBAAgB,IAG3BD,EAAWhC,cAAgBxB,EAAAA,EAAcyB,UAAS,SAAUrB,GAC1D,IAAID,EAASC,EAAQD,OAErB,OAAQA,EAAOuB,MACb,KAAKrC,EAAAA,EAAYE,KACFY,EAAOyB,KACbpG,SAASqG,IACdA,EAAMC,UAAUtG,SAASuG,IACvBJ,EAAOI,EAASC,QAAUD,EAC1Ba,EAAab,EAASC,QAAUH,EAAMG,OACtCa,EAAWa,KAAK3B,EAASC,OAAO,GAChC,IAEJwB,EAAWtB,aACX,MAEF,KAAK7C,EAAAA,EAAYG,WACfmC,EAASxB,EAAOM,MAChB+C,EAAWtB,aACX,MAEF,KAAK7C,EAAAA,EAAYI,YACf,IAAIgB,EAAQN,EAAOM,MACnBkB,EAASlB,EACT+C,EAAWtB,aAGjB,IAEA,S,wEC9BO,IAAKyB,EAAQ,SAARA,GAAQ,OAARA,EAAQ,gBAARA,EAAQ,0BAARA,EAAQ,gBAARA,CAAQ,MAMRC,EAAgB,SAAhBA,GAAgB,OAAhBA,EAAgB,UAAhBA,EAAgB,aAAhBA,EAAgB,WAAhBA,EAAgB,UAAhBA,EAAgB,WAAhBA,EAAgB,YAAhBA,CAAgB,MAShBC,EAAU,SAAVA,GAAU,OAAVA,EAAU,UAAVA,EAAU,oBAAVA,EAAU,uBAAVA,CAAU,MAMVC,EAAU,SAAVA,GAAU,OAAVA,EAAU,YAAVA,EAAU,cAAVA,EAAU,yBAAVA,EAAU,YAAVA,EAAU,uBAAVA,EAAU,YAAVA,EAAU,gCAAVA,CAAU,MAUVC,EAAS,SAATA,GAAS,OAATA,EAAS,UAATA,EAAS,4BAATA,EAAS,wBAATA,CAAS,K,2IClEjBC,EAAmB,CACrBC,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,WAEFC,UAAW,WAGTC,EAAiB,CACnB5G,EAAG,IACH6G,EAAG,IACHC,EAAG,EACHC,IAAK,EACLC,EAAG,GACHC,GAAI,GACJlH,EAAG,GACHmH,IAAK,IAGHC,EAAe,CACjBnH,EAAG,EACH6G,EAAG,IACHC,EAAG,EACHC,IAAK,EACLC,EAAG,GACHC,GAAI,GACJlH,EAAG,GACHmH,IAAK,IAGHE,EAAgB,CAClBpH,EAAG,EACH6G,EAAG,IACHC,EAAG,EACHC,IAAK,EACLC,EAAG,GACHC,GAAI,GACJlH,EAAG,GACHmH,IAAK,IAGHG,EAAqB,SAAUC,EAAiCC,GAA+C,IAA7BC,EAAQnK,UAAAqB,OAAA,QAAA4C,IAAAjE,UAAA,GAAAA,UAAA,GAAGoJ,EAC/F,IAAI3G,EAAS,CACXjB,KAAMyI,EAAQC,GACdxI,KAAMuI,EAAQC,IAGZE,EAAc7H,EAAAA,MAEfE,OAAO,CAACA,EAAOjB,IAAKiB,EAAOf,MAC3Bc,MAAM,CAAC,EAAG2H,EAASd,OAAOhI,OAAS,IAEtC,OAAO,SAAU6E,GACf,GAAI,MAAOA,EACT,OAAOiE,EAASb,UAGdpD,EAAQzD,EAAOf,MAAKwE,EAAQzD,EAAOf,KACnCwE,EAAQzD,EAAOjB,MAAK0E,EAAQzD,EAAOj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,GAAMC,WAE1CT,EAAW,CACb,MAAMU,EAAOT,eAAeS,KAC5BC,EAAAA,GAAAA,sBAAgC5B,EAAQiB,EAAWU,EAAO,CAAEA,aAASvQ,EACvE,CAEA,OAAO4O,CACT,C,8ECNA,MAoBazJ,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,WAEPoL,EAAmB,CAAErL,OAAQD,EAAiBC,OAAOsL,QAAQC,UAAWtL,UAAWF,EAAiBE,WACpGuL,EAAc,CAAExL,OAAQD,EAAiBC,OAAOsL,MAAM,EAAG,IAAIC,UAAWtL,UAAWF,EAAiBE,WACpGwL,EAAgB,CAAEzL,OAAQD,EAAiBC,OAAOsL,MAAM,IAAKrL,UAAWF,EAAiBE,WA49DzFyL,EAA0B,CAC9B1L,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/BA0L,EAAiD,CAC5D,CAACC,EAAAA,GAAQC,iBAAkB9L,EAC3B,CAAC6L,EAAAA,GAAQE,SAAU/L,EACnBgM,GAAIhM,EACJiM,IAAKjM,EACLkM,IAAKlM,EACLmM,IAAKnM,EACLoM,IAAKpM,EACLqM,QA97HmB,CACnBpM,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,WAo9FXoM,IAAKhB,EACLiB,KAAMjB,EACNkB,KAAMlB,EACNmB,IAAKnB,EACLoB,IAAKpB,EACLqB,KAAMjB,EACNkB,OAAQ5M,EACR6M,OAAQpB,EACRqB,KAAM9M,EACN+M,UA39FuB,CACvB9M,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,WAi/DX8M,cAAehN,EACfiN,cAAejN,EACfkN,gBAAiBlN,GAGNmN,EAAuD,CAClE,CAACtB,EAAAA,GAAQC,iBAAkBH,EAC3B,CAACE,EAAAA,GAAQE,SAAUJ,EACnBK,GAAIL,EACJM,IAAKN,EACLO,IAAKP,EACLQ,IAAKR,EACLS,IAAKT,EACLU,QA9gC0B,CAC1BpM,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,QAoCXoM,IAAKX,EACLY,KAAMZ,EACNa,KAAMb,EACNc,IAAKd,EACLe,IAAKf,EACLgB,KAAMhB,EACNiB,OAAQjB,EACRkB,OAAQlB,EACRmB,KAAMnB,EACNoB,UAAWpB,EACXqB,cAAerB,EACfsB,cAAetB,EACfuB,gBAAiBvB,GAGNyB,EA3iIiB,CAC5BnN,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFC,UAAW,U,yGCrBb,MAAMmN,EACJ,mIAEK,SAASC,EACdtP,GAIQ,IAAAuP,EAAAC,EAAAC,EAAA,IAHRC,EAAgB9W,UAAAqB,OAAA,QAAA4C,IAAAjE,U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","sources":["webpack://@finviz/website/./js/app/futures/components/CanvasSparkline.tsx","webpack://@finviz/website/./js/app/futures/constants/constants.ts","webpack://@finviz/website/./js/app/futures/dispatcher/appDispatcher.ts","webpack://@finviz/website/./js/app/futures/stores/rowsStore.ts","webpack://@finviz/website/./js/app/futures/stores/store.ts","webpack://@finviz/website/./js/app/futures/stores/tilesStore.ts","webpack://@finviz/website/./js/app/futures/types.ts","webpack://@finviz/website/./js/app/futures/utils.tsx","webpack://@finviz/website/./js/app/shared/components/ForexFuturesCryptoSettings.tsx","webpack://@finviz/website/./js/app/shared/components/FuturesForexCryptoTimeframeBar.tsx","webpack://@finviz/website/./js/app/shared/components/ResizableChartLayoutWithGlobalState.tsx","webpack://@finviz/website/./js/app/shared/components/Sparkline.tsx","webpack://@finviz/website/./js/app/shared/getInitChartConfig.ts","webpack://@finviz/website/./js/app/shared/gradients.ts","webpack://@finviz/website/./js/app/shared/hover-chart.ts","webpack://@finviz/website/./js/app/shared/retinafy.ts","webpack://@finviz/website/./js/app/shared/tracking.ts","webpack://@finviz/website/./js/main/components/button-switch/button-switch.tsx","webpack://@finviz/website/./js/main/components/checkbox.tsx","webpack://@finviz/website/./js/main/components/color-picker/draggable.tsx","webpack://@finviz/website/./js/main/components/color-picker/pointer.tsx","webpack://@finviz/website/./js/main/components/color-picker/util.ts","webpack://@finviz/website/./js/main/components/color-picker/alpha.tsx","webpack://@finviz/website/./js/main/components/color-picker/color-palette.tsx","webpack://@finviz/website/./js/main/components/color-picker/hue-saturation.tsx","webpack://@finviz/website/./js/main/components/color-picker/lightness.tsx","webpack://@finviz/website/./js/main/components/color-picker/color-preview.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker-input.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker.tsx","webpack://@finviz/website/./js/main/components/color-picker/picker-button.tsx","webpack://@finviz/website/./js/main/components/copy-to-clipboard/copy-to-clipboard.tsx","webpack://@finviz/website/./js/main/components/dropdown/dropdown.tsx","webpack://@finviz/website/./js/main/components/dropdown/dropdown-item.tsx","webpack://@finviz/website/./js/main/components/dropdown/hooks.ts","webpack://@finviz/website/./js/main/components/context-menu/utils.ts","webpack://@finviz/website/./js/main/components/context-menu/context-menu.tsx","webpack://@finviz/website/./js/main/components/grid/grid.tsx","webpack://@finviz/website/./js/main/components/inner-state/inner-state.tsx","webpack://@finviz/website/./js/main/components/range.tsx","webpack://@finviz/website/./js/main/components/toolbar/interfaces.ts","webpack://@finviz/website/./js/main/components/toolbar/hooks.ts","webpack://@finviz/website/./js/main/components/toolbar/toolbar.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-button.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-group.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-item.tsx","webpack://@finviz/website/./js/main/components/toolbar/toolbar-divider.tsx","webpack://@finviz/website/./js/main/components/tour/step-content.tsx","webpack://@finviz/website/./js/main/components/tour/utils.ts","webpack://@finviz/website/./js/main/components/tour/hooks.tsx","webpack://@finviz/website/./js/main/components/tabs/tab.tsx","webpack://@finviz/website/./js/main/components/tabs/tab-list.tsx","webpack://@finviz/website/./js/main/components/tabs/tab-panel.tsx","webpack://@finviz/website/./js/main/components/tabs/tabs.tsx","webpack://@finviz/website/./js/main/components/badge.tsx","webpack://@finviz/website/./js/main/components/tag.tsx","webpack://@finviz/website/./js/main/components/notification/hooks.ts","webpack://@finviz/website/./js/main/components/notification/notification-wrapper.tsx","webpack://@finviz/website/./js/main/components/notification/with-notification-context.tsx","webpack://@finviz/website/./js/main/components/notification/notification.tsx","webpack://@finviz/website/./js/main/components/social-share/DownloadImageButton.tsx","webpack://@finviz/website/./js/main/components/social-share/SocialShare.tsx","webpack://@finviz/website/./js/main/components/tooltip-input.tsx","webpack://@finviz/website/./js/main/hooks/use-track-pageview.ts","webpack://@finviz/website/../charts/app/constants/common.ts","webpack://@finviz/website/../charts/app/utils.ts","webpack://@finviz/website/../charts/app/utils/helpers.ts"],"sourcesContent":["import classNames from 'classnames'\r\nimport * as d3 from 'd3'\r\nimport { Component, createRef } from 'react'\r\n\r\nimport { isFirefoxDesktop } from '../../shared/isMobile'\r\nimport { retinafy } from '../../shared/retinafy'\r\n\r\nconst X_AXIS_TICK_OFFSET = 1\r\nconst xCache: Record> = {}\r\n\r\ninterface CanvasSparklineProps {\r\n className?: string\r\n data: number[]\r\n dateChanges: Record\r\n width: number\r\n height: number\r\n changeDomain: number\r\n change: number\r\n changeOpacity?: boolean\r\n shadow?: boolean\r\n lineColor?: string\r\n textColor?: string\r\n hasStickyLabels?: boolean\r\n}\r\n\r\nclass CanvasSparkline extends Component {\r\n static defaultProps = {\r\n changeOpacity: true,\r\n }\r\n\r\n private readonly canvas = createRef()\r\n declare private canvasContext: CanvasRenderingContext2D\r\n\r\n shouldComponentUpdate(nextProps: CanvasSparklineProps) {\r\n // eslint-disable-next-line eqeqeq\r\n return nextProps.data != this.props.data || nextProps.width !== this.props.width\r\n }\r\n\r\n componentDidMount() {\r\n this.canvasContext = this.canvas.current!.getContext(\r\n '2d',\r\n isFirefoxDesktop() ? { willReadFrequently: true } : undefined\r\n )!\r\n this._renderCanvas()\r\n }\r\n\r\n componentDidUpdate() {\r\n this._renderCanvas()\r\n }\r\n\r\n render() {\r\n const { width, height, className } = this.props\r\n return \r\n }\r\n\r\n private _renderXAxisLabels = (x: d3.ScaleLinear) => {\r\n const { dateChanges, width, height, hasStickyLabels } = this.props\r\n const keys = Object.keys(dateChanges)\r\n keys.forEach((key, index) => {\r\n const text = dateChanges[key]\r\n const metrics = this.canvasContext.measureText(text)\r\n const textWidth = metrics.width\r\n let xPos = x(Number(key))\r\n\r\n if (index === keys.length - 1) {\r\n const rightBound = ~~(width - textWidth / 2)\r\n\r\n if (hasStickyLabels) {\r\n xPos = Math.min(rightBound - X_AXIS_TICK_OFFSET, xPos)\r\n } else if (xPos > rightBound) {\r\n return\r\n }\r\n } else if (index === 0) {\r\n const leftBound = ~~(textWidth / 2)\r\n\r\n if (hasStickyLabels) {\r\n xPos = Math.max(leftBound + X_AXIS_TICK_OFFSET, xPos)\r\n } else if (xPos < leftBound) {\r\n return\r\n }\r\n }\r\n\r\n this.canvasContext.fillText(text, xPos, height - 1)\r\n })\r\n }\r\n\r\n private _renderCanvas = () => {\r\n const { data, width, height, changeOpacity, shadow, lineColor, textColor, changeDomain, change } = this.props\r\n\r\n retinafy(this.canvas.current, this.canvasContext, width, height)\r\n\r\n // TODO check ci sa zobrazuje posledny den\r\n const xCacheKey = `${width}|${data.length}`\r\n let x = xCache[xCacheKey]\r\n if (!x) {\r\n x = d3\r\n .scaleLinear()\r\n .range([-1, width + 1])\r\n .domain([0, data.length])\r\n xCache[xCacheKey] = x\r\n }\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .range([height - 8, 0])\r\n .domain(d3.extent(data, (d) => d) as [number, number])\r\n\r\n const opacityChange = Math.min(Math.abs(change), changeDomain)\r\n const textOpacity = changeOpacity ? (0.5 + (0.2 / changeDomain) * opacityChange).toFixed(3) : 1\r\n\r\n this.canvasContext.clearRect(0, 0, width, height)\r\n\r\n if (shadow) {\r\n this.canvasContext.translate(0.5, 0.5)\r\n\r\n this.canvasContext.strokeStyle = 'rgba(34, 38, 47, 0.8)'\r\n this.canvasContext.beginPath()\r\n for (let i = 0; i < data.length; i++) {\r\n this.canvasContext.lineTo(x(i), y(data[i]))\r\n }\r\n this.canvasContext.stroke()\r\n\r\n this.canvasContext.fillStyle = 'rgba(34, 38, 47, 0.8)'\r\n this.canvasContext.textAlign = 'center'\r\n this.canvasContext.font = '7px Lato'\r\n this._renderXAxisLabels(x)\r\n\r\n this.canvasContext.translate(-0.5, -0.5)\r\n }\r\n\r\n this.canvasContext.strokeStyle = lineColor ?? `rgba(255, 255, 255, ${textOpacity})`\r\n this.canvasContext.beginPath()\r\n for (let i = 0; i < data.length; i++) {\r\n this.canvasContext.lineTo(x(i), y(data[i]))\r\n }\r\n this.canvasContext.stroke()\r\n\r\n this.canvasContext.fillStyle = textColor ?? `rgba(255, 255, 255, ${textOpacity})`\r\n this.canvasContext.textAlign = 'center'\r\n this.canvasContext.font = '7px Lato'\r\n this._renderXAxisLabels(x)\r\n }\r\n}\r\n\r\nexport default CanvasSparkline\r\n","import keyMirror from 'keymirror'\r\n\r\nexport const ActionTypes = keyMirror({\r\n INIT: null,\r\n INIT_TILES: null,\r\n\r\n UPDATE_DATA: null,\r\n\r\n CHANGE_TIMEFRAME_STARTED: null,\r\n CHANGE_TIMEFRAME_COMPLETED: null,\r\n CHANGE_TIMEFRAME_FAILED: null,\r\n})\r\n\r\nexport const PayloadSources = keyMirror({\r\n SERVER_ACTION: null,\r\n VIEW_ACTION: null,\r\n})\r\n","import { Dispatcher } from 'flux'\r\n\r\nimport { PayloadSources } from '../constants/constants'\r\n\r\nclass AppDispatcher extends Dispatcher {\r\n handleServerAction(action: any) {\r\n var payload = {\r\n source: PayloadSources.SERVER_ACTION,\r\n action: action,\r\n }\r\n //console.log(action, payload);\r\n this.dispatch(payload)\r\n }\r\n\r\n handleViewAction(action: any) {\r\n var payload = {\r\n source: PayloadSources.VIEW_ACTION,\r\n action: action,\r\n }\r\n //console.log(action, payload);\r\n this.dispatch(payload)\r\n }\r\n}\r\n\r\nconst dispatcher = new AppDispatcher()\r\nexport default dispatcher\r\n","import { ActionTypes } from '../constants/constants'\r\nimport AppDispatcher from '../dispatcher/appDispatcher'\r\nimport { Contract, FuturesDatum, FuturesTile } from '../types'\r\nimport Store from './store'\r\n\r\nfunction getRows(tiles: Record) {\r\n return Object.values(tiles)\r\n .map(function (tile) {\r\n return {\r\n label: tile.label,\r\n value: tile.change,\r\n }\r\n })\r\n .sort(function (a, b) {\r\n return b.value - a.value\r\n })\r\n}\r\n\r\nvar _timeframe = 'i5'\r\nvar _rows: ReturnType = []\r\nclass RowsStore extends Store {\r\n getTimeframe() {\r\n return _timeframe\r\n }\r\n\r\n getRows() {\r\n return _rows\r\n }\r\n}\r\nvar rowsStore = new RowsStore()\r\n\r\n// @ts-ignore\r\nrowsStore.dispatchToken = AppDispatcher.register(function (payload) {\r\n var action = payload.action\r\n\r\n switch (action.type) {\r\n case ActionTypes.INIT:\r\n var _tiles: Record = {}\r\n action.rows.forEach((group: FuturesDatum) => {\r\n group.contracts.forEach((contract: Contract) => {\r\n _tiles[contract.ticker] = contract\r\n })\r\n })\r\n\r\n _rows = getRows(_tiles)\r\n if (action.timeframe) {\r\n _timeframe = action.timeframe\r\n }\r\n rowsStore.emitChange()\r\n break\r\n\r\n case ActionTypes.CHANGE_TIMEFRAME_STARTED:\r\n _timeframe = action.period\r\n rowsStore.emitChange()\r\n break\r\n\r\n case ActionTypes.UPDATE_DATA:\r\n _rows = getRows(action.tiles)\r\n rowsStore.emitChange()\r\n break\r\n }\r\n})\r\n\r\nexport default rowsStore\r\n","import { EventEmitter } from 'events'\r\n\r\nclass Store extends EventEmitter {\r\n static CHANGE_EVENT = 'change'\r\n\r\n emitChange() {\r\n this.emit(Store.CHANGE_EVENT)\r\n }\r\n\r\n addChangeListener(callback: (...args: any[]) => void) {\r\n this.on(Store.CHANGE_EVENT, callback)\r\n }\r\n\r\n removeChangeListener(callback: (...args: any[]) => void) {\r\n this.removeListener(Store.CHANGE_EVENT, callback)\r\n }\r\n}\r\n\r\nexport default Store\r\n","import { ActionTypes } from '../constants/constants'\r\nimport AppDispatcher from '../dispatcher/appDispatcher'\r\nimport { Contract, FuturesDatum, FuturesTile } from '../types'\r\nimport Store from './store'\r\n\r\nvar _tilesGroups: Record = {}\r\nvar _tiles: Record = {}\r\nvar _tileOrder: string[] = []\r\nclass TilesStore extends Store {\r\n getTiles() {\r\n return _tiles\r\n }\r\n\r\n getTilesList() {\r\n return Object.keys(_tiles)\r\n .map(function (key) {\r\n return _tiles[key]\r\n })\r\n .sort((a, b) => _tileOrder.indexOf(a.ticker) - _tileOrder.indexOf(b.ticker))\r\n }\r\n\r\n getTile(ticker: string) {\r\n return _tiles[ticker]\r\n }\r\n\r\n getTilesGroup(ticker: string) {\r\n return _tilesGroups[ticker]\r\n }\r\n\r\n getTilesInGroup(group: string) {\r\n var g = group.toUpperCase()\r\n return this.getTilesList().filter((tile) => _tilesGroups[tile.ticker] === g)\r\n }\r\n}\r\nvar tilesStore = new TilesStore()\r\ntilesStore.setMaxListeners(50)\r\n\r\n// @ts-ignore\r\ntilesStore.dispatchToken = AppDispatcher.register(function (payload) {\r\n var action = payload.action\r\n\r\n switch (action.type) {\r\n case ActionTypes.INIT:\r\n var groups = action.rows\r\n groups.forEach((group: FuturesDatum) => {\r\n group.contracts.forEach((contract: Contract) => {\r\n _tiles[contract.ticker] = contract\r\n _tilesGroups[contract.ticker] = group.ticker\r\n _tileOrder.push(contract.ticker)\r\n })\r\n })\r\n tilesStore.emitChange()\r\n break\r\n\r\n case ActionTypes.INIT_TILES:\r\n _tiles = action.tiles\r\n tilesStore.emitChange()\r\n break\r\n\r\n case ActionTypes.UPDATE_DATA:\r\n var tiles = action.tiles\r\n _tiles = tiles\r\n tilesStore.emitChange()\r\n break\r\n }\r\n})\r\n\r\nexport default tilesStore\r\n","export interface Contract {\r\n label: string\r\n ticker: string\r\n last: number\r\n change: number\r\n prevClose: number\r\n high: number\r\n low: number\r\n sparkline: number[]\r\n sparklineDateChanges: Record\r\n}\r\n\r\nexport interface FuturesDatum {\r\n ticker: string\r\n label: string\r\n contracts: Contract[]\r\n}\r\n\r\nexport interface FuturesTile {\r\n change: number\r\n high: number\r\n label: string\r\n last: number\r\n low: number\r\n prevClose: number\r\n sparkline: number[]\r\n sparklineDateChanges: Record\r\n ticker: string\r\n}\r\n\r\nexport interface FuturesRow {\r\n ticker: string\r\n label: string\r\n group: string\r\n perf: number\r\n}\r\n\r\nexport enum PageType {\r\n Quotes = 'quotes',\r\n Performance = 'performance',\r\n Charts = 'charts',\r\n}\r\n\r\nexport enum FuturesTimeframe {\r\n None = 'NO',\r\n Minute5 = 'i5',\r\n Hourly = 'h',\r\n Daily = 'd',\r\n Weekly = 'w',\r\n Monthly = 'm',\r\n}\r\n\r\nexport enum LayoutType {\r\n Old = 'old',\r\n NewHorizontal = 'new',\r\n NewGroups = 'new_groups',\r\n}\r\n\r\nexport enum LabelStyle {\r\n None = 'none',\r\n Plain = 'plain',\r\n PlainColor = 'plain_color',\r\n Side = 'side',\r\n SideColor = 'side_color',\r\n Line = 'line',\r\n LineWithEnding = 'lineWithEnding',\r\n}\r\n\r\nexport enum TileStyle {\r\n Map = 'map',\r\n MapCondensed = 'mapCondensed',\r\n BorderTile = 'borderTile',\r\n}\r\n","import * as d3 from 'd3'\r\n\r\nvar redGreenGradient = {\r\n colors: [\r\n '#fd0001',\r\n '#fd0101',\r\n '#fc0101',\r\n '#fa0101',\r\n '#f90103',\r\n '#f70203',\r\n '#f60203',\r\n '#f40204',\r\n '#f20304',\r\n '#f10304',\r\n '#ef0404',\r\n '#ee0405',\r\n '#ec0405',\r\n '#ea0505',\r\n '#e80505',\r\n '#e70506',\r\n '#e50606',\r\n '#e30706',\r\n '#e20706',\r\n '#e00807',\r\n '#df0708',\r\n '#dd0808',\r\n '#db0808',\r\n '#d90809',\r\n '#d80909',\r\n '#d60909',\r\n '#d40a09',\r\n '#d30a0a',\r\n '#d10a0a',\r\n '#cf0a0a',\r\n '#ce0b0b',\r\n '#cc0b0b',\r\n '#cb0c0b',\r\n '#c90b0c',\r\n '#c70c0c',\r\n '#c60c0c',\r\n '#c40c0d',\r\n '#c20d0d',\r\n '#c10e0e',\r\n '#bf0e0e',\r\n '#be0e0e',\r\n '#bc0f0f',\r\n '#ba0f0f',\r\n '#b90f10',\r\n '#b71010',\r\n '#b51010',\r\n '#b41010',\r\n '#b21111',\r\n '#b11111',\r\n '#af1111',\r\n '#ad1112',\r\n '#ab1212',\r\n '#aa1212',\r\n '#a81313',\r\n '#a61313',\r\n '#a51313',\r\n '#a31413',\r\n '#a21414',\r\n '#a01514',\r\n '#9e1414',\r\n '#9d1515',\r\n '#9b1616',\r\n '#9a1616',\r\n '#981616',\r\n '#961716',\r\n '#951717',\r\n '#931717',\r\n '#911818',\r\n '#8f1818',\r\n '#8e1818',\r\n '#8d1919',\r\n '#8b1919',\r\n '#8a1a1a',\r\n '#881a19',\r\n '#861b1a',\r\n '#841b1b',\r\n '#831b1b',\r\n '#811c1b',\r\n '#801c1b',\r\n '#7e1c1c',\r\n '#7c1d1c',\r\n '#7a1d1d',\r\n '#791d1d',\r\n '#781d1e',\r\n '#761e1e',\r\n '#741f1e',\r\n '#721f1e',\r\n '#711f1f',\r\n '#6f1f1f',\r\n '#6e1f20',\r\n '#6c1f20',\r\n '#6a2020',\r\n '#682020',\r\n '#682221',\r\n '#662222',\r\n '#652222',\r\n '#622323',\r\n '#612223',\r\n '#602323',\r\n '#5e2323',\r\n '#5c2424',\r\n '#5a2425',\r\n '#582424',\r\n '#572525',\r\n '#552525',\r\n '#542626',\r\n '#522627',\r\n '#502626',\r\n '#4e2627',\r\n '#4d2727',\r\n '#4b2728',\r\n '#4a2828',\r\n '#482828',\r\n '#462929',\r\n '#452929',\r\n '#432929',\r\n '#422a29',\r\n '#40292a',\r\n '#3f2a2a',\r\n '#3d2b2b',\r\n '#3b2b2b',\r\n '#3a2b2c',\r\n '#372c2c',\r\n '#362c2c',\r\n '#352d2c',\r\n '#332d2d',\r\n '#312d2e',\r\n '#302e2e',\r\n '#2f2f2f',\r\n '#2e312f',\r\n '#2f322e',\r\n '#2e332e',\r\n '#2e342d',\r\n '#2d372d',\r\n '#2c372c',\r\n '#2d392c',\r\n '#2c3a2b',\r\n '#2b3b2c',\r\n '#2b3d2c',\r\n '#2b3e2b',\r\n '#2a3f2a',\r\n '#2a412a',\r\n '#29432a',\r\n '#294429',\r\n '#294529',\r\n '#284728',\r\n '#284828',\r\n '#284a27',\r\n '#284b27',\r\n '#274d27',\r\n '#264e27',\r\n '#265026',\r\n '#265126',\r\n '#265326',\r\n '#255425',\r\n '#245625',\r\n '#245725',\r\n '#245825',\r\n '#245a24',\r\n '#245b24',\r\n '#245d24',\r\n '#235e23',\r\n '#236023',\r\n '#226123',\r\n '#226322',\r\n '#226421',\r\n '#216621',\r\n '#216721',\r\n '#216821',\r\n '#206920',\r\n '#1f6b20',\r\n '#1f6d1f',\r\n '#1f6f1f',\r\n '#1e701f',\r\n '#1e711e',\r\n '#1d721e',\r\n '#1d741e',\r\n '#1e751e',\r\n '#1d771e',\r\n '#1d781d',\r\n '#1d7a1d',\r\n '#1c7c1c',\r\n '#1c7d1c',\r\n '#1b7e1c',\r\n '#1b801b',\r\n '#1a811b',\r\n '#1a821b',\r\n '#1a841a',\r\n '#1a851b',\r\n '#198719',\r\n '#198819',\r\n '#188919',\r\n '#188b18',\r\n '#188d18',\r\n '#178e18',\r\n '#168f17',\r\n '#169117',\r\n '#179217',\r\n '#169316',\r\n '#159416',\r\n '#159616',\r\n '#159815',\r\n '#159914',\r\n '#149b14',\r\n '#139c14',\r\n '#139e13',\r\n '#129f13',\r\n '#12a013',\r\n '#12a213',\r\n '#12a312',\r\n '#11a411',\r\n '#10a611',\r\n '#10a711',\r\n '#10a911',\r\n '#10ab11',\r\n '#0fac11',\r\n '#0fae10',\r\n '#0faf10',\r\n '#0fb00f',\r\n '#0eb20f',\r\n '#0eb30e',\r\n '#0eb40e',\r\n '#0db60e',\r\n '#0cb70d',\r\n '#0cb90d',\r\n '#0cbb0c',\r\n '#0bbc0d',\r\n '#0bbe0c',\r\n '#0bbf0c',\r\n '#0ac00b',\r\n '#0ac10b',\r\n '#0ac30a',\r\n '#0ac40a',\r\n '#09c609',\r\n '#09c709',\r\n '#09c809',\r\n '#08ca08',\r\n '#07cb08',\r\n '#07cd08',\r\n '#07cf08',\r\n '#06d008',\r\n '#06d107',\r\n '#06d306',\r\n '#05d406',\r\n '#04d505',\r\n '#04d605',\r\n '#04d805',\r\n '#04d904',\r\n '#03da04',\r\n '#03dc03',\r\n '#03dd04',\r\n '#02df03',\r\n '#02e002',\r\n '#01e202',\r\n '#01e302',\r\n '#00e402',\r\n ],\r\n nullColor: '#2f323d',\r\n}\r\n\r\nvar futuresDomains = {\r\n d: 1.5,\r\n w: 2.5,\r\n m: 5,\r\n mtd: 5,\r\n q: 10,\r\n hy: 25,\r\n y: 30,\r\n ytd: 30,\r\n}\r\n\r\nvar forexDomains = {\r\n d: 1,\r\n w: 2.5,\r\n m: 5,\r\n mtd: 5,\r\n q: 10,\r\n hy: 10,\r\n y: 10,\r\n ytd: 10,\r\n}\r\n\r\nvar cryptoDomains = {\r\n d: 5, // TODO refine\r\n w: 2.5,\r\n m: 5,\r\n mtd: 5,\r\n q: 10,\r\n hy: 10,\r\n y: 10,\r\n ytd: 10,\r\n}\r\n\r\nvar generateColorScale = function (domains: Record, domainId: string, gradient = redGreenGradient) {\r\n var domain = {\r\n min: -domains[domainId],\r\n max: +domains[domainId],\r\n }\r\n\r\n var linearScale = d3\r\n .scaleLinear()\r\n .domain([domain.min, domain.max])\r\n .range([0, gradient.colors.length - 1])\r\n\r\n return function (value: number) {\r\n if (typeof value === 'undefined' || value === null) {\r\n return gradient.nullColor\r\n }\r\n\r\n if (value > domain.max) value = domain.max\r\n if (value < domain.min) value = domain.min\r\n\r\n var i = Math.round(linearScale(value))\r\n return gradient.colors[i]\r\n }\r\n}\r\n\r\nvar getCookie = function (name: string) {\r\n var re = new RegExp('(?:(?:^|.*;\\\\s*)' + name + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$')\r\n return document.cookie.replace(re, '$1')\r\n}\r\n\r\nexport const layout = [\r\n ['YM', 'ES', 'NQ', 'ER2', 'NKD', 'EX', 'DY', 'VX'],\r\n ['CL', 'QA', 'RB', 'HO', 'NG', 'ZK'],\r\n ['ZB', 'ZN'],\r\n ['CC', 'CT', 'JO', 'KC', 'LB', 'SB'],\r\n ['ZF', 'ZT'],\r\n ['GC', 'SI', 'PL', 'HG', 'PA'],\r\n ['LC', 'FC', 'LH'],\r\n ['ZS', 'ZM', 'ZL', 'ZC', 'ZW', 'ZR', 'ZO', 'RS'],\r\n ['DX', '6E', '6J', '6B', '6C', '6S', '6A', '6N'],\r\n]\r\n\r\nexport const groups = ['Indices', 'Energy', 'Bonds', 'Softs', 'Metals', 'Meats', 'Grains', 'Currencies'] as const\r\n\r\nexport { generateColorScale, futuresDomains, forexDomains, cryptoDomains, getCookie }\r\n","import { ChartSettingsButton } from 'finviz-charts/app/controllers/chart-controls/settings-button'\r\n\r\nimport { Icon } from '../../../main/components/icon'\r\nimport { withSuspense } from '../../../main/services/async-modules-utils'\r\nimport { useChartLayoutGlobalModelAsync } from '../../charts-lib'\r\n\r\ninterface Props {\r\n isPremium: boolean\r\n}\r\n\r\nfunction ForexFuturesCryptoSettingsRaw({ isPremium }: Props) {\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n\r\n if (!chartLayoutModel) return null\r\n\r\n return (\r\n }\r\n model={chartLayoutModel}\r\n />\r\n )\r\n}\r\n\r\n// charts bundle may not be fetched and therefore withSuspense is undefined but on those pages components in this file are not used at all\r\nexport const ForexFuturesCryptoSettings = withSuspense?.(ForexFuturesCryptoSettingsRaw)\r\n","import * as React from 'react'\r\nimport { useLocation, useNavigate, useSearchParams } from 'react-router-dom'\r\n\r\nimport {\r\n CUSTOM_DATE_RANGE,\r\n CustomDateRange,\r\n TimeframeBar,\r\n daterangeUtm,\r\n generatePathForTimeframeDateRange,\r\n getDateRangeGroupsWithHref,\r\n getDefaultDateRangeAnchorDate,\r\n getTimeframeFromDateRange,\r\n timeframeUtm,\r\n useCustomDateRangeDialog,\r\n useFavoriteTimeframes,\r\n} from '../../../main/components/timeframe-bar'\r\nimport { SpecificChartFunctionality, TIMEFRAME } from '../../../main/constants/common'\r\nimport { useTrackPageView } from '../../../main/hooks/use-track-pageview'\r\nimport { Instrument } from '../../../main/types'\r\nimport { StockDetailTimeframeBar, getTimeframeGroupsWithHref } from '../../charts-lib'\r\nimport { encodeQueryString } from '../../queryString'\r\n\r\nconst IMAGE_SELECTOR = '.charts-gal'\r\n\r\nfunction updateUrlString(urlString: string, query: Record) {\r\n const url = new URL(urlString)\r\n\r\n Object.keys(query).forEach((key: keyof typeof query) => {\r\n const value = query[key]\r\n if (value === undefined) {\r\n url.searchParams.delete(key)\r\n } else {\r\n url.searchParams.set(key, value)\r\n }\r\n })\r\n\r\n return url.toString()\r\n}\r\n\r\nfunction updateImageSrc(image: HTMLImageElement, query: Record) {\r\n image.src = updateUrlString(image.src, query)\r\n\r\n if (image.srcset) {\r\n image.srcset = image.srcset\r\n .split(', ')\r\n .map((dyna) => {\r\n const [url, rule] = dyna.trim().split(' ')\r\n return `${updateUrlString(url.trim(), query)} ${rule}`\r\n })\r\n .join(', ')\r\n }\r\n}\r\n\r\nfunction updateLinkhref(linkElement: HTMLAnchorElement | null, query: Record) {\r\n if (!linkElement) return\r\n\r\n linkElement.href = updateUrlString(linkElement.href, query)\r\n}\r\n\r\nfunction getPageTitle(isDetail?: boolean, pageType?: string, ticker?: string, timeframe?: string) {\r\n return [pageType, ticker, isDetail ? 'Chart' : 'Charts', timeframe].filter(Boolean).join(' ')\r\n}\r\n\r\nexport function FuturesForexCryptoTimeframeBar({\r\n isDetail = false,\r\n title,\r\n group,\r\n specificChartFunctionality,\r\n instrument,\r\n onTimeframeChange,\r\n onDateRangeChange,\r\n}: {\r\n isDetail?: boolean\r\n title: string\r\n group?: string\r\n instrument: Instrument\r\n specificChartFunctionality: SpecificChartFunctionality\r\n onTimeframeChange?: (value: TIMEFRAME) => void\r\n onDateRangeChange?: (value: string | undefined) => void\r\n}) {\r\n useTrackPageView()\r\n const isPremium = true // Force show all timeframes for all users\r\n const navigate = useNavigate()\r\n const location = useLocation()\r\n const [searchParams] = useSearchParams()\r\n const query = React.useMemo(() => Object.fromEntries(searchParams) as { p: string; r?: string }, [searchParams])\r\n const { favoriteTimeframes, toggleFavoriteTimeframe } = useFavoriteTimeframes()\r\n const dateRange = query.r ?? undefined\r\n const { timeFrameGroups, dateRangeGroupsWithHref } = React.useMemo(() => {\r\n const timeFrameGroups = getTimeframeGroupsWithHref({\r\n isPremium,\r\n generatePath: (timeFrame) =>\r\n generatePathForTimeframeDateRange({\r\n isPremium,\r\n pathname: location.pathname,\r\n timeframe: timeFrame.value,\r\n dateRange: null,\r\n utmCampaign: timeframeUtm[specificChartFunctionality],\r\n }),\r\n })\r\n const dateRangeGroupsWithHref = getDateRangeGroupsWithHref({\r\n isPremium,\r\n customRange: dateRange,\r\n isCustomAvailable: true,\r\n instrument,\r\n generatePath: (dateRange) =>\r\n generatePathForTimeframeDateRange({\r\n isPremium,\r\n pathname: window.location.pathname,\r\n timeframe: dateRange.timeframe!,\r\n dateRange: dateRange.value,\r\n utmCampaign: daterangeUtm[specificChartFunctionality],\r\n }),\r\n })\r\n\r\n return { timeFrameGroups, dateRangeGroupsWithHref }\r\n }, [isPremium, location.pathname, dateRange, instrument, specificChartFunctionality])\r\n\r\n const { onDialogSubmit, customDateRangeDialogState, handleDateRangeSelect } = useCustomDateRangeDialog({\r\n instrument,\r\n anchorDate: getDefaultDateRangeAnchorDate(),\r\n shouldReloadOnNavigate: false,\r\n pathGenerator: ({ dateRange, timeframe }) => ({\r\n pathname: window.location.pathname,\r\n search: new URLSearchParams({ ...query, p: timeframe, r: dateRange ?? '' }).toString(),\r\n }),\r\n })\r\n\r\n const handleTimeframeDateRangeChange = ({\r\n timeframe,\r\n dateRange,\r\n }: {\r\n timeframe: TIMEFRAME\r\n dateRange: string | undefined\r\n }) => {\r\n document.querySelectorAll(IMAGE_SELECTOR).forEach((image) => {\r\n updateImageSrc(image, { tf: timeframe, r: dateRange })\r\n updateLinkhref(image.closest('a'), { p: timeframe, r: dateRange })\r\n })\r\n onTimeframeChange?.(timeframe)\r\n onDateRangeChange?.(dateRange)\r\n }\r\n\r\n if (isDetail) {\r\n return (\r\n {\r\n document.title = getPageTitle(isDetail, title, group, timeframe.labelPageTitle ?? timeframe.label)\r\n onTimeframeChange?.(timeframe.value)\r\n }}\r\n onDateRangeSelect={(option) => {\r\n if (option && option.value !== CUSTOM_DATE_RANGE) {\r\n document.title = getPageTitle(isDetail, title, group, 'custom date range')\r\n }\r\n onDateRangeChange?.(option.value)\r\n }}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n toggleFavoriteTimeframe(timeframe.value)}\r\n selectedTimeframe={query.p ?? TIMEFRAME.d}\r\n timeFrameGroups={timeFrameGroups}\r\n onTimeframeSelect={(option) => {\r\n if (option.value === 'intraday') {\r\n // intraday option is only available for free users, and it redirects them to elite page\r\n return\r\n }\r\n document.title = getPageTitle(isDetail, title, group, option.labelPageTitle ?? option.label)\r\n navigate(`${location.pathname}?${encodeQueryString({ ...query, p: option.value })}`)\r\n handleTimeframeDateRangeChange({ timeframe: option.value, dateRange: undefined })\r\n }}\r\n selectedDateRange={query['r'] ?? null}\r\n dateRangeGroups={dateRangeGroupsWithHref}\r\n onDateRangeSelect={(option) => {\r\n handleDateRangeSelect(option, ({ timeframe, value: dateRange }) => {\r\n document.title = getPageTitle(isDetail, title, group, option.label)\r\n handleTimeframeDateRangeChange({ timeframe, dateRange })\r\n })\r\n }}\r\n onCustomDateRangeClick={() => {\r\n if (isPremium) customDateRangeDialogState.show()\r\n }}\r\n />\r\n {\r\n const value = dateRange ?? ''\r\n const timeframe = getTimeframeFromDateRange({\r\n dateRange: value,\r\n instrument: Instrument.Stock,\r\n anchorDate: getDefaultDateRangeAnchorDate(),\r\n isPremium: isPremium,\r\n })\r\n handleDateRangeSelect({ value, timeframe }, ({ timeframe, value }) => {\r\n document.title = getPageTitle(isDetail, title, group, 'custom date range')\r\n handleTimeframeDateRangeChange({ timeframe, dateRange: value || undefined })\r\n onDialogSubmit({ value, timeframe })\r\n })\r\n }}\r\n />\r\n \r\n )\r\n}\r\n","import { CHART_ELEMENT_ID, SpecificChartFunctionality } from 'finviz-charts/app/constants/common'\r\nimport {\r\n ChartLayoutWithGlobalState,\r\n type RootChartConfigObject,\r\n getChartLayoutSizeConfig,\r\n} from 'finviz-charts/app/lib-export'\r\n\r\nimport { getInitChartConfig } from '../getInitChartConfig'\r\n\r\ninterface ResizableChartLayoutWithGlobalStateProps {\r\n config: RootChartConfigObject\r\n specificChartFunctionality: SpecificChartFunctionality\r\n}\r\n\r\nexport const ResizableChartLayoutWithGlobalState = ({\r\n config,\r\n specificChartFunctionality,\r\n}: ResizableChartLayoutWithGlobalStateProps) => {\r\n const chartEl = document.getElementById(CHART_ELEMENT_ID)\r\n const chartConfig = getInitChartConfig(config)\r\n\r\n if (!chartConfig.specificChartFunctionality) {\r\n chartConfig.specificChartFunctionality = specificChartFunctionality\r\n }\r\n\r\n return (\r\n chartEl && (\r\n \r\n )\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as d3 from 'd3'\r\nimport PropTypes from 'prop-types'\r\nimport { Component } from 'react'\r\n\r\ninterface SparklineProps {\r\n className?: string\r\n data: number[]\r\n width: number\r\n height: number\r\n}\r\n\r\nclass Sparkline extends Component {\r\n static propTypes = {\r\n width: PropTypes.number.isRequired,\r\n height: PropTypes.number.isRequired,\r\n data: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n }\r\n\r\n shouldComponentUpdate(nextProps: SparklineProps) {\r\n // eslint-disable-next-line eqeqeq\r\n return nextProps.data != this.props.data\r\n }\r\n\r\n render() {\r\n var data = this.props.data\r\n var x = d3.scaleLinear().range([0, this.props.width]).domain([0, data.length])\r\n\r\n var y = d3\r\n .scaleLinear()\r\n .range([this.props.height - 4, 0])\r\n .domain(d3.extent(data, (d) => d) as [number, number])\r\n\r\n var line = d3\r\n .line()\r\n .curve(d3.curveBasis)\r\n .x((d, i) => x(i))\r\n .y((d) => y(d))\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default Sparkline\r\n","import { type RootChartConfigObject, Utils, convertTa } from '../charts-lib'\r\n\r\nexport function getInitChartConfig(initialConfig: RootChartConfigObject, initialTA = FinvizSettings.TA) {\r\n const config: RootChartConfigObject = JSON.parse(JSON.stringify(initialConfig))\r\n\r\n config.scrollable = config.editable || !Utils.isMobile()\r\n\r\n if (initialTA) {\r\n const COTs = FinvizSettings.COTs\r\n convertTa.mergeChartAndTAConfig(config, initialTA, COTs ? { COTs } : undefined)\r\n }\r\n\r\n return config\r\n}\r\n","import { ScaleId } from '../maps/types'\r\n\r\nexport interface GradientDefinition {\r\n colors: string[]\r\n nullColor: string\r\n}\r\n\r\nconst redGreenGradientSmall = {\r\n colors: [\r\n '#e01427',\r\n '#ce252b',\r\n '#bb2f30',\r\n '#aa3534',\r\n '#993938',\r\n '#853c3c',\r\n '#743d3f',\r\n '#414554',\r\n '#3e5f50',\r\n '#3f704f',\r\n '#3f814d',\r\n '#3c924a',\r\n '#36a446',\r\n '#2bb642',\r\n '#12c93b',\r\n ],\r\n nullColor: '#2f323d',\r\n}\r\nexport const redGreenGradient = {\r\n colors: [\r\n '#f63538',\r\n '#ee373a',\r\n '#e6393b',\r\n '#df3a3d',\r\n '#d73c3f',\r\n '#ce3d41',\r\n '#c73e43',\r\n '#bf4045',\r\n '#b64146',\r\n '#ae4248',\r\n '#a5424a',\r\n '#9d434b',\r\n '#94444d',\r\n '#8b444e',\r\n '#824450',\r\n '#784551',\r\n '#6f4552',\r\n '#644553',\r\n '#5a4554',\r\n '#4f4554',\r\n '#414554',\r\n '#3f4c53',\r\n '#3d5451',\r\n '#3b5a50',\r\n '#3a614f',\r\n '#38694f',\r\n '#366f4e',\r\n '#35764e',\r\n '#347d4e',\r\n '#32844e',\r\n '#31894e',\r\n '#31904e',\r\n '#30974f',\r\n '#2f9e4f',\r\n '#2fa450',\r\n '#2faa51',\r\n '#2fb152',\r\n '#2fb854',\r\n '#30be56',\r\n '#30c558',\r\n '#30cc5a',\r\n ],\r\n nullColor: '#2f323d',\r\n}\r\nconst greenRedGradient = { colors: redGreenGradient.colors.slice().reverse(), nullColor: redGreenGradient.nullColor }\r\nconst redGradient = { colors: redGreenGradient.colors.slice(0, 22).reverse(), nullColor: redGreenGradient.nullColor }\r\nconst greenGradient = { colors: redGreenGradient.colors.slice(21), nullColor: redGreenGradient.nullColor }\r\nconst blueGradient = {\r\n colors: [\r\n '#3d4251',\r\n '#3d4250',\r\n '#3d4250',\r\n '#3e4251',\r\n '#3e4251',\r\n '#3d4350',\r\n '#3d4350',\r\n '#3d4350',\r\n '#3e4351',\r\n '#3e4350',\r\n '#3d4351',\r\n '#3d4352',\r\n '#3f4353',\r\n '#3f4353',\r\n '#3f4453',\r\n '#3f4554',\r\n '#3e4354',\r\n '#3e4354',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4454',\r\n '#3f4555',\r\n '#3f4556',\r\n '#3f4457',\r\n '#3f4457',\r\n '#3f4457',\r\n '#3f4557',\r\n '#3f4657',\r\n '#3f4657',\r\n '#3f4657',\r\n '#3f4557',\r\n '#3e4557',\r\n '#3e4558',\r\n '#3f465a',\r\n '#3f4659',\r\n '#3f4759',\r\n '#3f4759',\r\n '#3f475a',\r\n '#3f4759',\r\n '#3f465a',\r\n '#3f465a',\r\n '#3f4759',\r\n '#3f475b',\r\n '#40475b',\r\n '#40475b',\r\n '#40465b',\r\n '#40465c',\r\n '#40465d',\r\n '#40485d',\r\n '#40485c',\r\n '#40475c',\r\n '#40465c',\r\n '#40465c',\r\n '#40465c',\r\n '#40485d',\r\n '#40485d',\r\n '#40485e',\r\n '#40485f',\r\n '#40495e',\r\n '#40495e',\r\n '#40485e',\r\n '#40485f',\r\n '#40495e',\r\n '#40485e',\r\n '#40485f',\r\n '#404960',\r\n '#404960',\r\n '#404860',\r\n '#404861',\r\n '#404a62',\r\n '#404962',\r\n '#404962',\r\n '#404a62',\r\n '#404a62',\r\n '#404861',\r\n '#404961',\r\n '#404a63',\r\n '#404a64',\r\n '#404a65',\r\n '#404b64',\r\n '#404b64',\r\n '#404a65',\r\n '#404a65',\r\n '#404a65',\r\n '#404a65',\r\n '#404b65',\r\n '#404b65',\r\n '#414c65',\r\n '#424c65',\r\n '#424b65',\r\n '#414b66',\r\n '#414b67',\r\n '#414b67',\r\n '#414c67',\r\n '#424b67',\r\n '#424c67',\r\n '#414c67',\r\n '#414b67',\r\n '#414c67',\r\n '#414c67',\r\n '#414c69',\r\n '#414c6a',\r\n '#414c6a',\r\n '#414c6a',\r\n '#414d6a',\r\n '#424e6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6a',\r\n '#414d6b',\r\n '#414d6c',\r\n '#414e6c',\r\n '#414f6c',\r\n '#414e6c',\r\n '#414d6c',\r\n '#414d6c',\r\n '#414e6c',\r\n '#424e6d',\r\n '#424e6d',\r\n '#414f6d',\r\n '#424f6f',\r\n '#414e6f',\r\n '#414e6f',\r\n '#424f70',\r\n '#414f6f',\r\n '#414f6f',\r\n '#414f6f',\r\n '#414e6f',\r\n '#414e6f',\r\n '#414f6f',\r\n '#414f6f',\r\n '#414f71',\r\n '#414f72',\r\n '#425073',\r\n '#425173',\r\n '#415072',\r\n '#425173',\r\n '#425173',\r\n '#425173',\r\n '#415072',\r\n '#415072',\r\n '#415172',\r\n '#415173',\r\n '#415174',\r\n '#415174',\r\n '#415074',\r\n '#415074',\r\n '#415174',\r\n '#415074',\r\n '#415074',\r\n '#415074',\r\n '#415175',\r\n '#415275',\r\n '#425276',\r\n '#425277',\r\n '#415177',\r\n '#415177',\r\n '#425278',\r\n '#425378',\r\n '#415277',\r\n '#415378',\r\n '#415378',\r\n '#415277',\r\n '#415378',\r\n '#42537a',\r\n '#42537c',\r\n '#42537b',\r\n '#41537a',\r\n '#41527a',\r\n '#41537a',\r\n '#41547a',\r\n '#42547b',\r\n '#41547a',\r\n '#41547a',\r\n '#41547c',\r\n '#41547c',\r\n '#41557c',\r\n '#41557c',\r\n '#41557c',\r\n '#41557c',\r\n '#41557d',\r\n '#41547d',\r\n '#41547c',\r\n '#42557d',\r\n '#41557d',\r\n '#41557d',\r\n '#41557f',\r\n '#415580',\r\n '#41567f',\r\n '#41567f',\r\n '#415580',\r\n '#41567f',\r\n '#415580',\r\n '#415580',\r\n '#41557f',\r\n '#415680',\r\n '#415680',\r\n '#415680',\r\n '#415681',\r\n '#415681',\r\n '#415781',\r\n '#415781',\r\n '#415681',\r\n '#415781',\r\n '#415781',\r\n '#415781',\r\n '#415782',\r\n '#415784',\r\n '#415784',\r\n '#425885',\r\n '#425885',\r\n '#415784',\r\n '#415784',\r\n '#415784',\r\n '#415784',\r\n '#425885',\r\n '#425885',\r\n '#415885',\r\n '#415885',\r\n '#425987',\r\n '#415887',\r\n '#415887',\r\n '#415987',\r\n '#415887',\r\n '#425988',\r\n '#425988',\r\n '#415887',\r\n '#415987',\r\n '#415988',\r\n '#415988',\r\n '#415988',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#415989',\r\n '#41598a',\r\n '#405a8b',\r\n '#405a8c',\r\n '#405b8c',\r\n '#405b8c',\r\n '#405b8c',\r\n '#405a8c',\r\n '#405a8c',\r\n '#405a8c',\r\n '#405a8c',\r\n '#405b8c',\r\n '#415c8d',\r\n '#415c8e',\r\n '#405b8e',\r\n '#415c90',\r\n '#405b8f',\r\n '#405c8f',\r\n '#415d90',\r\n '#405b8f',\r\n '#405c8f',\r\n '#405c8f',\r\n '#405b8f',\r\n '#405c8f',\r\n '#405c90',\r\n '#405c91',\r\n '#405c91',\r\n '#405c91',\r\n '#405d91',\r\n '#405e91',\r\n '#405d91',\r\n '#415e91',\r\n '#405e91',\r\n '#415e91',\r\n '#415e92',\r\n '#3f5d94',\r\n '#3f5d93',\r\n '#3f5d93',\r\n '#3f5e94',\r\n '#405e94',\r\n '#3f5d94',\r\n '#3f5d94',\r\n '#3f5d94',\r\n '#3f5e94',\r\n '#3f5e95',\r\n '#3f5e96',\r\n '#3f5e96',\r\n '#3f5e96',\r\n '#405f97',\r\n '#405f97',\r\n '#3f5e96',\r\n '#3f5e97',\r\n '#3f5f97',\r\n '#3f6097',\r\n '#3f5f97',\r\n '#3f6097',\r\n '#3f5f98',\r\n '#3f5f99',\r\n '#3e5f99',\r\n '#3e6199',\r\n '#3e6099',\r\n '#3e5f99',\r\n '#3e5f99',\r\n '#3e5f98',\r\n '#3e6099',\r\n '#3d609a',\r\n '#3d6099',\r\n '#3e609b',\r\n '#3e619c',\r\n '#3e619c',\r\n '#3e619c',\r\n '#3e609b',\r\n '#3e609c',\r\n '#3e609c',\r\n '#3e619b',\r\n '#3e629c',\r\n '#3e629c',\r\n '#3e619c',\r\n '#3d619d',\r\n '#3d639f',\r\n '#3d629f',\r\n '#3d629f',\r\n '#3d639f',\r\n '#3d629f',\r\n '#3c619e',\r\n '#3c619e',\r\n '#3d629f',\r\n '#3d62a0',\r\n '#3d63a0',\r\n '#3d63a0',\r\n '#3d62a0',\r\n '#3d63a1',\r\n '#3d62a0',\r\n '#3d63a0',\r\n '#3d64a1',\r\n '#3d63a0',\r\n '#3c63a0',\r\n '#3b63a2',\r\n '#3c64a3',\r\n '#3c65a3',\r\n '#3b63a3',\r\n '#3b63a3',\r\n '#3b63a3',\r\n '#3b63a3',\r\n '#3c63a3',\r\n '#3c65a3',\r\n '#3c65a3',\r\n '#3b64a4',\r\n '#3a65a5',\r\n '#3b66a6',\r\n '#3c65a6',\r\n '#3a65a5',\r\n '#3a64a5',\r\n '#3a64a5',\r\n '#3b65a5',\r\n '#3a65a5',\r\n '#3a66a6',\r\n '#3b66a6',\r\n '#3b66a6',\r\n '#3a66a8',\r\n '#3a67a8',\r\n '#3b67a8',\r\n '#3b66a8',\r\n '#3b66a8',\r\n '#3b66a8',\r\n '#3b67a8',\r\n '#3a66a8',\r\n '#3966a9',\r\n '#3967a9',\r\n '#3a67aa',\r\n '#3a67ab',\r\n '#3967ab',\r\n '#3a68ab',\r\n '#3a68ab',\r\n '#3968ab',\r\n '#3966aa',\r\n '#3966aa',\r\n '#3968ab',\r\n '#3968ab',\r\n '#3867ac',\r\n '#3867ac',\r\n '#3868ac',\r\n '#3869ad',\r\n '#3969ad',\r\n '#3968ad',\r\n '#3868ac',\r\n '#3868ac',\r\n '#3869ae',\r\n '#3868ad',\r\n '#3868ad',\r\n '#3769af',\r\n '#3869b0',\r\n '#3769af',\r\n '#3769af',\r\n '#386ab0',\r\n '#386ab0',\r\n '#376aaf',\r\n '#376aaf',\r\n '#376ab0',\r\n '#366ab1',\r\n '#366ab2',\r\n '#366ab2',\r\n '#366ab2',\r\n '#366ab3',\r\n '#366bb3',\r\n '#366ab2',\r\n '#3669b2',\r\n '#366ab2',\r\n '#366ab2',\r\n '#366ab2',\r\n '#356bb3',\r\n '#346bb4',\r\n '#356cb4',\r\n '#356cb4',\r\n '#346bb4',\r\n '#356cb4',\r\n '#356cb5',\r\n '#356cb5',\r\n '#356cb5',\r\n '#346cb5',\r\n '#346cb5',\r\n '#346cb6',\r\n '#336db7',\r\n '#326cb7',\r\n '#326db7',\r\n '#336db7',\r\n '#336cb7',\r\n '#326bb6',\r\n '#326cb6',\r\n '#326db7',\r\n '#326db8',\r\n '#316dba',\r\n '#316eb9',\r\n '#316eb9',\r\n '#326eba',\r\n '#316eba',\r\n '#316db9',\r\n '#316db9',\r\n '#316eb9',\r\n '#306eba',\r\n '#306dba',\r\n '#306dba',\r\n '#306ebb',\r\n '#306dbb',\r\n '#306dbc',\r\n '#306fbc',\r\n '#306fbc',\r\n '#306ebb',\r\n '#306eba',\r\n '#306fbc',\r\n '#2f6fbd',\r\n '#2d6ebe',\r\n '#2d6ebe',\r\n '#2d6fbe',\r\n '#2e70be',\r\n '#2e70be',\r\n '#2e6fbe',\r\n '#2e6fbe',\r\n '#2e6fbe',\r\n '#2c6fc0',\r\n '#2d70c0',\r\n '#2d70c0',\r\n '#2b70c1',\r\n '#2b70c1',\r\n '#2c70c1',\r\n '#2c70c1',\r\n '#2b71c1',\r\n '#2c70c1',\r\n '#2c70c1',\r\n '#2c71c1',\r\n '#2c71c1',\r\n '#2a72c3',\r\n '#2971c3',\r\n '#2a71c2',\r\n '#2972c3',\r\n '#2a71c3',\r\n '#2a71c3',\r\n '#2972c3',\r\n '#2972c3',\r\n '#2972c3',\r\n '#2872c5',\r\n '#2872c6',\r\n '#2872c5',\r\n '#2773c6',\r\n '#2773c6',\r\n '#2772c6',\r\n '#2772c5',\r\n '#2672c5',\r\n '#2673c5',\r\n '#2673c5',\r\n '#2673c7',\r\n '#2472c8',\r\n '#2473c8',\r\n '#2474c8',\r\n '#2573c9',\r\n '#2573c9',\r\n '#2573c9',\r\n '#2573c9',\r\n '#2474c8',\r\n '#2374c9',\r\n '#2374c9',\r\n '#2374c9',\r\n '#2375c9',\r\n '#2374c9',\r\n '#2374c9',\r\n '#2475c9',\r\n '#2575ca',\r\n '#2476ca',\r\n '#2476ca',\r\n '#2476ca',\r\n '#2575cb',\r\n '#2577ca',\r\n '#2577ca',\r\n '#2576ca',\r\n '#2577ca',\r\n '#2577ca',\r\n '#2577ca',\r\n '#2677ca',\r\n '#2678ca',\r\n '#2678cb',\r\n '#2778cb',\r\n '#2778cb',\r\n '#2679cb',\r\n '#2779cb',\r\n '#2779cb',\r\n '#2779cb',\r\n '#2779cb',\r\n '#2879cb',\r\n '#287acb',\r\n '#287acb',\r\n '#2879cb',\r\n '#287acb',\r\n '#287bcb',\r\n '#287acb',\r\n '#287acb',\r\n '#287bcc',\r\n '#287bcc',\r\n '#297bcc',\r\n '#297bcc',\r\n '#297bcc',\r\n '#297bcc',\r\n '#297ccc',\r\n '#297ccc',\r\n '#297dcc',\r\n '#297dcc',\r\n '#2a7dcc',\r\n '#2a7dcc',\r\n '#2a7ecd',\r\n '#2a7ecd',\r\n '#2a7ecc',\r\n '#2a7ecc',\r\n '#2b7ecd',\r\n '#2c7ecd',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2b7ecc',\r\n '#2b7ecc',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2c7fcd',\r\n '#2b7fcd',\r\n '#2b80cd',\r\n '#2c80ce',\r\n '#2d80ce',\r\n '#2d80ce',\r\n '#2c81cd',\r\n '#2d82ce',\r\n '#2d82ce',\r\n '#2d81ce',\r\n '#2d82ce',\r\n '#2d82ce',\r\n '#2d82cd',\r\n '#2e82cd',\r\n '#2e83ce',\r\n '#2e82ce',\r\n '#2d82cd',\r\n '#2d83cd',\r\n '#2e83cf',\r\n '#2e84cf',\r\n '#2e84cf',\r\n '#2e83ce',\r\n '#2e83ce',\r\n '#3084cf',\r\n '#3085cf',\r\n '#2f85ce',\r\n '#3085cf',\r\n '#2f86ce',\r\n '#2f86ce',\r\n '#2f86cf',\r\n '#2f85cf',\r\n '#2f86ce',\r\n '#2f86cf',\r\n '#2f86cf',\r\n '#2f87cf',\r\n '#2f86d0',\r\n '#2f86d0',\r\n '#2f86d0',\r\n '#3087cf',\r\n '#3088d0',\r\n '#3088d0',\r\n '#3087cf',\r\n '#3088cf',\r\n '#3188d0',\r\n '#3188d1',\r\n '#3088d0',\r\n '#3089d0',\r\n '#3089d0',\r\n '#3088d0',\r\n '#3188d0',\r\n '#3189d0',\r\n '#3289d0',\r\n '#3289d0',\r\n '#328ad1',\r\n '#328ad1',\r\n '#318ad0',\r\n '#318ad0',\r\n '#318ad0',\r\n '#328bd1',\r\n '#328ad1',\r\n '#328ad1',\r\n '#338bd2',\r\n '#338bd2',\r\n '#338cd1',\r\n '#338cd1',\r\n '#338cd2',\r\n '#338cd2',\r\n '#338dd1',\r\n '#338dd1',\r\n '#338dd2',\r\n '#338dd1',\r\n '#338ed2',\r\n '#338ed2',\r\n '#338ed2',\r\n '#348ed2',\r\n '#348ed2',\r\n '#348ed2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#348fd2',\r\n '#3390d2',\r\n '#3391d2',\r\n '#3491d3',\r\n '#3490d3',\r\n '#3491d3',\r\n '#3491d3',\r\n '#3591d3',\r\n '#3591d3',\r\n '#3691d4',\r\n '#3690d4',\r\n '#3590d3',\r\n '#3592d3',\r\n '#3592d4',\r\n '#3592d4',\r\n '#3592d3',\r\n '#3593d3',\r\n '#3592d4',\r\n '#3592d4',\r\n '#3592d4',\r\n '#3593d4',\r\n '#3694d4',\r\n '#3695d4',\r\n '#3694d4',\r\n '#3693d4',\r\n '#3693d4',\r\n '#3695d4',\r\n '#3695d4',\r\n '#3695d4',\r\n '#3796d4',\r\n '#3796d4',\r\n '#3695d4',\r\n '#3695d5',\r\n '#3696d5',\r\n '#3696d5',\r\n '#3696d5',\r\n '#3695d4',\r\n '#3696d4',\r\n '#3797d5',\r\n '#3796d5',\r\n '#3797d5',\r\n '#3898d5',\r\n '#3898d5',\r\n '#3797d5',\r\n '#3798d5',\r\n '#3899d5',\r\n '#3899d5',\r\n '#3899d6',\r\n '#3799d6',\r\n '#3799d6',\r\n '#3799d6',\r\n '#389ad6',\r\n '#389ad6',\r\n '#3799d5',\r\n '#3799d5',\r\n '#3799d6',\r\n '#379ad6',\r\n '#379ad6',\r\n '#399ad6',\r\n '#399ad6',\r\n '#389bd5',\r\n '#389bd5',\r\n '#389bd6',\r\n '#389bd6',\r\n '#399cd7',\r\n '#399bd7',\r\n '#399cd7',\r\n '#399dd7',\r\n '#389cd7',\r\n '#389cd6',\r\n '#389dd6',\r\n '#399ed7',\r\n '#389dd6',\r\n '#389dd6',\r\n '#389fd6',\r\n '#399fd7',\r\n '#399ed6',\r\n '#399ed6',\r\n '#399fd7',\r\n '#399fd7',\r\n '#399fd7',\r\n '#3aa0d8',\r\n '#3aa0d8',\r\n '#3a9fd8',\r\n '#3a9fd8',\r\n '#3a9fd8',\r\n '#3aa0d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa1d8',\r\n '#3aa2d9',\r\n '#3aa1d9',\r\n '#3aa1d8',\r\n '#39a2d8',\r\n '#3aa2d9',\r\n '#3aa3d9',\r\n '#3ba3d9',\r\n '#3ba3d9',\r\n '#3ba2d8',\r\n '#3aa2d8',\r\n '#3aa4d8',\r\n '#3ba4d9',\r\n '#3aa3d8',\r\n '#3aa3d9',\r\n '#3ba5da',\r\n '#3ba5d9',\r\n '#3ba4d9',\r\n '#3ba4d9',\r\n '#3ba4d9',\r\n '#3aa5d9',\r\n '#3ba5da',\r\n '#3ba6da',\r\n '#3ba6da',\r\n '#3ba6da',\r\n '#3ba6d9',\r\n '#3ba6d9',\r\n '#3ba6da',\r\n '#3aa5da',\r\n '#3ba6da',\r\n '#3ca7da',\r\n '#3ca7da',\r\n '#3ba7da',\r\n '#3ba6da',\r\n '#3ca7da',\r\n '#3ca8da',\r\n '#3ca8da',\r\n '#3ca8da',\r\n '#3ca9db',\r\n '#3ca9db',\r\n '#3ca9da',\r\n '#3ca8db',\r\n '#3ba8db',\r\n '#3baadb',\r\n '#3caadb',\r\n '#3ca9db',\r\n '#3caadb',\r\n '#3caadb',\r\n '#3ca9db',\r\n '#3ca9db',\r\n '#3ca9db',\r\n '#3cabdb',\r\n '#3cabdc',\r\n '#3caadb',\r\n '#3cabdb',\r\n '#3cacdc',\r\n '#3cacdc',\r\n '#3cacdc',\r\n '#3caddc',\r\n '#3caddc',\r\n '#3caddc',\r\n '#3caedc',\r\n '#3caddd',\r\n '#3caddd',\r\n '#3caedc',\r\n '#3eaedd',\r\n '#3eaddd',\r\n '#3daddc',\r\n '#3daedc',\r\n '#3daedc',\r\n '#3dafdd',\r\n '#3dafdd',\r\n '#3daedd',\r\n '#3dafdd',\r\n '#3dafdd',\r\n '#3dafdd',\r\n '#3db0dd',\r\n '#3db0dd',\r\n '#3db0dc',\r\n '#3db0dc',\r\n '#3db1dd',\r\n '#3db1dd',\r\n '#3db0dd',\r\n '#3db0dd',\r\n '#3db1dd',\r\n '#3db1de',\r\n '#3db1de',\r\n '#3db1de',\r\n '#3db2de',\r\n '#3db2de',\r\n '#3db2dd',\r\n '#3db2dd',\r\n '#3db3dd',\r\n '#3db2de',\r\n '#3db3de',\r\n '#3db4de',\r\n '#3db3dd',\r\n '#3db4de',\r\n '#3db4de',\r\n '#3db4de',\r\n '#3db5df',\r\n '#3db5df',\r\n '#3db4df',\r\n '#3db4df',\r\n '#3db5df',\r\n '#3db5de',\r\n '#3db5de',\r\n '#3db5de',\r\n '#3db6df',\r\n '#3db6df',\r\n '#3db6de',\r\n '#3db6de',\r\n '#3db7df',\r\n '#3db7e0',\r\n '#3db8e0',\r\n '#3db8e0',\r\n '#3db7e0',\r\n '#3db7df',\r\n '#3db7df',\r\n '#3eb7df',\r\n '#3eb8df',\r\n '#3eb8df',\r\n '#3eb9e0',\r\n '#3eb9e0',\r\n '#3eb8df',\r\n '#3eb9df',\r\n '#3fb9df',\r\n '#3fb9e0',\r\n '#3ebae1',\r\n '#3ebae0',\r\n '#3ebae0',\r\n '#3ebae0',\r\n '#3eb9e0',\r\n '#3fbae1',\r\n '#3fbbe1',\r\n '#3ebae0',\r\n '#3ebbe1',\r\n '#3ebae0',\r\n '#3ebbe0',\r\n '#3ebce1',\r\n '#3fbce1',\r\n '#3ebce0',\r\n '#3ebce2',\r\n '#3ebce2',\r\n '#3ebde2',\r\n '#3fbde2',\r\n '#3fbde2',\r\n '#3ebde1',\r\n '#3ebee1',\r\n '#3ebde2',\r\n '#3fbde2',\r\n '#3fbde2',\r\n '#3ebee1',\r\n '#3ebfe1',\r\n '#3ebfe1',\r\n '#3ebfe1',\r\n '#3fbfe2',\r\n '#3ebfe1',\r\n '#3ebee1',\r\n '#3ebee2',\r\n '#3ebfe2',\r\n '#3ebfe2',\r\n '#3ebfe2',\r\n '#3ec0e2',\r\n '#3ec1e2',\r\n '#3fc0e3',\r\n '#3fc0e3',\r\n '#3ec0e2',\r\n '#3ec1e2',\r\n '#3ec2e2',\r\n '#3ec2e2',\r\n '#3ec2e2',\r\n '#3ec3e3',\r\n '#3ec3e3',\r\n '#3ec3e3',\r\n '#3ec2e3',\r\n '#3ec2e3',\r\n '#3fc3e3',\r\n '#3fc4e3',\r\n '#3ec4e3',\r\n '#3ec3e3',\r\n '#3ec3e3',\r\n '#3ec5e4',\r\n '#3fc5e4',\r\n '#3fc5e3',\r\n '#3fc4e4',\r\n '#3fc5e4',\r\n '#3ec6e4',\r\n '#3ec5e4',\r\n '#3ec4e4',\r\n '#3ec5e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec7e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec6e4',\r\n '#3ec7e4',\r\n '#3dc8e4',\r\n '#3dc8e4',\r\n '#3dc7e5',\r\n '#3dc7e5',\r\n '#3dc8e5',\r\n '#3dc8e4',\r\n '#3dc8e4',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e5',\r\n '#3dc9e4',\r\n '#3dc9e5',\r\n '#3dcae6',\r\n '#3dcbe6',\r\n '#3dcae6',\r\n '#3dcae6',\r\n '#3dcae6',\r\n '#3dcbe6',\r\n '#3dcce6',\r\n '#3ecce6',\r\n '#3ecce6',\r\n '#3dcbe6',\r\n '#3dcce6',\r\n '#3dcce6',\r\n '#3dcce6',\r\n '#3dcce5',\r\n '#3dcce5',\r\n '#3dcce6',\r\n '#3dcde7',\r\n '#3dcde7',\r\n '#3dcde7',\r\n '#3dcfe7',\r\n '#3dcfe7',\r\n '#3dcfe7',\r\n '#3dcee7',\r\n '#3dcee6',\r\n '#3dcee6',\r\n '#3dcfe7',\r\n '#3dcfe7',\r\n '#3dcfe6',\r\n '#3dcfe6',\r\n '#3dd0e8',\r\n '#3ed1e8',\r\n '#3ed1e7',\r\n '#3dd0e7',\r\n '#3dd0e8',\r\n '#3dd0e7',\r\n '#3dd1e7',\r\n '#3dd1e7',\r\n '#3dd0e7',\r\n '#3cd1e8',\r\n '#3cd2e8',\r\n '#3cd1e8',\r\n '#3cd1e7',\r\n '#3cd1e7',\r\n '#3cd2e8',\r\n '#3cd3e9',\r\n '#3cd2e8',\r\n '#3cd2e9',\r\n '#3cd2e9',\r\n '#3cd3e8',\r\n '#3cd4e8',\r\n '#3cd3e8',\r\n '#3cd3e8',\r\n ],\r\n nullColor: '#2f323d',\r\n}\r\nconst earningsGradient = {\r\n colors: [\r\n '#592d48',\r\n '#592d49',\r\n '#5b2d49',\r\n '#5b2d49',\r\n '#5b2d49',\r\n '#5b2e49',\r\n '#5b2e49',\r\n '#5b2e4a',\r\n '#5c2e4a',\r\n '#5d2f4b',\r\n '#5c2f4b',\r\n '#5c2e4b',\r\n '#5f2f4c',\r\n '#5f2f4c',\r\n '#5e2e4c',\r\n '#5e2e4c',\r\n '#60304d',\r\n '#60304d',\r\n '#5f2f4d',\r\n '#5f2f4d',\r\n '#62304f',\r\n '#62304f',\r\n '#61304f',\r\n '#62314f',\r\n '#62314f',\r\n '#633150',\r\n '#633150',\r\n '#63314f',\r\n '#63304f',\r\n '#643150',\r\n '#643151',\r\n '#643151',\r\n '#653152',\r\n '#653051',\r\n '#653051',\r\n '#663152',\r\n '#673253',\r\n '#673253',\r\n '#673253',\r\n '#673253',\r\n '#683254',\r\n '#683254',\r\n '#683254',\r\n '#693254',\r\n '#693354',\r\n '#6a3354',\r\n '#6a3354',\r\n '#6a3355',\r\n '#6a3356',\r\n '#6a3456',\r\n '#6c3456',\r\n '#6c3356',\r\n '#6c3457',\r\n '#6c3457',\r\n '#6c3457',\r\n '#6c3457',\r\n '#6d3458',\r\n '#6e3559',\r\n '#6f3559',\r\n '#6f3459',\r\n '#6f345a',\r\n '#70355b',\r\n '#70365b',\r\n '#6f355a',\r\n '#70365b',\r\n '#71355a',\r\n '#71355a',\r\n '#71365b',\r\n '#72355b',\r\n '#72365c',\r\n '#72365d',\r\n '#72355c',\r\n '#73355c',\r\n '#73355d',\r\n '#73375d',\r\n '#73375d',\r\n '#76375e',\r\n '#76375f',\r\n '#76375f',\r\n '#76375f',\r\n '#76365e',\r\n '#76365e',\r\n '#76375f',\r\n '#763860',\r\n '#773861',\r\n '#783860',\r\n '#783860',\r\n '#783861',\r\n '#793861',\r\n '#793862',\r\n '#793762',\r\n '#793761',\r\n '#7b3962',\r\n '#7b3962',\r\n '#7a3962',\r\n '#7a3962',\r\n '#7b3963',\r\n '#7c3964',\r\n '#7d3a64',\r\n '#7d3b64',\r\n '#7d3a65',\r\n '#7d3a65',\r\n '#7d3a65',\r\n '#7e3b65',\r\n '#803b66',\r\n '#7f3a66',\r\n '#7e3a66',\r\n '#7f3a67',\r\n '#7f3b67',\r\n '#803c67',\r\n '#803c67',\r\n '#7f3b67',\r\n '#813c68',\r\n '#823b69',\r\n '#823b69',\r\n '#813b69',\r\n '#823c69',\r\n '#823c69',\r\n '#823c69',\r\n '#823c69',\r\n '#843d6a',\r\n '#843d6a',\r\n '#843d6a',\r\n '#843c6b',\r\n '#863c6c',\r\n '#853c6c',\r\n '#853d6c',\r\n '#863e6c',\r\n '#863d6c',\r\n '#873d6c',\r\n '#873d6c',\r\n '#873d6d',\r\n '#893e6e',\r\n '#8a3e6f',\r\n '#8a3e6f',\r\n '#893e6e',\r\n '#893d6e',\r\n '#893e6e',\r\n '#8a3f6f',\r\n '#8b3f70',\r\n '#8b3f71',\r\n '#8b3e70',\r\n '#8b3e70',\r\n '#8c3f70',\r\n '#8c4071',\r\n '#8c4070',\r\n '#8c4070',\r\n '#8d4071',\r\n '#8d4072',\r\n '#8d4072',\r\n '#8f4073',\r\n '#8f4074',\r\n '#8f4073',\r\n '#8f4173',\r\n '#8f4173',\r\n '#904173',\r\n '#904174',\r\n '#904175',\r\n '#904175',\r\n '#914175',\r\n '#924175',\r\n '#924275',\r\n '#924275',\r\n '#914175',\r\n '#924277',\r\n '#934277',\r\n '#934277',\r\n '#944278',\r\n '#954277',\r\n '#954278',\r\n '#954278',\r\n '#954278',\r\n '#954378',\r\n '#964378',\r\n '#964379',\r\n '#96447a',\r\n '#96437a',\r\n '#96437a',\r\n '#98437a',\r\n '#98447b',\r\n '#98457b',\r\n '#98457b',\r\n '#98457b',\r\n '#99447b',\r\n '#9a457d',\r\n '#9b457d',\r\n '#9b457d',\r\n '#9a447c',\r\n '#9a457c',\r\n '#9b457c',\r\n '#9b457e',\r\n '#9b467e',\r\n '#9c467e',\r\n '#9d467f',\r\n '#9e467f',\r\n '#9d467f',\r\n '#9e467e',\r\n '#9e477f',\r\n '#9e4780',\r\n '#9e477f',\r\n '#9f4680',\r\n '#a04680',\r\n '#a04880',\r\n '#a04881',\r\n '#a04881',\r\n '#a04881',\r\n '#a24883',\r\n '#a24883',\r\n '#a24882',\r\n '#a24883',\r\n '#a24883',\r\n '#a24883',\r\n '#a24883',\r\n '#a34983',\r\n '#a34983',\r\n '#a34984',\r\n '#a44985',\r\n '#a54986',\r\n '#a54986',\r\n '#a54986',\r\n '#a54a85',\r\n '#a54a85',\r\n '#a54a85',\r\n '#a64a86',\r\n '#a74a87',\r\n '#a84a88',\r\n '#a84a88',\r\n '#a74a87',\r\n '#a84b87',\r\n '#a84b88',\r\n '#a84b88',\r\n '#a84b88',\r\n '#a94b89',\r\n '#aa4b89',\r\n '#ab4b89',\r\n '#ab4b89',\r\n '#ab4c8a',\r\n '#aa4c8a',\r\n '#aa4c8a',\r\n '#ab4c8a',\r\n '#ad4c8b',\r\n '#ad4c8b',\r\n '#ad4c8b',\r\n '#ad4c8c',\r\n '#ae4d8d',\r\n '#ae4c8c',\r\n '#ae4d8d',\r\n '#af4e8e',\r\n '#af4e8d',\r\n '#b04e8d',\r\n '#b04e8d',\r\n '#b04d8e',\r\n '#b04e8e',\r\n '#b04d8e',\r\n '#b04e8e',\r\n '#b14f8f',\r\n '#b14e90',\r\n '#b14e90',\r\n '#b14f90',\r\n '#b25090',\r\n '#b34f90',\r\n '#b34f90',\r\n '#b34f90',\r\n '#b35091',\r\n '#b44f91',\r\n '#b55092',\r\n '#b55092',\r\n '#b55092',\r\n '#b55192',\r\n '#b55092',\r\n '#b55092',\r\n '#b55093',\r\n '#b65094',\r\n '#b75194',\r\n '#b85193',\r\n '#b75093',\r\n '#b85095',\r\n '#b85095',\r\n '#b85295',\r\n '#b85295',\r\n '#ba5296',\r\n '#b95197',\r\n '#b95197',\r\n '#ba5297',\r\n '#ba5297',\r\n '#ba5296',\r\n '#ba5296',\r\n '#bb5397',\r\n '#bc5297',\r\n '#bd5298',\r\n '#bd5499',\r\n '#bc5499',\r\n '#bc5499',\r\n '#bc5499',\r\n '#bd5499',\r\n '#be549a',\r\n '#bf549b',\r\n '#bf549b',\r\n '#bf549b',\r\n '#bf549b',\r\n '#c0559b',\r\n '#c0559b',\r\n '#c0559b',\r\n '#c0559b',\r\n '#c0549c',\r\n '#c0549c',\r\n '#c2569c',\r\n '#c2569d',\r\n '#c2569e',\r\n '#c2569e',\r\n '#c4569e',\r\n '#c4569e',\r\n '#c4569f',\r\n '#c3579e',\r\n '#c3579e',\r\n '#c5579e',\r\n '#c658a0',\r\n '#c5579f',\r\n '#c4579f',\r\n '#c557a0',\r\n '#c757a0',\r\n '#c657a0',\r\n '#c658a1',\r\n '#c759a2',\r\n '#c758a2',\r\n '#c758a2',\r\n '#c858a2',\r\n '#c959a3',\r\n '#ca59a3',\r\n '#c958a2',\r\n '#c958a2',\r\n '#c959a3',\r\n '#ca59a4',\r\n '#cb59a4',\r\n '#cb59a4',\r\n '#cb59a4',\r\n '#cb5aa5',\r\n '#cc5ba5',\r\n '#cc5ba5',\r\n '#cc5aa5',\r\n '#cd5ba6',\r\n '#cd5ba6',\r\n '#cd5ba6',\r\n '#ce5ba7',\r\n '#ce5ca7',\r\n '#cf5ca7',\r\n '#cf5ca7',\r\n '#cf5ca7',\r\n '#d05ca8',\r\n '#d05ba9',\r\n '#d05ba9',\r\n '#d05ba9',\r\n '#d15ca9',\r\n '#d15da9',\r\n '#d15da9',\r\n '#d15ca9',\r\n '#d25caa',\r\n '#d25dab',\r\n '#d25eab',\r\n '#d25eab',\r\n '#d35eab',\r\n '#d35dab',\r\n '#d35dab',\r\n '#d45eac',\r\n '#d45dac',\r\n '#d55ead',\r\n '#d55ead',\r\n '#d55dad',\r\n '#d65eac',\r\n '#d65fad',\r\n '#d65fae',\r\n '#d65fae',\r\n '#d75fae',\r\n '#d75fae',\r\n '#d75fae',\r\n '#d75fae',\r\n '#d75faf',\r\n '#d760b0',\r\n '#d960b0',\r\n '#d95fb0',\r\n '#d961b0',\r\n '#d961b1',\r\n '#d961b1',\r\n '#da61b0',\r\n '#dc61b2',\r\n '#dc60b2',\r\n '#db60b2',\r\n '#db61b2',\r\n '#dc61b2',\r\n '#dd61b3',\r\n '#dd61b3',\r\n '#dd62b3',\r\n '#de62b3',\r\n '#de63b4',\r\n '#de63b5',\r\n '#dd62b4',\r\n '#de62b4',\r\n '#df63b5',\r\n '#e063b5',\r\n '#e063b5',\r\n '#e063b6',\r\n '#e164b6',\r\n '#e164b6',\r\n '#e164b6',\r\n '#e164b7',\r\n '#e264b7',\r\n '#e264b7',\r\n '#e264b7',\r\n '#e264b8',\r\n '#e265b8',\r\n '#e265b8',\r\n '#e365b8',\r\n '#e364b8',\r\n '#e465b9',\r\n '#e565ba',\r\n '#e565ba',\r\n '#e566b9',\r\n '#e566ba',\r\n '#e566bb',\r\n '#e666ba',\r\n '#e766bb',\r\n '#e665bb',\r\n '#e665bb',\r\n '#e666bb',\r\n '#e867bc',\r\n '#e867bc',\r\n '#e867bc',\r\n '#e867bc',\r\n '#e968bd',\r\n '#e967be',\r\n '#e968be',\r\n '#e969bd',\r\n '#ea68bf',\r\n '#ea69bf',\r\n '#ea69bf',\r\n '#eb69c0',\r\n '#eb69c0',\r\n '#eb6ac0',\r\n '#eb6ac0',\r\n '#ec6ac1',\r\n '#ed6ac2',\r\n '#ec6bc2',\r\n '#ec6bc2',\r\n '#ed6bc2',\r\n '#ed6bc3',\r\n '#ed6bc3',\r\n '#ed6bc3',\r\n '#ee6bc2',\r\n '#ef6bc3',\r\n '#ef6cc3',\r\n '#ef6cc3',\r\n '#f06cc4',\r\n '#f06cc5',\r\n '#f16cc4',\r\n '#f16cc4',\r\n '#f16cc5',\r\n '#f16dc6',\r\n '#f16dc6',\r\n '#f36dc6',\r\n '#f36dc7',\r\n '#f36dc6',\r\n '#f36dc7',\r\n '#f36dc7',\r\n '#f46dc7',\r\n '#f56ec7',\r\n '#f46ec7',\r\n '#f46ec7',\r\n '#f46ec8',\r\n '#f56ec8',\r\n '#f56fc8',\r\n '#f66fc8',\r\n '#f76fc9',\r\n '#f76fc9',\r\n '#f76fc9',\r\n '#f86fca',\r\n '#f970cb',\r\n '#f971cb',\r\n '#f870cb',\r\n '#f870cb',\r\n '#f870cc',\r\n '#f970cd',\r\n '#fa71cd',\r\n '#fa71cd',\r\n '#fa71cd',\r\n '#fa72ce',\r\n '#fb71ce',\r\n '#fb71ce',\r\n '#fb71ce',\r\n '#fc72cf',\r\n '#fb72ce',\r\n '#fb72ce',\r\n '#fc72cf',\r\n '#fd72d0',\r\n '#fe73d1',\r\n '#ff73d1',\r\n '#ff72d1',\r\n '#fe72d1',\r\n '#ff73d2',\r\n '#ff74d2',\r\n '#fe74d2',\r\n '#02dfce',\r\n '#02dece',\r\n '#02dece',\r\n '#03dfce',\r\n '#03dfce',\r\n '#03dfcd',\r\n '#03ddcd',\r\n '#03ddcd',\r\n '#03ddcc',\r\n '#02dccb',\r\n '#02dccb',\r\n '#03dccc',\r\n '#03dbcb',\r\n '#03dbca',\r\n '#03dbca',\r\n '#03dbca',\r\n '#03daca',\r\n '#04dbcb',\r\n '#04dacb',\r\n '#03d9ca',\r\n '#03d8c9',\r\n '#04d9c9',\r\n '#04dac9',\r\n '#04d9c9',\r\n '#04d9c8',\r\n '#04d7c7',\r\n '#04d6c7',\r\n '#04d7c8',\r\n '#05d7c7',\r\n '#05d6c7',\r\n '#05d6c7',\r\n '#04d6c7',\r\n '#05d5c6',\r\n '#05d5c6',\r\n '#05d5c6',\r\n '#05d5c5',\r\n '#06d4c5',\r\n '#05d4c5',\r\n '#05d4c5',\r\n '#06d4c5',\r\n '#06d3c4',\r\n '#06d2c4',\r\n '#06d2c4',\r\n '#06d2c3',\r\n '#06d2c3',\r\n '#07d2c2',\r\n '#07d0c1',\r\n '#07d0c2',\r\n '#07d0c1',\r\n '#07cfc1',\r\n '#07cfc1',\r\n '#07d0c1',\r\n '#09cfc0',\r\n '#08cfc0',\r\n '#09cfc0',\r\n '#0acec1',\r\n '#0acec0',\r\n '#09cdbf',\r\n '#09cdbf',\r\n '#0acebf',\r\n '#0accbe',\r\n '#0bccbf',\r\n '#0bccbf',\r\n '#0bccbe',\r\n '#0bcbbe',\r\n '#0bcbbe',\r\n '#0bcbbd',\r\n '#0ccabc',\r\n '#0ccbbd',\r\n '#0dcbbd',\r\n '#0dcabc',\r\n '#0cc9bb',\r\n '#0dc8ba',\r\n '#0ec9bb',\r\n '#0ec9bb',\r\n '#0dc8ba',\r\n '#0ec8bb',\r\n '#0dc7ba',\r\n '#0ec7ba',\r\n '#0fc7ba',\r\n '#0ec6b9',\r\n '#0fc6b9',\r\n '#0fc6b9',\r\n '#0fc5b8',\r\n '#0fc6b8',\r\n '#0fc6b8',\r\n '#0fc4b8',\r\n '#10c4b7',\r\n '#10c4b7',\r\n '#10c3b6',\r\n '#10c3b6',\r\n '#10c3b6',\r\n '#12c2b6',\r\n '#11c2b6',\r\n '#11c2b6',\r\n '#12c3b6',\r\n '#12c2b5',\r\n '#12c1b5',\r\n '#12c0b5',\r\n '#13c0b4',\r\n '#13c1b4',\r\n '#13c0b3',\r\n '#13bfb3',\r\n '#13c0b4',\r\n '#13bfb2',\r\n '#13beb3',\r\n '#13beb3',\r\n '#13bfb2',\r\n '#14beb1',\r\n '#14beb1',\r\n '#14beb1',\r\n '#14bdb1',\r\n '#14bdb1',\r\n '#15bdb1',\r\n '#16bdb1',\r\n '#15bcb0',\r\n '#16baaf',\r\n '#16bab0',\r\n '#16bbb0',\r\n '#15bbaf',\r\n '#15b9ae',\r\n '#15b9ae',\r\n '#16baae',\r\n '#17baae',\r\n '#17b9ae',\r\n '#17b8ae',\r\n '#17b8ac',\r\n '#17b8ac',\r\n '#18b8ac',\r\n '#18b7ab',\r\n '#18b7ab',\r\n '#18b7ab',\r\n '#19b7ac',\r\n '#18b7ac',\r\n '#18b5ac',\r\n '#18b5ab',\r\n '#18b5aa',\r\n '#19b4aa',\r\n '#1ab4aa',\r\n '#1ab5aa',\r\n '#19b3a9',\r\n '#19b3a9',\r\n '#19b4a9',\r\n '#19b4a9',\r\n '#19b2a8',\r\n '#1ab3a8',\r\n '#1ab3a8',\r\n '#1ab2a7',\r\n '#1bb1a7',\r\n '#1ab0a7',\r\n '#1ab0a7',\r\n '#1ab0a7',\r\n '#1bb1a6',\r\n '#1bb1a6',\r\n '#1bafa6',\r\n '#1bafa6',\r\n '#1cafa5',\r\n '#1cafa5',\r\n '#1cafa5',\r\n '#1caea4',\r\n '#1caea4',\r\n '#1caea4',\r\n '#1caea4',\r\n '#1cada3',\r\n '#1caca2',\r\n '#1caca2',\r\n '#1caca2',\r\n '#1caca2',\r\n '#1eaba2',\r\n '#1eaca2',\r\n '#1eaca2',\r\n '#1eaba2',\r\n '#1daaa1',\r\n '#1ea9a1',\r\n '#1ea9a1',\r\n '#1daaa0',\r\n '#1ea89f',\r\n '#1fa9a0',\r\n '#1fa8a0',\r\n '#1ea79f',\r\n '#1fa79e',\r\n '#1fa89f',\r\n '#1fa79e',\r\n '#1ea69d',\r\n '#1ea79d',\r\n '#1ea79c',\r\n '#1ea59c',\r\n '#1ea59c',\r\n '#20a59c',\r\n '#1fa59c',\r\n '#1fa59c',\r\n '#20a49b',\r\n '#20a49c',\r\n '#1fa49c',\r\n '#1fa49a',\r\n '#1fa39a',\r\n '#20a29a',\r\n '#20a39a',\r\n '#20a39a',\r\n '#20a29a',\r\n '#21a199',\r\n '#21a099',\r\n '#21a099',\r\n '#21a198',\r\n '#21a098',\r\n '#219f98',\r\n '#219f98',\r\n '#21a098',\r\n '#219f97',\r\n '#219f97',\r\n '#219e97',\r\n '#219d96',\r\n '#219d97',\r\n '#229d96',\r\n '#229d96',\r\n '#229d96',\r\n '#229c95',\r\n '#239d95',\r\n '#239d95',\r\n '#239c95',\r\n '#229a94',\r\n '#229a93',\r\n '#229a93',\r\n '#239b93',\r\n '#229a93',\r\n '#239892',\r\n '#239892',\r\n '#239992',\r\n '#249991',\r\n '#249991',\r\n '#249791',\r\n '#239791',\r\n '#249791',\r\n '#249791',\r\n '#249791',\r\n '#239690',\r\n '#239590',\r\n '#24968f',\r\n '#24968f',\r\n '#23958f',\r\n '#24958e',\r\n '#24948e',\r\n '#24948e',\r\n '#24958e',\r\n '#25938d',\r\n '#25938d',\r\n '#25938d',\r\n '#24938c',\r\n '#24928c',\r\n '#25928c',\r\n '#25928c',\r\n '#25928c',\r\n '#25918c',\r\n '#25908b',\r\n '#25908b',\r\n '#25908b',\r\n '#248f8a',\r\n '#258f8a',\r\n '#258f8a',\r\n '#25908b',\r\n '#258f8a',\r\n '#248e89',\r\n '#258e89',\r\n '#268e89',\r\n '#268e88',\r\n '#268e88',\r\n '#268d88',\r\n '#268c88',\r\n '#268c86',\r\n '#268c86',\r\n '#268c87',\r\n '#268c87',\r\n '#268b86',\r\n '#268a87',\r\n '#268a86',\r\n '#268a85',\r\n '#268a86',\r\n '#268a86',\r\n '#268884',\r\n '#268884',\r\n '#268884',\r\n '#278783',\r\n '#278783',\r\n '#268883',\r\n '#278682',\r\n '#278682',\r\n '#278682',\r\n '#278682',\r\n '#278681',\r\n '#278681',\r\n '#278581',\r\n '#278480',\r\n '#278580',\r\n '#278480',\r\n '#278381',\r\n '#278481',\r\n '#27837f',\r\n '#288480',\r\n '#288380',\r\n '#27827f',\r\n '#27827f',\r\n '#27817e',\r\n '#27817e',\r\n '#27817e',\r\n '#27807d',\r\n '#27807d',\r\n '#27807d',\r\n '#28807d',\r\n '#27807c',\r\n '#277f7b',\r\n '#277f7b',\r\n '#277f7b',\r\n '#287e7b',\r\n '#287d7a',\r\n '#287d7a',\r\n '#297e7b',\r\n '#297d7b',\r\n '#297c7b',\r\n '#297c7b',\r\n '#297d7b',\r\n '#287b79',\r\n '#287c79',\r\n '#287b79',\r\n '#297a79',\r\n '#297a78',\r\n '#297b78',\r\n '#297b78',\r\n '#287a77',\r\n '#287976',\r\n '#287876',\r\n '#287876',\r\n '#287876',\r\n '#287775',\r\n '#297876',\r\n '#297976',\r\n '#297776',\r\n '#287675',\r\n '#297776',\r\n '#297775',\r\n '#287674',\r\n '#297574',\r\n '#297574',\r\n '#297574',\r\n '#297474',\r\n '#287472',\r\n '#297472',\r\n '#297472',\r\n '#297472',\r\n '#297271',\r\n '#287271',\r\n '#287271',\r\n '#297271',\r\n '#297271',\r\n '#287171',\r\n '#28716f',\r\n '#29716f',\r\n '#28706f',\r\n '#297070',\r\n '#297070',\r\n '#296f6f',\r\n '#296f6f',\r\n '#286e6e',\r\n '#286e6e',\r\n '#286f6e',\r\n '#296e6e',\r\n '#286d6d',\r\n '#286d6d',\r\n '#296d6d',\r\n '#296e6d',\r\n '#296e6d',\r\n '#296c6b',\r\n '#286c6b',\r\n '#286c6b',\r\n '#296c6b',\r\n '#296a6b',\r\n '#286a6a',\r\n '#286a6a',\r\n '#296969',\r\n '#2a6969',\r\n '#296969',\r\n '#296869',\r\n '#2a6969',\r\n '#2a6969',\r\n '#2a6969',\r\n '#2a6868',\r\n '#296768',\r\n '#296768',\r\n '#2a6767',\r\n '#2a6767',\r\n '#2a6767',\r\n '#2a6567',\r\n '#296566',\r\n '#286666',\r\n '#286565',\r\n '#286565',\r\n '#296565',\r\n '#286465',\r\n '#296464',\r\n '#296464',\r\n '#286364',\r\n '#286263',\r\n '#286263',\r\n '#286263',\r\n '#286163',\r\n '#286062',\r\n '#286062',\r\n '#286162',\r\n '#296163',\r\n '#285f62',\r\n '#296062',\r\n '#296062',\r\n '#295f61',\r\n '#296061',\r\n '#285f60',\r\n '#285d5f',\r\n '#285d5f',\r\n '#285d60',\r\n '#285c5f',\r\n '#285c5e',\r\n '#285c5f',\r\n '#295b5e',\r\n '#285b5d',\r\n '#285b5d',\r\n '#285c5d',\r\n '#295c5d',\r\n '#285b5c',\r\n '#285b5c',\r\n '#285b5c',\r\n '#285a5d',\r\n '#28595d',\r\n '#28595b',\r\n '#28595b',\r\n '#29585c',\r\n '#28585b',\r\n '#28585a',\r\n '#28575a',\r\n '#29585b',\r\n '#29585b',\r\n '#29575a',\r\n '#295659',\r\n '#285558',\r\n '#285658',\r\n '#285658',\r\n '#295558',\r\n '#295557',\r\n '#285457',\r\n '#285357',\r\n '#285457',\r\n '#285356',\r\n '#295456',\r\n '#295356',\r\n '#285256',\r\n '#295256',\r\n '#285255',\r\n '#285255',\r\n '#295255',\r\n '#295155',\r\n '#284f54',\r\n '#274f54',\r\n '#275054',\r\n '#275054',\r\n '#275054',\r\n '#274e52',\r\n '#274e52',\r\n '#284e52',\r\n '#274d51',\r\n '#274d51',\r\n '#274e52',\r\n '#274c50',\r\n '#274c50',\r\n '#274e51',\r\n '#284e51',\r\n '#274c50',\r\n '#284c50',\r\n '#284b50',\r\n '#274a50',\r\n '#284a50',\r\n '#284a50',\r\n '#28494e',\r\n '#27484e',\r\n '#274a4e',\r\n '#274a4d',\r\n '#27494d',\r\n '#28484e',\r\n '#27474c',\r\n '#26484d',\r\n '#26484d',\r\n '#26484c',\r\n '#25464b',\r\n '#26464b',\r\n '#26474b',\r\n '#26474b',\r\n '#26454a',\r\n '#26454a',\r\n '#26464a',\r\n '#26464a',\r\n '#254349',\r\n '#264349',\r\n '#264349',\r\n '#26444a',\r\n ],\r\n nullColor: '#414554',\r\n}\r\n\r\nconst redGreenGradientBubbles = {\r\n colors: [\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f63538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f53538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f43538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f33538',\r\n '#f23538',\r\n '#f23538',\r\n '#f23538',\r\n '#f23538',\r\n '#f13538',\r\n '#f13538',\r\n '#f13538',\r\n '#f13538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#f03538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ef3538',\r\n '#ee3639',\r\n '#ee3639',\r\n '#ee3639',\r\n '#ed3639',\r\n '#ed3639',\r\n '#ed3639',\r\n '#ec3639',\r\n '#ec3639',\r\n '#ec3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#eb3639',\r\n '#ea3639',\r\n '#ea3639',\r\n '#ea3639',\r\n '#e93639',\r\n '#e93639',\r\n '#e83538',\r\n '#e83538',\r\n '#e83538',\r\n '#e73538',\r\n '#e73538',\r\n '#e73538',\r\n '#e63538',\r\n '#e63639',\r\n '#e63639',\r\n '#e63639',\r\n '#e63639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e53639',\r\n '#e43639',\r\n '#e43639',\r\n '#e43639',\r\n '#e33639',\r\n '#e33639',\r\n '#e33639',\r\n '#e23639',\r\n '#e23639',\r\n '#e23639',\r\n '#e13639',\r\n '#e13639',\r\n '#e13639',\r\n '#e03639',\r\n '#e0363a',\r\n '#e0363a',\r\n '#e0363a',\r\n '#df363a',\r\n '#df363a',\r\n '#df363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#de363a',\r\n '#dd363a',\r\n '#dd373b',\r\n '#dd373b',\r\n '#dc373b',\r\n '#dc373b',\r\n '#dc373b',\r\n '#db373b',\r\n '#db373b',\r\n '#db373b',\r\n '#da373b',\r\n '#da373d',\r\n '#da373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d9373d',\r\n '#d8373e',\r\n '#d8373e',\r\n '#d7383e',\r\n '#d7383e',\r\n '#d7383e',\r\n '#d6383e',\r\n '#d6383e',\r\n '#d5383e',\r\n '#d5383e',\r\n '#d4383e',\r\n '#d4383e',\r\n '#d4383f',\r\n '#d3383f',\r\n '#d3383f',\r\n '#d3393f',\r\n '#d33940',\r\n '#d23940',\r\n '#d23940',\r\n '#d13940',\r\n '#d13941',\r\n '#d03941',\r\n '#d03941',\r\n '#cf3941',\r\n '#cf3942',\r\n '#cf3942',\r\n '#cf3a42',\r\n '#ce3a42',\r\n '#cd3a43',\r\n '#cd3a43',\r\n '#cc3943',\r\n '#cc3943',\r\n '#cb3944',\r\n '#cb3944',\r\n '#ca3944',\r\n '#ca3944',\r\n '#c93a45',\r\n '#c93a45',\r\n '#c83a45',\r\n '#c73a45',\r\n '#c73a45',\r\n '#c53a45',\r\n '#c53a45',\r\n '#c43a45',\r\n '#c43a46',\r\n '#c43a46',\r\n '#c43c46',\r\n '#c33c47',\r\n '#c33c47',\r\n '#c23c47',\r\n '#c23c47',\r\n '#c13c48',\r\n '#c13c48',\r\n '#c03c48',\r\n '#c03c48',\r\n '#bf3c48',\r\n '#bf3d4a',\r\n '#be3d4a',\r\n '#be3d4a',\r\n '#bd3d4a',\r\n '#bd3d4b',\r\n '#bc3d4b',\r\n '#bc3d4b',\r\n '#bb3d4b',\r\n '#bb3d4b',\r\n '#bb3d4c',\r\n '#bb3d4c',\r\n '#ba3d4c',\r\n '#ba3e4c',\r\n '#b83e4c',\r\n '#b83e4c',\r\n '#b83e4c',\r\n '#b73e4c',\r\n '#b73e4c',\r\n '#b63e4c',\r\n '#b63e4c',\r\n '#b53e4d',\r\n '#b53e4d',\r\n '#b53e4d',\r\n '#b43e4d',\r\n '#b43e4d',\r\n '#b33e4d',\r\n '#b33f4d',\r\n '#b23f4e',\r\n '#b23f4e',\r\n '#b23f4e',\r\n '#b13f4e',\r\n '#b13f4e',\r\n '#b03e4e',\r\n '#b03e4e',\r\n '#b03e4f',\r\n '#b03e4f',\r\n '#b03e4f',\r\n '#ae3e4f',\r\n '#ae3e4f',\r\n '#ad3e4f',\r\n '#ad3e4f',\r\n '#ac3e4f',\r\n '#ac3f50',\r\n '#ab3f50',\r\n '#ab3f50',\r\n '#aa3f50',\r\n '#aa3f50',\r\n '#a93f50',\r\n '#a93f50',\r\n '#a73f50',\r\n '#a73f50',\r\n '#a63f50',\r\n '#a63f51',\r\n '#a53f51',\r\n '#a53f51',\r\n '#a43f50',\r\n '#a43f50',\r\n '#a43f50',\r\n '#a43f50',\r\n '#a24050',\r\n '#a24050',\r\n '#a14050',\r\n '#a04051',\r\n '#a04051',\r\n '#9f4051',\r\n '#9f4051',\r\n '#9e4051',\r\n '#9c4051',\r\n '#9c4051',\r\n '#9b4051',\r\n '#9a4051',\r\n '#9a4053',\r\n '#994053',\r\n '#994153',\r\n '#984153',\r\n '#974153',\r\n '#974153',\r\n '#964153',\r\n '#954153',\r\n '#954153',\r\n '#934054',\r\n '#934054',\r\n '#924054',\r\n '#914054',\r\n '#914054',\r\n '#904053',\r\n '#8e4053',\r\n '#8e4153',\r\n '#8d4153',\r\n '#8d4153',\r\n '#8d4154',\r\n '#8b4154',\r\n '#8b4154',\r\n '#8a4154',\r\n '#894154',\r\n '#894154',\r\n '#884154',\r\n '#884154',\r\n '#864154',\r\n '#864154',\r\n '#854154',\r\n '#844155',\r\n '#844255',\r\n '#824255',\r\n '#824255',\r\n '#824255',\r\n '#824255',\r\n '#814255',\r\n '#814255',\r\n '#804255',\r\n '#804255',\r\n '#7e4255',\r\n '#7e4255',\r\n '#7d4255',\r\n '#7d4256',\r\n '#7c4256',\r\n '#7c4256',\r\n '#7b4256',\r\n '#7b4256',\r\n '#7b4256',\r\n '#794256',\r\n '#794256',\r\n '#784256',\r\n '#784356',\r\n '#774256',\r\n '#774256',\r\n '#774256',\r\n '#764256',\r\n '#764256',\r\n '#764256',\r\n '#754256',\r\n '#754256',\r\n '#744255',\r\n '#744255',\r\n '#744255',\r\n '#734255',\r\n '#734255',\r\n '#734255',\r\n '#724255',\r\n '#724255',\r\n '#724255',\r\n '#714255',\r\n '#714255',\r\n '#6f4255',\r\n '#6f4255',\r\n '#6f4255',\r\n '#6e4255',\r\n '#6e4255',\r\n '#6e4255',\r\n '#6d4255',\r\n '#6d4255',\r\n '#6d4255',\r\n '#6c4255',\r\n '#6c4255',\r\n '#6c4255',\r\n '#6b4155',\r\n '#6b4155',\r\n '#694155',\r\n '#694155',\r\n '#694155',\r\n '#684155',\r\n '#684155',\r\n '#684155',\r\n '#684155',\r\n '#684155',\r\n '#674155',\r\n '#674155',\r\n '#674155',\r\n '#664154',\r\n '#664154',\r\n '#654154',\r\n '#654154',\r\n '#654154',\r\n '#634154',\r\n '#634154',\r\n '#624154',\r\n '#624154',\r\n '#614154',\r\n '#614154',\r\n '#614154',\r\n '#604054',\r\n '#604054',\r\n '#5f4054',\r\n '#5f4054',\r\n '#5f4054',\r\n '#5e4054',\r\n '#5e4054',\r\n '#5d4054',\r\n '#5d4054',\r\n '#5d4054',\r\n '#5c4053',\r\n '#5c4053',\r\n '#5c4053',\r\n '#5b4053',\r\n '#5b4053',\r\n '#5a4053',\r\n '#5a4053',\r\n '#5a4053',\r\n '#593f53',\r\n '#593f53',\r\n '#593f53',\r\n '#583f53',\r\n '#583f53',\r\n '#583f53',\r\n '#573f53',\r\n '#573e53',\r\n '#573e53',\r\n '#563e53',\r\n '#563e53',\r\n '#563e53',\r\n '#563e53',\r\n '#553e52',\r\n '#553e52',\r\n '#553e52',\r\n '#543e52',\r\n '#543e52',\r\n '#543e52',\r\n '#543e52',\r\n '#543e52',\r\n '#533e52',\r\n '#533e52',\r\n '#533e52',\r\n '#533e52',\r\n '#533e52',\r\n '#523e51',\r\n '#523e51',\r\n '#523e51',\r\n '#523e51',\r\n '#523e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#513e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503e51',\r\n '#503f51',\r\n '#503f51',\r\n '#4f3f51',\r\n '#4f3f51',\r\n '#4f3f51',\r\n '#4d3f51',\r\n '#4d3f51',\r\n '#4d4151',\r\n '#4b4151',\r\n '#4b4151',\r\n '#4a4152',\r\n '#494152',\r\n '#484253',\r\n '#484253',\r\n '#474253',\r\n '#474253',\r\n '#464353',\r\n '#454353',\r\n '#454353',\r\n '#444454',\r\n '#444454',\r\n '#434454',\r\n '#434454',\r\n '#424454',\r\n '#424554',\r\n '#424554',\r\n '#424554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#414554',\r\n '#404654',\r\n '#404654',\r\n '#404654',\r\n '#404653',\r\n '#404653',\r\n '#3f4653',\r\n '#3f4753',\r\n '#3f4753',\r\n '#3e4753',\r\n '#3e4753',\r\n '#3e4852',\r\n '#3d4852',\r\n '#3d4852',\r\n '#3c4951',\r\n '#3c4951',\r\n '#3b4951',\r\n '#3b4a51',\r\n '#3b4a50',\r\n '#3b4a50',\r\n '#3a4c50',\r\n '#394c50',\r\n '#394c50',\r\n '#394c50',\r\n '#394c50',\r\n '#394c50',\r\n '#384c4f',\r\n '#384c4f',\r\n '#384c4f',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384d50',\r\n '#384e50',\r\n '#364e50',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364e4f',\r\n '#364f4f',\r\n '#364f4f',\r\n '#354f4f',\r\n '#354f4f',\r\n '#354f4f',\r\n '#354f4f',\r\n '#35514f',\r\n '#35514f',\r\n '#35514f',\r\n '#34514f',\r\n '#34514f',\r\n '#34524f',\r\n '#34524f',\r\n '#34524f',\r\n '#34524f',\r\n '#33524e',\r\n '#33534e',\r\n '#33534e',\r\n '#33534e',\r\n '#32534e',\r\n '#32544e',\r\n '#32544e',\r\n '#32544e',\r\n '#32544e',\r\n '#31554e',\r\n '#31554e',\r\n '#31554e',\r\n '#31564d',\r\n '#31564d',\r\n '#31564d',\r\n '#31564d',\r\n '#31574d',\r\n '#30574d',\r\n '#30574d',\r\n '#30584d',\r\n '#30584d',\r\n '#2f584d',\r\n '#2f594d',\r\n '#2f594d',\r\n '#2f594c',\r\n '#2e5a4c',\r\n '#2e5a4c',\r\n '#2e5a4c',\r\n '#2d5b4c',\r\n '#2d5b4c',\r\n '#2d5b4c',\r\n '#2d5b4c',\r\n '#2c5c4c',\r\n '#2c5c4c',\r\n '#2c5c4c',\r\n '#2b5d4b',\r\n '#2b5d4b',\r\n '#2b5d4b',\r\n '#2b5e4b',\r\n '#2a5e4b',\r\n '#2a5e4b',\r\n '#2a5f4b',\r\n '#2a5f4b',\r\n '#2a5f4b',\r\n '#2a604b',\r\n '#2a604b',\r\n '#2a604b',\r\n '#29624b',\r\n '#29624b',\r\n '#29624b',\r\n '#29624b',\r\n '#29634b',\r\n '#29634b',\r\n '#29634b',\r\n '#29644b',\r\n '#28644b',\r\n '#28644b',\r\n '#28644b',\r\n '#28654b',\r\n '#28654a',\r\n '#27654a',\r\n '#27664a',\r\n '#27664a',\r\n '#27664a',\r\n '#27664a',\r\n '#26684a',\r\n '#26684a',\r\n '#26684a',\r\n '#26684a',\r\n '#26694a',\r\n '#25694a',\r\n '#25694a',\r\n '#25694a',\r\n '#256a4a',\r\n '#256a4a',\r\n '#256a4a',\r\n '#256a4a',\r\n '#246a4a',\r\n '#246b49',\r\n '#246b49',\r\n '#246b49',\r\n '#246b49',\r\n '#246c49',\r\n '#246c49',\r\n '#236c49',\r\n '#236c49',\r\n '#236e49',\r\n '#236e49',\r\n '#236e49',\r\n '#236e49',\r\n '#236f49',\r\n '#236f49',\r\n '#236f49',\r\n '#226f49',\r\n '#227049',\r\n '#227049',\r\n '#227049',\r\n '#227149',\r\n '#227149',\r\n '#227149',\r\n '#227149',\r\n '#227349',\r\n '#217349',\r\n '#217349',\r\n '#217449',\r\n '#217449',\r\n '#217449',\r\n '#217449',\r\n '#217549',\r\n '#217549',\r\n '#217549',\r\n '#207649',\r\n '#207649',\r\n '#207649',\r\n '#207847',\r\n '#207847',\r\n '#207847',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207947',\r\n '#207b47',\r\n '#207b47',\r\n '#207b47',\r\n '#207c47',\r\n '#207c47',\r\n '#207c47',\r\n '#207d47',\r\n '#207d47',\r\n '#207e48',\r\n '#207e48',\r\n '#207e48',\r\n '#208048',\r\n '#208048',\r\n '#208048',\r\n '#208148',\r\n '#208148',\r\n '#208148',\r\n '#208248',\r\n '#1f8247',\r\n '#1f8247',\r\n '#1f8347',\r\n '#1f8347',\r\n '#1f8347',\r\n '#1f8547',\r\n '#1f8547',\r\n '#1f8547',\r\n '#1f8647',\r\n '#1f8647',\r\n '#1f8647',\r\n '#1e8747',\r\n '#1e8747',\r\n '#1e8747',\r\n '#1e8747',\r\n '#1e8947',\r\n '#1e8947',\r\n '#1e8947',\r\n '#1e8a47',\r\n '#1e8a47',\r\n '#1e8a47',\r\n '#1e8b47',\r\n '#1e8b47',\r\n '#1e8b47',\r\n '#1e8b47',\r\n '#1e8c47',\r\n '#1e8c47',\r\n '#1e8c47',\r\n '#1e8c47',\r\n '#1e8e47',\r\n '#1e8e47',\r\n '#1e8e47',\r\n '#1e8f47',\r\n '#1d8f47',\r\n '#1d8f47',\r\n '#1d8f47',\r\n '#1d9047',\r\n '#1d9047',\r\n '#1e9047',\r\n '#1e9047',\r\n '#1e9147',\r\n '#1e9147',\r\n '#1e9147',\r\n '#1e9347',\r\n '#1e9347',\r\n '#1e9347',\r\n '#1e9347',\r\n '#1e9447',\r\n '#1e9447',\r\n '#1e9447',\r\n '#1e9548',\r\n '#1e9548',\r\n '#1e9548',\r\n '#1e9648',\r\n '#1e9648',\r\n '#1e9648',\r\n '#1f9848',\r\n '#1f9848',\r\n '#1f9848',\r\n '#209948',\r\n '#209948',\r\n '#209948',\r\n '#209a48',\r\n '#209a48',\r\n '#209a48',\r\n '#209b48',\r\n '#209b48',\r\n '#209b48',\r\n '#209b48',\r\n '#219c48',\r\n '#219c48',\r\n '#219d48',\r\n '#219d48',\r\n '#219e48',\r\n '#219e48',\r\n '#219e48',\r\n '#219f48',\r\n '#219f48',\r\n '#21a048',\r\n '#21a048',\r\n '#21a048',\r\n '#21a148',\r\n '#21a148',\r\n '#21a348',\r\n '#21a348',\r\n '#22a449',\r\n '#22a449',\r\n '#22a449',\r\n '#22a549',\r\n '#22a549',\r\n '#22a649',\r\n '#22a649',\r\n '#22a64a',\r\n '#23a74a',\r\n '#23a74a',\r\n '#23a84a',\r\n '#23a84a',\r\n '#23aa4a',\r\n '#23aa4a',\r\n '#23aa4a',\r\n '#24ab4a',\r\n '#24ab4a',\r\n '#24ab4a',\r\n '#25ac4a',\r\n '#25ac4a',\r\n '#25ad4a',\r\n '#25ad4a',\r\n '#25ad4a',\r\n '#26ae4a',\r\n '#26ae4a',\r\n '#26ae4a',\r\n '#26af4a',\r\n '#26af4a',\r\n '#26b04a',\r\n '#26b04a',\r\n '#26b04a',\r\n '#27b14a',\r\n '#27b14a',\r\n '#27b14a',\r\n '#27b24a',\r\n '#27b24a',\r\n '#27b24a',\r\n '#27b24a',\r\n '#27b34a',\r\n '#27b34a',\r\n '#27b34a',\r\n '#28b54b',\r\n '#28b54b',\r\n '#28b54b',\r\n '#28b54b',\r\n '#28b64b',\r\n '#28b64b',\r\n '#28b64d',\r\n '#28b64d',\r\n '#28b74d',\r\n '#28b74d',\r\n '#28b74d',\r\n '#29b74d',\r\n '#29b84d',\r\n '#29b84d',\r\n '#29b84d',\r\n '#29b84d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94d',\r\n '#29b94e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2aba4e',\r\n '#2abb4e',\r\n '#2abb4e',\r\n '#2abb4f',\r\n '#2abb4f',\r\n '#2abc4f',\r\n '#2abc4f',\r\n '#2abc4f',\r\n '#2bbc4f',\r\n '#2bbc4f',\r\n '#2bbd4f',\r\n '#2bbd4f',\r\n '#2bbd50',\r\n '#2bbd50',\r\n '#2bbd50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbe50',\r\n '#2bbf51',\r\n '#2cbf51',\r\n '#2cbf51',\r\n '#2cbf51',\r\n '#2cc051',\r\n '#2cc051',\r\n '#2cc051',\r\n '#2cc052',\r\n '#2cc052',\r\n '#2cc152',\r\n '#2cc152',\r\n '#2cc152',\r\n '#2cc152',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2dc353',\r\n '#2ec453',\r\n '#2ec453',\r\n '#2ec454',\r\n '#2ec454',\r\n '#2ec454',\r\n '#2ec554',\r\n '#2ec554',\r\n '#2fc554',\r\n '#2fc554',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc655',\r\n '#2fc755',\r\n '#2fc755',\r\n '#2fc756',\r\n '#2fc756',\r\n '#2fc756',\r\n '#2fc756',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc856',\r\n '#2fc858',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fc958',\r\n '#2fca58',\r\n '#2fca58',\r\n '#2fca58',\r\n '#2fca59',\r\n '#2fca59',\r\n '#2fca59',\r\n '#2fca59',\r\n '#2fca59',\r\n '#30ca59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb59',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cb5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n '#30cc5a',\r\n ],\r\n nullColor: 'pink',\r\n}\r\nconst blueGradientBubbles = {\r\n colors: [\r\n '#0c3574',\r\n '#0b3475',\r\n '#0b3475',\r\n '#0c3475',\r\n '#0c3575',\r\n '#0c3475',\r\n '#0c3475',\r\n '#0c3576',\r\n '#0c3677',\r\n '#0c3677',\r\n '#0d3776',\r\n '#0d3676',\r\n '#0e3677',\r\n '#0e3576',\r\n '#0d3576',\r\n '#0d3677',\r\n '#0d3777',\r\n '#0e3778',\r\n '#0e3778',\r\n '#0d3877',\r\n '#0d3878',\r\n '#0d3878',\r\n '#0d3878',\r\n '#0d3878',\r\n '#0d3978',\r\n '#0e3778',\r\n '#0e3779',\r\n '#0e397a',\r\n '#0f3979',\r\n '#0f3a7a',\r\n '#0f3a7b',\r\n '#0f3a7b',\r\n '#0e3a7a',\r\n '#0e3a7a',\r\n '#0f3a7a',\r\n '#0e3a7a',\r\n '#0f3a7c',\r\n '#0f3a7c',\r\n '#0f3a7b',\r\n '#0f3b7b',\r\n '#0f3a7b',\r\n '#0e3a7b',\r\n '#0e3b7c',\r\n '#0f3c7c',\r\n '#0f3c7c',\r\n '#0f3d7d',\r\n '#0f3d7d',\r\n '#0f3c7d',\r\n '#0f3c7e',\r\n '#0f3d7e',\r\n '#0f3d7e',\r\n '#0f3d7e',\r\n '#0f3e7e',\r\n '#0f3d7e',\r\n '#103e7e',\r\n '#113e7f',\r\n '#103e7e',\r\n '#103d7e',\r\n '#103e7f',\r\n '#103e7e',\r\n '#113e80',\r\n '#113f80',\r\n '#103f7f',\r\n '#114080',\r\n '#113f81',\r\n '#114081',\r\n '#113f81',\r\n '#103e80',\r\n '#103f81',\r\n '#104181',\r\n '#104181',\r\n '#103f81',\r\n '#114082',\r\n '#103f82',\r\n '#103f81',\r\n '#114081',\r\n '#114282',\r\n '#114282',\r\n '#114282',\r\n '#124182',\r\n '#114082',\r\n '#114182',\r\n '#114283',\r\n '#124384',\r\n '#114384',\r\n '#114383',\r\n '#124383',\r\n '#124485',\r\n '#114384',\r\n '#114384',\r\n '#114384',\r\n '#114484',\r\n '#124585',\r\n '#124585',\r\n '#124585',\r\n '#134587',\r\n '#134586',\r\n '#134586',\r\n '#134687',\r\n '#134687',\r\n '#134586',\r\n '#134686',\r\n '#134687',\r\n '#134787',\r\n '#134788',\r\n '#134688',\r\n '#134688',\r\n '#134687',\r\n '#124788',\r\n '#124789',\r\n '#134688',\r\n '#134688',\r\n '#134688',\r\n '#134788',\r\n '#134889',\r\n '#13488a',\r\n '#13488a',\r\n '#13488a',\r\n '#134889',\r\n '#134789',\r\n '#13478a',\r\n '#13498a',\r\n '#14498a',\r\n '#15498b',\r\n '#14488b',\r\n '#14498c',\r\n '#15498c',\r\n '#14498b',\r\n '#15498c',\r\n '#15498c',\r\n '#14498c',\r\n '#154a8d',\r\n '#144b8c',\r\n '#144b8c',\r\n '#154b8d',\r\n '#144c8d',\r\n '#154b8d',\r\n '#154b8d',\r\n '#154c8d',\r\n '#144c8d',\r\n '#154c8d',\r\n '#154c8d',\r\n '#164c8e',\r\n '#164c8e',\r\n '#164c8e',\r\n '#164c8e',\r\n '#154d8e',\r\n '#154d8f',\r\n '#164e90',\r\n '#164e90',\r\n '#164e90',\r\n '#154e8f',\r\n '#154d90',\r\n '#154e90',\r\n '#164e90',\r\n '#154e91',\r\n '#154f91',\r\n '#155091',\r\n '#165091',\r\n '#164f91',\r\n '#164f92',\r\n '#165092',\r\n '#165092',\r\n '#165092',\r\n '#165092',\r\n '#155192',\r\n '#155192',\r\n '#175093',\r\n '#175293',\r\n '#175293',\r\n '#175093',\r\n '#175093',\r\n '#175293',\r\n '#175293',\r\n '#175193',\r\n '#175294',\r\n '#175394',\r\n '#175394',\r\n '#175294',\r\n '#175395',\r\n '#175295',\r\n '#175295',\r\n '#175395',\r\n '#175395',\r\n '#185495',\r\n '#185495',\r\n '#175396',\r\n '#175497',\r\n '#175397',\r\n '#175497',\r\n '#175597',\r\n '#175597',\r\n '#175597',\r\n '#175497',\r\n '#185497',\r\n '#195698',\r\n '#195798',\r\n '#185597',\r\n '#185497',\r\n '#185599',\r\n '#195799',\r\n '#195799',\r\n '#185799',\r\n '#185699',\r\n '#195699',\r\n '#195799',\r\n '#195799',\r\n '#19589a',\r\n '#185899',\r\n '#185899',\r\n '#18589a',\r\n '#18589a',\r\n '#18599a',\r\n '#18589a',\r\n '#18579a',\r\n '#19589b',\r\n '#19599b',\r\n '#19599a',\r\n '#18599a',\r\n '#1a5a9c',\r\n '#1a5a9d',\r\n '#1a5a9c',\r\n '#1a599d',\r\n '#1a5a9d',\r\n '#1a5a9e',\r\n '#1a5a9e',\r\n '#195a9d',\r\n '#195a9d',\r\n '#195a9d',\r\n '#195a9d',\r\n '#1a5a9e',\r\n '#1a5b9f',\r\n '#1a5b9e',\r\n '#1a5b9e',\r\n '#1a5d9e',\r\n '#1a5c9f',\r\n '#195c9f',\r\n '#195c9f',\r\n '#195da0',\r\n '#195d9f',\r\n '#195ca0',\r\n '#1a5ca0',\r\n '#1a5d9f',\r\n '#1a5ea1',\r\n '#1a5ea1',\r\n '#1a5da0',\r\n '#1a5da0',\r\n '#195ea0',\r\n '#195ea0',\r\n '#1a5ea0',\r\n '#1a5ea1',\r\n '#1c5fa3',\r\n '#1c5fa3',\r\n '#1b5fa3',\r\n '#1b5ea2',\r\n '#1b5ea2',\r\n '#1b5ea2',\r\n '#1b5fa3',\r\n '#1b60a3',\r\n '#1b60a3',\r\n '#1b5fa3',\r\n '#1b60a3',\r\n '#1c61a4',\r\n '#1b60a4',\r\n '#1b60a4',\r\n '#1b61a4',\r\n '#1b60a4',\r\n '#1b60a4',\r\n '#1b60a4',\r\n '#1b62a4',\r\n '#1b62a5',\r\n '#1b61a5',\r\n '#1b62a5',\r\n '#1b62a5',\r\n '#1b61a5',\r\n '#1d61a6',\r\n '#1d63a6',\r\n '#1c62a6',\r\n '#1d63a6',\r\n '#1d62a6',\r\n '#1c62a6',\r\n '#1c63a7',\r\n '#1d64a8',\r\n '#1c64a7',\r\n '#1c64a7',\r\n '#1d65a8',\r\n '#1c63a8',\r\n '#1d64a9',\r\n '#1d65a9',\r\n '#1d65a9',\r\n '#1d65a9',\r\n '#1d65a9',\r\n '#1d66a9',\r\n '#1d66a9',\r\n '#1c65a9',\r\n '#1d66aa',\r\n '#1d66aa',\r\n '#1c65aa',\r\n '#1c66aa',\r\n '#1c66aa',\r\n '#1d66aa',\r\n '#1c66ab',\r\n '#1c68ab',\r\n '#1c67ab',\r\n '#1c67ab',\r\n '#1d68ab',\r\n '#1d68ac',\r\n '#1e68ac',\r\n '#1e67ab',\r\n '#1d67ab',\r\n '#1e69ac',\r\n '#1e69ac',\r\n '#1d68ac',\r\n '#1d68ac',\r\n '#1e69ae',\r\n '#1e6aae',\r\n '#1e6aad',\r\n '#1e69ad',\r\n '#1e6aae',\r\n '#1d69ae',\r\n '#1d6aae',\r\n '#1e6bae',\r\n '#1e6aaf',\r\n '#1e6baf',\r\n '#1e6baf',\r\n '#1e6bb0',\r\n '#1e6cb0',\r\n '#1d6baf',\r\n '#1d6baf',\r\n '#1e6bb0',\r\n '#1d6ab0',\r\n '#1d6cb0',\r\n '#1d6db1',\r\n '#1e6cb1',\r\n '#1e6db0',\r\n '#1e6cb1',\r\n '#1d6cb1',\r\n '#1d6cb0',\r\n '#1f6db1',\r\n '#1f6cb1',\r\n '#1f6cb1',\r\n '#1f6db2',\r\n '#1f6cb1',\r\n '#1f6db1',\r\n '#1f6eb3',\r\n '#1f6fb3',\r\n '#1f6eb3',\r\n '#1f6eb3',\r\n '#1f6fb3',\r\n '#1f6fb3',\r\n '#1f6fb4',\r\n '#1f6fb4',\r\n '#1f6fb4',\r\n '#2070b5',\r\n '#1f70b4',\r\n '#1f70b4',\r\n '#1f70b4',\r\n '#1f71b5',\r\n '#1f71b5',\r\n '#1f71b5',\r\n '#1f71b5',\r\n '#1f70b5',\r\n '#1f71b5',\r\n '#1f72b6',\r\n '#1f72b6',\r\n '#1f71b6',\r\n '#1f71b6',\r\n '#1f72b5',\r\n '#2072b6',\r\n '#2172b7',\r\n '#2172b7',\r\n '#2172b6',\r\n '#2172b6',\r\n '#2172b7',\r\n '#2072b7',\r\n '#2073b8',\r\n '#2173b9',\r\n '#2173b9',\r\n '#2075b8',\r\n '#2075b8',\r\n '#2174b8',\r\n '#2174b9',\r\n '#2175ba',\r\n '#2174ba',\r\n '#2174ba',\r\n '#2175ba',\r\n '#2175ba',\r\n '#2176bb',\r\n '#2176bb',\r\n '#2076ba',\r\n '#2076ba',\r\n '#2176bb',\r\n '#2176bb',\r\n '#2076bb',\r\n '#2077bb',\r\n '#2177bc',\r\n '#2077bb',\r\n '#2077bb',\r\n '#2077bc',\r\n '#2077bc',\r\n '#2077bc',\r\n '#2177bd',\r\n '#2078bc',\r\n '#2078bc',\r\n '#2178bd',\r\n '#2279be',\r\n '#2178be',\r\n '#2179be',\r\n '#2179be',\r\n '#2279bf',\r\n '#2278bf',\r\n '#2179bf',\r\n '#217abf',\r\n '#227ac0',\r\n '#2279c0',\r\n '#227ac0',\r\n '#227abf',\r\n '#227ac0',\r\n '#217bc0',\r\n '#227bc0',\r\n '#227bc0',\r\n '#217bc0',\r\n '#217ac0',\r\n '#217bc0',\r\n '#217cc1',\r\n '#227cc1',\r\n '#217cc1',\r\n '#217cc1',\r\n '#227cc1',\r\n '#217cc1',\r\n '#227cc2',\r\n '#227cc2',\r\n '#227dc2',\r\n '#217dc1',\r\n '#217dc2',\r\n '#217dc2',\r\n '#217dc3',\r\n '#217ec3',\r\n '#217ec3',\r\n '#217ec3',\r\n '#227ec4',\r\n '#237fc4',\r\n '#237ec5',\r\n '#237ec5',\r\n '#237ec5',\r\n '#237ec4',\r\n '#237ec4',\r\n '#237ec6',\r\n '#237fc6',\r\n '#2380c6',\r\n '#237fc5',\r\n '#237fc5',\r\n '#2380c5',\r\n '#2380c7',\r\n '#2381c6',\r\n '#2381c6',\r\n '#2380c6',\r\n '#2381c7',\r\n '#2380c6',\r\n '#2380c7',\r\n '#2381c8',\r\n '#2382c7',\r\n '#2381c7',\r\n '#2381c7',\r\n '#2382c8',\r\n '#2382c8',\r\n '#2383c8',\r\n '#2384c9',\r\n '#2384c9',\r\n '#2383c8',\r\n '#2383c9',\r\n '#2383ca',\r\n '#2384ca',\r\n '#2384ca',\r\n '#2383ca',\r\n '#2383ca',\r\n '#2384ca',\r\n '#2384ca',\r\n '#2484cb',\r\n '#2485cb',\r\n '#2385cb',\r\n '#2384cb',\r\n '#2385cb',\r\n '#2485cb',\r\n '#2585cc',\r\n '#2586cc',\r\n '#2485cc',\r\n '#2485cc',\r\n '#2485cc',\r\n '#2486cd',\r\n '#2586cd',\r\n '#2587cd',\r\n '#2487cc',\r\n '#2486cd',\r\n '#2587cd',\r\n '#2587cd',\r\n '#2487ce',\r\n '#2588ce',\r\n '#2588ce',\r\n '#2588ce',\r\n '#2488cf',\r\n '#2588cf',\r\n '#2589ce',\r\n '#2589ce',\r\n '#2688cf',\r\n '#2589ce',\r\n '#2789cf',\r\n '#2889d0',\r\n '#2889d0',\r\n '#288ad0',\r\n '#2889d0',\r\n '#298ad0',\r\n '#2b8bd0',\r\n '#2a89cf',\r\n '#2989cf',\r\n '#2b8bcf',\r\n '#2c8cd0',\r\n '#2c8ccf',\r\n '#2d8cd0',\r\n '#2d8cd0',\r\n '#2c8bd0',\r\n '#2e8cd1',\r\n '#2e8cd1',\r\n '#2e8cd0',\r\n '#2e8cd1',\r\n '#2e8dd0',\r\n '#308ed0',\r\n '#318ed1',\r\n '#318dd1',\r\n '#308dd0',\r\n '#308dd0',\r\n '#318fd0',\r\n '#338fd1',\r\n '#328dd1',\r\n '#338ed1',\r\n '#348fd1',\r\n '#348fd2',\r\n '#338ed2',\r\n '#338ed1',\r\n '#348fd1',\r\n '#3590d1',\r\n '#368fd2',\r\n '#3690d1',\r\n '#3690d1',\r\n '#3690d2',\r\n '#3791d3',\r\n '#3791d3',\r\n '#3791d2',\r\n '#3790d2',\r\n '#3790d2',\r\n '#3892d2',\r\n '#3892d2',\r\n '#3992d2',\r\n '#3a92d3',\r\n '#3a93d3',\r\n '#3b92d3',\r\n '#3b92d3',\r\n '#3a93d3',\r\n '#3a93d3',\r\n '#3b93d3',\r\n '#3c94d3',\r\n '#3d94d3',\r\n '#3d94d3',\r\n '#3d94d3',\r\n '#3d93d3',\r\n '#3f93d4',\r\n '#3f96d4',\r\n '#3f96d4',\r\n '#3e95d3',\r\n '#3e96d3',\r\n '#3f96d4',\r\n '#4095d4',\r\n '#4095d4',\r\n '#3f96d4',\r\n '#3f96d4',\r\n '#4096d4',\r\n '#4297d4',\r\n '#4197d4',\r\n '#4096d3',\r\n '#4196d3',\r\n '#4397d5',\r\n '#4398d5',\r\n '#4397d5',\r\n '#4398d5',\r\n '#4398d5',\r\n '#4499d5',\r\n '#4499d5',\r\n '#4499d5',\r\n '#4499d5',\r\n '#459ad5',\r\n '#459ad4',\r\n '#459ad4',\r\n '#459ad4',\r\n '#459ad5',\r\n '#459ad6',\r\n '#469bd6',\r\n '#469bd5',\r\n '#469ad5',\r\n '#469ad5',\r\n '#479bd5',\r\n '#499cd6',\r\n '#499cd6',\r\n '#499cd5',\r\n '#499cd5',\r\n '#499cd6',\r\n '#4a9dd6',\r\n '#4a9fd6',\r\n '#4a9ed6',\r\n '#4a9ed5',\r\n '#4a9ed6',\r\n '#4b9ed7',\r\n '#4b9ed7',\r\n '#4b9fd7',\r\n '#4a9ed7',\r\n '#4b9ed7',\r\n '#4ca0d7',\r\n '#4c9ed7',\r\n '#4b9ed7',\r\n '#4c9fd7',\r\n '#4da0d7',\r\n '#4da0d8',\r\n '#4da0d8',\r\n '#4c9fd8',\r\n '#4c9fd7',\r\n '#4da0d7',\r\n '#4ea2d8',\r\n '#4ea2d8',\r\n '#4ea1d8',\r\n '#4ea2d7',\r\n '#4ea2d7',\r\n '#4ea2d8',\r\n '#4ea2d7',\r\n '#4ea2d7',\r\n '#4fa3d9',\r\n '#50a3d9',\r\n '#50a3d8',\r\n '#4fa2d8',\r\n '#4fa3d8',\r\n '#51a3d8',\r\n '#51a3d8',\r\n '#51a3d9',\r\n '#51a3d8',\r\n '#51a3d8',\r\n '#52a4d9',\r\n '#52a5da',\r\n '#52a4d9',\r\n '#52a4d9',\r\n '#52a5da',\r\n '#53a5da',\r\n '#53a5da',\r\n '#53a5da',\r\n '#54a5da',\r\n '#54a5da',\r\n '#54a6d9',\r\n '#54a7d9',\r\n '#54a6d9',\r\n '#54a7d9',\r\n '#55a8da',\r\n '#55a8da',\r\n '#56a8db',\r\n '#55a7da',\r\n '#56a8db',\r\n '#57a8db',\r\n '#56a7da',\r\n '#57a8db',\r\n '#57a8db',\r\n '#57a8db',\r\n '#58a9da',\r\n '#58aada',\r\n '#57a9da',\r\n '#57a8da',\r\n '#57a9da',\r\n '#58aadb',\r\n '#59aadb',\r\n '#59aadb',\r\n '#59aadc',\r\n '#59abdb',\r\n '#5aacdb',\r\n '#5aabdb',\r\n '#59abdb',\r\n '#5babdb',\r\n '#5babdc',\r\n '#5babdc',\r\n '#5aabdc',\r\n '#5baddc',\r\n '#5bacdc',\r\n '#5cacdc',\r\n '#5bacdc',\r\n '#5caedc',\r\n '#5caddc',\r\n '#5cacdc',\r\n '#5caddc',\r\n '#5dafdc',\r\n '#5dafdc',\r\n '#5caedc',\r\n '#5daedc',\r\n '#5eb0dd',\r\n '#5db0dd',\r\n '#5eafdd',\r\n '#5eafdd',\r\n '#5fb1dd',\r\n '#5fb1dd',\r\n '#5fafdd',\r\n '#5fafdd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#60b1dd',\r\n '#61b1de',\r\n '#61b1de',\r\n '#61b1de',\r\n '#61b1de',\r\n '#61b2dd',\r\n '#61b2dd',\r\n '#62b2dd',\r\n '#62b2de',\r\n '#62b2de',\r\n '#62b2de',\r\n '#63b3dd',\r\n '#63b4de',\r\n '#63b4df',\r\n '#63b4df',\r\n '#63b3df',\r\n '#63b4de',\r\n '#63b4de',\r\n '#63b4df',\r\n '#63b5df',\r\n '#64b6df',\r\n '#64b6df',\r\n '#64b6df',\r\n '#64b5de',\r\n '#65b6e0',\r\n '#65b7e0',\r\n '#65b7df',\r\n '#65b6e0',\r\n '#65b6e0',\r\n '#65b6df',\r\n '#66b6df',\r\n '#67b7e0',\r\n '#67b8e0',\r\n '#66b8df',\r\n '#66b8e0',\r\n '#67b8df',\r\n '#67b7df',\r\n '#67b8e0',\r\n '#67b9e0',\r\n '#67b8e0',\r\n '#68b9e1',\r\n '#69bae1',\r\n '#69bae1',\r\n '#68b8e0',\r\n '#69b9e0',\r\n '#69bae0',\r\n '#69bae0',\r\n '#6abbe1',\r\n '#69bbe0',\r\n '#69bbe0',\r\n '#69bbe1',\r\n '#6abce1',\r\n '#6abbe0',\r\n '#6abbe0',\r\n '#6abbe1',\r\n '#6abce1',\r\n '#6abce2',\r\n '#6bbde2',\r\n '#6bbee1',\r\n '#6cbde2',\r\n '#6cbde2',\r\n '#6bbde1',\r\n '#6cbde1',\r\n '#6cbde2',\r\n '#6cbde2',\r\n '#6cbde2',\r\n '#6cbee2',\r\n '#6cbee2',\r\n '#6dbfe2',\r\n '#6dbfe2',\r\n '#6dbee2',\r\n '#6ebee3',\r\n '#6fbfe3',\r\n '#6fc0e3',\r\n '#6fc0e2',\r\n '#6ebfe3',\r\n '#6ec0e3',\r\n '#6ec1e3',\r\n '#6ec1e3',\r\n '#6ec1e4',\r\n '#6fc0e3',\r\n '#70c1e3',\r\n '#70c2e3',\r\n '#70c2e4',\r\n '#6fc1e3',\r\n '#6fc1e3',\r\n '#70c2e3',\r\n '#71c2e4',\r\n '#70c3e4',\r\n '#70c2e4',\r\n '#70c2e4',\r\n '#72c4e4',\r\n '#72c4e4',\r\n '#71c2e4',\r\n '#71c2e4',\r\n '#73c4e4',\r\n '#72c3e4',\r\n '#72c3e4',\r\n '#72c3e4',\r\n '#72c4e4',\r\n '#73c5e4',\r\n '#73c5e4',\r\n '#72c5e4',\r\n '#73c6e4',\r\n '#73c5e4',\r\n '#73c6e4',\r\n '#74c7e5',\r\n '#73c6e4',\r\n '#75c8e5',\r\n '#74c7e5',\r\n '#74c7e5',\r\n '#74c6e5',\r\n '#75c6e5',\r\n '#76c7e5',\r\n '#75c7e5',\r\n '#76c8e5',\r\n '#75c8e5',\r\n '#75c8e6',\r\n '#76c8e6',\r\n '#77c8e5',\r\n '#76c9e6',\r\n '#76c9e5',\r\n '#76c9e5',\r\n '#77cae6',\r\n '#77c9e6',\r\n '#77c9e6',\r\n '#77c9e6',\r\n '#78cae6',\r\n '#77cbe7',\r\n '#77cbe7',\r\n '#78cbe7',\r\n '#78cbe7',\r\n '#79cae6',\r\n '#78cae6',\r\n '#78cbe7',\r\n '#78cae6',\r\n '#79cae6',\r\n '#7acce6',\r\n '#7acde7',\r\n '#7acbe7',\r\n '#79cce6',\r\n '#79cee7',\r\n '#7acee8',\r\n '#7acde8',\r\n '#79cde7',\r\n '#7acde7',\r\n '#7bcee8',\r\n '#7acee7',\r\n '#7acfe7',\r\n '#7acee7',\r\n '#7ccee8',\r\n '#7bcee7',\r\n '#7bcfe7',\r\n '#7bcfe7',\r\n '#7bcfe8',\r\n '#7dd0e9',\r\n '#7dd0e9',\r\n '#7ccfe8',\r\n '#7ccfe8',\r\n '#7cd1e8',\r\n '#7cd1e8',\r\n '#7cd0e8',\r\n '#7cd0e8',\r\n '#7dd1e8',\r\n '#7dd2e9',\r\n '#7dd2e9',\r\n '#7ed2e9',\r\n '#7dd1e8',\r\n '#7dd2e8',\r\n '#7fd3ea',\r\n '#7fd3ea',\r\n '#7ed3e9',\r\n '#7ed2ea',\r\n '#80d2ea',\r\n '#7fd3e9',\r\n '#7fd2e9',\r\n '#80d4ea',\r\n '#80d5ea',\r\n '#7fd4e9',\r\n '#7fd4e9',\r\n '#80d4e9',\r\n '#81d6ea',\r\n '#81d6eb',\r\n '#80d4ea',\r\n '#80d5ea',\r\n '#80d6ea',\r\n '#80d5ea',\r\n '#81d6ea',\r\n '#81d6ea',\r\n '#82d6ea',\r\n '#82d7ea',\r\n '#82d8ea',\r\n '#81d6ea',\r\n '#81d6ea',\r\n '#82d8ea',\r\n '#82d7eb',\r\n '#82d8eb',\r\n '#82d8eb',\r\n '#82d7eb',\r\n '#83d9eb',\r\n '#84d9ec',\r\n '#84d9ec',\r\n '#83d8eb',\r\n '#83d8eb',\r\n '#85d8eb',\r\n '#85d9eb',\r\n '#84daeb',\r\n '#85daeb',\r\n '#85dbec',\r\n '#85dbec',\r\n '#84daec',\r\n '#85dbec',\r\n '#86dbec',\r\n '#86dbec',\r\n '#85dbec',\r\n '#85dbec',\r\n '#85dbec',\r\n '#85dcec',\r\n '#86ddec',\r\n '#86dceb',\r\n '#86dceb',\r\n '#87ddec',\r\n '#86dced',\r\n '#86dcec',\r\n '#86deec',\r\n '#86deed',\r\n '#87ddec',\r\n '#87deed',\r\n '#87dfec',\r\n '#87deec',\r\n '#88deed',\r\n '#89deec',\r\n '#88deec',\r\n '#88dfed',\r\n '#88dfec',\r\n '#89e0ed',\r\n '#89e0ee',\r\n '#88dfee',\r\n '#89e0ee',\r\n '#88dfed',\r\n '#88dfed',\r\n '#8ae1ee',\r\n '#89e1ed',\r\n '#8ae2ee',\r\n '#8ae2ee',\r\n '#8ae2ee',\r\n '#8ae1ee',\r\n '#8be3ee',\r\n '#8be3ee',\r\n '#8be2ee',\r\n '#8be2ee',\r\n '#8be2ef',\r\n '#8ce2ef',\r\n '#8ce3ef',\r\n '#8be3ee',\r\n '#8ce4ef',\r\n '#8be3ef',\r\n '#8be3ee',\r\n '#8de5ef',\r\n '#8de4ef',\r\n '#8de4ef',\r\n '#8de5ef',\r\n '#8ce4ef',\r\n '#8de4ef',\r\n '#8de4ef',\r\n '#8de4f0',\r\n '#8ee6f0',\r\n '#8ee6f0',\r\n '#8ee6ef',\r\n '#8ee6ef',\r\n '#8de7ef',\r\n '#8de6ef',\r\n '#8fe7f0',\r\n '#8fe8f1',\r\n '#8ee6ef',\r\n '#8ee6ef',\r\n '#8ee8f1',\r\n '#8fe8f1',\r\n '#8fe7f0',\r\n '#90e8f1',\r\n '#90e8f1',\r\n '#8fe8f0',\r\n '#90eaf1',\r\n '#8fe9f0',\r\n '#8fe9f0',\r\n '#90eaf1',\r\n '#90eaf1',\r\n '#91eaf1',\r\n '#91eaf1',\r\n '#91eaf1',\r\n '#92ebf2',\r\n '#91eaf1',\r\n ],\r\n nullColor: 'pink',\r\n}\r\n\r\nexport const gradients: Record = {\r\n [ScaleId.IntradayReduced]: redGreenGradient,\r\n [ScaleId.DayPerf]: redGreenGradient,\r\n _5: redGreenGradient,\r\n _10: redGreenGradient,\r\n _15: redGreenGradient,\r\n _20: redGreenGradient,\r\n _25: redGreenGradient,\r\n _relvol: blueGradient,\r\n _pe: greenRedGradient,\r\n _fpe: greenRedGradient,\r\n _peg: greenRedGradient,\r\n _ps: greenRedGradient,\r\n _pb: greenRedGradient,\r\n _div: greenGradient,\r\n _eps5y: redGreenGradient,\r\n _short: redGradient,\r\n _rec: redGreenGradient,\r\n _earndate: earningsGradient,\r\n _portfolioPct: redGreenGradient,\r\n _portfolioUsd: redGreenGradient,\r\n _percentHundred: redGreenGradient,\r\n}\r\n\r\nexport const bubbleGradients: Record = {\r\n [ScaleId.IntradayReduced]: redGreenGradientBubbles,\r\n [ScaleId.DayPerf]: redGreenGradientBubbles,\r\n _5: redGreenGradientBubbles,\r\n _10: redGreenGradientBubbles,\r\n _15: redGreenGradientBubbles,\r\n _20: redGreenGradientBubbles,\r\n _25: redGreenGradientBubbles,\r\n _relvol: blueGradientBubbles,\r\n _pe: redGreenGradientBubbles,\r\n _fpe: redGreenGradientBubbles,\r\n _peg: redGreenGradientBubbles,\r\n _ps: redGreenGradientBubbles,\r\n _pb: redGreenGradientBubbles,\r\n _div: redGreenGradientBubbles,\r\n _eps5y: redGreenGradientBubbles,\r\n _short: redGreenGradientBubbles, // TODO red skala\r\n _rec: redGreenGradientBubbles,\r\n _earndate: redGreenGradientBubbles,\r\n _portfolioPct: redGreenGradientBubbles,\r\n _portfolioUsd: redGreenGradientBubbles,\r\n _percentHundred: redGreenGradientBubbles,\r\n}\r\n\r\nexport const gradientSmall = redGreenGradientSmall\r\n","import { HTMLAttributeReferrerPolicy } from 'react'\r\n\r\nimport { encodeQueryString } from '../queryString'\r\n\r\nconst DEFAULT_OVERLAYS =\r\n '&o[0][ot]=sma&o[0][op]=50&o[0][oc]=FF8F33C6&o[1][ot]=sma&o[1][op]=200&o[1][oc]=DCB3326D&o[2][ot]=patterns&o[2][op]=&o[2][oc]=000'\r\n\r\nexport function getHoverChartUrl(\r\n ticker: string,\r\n escaped: boolean = false,\r\n timeframe = FinvizSettings.hoverCharts?.stock?.timeframe,\r\n dateRange = FinvizSettings.hoverCharts?.stock?.dateRange\r\n): string {\r\n const theme = FinvizSettings.hasDarkTheme ? 'd' : undefined\r\n const overlays = FinvizSettings.hasUserPremium && FinvizSettings.hoverCharts?.stock?.patterns ? DEFAULT_OVERLAYS : ''\r\n const query = encodeQueryString({\r\n cs: 'm',\r\n t: ticker,\r\n tf: timeframe ?? 'd',\r\n ct: 'candle_stick',\r\n r: dateRange,\r\n tm: theme,\r\n })\r\n\r\n let imgUrl = `${FinvizSettings.nodeChartsDomain}/chart.ashx?${query}${overlays}`\r\n\r\n if (escaped) {\r\n // \"Escaping\" [ and ] because of how boxover.js works\r\n imgUrl = imgUrl.replace(/\\[/g, '[[').replace(/]/g, ']]')\r\n }\r\n return imgUrl\r\n}\r\n\r\nexport function getHoverChartDimensions() {\r\n switch (FinvizSettings.hoverCharts?.stock?.timeframe) {\r\n case 'i3':\r\n case 'i15':\r\n return { width: 584, height: 180 }\r\n case 'i5':\r\n return { width: 376, height: 180 }\r\n case 'd':\r\n if (FinvizSettings.hoverCharts?.stock?.patterns) return { width: 464, height: 230 }\r\n return { width: 324, height: 180 }\r\n default:\r\n return { width: 324, height: 180 }\r\n }\r\n}\r\n\r\nexport function getReferrerPolicy(): HTMLAttributeReferrerPolicy {\r\n return 'no-referrer-when-downgrade'\r\n}\r\n\r\nexport function getHoverChartImg(\r\n ticker: string,\r\n escaped: boolean = false,\r\n timeframe = FinvizSettings.hoverCharts?.stock?.timeframe,\r\n dateRange?: string\r\n) {\r\n const chartSize = getHoverChartDimensions()\r\n const referrerPolicy = getReferrerPolicy()\r\n const url = getHoverChartUrl(ticker, escaped, timeframe, dateRange)\r\n const srcSet = getSrcSet(url)\r\n const srcsetString = srcSet?.length ? ` srcset='${srcSet}'` : ''\r\n\r\n return {\r\n img: ``,\r\n ...chartSize,\r\n }\r\n}\r\n\r\nexport function getSrcSet(url: string) {\r\n // You must keep a space after , for refresh to work\r\n return `${url} 1x, ${url}&sf=2 2x`\r\n}\r\n","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","export enum AdsProvider {\r\n None,\r\n InvestingChannel,\r\n Freestar,\r\n}\r\n\r\nexport function getAdsProvider() {\r\n if (FinvizSettings.hasUserPremium) return AdsProvider.None\r\n\r\n if (FinvizSettings.adsProvider === 2) {\r\n return AdsProvider.Freestar\r\n }\r\n\r\n return AdsProvider.InvestingChannel\r\n}\r\n\r\n/**\r\n * Tracks virtual page views to google analytics and freestar\r\n */\r\nexport function trackPageView(props: { pathname?: string; query?: string; freestarPageView?: boolean }) {\r\n const { pathname = window.location.pathname, query = window.location.search, freestarPageView = true } = props\r\n\r\n window.gtag?.('set', 'page_path', `${pathname}${query.length ? '?' : ''}${query.replace(/^\\?/, '')}`)\r\n window.gtag?.('event', 'page_view')\r\n\r\n if (freestarPageView && getAdsProvider() === AdsProvider.Freestar) {\r\n window.freestar?.queue.push(() => freestar.trackPageview())\r\n }\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonRoundingType, ButtonSizeType, ButtonThemeType } from '../button'\r\nimport { ButtonGroup, ButtonGroupProps } from '../button-group'\r\nimport { SelectItem } from '../select/types'\r\n\r\nexport type ButtonSwitchItem = Pick, 'value' | 'label' | 'disabled'>\r\n\r\nexport interface ButtonSwitchProps> extends ButtonGroupProps {\r\n /**\r\n * Label to display above the select\r\n */\r\n label?: string\r\n\r\n /**\r\n * Class names for label\r\n */\r\n labelClassNames?: string\r\n\r\n /**\r\n * Array of items to display as button options\r\n */\r\n items: ItemType[]\r\n\r\n /**\r\n * Currently selected value\r\n */\r\n value?: ValueType\r\n\r\n /**\r\n * Default value when uncontrolled\r\n */\r\n defaultValue?: ValueType\r\n\r\n /**\r\n * Callback when item changes. Called for both controlled and uncontrolled selects\r\n */\r\n onChange?: (value: ItemType) => void\r\n\r\n /**\r\n * If applied styles will be as if the component was enabled but clicking buttons won't do anything\r\n */\r\n readonly?: boolean\r\n\r\n /**\r\n * Optional className for the ButtonGroup wrapper\r\n */\r\n className?: string\r\n\r\n /**\r\n * Set the button theme when it is selected\r\n */\r\n activeTheme?: ButtonThemeType\r\n\r\n /**\r\n * Size of the button\r\n *\r\n * @default \"regular\"\r\n */\r\n size?: ButtonSizeType\r\n\r\n /**\r\n * Data test id\r\n *\r\n * @default \"\"\r\n */\r\n 'data-testid'?: string\r\n\r\n groupRounding?: ButtonRoundingType\r\n}\r\n\r\nexport function ButtonSwitch>(\r\n props: Omit, 'children'>\r\n) {\r\n const {\r\n items,\r\n value: controlledValue,\r\n label,\r\n defaultValue,\r\n onChange,\r\n className = 'flex p-0.5',\r\n size,\r\n labelClassNames,\r\n rounding = 'regular',\r\n groupRounding = 'regular',\r\n activeTheme = 'blue',\r\n readonly = false,\r\n ...restProps\r\n } = props\r\n const [internalValue, setInternalValue] = React.useState(defaultValue)\r\n const value = controlledValue !== undefined ? controlledValue : internalValue\r\n\r\n const handleChange = React.useCallback(\r\n (newValue: ItemType) => {\r\n setInternalValue(newValue.value)\r\n onChange?.(newValue)\r\n },\r\n [onChange]\r\n )\r\n\r\n return (\r\n
\r\n \r\n {items.map((option, index) => (\r\n handleChange(option)}\r\n >\r\n {option.label}\r\n \r\n ))}\r\n \r\n {label && {label}}\r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { ForwardedRef, HTMLProps, PropsWithChildren, ReactNode, forwardRef } from 'react'\r\n\r\nimport { Icon } from './icon'\r\n\r\nexport enum ColorVariant {\r\n violet = 'violet',\r\n emerald = 'emerald',\r\n orange = 'orange',\r\n teal = 'teal',\r\n pink = 'pink',\r\n lime = 'lime',\r\n purple = 'purple',\r\n green = 'green',\r\n yellow = 'yellow',\r\n blue = 'blue',\r\n red = 'red',\r\n gray = 'gray',\r\n default = 'default',\r\n darkGray = 'darkGray',\r\n}\r\n\r\nexport enum CheckboxSize {\r\n none = '', // Do not set fixed size\r\n small = 'min-h-6 text-2xs', // 24px\r\n regular = 'min-h-7 text-sm', // 28px\r\n}\r\nexport type CheckboxSizeType = keyof typeof CheckboxSize\r\n\r\ninterface CheckboxProps extends Omit, 'label' | 'size'> {\r\n /**\r\n * Text that gets displayed on the right side of the checkbox\r\n */\r\n label?: ReactNode\r\n\r\n checked: boolean\r\n\r\n /**\r\n * Size of the checkbox\r\n *\r\n * @default \"regular\"\r\n */\r\n size?: CheckboxSizeType\r\n\r\n /**\r\n * Color of the checkbox\r\n *\r\n * @default \"default\"\r\n */\r\n color?: ColorVariant\r\n}\r\n\r\nfunction CheckboxComponent(\r\n {\r\n className,\r\n label,\r\n size = 'regular',\r\n color = ColorVariant.default,\r\n children,\r\n ...props\r\n }: PropsWithChildren,\r\n ref: ForwardedRef\r\n) {\r\n const checked = props.checked ?? props.defaultChecked\r\n\r\n return (\r\n \r\n
\r\n \r\n {checked && (\r\n \r\n )}\r\n
\r\n {label ?? children}\r\n \r\n )\r\n}\r\n\r\nexport const Checkbox = forwardRef(CheckboxComponent)\r\n","import classnames from 'classnames'\r\nimport { HTMLProps, PropsWithChildren, memo, useCallback, useLayoutEffect, useRef, useState } from 'react'\r\n\r\nexport interface Interaction {\r\n left: number\r\n top: number\r\n}\r\n\r\n/**\r\n * Clamp value between two bounds\r\n */\r\nfunction clamp(num: number, min = 0, max = 1) {\r\n return num > max ? max : num < min ? min : num\r\n}\r\n\r\n/**\r\n * Check if an event was triggered by touch\r\n */\r\nfunction isTouch(event: MouseEvent | TouchEvent): event is TouchEvent {\r\n return 'touches' in event\r\n}\r\n\r\n/**\r\n * Returns a relative position of the pointer inside the node's bounding box\r\n */\r\nfunction getRelativePosition(node: HTMLDivElement, event: MouseEvent | TouchEvent): Interaction {\r\n const rect = node.getBoundingClientRect()\r\n\r\n // Get user's pointer position from `touches` array if it's a `TouchEvent`\r\n const pointer = isTouch(event) ? event.touches[0] : (event as MouseEvent)\r\n\r\n return {\r\n left: clamp((pointer.pageX - (rect.left + window.pageXOffset)) / rect.width),\r\n top: clamp((pointer.pageY - (rect.top + window.pageYOffset)) / rect.height),\r\n }\r\n}\r\n\r\n/**\r\n * Browsers introduced an intervention, making touch events passive by default.\r\n * This workaround removes `preventDefault` call from the touch handlers.\r\n * @see https://github.com/facebook/react/issues/19651\r\n */\r\nfunction preventDefaultMove(event: MouseEvent | TouchEvent) {\r\n !isTouch(event) && event.preventDefault()\r\n}\r\n\r\ninterface Props {\r\n onMove: (interaction: Interaction) => void\r\n onKey: (offset: Interaction) => void\r\n}\r\n\r\nfunction DraggablePickerComponent({\r\n onMove,\r\n onKey,\r\n className,\r\n ...props\r\n}: PropsWithChildren & HTMLProps) {\r\n const container = useRef(null)\r\n const hasTouched = useRef(false)\r\n const [isDragging, setDragging] = useState(false)\r\n\r\n /**\r\n * Prevent mobile browsers from handling mouse events (conflicting with touch ones).\r\n * If we detected a touch interaction before, we prefer reacting to touch events only.\r\n */\r\n const isValid = useRef((event: MouseEvent | TouchEvent): boolean => {\r\n if (hasTouched.current && !isTouch(event)) return false\r\n if (!hasTouched.current) hasTouched.current = isTouch(event)\r\n return true\r\n })\r\n\r\n const handleMove = useCallback(\r\n (event: MouseEvent | TouchEvent) => {\r\n preventDefaultMove(event)\r\n\r\n // If user moves the pointer outside of the window or iframe bounds and release it there,\r\n // `mouseup`/`touchend` won't be fired. In order to stop the picker from following the cursor\r\n // after the user has moved the mouse/finger back to the document, we check `event.buttons`\r\n // and `event.touches`. It allows us to detect that the user is just moving his pointer\r\n // without pressing it down\r\n const isDown = isTouch(event) ? event.touches.length > 0 : event.buttons > 0\r\n\r\n if (isDown && container.current) {\r\n onMove(getRelativePosition(container.current, event))\r\n } else {\r\n setDragging(false)\r\n }\r\n },\r\n [onMove]\r\n )\r\n\r\n const handleMoveStart = useCallback(\r\n ({ nativeEvent }: React.MouseEvent | React.TouchEvent) => {\r\n preventDefaultMove(nativeEvent)\r\n\r\n if (!isValid.current(nativeEvent)) return\r\n\r\n // The node/ref must actually exist when user start an interaction.\r\n // We won't suppress the ESLint warning though, as it should probably be something to be aware of.\r\n onMove(getRelativePosition(container.current!, nativeEvent))\r\n setDragging(true)\r\n },\r\n [onMove]\r\n )\r\n\r\n const handleKeyDown = useCallback(\r\n (event: React.KeyboardEvent) => {\r\n const keyCode = event.which || event.keyCode\r\n\r\n // Ignore all keys except arrow ones\r\n if (keyCode < 37 || keyCode > 40) return\r\n // Do not scroll page by arrow keys when document is focused on the element\r\n event.preventDefault()\r\n // Send relative offset to the parent component.\r\n // We use codes (37←, 38↑, 39→, 40↓) instead of keys ('ArrowRight', 'ArrowDown', etc)\r\n // to reduce the size of the library\r\n onKey({\r\n left: keyCode === 39 ? 0.05 : keyCode === 37 ? -0.05 : 0,\r\n top: keyCode === 40 ? 0.05 : keyCode === 38 ? -0.05 : 0,\r\n })\r\n },\r\n [onKey]\r\n )\r\n\r\n const handleMoveEnd = useCallback(() => setDragging(false), [])\r\n\r\n const toggleDocumentEvents = useCallback(\r\n (state: boolean) => {\r\n // add or remove additional pointer event listeners\r\n const toggleEvent = state ? window.addEventListener : window.removeEventListener\r\n toggleEvent(hasTouched.current ? 'touchmove' : 'mousemove', handleMove)\r\n toggleEvent(hasTouched.current ? 'touchend' : 'mouseup', handleMoveEnd)\r\n },\r\n [handleMove, handleMoveEnd]\r\n )\r\n\r\n useLayoutEffect(() => {\r\n toggleDocumentEvents(isDragging)\r\n return () => {\r\n isDragging && toggleDocumentEvents(false)\r\n }\r\n }, [isDragging, toggleDocumentEvents])\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const DraggablePicker = memo(DraggablePickerComponent)\r\n","interface PointerProps {\r\n className?: string\r\n top?: number\r\n left: number\r\n color: string\r\n}\r\n\r\nexport function Pointer({ color, left, top = 0.5 }: PointerProps) {\r\n return (\r\n \r\n
\r\n
\r\n )\r\n}\r\n","/**\r\n * Keep this file in sync with `app/utils/colors.ts` in charts repo\r\n * */\r\n\r\nexport interface RGBA {\r\n r: number\r\n g: number\r\n b: number\r\n a: number\r\n}\r\n\r\nexport interface HSVA {\r\n h: number\r\n s: number\r\n v: number\r\n a: number\r\n}\r\n\r\nexport interface HSLA {\r\n h: number\r\n s: number\r\n l: number\r\n a: number\r\n}\r\n\r\n/**\r\n * Convert Hex string to RGBA object.\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hexStringToRGBA(hexString: string): RGBA {\r\n const hexColor = removeHashSymbol(hexString)\r\n let r: string | number = 0\r\n let g: string | number = 0\r\n let b: string | number = 0\r\n let a: string | number = 255\r\n\r\n // 3 digits\r\n if (hexColor.length === 3 || hexColor.length === 4) {\r\n r = '0x' + hexColor[0] + hexColor[0]\r\n g = '0x' + hexColor[1] + hexColor[1]\r\n b = '0x' + hexColor[2] + hexColor[2]\r\n // Get channel if defined\r\n a = hexColor.length === 4 ? '0x' + hexColor[3] + hexColor[3] : a\r\n\r\n // 6 digits\r\n } else if (hexColor.length === 6 || hexColor.length === 8) {\r\n r = '0x' + hexColor[0] + hexColor[1]\r\n g = '0x' + hexColor[2] + hexColor[3]\r\n b = '0x' + hexColor[4] + hexColor[5]\r\n // Get channel if defined\r\n a = hexColor.length === 8 ? '0x' + hexColor[6] + hexColor[7] : a\r\n }\r\n\r\n return { r: Number(r), g: Number(g), b: Number(b), a: Math.min(Math.round((Number(a) / 255) * 100) / 100, 1) }\r\n}\r\n\r\n/**\r\n * Convert HEX string to HSVA color representation.\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n */\r\nexport function hexStringToHSVA(hexString: string) {\r\n return rgbaToHSVA(hexStringToRGBA(hexString))\r\n}\r\n\r\n/**\r\n * Convert HEX string to HSLA color representation.\r\n *\r\n * Input: color in hex3, hex4, hex6 or hex8 format (#fff)\r\n *\r\n * Output: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n */\r\nexport function hexStringToHSLA(hexString: string) {\r\n return rgbaToHSLA(hexStringToRGBA(hexString))\r\n}\r\n\r\n/**\r\n * Convert alpha value to hex value\r\n *\r\n * Input: [0,1]\r\n *\r\n * Output: alpha in HEX format\r\n */\r\nexport function alphaToHex(alpha: number) {\r\n return Math.max(Math.min(Math.round(alpha * 255), 255), 0)\r\n .toString(16)\r\n .padStart(2, '0')\r\n}\r\n\r\n/**\r\n * Convert RGBA color to HEX string.\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: color in hex6 or hex8 depending on whether or not alpha is enabled\r\n */\r\nexport function rgbaToHexString(color: RGBA, alpha = false) {\r\n const r = color.r.toString(16)\r\n const g = color.g.toString(16)\r\n const b = color.b.toString(16)\r\n const hexString = '#' + r.padStart(2, '0') + g.padStart(2, '0') + b.padStart(2, '0')\r\n\r\n if (!alpha || color.a === 1) {\r\n return hexString\r\n }\r\n\r\n return `${hexString}${alphaToHex(color.a)}`\r\n}\r\n\r\n/**\r\n * Convert HSVA object to HEX string\r\n *\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hsvaToHEXString(color: HSVA, alpha = false) {\r\n const rgbaColor = hsvaToRGBA(color)\r\n\r\n return rgbaToHexString(rgbaColor, alpha)\r\n}\r\n\r\n/**\r\n * Convert HSLA object to HEX string\r\n *\r\n * @see https://css-tricks.com/converting-color-spaces-in-javascript/\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hslaToHexString(color: HSLA, alpha = false) {\r\n const rgbaColor = hslaToRGBA(color)\r\n\r\n return rgbaToHexString(rgbaColor, alpha)\r\n}\r\n\r\n/**\r\n * Convert RGBA color to HSVA\r\n * @see https://stackoverflow.com/a/54070620/6662683\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n */\r\nexport function rgbaToHSVA(color: RGBA): HSVA {\r\n const r = color.r / 255\r\n const g = color.g / 255\r\n const b = color.b / 255\r\n\r\n const v = Math.max(r, g, b)\r\n const c = v - Math.min(r, g, b)\r\n const h = c && (v === r ? (g - b) / c : v === g ? 2 + (b - r) / c : 4 + (r - g) / c)\r\n\r\n return {\r\n h: 60 * (h < 0 ? h + 6 : h),\r\n s: v ? c / v : 0,\r\n v: v,\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert RGBA to HSLA\r\n * @see https://stackoverflow.com/a/54071699/6662683\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n */\r\nexport function rgbaToHSLA(color: RGBA): HSLA {\r\n const r = color.r / 255\r\n const g = color.g / 255\r\n const b = color.b / 255\r\n\r\n const v = Math.max(r, g, b)\r\n const c = v - Math.min(r, g, b)\r\n const f = 1 - Math.abs(v + v - c - 1)\r\n const h = c && (v === r ? (g - b) / c : v === g ? 2 + (b - r) / c : 4 + (r - g) / c)\r\n\r\n return {\r\n h: 60 * (h < 0 ? h + 6 : h),\r\n s: f ? c / f : 0,\r\n l: (v + v - c) / 2,\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSVA color to RGBA\r\n * @see https://stackoverflow.com/a/54024653/6662683\r\n *\r\n * Input: { h: [0,360], s: [0,1], v: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hsvaToRGBA(color: HSVA): RGBA {\r\n const f = (n: number, k = (n + color.h / 60) % 6) => color.v - color.v * color.s * Math.max(Math.min(k, 4 - k, 1), 0)\r\n\r\n return {\r\n r: Math.round(f(5) * 255),\r\n g: Math.round(f(3) * 255),\r\n b: Math.round(f(1) * 255),\r\n a: Math.round(color.a * 100) / 100,\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSLA color to RGBA\r\n * @see https://stackoverflow.com/a/54014428/6662683\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function hslaToRGBA(color: HSLA): RGBA {\r\n const a = color.s * Math.min(color.l, 1 - color.l)\r\n const f = (n: number, k = (n + color.h / 30) % 12) => color.l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)\r\n\r\n return {\r\n r: Math.round(f(0) * 255),\r\n g: Math.round(f(8) * 255),\r\n b: Math.round(f(4) * 255),\r\n a: color.a,\r\n }\r\n}\r\n\r\n/**\r\n * Convert RGBA color to rgba() string\r\n *\r\n * Input: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n *\r\n * Output: rgba(r, g, b, a)\r\n */\r\nexport function rgbaToRGBAString(color: RGBA) {\r\n return `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`\r\n}\r\n\r\n/**\r\n * Convert rgba() string to RGBA color\r\n *\r\n * Input: rgba(r, g, b, a)\r\n *\r\n * Output: { r: [0,255], g: [0,255], b: [0,255], a: [0,1]}\r\n */\r\nexport function rgbaStringToObject(color: string) {\r\n const colorParts = /^rgba?\\(([0-9]{1,3})[ ,]+([0-9]{1,3})[ ,]+([0-9]{1,3})[ ,]*([01].?[0-9]*)?\\)$/.exec(color)\r\n const [red, green, blue, alpha = '1'] = colorParts?.slice(1) || [0, 0, 0, 1].map(String)\r\n return {\r\n r: Number.parseInt(red),\r\n g: Number.parseInt(green),\r\n b: Number.parseInt(blue),\r\n a: Number.parseFloat(alpha),\r\n }\r\n}\r\n\r\n/**\r\n * Convert HSLA color to hsla() string\r\n *\r\n * Input: { h: [0,360], s: [0,1], l: [0,1], a: [0,1]}\r\n *\r\n * Output: hsla(h, s, l, a)\r\n */\r\nexport function hslaToHSLAString(color: HSLA) {\r\n return `hsla(${Math.round(color.h)}, ${Math.round(color.s * 10000) / 100}%, ${Math.round(color.l * 10000) / 100}%, ${\r\n color.a\r\n })`\r\n}\r\n\r\nexport function removeHashSymbol(strColor: string) {\r\n return strColor.replace(/#/g, '')\r\n}\r\n\r\n/**\r\n * Check if the param is a valid color by setting it as style\r\n */\r\nexport function isValidColor(strColor: string) {\r\n const isRgb = strColor.startsWith('rgba')\r\n const s = new Option().style\r\n\r\n s.color = isRgb ? strColor : `#${removeHashSymbol(strColor)}`\r\n\r\n return s.color !== ''\r\n}\r\n\r\n/**\r\n * Normalize color to be a hex value\r\n */\r\nexport function convertColorToHEX(strColor: string) {\r\n const isRgb = getIsRgb(strColor)\r\n\r\n if (isRgb) {\r\n return rgbaToHexString(rgbaStringToObject(strColor), true)\r\n }\r\n\r\n return strColor\r\n}\r\n\r\n/**\r\n * Returns true if color is rgb or rgba\r\n */\r\nexport function getIsRgb(strColor: string, isAlphaAllowed = true) {\r\n const rgbKeys = ['rgb']\r\n if (isAlphaAllowed) {\r\n rgbKeys.push('rgba')\r\n }\r\n return rgbKeys.some((startsWith) => strColor.startsWith(startsWith))\r\n}\r\n\r\n/**\r\n * Convert any color format to HSVA (internal color picker representation)\r\n */\r\nexport function getHSVAFromColor(strColor: string) {\r\n if (getIsRgb(strColor)) {\r\n return rgbaToHSVA(rgbaStringToObject(strColor))\r\n }\r\n\r\n return hexStringToHSVA(strColor)\r\n}\r\n\r\n/**\r\n * Stringify HSVA color representation into a output format\r\n */\r\nexport function stringifyHSVAColor(color: HSVA, output: 'rgba' | 'hex', canSelectAlpha?: boolean) {\r\n switch (output) {\r\n case 'rgba':\r\n return rgbaToRGBAString(hsvaToRGBA(color))\r\n default:\r\n return hsvaToHEXString(color, canSelectAlpha)\r\n }\r\n}\r\n\r\n/**\r\n * Get luma value from RGBA color using the Rec. 709 coefficients\r\n * @see https://en.wikipedia.org/wiki/Luma_%28video%29\r\n *\r\n * If luma is >= 165 the foreground color should be dark\r\n */\r\nexport function getLumaFromRGBA(color: RGBA) {\r\n return 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b\r\n}\r\n\r\n/**\r\n * Checks if luma is >= 165 or alpha < 0.3\r\n */\r\nexport function getIsColorTooLightOrTransparent(color: RGBA) {\r\n return getLumaFromRGBA(color) >= 165 || color.a < 0.5\r\n}\r\n\r\n/**\r\n * Set specific alpha for a hex color\r\n */\r\nexport function getHEXWithSpecificAplha(color: string, alpha = 1) {\r\n const rgbaColor = hexStringToRGBA(color)\r\n return rgbaToHexString({ ...rgbaColor, a: alpha }, true)\r\n}\r\n\r\n/**\r\n * Get rgba from valid color string\r\n */\r\nexport function getRGBAValueFromValidColorString(value: string) {\r\n if (getIsRgb(value)) return rgbaToRGBAString(rgbaStringToObject(value))\r\n return rgbaToRGBAString(hexStringToRGBA(value))\r\n}\r\n","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface LightnessProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nexport function Alpha({ color, onChange }: LightnessProps) {\r\n const changeLightness = useCallback((pos: Interaction) => onChange({ ...color, a: 1 - pos.left }), [onChange, color])\r\n\r\n const gradientPreview = useMemo(() => {\r\n const gradientFrom = hsvaToHEXString({ ...color, a: 1 })\r\n const gradientTo = hsvaToHEXString({ ...color, a: 0 }, true)\r\n\r\n return `linear-gradient(90deg, ${gradientFrom}, ${gradientTo})`\r\n // Don’t recalculate when alpha changes\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [color.h, color.s, color.v])\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n}\r\n","import { Icon } from '../icon'\r\nimport { HSVA, hexStringToHSVA } from './util'\r\n\r\nconst DEFAULT_COLORS = [\r\n { title: 'Rose', value: '#f43f5e' },\r\n { title: 'Pink', value: '#db2777' },\r\n { title: 'Fuchsia', value: '#c026d3' },\r\n { title: 'Purple', value: '#9333ea' },\r\n { title: 'Violet', value: '#7c3aed' },\r\n { title: 'Indigo', value: '#4f46e5' },\r\n { title: 'Blue', value: '#2563eb' },\r\n { title: 'Light Blue', value: '#0284c7' },\r\n { title: 'Cyan', value: '#0891b2' },\r\n { title: 'Teal', value: '#0d9488' },\r\n { title: 'Emerald', value: '#059669' },\r\n { title: 'Green', value: '#16a34a' },\r\n { title: 'Lime', value: '#65a30d' },\r\n { title: 'Yellow', value: '#eab308' },\r\n { title: 'Amber', value: '#d97706' },\r\n { title: 'Red', value: '#dc2626' },\r\n]\r\n\r\ninterface ColorItem {\r\n /**\r\n * Name of the color\r\n */\r\n title: string\r\n\r\n /**\r\n * Hex value\r\n */\r\n value: string\r\n}\r\n\r\ninterface ColorPaletteProps {\r\n /**\r\n * Current selected color in HEX format (supports HEX8 for alpha)\r\n */\r\n color: string\r\n\r\n /**\r\n * List of colors to display in the palette\r\n *\r\n * @default DEFAULT_COLORS\r\n */\r\n colors?: ColorItem[]\r\n\r\n /**\r\n * Callback when user picks a color\r\n */\r\n onChange: (color: string, originalColor: HSVA) => void\r\n}\r\n\r\nexport function ColorPalette({ color, colors = DEFAULT_COLORS, onChange }: ColorPaletteProps) {\r\n const lowerCaseColor = color.toLowerCase()\r\n\r\n return (\r\n
\r\n {colors.map((colorObj) => {\r\n const isSelected = lowerCaseColor.startsWith(colorObj.value)\r\n return (\r\n onChange(colorObj.value, hexStringToHSVA(colorObj.value))}\r\n >\r\n {isSelected && }\r\n
\r\n )\r\n })}\r\n
\r\n )\r\n}\r\n","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface HueSaturationProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nfunction getPositionFromHSLA(color: HSVA) {\r\n return {\r\n left: color.h / 360,\r\n top: 1 - color.s,\r\n }\r\n}\r\n\r\nexport function HueSaturation({ color, onChange }: HueSaturationProps) {\r\n const position = useMemo(() => getPositionFromHSLA(color), [color])\r\n\r\n const colorPreview = useMemo(() => hsvaToHEXString({ h: color.h, s: color.s, v: 1, a: 1 }), [color.h, color.s])\r\n\r\n const changeSaturation = useCallback(\r\n (pos: Interaction) =>\r\n onChange({\r\n h: Math.round(pos.left * 360),\r\n s: 1 - pos.top,\r\n v: 1,\r\n a: color.a,\r\n }),\r\n [color.a, onChange]\r\n )\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n}\r\n","import { useCallback, useMemo } from 'react'\r\n\r\nimport { DraggablePicker, Interaction } from './draggable'\r\nimport { Pointer } from './pointer'\r\nimport { HSVA, hsvaToHEXString } from './util'\r\n\r\ninterface LightnessProps {\r\n color: HSVA\r\n onChange: (color: HSVA) => void\r\n}\r\n\r\nexport function Lightness({ color, onChange }: LightnessProps) {\r\n const changeLightness = useCallback((pos: Interaction) => onChange({ ...color, v: 1 - pos.left }), [onChange, color])\r\n\r\n const colorPreview = useMemo(\r\n () => hsvaToHEXString({ h: color.h, s: color.s, v: color.v, a: 1 }),\r\n [color.h, color.s, color.v]\r\n )\r\n\r\n const gradientPreview = useMemo(() => {\r\n const gradientFrom = hsvaToHEXString({ h: color.h, s: color.s, v: 1, a: 1 })\r\n const gradientTo = hsvaToHEXString({ h: color.h, s: color.s, v: 0, a: 1 })\r\n\r\n return `linear-gradient(90deg, ${gradientFrom}, ${gradientTo})`\r\n }, [color.h, color.s])\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { Icon, IconNameType, isValidIconName } from '../icon'\r\nimport { getIsColorTooLightOrTransparent, hexStringToRGBA } from './util'\r\n\r\ninterface ColorPreviewProps {\r\n /**\r\n * Name of an icon or JSX.Element\r\n */\r\n icon?: JSX.Element | IconNameType\r\n\r\n /**\r\n * One or more colors to show in the preview\r\n */\r\n color: string | string[]\r\n\r\n /**\r\n * Wrapper classname\r\n */\r\n className?: string\r\n}\r\n\r\nexport function ColorPreview({ icon, color, className }: ColorPreviewProps) {\r\n const colors = Array.isArray(color) ? color : [color]\r\n const isTooLight = getIsColorTooLightOrTransparent(hexStringToRGBA(colors[0]))\r\n return (\r\n \r\n {icon && (\r\n
\r\n {isValidIconName(icon) ? (\r\n \r\n ) : (\r\n icon\r\n )}\r\n
\r\n )}\r\n {colors.map((color, index) => (\r\n //   has to be there because of a bug on safari which ignores h-full when empty element\r\n
\r\n  \r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React, { ForwardedRef, useCallback, useEffect, useState } from 'react'\r\n\r\nimport { Input, InputComponentProps } from '../input'\r\nimport { ColorPreview } from './color-preview'\r\nimport { ColorPickerProps } from './picker'\r\nimport * as colorUtil from './util'\r\n\r\ninterface PickerInputProps extends Omit {\r\n color: ColorPickerProps['color']\r\n onChange: ColorPickerProps['onChange']\r\n\r\n /*\r\n * Is color preview square visible\r\n *\r\n * @default true\r\n * */\r\n hasColorPreview?: boolean\r\n}\r\nexport const PickerInput = React.forwardRef(\r\n (\r\n { color, inputClass, hasColorPreview = true, onChange, ...props }: PickerInputProps,\r\n ref: ForwardedRef\r\n ) => {\r\n const [colorInput, setColorInput] = useState(colorUtil.removeHashSymbol(color))\r\n const isRgba = colorUtil.getIsRgb(colorInput)\r\n\r\n useEffect(() => {\r\n setColorInput(colorUtil.removeHashSymbol(color))\r\n }, [color])\r\n\r\n const handleColorInputChange = useCallback(\r\n (event: React.KeyboardEvent) => {\r\n const value = colorUtil.removeHashSymbol(event.currentTarget.value)\r\n const isRgba = value.startsWith('rgba')\r\n const colorValue = isRgba ? value : `#${value}`\r\n\r\n setColorInput(value)\r\n if ((value.length >= 6 || (isRgba && value.length >= 16)) && colorUtil.isValidColor(colorValue)) {\r\n onChange(colorValue, colorUtil.hexStringToHSVA(colorValue))\r\n }\r\n },\r\n [onChange]\r\n )\r\n return (\r\n \r\n {hasColorPreview && (\r\n
\r\n \r\n
\r\n )}\r\n {!isRgba && #}\r\n
\r\n }\r\n onChange={handleColorInputChange}\r\n />\r\n )\r\n }\r\n)\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport React, { ReactNode, useCallback, useEffect, useRef, useState } from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { Button } from '../button'\r\nimport { Popover, PopoverTrigger, usePopoverState } from '../popover'\r\nimport { Alpha } from './alpha'\r\nimport { ColorPalette } from './color-palette'\r\nimport { HueSaturation } from './hue-saturation'\r\nimport { Lightness } from './lightness'\r\nimport { PickerInput } from './picker-input'\r\nimport * as colorUtil from './util'\r\n\r\nexport interface ColorPickerProps {\r\n /**\r\n * The selected color in HEX format (supports HEX8 for alpha)\r\n */\r\n color: string\r\n\r\n /**\r\n * Whether or not the user is able to select custom color\r\n *\r\n * @default true\r\n */\r\n canSelectCustom?: boolean\r\n\r\n /**\r\n * Whether or not the user is able to change alpha channel. Only applicable\r\n * when `canSelectCustom` is true\r\n *\r\n * @default true\r\n */\r\n canSelectAlpha?: boolean\r\n\r\n /**\r\n * Sets the output format for the color picker\r\n *\r\n * @default 'hex'\r\n */\r\n outputFormat?: 'hex' | 'rgba'\r\n\r\n /**\r\n * Callback when user changes color. Use the second parameter to do color space\r\n * conversions otherwise the color could differ due to rounding\r\n */\r\n onChange: (color: string, originalColor: colorUtil.HSVA) => void\r\n\r\n /**\r\n * Callback when user clicks on a palette item. Used to close popover\r\n */\r\n onPaletteItemClick?: () => void\r\n}\r\n\r\nexport function ColorPicker({\r\n color,\r\n canSelectCustom = true,\r\n canSelectAlpha = true,\r\n outputFormat = 'hex',\r\n onChange,\r\n onPaletteItemClick,\r\n}: ColorPickerProps) {\r\n const cachedColor = useRef(color)\r\n const [hsvaColor, setColor] = useState(colorUtil.getHSVAFromColor(color))\r\n const popover = Ariakit.usePopoverContext()\r\n const input = popover?.useState('disclosureElement')\r\n\r\n /**\r\n * Update state if the color from outside changed\r\n */\r\n useEffect(() => {\r\n const currentColor = colorUtil.removeHashSymbol(cachedColor.current)\r\n const newColor = colorUtil.removeHashSymbol(color)\r\n\r\n if (currentColor === newColor || !colorUtil.isValidColor(newColor)) return\r\n\r\n cachedColor.current = color\r\n setColor(colorUtil.getHSVAFromColor(color))\r\n }, [color])\r\n\r\n /**\r\n * Handle color change\r\n * 1. update cache so we can correctly check when outside color updates\r\n * 2. Update internal color representation\r\n * 3. call onChange with string color\r\n */\r\n const onChangeCallback = useCallback(\r\n (color: colorUtil.HSVA) => {\r\n const stringColor = colorUtil.stringifyHSVAColor(color, outputFormat, canSelectAlpha)\r\n cachedColor.current = stringColor\r\n onChange(stringColor, color)\r\n setColor(color)\r\n },\r\n [onChange, canSelectAlpha, outputFormat]\r\n )\r\n\r\n const onSetCustomCodeClick = useCallback(() => {\r\n const value = prompt('Enter a color code')?.trim()\r\n\r\n if (!value) return\r\n\r\n const isValid = colorUtil.isValidColor(value)\r\n\r\n if (!isValid) {\r\n return alert('The code is not a valid color')\r\n }\r\n\r\n onChangeCallback(colorUtil.getHSVAFromColor(value))\r\n }, [onChangeCallback])\r\n\r\n return (\r\n
\r\n {canSelectCustom && (\r\n <>\r\n {isMobile() && (\r\n \r\n )}\r\n \r\n \r\n\r\n {canSelectAlpha && }\r\n \r\n )}\r\n\r\n \r\n {\r\n input?.focus({ preventScroll: true })\r\n onPaletteItemClick?.()\r\n onChangeCallback({ ...orignalColor, a: hsvaColor.a })\r\n }}\r\n />\r\n
\r\n \r\n )\r\n}\r\n\r\ninterface InputColorPickerProps extends ColorPickerProps {\r\n /**\r\n * Label for the input\r\n */\r\n label?: ReactNode\r\n inputDataTestId?: string\r\n}\r\n\r\nexport function InputColorPicker({ label, inputDataTestId, onChange, ...props }: InputColorPickerProps) {\r\n const popoverState = usePopoverState()\r\n const canSelectCustom = props.canSelectCustom !== false\r\n const isMobileDevice = isMobile()\r\n\r\n return (\r\n <>\r\n \r\n }\r\n />\r\n \r\n \r\n {\r\n if (canSelectCustom) return\r\n popoverState.hide()\r\n }}\r\n />\r\n \r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { Button, ButtonComponentProps, ButtonRounding, ButtonSizeType } from '../button'\r\nimport { ButtonGroup } from '../button-group'\r\nimport { IconNameType } from '../icon'\r\nimport { Popover, PopoverTrigger, usePopoverState } from '../popover'\r\nimport { ColorPreview } from './color-preview'\r\nimport { ColorPicker, ColorPickerProps } from './picker'\r\nimport { PickerInput } from './picker-input'\r\nimport * as colorUtil from './util'\r\n\r\ninterface MultiColorPickerProps extends ColorPickerProps {\r\n /**\r\n * Label for color text input\r\n *\r\n * @default undefined\r\n */\r\n colorInputLabel?: string\r\n}\r\n\r\nexport function MultiColorPicker({\r\n colorInputLabel,\r\n onChange,\r\n canSelectCustom = true,\r\n ...props\r\n}: MultiColorPickerProps) {\r\n const isMobileDevice = isMobile()\r\n\r\n return (\r\n <>\r\n {canSelectCustom && !isMobileDevice && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n {}} />\r\n \r\n \r\n )\r\n}\r\n\r\ninterface ColorTabButtonProps extends ButtonComponentProps {\r\n /*\r\n * Preview color\r\n * */\r\n color: string\r\n}\r\n\r\nexport function ColorTabButton({ color, children, ...props }: ColorTabButtonProps) {\r\n return (\r\n }\r\n {...props}\r\n >\r\n {children}\r\n \r\n )\r\n}\r\n\r\ntype ButtonColorProperties = { color: string; label: string }\r\n\r\ninterface ButtonColorPickerProps\r\n extends Omit {\r\n /**\r\n * Temporary prop to enable/disable multi picker funcionality,\r\n * in the future we'll only use secondaryColor prop to decide if the picker is multi picker or not\r\n *\r\n * @default undefined\r\n */\r\n isMultiPicker?: boolean\r\n\r\n /**\r\n * Button classname\r\n */\r\n className?: string\r\n\r\n /**\r\n * Array of objects with color and value\r\n */\r\n colors: ColorType[]\r\n\r\n /**\r\n * Color onchange callback\r\n */\r\n onChange: (colors: ColorType[], originalColor: colorUtil.HSVA) => void\r\n\r\n /**\r\n * Button size\r\n *\r\n * @default undefined\r\n */\r\n size?: ButtonSizeType\r\n /**\r\n * Label for color text input\r\n *\r\n * @default undefined\r\n */\r\n colorInputLabel?: string\r\n\r\n /**\r\n * Name of an icon or JSX.Element\r\n */\r\n icon?: JSX.Element | IconNameType\r\n\r\n /**\r\n * Identifier for e2e testing\r\n *\r\n * @default undefined\r\n */\r\n buttonPickerDataTestId?: string\r\n}\r\n\r\nexport function ButtonColorPicker({\r\n size,\r\n icon,\r\n colors,\r\n className,\r\n onChange,\r\n buttonPickerDataTestId,\r\n ...props\r\n}: ButtonColorPickerProps) {\r\n const popoverState = usePopoverState()\r\n const isOpen = popoverState.useState('open')\r\n const isMultiPicker = !!props.isMultiPicker && colors.length > 1\r\n const [activeColorIndex, setActiveColorIndex] = React.useState(0)\r\n const handleColorChange = React.useCallback(\r\n (color: string, originalColor: colorUtil.HSVA) => {\r\n onChange(\r\n colors.map((colorObject, index) => (index === activeColorIndex ? { ...colorObject, color } : colorObject)),\r\n originalColor\r\n )\r\n },\r\n [activeColorIndex, colors, onChange]\r\n )\r\n return (\r\n <>\r\n \r\n color)}\r\n className={classnames('h-full w-full', ButtonRounding.small)}\r\n />\r\n \r\n \r\n {isMultiPicker && (\r\n
\r\n \r\n {colors.map(({ color, label }, index) => (\r\n setActiveColorIndex(index)}\r\n >\r\n {label}\r\n \r\n ))}\r\n \r\n
\r\n )}\r\n \r\n
\r\n \r\n )\r\n}\r\n","import copy from 'copy-to-clipboard'\r\nimport React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { InputProps, Textarea } from '../input'\r\n\r\ninterface Props extends Pick {\r\n className?: string\r\n text: string\r\n bottomLeftContent?: React.ReactNode\r\n}\r\n\r\nexport const CopyToClipboard: React.FC = ({ className, label, text, bottomLeftContent }) => {\r\n const [isCopied, setIsCopied] = React.useState(false)\r\n\r\n const handleCopyToClipboard = React.useCallback(() => {\r\n setIsCopied(true)\r\n copy(text)\r\n }, [text])\r\n\r\n React.useEffect(() => {\r\n let timeout: number\r\n const resetTimer = () => {\r\n if (!timeout) return\r\n clearTimeout(timeout)\r\n }\r\n if (isCopied) {\r\n resetTimer()\r\n timeout = window.setTimeout(() => {\r\n setIsCopied(false)\r\n }, 2000)\r\n }\r\n\r\n return () => {\r\n resetTimer()\r\n }\r\n }, [isCopied])\r\n\r\n return (\r\n
\r\n e.currentTarget.select()}\r\n inputClass=\"h-12\"\r\n data-testid=\"copy-to-clipboard-textarea\"\r\n value={text}\r\n />\r\n
\r\n {bottomLeftContent &&
{bottomLeftContent}
}\r\n \r\n {isCopied ? 'Copied' : 'Copy'}\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { usePrevious } from '../../hooks/use-previous'\r\nimport { usePopoverPlacement } from '../../hooks/usePopoverPlacement'\r\nimport { blurWithoutScroll, focusWithoutScroll, preventDefault } from '../../util'\r\n\r\nenum DropdownRounding {\r\n none = '',\r\n regular = 'rounded-lg',\r\n}\r\n\r\nenum DropdownTheme {\r\n none = '',\r\n default = 'border border-primary bg-primary',\r\n}\r\n\r\ninterface StatelessDropdownProps\r\n extends Omit, 'ref'>,\r\n Pick {\r\n /**\r\n * Trigger button for the dropdown\r\n */\r\n trigger: JSX.Element | null\r\n\r\n /**\r\n * Disable interaction with other page elements when the dropdown is open\r\n *\r\n * @default true\r\n */\r\n modal?: boolean\r\n\r\n /**\r\n * When true, the dropdown will show when dropdown is hovered. Combine with\r\n * `backdrop={false}` to make the popover hide on mouse out\r\n */\r\n showOnHover?: boolean\r\n\r\n /**\r\n * Placement of the dropdown\r\n *\r\n */\r\n placement?: Ariakit.MenuProviderProps['placement']\r\n\r\n /**\r\n * Orientation in which the items are laid out. Changes which arrows control next/prev item\r\n *\r\n * @default vertical\r\n */\r\n orientation?: 'vertical' | 'horizontal'\r\n\r\n /**\r\n * Set rounding for the dropdown list\r\n *\r\n * @default regular\r\n */\r\n rounding?: keyof typeof DropdownRounding\r\n\r\n /**\r\n * Dropdown theme\r\n *\r\n * @default default\r\n */\r\n theme?: keyof typeof DropdownTheme\r\n\r\n /**\r\n * The amount of space between button and its popover\r\n *\r\n * @default 4\r\n */\r\n gutter?: number\r\n\r\n /**\r\n * Show backdrop on the dialog. Provide your own element if you want to add background or animation\r\n *\r\n */\r\n backdrop?: false | JSX.Element\r\n\r\n /**\r\n * Do not render the items when the popover is not visible\r\n *\r\n * @default true\r\n */\r\n unmountOnHide?: boolean\r\n\r\n /**\r\n * If true, the dropdown will overlay the trigger if necessary instead of going\r\n * out of bounds and overflowing\r\n */\r\n overlap?: boolean\r\n\r\n /**\r\n * Callback before the menu starts hiding. Event can be prevented which keeps the menu open\r\n * This callback isn’t called on backdrop click. Use `backdrop={
}` to react on backdrop clicks\r\n */\r\n onClose?: (ev: Event) => void\r\n\r\n /**\r\n * Used to provide virtual anchor, useful for context menu, etc\r\n */\r\n getAnchorRect?: () => { x: number; y: number }\r\n\r\n /**\r\n * Set which element gets focus when the dialog visibility changes. If `false`, the focus stays on the previous element.\r\n * Defaults to focusing without scrolling the page or keeping the focus on trigger if input-like.\r\n */\r\n autoFocusOnShow?: false | ((element: HTMLElement) => boolean)\r\n\r\n /**\r\n * Set which element gets focus when the dialog visibility changes. If `false`, the focus stays on the previous element.\r\n * Defaults to focusing without scrolling the page or keeping the focus on trigger if input-like.\r\n */\r\n autoFocusOnHide?: false | ((element: HTMLElement) => boolean)\r\n\r\n /**\r\n * Callback which is called when the dialog opens and all animations complete\r\n */\r\n onFullyOpen?: () => void\r\n\r\n /**\r\n * Callback which is called when the dialog closes and all animations complete\r\n */\r\n onFullyClosed?: () => void\r\n}\r\n\r\nexport const StatelessDropdown = React.forwardRef(function DropdownComponent(\r\n {\r\n trigger,\r\n modal = true,\r\n rounding = 'regular',\r\n theme = 'default',\r\n gutter,\r\n unmountOnHide = true,\r\n children,\r\n backdrop,\r\n showOnHover,\r\n hideOnInteractOutside,\r\n autoFocusOnShow,\r\n autoFocusOnHide,\r\n onFullyOpen,\r\n onFullyClosed,\r\n ...props\r\n }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const store = Ariakit.useMenuContext()\r\n const { placement, zIndex, updatePosition } = usePopoverPlacement(store)\r\n const isOpen = store?.useState('open')\r\n const [isFullyOpen, setIsFullyOpen] = React.useState(false)\r\n const isMounted = store?.useState('mounted')\r\n const wasMounted = usePrevious(isMounted)\r\n const menuGutter = gutter ?? (store?.parent ? 6 : 4)\r\n\r\n React.useEffect(() => {\r\n if (wasMounted && !isMounted) {\r\n onFullyClosed?.()\r\n }\r\n // We want to call it only on isMounted change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isMounted])\r\n\r\n return (\r\n <>\r\n {trigger && (\r\n \r\n )}\r\n }\r\n // Update zIndex when popover position changes\r\n updatePosition={updatePosition}\r\n // E2E tests don’t wait for transitions to complete and it could lead to bugs with other popover components (ResizeObserver loop exceeded)\r\n // or visual diffs due a screenshot being captured while the dropdown still in transition\r\n // If you encounter this problem, just do `cy.get('[data-fully-open=true]').should('exist')` before continuing to wait for the dropdown\r\n data-fully-open={isFullyOpen}\r\n className={classNames(\r\n props.className,\r\n zIndex,\r\n DropdownRounding[rounding],\r\n DropdownTheme[theme],\r\n 'custom-scrollbar absolute flex flex-col overflow-hidden shadow-modal outline-none dark:shadow-modal-dark',\r\n // These are set by popper, we just need to make sure we don’t encroach on the safe insets\r\n 'min-w-[--popover-anchor-width] max-w-[--popover-available-width]',\r\n // Animations\r\n 'opacity-0 transition duration-[250ms] data-[enter]:translate-y-0 data-[enter]:opacity-100',\r\n {\r\n // When in combobox mode, the padding is smaller so we can render a gradient under the combobox input.\r\n // Change the custom scrollbar offset so the top of the first item fits the top of our scrollbar\r\n '[--scrollbar-radius:0]': DropdownRounding[rounding] === DropdownRounding.none,\r\n // Direction based styles\r\n 'max-h-[calc(var(--popover-available-height)-env(safe-area-inset-bottom))] motion-safe:-translate-y-1':\r\n placement?.startsWith('bottom'),\r\n 'max-h-[calc(var(--popover-available-height)-env(safe-area-inset-top))] motion-safe:translate-y-1':\r\n placement?.startsWith('top'),\r\n }\r\n )}\r\n onTransitionEnd={(ev) => {\r\n if (ev.target === ev.currentTarget && isOpen) {\r\n setIsFullyOpen(true)\r\n onFullyOpen?.()\r\n }\r\n }}\r\n >\r\n \r\n {children}\r\n
\r\n \r\n \r\n )\r\n})\r\n\r\nexport interface DropdownProps extends StatelessDropdownProps {\r\n state?: Ariakit.MenuStore\r\n}\r\n\r\nexport const Dropdown = React.forwardRef(\r\n (\r\n { state, placement, orientation = 'vertical', ...props }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n ) => (\r\n \r\n \r\n \r\n )\r\n)\r\n","import * as Ariakit from '@ariakit/react'\r\nimport * as React from 'react'\r\n\r\nimport { OptionButton, OptionButtonProps } from '../OptionButton'\r\nimport { BUTTON_DEFAULT_ELEMENT } from '../button'\r\nimport { PropsWithAs } from '../types'\r\n\r\ninterface DropdownItemProps extends OptionButtonProps {\r\n store?: Ariakit.MenuStore\r\n\r\n subtitle?: React.ReactNode\r\n\r\n /**\r\n * Whether clicking the item should also close the dropdown. Only applies to\r\n * items without a submenu\r\n *\r\n * @default true\r\n */\r\n hideOnClick?: boolean\r\n}\r\n\r\nfunction DropdownItemComponent(\r\n { as: asComponent, ...props }: PropsWithAs & DropdownItemProps,\r\n ref: React.ForwardedRef\r\n) {\r\n return } />\r\n}\r\n\r\n/**\r\n * We need to forward ref to the function, but typescript looses the type of the\r\n * props param so we need to typecast to get suggestions to work\r\n */\r\nexport const DropdownItem = React.forwardRef(DropdownItemComponent) as <\r\n TagType extends React.ElementType = typeof BUTTON_DEFAULT_ELEMENT,\r\n>(\r\n props: PropsWithAs & DropdownItemProps & { ref?: React.ForwardedRef }\r\n) => ReturnType\r\n","import * as Ariakit from '@ariakit/react'\r\n\r\nexport const useDropdownState = Ariakit.useMenuStore\r\n","import * as React from 'react'\r\n\r\nexport const CHART_CONTEXT_MENU_ID = 'chartContextMenu'\r\n\r\nexport function hasChartContextMenuGainedFocus(blurEvent: React.FocusEvent | undefined) {\r\n const chartContextMenu = document.getElementById(CHART_CONTEXT_MENU_ID)\r\n if (chartContextMenu && blurEvent?.relatedTarget) {\r\n return chartContextMenu === blurEvent.relatedTarget || chartContextMenu.contains(blurEvent?.relatedTarget)\r\n }\r\n\r\n return false\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { PartialBy } from '../../types'\r\nimport { MenuGroup } from '../MenuGroup'\r\nimport { Dropdown, DropdownItem, DropdownProps } from '../dropdown'\r\nimport { ObjectHash } from '../types'\r\nimport { CHART_CONTEXT_MENU_ID } from './utils'\r\n\r\nexport interface IContextMenuOption {\r\n type?: never\r\n id: string\r\n label: React.ReactNode\r\n onClick?: () => void\r\n options?: ContextMenuItem[]\r\n gtag?: ObjectHash\r\n}\r\n\r\ninterface IContextMenuDivider {\r\n type: 'divider'\r\n label?: React.ReactNode\r\n}\r\n\r\nexport type ContextMenuItem = IContextMenuOption | IContextMenuDivider\r\n\r\ninterface ContextMenuInnerProps extends PartialBy {\r\n /**\r\n * Items visible in the menu\r\n */\r\n items: ContextMenuItem[]\r\n}\r\n\r\nexport function ContextMenuInner(\r\n { trigger, items, onClose, ...props }: ContextMenuInnerProps,\r\n ref: React.ForwardedRef\r\n) {\r\n return (\r\n ev.preventDefault()}\r\n >\r\n {items?.map((item, index) => {\r\n if (item.type === 'divider') {\r\n return \r\n }\r\n\r\n if (item?.options !== undefined) {\r\n return (\r\n \r\n {item.label}\r\n \r\n }\r\n />\r\n )\r\n }\r\n\r\n return (\r\n {\r\n item.onClick?.()\r\n window.gtag?.('event', 'context-menu', Object.assign({ menu_option: item.id }, item.gtag))\r\n }}\r\n data-testid={`dropdown-menu-${item.id}`}\r\n >\r\n {item.label}\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n\r\nexport const ContextMenu = React.forwardRef(ContextMenuInner)\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\ninterface GridLayoutProps extends React.HTMLProps {\r\n /**\r\n * Number of columns\r\n */\r\n columns?: number\r\n\r\n /**\r\n * Number of rows\r\n */\r\n rows?: number\r\n\r\n /**\r\n * Whether or not a border is rendered between and around items. eg. charts\r\n * on HP won’t have a border\r\n *\r\n * @default false\r\n */\r\n border?: boolean\r\n}\r\n\r\nexport const ChartGridCell = React.forwardRef(\r\n ({ children, gridArea, className, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n )\r\n)\r\n\r\ninterface ChartGridCellProps extends React.HTMLProps {\r\n /**\r\n * Css grid-area value\r\n */\r\n gridArea?: string\r\n}\r\n\r\nexport function GridLayout({ columns = 1, rows = 1, border = false, children, className, ...props }: GridLayoutProps) {\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\ninterface ChartGridProps extends GridLayoutProps {\r\n isResizable?: boolean\r\n}\r\n\r\nexport const ChartGrid: React.FC = (props) => \r\n","import * as React from 'react'\r\n\r\nimport { PropsWithAs, RequireByKey } from '../types'\r\n\r\nconst defaultValueAccessor: ValueAccessor = (data) => data\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst DEFAULT_VALUE_KEY = 'value'\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst DEFAULT_CHANGE_KEY = 'onChange'\r\n\r\ntype ValueAccessor<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps = typeof DEFAULT_VALUE_KEY,\r\n ChangeKey extends keyof React.ComponentProps = typeof DEFAULT_CHANGE_KEY,\r\n> = (...args: Parameters[ChangeKey]>) => React.ComponentProps[ValueKey]\r\n\r\nexport type InnerStateProps<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps,\r\n ChangeKey extends keyof React.ComponentProps,\r\n> = RequireByKey, 'as'> & {\r\n valueKey?: ValueKey\r\n changeKey?: ChangeKey\r\n valueAccessor?: ValueAccessor\r\n}\r\n\r\nexport function InnerState<\r\n TagType extends React.ElementType,\r\n ValueKey extends keyof React.ComponentProps = typeof DEFAULT_VALUE_KEY,\r\n ChangeKey extends keyof React.ComponentProps = typeof DEFAULT_CHANGE_KEY,\r\n>({\r\n as: asComponent,\r\n valueKey = 'value' as ValueKey,\r\n changeKey = 'onChange' as ChangeKey,\r\n valueAccessor = defaultValueAccessor,\r\n ...props\r\n}: InnerStateProps) {\r\n const { [valueKey]: value, [changeKey]: onChange } = props\r\n const [state, setState] = React.useState[ValueKey]>(value)\r\n\r\n const handleChange = React.useCallback>(\r\n (...args) => {\r\n setState(valueAccessor(...args))\r\n onChange(...args)\r\n },\r\n [onChange, valueAccessor]\r\n )\r\n\r\n return React.createElement(asComponent, {\r\n ...props,\r\n [valueKey]: state,\r\n [changeKey]: handleChange,\r\n })\r\n}\r\n","import classnames from 'classnames'\r\nimport { HTMLProps, ReactNode, useEffect, useMemo, useRef, useState } from 'react'\r\n\r\nimport { Label } from './typography'\r\n\r\nexport enum RangeSize {\r\n small = 'sm:h-6', // 24px height\r\n regular = 'sm:h-7', // 28px height\r\n medium = 'sm:h-8', // 32px height\r\n large = 'sm:h-9', // 36px height\r\n}\r\n\r\ntype InputProps = HTMLProps\r\n\r\ninterface RangeSliderProps extends Omit {\r\n /**\r\n * Label which is rendered above the select\r\n */\r\n label?: ReactNode\r\n\r\n /**\r\n * Range size. All inputs have forced height on mobile to avoid zoom\r\n *\r\n * @default regular\r\n */\r\n size?: keyof typeof RangeSize\r\n\r\n /**\r\n * Element which will be rendered on the left side of the slider\r\n */\r\n leftContent?: ReactNode\r\n\r\n /**\r\n * Element which will be rendered on the right side of the slider\r\n */\r\n rightContent?: ReactNode\r\n\r\n /**\r\n * Class name for the wrapper element\r\n */\r\n className?: string\r\n\r\n /**\r\n * Class name for the input element\r\n */\r\n inputClassName?: string\r\n\r\n /**\r\n * Min value for the input\r\n *\r\n * @default 0\r\n */\r\n min?: number\r\n\r\n /**\r\n * Max value for the input\r\n *\r\n * @default 100\r\n */\r\n max?: number\r\n\r\n /**\r\n * Step value for the input\r\n *\r\n * @default 1\r\n */\r\n step?: number\r\n\r\n /**\r\n * Current value\r\n */\r\n value: number\r\n\r\n /**\r\n * Callback when value changes\r\n */\r\n onChange: InputProps['onChange']\r\n}\r\n\r\nexport function RangeSlider({\r\n label,\r\n size = 'regular',\r\n leftContent,\r\n rightContent,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n className,\r\n inputClassName,\r\n ...props\r\n}: RangeSliderProps) {\r\n const [hasTrack, setHasTrack] = useState(false)\r\n const trackRef = useRef(null)\r\n const thumbRef = useRef(null)\r\n\r\n useEffect(() => {\r\n setHasTrack(Boolean(trackRef.current && thumbRef.current))\r\n }, [])\r\n\r\n const thumbLeft = useMemo(() => {\r\n const track = trackRef.current\r\n const thumb = thumbRef.current\r\n const valuePercent = (props.value - min) / (max - min)\r\n\r\n if (!hasTrack || !track || !thumb) return\r\n\r\n const trackBox = track.getBoundingClientRect()\r\n const thumbBox = thumb.getBoundingClientRect()\r\n\r\n return ((valuePercent * (trackBox.width - thumbBox.width)) / trackBox.width) * 100\r\n }, [min, max, props.value, hasTrack])\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { ButtonRoundingType, ButtonThemeType } from '../button'\r\nimport { IconNameType } from '../icon'\r\n\r\nexport enum ToolbarTheme {\r\n chipTransparent, // (default)\r\n alternative,\r\n}\r\n\r\nexport enum ToolbarDirection {\r\n vertical,\r\n horizontal,\r\n}\r\n\r\nexport type ToolbarDirectionType = keyof typeof ToolbarDirection\r\n\r\nexport interface IButtonThemeSettings {\r\n className?: string\r\n theme: ButtonThemeType\r\n rounding: ButtonRoundingType\r\n}\r\n\r\nexport interface IToolbarItem {\r\n id: string\r\n icon: IconNameType\r\n iconActive?: IconNameType\r\n iconAction?: IconNameType\r\n title: string\r\n titleActive?: string\r\n titleAction?: string\r\n}\r\n\r\nexport type ToolbarThemeType = keyof typeof ToolbarTheme\r\n","import * as React from 'react'\r\n\r\nimport { ToolbarDirection, ToolbarTheme } from './interfaces'\r\n\r\nexport interface IToolbarContext {\r\n direction: ToolbarDirection\r\n theme: ToolbarTheme\r\n isWrapped: boolean\r\n isStretched: boolean\r\n isMobile: boolean\r\n}\r\n\r\nexport const ToolbarContext = React.createContext({\r\n direction: ToolbarDirection.vertical,\r\n theme: ToolbarTheme.chipTransparent,\r\n isWrapped: false,\r\n isStretched: false,\r\n isMobile: false,\r\n})\r\n\r\nexport function useToolbarContext() {\r\n return React.useContext(ToolbarContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport throttle from 'lodash.throttle'\r\nimport React from 'react'\r\n\r\nimport { isSafariDesktop } from '../../../app/shared/isMobile'\r\nimport { StatelessDropdown } from '../dropdown'\r\nimport { IToolbarContext, ToolbarContext } from './hooks'\r\nimport { ToolbarDirection, ToolbarDirectionType, ToolbarTheme, ToolbarThemeType } from './interfaces'\r\n\r\nconst getToolbarSettings = ({\r\n direction,\r\n isWrapped,\r\n isMobile,\r\n theme,\r\n}: IToolbarContext): React.HTMLProps => {\r\n switch (isWrapped) {\r\n case true:\r\n return {\r\n className: classnames('shrink-0 items-center bg-white dark:bg-gray-800', {\r\n 'flex flex-wrap justify-between': direction === ToolbarDirection.vertical,\r\n 'grid border border-gray-100 dark:border-gray-600 p-1.5 gap-1 border-box rounded-md grid-cols-2':\r\n FinvizSettings.hasRedesignEnabled,\r\n }),\r\n }\r\n\r\n default:\r\n return {\r\n className: classnames('flex shrink-0 items-center bg-white dark:bg-gray-800', {\r\n 'p-1.5': !isMobile,\r\n 'space-x-1.5 px-1.5': direction === ToolbarDirection.horizontal && FinvizSettings.hasRedesignEnabled,\r\n 'flex-col overflow-hidden overflow-y-auto [--inset-l:0.5rem] landscape-primary:pl-inset-left':\r\n direction === ToolbarDirection.vertical,\r\n 'space-y-2': direction === ToolbarDirection.vertical && !isMobile,\r\n 'pb-inset-bottom [--inset-b:0.5rem]': theme !== ToolbarTheme.alternative && !isMobile,\r\n 'w-screen space-x-2 overflow-hidden overflow-x-auto':\r\n direction === ToolbarDirection.horizontal && theme !== ToolbarTheme.alternative,\r\n 'overflow-x-hidden': theme === ToolbarTheme.alternative,\r\n }),\r\n }\r\n }\r\n}\r\n\r\nexport interface ToolbarProps {\r\n /**\r\n * Toolbar direction\r\n *\r\n * @default vertical\r\n */\r\n direction?: ToolbarDirectionType\r\n\r\n /**\r\n * Toolbar buttons theme\r\n *\r\n * @default light\r\n */\r\n theme?: ToolbarThemeType\r\n\r\n /**\r\n * Charts mobile design\r\n *\r\n * @default false\r\n */\r\n isMobile?: boolean\r\n\r\n className?: string\r\n}\r\n\r\nexport function Toolbar({\r\n direction = 'vertical',\r\n theme = 'chipTransparent',\r\n isMobile = false,\r\n children,\r\n className,\r\n}: React.PropsWithChildren) {\r\n const hasFocusRings = React.useRef(false)\r\n const toolbarRef = React.useRef(null)\r\n const contextProviderValue = React.useMemo(\r\n () => ({\r\n direction: ToolbarDirection[direction],\r\n theme: ToolbarTheme[theme],\r\n isWrapped:\r\n ToolbarDirection[direction] === ToolbarDirection.vertical && ToolbarTheme[theme] === ToolbarTheme.alternative,\r\n isStretched:\r\n ToolbarDirection[direction] === ToolbarDirection.horizontal && ToolbarTheme[theme] === ToolbarTheme.alternative,\r\n isMobile,\r\n }),\r\n [direction, theme, isMobile]\r\n )\r\n const toolbarSettings = getToolbarSettings(contextProviderValue)\r\n\r\n React.useLayoutEffect(() => {\r\n // Workaround for Safari scrollbar bug https://github.com/finvizhq/charts/issues/1038\r\n // Safari injects scrollbar after layout render and doesn't trigger reflow\r\n if (ToolbarTheme[theme] !== ToolbarTheme.alternative && isSafariDesktop()) {\r\n const forceReflow = throttle(() => {\r\n if (toolbarRef.current !== null) {\r\n const originalWidth = toolbarRef.current.style.width\r\n toolbarRef.current.style.width = '0'\r\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n toolbarRef.current.offsetWidth\r\n toolbarRef.current.style.width = originalWidth\r\n }\r\n }, 200)\r\n\r\n forceReflow()\r\n window.addEventListener('resize', forceReflow)\r\n\r\n return () => {\r\n window.removeEventListener('resize', forceReflow)\r\n }\r\n }\r\n }, [theme])\r\n\r\n return (\r\n \r\n \r\n {children}\r\n {\r\n hasFocusRings.current = !!document.querySelector('[data-focus-visible]')\r\n return true\r\n }}\r\n autoFocusOnHide={(el: HTMLElement) => {\r\n // Only call focus when we previously had focus rings to prevent sticky focus rings\r\n if (hasFocusRings.current) el.focus({ preventScroll: true })\r\n hasFocusRings.current = false\r\n return false\r\n }}\r\n />\r\n \r\n \r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonHTMLProps, ButtonProps } from '../button'\r\nimport { Delayed } from '../delayed'\r\nimport { Icon } from '../icon'\r\nimport { Spinner } from '../spinner'\r\nimport { PropsWithAs } from '../types'\r\nimport { useToolbarContext } from './hooks'\r\nimport { IToolbarItem, ToolbarTheme } from './interfaces'\r\n\r\nfunction getButtonThemeSettings({\r\n className,\r\n theme,\r\n isActive,\r\n isStretched,\r\n isInAction,\r\n}: {\r\n className: string\r\n theme: ToolbarTheme\r\n isStretched: boolean\r\n isActive?: boolean\r\n isInAction?: boolean\r\n}): Omit & ButtonProps {\r\n const includeRedesign = FinvizSettings.hasRedesignEnabled\r\n switch (theme) {\r\n case ToolbarTheme.alternative:\r\n return {\r\n className: classnames(\r\n className,\r\n {\r\n grow: isStretched,\r\n 'h-10 w-10': !isStretched && !includeRedesign,\r\n 'animate-pulse': isInAction,\r\n },\r\n\r\n !includeRedesign && {\r\n 'active:bg-white disabled:bg-white disabled:text-gray-300 disabled:hover:text-gray-300': true,\r\n 'border border-white text-gray-500 hover:border-gray-100 hover:text-gray-900': !isActive,\r\n 'border border-gray-900 text-gray-900': isActive,\r\n }\r\n ),\r\n theme: includeRedesign ? 'chipTransparent' : 'transparent',\r\n rounding: includeRedesign ? undefined : 'none',\r\n size: isStretched || includeRedesign ? undefined : 'none',\r\n }\r\n default:\r\n return {\r\n className: classnames(\r\n className,\r\n 'border dark:disabled:bg-gray-800 dark:disabled:text-gray-600 disabled:text-gray-300 disabled:bg-white dark:disabled:hover:bg-gray-800 dark:disabled:hover:text-gray-600 disabled:hover:text-gray-300 disabled:hover:bg-white',\r\n {\r\n 'animate-pulse': isInAction,\r\n 'border-transparent text-gray-500 hover:bg-gray-200/30 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-500/30 dark:hover:text-gray-200':\r\n !isActive,\r\n 'border-blue-400 bg-blue-50 text-gray-900 dark:bg-gray-700 dark:text-white': isActive,\r\n }\r\n ),\r\n theme: 'transparent',\r\n rounding: 'small',\r\n }\r\n }\r\n}\r\n\r\nexport interface ToolbarButtonProps extends Omit {\r\n rowId?: number\r\n item: IToolbarItem\r\n disabledTooltip?: string\r\n isInAction?: boolean\r\n isLoading?: boolean\r\n}\r\n\r\nexport const ToolbarButton = React.forwardRef(function ToolbarButton(\r\n { item, disabledTooltip, isInAction: isInActionProp, isLoading, ...props }: PropsWithAs & ToolbarButtonProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const context = Ariakit.useMenuContext()\r\n const { theme, isStretched } = useToolbarContext()\r\n const isInAction = isInActionProp && item.iconAction !== undefined\r\n const buttonSettings = getButtonThemeSettings({\r\n className: props.className,\r\n theme,\r\n isStretched,\r\n isActive: props.active,\r\n isInAction: isInAction,\r\n })\r\n\r\n const getMainIcon = () => (\r\n \r\n )\r\n\r\n return (\r\n }\r\n store={context?.menubar || undefined}\r\n blurOnHoverEnd\r\n render={\r\n \r\n {isLoading ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n {props.children ??\r\n (isInAction ? (\r\n \r\n \r\n \r\n ) : (\r\n getMainIcon()\r\n ))}\r\n \r\n )}\r\n \r\n }\r\n />\r\n )\r\n})\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { isMobile } from '../../../app/shared/isMobile'\r\nimport { DropdownItem } from '../dropdown'\r\nimport { Icon } from '../icon'\r\nimport { NativeSelect } from '../select/NativeSelect'\r\nimport { useToolbarContext } from './hooks'\r\nimport { IToolbarItem, ToolbarTheme } from './interfaces'\r\nimport { ToolbarButton } from './toolbar-button'\r\n\r\nconst isMobileBrowser = isMobile()\r\n\r\nexport interface ToolbarGroupProps {\r\n /**\r\n * Main button item\r\n */\r\n defaultItem: IToolbarItem\r\n\r\n /**\r\n * Shows spinner instead of icon\r\n */\r\n isLoading?: boolean\r\n\r\n /**\r\n * Current selected item id\r\n */\r\n isActive: boolean\r\n\r\n /**\r\n * Should indicate some action in progress\r\n */\r\n isInAction?: boolean\r\n\r\n /**\r\n * Array of items\r\n */\r\n groupItems: IToolbarItem[]\r\n\r\n /**\r\n * Expand group button label\r\n */\r\n groupTitle?: string\r\n\r\n /**\r\n * On item select callback\r\n */\r\n onChange: (id: string, trigger: 'button' | 'select' | 'group') => void\r\n\r\n /**\r\n * Use native select for mobile devices\r\n *\r\n * @default true\r\n */\r\n useNativeSelect?: boolean\r\n\r\n /**\r\n * Is item disabled\r\n */\r\n disabled?: boolean\r\n\r\n /**\r\n * Tooltip message if item is disabled\r\n */\r\n disabledTooltip?: string\r\n\r\n rowId?: number\r\n}\r\n\r\nexport const ToolbarGroup = React.forwardRef(function ToolbarGroup(\r\n {\r\n defaultItem,\r\n isActive,\r\n isLoading,\r\n groupItems,\r\n groupTitle,\r\n onChange,\r\n useNativeSelect = isMobileBrowser,\r\n disabled,\r\n disabledTooltip,\r\n rowId,\r\n }: ToolbarGroupProps,\r\n ref: React.ForwardedRef\r\n) {\r\n const { theme, isStretched } = useToolbarContext()\r\n const [selectedItem, setSelectedItem] = React.useState(defaultItem)\r\n const groupId = groupTitle?.replace(/\\s/g, '-').toLocaleLowerCase()\r\n const isAlternativeTheme = theme === ToolbarTheme.alternative\r\n\r\n // Setup states, pass Menubar context to this menu so we can control the shared menu\r\n const context = Ariakit.useMenuContext()\r\n const menu = Ariakit.useMenuStore({ store: context })\r\n\r\n // We have multiple menu triggers but just one shared menu so we need a way to know which button has been hovered\r\n const [menuButton, setMenuButton] = React.useState(null)\r\n const open = menu.useState((state) => state.mounted && state.anchorElement === menuButton)\r\n\r\n // Find the element to render the menu into using Portal\r\n const parentMenu = menu.useState('contentElement')\r\n const menuContentElement = React.useMemo(() => parentMenu?.querySelector('div'), [parentMenu])\r\n\r\n /**\r\n * Charts prevent bubling mouseover so we need to hide the menu manually\r\n */\r\n const hideMenu = menu.hide\r\n React.useEffect(() => {\r\n const onMouseLeave = () => hideMenu()\r\n\r\n parentMenu?.addEventListener('mouseleave', onMouseLeave)\r\n return () => parentMenu?.removeEventListener('mouseleave', onMouseLeave)\r\n }, [hideMenu, parentMenu])\r\n\r\n const showMenu = menu.show\r\n const handleMenuOpen = React.useCallback(\r\n (ev: React.SyntheticEvent) => {\r\n menu.setDisclosureElement(ev.currentTarget)\r\n menu.setAnchorElement(ev.currentTarget)\r\n showMenu()\r\n },\r\n [menu, showMenu]\r\n )\r\n\r\n const trigger = (\r\n \r\n \r\n \r\n \r\n )\r\n\r\n if (useNativeSelect) {\r\n return (\r\n \r\n {trigger}\r\n ({ value: item.id, label: item.title }))}\r\n onChange={(option) => {\r\n setSelectedItem(groupItems![groupItems!.findIndex((item) => item.id === option.value)])\r\n onChange(option.value, 'select')\r\n }}\r\n onClick={() => onChange(selectedItem.id, 'select')}\r\n />\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n ) => {\r\n // Preventing this means the dropdown will only open on hover not by a click\r\n ev.preventDefault()\r\n }}\r\n onPointerDown={(ev: React.PointerEvent) => {\r\n // Finally, pre-select the current group tool\r\n onChange(selectedItem.id, 'group')\r\n handleMenuOpen(ev)\r\n }}\r\n />\r\n {open && (\r\n // Render this menu's contents into the parent menu.\r\n }>\r\n {groupItems.map((item) => (\r\n }\r\n data-testid={`toolbar-group-${groupId}-${item.id}`}\r\n rounding={theme === ToolbarTheme.alternative && !FinvizSettings.hasRedesignEnabled ? 'none' : undefined}\r\n onPointerDown={() => {\r\n setSelectedItem(item)\r\n onChange(item.id, 'select')\r\n }}\r\n >\r\n {item.title}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n )\r\n})\r\n","import { PartialBy } from '../../types'\r\nimport { ToolbarButton } from './toolbar-button'\r\nimport { ToolbarGroup, ToolbarGroupProps } from './toolbar-group'\r\n\r\nexport function ToolbarItem({\r\n defaultItem,\r\n isLoading,\r\n isActive,\r\n isInAction,\r\n groupItems,\r\n groupTitle,\r\n onChange,\r\n useNativeSelect,\r\n disabled,\r\n disabledTooltip,\r\n rowId,\r\n}: PartialBy) {\r\n const isItemActive = isActive && !disabled\r\n\r\n if (!!groupItems?.length) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n {\r\n onChange(defaultItem.id, 'button')\r\n }}\r\n />\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { useToolbarContext } from './hooks'\r\nimport { ToolbarDirection, ToolbarTheme } from './interfaces'\r\n\r\ntype ToolbarDividerProps = {\r\n className?: string\r\n}\r\n\r\nexport function ToolbarDivider({ className }: ToolbarDividerProps) {\r\n const { direction, theme } = useToolbarContext()\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import { Box } from '../box'\r\nimport { Heading, Paragraph } from '../typography'\r\nimport { TourStep } from './types'\r\n\r\nexport function StepContent({ step }: { step: TourStep }) {\r\n return (\r\n \r\n {step.title && (\r\n \r\n {step.title}\r\n \r\n )}\r\n {step.body && {step.body}}\r\n \r\n )\r\n}\r\n","import { offset, shift } from '@floating-ui/dom'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport * as ReactDOM from 'react-dom/server'\r\nimport Shepherd from 'shepherd.js'\r\n\r\nimport {\r\n BUTTON_BASE_CLASS,\r\n BUTTON_FOCUS_STYLES,\r\n ButtonPadding,\r\n ButtonRounding,\r\n ButtonSize,\r\n ButtonTheme,\r\n getButtonTheme,\r\n} from '../button'\r\nimport { StepContent } from './step-content'\r\nimport { TourDefinition, TourStep } from './types'\r\n\r\ntype ExcludesFalse = (x: T | false) => x is T\r\n\r\n/**\r\n * Async load Shepherd module when we need it\r\n */\r\nlet shepherdLibrary: typeof Shepherd\r\nexport async function loadShepherdLibrary(setLoading: (state: boolean) => void) {\r\n if (shepherdLibrary) return shepherdLibrary\r\n\r\n try {\r\n setLoading(true)\r\n const shepherdPromise = await import('shepherd.js')\r\n shepherdLibrary = shepherdPromise.default\r\n setLoading(false)\r\n\r\n return shepherdLibrary\r\n } catch {}\r\n}\r\n\r\n/**\r\n * Get buttons based on index in the step array\r\n */\r\nconst buttonClasses = classnames(BUTTON_BASE_CLASS, BUTTON_FOCUS_STYLES, ButtonSize.regular, ButtonRounding.regular)\r\nfunction getStepButtons(tour: Shepherd.Tour, step: TourStep, index: number, arr: TourStep[]) {\r\n return [\r\n {\r\n action: tour.complete,\r\n classes: classnames(\r\n buttonClasses,\r\n 'mr-auto',\r\n getButtonTheme({ theme: ButtonTheme.light }).button,\r\n ButtonPadding.regular\r\n ),\r\n text: 'Exit',\r\n },\r\n index > 0 && {\r\n action: tour.back,\r\n classes: classnames(buttonClasses, getButtonTheme({ theme: ButtonTheme.light }).button, ButtonPadding.regular),\r\n text: step.backButton ?? 'Back',\r\n },\r\n {\r\n classes: classnames(buttonClasses, getButtonTheme({ theme: ButtonTheme.blue }).button, ButtonPadding.regular),\r\n action: tour.next,\r\n text: step.nextButton ?? (index === arr.length - 1 ? 'Finish' : 'Next'),\r\n },\r\n ].filter(Boolean as unknown as ExcludesFalse)\r\n}\r\n\r\n/**\r\n * Convert tour steps to Shepherd steps\r\n */\r\nexport function processSteps(tour: Shepherd.Tour, steps: TourStep[]): Shepherd.StepOptions[] {\r\n return steps.map((step, index) => ({\r\n attachTo: { element: step.target, on: step.placement ?? 'auto' },\r\n classes: 'z-dialog bg-transparent m-0',\r\n floatingUIOptions: {\r\n middleware: [shift({ padding: 10 }), offset(step.offset ?? { mainAxis: 10, crossAxis: 0 })],\r\n },\r\n // Render the body\r\n text: ReactDOM.renderToString(React.createElement(StepContent, { step })),\r\n // Add buttons\r\n buttons: getStepButtons(tour, step, index, steps),\r\n modalOverlayOpeningRadius: step.overlayRadius ?? 8,\r\n modalOverlayOpeningPadding: step.overlayPadding ?? 0,\r\n }))\r\n}\r\n\r\nexport function getTourKey() {\r\n return `tour${window.location.pathname.replace(/[/.]/g, '-')}`\r\n}\r\n\r\nexport function getStepsForUser(tours: TourDefinition[]) {\r\n const lastFinishedTour = localStorage?.getItem(getTourKey())\r\n const lastTourIndex = tours.findIndex((tour) => tour.id === lastFinishedTour)\r\n const allToursViewed = lastTourIndex === tours.length - 1 || tours.slice(lastTourIndex + 1).every((item) => item.skip)\r\n const toursToView = allToursViewed ? tours : tours.slice(lastTourIndex + 1)\r\n const userTour = toursToView.reduce(\r\n (acc, current) =>\r\n current.skip\r\n ? acc\r\n : {\r\n ...acc,\r\n id: current.id,\r\n steps: [...acc.steps, ...current.steps],\r\n },\r\n { id: 'tour', steps: [], initialTour: toursToView[0].id }\r\n )\r\n\r\n return { hasNewTours: !allToursViewed, tour: userTour }\r\n}\r\n\r\nexport function completeTour(key: string) {\r\n localStorage?.setItem(getTourKey(), key)\r\n}\r\n","import * as React from 'react'\r\nimport Shepherd from 'shepherd.js'\r\n\r\nimport { TourDefinition } from './types'\r\nimport * as tourUtils from './utils'\r\n\r\nexport const DEFAULT_OPTIONS = {\r\n exitOnEsc: true,\r\n useModalOverlay: true,\r\n}\r\n\r\n/**\r\n * Hook which controls shepherd.js. The library is lazy-loaded when the tour starts\r\n *\r\n * Returns:\r\n * - `isLoading`: state of the library loading\r\n * - `currentTour`: tour object, only defined after library has loaded\r\n * - `startTour`: load the library and start tour. Returns `currentTour`\r\n * - `getStepsForUser`: returns a list of tour steps based on tours the user finished\r\n * - `completeTour`: persists the last finished tour to local storage\r\n */\r\nexport function useTour(options?: Shepherd.TourOptions) {\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [currentTour, setTour] = React.useState(null)\r\n\r\n /**\r\n * We’re loading shepherd asynchronously and want to have loading state so we use\r\n * AbortController to check if the component is still mounted.\r\n */\r\n const controller = React.useRef('AbortController' in window ? new AbortController() : undefined)\r\n const loadingSetter = React.useRef((state: boolean) => {\r\n if (controller.current?.signal.aborted) return\r\n\r\n setIsLoading(state)\r\n })\r\n // Cleanup effect to abort the controller\r\n React.useEffect(() => () => controller.current?.abort(), [])\r\n\r\n const startTour = React.useCallback(\r\n async (definition: TourDefinition, setComplete = true) => {\r\n const shepherdLibrary = await tourUtils.loadShepherdLibrary(loadingSetter.current)\r\n\r\n if (shepherdLibrary && !controller.current?.signal.aborted) {\r\n const tour = currentTour ?? new shepherdLibrary.Tour({ ...DEFAULT_OPTIONS, ...options })\r\n\r\n if (!currentTour) setTour(tour)\r\n\r\n // Reset the tour steps in case they were updated\r\n Array.from(tour.steps).forEach((step) => tour.removeStep(step.id))\r\n\r\n const processedSteps = tourUtils.processSteps(tour, definition.steps)\r\n tour.addSteps(processedSteps)\r\n\r\n if (setComplete) {\r\n tourUtils.completeTour(definition.id)\r\n }\r\n\r\n void tour.start()\r\n window.gtag?.('event', 'tour-start', { event_label: definition.initialTour ?? definition.id })\r\n\r\n return tour\r\n }\r\n },\r\n [currentTour, options]\r\n )\r\n\r\n return {\r\n isLoading,\r\n currentTour,\r\n startTour,\r\n getStepsForUser: tourUtils.getStepsForUser,\r\n completeTour: tourUtils.completeTour,\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-duplicate-enum-values */\r\nimport * as Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { BUTTON_DEFAULT_ELEMENT, Button, ButtonComponentProps } from '../button'\r\nimport { Icon, IconNameType, isValidIconName } from '../icon'\r\n\r\n// Must have the same keys as ButtonSize\r\nexport enum TabSpacing {\r\n xxsmall = 'space-x-0.5', // 2px spacing\r\n xsmall = 'space-x-1', // 4px spacing\r\n none = 'space-x-1.5', // 6px spacing\r\n small = 'space-x-1.5', // 6px spacing\r\n regular = 'space-x-1.5', // 6px spacing\r\n medium = 'space-x-2', // 8px spacing\r\n large = 'space-x-2', // 8px spacing\r\n xlarge = 'space-x-2', // 8px spacing\r\n}\r\n\r\nfunction getRightContent(content: JSX.Element | IconNameType | undefined, isActive: boolean) {\r\n if (isValidIconName(content)) return \r\n else if (React.isValidElement(content))\r\n return React.cloneElement(content as React.ReactElement<{ active: boolean }>, {\r\n active: isActive,\r\n })\r\n else return content\r\n}\r\n\r\nconst InternalTab = React.forwardRef(function InternalTab<\r\n TagType extends React.ElementType = typeof BUTTON_DEFAULT_ELEMENT,\r\n>(\r\n {\r\n rounding = 'none',\r\n theme = 'tab',\r\n size = 'medium',\r\n 'aria-selected': ariaSelected,\r\n children,\r\n ...props\r\n }: Omit, 'theme'>,\r\n ref: React.ForwardedRef\r\n) {\r\n const spacing = TabSpacing[size]\r\n const active = Boolean(ariaSelected)\r\n const rightContent = getRightContent(props.rightContent, active)\r\n\r\n return (\r\n )}\r\n ref={ref}\r\n active={active}\r\n theme={theme}\r\n size={size}\r\n rounding={rounding}\r\n rightContent={undefined}\r\n className={classNames('group/badge', props.className)}\r\n contentClass={classNames(spacing, 'flex', props.contentClass)}\r\n >\r\n {children}\r\n {rightContent}\r\n \r\n )\r\n})\r\n\r\nexport function Tab(\r\n props: React.PropsWithChildren>\r\n) {\r\n return } />\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classNames from 'classnames'\r\n\r\nexport function TabList(props: Ariakit.TabListProps) {\r\n return (\r\n \r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport React from 'react'\r\n\r\nexport function TabPanel(props: Ariakit.TabPanelProps) {\r\n return \r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport React from 'react'\r\n\r\nexport function Tabs({ children }: React.PropsWithChildren) {\r\n return (\r\n \r\n
{children}
\r\n
\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nenum BadgeSize {\r\n small = 'h-4 min-w-4', // 16px height\r\n medium = 'h-5 min-w-5', // 20px height\r\n}\r\ntype BadgeSizeType = keyof typeof BadgeSize\r\n\r\nenum BadgePadding {\r\n small = 'px-2 py-0', // 16px height\r\n medium = 'px-1.5 py-0.5', // 20px height\r\n}\r\ntype BadgePaddingType = keyof typeof BadgePadding\r\n\r\ntype BadgeProps = {\r\n className?: string\r\n size?: BadgeSizeType\r\n padding?: BadgePaddingType\r\n active?: boolean\r\n}\r\n\r\nexport function Badge({\r\n className,\r\n size = 'medium',\r\n padding = size,\r\n active,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const badgePadding = BadgePadding[padding]\r\n const badgeSize = BadgeSize[size]\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\n\r\nenum TagSize {\r\n small = 'h-4 min-w-4', // 16px height\r\n medium = 'h-5 min-w-5', // 20px height\r\n large = 'min-w-5',\r\n}\r\ntype TagSizeType = keyof typeof TagSize\r\n\r\nenum TagPadding {\r\n small = 'px-[5px] py-0', // 16px height\r\n medium = 'px-1.5 py-0.5', // 20px height\r\n large = 'p-3',\r\n}\r\ntype TagPaddingType = keyof typeof TagPadding\r\n\r\nenum TagFont {\r\n small = 'text-3xs leading-3', // 10px/12px\r\n medium = 'text-2xs leading-4', // 12px/16px\r\n large = 'text-sm',\r\n}\r\n\r\nenum TagVariant {\r\n filled = 'border border-bg-primary bg-gray-50 text-gray-600 font-medium dark:bg-gray-600 dark:text-gray-50',\r\n bordered = 'border border-primary text-muted',\r\n}\r\n\r\ntype TagVariantType = keyof typeof TagVariant\r\n\r\nenum TagRounding {\r\n small = 'rounded-sm',\r\n // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\r\n medium = 'rounded-sm',\r\n large = 'rounded-md',\r\n}\r\n\r\ntype TagProps = {\r\n size?: TagSizeType\r\n padding?: TagPaddingType\r\n variant?: TagVariantType\r\n className?: string\r\n}\r\n\r\nexport function Tag({\r\n className,\r\n size = 'medium',\r\n padding = size,\r\n variant = 'filled',\r\n children,\r\n}: React.PropsWithChildren) {\r\n const tagPadding = TagPadding[padding]\r\n const tagSize = TagSize[size]\r\n const tagFont = TagFont[size]\r\n const tagRounding = TagRounding[size]\r\n const tagVariant = TagVariant[variant]\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nexport type NotificationContextType = ReturnType\r\n\r\nexport enum NotificationPosition {\r\n TopLeft,\r\n TopRight,\r\n BottomLeft,\r\n BottomRight,\r\n}\r\n\r\nexport interface NotificationOptions {\r\n position?: NotificationPosition\r\n inline?: boolean\r\n}\r\n\r\nexport const NotificationContext = React.createContext<{\r\n show: (element: JSX.Element, options?: NotificationOptions) => void\r\n hide: () => void\r\n}>({\r\n show: () => {},\r\n hide: () => {},\r\n})\r\n\r\nexport function useNotification() {\r\n return React.useContext(NotificationContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { getVisualViewport, useVisualViewport } from '../../hooks/useVisualViewport'\r\nimport { NotificationContext, NotificationOptions, NotificationPosition } from './hooks'\r\n\r\ninterface NotificationState {\r\n element: JSX.Element\r\n options: Partial\r\n}\r\n\r\nexport function NotificationWrapper(props: React.PropsWithChildren) {\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const [notification, setNotification] = React.useState(null)\r\n const { viewport, setViewport } = useVisualViewport({ enabled: !!notification })\r\n\r\n const context = React.useRef({\r\n show: (element: JSX.Element, options: Partial = {}) => {\r\n setViewport(() => getVisualViewport(window.visualViewport))\r\n setNotification({ element, options })\r\n setIsOpen(true)\r\n },\r\n hide: () => setIsOpen(false),\r\n })\r\n\r\n const positionClass = React.useMemo(() => {\r\n const { position = NotificationPosition.BottomLeft } = notification?.options ?? {}\r\n return {\r\n '[--inset-t:1rem] items-start pt-inset-top': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.TopRight,\r\n ].includes(position),\r\n '[--inset-r:1rem] justify-end landscape-secondary:pr-inset-right': [\r\n NotificationPosition.TopRight,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-b:1rem] items-end pb-inset-bottom': [\r\n NotificationPosition.BottomLeft,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-l:1rem] justify-start landscape-primary:pl-inset-left': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.BottomLeft,\r\n ].includes(position),\r\n }\r\n }, [notification?.options])\r\n\r\n const WrapperComponent = React.useMemo(\r\n () => (notification?.options.inline ? React.Fragment : Ariakit.Portal),\r\n [notification?.options.inline]\r\n )\r\n\r\n return (\r\n \r\n {props.children}\r\n {isOpen && (\r\n \r\n \r\n {notification?.element}\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { NotificationContextType, useNotification } from './hooks'\r\n\r\nexport function withNotificationContext(\r\n WrappedComponent: React.ComponentType\r\n) {\r\n const displayName = WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\r\n const WithNotificationContext = (props: Omit) => {\r\n const notification = useNotification()\r\n return \r\n }\r\n\r\n WithNotificationContext.displayName = `withNotificationContext(${displayName})`\r\n\r\n return WithNotificationContext\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { useNotification } from './hooks'\r\n\r\nexport enum NotificationTheme {\r\n default,\r\n success,\r\n failure,\r\n}\r\n\r\ninterface NotificationProps {\r\n className?: string\r\n /**\r\n * Default button text\r\n * @default Close\r\n */\r\n closeText?: string\r\n\r\n theme?: NotificationTheme\r\n\r\n /**\r\n * Custom buttons. Overrides `closeText`\r\n */\r\n actions?: JSX.Element\r\n\r\n /**\r\n * When set, the notification will automatically close\r\n */\r\n timeoutInMs?: number\r\n}\r\n\r\nexport function Notification({\r\n className,\r\n closeText = 'Close',\r\n actions,\r\n timeoutInMs,\r\n theme = NotificationTheme.default,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const notification = useNotification()\r\n\r\n React.useEffect(() => {\r\n let timeoutId: number\r\n if (timeoutInMs) {\r\n timeoutId = window.setTimeout(() => {\r\n notification.hide()\r\n }, timeoutInMs)\r\n }\r\n\r\n return () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId)\r\n }\r\n }\r\n }, [notification, timeoutInMs])\r\n\r\n return (\r\n \r\n
{children}
\r\n
\r\n {actions ?? (\r\n \r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { Icon } from '../icon'\r\n\r\nconst imgFromUrlToBase64 = (url: string) =>\r\n fetch(url).then(async (response) => URL.createObjectURL(await response.blob()))\r\n\r\nexport interface DownloadImageButtonProps {\r\n /**\r\n * The URL of the image to download. If not provided, button will be disabled\r\n */\r\n downloadUrl?: string | null\r\n\r\n /**\r\n * Optional base64 encoded image data. If provided, this will be used instead of downloadUrl\r\n */\r\n base64ImageData?: string | null\r\n}\r\n\r\nexport function DownloadImageButton({ downloadUrl, base64ImageData: dataUrl }: DownloadImageButtonProps) {\r\n const fileName = React.useMemo(() => {\r\n const name = downloadUrl?.split(/[/?#]/).pop() ?? 'image'\r\n return name.includes('.') ? name : `${name}.png`\r\n }, [downloadUrl])\r\n\r\n const [imageUri, setImageUri] = React.useState(null)\r\n React.useEffect(() => {\r\n const val = dataUrl || downloadUrl\r\n if (!val) return\r\n imgFromUrlToBase64(val)\r\n .then(setImageUri)\r\n .catch(() => {})\r\n }, [dataUrl, downloadUrl])\r\n\r\n return (\r\n imageUri && (\r\n {\r\n window.gtag?.('event', 'click', { event_category: 'social-share-image-download' })\r\n }}\r\n size=\"small\"\r\n contentClass=\"flex items-center\"\r\n leftContent={}\r\n >\r\n Download\r\n \r\n )\r\n )\r\n}\r\n","import { FacebookIcon, FacebookShareButton, TwitterIcon, TwitterShareButton } from 'react-share'\r\n\r\nimport { Button } from '../button'\r\nimport { CopyToClipboard } from '../copy-to-clipboard'\r\nimport { Heading } from '../typography'\r\nimport { DownloadImageButton } from './DownloadImageButton'\r\n\r\nexport function SocialShare({\r\n shareUrl,\r\n title,\r\n imageToDownloadURL,\r\n imageToDownloadBase64Data,\r\n}: {\r\n shareUrl: string\r\n title: string\r\n imageToDownloadURL?: string\r\n imageToDownloadBase64Data?: string | null\r\n}) {\r\n return (\r\n \r\n Copy and paste link in email, website, or forum\r\n \r\n }\r\n text={shareUrl}\r\n bottomLeftContent={\r\n
\r\n \r\n {\r\n window.gtag?.('event', 'click', { event_category: 'social-share-facebook-button' })\r\n }}\r\n leftContent={}\r\n >\r\n Share\r\n \r\n \r\n \r\n {\r\n window.gtag?.('event', 'click', { event_category: 'social-share-twitter-button' })\r\n }}\r\n leftContent={}\r\n >\r\n Twitter\r\n \r\n \r\n {imageToDownloadURL && (\r\n \r\n )}\r\n
\r\n }\r\n />\r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport * as React from 'react'\r\n\r\nimport { usePrevious } from '../hooks/use-previous'\r\nimport { Input, InputComponentProps } from './input'\r\nimport { Tooltip, TooltipColor, TooltipProps, TooltipTrigger } from './tooltip'\r\n\r\ninterface TooltipSettingsProps\r\n extends Pick,\r\n Pick {\r\n color?: keyof typeof TooltipColor\r\n}\r\n\r\ninterface TooltipInputProps extends InputComponentProps {\r\n /**\r\n * Settings for Tooltip component and useTooltipStore\r\n */\r\n tooltipSettings?: TooltipSettingsProps\r\n}\r\n\r\nfunction TooltipInputComponent(\r\n { tooltipSettings, name, children, ...props }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const { color, gutter, placement = 'bottom', isPointerEventsEnabled } = tooltipSettings ?? {}\r\n const prevMessage = usePrevious(children, true)\r\n\r\n const [isFocused, setIsFocused] = React.useState(false)\r\n const handleFocus = React.useRef(() => setIsFocused(true))\r\n const handleBlur = React.useRef(() => setIsFocused(false))\r\n\r\n const input = \r\n if (!children && !prevMessage) return input\r\n\r\n return (\r\n \r\n \r\n \r\n {children ?? prevMessage}\r\n \r\n \r\n )\r\n}\r\n\r\nexport const TooltipInput = React.forwardRef(TooltipInputComponent)\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport * as tracking from '../../app/shared/tracking'\r\n\r\nexport function useTrackPageView(props?: { trackInitial?: boolean; trackAutomatically?: boolean }) {\r\n const { trackInitial = false, trackAutomatically = true } = props ?? {}\r\n const initialRender = React.useRef(trackInitial)\r\n const location = useLocation()\r\n\r\n const handleTrackView = React.useCallback(() => {\r\n tracking.trackPageView({ pathname: location.pathname, query: location.search })\r\n }, [location.pathname, location.search])\r\n\r\n React.useEffect(() => {\r\n if (!trackAutomatically) return\r\n if (initialRender.current) handleTrackView()\r\n initialRender.current = true\r\n }, [trackAutomatically, handleTrackView, trackInitial])\r\n\r\n return handleTrackView\r\n}\r\n","export const FONT_SIZE = {\r\n XXS: 5,\r\n XS: 7,\r\n S: 8,\r\n M: 10,\r\n L: 11,\r\n XXL: 18,\r\n XXXL: 23,\r\n}\r\nexport const LINE_HEIGHT = {\r\n XS: 7,\r\n S: 8,\r\n M: 10,\r\n}\r\nexport const PADDING = {\r\n XXXS: 1,\r\n XXS: 2,\r\n XS: 3,\r\n S: 5,\r\n}\r\nexport const MARGIN = {\r\n XS: 4,\r\n}\r\nexport const CHART_MARGIN = {\r\n S: 15,\r\n M: 30,\r\n L: 35,\r\n XL: 38,\r\n XXL: 48,\r\n}\r\nexport const SETTINGS_HEIGHT = 44\r\nexport const TICKER_TIMEFRAME_CHANGE_HEIGHT = 20\r\nexport const OFFSET = {\r\n XXS: 2,\r\n XS: 4,\r\n S: 6,\r\n M: 8,\r\n XXL: 20,\r\n}\r\nexport const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n\r\nexport enum ChartEditorEnum {\r\n publish = 'publish',\r\n tools = 'tools',\r\n ideas = 'ideas',\r\n settings = 'settings',\r\n timeframe = 'timeframe',\r\n}\r\n\r\nexport enum LayoutType {\r\n '1h1v' = '1h1v',\r\n '1h2v' = '1h2v',\r\n '1h3v' = '1h3v',\r\n '2h1v' = '2h1v',\r\n '2h2v' = '2h2v',\r\n '3h1v' = '3h1v',\r\n '3h2v' = '3h2v',\r\n '1l2r' = '1l2r',\r\n '1t2b' = '1t2b',\r\n}\r\n\r\nexport enum CanvasElementType {\r\n arrow = 'canvas/arrow',\r\n avwapV1 = 'canvas/avwap/avwap_v1',\r\n brushV1 = 'canvas/brush/brush_v1',\r\n calloutV1 = 'canvas/callout/callout_v1',\r\n curve = 'canvas/curve',\r\n element = 'canvas/element',\r\n elliottWaves = 'canvas/elliott_waves/elliott_waves',\r\n ellipse = 'canvas/ellipse',\r\n ellipseV1 = 'canvas/ellipse/ellipse_v1',\r\n fibonacciRetracements = 'canvas/fibonacci_retracements',\r\n horizontalLine = 'canvas/horizontal_line',\r\n line = 'canvas/line',\r\n measure = 'canvas/measure',\r\n pitchforkV1 = 'canvas/pitchfork/pitchfork_v1',\r\n polygon = 'canvas/polygon',\r\n position = 'canvas/position',\r\n rectangle = 'canvas/rectangle',\r\n rotatedRectangle = 'canvas/rotated_rectangle',\r\n rotatedRectangleV1 = 'canvas/rotated_rectangle/rotated_rectangle_v1',\r\n scaledLine = 'canvas/scaled_line',\r\n scaledText = 'canvas/scaled_text',\r\n symbol = 'canvas/symbol',\r\n text = 'canvas/text',\r\n triangle = 'canvas/triangle',\r\n verticalLine = 'canvas/vertical_line',\r\n xabcd = 'canvas/xabcd',\r\n}\r\n\r\nexport enum ChartElementType {\r\n CandleStick = 'charts/candle_stick',\r\n HeikinAshi = 'charts/heikin_ashi',\r\n HollowCandleStick = 'charts/candle_stick_hollow',\r\n LineChart = 'charts/line_chart',\r\n OhlcChart = 'charts/ohlc_chart',\r\n MarketSentiment = 'charts/market_sentiment',\r\n MultiLineChart = 'charts/multi_line_chart',\r\n PerfChart = 'charts/perf_chart',\r\n}\r\n\r\nexport enum IndicatorType {\r\n Indicator = 'indicators/indicator',\r\n None = 'indicators/none',\r\n Adx = 'indicators/adx',\r\n Aro = 'indicators/aro',\r\n Aroosc = 'indicators/aroosc',\r\n Atr = 'indicators/atr',\r\n Cci = 'indicators/cci',\r\n Cot = 'indicators/cot',\r\n Fi = 'indicators/fi',\r\n Macd = 'indicators/macd',\r\n Mfi = 'indicators/mfi',\r\n Obv = 'indicators/obv',\r\n Perf = 'indicators/perf',\r\n Rmi = 'indicators/rmi',\r\n Roc = 'indicators/roc',\r\n Rsi = 'indicators/rsi',\r\n Rvol = 'indicators/rvol',\r\n Rwi = 'indicators/rwi',\r\n Stofa = 'indicators/stofa',\r\n Stofu = 'indicators/stofu',\r\n Stosl = 'indicators/stosl',\r\n Trix = 'indicators/trix',\r\n Ult = 'indicators/ult',\r\n Vol = 'indicators/vol',\r\n Wr = 'indicators/wr',\r\n Shrtfl = 'indicators/shrtfl',\r\n Shrtra = 'indicators/shrtra',\r\n\r\n // NOTE: financial indicators\r\n Ap = 'indicators/ap',\r\n Bvps = 'indicators/bvps',\r\n Capex = 'indicators/capex',\r\n Cdp = 'indicators/cdp',\r\n Csti = 'indicators/csti',\r\n Cd = 'indicators/cd',\r\n Cni = 'indicators/cni',\r\n Cogs = 'indicators/cogs',\r\n Cr = 'indicators/cr',\r\n Ebitda = 'indicators/ebitda',\r\n Ebit = 'indicators/ebit',\r\n Epsbbe = 'indicators/epsbbe',\r\n Epsd = 'indicators/epsd',\r\n Epsfd = 'indicators/epsfd',\r\n Ei = 'indicators/ei',\r\n Fcf = 'indicators/fcf',\r\n Ffo = 'indicators/ffo',\r\n Gi = 'indicators/gi',\r\n Gim = 'indicators/gim',\r\n It = 'indicators/it',\r\n Ia = 'indicators/ia',\r\n Ie = 'indicators/ie',\r\n Ii = 'indicators/ii',\r\n Inv = 'indicators/inv',\r\n Ltd = 'indicators/ltd',\r\n Mcap = 'indicators/mcap',\r\n Nafa = 'indicators/nafa',\r\n Ncic = 'indicators/ncic',\r\n Ncf = 'indicators/ncf',\r\n Nfcf = 'indicators/nfcf',\r\n Niacb = 'indicators/niacb',\r\n Nif = 'indicators/nif',\r\n Nico = 'indicators/nico',\r\n Noni = 'indicators/noni',\r\n Neti = 'indicators/neti',\r\n Nl = 'indicators/nl',\r\n Nm = 'indicators/nm',\r\n Nocf = 'indicators/nocf',\r\n Nppe = 'indicators/nppe',\r\n Nie = 'indicators/nie',\r\n OpInc = 'indicators/opinc',\r\n OrdInc = 'indicators/ordinc',\r\n Om = 'indicators/om',\r\n Oa = 'indicators/oa',\r\n Oca = 'indicators/oca',\r\n Ocl = 'indicators/ocl',\r\n Ofau = 'indicators/ofau',\r\n Ofa = 'indicators/ofa',\r\n Of = 'indicators/of',\r\n Oia = 'indicators/oia',\r\n Ol = 'indicators/ol',\r\n Ooe = 'indicators/ooe',\r\n Pe = 'indicators/pe',\r\n Pti = 'indicators/pti',\r\n Pb = 'indicators/pb',\r\n Pfcf = 'indicators/pfcf',\r\n Psf = 'indicators/psf',\r\n Poi = 'indicators/poi',\r\n Posi = 'indicators/posi',\r\n Qr = 'indicators/qr',\r\n Rd = 'indicators/rd',\r\n Roa = 'indicators/roa',\r\n Roate = 'indicators/roate',\r\n Roi = 'indicators/roi',\r\n Rev = 'indicators/rev',\r\n Sgae = 'indicators/sgae',\r\n Sgaeo = 'indicators/sgaeo',\r\n So = 'indicators/so',\r\n Std = 'indicators/std',\r\n Str = 'indicators/str',\r\n Tbvps = 'indicators/tbvps',\r\n Ta = 'indicators/ta',\r\n Tc = 'indicators/tc',\r\n Tcdfb = 'indicators/tcdfb',\r\n Tce = 'indicators/tce',\r\n Tca = 'indicators/tca',\r\n Tcl = 'indicators/tcl',\r\n Td = 'indicators/td',\r\n Teq = 'indicators/teq',\r\n Texp = 'indicators/texp',\r\n Tie = 'indicators/tie',\r\n Tia = 'indicators/tia',\r\n Tib = 'indicators/tib',\r\n Tl = 'indicators/tl',\r\n Tlse = 'indicators/tlse',\r\n Tse = 'indicators/tse',\r\n Ue = 'indicators/ue',\r\n // Annual only indicators\r\n Noe = 'indicators/noe',\r\n Noie = 'indicators/noie',\r\n Ole = 'indicators/ole',\r\n Rea = 'indicators/rea',\r\n}\r\n\r\nexport const FUNDAMENTAL_INDICATOR_TYPES = [\r\n IndicatorType.Ap,\r\n IndicatorType.Bvps,\r\n IndicatorType.Capex,\r\n IndicatorType.Cdp,\r\n IndicatorType.Csti,\r\n IndicatorType.Cd,\r\n IndicatorType.Cni,\r\n IndicatorType.Cogs,\r\n IndicatorType.Cr,\r\n IndicatorType.Ebitda,\r\n IndicatorType.Ebit,\r\n IndicatorType.Epsbbe,\r\n IndicatorType.Epsd,\r\n IndicatorType.Epsfd,\r\n IndicatorType.Ei,\r\n IndicatorType.Fcf,\r\n IndicatorType.Ffo,\r\n IndicatorType.Gi,\r\n IndicatorType.Gim,\r\n IndicatorType.It,\r\n IndicatorType.Ia,\r\n IndicatorType.Ie,\r\n IndicatorType.Ii,\r\n IndicatorType.Inv,\r\n IndicatorType.Ltd,\r\n IndicatorType.Mcap,\r\n IndicatorType.Nafa,\r\n IndicatorType.Ncic,\r\n IndicatorType.Ncf,\r\n IndicatorType.Neti,\r\n IndicatorType.Nfcf,\r\n IndicatorType.Niacb,\r\n IndicatorType.Nif,\r\n IndicatorType.Nico,\r\n IndicatorType.Noni,\r\n IndicatorType.Nl,\r\n IndicatorType.Nm,\r\n IndicatorType.Nocf,\r\n IndicatorType.Nppe,\r\n IndicatorType.Nie,\r\n IndicatorType.Noe,\r\n IndicatorType.OpInc,\r\n IndicatorType.OrdInc,\r\n IndicatorType.Om,\r\n IndicatorType.Oa,\r\n IndicatorType.Oca,\r\n IndicatorType.Ocl,\r\n IndicatorType.Ofau,\r\n IndicatorType.Ofa,\r\n IndicatorType.Of,\r\n IndicatorType.Oia,\r\n IndicatorType.Ol,\r\n IndicatorType.Ooe,\r\n IndicatorType.Pe,\r\n IndicatorType.Pti,\r\n IndicatorType.Pb,\r\n IndicatorType.Pfcf,\r\n IndicatorType.Psf,\r\n IndicatorType.Poi,\r\n IndicatorType.Posi,\r\n IndicatorType.Qr,\r\n IndicatorType.Rd,\r\n IndicatorType.Roa,\r\n IndicatorType.Roate,\r\n IndicatorType.Roi,\r\n IndicatorType.Rev,\r\n IndicatorType.Sgae,\r\n IndicatorType.Sgaeo,\r\n IndicatorType.So,\r\n IndicatorType.Std,\r\n IndicatorType.Str,\r\n IndicatorType.Tbvps,\r\n IndicatorType.Ta,\r\n IndicatorType.Tc,\r\n IndicatorType.Tcdfb,\r\n IndicatorType.Tce,\r\n IndicatorType.Tca,\r\n IndicatorType.Tcl,\r\n IndicatorType.Td,\r\n IndicatorType.Teq,\r\n IndicatorType.Texp,\r\n IndicatorType.Tie,\r\n IndicatorType.Tia,\r\n IndicatorType.Tib,\r\n IndicatorType.Tl,\r\n IndicatorType.Tlse,\r\n IndicatorType.Tse,\r\n IndicatorType.Ue,\r\n IndicatorType.Noie,\r\n IndicatorType.Ole,\r\n IndicatorType.Rea,\r\n] as const\r\n\r\nexport enum FundamentalPeriod {\r\n Annual = 'annual',\r\n Quarterly = 'quarterly',\r\n}\r\n\r\nexport const FundamentalPeriodLabel = {\r\n [FundamentalPeriod.Annual]: 'Annual',\r\n [FundamentalPeriod.Quarterly]: 'Quarterly',\r\n}\r\n\r\nexport const FundamentalPeriodShortLabel = {\r\n [FundamentalPeriod.Annual]: 'FY',\r\n [FundamentalPeriod.Quarterly]: 'FQ',\r\n}\r\n\r\nexport enum OverlayType {\r\n Overlay = 'overlays/overlay',\r\n None = 'overlays/none',\r\n Bb = 'overlays/bb',\r\n Dch = 'overlays/dch',\r\n Ema = 'overlays/ema',\r\n Ema2 = 'overlays/ema2',\r\n Hilo = 'overlays/hilo',\r\n Hline = 'overlays/hline',\r\n Ic = 'overlays/ic',\r\n Icf = 'overlays/icf',\r\n Kch = 'overlays/kch',\r\n Patterns = 'overlays/patterns',\r\n Pp = 'overlays/pp',\r\n Sar = 'overlays/sar',\r\n Sma = 'overlays/sma',\r\n Sma2 = 'overlays/sma2',\r\n Str = 'overlays/str',\r\n Vp = 'overlays/vp',\r\n Vwap = 'overlays/vwap',\r\n}\r\n\r\nexport enum ChartEventType {\r\n ChartEvent = 'chartEvent/chartEvent',\r\n Dividends = 'chartEvent/dividends',\r\n Split = 'chartEvent/split',\r\n Earnings = 'chartEvent/earnings',\r\n}\r\n\r\nexport enum ChartEventBadgeType {\r\n Dividends = 'chartEvent/dividends',\r\n Split = 'chartEvent/split',\r\n EarningsPositive = 'chartEvent/earnings',\r\n EarningsNegative = 'chartEvent/earningsNegative',\r\n EarningsNeutral = 'chartEvent/earningsNeutral',\r\n EarningsFuture = 'chartEvent/earningsFuture',\r\n}\r\n\r\nexport const ChartEventLabels: Record = {\r\n [ChartEventBadgeType.Dividends]: 'Dividends',\r\n [ChartEventBadgeType.Split]: 'Split',\r\n [ChartEventBadgeType.EarningsPositive]: 'Earnings & Revenue',\r\n [ChartEventBadgeType.EarningsNegative]: 'Earnings & Revenue',\r\n [ChartEventBadgeType.EarningsNeutral]: 'Earnings & Revenue',\r\n [ChartEventBadgeType.EarningsFuture]: 'Earnings & Revenue',\r\n}\r\n\r\ninterface LayoutRule {\r\n columns: number\r\n rows: number\r\n count: number\r\n gridAreas?: string[]\r\n}\r\n\r\nexport const LAYOUTS: Record = {\r\n '1h1v': { columns: 1, rows: 1, count: 1 },\r\n '1h2v': { columns: 1, rows: 2, count: 2 },\r\n '1h3v': { columns: 1, rows: 3, count: 3 },\r\n '2h1v': { columns: 2, rows: 1, count: 2 },\r\n '2h2v': { columns: 2, rows: 2, count: 4 },\r\n '3h1v': { columns: 3, rows: 1, count: 3 },\r\n '3h2v': { columns: 3, rows: 2, count: 6 },\r\n '1l2r': {\r\n columns: 2,\r\n rows: 2,\r\n count: 3,\r\n gridAreas: ['1 / 1 / 3 / 2', '1 / 2 / 2 / 3', '2 / 2 / 3 / 3'],\r\n },\r\n '1t2b': {\r\n columns: 2,\r\n rows: 2,\r\n count: 3,\r\n gridAreas: ['1 / 1 / 2 / 3', '2 / 1 / 3 / 2', '2 / 2 / 3 / 3'],\r\n },\r\n}\r\n\r\nexport const SORT_DIRECTION = {\r\n ASC: 'ASC',\r\n DESC: 'DESC',\r\n}\r\n\r\nexport const ICON_SIZE = {\r\n L: 32,\r\n}\r\n\r\n// Keep in sync with the copy in Website repo - Website/js/main/constants/common.ts\r\nexport enum TIMEFRAME {\r\n i1 = 'i1',\r\n i2 = 'i2',\r\n i3 = 'i3',\r\n i5 = 'i5',\r\n i10 = 'i10',\r\n i15 = 'i15',\r\n i30 = 'i30',\r\n h = 'h',\r\n h2 = 'h2',\r\n h4 = 'h4',\r\n d = 'd',\r\n w = 'w',\r\n m = 'm',\r\n}\r\n\r\nexport type TimeframeAndIntradayType = TIMEFRAME | 'intraday'\r\n\r\nexport const TIMEFRAMES_WITH_PRE_MARKET = [TIMEFRAME.i1, TIMEFRAME.i2, TIMEFRAME.i3, TIMEFRAME.i5]\r\n\r\nexport const IntradayTimeframeInterval = {\r\n [TIMEFRAME.i1]: 1,\r\n [TIMEFRAME.i2]: 2,\r\n [TIMEFRAME.i3]: 3,\r\n [TIMEFRAME.i5]: 5,\r\n [TIMEFRAME.i10]: 10,\r\n [TIMEFRAME.i15]: 15,\r\n [TIMEFRAME.i30]: 30,\r\n [TIMEFRAME.h]: 60,\r\n [TIMEFRAME.h2]: 120,\r\n [TIMEFRAME.h4]: 240,\r\n}\r\n\r\nexport const TimeframeLabelShort = {\r\n [TIMEFRAME.i1]: '1M',\r\n [TIMEFRAME.i2]: '2M',\r\n [TIMEFRAME.i3]: '3M',\r\n [TIMEFRAME.i5]: '5M',\r\n [TIMEFRAME.i10]: '10M',\r\n [TIMEFRAME.i15]: '15M',\r\n [TIMEFRAME.i30]: '30M',\r\n [TIMEFRAME.h]: '1H',\r\n [TIMEFRAME.h2]: '2H',\r\n [TIMEFRAME.h4]: '4H',\r\n [TIMEFRAME.d]: 'D',\r\n [TIMEFRAME.w]: 'W',\r\n [TIMEFRAME.m]: 'M',\r\n}\r\n\r\nexport enum DateRangeType {\r\n d1 = 'd1',\r\n d5 = 'd5',\r\n m1 = 'm1',\r\n m3 = 'm3',\r\n m6 = 'm6',\r\n ytd = 'ytd',\r\n y1 = 'y1',\r\n y2 = 'y2',\r\n y5 = 'y5',\r\n max = 'max',\r\n}\r\n\r\nexport enum QuoteFinancialAttachment {\r\n shortInterest = 'shortInterest',\r\n}\r\n\r\nexport type QuoteFundamentalAttachmentType =\r\n `${(typeof FUNDAMENTAL_INDICATOR_TYPES)[number] extends `indicators/${infer Type}` ? Type : never}_${FundamentalPeriod}`\r\n\r\nexport type QuoteFinancialAttachmentType = QuoteFinancialAttachment | QuoteFundamentalAttachmentType\r\n\r\nexport const TIMEFRAME_SECONDS = {\r\n [TIMEFRAME.i1]: 60,\r\n [TIMEFRAME.i2]: 120,\r\n [TIMEFRAME.i3]: 180,\r\n [TIMEFRAME.i5]: 300,\r\n [TIMEFRAME.i10]: 600,\r\n [TIMEFRAME.i15]: 900,\r\n [TIMEFRAME.i30]: 1800,\r\n [TIMEFRAME.h]: 3600,\r\n [TIMEFRAME.h2]: 7200,\r\n [TIMEFRAME.h4]: 14400,\r\n [TIMEFRAME.d]: 86400,\r\n [TIMEFRAME.w]: 604800,\r\n [TIMEFRAME.m]: 2592000,\r\n}\r\n\r\nexport const CRYPTOS = {\r\n // USD pairs\r\n BTCUSD: 'BTCUSD',\r\n ETHUSD: 'ETHUSD',\r\n BNBUSD: 'BNBUSD',\r\n SOLUSD: 'SOLUSD',\r\n XRPUSD: 'XRPUSD',\r\n DOGEUSD: 'DOGEUSD',\r\n ADAUSD: 'ADAUSD',\r\n TRXUSD: 'TRXUSD',\r\n AVAXUSD: 'AVAXUSD',\r\n DOTUSD: 'DOTUSD',\r\n BCHUSD: 'BCHUSD',\r\n NEARUSD: 'NEARUSD',\r\n LTCUSD: 'LTCUSD',\r\n APTUSD: 'APTUSD',\r\n XLMUSD: 'XLMUSD',\r\n LINKUSD: 'LINKUSD',\r\n ETCUSD: 'ETCUSD',\r\n UNIUSD: 'UNIUSD',\r\n EGLDUSD: 'EGLDUSD',\r\n OPUSD: 'OPUSD',\r\n SUIUSD: 'SUIUSD',\r\n AAVEUSD: 'AAVEUSD',\r\n\r\n // EUR pairs\r\n BTCEUR: 'BTCEUR',\r\n ETHEUR: 'ETHEUR',\r\n BNBEUR: 'BNBEUR',\r\n SOLEUR: 'SOLEUR',\r\n XRPEUR: 'XRPEUR',\r\n DOGEEUR: 'DOGEEUR',\r\n ADAEUR: 'ADAEUR',\r\n TRXEUR: 'TRXEUR',\r\n AVAXEUR: 'AVAXEUR',\r\n DOTEUR: 'DOTEUR',\r\n BCHEUR: 'BCHEUR',\r\n NEAREUR: 'NEAREUR',\r\n LTCEUR: 'LTCEUR',\r\n ICPEUR: 'ICPEUR',\r\n APTEUR: 'APTEUR',\r\n XLMEUR: 'XLMEUR',\r\n LINKEUR: 'LINKEUR',\r\n SHIBEUR: 'SHIBEUR',\r\n EGLDEUR: 'EGLDEUR',\r\n SEUR: 'SEUR',\r\n OPEUR: 'OPEUR',\r\n SUIEUR: 'SUIEUR',\r\n\r\n // USDT pairs\r\n BTCUSDT: 'BTCUSDT',\r\n ETHUSDT: 'ETHUSDT',\r\n BNBUSDT: 'BNBUSDT',\r\n SOLUSDT: 'SOLUSDT',\r\n XRPUSDT: 'XRPUSDT',\r\n DOGEUSDT: 'DOGEUSDT',\r\n ADAUSDT: 'ADAUSDT',\r\n TRXUSDT: 'TRXUSDT',\r\n AVAXUSDT: 'AVAXUSDT',\r\n DOTUSDT: 'DOTUSDT',\r\n BCHUSDT: 'BCHUSDT',\r\n NEARUSDT: 'NEARUSDT',\r\n LTCUSDT: 'LTCUSDT',\r\n ICPUSDT: 'ICPUSDT',\r\n FETUSDT: 'FETUSDT',\r\n ETCUSDT: 'ETCUSDT',\r\n APTUSDT: 'APTUSDT',\r\n XLMUSDT: 'XLMUSDT',\r\n LINKUSDT: 'LINKUSDT',\r\n SHIBUSDT: 'SHIBUSDT',\r\n UNIUSDT: 'UNIUSDT',\r\n EGLDUSDT: 'EGLDUSDT',\r\n SUSDT: 'SUSDT',\r\n OPUSDT: 'OPUSDT',\r\n SUIUSDT: 'SUIUSDT',\r\n AAVEUSDT: 'AAVEUSDT',\r\n TRUMPUSDT: 'TRUMPUSDT',\r\n\r\n // BTC pairs\r\n ETHBTC: 'ETHBTC',\r\n BNBBTC: 'BNBBTC',\r\n SOLBTC: 'SOLBTC',\r\n XRPBTC: 'XRPBTC',\r\n DOGEBTC: 'DOGEBTC',\r\n ADABTC: 'ADABTC',\r\n TRXBTC: 'TRXBTC',\r\n AVAXBTC: 'AVAXBTC',\r\n DOTBTC: 'DOTBTC',\r\n BCHBTC: 'BCHBTC',\r\n NEARBTC: 'NEARBTC',\r\n LTCBTC: 'LTCBTC',\r\n ICPBTC: 'ICPBTC',\r\n FETBTC: 'FETBTC',\r\n ETCBTC: 'ETCBTC',\r\n APTBTC: 'APTBTC',\r\n XLMBTC: 'XLMBTC',\r\n LINKBTC: 'LINKBTC',\r\n UNIBTC: 'UNIBTC',\r\n EGLDBTC: 'EGLDBTC',\r\n SBTC: 'SBTC',\r\n OPBTC: 'OPBTC',\r\n SUIBTC: 'SUIBTC',\r\n AAVEBTC: 'AAVEBTC',\r\n} as const\r\n\r\nexport enum SpecificChartFunctionality {\r\n default = 'default',\r\n quotePage = 'quotePage',\r\n quotePerf = 'quotePerf',\r\n quoteFinancials = 'quoteFinancials',\r\n chartPage = 'chartPage',\r\n smallIndex = 'smallIndex',\r\n offScreen = 'offScreen',\r\n forexPage = 'forexPage',\r\n futuresPage = 'futuresPage',\r\n cryptoPage = 'cryptoPage',\r\n}\r\n\r\nexport enum TextAlign {\r\n left = 'left',\r\n right = 'right',\r\n center = 'center',\r\n start = 'start',\r\n end = 'end',\r\n}\r\n\r\nexport enum TextBaseline {\r\n top = 'top',\r\n hanging = 'hanging',\r\n middle = 'middle',\r\n alphabetic = 'alphabetic',\r\n ideographic = 'ideographic',\r\n bottom = 'bottom',\r\n}\r\n\r\nexport enum ScaleType {\r\n Linear = 'linear',\r\n Percentage = 'percentage',\r\n Logarithmic = 'logarithmic',\r\n}\r\n\r\nexport const QuotePollingIntervalInMs = {\r\n Elite: {\r\n Default: 2000,\r\n Stock: 500,\r\n Forex: 5000,\r\n Crypto: 5000,\r\n Futures: 5000,\r\n },\r\n Free: {\r\n Default: 30000,\r\n Stock: 30000,\r\n Forex: 5000,\r\n Crypto: 5000,\r\n Futures: 5000,\r\n },\r\n Reduced: 60000,\r\n}\r\n\r\nexport const EXTRA_MARKET_BUFFER_MINUTES = 30\r\n\r\nexport const ScaleLabel = {\r\n [ScaleType.Linear]: 'Linear',\r\n [ScaleType.Percentage]: 'Percentage',\r\n [ScaleType.Logarithmic]: 'Logarithmic',\r\n}\r\n\r\nexport const PANE_HEIGHT_DEFAULT = {\r\n chart: 400,\r\n indicator: 120,\r\n}\r\n\r\nexport const INDICATOR_LABEL_HEIGHT = 24\r\n\r\nexport const MOBILE_BARS_TO_VIEW = 150 // 5 months of daily bars\r\n\r\nexport const MOBILE_VIEW_BREAKPOINT_WIDTH = 768\r\n\r\nexport const FREE_DATE_RANGES = ['m1', 'm3', 'm6', 'ytd', 'y1', 'y2', 'y5', 'max']\r\n\r\nexport const getTimeframeLabel = (timeframe: string) => {\r\n switch (timeframe) {\r\n case TIMEFRAME.i1:\r\n return '1 MIN'\r\n case TIMEFRAME.i2:\r\n return '2 MIN'\r\n case TIMEFRAME.i3:\r\n return '3 MIN'\r\n case TIMEFRAME.i5:\r\n return '5 MIN'\r\n case TIMEFRAME.i10:\r\n return '10 MIN'\r\n case TIMEFRAME.i15:\r\n return '15 MIN'\r\n case TIMEFRAME.i30:\r\n return '30 MIN'\r\n case TIMEFRAME.h:\r\n return '1 HR'\r\n case TIMEFRAME.h2:\r\n return '2 HR'\r\n case TIMEFRAME.h4:\r\n return '4 HR'\r\n case TIMEFRAME.d:\r\n return 'DAILY'\r\n case TIMEFRAME.w:\r\n return 'WEEKLY'\r\n case TIMEFRAME.m:\r\n return 'MONTHLY'\r\n default:\r\n return ''\r\n }\r\n}\r\n\r\nexport type ChartsPageQueryParams = {\r\n p: string\r\n t: string\r\n l: string\r\n r?: string\r\n i?: string\r\n sidebar?: string\r\n}\r\n\r\nexport type QuotePageQueryParams = {\r\n p?: string\r\n t: string\r\n r?: string\r\n i?: string\r\n ty?: QuotePageQueryChartTypes\r\n}\r\n\r\nexport enum QuotePageQueryChartTypes {\r\n l = 'l',\r\n c = 'c',\r\n cs = 'cs',\r\n hc = 'hc',\r\n ha = 'ha',\r\n o = 'o',\r\n p = 'p',\r\n}\r\n\r\nexport type ChartsOrQuotePageQueryParams = ChartsPageQueryParams | QuotePageQueryParams\r\n\r\nexport enum MacroTimeframe {\r\n // seconds = 'seconds',\r\n minutes = 'minutes',\r\n hours = 'hours',\r\n days = 'days',\r\n weeks = 'weeks',\r\n months = 'months',\r\n}\r\n\r\nexport const MicroMacroTimeframe = {\r\n [TIMEFRAME.i1]: {\r\n micro: 1,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i2]: {\r\n micro: 2,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i3]: {\r\n micro: 3,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i5]: {\r\n micro: 5,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i10]: {\r\n micro: 10,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i15]: {\r\n micro: 15,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i30]: {\r\n micro: 30,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.h]: {\r\n micro: 1,\r\n macro: MacroTimeframe.hours,\r\n },\r\n [TIMEFRAME.h2]: {\r\n micro: 2,\r\n macro: MacroTimeframe.hours,\r\n },\r\n [TIMEFRAME.h4]: {\r\n micro: 4,\r\n macro: MacroTimeframe.hours,\r\n },\r\n [TIMEFRAME.d]: {\r\n micro: 1,\r\n macro: MacroTimeframe.days,\r\n },\r\n [TIMEFRAME.w]: {\r\n micro: 1,\r\n macro: MacroTimeframe.weeks,\r\n },\r\n [TIMEFRAME.m]: {\r\n micro: 1,\r\n macro: MacroTimeframe.months,\r\n },\r\n}\r\n\r\nexport const MicroTimeframeRange = (Object.keys(MicroMacroTimeframe) as TIMEFRAME[]).reduce(\r\n (prev, curr) => ({\r\n ...prev,\r\n [MicroMacroTimeframe[curr].macro]: prev[MicroMacroTimeframe[curr].macro]\r\n ? [...prev[MicroMacroTimeframe[curr].macro], MicroMacroTimeframe[curr].micro]\r\n : [MicroMacroTimeframe[curr].micro],\r\n }),\r\n {} as { [key in MacroTimeframe]: number[] }\r\n)\r\n\r\ntype IRange = {\r\n from?: number\r\n to?: number\r\n}\r\n\r\nexport type IVisibility = {\r\n [key in MacroTimeframe]?: IRange\r\n}\r\n\r\nexport enum SetVisibilityTo {\r\n currentAndAbove,\r\n currentAndBelow,\r\n currentOnly,\r\n all,\r\n}\r\n\r\nexport const QUOTE_FETCH_EVENT = 'quoteFetchEvent'\r\n\r\n// Keep in sync with the clone in Website repo in shared/is-stock-fast-refresh-available.ts\r\nexport const PREMARKET_AFTERMARKET_HOURS = 2.5\r\n\r\nexport const CHART_ELEMENT_ID = 'chart'\r\n\r\nexport const CHART_SETTINGS_DIALOG_TEST_ID = 'chart-settings-dialog'\r\n\r\nexport const MARKET_START = { hours: 9, minutes: 30 }\r\nexport const MARKET_END = { hours: 16, minutes: 0 }\r\n","import {\r\n MARKET_END,\r\n MARKET_START,\r\n MOBILE_VIEW_BREAKPOINT_WIDTH,\r\n PREMARKET_AFTERMARKET_HOURS,\r\n SpecificChartFunctionality,\r\n} from './constants/common'\r\nimport { captureException, getIsSSr } from './utils/helpers'\r\n\r\nexport { getSanitizedTicker } from './utils/ticker-sanitizer'\r\n\r\nfunction getIsDstInNy(date: Date) {\r\n const dayNumber = date.getDate()\r\n const monthIndex = date.getMonth()\r\n const dayOfWeek = date.getDay()\r\n const previousSunday = dayNumber - dayOfWeek\r\n if (monthIndex < 2 || monthIndex > 10) {\r\n return false\r\n }\r\n if (monthIndex > 2 && monthIndex < 10) {\r\n return true\r\n }\r\n return monthIndex === 2 ? previousSunday >= 8 : previousSunday <= 0\r\n}\r\n\r\nclass Utils {\r\n static min(...args: T[]): number {\r\n if (typeof args[0] === 'number') {\r\n return args[0] < +args[1] ? args[0] : (args[1] as number)\r\n }\r\n let min = args[0][0]\r\n for (const arg of args) {\r\n for (const el of arg as number[]) {\r\n if (el < min) {\r\n min = el\r\n }\r\n }\r\n }\r\n return min\r\n }\r\n\r\n static max(...args: T[]): number {\r\n if (typeof args[0] === 'number') {\r\n return args[0] > +args[1] ? args[0] : (args[1] as number)\r\n }\r\n let max = args[0][0]\r\n for (const arg of args) {\r\n for (const el of arg as number[]) {\r\n if (el > max) {\r\n max = el\r\n }\r\n }\r\n }\r\n return max\r\n }\r\n\r\n static minMax(...args: number[][]) {\r\n let max\r\n let min = (max = args[0][0] as number)\r\n for (const arg of args) {\r\n for (const el of arg) {\r\n if (el < min) {\r\n min = el\r\n }\r\n if (el > max) {\r\n max = el\r\n }\r\n }\r\n }\r\n return [min, max]\r\n }\r\n\r\n static getScaleRatio() {\r\n return (typeof window !== 'undefined' && window.devicePixelRatio) || 1\r\n }\r\n\r\n static setSizeOnCanvasElement({\r\n canvasElement,\r\n width,\r\n height,\r\n ratio = Utils.getScaleRatio(),\r\n }: {\r\n canvasElement: HTMLCanvasElement | null\r\n width: number\r\n height: number\r\n ratio?: number\r\n }) {\r\n if (canvasElement) {\r\n canvasElement.width = width * ratio\r\n canvasElement.height = height * ratio\r\n canvasElement.style.width = width + 'px'\r\n canvasElement.style.height = height + 'px'\r\n }\r\n }\r\n\r\n static getQuoteDateTimestampOffsetInSeconds(referenceDate?: Date) {\r\n const date = referenceDate || new Date()\r\n const dateAsNY = new Date(\r\n date.getUTCFullYear(),\r\n date.getUTCMonth(),\r\n date.getUTCDate(),\r\n date.getUTCHours() - 5,\r\n date.getUTCMinutes(),\r\n date.getUTCSeconds()\r\n )\r\n const isDst = getIsDstInNy(dateAsNY)\r\n return (isDst ? 4 : 5) * 60 * 60\r\n }\r\n\r\n static convertLocalToNyTime(referenceDate: Date, addOffset: boolean) {\r\n const date = new Date(referenceDate)\r\n const quoteDateTimeOffsetInMs = Utils.getQuoteDateTimestampOffsetInSeconds(date) * 1000\r\n const localTimeOffsetInMs = date.getTimezoneOffset() * 60 * 1000\r\n const offsetDirectionCoefficient = addOffset ? 1 : -1\r\n date.setTime(date.getTime() + (localTimeOffsetInMs - quoteDateTimeOffsetInMs) * offsetDirectionCoefficient)\r\n return date\r\n }\r\n\r\n // Keep in sync with the clone in Website repo in shared/isStockFastRefreshAvailable.ts\r\n static isStockFastRefreshAvailable(hasPremarket = true, hasAftermarket = true, bufferMinutes = 30) {\r\n const getMinutes = ({ hours, minutes }: { hours: number; minutes: number }) => hours * 60 + minutes\r\n\r\n const date = convertLocalToNyTime(new Date(), true)\r\n const dayOfWeek = date.getDay()\r\n const currentDayMinutes = date.getHours() * 60 + date.getMinutes()\r\n\r\n const premarketMinutes = hasPremarket ? PREMARKET_AFTERMARKET_HOURS * 60 : 0\r\n const aftermarketMinutes = hasAftermarket ? PREMARKET_AFTERMARKET_HOURS * 60 : 0\r\n\r\n const isWeekend = dayOfWeek === 0 || dayOfWeek === 6\r\n const isOpen = getMinutes(MARKET_START) - premarketMinutes - bufferMinutes <= currentDayMinutes\r\n const isClosed = getMinutes(MARKET_END) + aftermarketMinutes + bufferMinutes <= currentDayMinutes\r\n return !isWeekend && isOpen && !isClosed\r\n }\r\n\r\n static dateFromUnixTimestamp(timestamp: number) {\r\n /*\r\n * Passing 0 as a param is needed in order to setUTCSeconds work properly.\r\n * The function adds seconds to the date instance if it exceeds 60.\r\n * For more info see the docs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds\r\n * */\r\n const date = new Date(0)\r\n date.setUTCSeconds(timestamp)\r\n return Utils.convertLocalToNyTime(date, true)\r\n }\r\n\r\n static dateStringFromDate(date: Date) {\r\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(\r\n 2,\r\n '0'\r\n )}`\r\n }\r\n\r\n static dateFromDateString(dateString: string) {\r\n const [yyyy, mm, dd] = dateString.split('-')\r\n\r\n const date = new Date(Number.parseInt(yyyy), Number.parseInt(mm) - 1, Number.parseInt(dd))\r\n if (Number.isNaN(date.getTime())) {\r\n captureException(new Error('Invalid Date'), { extra: { date, dateString } })\r\n }\r\n\r\n return date\r\n }\r\n\r\n static isMobile(testTouchPoints?: boolean) {\r\n if (getIsSSr()) return false\r\n let isMobileOs = false\r\n\r\n // New iOS versions no longer report iPad in user agent\r\n if (navigator.userAgent.indexOf('Macintosh') > -1) {\r\n try {\r\n document.createEvent('TouchEvent')\r\n isMobileOs = true\r\n } catch {}\r\n } else {\r\n isMobileOs = !!navigator.userAgent.match(\r\n /\\b(Android|webOS|i(?:Phone|Pad|Pod)|BlackBerry|Windows (?:Phone|Mobile))\\b/i\r\n )\r\n }\r\n\r\n if (testTouchPoints) {\r\n try {\r\n return (\r\n isMobileOs &&\r\n (window.navigator.msMaxTouchPoints ||\r\n window.navigator.maxTouchPoints ||\r\n 'ontouchstart' in document.createElement('div'))\r\n )\r\n } catch {}\r\n }\r\n\r\n return isMobileOs\r\n }\r\n\r\n static isIPad() {\r\n const matchesIPad = navigator.userAgent.match(/iPad/i)\r\n const matchesIPhone = navigator.userAgent.match(/iPhone/i)\r\n const matchesIPod = navigator.userAgent.match(/iPod/i)\r\n const matchesIOSLike = navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints > 0\r\n\r\n return (matchesIOSLike && !matchesIPhone && !matchesIPod) || matchesIPad\r\n }\r\n\r\n static getCookie(name: string) {\r\n const re = new RegExp('(?:(?:^|.*;\\\\s*)' + name + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$')\r\n return document.cookie.replace(re, '$1')\r\n }\r\n\r\n static setCookie(name: string, value: string, expires: Date) {\r\n let cookie = name + '=' + value + '; expires=' + expires.toUTCString()\r\n if (document.location.hostname !== 'localhost') {\r\n cookie += '; domain=.finviz.com'\r\n }\r\n document.cookie = cookie\r\n }\r\n}\r\n\r\nexport default Utils\r\nexport const convertLocalToNyTime = Utils.convertLocalToNyTime\r\nexport const dateFromUnixTimestamp = Utils.dateFromUnixTimestamp\r\nexport const dateStringFromDate = Utils.dateStringFromDate\r\nexport const dateFromDateString = Utils.dateFromDateString\r\n\r\nexport function getFullscreenStatus(): boolean {\r\n return (\r\n document.fullscreenElement ??\r\n document.webkitFullscreenElement ??\r\n document.mozFullScreenElement ??\r\n document.msFullscreenElement ??\r\n false\r\n )\r\n}\r\n\r\nexport function getRequestFullscreen(element: HTMLElement) {\r\n return (\r\n element.requestFullscreen ??\r\n element.webkitRequestFullScreen ??\r\n element.mozRequestFullScreen ??\r\n element.msRequestFullscreen\r\n )\r\n}\r\n\r\nexport function getExitFullscreen() {\r\n return (\r\n document.exitFullscreen ?? document.webkitExitFullscreen ?? document.mozExitFullScreen ?? document.msExitFullscreen\r\n )\r\n}\r\n\r\nexport function ready(fn: () => void) {\r\n if (document.readyState !== 'loading') {\r\n fn()\r\n return\r\n }\r\n\r\n document.addEventListener('DOMContentLoaded', fn)\r\n}\r\n\r\nexport function getChartsDimensions(chartElementId: string) {\r\n const PADDING = 2 // Border widths\r\n const containerElement = document.getElementById(chartElementId)\r\n\r\n const box = containerElement?.getBoundingClientRect()\r\n\r\n return {\r\n width: Math.max((box?.width ?? 0) - PADDING, 0),\r\n height: Math.max((box?.height ?? 0) - PADDING, 0),\r\n }\r\n}\r\n\r\nexport function getIsMobileScreenSize() {\r\n return window.innerWidth < MOBILE_VIEW_BREAKPOINT_WIDTH\r\n}\r\n\r\nexport function getIsMobilePortrait(isMobile?: boolean) {\r\n if (isMobile ?? Utils.isMobile()) {\r\n return window.orientation % 180 === 0\r\n }\r\n return false\r\n}\r\n\r\nexport function numberToStringWithUnitsSuffix(value: number) {\r\n let suffix = ''\r\n if (value >= 1000000000) {\r\n value /= 1000000000\r\n suffix = 'B'\r\n } else if (value >= 1000000) {\r\n value /= 1000000\r\n suffix = 'M'\r\n } else if (value >= 1000) {\r\n value /= 1000\r\n suffix = 'K'\r\n }\r\n\r\n return value.toFixed(2) + suffix\r\n}\r\n\r\nexport function isRedesignEnabled() {\r\n return typeof window !== 'undefined' && window.FinvizSettings?.hasRedesignEnabled\r\n}\r\n\r\nexport function isRedesignedPage(\r\n obj: { specificChartFunctionality?: SpecificChartFunctionality | null },\r\n matchingPages = [\r\n SpecificChartFunctionality.forexPage,\r\n SpecificChartFunctionality.futuresPage,\r\n SpecificChartFunctionality.cryptoPage,\r\n ]\r\n) {\r\n const isQuotePage = obj.specificChartFunctionality === SpecificChartFunctionality.quotePage\r\n const isQuoteFinancials = obj.specificChartFunctionality === SpecificChartFunctionality.quoteFinancials\r\n\r\n return (\r\n (isRedesignEnabled() && matchingPages.includes(obj.specificChartFunctionality!)) ||\r\n // Legacy design on quote uses redesigned elements (page header + chart controls)\r\n isQuotePage ||\r\n isQuoteFinancials\r\n )\r\n}\r\n\r\nexport function getMaxValue(currentValue: number | undefined, newValue: number | undefined) {\r\n return currentValue && newValue ? Math.max(currentValue, newValue) : (currentValue ?? newValue ?? undefined)\r\n}\r\n\r\nexport function getMinValue(currentValue: number | undefined, newValue: number | undefined) {\r\n return currentValue && newValue ? Math.min(currentValue, newValue) : (currentValue ?? newValue ?? undefined)\r\n}\r\n","import { EmptyObject, ObjectHash } from '../../types/shared'\r\n\r\nexport function getRoundedString({ number, numOfDecimalPlaces }: { number: number; numOfDecimalPlaces: number }) {\r\n const precision = Math.pow(10, numOfDecimalPlaces)\r\n return String(Math.round(number * precision) / precision)\r\n}\r\n\r\nexport function getIsSSr() {\r\n return typeof process !== 'undefined' && !!process?.env.IS_OFFSCREEN_RENDERER\r\n}\r\n\r\nexport function isValidHexColor(color: string) {\r\n const regex = /^#([\\da-f]{3}){1,2}$|^#([\\da-f]{4}){1,2}$/i\r\n return !!color && regex.test(color)\r\n}\r\n\r\nexport function getParsedIntegersFromPeriodString(periodString: string | number) {\r\n // Ideas have number periods\r\n const periodParts = `${periodString}`.split(',')\r\n return periodParts.map((part) => Number.parseInt(part, 10))\r\n}\r\n\r\nexport function captureException(exception: Error, captureContext?: { extra: ObjectHash }) {\r\n if (process.env.NODE_ENV === 'development' || process.env.IS_E2E_TESTING) {\r\n console.error(exception)\r\n } else if (process.env.IS_OFFSCREEN_RENDERER) {\r\n if (!global.Sentry) {\r\n console.error('Sentry is not defined in the global scope !')\r\n return\r\n }\r\n global.Sentry.captureException(exception, captureContext)\r\n } else {\r\n window.Sentry.captureException(exception, captureContext)\r\n }\r\n}\r\n\r\nexport function isPositiveFloat(value: string | number) {\r\n const parsedNumber = Number.parseFloat(`${value}`)\r\n return !Number.isNaN(parsedNumber) && isFinite(parsedNumber) && parsedNumber > 0\r\n}\r\n\r\nexport function isPositiveInteger(value: string | number) {\r\n const string = `${value}`\r\n return isPositiveFloat(value) && Number.parseInt(string, 10) === Number.parseFloat(string)\r\n}\r\n\r\nexport function isInRange({\r\n value,\r\n min = Number.MIN_SAFE_INTEGER,\r\n max = Number.MAX_SAFE_INTEGER,\r\n}: {\r\n value: string | number\r\n min?: number\r\n max?: number\r\n}) {\r\n const parsedNumber = Number.parseFloat(`${value}`)\r\n return !Number.isNaN(parsedNumber) && parsedNumber >= min && parsedNumber <= max\r\n}\r\n\r\nexport function tryJsonParse(json: string | null = '') {\r\n try {\r\n return JSON.parse(json ?? '') as Result\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nexport function getValueInRange({ value, min, max }: { value: number; min: number; max: number }) {\r\n return Math.min(Math.max(value, min), max)\r\n}\r\n\r\nexport function isPrimaryClick(e: React.Touch | React.TouchEvent | React.MouseEvent) {\r\n // cypress trigger mouseevent has button: undefined if button option isn't explicitly specified\r\n // as cy.get('.target').trigger('mousedown', { button: 0 })\r\n if (e.hasOwnProperty('button') && (e as unknown as MouseEvent).button !== undefined) {\r\n return (e as unknown as MouseEvent).button === 0\r\n } else {\r\n return true\r\n }\r\n}\r\n\r\n// this function is used to fix the issue with circular reference when stringifying an object using JSON.stringify\r\nexport function getJSONReplacerFunc() {\r\n const visited = new WeakSet()\r\n return (key: string, value: any) => {\r\n if (typeof value === 'object' && value !== null) {\r\n if (visited.has(value)) {\r\n return\r\n }\r\n visited.add(value)\r\n }\r\n return value\r\n }\r\n}\r\n\r\n// This is a duplicate from Website repo which is accessible on window.FLibs but this doesn't work on SSR charts\r\nexport const formatDateToStringUS = (date: Date, options?: Intl.DateTimeFormatOptions | undefined) =>\r\n date.toLocaleDateString('en-US', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n ...options,\r\n })\r\n\r\n// randomUUID source: https://stackoverflow.com/questions/105034/how-do-i-create-a-guid-uuid/2117523#2117523\r\nexport function randomUUID() {\r\n return `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, (substring) => {\r\n const c = Number(substring)\r\n return (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)\r\n })\r\n}\r\n\r\nexport function getUuid() {\r\n return window.crypto?.randomUUID?.() ?? randomUUID()\r\n}\r\n\r\n// duplicate from Website/js/main/util.ts, to be refactored\r\nexport function getEarningsDateSuffix(date: Date) {\r\n const hours = date.getHours()\r\n\r\n if (hours <= 9) {\r\n return 'BMO'\r\n } else if (hours >= 16) {\r\n return 'AMC'\r\n }\r\n\r\n return ''\r\n}\r\n\r\nexport function isValidTickerString(ticker: string) {\r\n const regex = /^@?[a-z0-9](?:[a-z0-9]*[-_]?[a-z0-9]+)?$/\r\n return regex.test(ticker.toLowerCase())\r\n}\r\n"],"names":["xCache","CanvasSparkline","Component","constructor","arguments","_defineProperty","createRef","x","dateChanges","width","height","hasStickyLabels","this","props","keys","Object","forEach","key","index","text","textWidth","canvasContext","measureText","xPos","Number","length","rightBound","Math","min","leftBound","max","fillText","data","changeOpacity","shadow","lineColor","textColor","changeDomain","change","retinafy","canvas","current","xCacheKey","d3","range","domain","y","d","opacityChange","abs","textOpacity","toFixed","clearRect","translate","strokeStyle","beginPath","i","lineTo","stroke","fillStyle","textAlign","font","_renderXAxisLabels","shouldComponentUpdate","nextProps","componentDidMount","getContext","isFirefoxDesktop","willReadFrequently","undefined","_renderCanvas","componentDidUpdate","render","className","_jsx","classNames","ref","ActionTypes","keyMirror","INIT","INIT_TILES","UPDATE_DATA","CHANGE_TIMEFRAME_STARTED","CHANGE_TIMEFRAME_COMPLETED","CHANGE_TIMEFRAME_FAILED","PayloadSources","SERVER_ACTION","VIEW_ACTION","AppDispatcher","Dispatcher","handleServerAction","action","payload","source","dispatch","handleViewAction","getRows","tiles","values","map","tile","label","value","sort","a","b","_timeframe","_rows","RowsStore","Store","getTimeframe","rowsStore","dispatchToken","register","type","_tiles","rows","group","contracts","contract","ticker","timeframe","emitChange","period","EventEmitter","emit","CHANGE_EVENT","addChangeListener","callback","on","removeChangeListener","removeListener","_tilesGroups","_tileOrder","TilesStore","getTiles","getTilesList","indexOf","getTile","getTilesGroup","getTilesInGroup","g","toUpperCase","filter","tilesStore","setMaxListeners","push","PageType","FuturesTimeframe","LayoutType","LabelStyle","TileStyle","redGreenGradient","colors","nullColor","futuresDomains","w","m","mtd","q","hy","ytd","forexDomains","cryptoDomains","generateColorScale","domains","domainId","gradient","linearScale","round","getCookie","name","re","RegExp","document","cookie","replace","layout","groups","ForexFuturesCryptoSettings","withSuspense","_ref","isPremium","chartLayoutModel","useChartLayoutGlobalModelAsync","ChartSettingsButton","focusRing","size","theme","leftContent","Icon","model","IMAGE_SELECTOR","updateUrlString","urlString","query","url","URL","searchParams","delete","set","toString","getPageTitle","isDetail","pageType","Boolean","join","FuturesForexCryptoTimeframeBar","_query$r","_query$p","_query$r2","title","specificChartFunctionality","instrument","onTimeframeChange","onDateRangeChange","useTrackPageView","navigate","useNavigate","location","useLocation","useSearchParams","React","fromEntries","favoriteTimeframes","toggleFavoriteTimeframe","useFavoriteTimeframes","dateRange","r","timeFrameGroups","dateRangeGroupsWithHref","getTimeframeGroupsWithHref","generatePath","timeFrame","generatePathForTimeframeDateRange","pathname","utmCampaign","timeframeUtm","getDateRangeGroupsWithHref","customRange","isCustomAvailable","window","daterangeUtm","onDialogSubmit","customDateRangeDialogState","handleDateRangeSelect","useCustomDateRangeDialog","anchorDate","getDefaultDateRangeAnchorDate","shouldReloadOnNavigate","pathGenerator","_ref2","search","URLSearchParams","p","handleTimeframeDateRangeChange","_ref3","querySelectorAll","image","src","srcset","split","dyna","rule","trim","updateImageSrc","tf","linkElement","href","updateLinkhref","closest","StockDetailTimeframeBar","chartIndex","isDateRangeAvailable","isScrollIntoViewEnabled","onTimeframeSelect","_timeframe$labelPageT","labelPageTitle","onDateRangeSelect","option","CUSTOM_DATE_RANGE","_jsxs","_Fragment","children","TimeframeBar","containerElement","body","onFavoriteTimeframeToggle","selectedTimeframe","TIMEFRAME","_option$labelPageTitl","encodeQueryString","selectedDateRange","dateRangeGroups","_ref4","onCustomDateRangeClick","show","CustomDateRange","dialogState","_ref5","getTimeframeFromDateRange","Instrument","Stock","_ref6","ResizableChartLayoutWithGlobalState","config","chartEl","getElementById","CHART_ELEMENT_ID","chartConfig","getInitChartConfig","ChartLayoutWithGlobalState","getChartLayoutSizeConfig","parentElement","Sparkline","line","curve","classnames","transform","PropTypes","isRequired","initialConfig","initialTA","FinvizSettings","TA","JSON","parse","stringify","scrollable","editable","Utils","isMobile","COTs","convertTa","greenRedGradient","slice","reverse","redGradient","greenGradient","redGreenGradientBubbles","gradients","ScaleId","IntradayReduced","DayPerf","_5","_10","_15","_20","_25","_relvol","_pe","_fpe","_peg","_ps","_pb","_div","_eps5y","_short","_rec","_earndate","_portfolioPct","_portfolioUsd","_percentHundred","bubbleGradients","gradientSmall","DEFAULT_OVERLAYS","getHoverChartUrl","_FinvizSettings$hover","_FinvizSettings$hover2","_FinvizSettings$hover3","escaped","hoverCharts","stock","hasDarkTheme","overlays","hasUserPremium","patterns","cs","t","ct","tm","imgUrl","nodeChartsDomain","getHoverChartDimensions","_FinvizSettings$hover4","_FinvizSettings$hover5","getReferrerPolicy","getHoverChartImg","_FinvizSettings$hover6","chartSize","srcSet","getSrcSet","img","getScaleRatio","_window$devicePixelRa","devicePixelRatio","context","ratio","style","scale","AdsProvider","getAdsProvider","None","adsProvider","Freestar","InvestingChannel","trackPageView","_window$gtag","_window","_window$gtag2","_window2","freestarPageView","_window$freestar","gtag","call","freestar","queue","trackPageview","ButtonSwitch","items","controlledValue","defaultValue","onChange","labelClassNames","rounding","groupRounding","activeTheme","readonly","restProps","internalValue","setInternalValue","handleChange","newValue","ButtonGroup","hasDivider","Button","contentClass","disabled","onClick","ColorVariant","CheckboxSize","CheckboxComponent","_props$checked","color","default","checked","defaultChecked","violet","emerald","orange","teal","pink","lime","purple","green","yellow","blue","red","gray","darkGray","Checkbox","forwardRef","clamp","num","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","nativeEvent","handleKeyDown","keyCode","which","handleMoveEnd","toggleDocumentEvents","state","toggleEvent","addEventListener","removeEventListener","useLayoutEffect","onTouchStart","onMouseDown","onKeyDown","tabIndex","DraggablePicker","memo","Pointer","backgroundColor","hexStringToRGBA","hexString","hexColor","removeHashSymbol","hexStringToHSVA","rgbaToHSVA","alphaToHex","alpha","padStart","rgbaToHexString","hsvaToHEXString","hsvaToRGBA","v","c","h","s","f","n","k","rgbaToRGBAString","rgbaStringToObject","colorParts","exec","String","parseInt","parseFloat","strColor","isValidColor","isRgb","startsWith","Option","convertColorToHEX","getIsRgb","rgbKeys","some","getHSVAFromColor","Alpha","changeLightness","pos","gradientPreview","useMemo","backgroundImage","DEFAULT_COLORS","ColorPalette","lowerCaseColor","toLowerCase","colorObj","isSelected","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","ColorPicker","canSelectCustom","canSelectAlpha","outputFormat","onPaletteItemClick","cachedColor","hsvaColor","setColor","popover","Ariakit","input","currentColor","newColor","onChangeCallback","stringColor","output","onSetCustomCodeClick","_prompt","prompt","alert","_hex","orignalColor","focus","preventScroll","InputColorPicker","inputDataTestId","popoverState","usePopoverState","isMobileDevice","PopoverTrigger","Popover","hideOnInteractOutside","backdrop","hide","MultiColorPicker","colorInputLabel","ColorTabButton","ButtonRounding","small","ButtonColorPicker","buttonPickerDataTestId","isOpen","isMultiPicker","activeColorIndex","setActiveColorIndex","handleColorChange","originalColor","colorObject","as","appearance","active","childComponent","CopyToClipboard","bottomLeftContent","isCopied","setIsCopied","handleCopyToClipboard","copy","timeout","resetTimer","clearTimeout","setTimeout","Textarea","readOnly","e","select","DropdownRounding","DropdownTheme","StatelessDropdown","trigger","modal","gutter","unmountOnHide","showOnHover","autoFocusOnShow","autoFocusOnHide","onFullyOpen","onFullyClosed","store","placement","zIndex","updatePosition","usePopoverPlacement","isFullyOpen","setIsFullyOpen","isMounted","wasMounted","usePrevious","menuGutter","parent","focusable","portal","hideOnHoverOutside","preventBodyScroll","focusWithoutScroll","blurWithoutScroll","none","onTransitionEnd","ev","target","Dropdown","orientation","focusLoop","virtualFocus","DropdownItemComponent","asComponent","OptionButton","DropdownItem","useDropdownState","CHART_CONTEXT_MENU_ID","hasChartContextMenuGainedFocus","blurEvent","chartContextMenu","relatedTarget","contains","ContextMenuInner","onClose","id","onContextMenu","item","MenuGroup","options","rightContent","_item$onClick","assign","menu_option","ContextMenu","ChartGridCell","gridArea","GridLayout","columns","border","gridTemplateColumns","gridTemplateRows","ChartGrid","defaultValueAccessor","InnerState","valueKey","changeKey","valueAccessor","setState","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","hasRedesignEnabled","horizontal","alternative","Toolbar","hasFocusRings","toolbarRef","contextProviderValue","toolbarSettings","isSafariDesktop","forceReflow","throttle","originalWidth","offsetWidth","showTimeout","hideTimeout","Provider","querySelector","el","ToolbarButton","_props$appearance","_buttonSettings$size","_props$children","disabledTooltip","isInAction","isInActionProp","isLoading","iconAction","buttonSettings","isActive","includeRedesign","grow","getButtonThemeSettings","getMainIcon","iconActive","menubar","blurOnHoverEnd","titleActive","Delayed","delay","delayComponent","Spinner","isMobileBrowser","ToolbarGroup","defaultItem","groupItems","groupTitle","useNativeSelect","rowId","selectedItem","setSelectedItem","groupId","toLocaleLowerCase","isAlternativeTheme","menu","menuButton","setMenuButton","open","mounted","anchorElement","parentMenu","menuContentElement","hideMenu","onMouseLeave","showMenu","handleMenuOpen","setDisclosureElement","setAnchorElement","NativeSelect","findIndex","onFocusVisible","onPointerDown","portalElement","ToolbarItem","isItemActive","ToolbarDivider","StepContent","Box","Heading","level","Paragraph","shepherdLibrary","async","loadShepherdLibrary","setLoading","shepherdPromise","buttonClasses","BUTTON_BASE_CLASS","BUTTON_FOCUS_STYLES","ButtonSize","regular","getStepButtons","tour","arr","_step$backButton","_step$nextButton","complete","classes","getButtonTheme","ButtonTheme","light","button","ButtonPadding","back","backButton","next","nextButton","getTourKey","getStepsForUser","tours","_localStorage","lastFinishedTour","localStorage","getItem","lastTourIndex","allToursViewed","every","skip","toursToView","hasNewTours","reduce","acc","steps","initialTour","completeTour","_localStorage2","setItem","DEFAULT_OPTIONS","exitOnEsc","useModalOverlay","useTour","setIsLoading","currentTour","setTour","controller","AbortController","loadingSetter","_controller$current","signal","aborted","_controller$current2","abort","startTour","definition","_controller$current3","setComplete","tourUtils","_definition$initialTo","Tour","from","removeStep","processedSteps","_step$placement","_step$offset","_step$overlayRadius","_step$overlayPadding","attachTo","element","floatingUIOptions","middleware","shift","padding","offset","mainAxis","crossAxis","ReactDOM","modalOverlayOpeningRadius","overlayRadius","modalOverlayOpeningPadding","overlayPadding","addSteps","start","event_label","TabSpacing","InternalTab","ariaSelected","spacing","content","Tab","TabList","TabPanel","Tabs","BadgeSize","BadgePadding","Badge","badgePadding","badgeSize","TagSize","TagPadding","TagFont","TagVariant","TagRounding","Tag","variant","tagPadding","tagSize","tagFont","tagRounding","tagVariant","NotificationPosition","NotificationContext","useNotification","NotificationWrapper","setIsOpen","notification","setNotification","viewport","setViewport","useVisualViewport","enabled","getVisualViewport","visualViewport","positionClass","_notification$options","BottomLeft","TopLeft","TopRight","includes","BottomRight","WrapperComponent","inline","role","hideOnEscape","willChange","withNotificationContext","WrappedComponent","_WrappedComponent$dis","displayName","WithNotificationContext","notificationContext","NotificationTheme","Notification","closeText","actions","timeoutInMs","timeoutId","success","failure","imgFromUrlToBase64","fetch","then","createObjectURL","response","blob","DownloadImageButton","downloadUrl","base64ImageData","dataUrl","fileName","_downloadUrl$split$po","pop","imageUri","setImageUri","val","catch","download","event_category","SocialShare","shareUrl","imageToDownloadURL","imageToDownloadBase64Data","FacebookShareButton","FacebookIcon","TwitterShareButton","via","TwitterIcon","TooltipInputComponent","tooltipSettings","isPointerEventsEnabled","prevMessage","isFocused","setIsFocused","handleFocus","handleBlur","TooltipTrigger","hideOnBlur","onFocus","onBlur","Tooltip","TooltipInput","trackInitial","trackAutomatically","initialRender","handleTrackView","tracking","FONT_SIZE","XXS","XS","S","M","L","XXL","XXXL","LINE_HEIGHT","PADDING","XXXS","MARGIN","CHART_MARGIN","XL","SETTINGS_HEIGHT","TICKER_TIMEFRAME_CHANGE_HEIGHT","OFFSET","MONTHS","ChartEditorEnum","CanvasElementType","ChartElementType","IndicatorType","Ap","Bvps","Capex","Cdp","Csti","Cd","Cni","Cogs","Cr","Ebitda","Ebit","Epsbbe","Epsd","Epsfd","Ei","Fcf","Ffo","Gi","Gim","It","Ia","Ie","Ii","Inv","Ltd","Mcap","Nafa","Ncic","Ncf","Neti","Nfcf","Niacb","Nif","Nico","Noni","Nl","Nm","Nocf","Nppe","Nie","Noe","OpInc","OrdInc","Om","Oa","Oca","Ocl","Ofau","Ofa","Of","Oia","Ol","Ooe","Pe","Pti","Pb","Pfcf","Psf","Poi","Posi","Qr","Rd","Roa","Roate","Roi","Rev","Sgae","Sgaeo","So","Std","Str","Tbvps","Ta","Tc","Tcdfb","Tce","Tca","Tcl","Td","Teq","Texp","Tie","Tia","Tib","Tl","Tlse","Tse","Ue","Noie","Ole","Rea","FundamentalPeriod","FundamentalPeriodLabel","Annual","Quarterly","FundamentalPeriodShortLabel","OverlayType","ChartEventType","ChartEventBadgeType","ChartEventLabels","Dividends","Split","EarningsPositive","EarningsNegative","EarningsNeutral","EarningsFuture","LAYOUTS","count","gridAreas","SORT_DIRECTION","ASC","DESC","TIMEFRAMES_WITH_PRE_MARKET","i1","i2","i3","i5","IntradayTimeframeInterval","i10","i15","i30","h2","h4","TimeframeLabelShort","DateRangeType","QuoteFinancialAttachment","TIMEFRAME_SECONDS","CRYPTOS","BTCUSD","ETHUSD","BNBUSD","SOLUSD","XRPUSD","DOGEUSD","ADAUSD","TRXUSD","AVAXUSD","DOTUSD","BCHUSD","NEARUSD","LTCUSD","APTUSD","XLMUSD","LINKUSD","ETCUSD","UNIUSD","EGLDUSD","OPUSD","SUIUSD","AAVEUSD","BTCEUR","ETHEUR","BNBEUR","SOLEUR","XRPEUR","DOGEEUR","ADAEUR","TRXEUR","AVAXEUR","DOTEUR","BCHEUR","NEAREUR","LTCEUR","ICPEUR","APTEUR","XLMEUR","LINKEUR","SHIBEUR","EGLDEUR","SEUR","OPEUR","SUIEUR","BTCUSDT","ETHUSDT","BNBUSDT","SOLUSDT","XRPUSDT","DOGEUSDT","ADAUSDT","TRXUSDT","AVAXUSDT","DOTUSDT","BCHUSDT","NEARUSDT","LTCUSDT","ICPUSDT","FETUSDT","ETCUSDT","APTUSDT","XLMUSDT","LINKUSDT","SHIBUSDT","UNIUSDT","EGLDUSDT","SUSDT","OPUSDT","SUIUSDT","AAVEUSDT","TRUMPUSDT","ETHBTC","BNBBTC","SOLBTC","XRPBTC","DOGEBTC","ADABTC","TRXBTC","AVAXBTC","DOTBTC","BCHBTC","NEARBTC","LTCBTC","ICPBTC","FETBTC","ETCBTC","APTBTC","XLMBTC","LINKBTC","UNIBTC","EGLDBTC","SBTC","OPBTC","SUIBTC","AAVEBTC","SpecificChartFunctionality","TextAlign","TextBaseline","ScaleType","QuotePollingIntervalInMs","Elite","Default","Forex","Crypto","Futures","Free","Reduced","EXTRA_MARKET_BUFFER_MINUTES","ScaleLabel","Linear","Percentage","Logarithmic","PANE_HEIGHT_DEFAULT","chart","indicator","INDICATOR_LABEL_HEIGHT","MOBILE_BARS_TO_VIEW","MOBILE_VIEW_BREAKPOINT_WIDTH","FREE_DATE_RANGES","getTimeframeLabel","QuotePageQueryChartTypes","MacroTimeframe","MicroMacroTimeframe","micro","macro","minutes","hours","days","weeks","months","MicroTimeframeRange","prev","curr","SetVisibilityTo","QUOTE_FETCH_EVENT","PREMARKET_AFTERMARKET_HOURS","CHART_SETTINGS_DIALOG_TEST_ID","MARKET_START","MARKET_END","_len","args","_key","arg","_len2","_key2","minMax","_len3","_key3","setSizeOnCanvasElement","canvasElement","getQuoteDateTimestampOffsetInSeconds","referenceDate","date","Date","dayNumber","getDate","monthIndex","getMonth","previousSunday","getDay","getIsDstInNy","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","convertLocalToNyTime","addOffset","quoteDateTimeOffsetInMs","localTimeOffsetInMs","getTimezoneOffset","offsetDirectionCoefficient","setTime","getTime","isStockFastRefreshAvailable","hasPremarket","hasAftermarket","bufferMinutes","getMinutes","dayOfWeek","currentDayMinutes","getHours","premarketMinutes","aftermarketMinutes","isWeekend","isClosed","dateFromUnixTimestamp","timestamp","setUTCSeconds","dateStringFromDate","getFullYear","dateFromDateString","dateString","yyyy","mm","dd","isNaN","captureException","Error","extra","testTouchPoints","getIsSSr","isMobileOs","navigator","userAgent","createEvent","match","msMaxTouchPoints","maxTouchPoints","createElement","isIPad","matchesIPad","matchesIPhone","matchesIPod","setCookie","expires","toUTCString","hostname","getFullscreenStatus","_document$fullscreenE","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","getRequestFullscreen","_ref7","_element$requestFulls","requestFullscreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen","getExitFullscreen","_ref8","_ref9","_document$exitFullscr","exitFullscreen","webkitExitFullscreen","mozExitFullScreen","msExitFullscreen","ready","fn","readyState","getChartsDimensions","chartElementId","_box$width","_box$height","box","getIsMobileScreenSize","innerWidth","getIsMobilePortrait","numberToStringWithUnitsSuffix","suffix","isRedesignEnabled","_window$FinvizSetting","isRedesignedPage","obj","matchingPages","forexPage","futuresPage","cryptoPage","isQuotePage","quotePage","isQuoteFinancials","quoteFinancials","getMaxValue","currentValue","_ref10","getMinValue","_ref11","getRoundedString","number","numOfDecimalPlaces","precision","pow","process","getParsedIntegersFromPeriodString","periodString","part","exception","captureContext","Sentry","isPositiveFloat","parsedNumber","isFinite","isPositiveInteger","string","isInRange","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","getValueInRange","isPrimaryClick","hasOwnProperty","getJSONReplacerFunc","visited","WeakSet","has","add","formatDateToStringUS","toLocaleDateString","day","month","year","getUuid","_window$crypto$random","_window$crypto","_window$crypto$random2","crypto","randomUUID","substring","getRandomValues","Uint8Array","getEarningsDateSuffix"],"sourceRoot":""}