{"version":3,"file":"static/js/580.aa66474e.chunk.js","mappings":"6OAOA,SAASA,EAAsBC,GAA+B,IAA7B,aAAEC,EAAY,SAAEC,GAAUF,EACzD,OACEG,EAAAA,EAAAA,KAACC,EAAAA,EAAS,CACRC,UAAU,iCACVC,MAAO,CAAEL,gBAAeC,SAEvBA,GAGP,CAWAH,EAAuBQ,aAAe,CACpCN,aAAc,GAGhB,U,kCCtBO,SAASO,EAA2BC,GAAqB,IAAhBC,EAAQC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GACzD,MAAMG,EAAW,GACXC,EAAQN,EAAIO,MAAM,KACxB,IAAIC,EAAO,GAoCX,OAlCAF,EAAMG,SAAQ,CAACC,EAAMC,KAEnB,GAAIH,EAAKL,OAAS,EAAG,CACnB,MAAMS,EAASJ,EAAO,IAAME,EAG5B,KAAIE,EAAOT,OAASF,GAKlB,OAAIU,IAAOL,EAAMH,OAAS,OACxBE,EAASQ,KAAKD,QAIdJ,EAAOI,GATTP,EAASQ,KAAKL,GACdA,EAAO,EAYX,CAEIG,IAAOL,EAAMH,OAAS,GAKtBO,EAAKP,OAASF,EAChBO,EAAOE,EALPL,EAASQ,KAAKH,EAQhB,IAGKL,CACT,C,0BCnCA,MAAM,wBACJS,EAAuB,iCACvBC,GACEC,EAAAA,EAqEEC,EAAmB,CACvBC,gBAAiB,UACjBC,YAAa,EACbC,iBAAkB,EAClBC,qBAAsB,UACtBC,YAAa,GA2Ef,QA3CA,SAAsBC,GACpB,MAAM,QACJC,EAAO,SACPC,GACEF,GAEE,SAAEG,IAAaC,EAAAA,EAAAA,KACfC,EAnCWC,EAACN,EAAOG,IACTI,IAAIP,EAAO,UAAW,IAEvBQ,QAAO,CAACC,EAAMC,EAAQtB,KACnC,MAAM,OAAEuB,EAAM,SAAEC,GAAaH,EAc7B,OAZAE,EAAOrB,KAAKoB,EAAOG,MACnBD,EAAStB,KAAK,CACZwB,MAAOJ,EAAOK,MACdV,KAAM,CAAC,CACLW,EAAGN,EAAOM,EACVC,EAAGP,EAAOO,EACVC,EAAGf,EAAYO,EAAOS,OAA0B,IAAhBT,EAAOS,OAAkBT,EAAOS,SAElEC,YAAa7B,EAAwBH,MAClCM,IAGE,CACLiB,SACAC,WACD,GACA,CACDD,OAAQ,GACRC,SAAU,KAWCN,CAAWN,EAAOG,GACzBkB,EAhHerB,KAEnB,CACEsB,OAAQ,CACNC,SAAS,GAEXC,QAAS,CACPC,WAAY,CACVC,KAAM,CACJC,OAAQ,wBACRC,KAAM,IAERC,UAAW,SAAUd,EAAOe,GAC1B,MAAM,aAAEC,GAAiBD,EAEzB,OAAO9B,EAAMgC,QAAQD,GAAcjB,KACrC,IAGJmB,OAAQ,CACNC,MAAO,CAAC,CACNC,UAAW,CACTZ,SAAS,GAEXa,MAAO,CACLC,UAAW,UACXC,aAAa,EACbC,IAAK,EACLC,IAAK,GACLC,SAAU,KAGdC,MAAO,CAAC,CACNP,UAAW,CACTZ,SAAS,GAEXa,MAAO,CACLC,UAAW,UACXC,aAAa,EACbC,IAAK,EACLC,IAAK,GACLC,SAAU,MAIhBE,SAAU,IACLnD,EACHoD,aAAc,GACdC,UAAW,CACTC,MAAO,SAAUC,EAAa1C,GAC5B,MAAM2C,EAAQzC,IAAIwC,EAAa,mBAAoB,GAGnD,OAAOvE,EAFQ,GAAE+B,IAAIF,EAAO,UAAS2C,KAAU,QAGjD,EACAlC,MAAO,SAAUiC,EAAa1C,GAC5B,MAAM2C,EAAQzC,IAAIwC,EAAa,eAAgB,GACzCE,EAAY1C,IAAIF,EAAO,YAAW2C,WAAgB,IAExD,OAAOE,EAAAA,EAAAA,IAAiBD,EAC1B,MAoDQE,CAAcnD,GAE9B,OACE7B,EAAAA,EAAAA,KAACJ,EAAsB,CAACE,aAAckC,EAAW,EAAI,IAAIjC,UACvDkF,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,cAAaH,SAAA,EAC1BC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHC,WAAW,KACXjF,UAAU,wBACVkF,SAAS,qBAAoBrF,SAE5BgC,KAEH/B,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHhF,UAAU,uBACVkF,SAAS,iCAAgCrF,SAExC+B,KAEH9B,EAAAA,EAAAA,KAACqF,EAAAA,GAAM,CACLC,OAAQ,IACRC,MAAO,IACPrD,KAAMA,EACNgB,QAASA,EACTG,QAAS,CAACmC,WAKpB,E,wBCvJA,MACEpE,wBACF,GAAIE,EAAAA,EAEJ,SAASmE,EAAgB5F,GAAkC,IAAhC,MAAE8C,EAAK,MAAEkC,EAAK,YAAEa,GAAa7F,EACtD,MAAM8F,EAAYd,EAAQzD,EAAwBX,OAC5CmF,EAAQxE,EAAwBuE,GAEtC,OACEV,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,2BAA0BH,SAAA,EACvCC,EAAAA,EAAAA,KAAA,OACEE,UAAU,wBACVC,MAAO,CAAEqB,gBAAiBoE,MAE5B5F,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHhF,UAAW2F,IAAG,CACZC,yBAAyB,EACzBJ,gBAEFN,SAAS,qBAAoBrF,SAE5B4C,MAIT,CAQA8C,EAAiBrF,aAAe,CAC9BsF,aAAa,GAGf,WCjCQrE,iCAAiC,GAAIC,EAAAA,EAEvCyE,EAAe,CACnBtE,YAAa,EACbuE,MAAM,EACNC,sBAAuB,EACvBC,WAAY,SACZC,YAAa,EACbC,eAAgB,GAChBC,eAAgB,OAChBC,gBAAiB,QACjBC,iBAAkB,OAClBC,iBAAkB,EAClBC,iBAAkB,GAGdC,EAAmB,CACvBtD,SAAS,EACTuD,SAAU,GACVC,WAAY,wBACZC,QAAS,CACPC,IAAK,GACLC,OAAQ,GAEV7C,UAAW,WAGP8C,EAAoB,IACrBN,EACHG,QAAS,CACPC,IAAK,EACLC,OAAQ,KAINE,EAAkB,CACtB,CACEC,KAAM,UACNC,cAAe,WAEjB,CACED,KAAM,UACNC,cAAe,WAEjB,CACED,KAAM,UACNC,cAAe,YAoBbnC,EAAiB9C,IACrB,MAAM,WACJkF,EAAU,WACVC,EAAU,WACVC,GACEpF,EAEJ,MAAO,CACLiB,OAAQ,CACNC,SAAS,GAEXU,OAAQ,CACNC,MAAO,CACL,CACEC,UAAW,CACTZ,SAAS,GAEXmE,WAAY,CACVC,YAAaF,KACVN,GAEL/C,MAAO,CACLE,aAAa,EACbC,IAAK,EACLyC,QAAS,GACTF,SAAU,GACVC,WAAY,wBACZ1C,UAAW,UACXuD,SAAU,SAAU9E,GAClB,OAAQA,EAAQ0E,GAAYK,QAAQ,EACtC,KAINnD,MAAO,CACL,CACEP,UAAW,CACT4B,MAAO,UACP+B,YAAY,EACZC,eAAgB,EAChBC,iBAAiB,GAEnBN,WAAY,CACVC,YAAaJ,KACVV,GAELzC,MAAO,CACL4C,QAAS,GACTF,SAAU,GACVmB,WAAY,IACZlB,WAAY,wBACZ1C,UAAW,cAKnB6D,MAAO,CACLC,KAAM,SAERxD,SAAU,IACLnD,EACHoD,aAAc,GACdC,UAAW,CACTC,MAAO,SAAUC,EAAa1C,GAC5B,MAAM0B,EAAexB,IAAIwC,EAAa,oBAChCqD,EAAU7F,IAAIF,EAAO,YAAW0B,MAGtC,OAAOvD,EAFQ,GAAE+B,IAAI6F,EAAS,QAAS,QAGzC,EACAtF,MAAO,SAAUiC,GACf,MAAM,MAAEhC,GAAUgC,EAElB,OAAOG,EAAAA,EAAAA,IAAiBnC,EAC1B,IAGJsF,qBAAqB,EACtB,EAiFH,QAhDA,SAAoBrG,GAClB,MAAM,SAAEY,GAAaZ,EASfsG,EAAe1F,EAAS2F,KAAIH,GAAWA,EAAQtF,QAAO0F,UAE5D,OACErI,EAAAA,EAAAA,KAACJ,EAAsB,CAAAG,UACrBkF,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,6BAA4BH,SAAA,EACzCC,EAAAA,EAAAA,KAAA,OAAKE,UAAU,oBAAmBH,UAChCC,EAAAA,EAAAA,KAACsI,EAAAA,GAAI,CACHpG,KAbUqG,GAjCEC,EAACD,EAAQ1G,KAC/B,MAAM,SAAEY,EAAQ,YAAEgG,GAAgB5G,EAClC,MACE,CACEW,OAAQiG,EACRhG,SAAUA,EAAS2F,KAAI,CAACH,EAAShH,KAC/B,MAAM,KAAEiB,EAAI,MAAES,GAAUsF,EAClBS,EAAYzB,EAAgBhG,GAC5B0H,EAzGQC,EAACL,EAAQ3C,EAAOf,KACpC,MAOM8D,EAPMJ,EAAOM,WAAW,MAOTC,wBALE,CACrB,CAAC,EAAG,IAAK,EAAG,KACZ,CAAC,EAAG,IAAK,EAAG,KACZ,CAAC,EAAG,EAAG,EAAG,MAEgDjE,IAI5D,OAHA8D,EAASI,aAAa,EAAGnD,EAAMuB,eAC/BwB,EAASI,aAAa,EAAG,QAElBJ,CAAQ,EA6FQC,CAAcL,EAAQG,EAAWzH,GAElD,MAAO,CAEL0B,QACAnB,gBAAiBmH,EACjB1F,YAAayF,EAAUxB,KACvB8B,qBAAsBN,EAAUxB,KAChC+B,0BAA2B,OAC3BC,sBAAuBR,EAAUxB,KACjChF,KAAMA,EACNiH,KAAM,CACJC,SAAS,MAERrD,EACJ,IAEJ,EASMyC,CAAgBD,EAAQ1G,GAavBqB,QAAS8B,EAAcnD,GACvByD,OAAQ,IACRC,MAAO,SAGXvF,EAAAA,EAAAA,KAAA,OAAKE,UAAU,oBAAmBH,UAChCC,EAAAA,EAAAA,KAAA,OAAAD,SAEIoI,EAAaC,KAAI,CAACiB,EAAapI,KAC7BjB,EAAAA,EAAAA,KAACyF,EAAgB,CAEfZ,MAAO5D,EACP0B,MAAO0G,GAFFpI,aAWvB,GCtNEG,wBAAuB,EACvBC,iCACF,GAAIC,EAAAA,EA8EJ,SAASgI,EAAQzJ,GAAsB,IAApB,MAAE0J,EAAK,OAAEpG,GAAQtD,EAClC,MAAMyB,EA5ER,SAAsBiI,EAAOpG,GAC3B,MAAM,KAAEjB,GAASqH,EAIXC,EAHOC,OAAOC,KAAKxH,GAGDG,QAAO,CAACC,EAAMqH,EAAM1I,KAC1CqB,EAAKE,OAAOrB,KAAKwI,GACjBrH,EAAKsH,WAAWzI,KAAKe,EAAKyH,IAC1BrH,EAAKuH,iBAAiB1I,KAAKgC,EAAOf,IAAIuH,IAE/BrH,IACN,CACDE,OAAQ,GACRoH,WAAY,GACZC,iBAAkB,KAGpB,MAAO,CACL3H,KAAM,CACJM,OAAQgH,EAAWhH,OACnBC,SAAU,CAAC,CACTP,KAAMsH,EAAWI,WACjBpI,gBAAiBgI,EAAWK,oBAGhCtE,MAtBgB,IAuBhBD,OAvBgB,IAwBhBpC,QAAS,CACPC,OAAQ,CAAEC,SAAS,GACnBoB,SAAU,IACLnD,EACHqD,UAAW,CACTC,MAAO,SAAUC,EAAa1C,GAC5B,MAAM,MAAE2C,GAAUD,EAAY,IACxB,OAAEpC,GAAWN,EAGnB,OAAO7B,EAFQ,GAAE+B,IAAII,EAAQqC,EAAO,QAGtC,EACAlC,MAAO,SAAUiC,EAAa1C,GAC5B,MAAM,MAAE2C,GAAUD,EACZhC,EAAQV,EAAKO,SAAS,GAAGP,KAAK2C,GAEpC,MAAQ,KAAGE,EAAAA,EAAAA,IAAiBnC,IAC9B,KAKV,CA2BiBkH,CAAYP,EAAOpG,IAC5B,MAAE4G,EAAK,SAAEC,GAAaT,EAAM5E,MAElC,OACEM,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,gBAAeH,SAAA,EAC5BkF,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,yBAAwBH,SAAA,EACrCC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHhF,UAAU,eACVkF,SAAS,oBAAmBrF,SAE3BgK,KAEH/J,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHhF,UAAU,yBACVkF,SAAS,oBAAmBrF,SAE3BiK,QAGLhK,EAAAA,EAAAA,KAAA,OAAKE,UAAU,iBAAgBH,UAC7BC,EAAAA,EAAAA,KAACiK,EAAAA,GAAG,IAAK3I,QAIjB,CAuEA,QA1DA,SAAkB4I,GAAkC,IAAhC,QAAEpI,EAAO,SAAEC,EAAQ,OAAEoI,GAAQD,EAE/C,MAAME,EA7DR,SAA+BD,GAE7B,IAAIE,EAAa,EAEjB,OAAOF,EAAO9H,QAAO,CAACC,EAAMqH,KAC1B,MAAMW,EAAUlI,IAAIuH,EAAM,OAAQ,CAAC,GAYnC,OAXaF,OAAOC,KAAKY,GAEpBvJ,SAAQwJ,IACX,IAAKjI,EAAKkI,IAAID,GAAM,CAClB,MAAM5E,EAAY0E,EAAajJ,EAAwBX,OACvD4J,IAEA/H,EAAKmI,IAAIF,EAAKnJ,EAAwBuE,GACxC,KAGKrD,CAAI,GACV,IAAIoI,IACT,CA0CuBC,CAAqBR,GACpChH,EAASyH,MAAMC,KAAKT,EAAaV,QAEvC,OACEzE,EAAAA,EAAAA,MAAA6F,EAAAA,SAAA,CAAA/K,SAAA,EACEC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHC,WAAW,KACXjF,UAAU,sBACVkF,SAAS,qBAAoBrF,SAE5BgC,KAEHkD,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,YAAWH,SAAA,EACxBC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CAACE,SAAS,iCAAgCrF,SAAE+B,KACjDmD,EAAAA,EAAAA,MAACrF,EAAsB,CAAAG,SAAA,EACrBC,EAAAA,EAAAA,KAAA,OAAKE,UAAU,oBAAmBH,SAE9BoK,EAAO/B,KAAI,CAACmB,EAAOtI,KACjBjB,EAAAA,EAAAA,KAACsJ,EAAQ,CAEPC,MAAOA,EACPpG,OAAQiH,GAFHnJ,QAObjB,EAAAA,EAAAA,KAAA,OAAKE,UAAU,oBAAmBH,SAE9BoD,EAAOiF,KAAI,CAACzF,EAAO1B,KACjBjB,EAAAA,EAAAA,KAACyF,EAAgB,CAEfZ,MAAO5D,EACP0B,MAAOA,EACP+C,aAAW,GAHNzE,eAYvB,E,cCrKA,MAAM,yBACJ8J,EAAwB,4BACxBC,EAA2B,kCAC3BC,GACE3J,EAAAA,EAwEJ,QAxDA,SAAiCO,GAC/B,MAAM,MACJ8C,EAAK,MACLuG,EAAK,QACLjD,EAAO,KACP/F,GACEL,GAEE,KAAEsJ,GAASjJ,EAEXkJ,EAvBR,SAAkCD,GAChC,OAAQA,GACN,IAAK,MACH,OAAOE,EACT,IAAK,OACH,OAAOC,EACT,IAAK,SACH,OAAOC,EACT,QACE,OAAO,KAEb,CAYyBC,CAAwBL,GAE/C,OACElG,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,yBAAwBH,SAAA,EACrCC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CAACC,WAAW,KAAKC,SAAS,qBAAoBrF,SAAEgL,KACrD/K,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CAACE,SAAS,8BAA6BrF,SAAE4E,KAC9CM,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,+BAA8BH,SAAA,EAC3CkF,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,eAAcH,SAAA,EAC3BC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHhF,UAAU,cACVkF,SAAS,mBAAkBrF,SAE1BiL,KAEHhL,EAAAA,EAAAA,KAACyL,EAAAA,EAAW,CAACC,KAAMR,EAAMS,KAAMhJ,MAAOuI,EAAMxI,WAE9CuC,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,eAAcH,SAAA,EAC3BC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHhF,UAAU,cACVkF,SAAS,mBAAkBrF,SAE1BkL,KAEHjL,EAAAA,EAAAA,KAACyL,EAAAA,EAAW,CAACC,KAAMzD,EAAQ0D,KAAMhJ,MAAOsF,EAAQvF,aAIlD0I,IAAkBpL,EAAAA,EAAAA,KAACoL,EAAc,IAAKlJ,MAI9C,E,eC3DA,MAAM,wBAAE0J,GAA4BtK,EAAAA,EAEpC,SAASuK,EAAyBhK,GAChC,MAAM,OACJiK,EAAM,YACNC,EAAW,MACXxC,EAAK,uBACLyC,GACEnK,EAEEoK,EAAWD,EAAuBE,QAAOC,GAAOA,EAAIzJ,OAASoJ,IAC7DM,EAAQhK,IAAI6J,EAAU,oBAAqB,IAEjD,OACEjM,EAAAA,EAAAA,KAAA,OAAKE,UAAU,oCAAmCH,UAChDC,EAAAA,EAAAA,KAACqM,EAAAA,EAAc,CAAAtM,UACbkF,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,0BAAyBH,SAAA,EACtCkF,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,sCAAqCH,SAAA,EAClDC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHhF,UAAU,oBACVkF,SAAS,uBAAsBrF,SAE9B+L,KAEH9L,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHhF,UAAU,0BACVkF,SAAS,oBAAmBrF,SAE3BgM,KAGH9G,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,6BAA4BH,SAAA,EACzCC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CAACC,WAAW,KAAKC,SAAS,qBAAoBrF,SAChD6L,KAEH5L,EAAAA,EAAAA,KAAA,MAAIE,UAAU,oBAAmBH,SAC9BqM,EAAMhE,KAAI,CAACkE,EAAMrL,KAChBjB,EAAAA,EAAAA,KAAA,MAAAD,UACEC,EAAAA,EAAAA,KAACyL,EAAAA,EAAW,CAACC,KAAMY,EAAKC,KAAO,IAAK5J,MAAO2J,EAAK5J,QADzCzB,cAOjBjB,EAAAA,EAAAA,KAAA,OAAKE,UAAU,uCAAsCH,UACnDC,EAAAA,EAAAA,KAACwM,EAAsB,IAAKjD,YAMxC,CAiBAsC,EAAwBzL,aAAe,CACrCqM,gBAAgB,EAChBT,uBAAwB,IAG1B,SAAgBU,EAAAA,EAAAA,IAAgB,CAACC,EAAAA,GAAgBX,wBAAjD,CAA2EH,E,wIC5E3E,SAASe,EAAiB/K,GACxB,MAAM,OACJiK,EAAM,KACNe,EAAI,MACJC,EAAK,SACLC,EAAQ,WACRC,EAAU,SACVrM,EAAQ,YACRsM,GACEpL,GAEE,SAAEG,IAAaC,EAAAA,EAAAA,KAMrB,OACEjC,EAAAA,EAAAA,KAAA,OAAKE,UAAU,4BAA2BH,UACxCC,EAAAA,EAAAA,KAACqM,EAAAA,EAAc,CAAAtM,UACbkF,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,kBAAiBH,SAAA,EAC9BkF,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,+BAA8BH,SAAA,EAC3CC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHhF,UAAU,0BACVkF,SAAS,uBAAsBrF,SAE9B+L,KAEH7G,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,8BAA6BH,SAAA,EAC1CC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHC,WAAW,KACXC,SAAS,wBACTlF,UAAU,sBAAqBH,SAE9BiN,KAEHhN,EAAAA,EAAAA,KAAA,MAAIE,UAAU,qBAAoBH,SAC/BY,EAASyH,KAAI,CAAC8E,EAASjM,IACtBiM,EAAQxK,OACN1C,EAAAA,EAAAA,KAAA,MAAAD,UACEC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHiI,QAASA,KAAMC,OA7BVC,EA6B4BH,EAAQG,WA7BxBC,EA6BoCJ,EAAQxK,KA5BjFuK,EAAYI,QACZE,EAAAA,EAAAA,IAAiBD,EAAME,OAAOC,MAFNL,IAACC,EAAYC,CA6BkD,EACnElI,SAAS,kBAAiBrF,SAEzBmN,EAAQxK,QALJzB,cAYnBgE,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,2BAA0BH,SAAA,EACvCkF,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,gBAAeH,SAAA,EAC5BC,EAAAA,EAAAA,KAACkF,EAAAA,EAAI,CACHC,WAAW,KACXC,SAAUpD,EAAW,6BAA+B,8BAA8BjC,SAEjF8M,EAAKf,UAER9L,EAAAA,EAAAA,KAAC0N,EAAAA,EAAa,CAACC,QAASd,EAAKd,eAC7B/L,EAAAA,EAAAA,KAACyL,EAAAA,EAAW,CAACC,KAAMmB,EAAKe,IAAIjC,KAAMhJ,MAAOkK,EAAKe,IAAIjL,YAEpD3C,EAAAA,EAAAA,KAAA,OACE6N,IAAKf,EACLgB,IAAKf,EACL7M,UAAU,4BAOxB,CAmBA0M,EAAgBxM,aAAe,CAC7B4M,WAAY,oBAGd,S,gQCxGA,SAAgB,mBAAqB,OAAO,oBAAsB,S,eCoBlE,MAAMe,EAAqBC,QAAQC,EAAaF,oBAAsB,QAAQlN,MAAM,MAAM,IACpFqN,EAAsBF,QAAQC,EAAaE,oBAAsB,QAAQtN,MAAM,MAAM,KAErF,qBACJuN,GACE9M,EAAAA,EAEE+M,EAAmB,CACvBC,UAAW,yBACXC,WAAY,GACZC,kBAAmB,GACnBC,QAAS,CAAC,EACVC,cAAe,CAAC,EAChBC,gBAAiB,CAAC,GAsBdC,EAAkB/M,IACtB,MAAM,SAAEG,IAAaC,EAAAA,EAAAA,MACd2M,EAAgBC,IAAqBC,EAAAA,EAAAA,UAAS,CACnDC,YAAa,GACb7M,KAAMmM,EACNW,WAAW,EACXC,MAAO,QAEH,UAAED,EAAS,YAAED,EAAW,KAAE7M,EAAI,MAAE+M,GAAUL,GAC1C,SAAEM,EAAQ,UAAEZ,GAAcpM,GAGhCiN,EAAAA,EAAAA,YAAU,KACUC,WAChB,IACE,MAAMC,QAAiBC,EAAAA,EAAAA,MACjBpN,QAAaqN,EAAAA,EAAAA,MAGnBrN,EAAKgN,SAAWG,EAASH,SACzBhN,EAAKoM,UAAYe,EAASf,UAG1B,MAAMS,EAAc,KAzCEpO,EA0CIuB,EAAKsM,kBAzC9B7N,EAASyH,KAAI8E,IAAO,CAEvBxK,KAAMwK,EAAQpB,OACduB,YAAYmC,EAAAA,EAAAA,mBAyCVX,GAAkBY,IAAS,IAEpBA,EACHV,cACA7M,OACA8M,WAAW,EACXC,MAAO,SAMXS,EAAAA,GAAMrM,QAAQsM,WAAWnK,IAC3B,CAAE,MAAOyJ,GACPJ,GAAkBY,IAAS,IAEpBA,EACHR,OAAO,KAGb,CAjEwBtO,KAiExB,EAGFiP,EAAW,GACV,IAGH,MAAMC,EAAsBC,IAC1B,MAAMC,EAAmBvC,OAAOwC,YAC1BC,EAAaH,EAAII,QAAQC,wBAAwBrJ,IAEvD0G,OAAO4C,SAAS,CACdtJ,IAAKmJ,EAAaF,GAAoB/N,EAAW+L,EAAqBG,GACtEmC,SAAU,UACV,EAgDJ,OACEpL,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,iBAAgBH,SAAA,EAC7BC,EAAAA,EAAAA,KAACsQ,EAAAA,EAAQ,CAACpB,SAAUA,EAASnP,UAC3BC,EAAAA,EAAAA,KAAA,SAAAD,SAAS,GAAEuO,IAAYF,QAhDVmC,MACjB,MAAM,QACJ9B,EAAO,UACP+B,EAAS,kBACThC,GACEtM,EAEJ,OAAI+M,GACKjP,EAAAA,EAAAA,KAACyQ,EAAAA,GAAS,CAACC,IAAI,+BAEpB1B,GACKhP,EAAAA,EAAAA,KAAC2Q,EAAAA,EAAY,KAIpB1L,EAAAA,EAAAA,MAAA,OAAK/E,UAAU,gBAAeH,SAAA,EAC5BC,EAAAA,EAAAA,KAAA,WAASE,UAAU,2DAA0DH,UAC3EC,EAAAA,EAAAA,KAAC4M,EAAAA,QAAe,IACV6B,EACJ+B,UAAWA,EACXvD,YAAa4C,EACblP,SAAUoO,MAIZP,EAAkBpG,KAAI,CAACwI,EAAc3P,KACnCjB,EAAAA,EAAAA,KAAA,WAEE8P,IAAKf,EAAY9N,GAAGoM,WACpBnN,UAAW2F,IAAG,CACZgL,wBAA+B,IAAN5P,GAAWA,EAAI,IAAM,EAC9C,oCAAqCA,EAAI,IAAM,IAC9ClB,UAEHC,EAAAA,EAAAA,KAAC6L,EAAAA,QAAuB,IAClB+E,KARD3P,MAaXjB,EAAAA,EAAAA,KAAC8Q,EAAAA,EAAM,MACH,EASLP,KACG,EAIV,GAAeQ,EAAAA,EAAAA,GACbC,EAAAA,EADF,CAEEpC,E","sources":["components/homepage/HomepageChart/ChartScrollableWrapper.js","utilities/chartHelpers.js","components/homepage/HomepageChart/BubbleChart.js","components/homepage/HomepageChart/ChartLegendLabel.js","components/homepage/HomepageChart/LineChart.js","components/homepage/HomepageChart/PieCharts.js","components/homepage/HomepageChart/HomepageChartContainer.js","components/homepage/HomepageCategoryCallout/HomepageCategoryCallout.js","components/homepage/HomepageMission/HomepageMission.js","webpack://wddse-spa/./src/components/pages/CategoriesPage/CategoriesPage.scss?499a","components/pages/CategoriesPage/CategoriesPage.js"],"sourcesContent":["import React from 'react'\nimport PropTypes from 'prop-types'\nimport SimpleBar from 'simplebar-react'\nimport 'simplebar/dist/simplebar.min.css'\n\nimport './ChartScrollableWrapper.scss'\n\nfunction ChartScrollableWrapper ({ marginBottom, children }) {\n return (\n <SimpleBar\n className='HomePageChartScrollableWrapper'\n style={{ marginBottom }}\n >\n {children}\n </SimpleBar>\n )\n}\n\nChartScrollableWrapper.propTypes = {\n marginBottom: PropTypes.number,\n children: PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.element, PropTypes.string]))\n ])\n}\n\nChartScrollableWrapper.defaultProps = {\n marginBottom: 0\n}\n\nexport default ChartScrollableWrapper\n","/**\n * Split param str into sections to emulate max width styling\n *\n * Chart.js tooltip does not accept a max width styling parameter\n * but if you pass an array of strings to a tooltip element (title, label, etc.)\n * it will display each array element as a new line in the tooltip.\n * @param {*} str the label string to format\n * @param {*} maxwidth default width, in chars\n */\nexport function makeLabelWidthDisplaySafe (str, maxwidth = 30) {\n const sections = []\n const words = str.split(' ')\n let temp = ''\n\n words.forEach((word, i) => {\n // deal with leftover from previous iteration\n if (temp.length > 0) {\n const concat = temp + ' ' + word\n\n // exceeded safety, push previous calculation to sections, clear temp\n if (concat.length > maxwidth) {\n sections.push(temp)\n temp = ''\n } else {\n // did not exceed safety, end of array, push & return\n if (i === (words.length - 1)) {\n sections.push(concat)\n return\n } else {\n // didn't exceed safety, not at array end, do more work\n temp = concat\n return\n }\n }\n }\n\n if (i === (words.length - 1)) {\n sections.push(word)\n return\n }\n\n if (word.length < maxwidth) {\n temp = word\n } else {\n sections.push(word)\n }\n })\n\n return sections\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Bubble } from 'react-chartjs-2'\nimport ChartDataLabels from 'chartjs-plugin-datalabels'\nimport ChartScrollableWrapper from './ChartScrollableWrapper'\nimport get from 'lodash/get'\nimport Text from '../../common/Text/Text'\nimport { numberWithCommas } from '../../../utilities/searchPageHelpers'\nimport { makeLabelWidthDisplaySafe } from '../../../utilities/chartHelpers'\nimport config from '../../../config'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\n\nimport './BubbleChart.scss'\n\nconst {\n wddseAccentColorPalette,\n homepageChartCommonTooltipConfig\n} = config\n\nconst optionsConfig = (props) => {\n return (\n {\n legend: {\n display: false\n },\n plugins: {\n datalabels: {\n font: {\n family: \"'Rubik', 'sans-serif'\",\n size: 16\n },\n formatter: function (value, context) {\n const { datasetIndex } = context\n\n return props.bubbles[datasetIndex].label\n }\n }\n },\n scales: {\n yAxes: [{\n gridLines: {\n display: false\n },\n ticks: {\n fontColor: '#f1f9fd', // adds extra space on canvas vs display: false\n beginAtZero: true,\n min: 1,\n max: 10,\n stepSize: 1\n }\n }],\n xAxes: [{\n gridLines: {\n display: false\n },\n ticks: {\n fontColor: '#f1f9fd', // adds extra space on canvas vs display: false\n beginAtZero: true,\n min: 1,\n max: 10,\n stepSize: 1\n }\n }]\n },\n tooltips: {\n ...homepageChartCommonTooltipConfig,\n caretPadding: 15,\n callbacks: {\n title: function (tooltipItem, data) {\n const index = get(tooltipItem, '[0].datasetIndex', 0)\n const label = `${get(data, `labels[${index}]`, '')}: `\n\n return makeLabelWidthDisplaySafe(label)\n },\n label: function (tooltipItem, data) {\n const index = get(tooltipItem, 'datasetIndex', 0)\n const dataEntry = get(data, `datasets[${index}].label`, '')\n\n return numberWithCommas(dataEntry)\n }\n }\n }\n }\n )\n}\n\nconst commonDataConfig = {\n backgroundColor: '#f1f9fd',\n borderWidth: 7,\n hoverBorderWidth: 7,\n hoverBackgroundColor: '#f1f9fd',\n hoverRadius: 1\n}\n\n// first two bubble serve as the baseline for layout\nconst dataConfig = (props, isMobile) => {\n const bubbles = get(props, 'bubbles', [])\n\n return bubbles.reduce((prev, bubble, i) => {\n const { labels, datasets } = prev\n\n labels.push(bubble.name)\n datasets.push({\n label: bubble.value,\n data: [{\n x: bubble.x,\n y: bubble.y,\n r: isMobile ? (bubble.radius - (bubble.radius * 0.25)) : bubble.radius\n }],\n borderColor: wddseAccentColorPalette[i],\n ...commonDataConfig\n })\n\n return {\n labels,\n datasets\n }\n }, {\n labels: [],\n datasets: []\n })\n}\n\nfunction BubbleChart (props) {\n const {\n callout,\n subtitle\n } = props\n\n const { isMobile } = useDisplayContext()\n const data = dataConfig(props, isMobile)\n const options = optionsConfig(props)\n\n return (\n <ChartScrollableWrapper marginBottom={isMobile ? 0 : 100}>\n <div className='BubbleChart'>\n <Text\n domElement='h3'\n className='BubbleChart__subtitle'\n typeFace='Small Text/MedGray'\n >\n {subtitle}\n </Text>\n <Text\n className='BubbleChart__callout'\n typeFace='Large Text/Callout/Black/Light'\n >\n {callout}\n </Text>\n <Bubble\n height={350}\n width={350}\n data={data}\n options={options}\n plugins={[ChartDataLabels]}\n />\n </div>\n </ChartScrollableWrapper>\n )\n}\n\nBubbleChart.propTypes = {\n callout: PropTypes.string,\n subtitle: PropTypes.string\n}\n\nexport default BubbleChart\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport config from '../../../config'\nimport Text from '../../common/Text/Text'\nimport cx from 'classnames'\n\nimport './ChartLegendLabel.scss'\n\nconst {\n wddseAccentColorPalette\n} = config\n\nfunction ChartLegendLabel ({ label, index, isCondensed }) {\n const safeIndex = index % wddseAccentColorPalette.length\n const color = wddseAccentColorPalette[safeIndex]\n\n return (\n <div className='HomepageChartLegendLabel'>\n <div\n className='ChartLegendLabel__dot'\n style={{ backgroundColor: color }}\n />\n <Text\n className={cx({\n ChartLegendLabel__label: true,\n isCondensed\n })}\n typeFace='Small Text/MedGray'\n >\n {label}\n </Text>\n </div>\n )\n}\n\nChartLegendLabel.propTypes = {\n label: PropTypes.string,\n index: PropTypes.number,\n isCondensed: PropTypes.bool\n}\n\nChartLegendLabel.defaultProps = {\n isCondensed: false\n}\n\nexport default ChartLegendLabel\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport get from 'lodash/get'\nimport { Line } from 'react-chartjs-2'\nimport ChartLegendLabel from './ChartLegendLabel'\nimport ChartScrollableWrapper from './ChartScrollableWrapper'\nimport { numberWithCommas } from '../../../utilities/searchPageHelpers'\nimport { makeLabelWidthDisplaySafe } from '../../../utilities/chartHelpers'\nimport config from '../../../config'\n\nimport './LineChart.scss'\n\nconst { homepageChartCommonTooltipConfig } = config\n\nconst commonConfig = {\n borderWidth: 2,\n fill: true,\n pointHoverBorderWidth: 2,\n pointStyle: 'circle',\n pointRadius: 5,\n pointHitRadius: 10,\n borderCapStyle: 'butt',\n borderJoinStyle: 'miter',\n pointBorderColor: '#fff',\n pointBorderWidth: 2,\n pointHoverRadius: 8\n}\n\nconst scaleLabelConfig = {\n display: true,\n fontSize: 14,\n fontFamily: \"'Rubik', 'sans-serif'\",\n padding: {\n top: 18,\n bottom: 0\n },\n fontColor: '#5b616a'\n}\n\nconst yScaleLabelConfig = {\n ...scaleLabelConfig,\n padding: {\n top: 0,\n bottom: 18\n }\n}\n\nconst lineColorConfig = [\n {\n main: '#02bfe7',\n gradientStart: '#c9f6ff'\n },\n {\n main: '#e750ed',\n gradientStart: '#fee7ff'\n },\n {\n main: '#7a00c7',\n gradientStart: '#e8c8fa'\n }\n]\n\n// generate a color gradient using native canvas element from lib\nconst buildGradient = (canvas, color, index) => {\n const ctx = canvas.getContext('2d')\n // calculations below work out for these datasets but need tweaked for general use\n const gradientValues = [\n [0, 300, 0, 400],\n [0, 200, 0, 275],\n [0, 0, 0, 150]\n ]\n const gradient = ctx.createLinearGradient(...gradientValues[index])\n gradient.addColorStop(0, color.gradientStart)\n gradient.addColorStop(1, '#fff')\n\n return gradient\n}\n\nconst optionsConfig = (data) => {\n const {\n xAxisTitle,\n yAxisScale,\n yAxisTitle\n } = data\n\n return {\n legend: {\n display: false\n },\n scales: {\n yAxes: [\n {\n gridLines: {\n display: false\n },\n scaleLabel: {\n labelString: yAxisTitle,\n ...yScaleLabelConfig\n },\n ticks: {\n beginAtZero: true,\n min: 0,\n padding: 34,\n fontSize: 14,\n fontFamily: \"'Rubik', 'sans-serif'\",\n fontColor: '#5b616a',\n callback: function (label) {\n return (label / yAxisScale).toFixed(0)\n }\n }\n }\n ],\n xAxes: [\n {\n gridLines: {\n color: '#aeb0b5',\n drawBorder: true,\n tickMarkLength: 0,\n drawOnChartArea: false\n },\n scaleLabel: {\n labelString: xAxisTitle,\n ...scaleLabelConfig\n },\n ticks: {\n padding: 25,\n fontSize: 14,\n fontWeight: 800,\n fontFamily: \"'Rubik', 'sans-serif'\",\n fontColor: '#5b616a'\n }\n }\n ]\n },\n hover: {\n mode: 'point'\n },\n tooltips: {\n ...homepageChartCommonTooltipConfig,\n caretPadding: 10,\n callbacks: {\n title: function (tooltipItem, data) {\n const datasetIndex = get(tooltipItem, '[0].datasetIndex')\n const dataset = get(data, `datasets[${datasetIndex}]`)\n const label = `${get(dataset, 'label', '')}: `\n\n return makeLabelWidthDisplaySafe(label)\n },\n label: function (tooltipItem) {\n const { value } = tooltipItem\n\n return numberWithCommas(value)\n }\n }\n },\n maintainAspectRatio: false\n }\n}\n\n// configure the data to construct chart\nconst buildDataConfig = (canvas, props) => {\n const { datasets, xAxisLabels } = props\n return (\n {\n labels: xAxisLabels,\n datasets: datasets.map((dataset, i) => {\n const { data, label } = dataset\n const lineColor = lineColorConfig[i]\n const gradient = buildGradient(canvas, lineColor, i)\n\n return {\n // react chart lib req's a label to prevent rendering issues\n label,\n backgroundColor: gradient,\n borderColor: lineColor.main,\n pointBackgroundColor: lineColor.main,\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: lineColor.main,\n data: data,\n line: {\n stepped: true\n },\n ...commonConfig\n }\n })\n }\n )\n}\n\nfunction LineChart (props) {\n const { datasets } = props\n\n // pass data as func to access canvas object for gradients\n const dataConfig = (canvas) => {\n return buildDataConfig(canvas, props)\n }\n\n // there is a disconnect between the regular chart color palette and\n // the line colors which causes the legend to reverse colors; fix here\n const legendLabels = datasets.map(dataset => dataset.label).reverse()\n\n return (\n <ChartScrollableWrapper>\n <div className='HomepageLineChart__wrapper'>\n <div className='HomePageLineChart'>\n <Line\n data={dataConfig}\n options={optionsConfig(props)}\n height={400}\n width={680}\n />\n </div>\n <div className='LineChart__Legend'>\n <div>\n {\n legendLabels.map((legendLabel, i) => (\n <ChartLegendLabel\n key={i}\n index={i}\n label={legendLabel}\n />\n ))\n }\n </div>\n </div>\n </div>\n </ChartScrollableWrapper>\n )\n}\n\nLineChart.propTypes = {\n datasets: PropTypes.arrayOf(PropTypes.shape({\n label: PropTypes.string,\n data: PropTypes.array\n }))\n}\n\nexport default LineChart\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport get from 'lodash/get'\nimport config from '../../../config'\nimport Text from '../../common/Text/Text'\nimport ChartLegendLabel from './ChartLegendLabel'\nimport { Pie } from 'react-chartjs-2'\nimport { numberWithCommas } from '../../../utilities/searchPageHelpers'\nimport { makeLabelWidthDisplaySafe } from '../../../utilities/chartHelpers'\nimport ChartScrollableWrapper from './ChartScrollableWrapper'\n\nimport './PieCharts.scss'\n\nconst {\n wddseAccentColorPalette,\n homepageChartCommonTooltipConfig\n} = config\n\n// reduce data to a format consumable by chart\nfunction buildConfig (chart, legend) {\n const { data } = chart\n const keys = Object.keys(data)\n const dimension = 239\n\n const tempConfig = keys.reduce((prev, curr, i) => {\n prev.labels.push(curr)\n prev.dataPoints.push(data[curr])\n prev.backgroundColors.push(legend.get(curr))\n\n return prev\n }, {\n labels: [],\n dataPoints: [],\n backgroundColors: []\n })\n\n return {\n data: {\n labels: tempConfig.labels,\n datasets: [{\n data: tempConfig.dataPoints,\n backgroundColor: tempConfig.backgroundColors\n }]\n },\n width: dimension,\n height: dimension,\n options: {\n legend: { display: false },\n tooltips: {\n ...homepageChartCommonTooltipConfig,\n callbacks: {\n title: function (tooltipItem, data) {\n const { index } = tooltipItem[0]\n const { labels } = data\n const label = `${get(labels, index, '')}: `\n\n return makeLabelWidthDisplaySafe(label)\n },\n label: function (tooltipItem, data) {\n const { index } = tooltipItem\n const value = data.datasets[0].data[index]\n\n return `$${numberWithCommas(value)}`\n }\n }\n }\n }\n }\n}\n\n/*\n Ensure chart entries are unique with consistent colors\n*/\nfunction buildLegendAndColors (charts) {\n // maintain palette index if multiple charts present\n let colorIndex = 0\n\n return charts.reduce((prev, curr) => {\n const dataObj = get(curr, 'data', {})\n const keys = Object.keys(dataObj)\n\n keys.forEach(key => {\n if (!prev.has(key)) {\n const safeIndex = colorIndex % wddseAccentColorPalette.length\n colorIndex++\n\n prev.set(key, wddseAccentColorPalette[safeIndex])\n }\n })\n\n return prev\n }, new Map())\n}\n\nfunction PieChart ({ chart, legend }) {\n const config = buildConfig(chart, legend)\n const { plain, emphasis } = chart.title\n\n return (\n <div className='Charts__Chart'>\n <div className='Chart__label-container'>\n <Text\n className='Chart__label'\n typeFace='Body/18pt/Black/L'\n >\n {plain}\n </Text>\n <Text\n className='Chart__label--enhanced'\n typeFace='Body/18pt/Black/L'\n >\n {emphasis}\n </Text>\n </div>\n <div className='Chart__wrapper'>\n <Pie {...config} />\n </div>\n </div>\n )\n}\n\nPieChart.propTypes = {\n chart: PropTypes.shape({\n title: PropTypes.shape({\n plain: PropTypes.string,\n emphasis: PropTypes.string\n }),\n data: PropTypes.object\n }),\n legend: PropTypes.instanceOf(Map)\n}\n\nfunction PieCharts ({ callout, subtitle, charts }) {\n // condense keys & derive the color pallete as needed\n const combinedKeys = buildLegendAndColors(charts)\n const legend = Array.from(combinedKeys.keys())\n\n return (\n <>\n <Text\n domElement='h3'\n className='PieCharts__subtitle'\n typeFace='Small Text/MedGray'\n >\n {subtitle}\n </Text>\n <div className='PieCharts'>\n <Text typeFace='Large Text/Callout/Black/Light'>{callout}</Text>\n <ChartScrollableWrapper>\n <div className='PieCharts__Charts'>\n {\n charts.map((chart, i) => (\n <PieChart\n key={i}\n chart={chart}\n legend={combinedKeys}\n />\n ))\n }\n </div>\n <div className='PieCharts__Legend'>\n {\n legend.map((label, i) => (\n <ChartLegendLabel\n key={i}\n index={i}\n label={label}\n isCondensed\n />\n ))\n }\n </div>\n </ChartScrollableWrapper>\n </div>\n </>\n )\n}\n\nPieCharts.propTypes = {\n callout: PropTypes.string,\n subtitle: PropTypes.string,\n charts: PropTypes.arrayOf(PropTypes.shape({\n title: PropTypes.shape({\n plain: PropTypes.string,\n emphasis: PropTypes.string\n }),\n data: PropTypes.object\n }))\n}\n\nexport default PieCharts\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Text from '../../common/Text/Text'\nimport BubbleChart from './BubbleChart'\nimport LineChart from './LineChart'\nimport PieCharts from './PieCharts'\nimport config from '../../../config'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\n\nimport './HomepageChartContainer.scss'\n\nconst {\n homepageFeaturedVisLabel,\n homepageChartMetaTopicLabel,\n homepageChartMetaDatasetUsedLabel\n} = config\n\n// initial 3 chart types\nfunction getChartComponentByType (type) {\n switch (type) {\n case 'pie':\n return PieCharts\n case 'line':\n return LineChart\n case 'bubble':\n return BubbleChart\n default:\n return null\n }\n}\n\nfunction HomepageChartContainer (props) {\n const {\n title,\n topic,\n dataset,\n data\n } = props\n\n const { type } = data\n\n const ChartComponent = getChartComponentByType(type)\n\n return (\n <div className='HomepageChartContainer'>\n <Text domElement='h3' typeFace='Small Text/MedGray'>{homepageFeaturedVisLabel}</Text>\n <Text typeFace='04 H4/Desktop/Regular/Black'>{title}</Text>\n <div className='HomepageChartContainer__Meta'>\n <div className='Meta__column'>\n <Text\n className='Meta__label'\n typeFace='Small Text/Black'\n >\n {homepageChartMetaTopicLabel}\n </Text>\n <LinkHandler href={topic.slug} label={topic.name} />\n </div>\n <div className='Meta__column'>\n <Text\n className='Meta__label'\n typeFace='Small Text/Black'\n >\n {homepageChartMetaDatasetUsedLabel}\n </Text>\n <LinkHandler href={dataset.slug} label={dataset.name} />\n </div>\n </div>\n {\n ChartComponent && <ChartComponent {...data} />\n }\n </div>\n )\n}\n\nHomepageChartContainer.propTypes = {\n title: PropTypes.string.isRequired,\n topic: PropTypes.shape({\n name: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired\n }),\n dataset: PropTypes.shape({\n name: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired\n }),\n data: PropTypes.object\n}\n\nexport default HomepageChartContainer\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\nimport Text from '../../common/Text/Text'\nimport HomepageChartContainer from '../HomepageChart/HomepageChartContainer'\nimport config from '../../../config'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport get from 'lodash/get'\n// re-use global nav category data to build nav links\nimport withGlobalMenus, { globalMenuProps } from '../../../hocs/withGlobalMenus/withGlobalMenus'\n\nimport './HomepageCategoryCallout.scss'\n\nconst { homepageTopicLinksLabel } = config\n\nfunction HomepageCategoryCallout (props) {\n const {\n header,\n description,\n chart,\n navigationalCategories\n } = props\n\n const category = navigationalCategories.filter(cat => cat.name === header)\n const links = get(category, '[0].subCategories', [])\n\n return (\n <div className='HomepageCategoryCallout-container'>\n <ComponentShell>\n <div className='HomepageCategoryCallout'>\n <div className='HomepageCategoryCallout__InfoColumn'>\n <Text\n className='InfoColumn__title'\n typeFace='02 H2/Homepage/Black'\n >\n {header}\n </Text>\n <Text\n className='InfoColumn__description'\n typeFace='Body/16pt/Black/L'\n >\n {description}\n </Text>\n\n <div className='InfoColumn__link-container'>\n <Text domElement='h3' typeFace='Small Text/MedGray'>\n {homepageTopicLinksLabel}\n </Text>\n <ul className='InfoColumn__links'>\n {links.map((link, i) => (\n <li key={i}>\n <LinkHandler href={link.url || '/'} label={link.name} />\n </li>\n ))}\n </ul>\n </div>\n </div>\n <div className='HomepageCategoryCallout__ChartColumn'>\n <HomepageChartContainer {...chart} />\n </div>\n </div>\n </ComponentShell>\n </div>\n )\n}\n\nHomepageCategoryCallout.propTypes = {\n header: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n chart: PropTypes.shape({\n header: PropTypes.object,\n data: PropTypes.object\n }).isRequired,\n navigationalCategories: PropTypes.arrayOf(PropTypes.shape({\n subcategories: PropTypes.shape({\n name: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired\n })\n }))\n}\n\nHomepageCategoryCallout.defaultProps = {\n isFirstSection: false,\n navigationalCategories: []\n}\n\nexport default (withGlobalMenus([globalMenuProps.navigationalCategories]))(HomepageCategoryCallout)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\nimport Text from '../../common/Text/Text'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport RichTextField from '../../common/RichTextField/RichTextField'\nimport useDisplayContext from '../../../hooks/useDisplayContext.js'\nimport { trackAnchorClick } from '../../../utilities/analyticsEventHelpers'\nimport './HomepageMission.scss'\n\nfunction HomepageMission (props) {\n const {\n header,\n card,\n image,\n imageAlt,\n linkHeader,\n sections,\n onLinkClick\n } = props\n\n const { isMobile } = useDisplayContext()\n const handleAnchorClick = (sectionRef, text) => {\n onLinkClick(sectionRef)\n trackAnchorClick(text, window.utag)\n }\n\n return (\n <div className='HomepageMission-container'>\n <ComponentShell>\n <div className='HomepageMission'>\n <div className='HomepageMission__HeaderLinks'>\n <Text\n className='HomepageMission__Header'\n typeFace='02 H2/Homepage/Black'\n >\n {header}\n </Text>\n <div className='HeaderLinks__link-container'>\n <Text\n domElement='h3'\n typeFace='05 H5/Black/Regular/L'\n className='HeaderLinks__header'\n >\n {linkHeader}\n </Text>\n <ul className='HeaderLinks__links'>\n {sections.map((section, i) => (\n section.name &&\n <li key={i}>\n <Text\n onClick={() => handleAnchorClick(section.sectionRef, section.name)}\n typeFace='06 H4/Blue/Link'\n >\n {section.name}\n </Text>\n </li>\n ))}\n </ul>\n </div>\n </div>\n <div className='HomepageMission__Mission'>\n <div className='Mission__card'>\n <Text\n domElement='h3'\n typeFace={isMobile ? '04 H4/Mobile/Regular/Black' : '04 H4/Desktop/Regular/Black'}\n >\n {card.header}\n </Text>\n <RichTextField content={card.description} />\n <LinkHandler href={card.cta.slug} label={card.cta.label} />\n </div>\n <img\n src={image}\n alt={imageAlt}\n className='Mission__image'\n />\n </div>\n </div>\n </ComponentShell>\n </div>\n )\n}\n\nHomepageMission.propTypes = {\n header: PropTypes.string,\n linkHeader: PropTypes.string,\n sections: PropTypes.array,\n card: PropTypes.shape({\n header: PropTypes.string,\n description: PropTypes.string,\n cta: PropTypes.shape({\n label: PropTypes.string,\n slug: PropTypes.string\n })\n }),\n image: PropTypes.string,\n imageAlt: PropTypes.string,\n onLinkClick: PropTypes.func\n}\n\nHomepageMission.defaultProps = {\n linkHeader: 'Explore our data'\n}\n\nexport default HomepageMission\n","// extracted by mini-css-extract-plugin\nexport default {\"mobileHeaderHeight\":\"77px\",\"desktopHeaderHeight\":\"100px\"};","import React, { createRef, useState, useEffect } from 'react'\nimport MetaHead from '../../layout/MetaHead/MetaHead'\nimport HomepageMission from '../../homepage/HomepageMission/HomepageMission'\nimport HomepageCategoryCallout from '../../homepage/HomepageCategoryCallout/HomepageCategoryCallout'\nimport { getBrowseByCategoryMetadata, getHomepage } from '../../../services/api'\n// top level error handling\nimport withBoundary from '../../../hocs/withBoundary/withBoundary'\nimport compose from '../../../hocs/compose'\nimport Footer from '../../layout/Footer/Footer'\nimport config from '../../../config'\nimport cx from 'classnames'\n// the inner chart.js global object for setting config\nimport { Chart } from 'react-chartjs-2'\n// plugin to modify bubble chart labels\nimport ChartDataLabels from 'chartjs-plugin-datalabels'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\nimport LoadingCover from '../../common/LoadingCover/LoadingCover'\nimport ErrorPage from '../ErrorPage/ErrorPage'\n\nimport headerHeight from './CategoriesPage.scss'\n\nconst mobileHeaderHeight = Number((headerHeight.mobileHeaderHeight || '77px').split('px')[0])\nconst desktopHeaderHeight = Number((headerHeight.desktopHeaderHight || '77px').split('px')[0])\n\nconst {\n metaOrganizationName\n} = config\n\nconst defaultDataState = {\n pageTitle: 'Browse Data Categories',\n pageHeader: '',\n pageChartSections: [],\n mission: {},\n featuredTools: {},\n featuredContent: {}\n}\n\n// add refs for each page (chart) section for mission section nav links\nconst buildPageSectionRefs = (sections) => {\n return sections.map(section => (\n {\n name: section.header,\n sectionRef: createRef()\n }\n ))\n}\n\n/**\n * The Categories page currently clones the content of the Homepage, without the search\n * bar at the top or the lookup tools at the bottom. It is probable that either the homepage\n * or the categories page will change post MVP, so we are merely cloning the homepage content\n * right now.\n * @param props\n * @returns {JSX.Element}\n * @constructor\n */\nconst CategoriesPage = (props) => {\n const { isMobile } = useDisplayContext()\n const [CategoriesPage, setCategoriesPage] = useState({\n navSections: [],\n data: defaultDataState,\n isLoading: true,\n error: null\n })\n const { isLoading, navSections, data, error } = CategoriesPage\n const { metaTags, pageTitle } = data\n\n // page setup\n useEffect(() => {\n const fetchData = async () => {\n try {\n const metadata = await getBrowseByCategoryMetadata()\n const data = await getHomepage()\n\n // Use the browse by category title and tags, not Homepage.ß\n data.metaTags = metadata.metaTags\n data.pageTitle = metadata.pageTitle\n\n // calculate the nav sections\n const navSections = [\n ...buildPageSectionRefs(data.pageChartSections)\n ]\n\n setCategoriesPage(prevState => (\n {\n ...prevState,\n navSections,\n data,\n isLoading: false,\n error: null\n }\n ))\n\n // the chart labels plugin registers itself globally to all charts on load\n // prevent this behavior and register it manually in specific chart component setup\n Chart.plugins.unregister(ChartDataLabels)\n } catch (error) {\n setCategoriesPage(prevState => (\n {\n ...prevState,\n error: true\n }\n ))\n }\n }\n\n fetchData()\n }, [])\n\n // smooth scroll to ref\n const handleNavLinkClick = (ref) => {\n const currentScrollTop = window.pageYOffset\n const refNodeTop = ref.current.getBoundingClientRect().top\n\n window.scrollTo({\n top: refNodeTop + currentScrollTop - (isMobile ? mobileHeaderHeight : desktopHeaderHeight),\n behavior: 'smooth'\n })\n }\n\n const renderBody = () => {\n const {\n mission,\n imageUrls,\n pageChartSections\n } = data\n\n if (error) {\n return <ErrorPage msg='Sorry, there was an error.' />\n }\n if (isLoading) {\n return <LoadingCover />\n }\n\n return (\n <div className='pageAnimation'>\n <section className='CategoriesPage__section CategoriesPage__section--mission'>\n <HomepageMission\n {...mission}\n imageUrls={imageUrls}\n onLinkClick={handleNavLinkClick}\n sections={navSections}\n />\n </section>\n {\n pageChartSections.map((chartSection, i) => (\n <section\n key={i}\n ref={navSections[i].sectionRef}\n className={cx({\n CategoriesPage__section: i === 0 || i % 2 === 0,\n 'CategoriesPage__section--accented': i % 2 !== 0\n })}\n >\n <HomepageCategoryCallout\n {...chartSection}\n />\n </section>\n ))\n }\n <Footer />\n </div>\n )\n }\n\n return (\n <div className='CategoriesPage'>\n <MetaHead metaTags={metaTags}>\n <title>{`${pageTitle}${metaOrganizationName}`}</title>\n </MetaHead>\n {renderBody()}\n </div>\n )\n}\n\nexport default compose(\n withBoundary\n)(CategoriesPage)\n\nexport { CategoriesPage }\n"],"names":["ChartScrollableWrapper","_ref","marginBottom","children","_jsx","SimpleBar","className","style","defaultProps","makeLabelWidthDisplaySafe","str","maxwidth","arguments","length","undefined","sections","words","split","temp","forEach","word","i","concat","push","wddseAccentColorPalette","homepageChartCommonTooltipConfig","config","commonDataConfig","backgroundColor","borderWidth","hoverBorderWidth","hoverBackgroundColor","hoverRadius","props","callout","subtitle","isMobile","useDisplayContext","data","dataConfig","get","reduce","prev","bubble","labels","datasets","name","label","value","x","y","r","radius","borderColor","options","legend","display","plugins","datalabels","font","family","size","formatter","context","datasetIndex","bubbles","scales","yAxes","gridLines","ticks","fontColor","beginAtZero","min","max","stepSize","xAxes","tooltips","caretPadding","callbacks","title","tooltipItem","index","dataEntry","numberWithCommas","optionsConfig","_jsxs","Text","domElement","typeFace","Bubble","height","width","ChartDataLabels","ChartLegendLabel","isCondensed","safeIndex","color","cx","ChartLegendLabel__label","commonConfig","fill","pointHoverBorderWidth","pointStyle","pointRadius","pointHitRadius","borderCapStyle","borderJoinStyle","pointBorderColor","pointBorderWidth","pointHoverRadius","scaleLabelConfig","fontSize","fontFamily","padding","top","bottom","yScaleLabelConfig","lineColorConfig","main","gradientStart","xAxisTitle","yAxisScale","yAxisTitle","scaleLabel","labelString","callback","toFixed","drawBorder","tickMarkLength","drawOnChartArea","fontWeight","hover","mode","dataset","maintainAspectRatio","legendLabels","map","reverse","Line","canvas","buildDataConfig","xAxisLabels","lineColor","gradient","buildGradient","getContext","createLinearGradient","addColorStop","pointBackgroundColor","pointHoverBackgroundColor","pointHoverBorderColor","line","stepped","legendLabel","PieChart","chart","tempConfig","Object","keys","curr","dataPoints","backgroundColors","buildConfig","plain","emphasis","Pie","_ref2","charts","combinedKeys","colorIndex","dataObj","key","has","set","Map","buildLegendAndColors","Array","from","_Fragment","homepageFeaturedVisLabel","homepageChartMetaTopicLabel","homepageChartMetaDatasetUsedLabel","topic","type","ChartComponent","PieCharts","LineChart","BubbleChart","getChartComponentByType","LinkHandler","href","slug","homepageTopicLinksLabel","HomepageCategoryCallout","header","description","navigationalCategories","category","filter","cat","links","ComponentShell","link","url","HomepageChartContainer","isFirstSection","withGlobalMenus","globalMenuProps","HomepageMission","card","image","imageAlt","linkHeader","onLinkClick","section","onClick","handleAnchorClick","sectionRef","text","trackAnchorClick","window","utag","RichTextField","content","cta","src","alt","mobileHeaderHeight","Number","headerHeight","desktopHeaderHeight","desktopHeaderHight","metaOrganizationName","defaultDataState","pageTitle","pageHeader","pageChartSections","mission","featuredTools","featuredContent","CategoriesPage","setCategoriesPage","useState","navSections","isLoading","error","metaTags","useEffect","async","metadata","getBrowseByCategoryMetadata","getHomepage","createRef","prevState","Chart","unregister","fetchData","handleNavLinkClick","ref","currentScrollTop","pageYOffset","refNodeTop","current","getBoundingClientRect","scrollTo","behavior","MetaHead","renderBody","imageUrls","ErrorPage","msg","LoadingCover","chartSection","CategoriesPage__section","Footer","compose","withBoundary"],"sourceRoot":""}