{"version":3,"file":"earnings.c7893236.js","mappings":"8xCAoBe,SAASA,EAAcC,GAAwE,IAAAC,EAAA,IAAvE,aAAEC,EAAY,aAAEC,EAAY,mBAAEC,GAAuCJ,EAC1G,MAAMK,GAAmBF,EAAaG,OAChCC,GAAsBC,EAAAA,EAAAA,IAAuBL,GAC7CM,EAAiBC,EAAAA,SAAc,KAAM,IAAAC,EAAAC,EACzC,MAAMC,EAAOR,EAAkBD,EAAqBD,EAC9CW,EAAqBZ,GAAea,EAAAA,EAAAA,GAASb,GAAgB,KAC7Dc,EAA4BH,EAAKI,UAAUC,EAAAA,IAC3CC,EAAsD,QAAlCR,EAAGE,EAAKG,UAA0B,IAAAL,EAAAA,EAAI,KAC1DS,EAAiD,QAAtCR,EAAGC,EAAKG,EAA4B,UAAE,IAAAJ,EAAAA,EAAI,KAE3D,GAAoB,OAAhBQ,GAAiD,OAAzBD,EAC1B,MAAO,CACLE,KAAM,KACNC,WAAY,KACZC,WAAY,GACZC,IAAK,KACLC,QAAS,KACTC,QAAS,MAIb,MAAMC,EAAkBP,EAAYlB,aAC9B0B,IACJd,IAAsBe,EAAAA,EAAAA,IAAQf,GAAoBgB,WAAaC,KAAKC,OAEhEC,EAAwBN,GAC1BO,EAAAA,EAAAA,IAAUnB,EAAAA,EAAAA,GAASY,GAlC3B,SAAmBtB,EAA0BE,GAC3C,OAAIF,EAAwB,GACxBE,EAA4B,EACzB,CACT,CA8B6C4B,CAAU9B,EAAiBE,IAChE,KAEJ,MAAO,CACLc,KAAMO,EAAsCK,EAAwBnB,EACpEQ,YAAYc,EAAAA,EAAAA,IAAwBjB,EAAqBkB,aAAchC,EAAiBE,GACxFgB,WACEK,GAAuCK,EACnC,SACAK,EAAAA,EAAAA,IAAsBxB,GAC5BU,IAAKL,aAAoB,EAApBA,EAAsBoB,YAC3Bd,QAASN,EAAqBqB,oBAC9Bd,QAASP,aAAoB,EAApBA,EAAsBsB,cAChC,GACA,CAACvC,EAAcC,EAAcC,EAAoBC,EAAiBE,IAErE,OACEmC,EAAAA,EAAAA,MAACC,EAAAA,EAAQ,CAACC,UAAU,OAAMC,SAAA,EACxBC,EAAAA,EAAAA,KAACC,EAAAA,EAAO,CACNC,UAAW,GAAGvC,EAAeY,KAAO4B,EAAAA,EAAexC,EAAeY,KAAM6B,EAAAA,IAAwB,OAAOzC,EAAec,aACtH4B,MAAM,sBAERL,EAAAA,EAAAA,KAACC,EAAAA,EAAO,CAACC,UAAoC,QAA3B/C,EAAEQ,EAAea,kBAAU,IAAArB,EAAAA,EAAI,IAAKkD,MAAM,mBAC5DL,EAAAA,EAAAA,KAACC,EAAAA,EAAO,CAACC,WAAWI,EAAAA,EAAAA,IAAkB3C,EAAee,IAAK,CAAE6B,aAAc,MAAQF,MAAM,cACxFL,EAAAA,EAAAA,KAACC,EAAAA,EAAO,CAACC,WAAWI,EAAAA,EAAAA,IAAkB3C,EAAegB,QAAS,CAAE4B,aAAc,MAAQF,MAAM,mBAC5FL,EAAAA,EAAAA,KAACC,EAAAA,EAAO,CACNC,WAAWI,EAAAA,EAAAA,IAAkB3C,EAAeiB,QAAS,CAAE2B,aAAc,IAAKC,SAAU,MACpFH,MAAM,mBAId,C,cClEO,SAASI,EAAqBC,GACnC,MAAOC,EAAUC,GAAehD,EAAAA,SAAe8C,EAAMC,UAErD/C,EAAAA,WAAgB,KACdgD,EAAYF,EAAMC,SAAS,GAC1B,CAACD,EAAMC,WAEV,MAAME,EAAgBjD,EAAAA,SACpB,IACE8C,EAAMG,cAAcC,KAAKvB,IAAY,CACnCwB,MAAOxB,EACPc,OAAOW,EAAAA,EAAAA,IAAiBzB,QAE5B,CAACmB,EAAMG,gBAGT,OACEb,EAAAA,EAAAA,KAACiB,EAAAA,GAAM,CACL,aAAW,gBACXC,KAAK,QACLpB,UAAU,SACViB,MAAOJ,EACPQ,MAAON,EACPO,SAAWC,IACTT,EAAYS,EAAKN,OACjBL,EAAMY,SAASD,EAAKN,MAAM,EAE5BQ,WAAW,GAGjB,C,+GC9BA,SAASC,EAAoBC,EAAoClC,GAC/D,MAAO,IAAGyB,EAAAA,EAAAA,IAAiBzB,MAAiBmC,EAAAA,GAA2BD,aACzE,CAAC,IAEIE,EAAW,SAAXA,GAAW,OAAXA,EAAW,UAAXA,EAAW,sBAAXA,EAAW,kBAAXA,CAAW,EAAXA,GAAW,IAYhB,SAASC,EAAU1E,GAAsE,IAArE,MAAE2E,EAAK,KAAEC,EAAI,KAAEC,EAAI,SAAEhC,GAA8C7C,EACrF,OACE8C,EAAAA,EAAAA,KAAA,OAAAD,UACEH,EAAAA,EAAAA,MAAA,OAAgBE,UAAWkC,IAAW,iDAAiDjC,SAAA,EACrFH,EAAAA,EAAAA,MAAA,QAAME,UAAU,qCAAoCC,SAAA,CACjD+B,IAASH,EAAYM,UACpBjC,EAAAA,EAAAA,KAACkC,EAAAA,GAAI,CAACC,MAAO,GAAIJ,KAAK,eAAejC,UAAU,uCAEhDgC,IAASH,EAAYS,YACpBpC,EAAAA,EAAAA,KAACkC,EAAAA,GAAI,CAACC,MAAO,GAAIJ,KAAK,iBAAiBjC,UAAU,mCAElDgC,IAASH,EAAYU,MACpBrC,EAAAA,EAAAA,KAAA,QAAMF,UAAU,0CAA0CwC,MAAO,CAAEC,gBAAiBV,MAEtF7B,EAAAA,EAAAA,KAAA,QAAAD,SAAOgC,QAET/B,EAAAA,EAAAA,KAAA,QAAMF,UAAU,yBAAwBC,SAAEA,MAblCgC,IAiBhB,CAQO,SAASS,EAAoBC,GAA8C,IAA7C,aAAEhB,EAAY,SAAEiB,EAAQ,SAAEC,GAAiBF,EAC9E,OAAKhB,GAAiBiB,GAAaC,GAGjC/C,EAAAA,EAAAA,MAAA,OAAKE,UAAU,0IAAyIC,SAAA,EACtJC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,iCAAgCC,SAC5C4C,EAASpE,MAAQ4B,EAAAA,EAAewC,EAASpE,KAAM6B,EAAAA,OAElDR,EAAAA,EAAAA,MAACgC,EAAU,CACTC,OAAOe,EAAAA,EAAAA,IAAiBC,EAAAA,GAAcC,UACtChB,KAAMH,EAAYU,IAClBN,KAAMP,EAAoBC,EAAckB,EAASpD,cAAcQ,SAAA,EAE9DO,EAAAA,EAAAA,IAAkBqC,EAASI,MAAM,MAAGzC,EAAAA,EAAAA,IAAkBqC,EAASK,KAAK,KAAE1C,EAAAA,EAAAA,IAAkBqC,EAASM,MAAM,QAE1GjD,EAAAA,EAAAA,KAAC4B,EAAU,CAACC,OAAOe,EAAAA,EAAAA,IAAiBC,EAAAA,GAAcK,OAAQpB,KAAMH,EAAYU,IAAKN,KAAK,QAAOhC,UAC1FoD,EAAAA,EAAAA,IAAaR,EAASO,UAEzBtD,EAAAA,EAAAA,MAACgC,EAAU,CAACC,OAAOe,EAAAA,EAAAA,IAAiBC,EAAAA,GAAcK,OAAQpB,KAAMH,EAAYM,QAASF,KAAK,eAAchC,SAAA,CACrG4C,EAASS,YAAY,IAAET,EAASU,cAEnCzD,EAAAA,EAAAA,MAACgC,EAAU,CAACC,OAAOe,EAAAA,EAAAA,IAAiBC,EAAAA,GAAcK,OAAQpB,KAAMH,EAAYS,UAAWL,KAAK,iBAAgBhC,SAAA,CACzG4C,EAASW,cAAc,IAAEX,EAASU,gBArBW,IAyBtD,CCnDO,SAASE,EAAmBrG,GASzB,IAT0B,YAClCsG,EAAW,UACXC,EAAS,gBACTC,EAAe,aACfjC,EAAY,SACZiB,EAAQ,iBACRiB,EAAgB,cAChBC,EAAa,kBACbC,GACM3G,EACN,MAAM4G,EAAelG,EAAAA,SACnB,KAAMmG,EAAAA,EAAAA,IAAgBF,EAAmBH,IACzC,CAACG,EAAmBH,IAGtB,OACE1D,EAAAA,EAAAA,KAAA,OAAKF,UAAU,SAAQC,UACrBC,EAAAA,EAAAA,KAAA,OAKEgE,aAAcA,KACZJ,GAAc,EAAK,EAErBK,aAAcA,KACZL,GAAc,EAAM,EACpB7D,UAEFC,EAAAA,EAAAA,KAACkE,EAAAA,EAAmB,CAACC,OAAQC,EAAAA,GAA6BrE,UACxDH,EAAAA,EAAAA,MAACyE,EAAAA,EAAa,CACZtG,KAAM0F,EACNa,OAAO,oBACPC,OAAQ,CAAEC,KAAM,GAAIC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAC9CC,YAAclE,IAC4B,iBAA7BA,EAAMmE,oBAAmCnE,EAAMmE,qBAAuBrB,GAC/EG,EAAiBjD,EAAMmE,mBACzB,EAEFZ,aAAcA,KACZN,GAAkB,EAAE,EACpB5D,SAAA,EAEFC,EAAAA,EAAAA,KAAC8E,EAAAA,EAAa,CAACC,UAAQ,KACvB/E,EAAAA,EAAAA,KAACgF,EAAAA,GAAK,CACJC,SAAU,CAAEC,QAAQtC,EAAAA,EAAAA,IAAiBC,EAAAA,GAAcsC,OACnDC,QAAQ,YACRC,OAAQ,CAACxB,EAAmBH,GAC5B4B,MAAM,OACNC,cAAgBxE,IAAkByE,EAAAA,EAAAA,IAAYzE,GAC9C0E,MAAO3B,EACP4B,KAAK,YAEP1F,EAAAA,EAAAA,KAAC2F,EAAAA,EAAK,CACJN,OAAQ,CAAC,OAAQ,QACjBO,SAAS,mBACTC,UAAWC,EAAAA,GACXP,cAAgBxE,IAAUgF,EAAAA,EAAAA,IAAkBhF,GAC5CoB,MAAO6D,EAAAA,GACPC,QAAQ,cAEVjG,EAAAA,EAAAA,KAAC2F,EAAAA,EAAK,CACJN,OAAQ,CAAC,OAAQ,QACjBO,SAAS,mBACTM,YAAY,QACZL,UAAWC,EAAAA,GACX3D,MAAO6D,EAAAA,GACPC,QAAQ,WAEVjG,EAAAA,EAAAA,KAACmG,EAAAA,EAAI,CACHC,WAAW,EACXC,cAAY,EACZjB,QAAQ,UACR/C,KAAK,EACLiE,MAAM1D,EAAAA,EAAAA,IAAiBC,EAAAA,GAAc0D,SACrCC,YAAa,IACbC,mBAAmB,EACnBvB,QAAQtC,EAAAA,EAAAA,IAAiBC,EAAAA,GAAc0D,SACvCb,KAAK,SACLO,QAAQ,cAEVjG,EAAAA,EAAAA,KAAC0G,EAAAA,EAAI,CACHN,WAAW,EACXC,cAAc,EACdjB,QAAQ,QACR/C,KAAK,EACLoE,mBAAmB,EACnBvB,QAAQtC,EAAAA,EAAAA,IAAiBC,EAAAA,GAAcK,OACvCwC,KAAK,SACLO,QAAQ,WAEVjG,EAAAA,EAAAA,KAAC0G,EAAAA,EAAI,CACHN,WAAW,EACXC,cAAc,EACdjB,QAAQ,OACR/C,KAAK,EACLoE,mBAAmB,EACnBvB,QAAQtC,EAAAA,EAAAA,IAAiBC,EAAAA,GAAcC,UACvC4C,KAAK,SACLO,QAAQ,cAEVjG,EAAAA,EAAAA,KAAC2G,EAAAA,EAAO,CACNC,QAASA,KACP5G,EAAAA,EAAAA,KAACwC,EAAoB,CACnBf,aAAcA,EACdiB,SAAUA,EACVC,SAAUc,EAAUD,KAGxBqD,SAAQnE,GAAW,CAAEwC,QAAQtC,EAAAA,EAAAA,IAAiBC,EAAAA,GAAcgE,SAC5DJ,mBAAmB,YAOjC,C,eCtHO,SAASK,EAAoB5J,GAQ1B,IAR2B,YACnCsG,EAAW,UACXC,EAAS,gBACTC,EAAe,SACfhB,EAAQ,iBACRiB,EAAgB,cAChBC,EAAa,kBACbC,GACM3G,EACN,OACE8C,EAAAA,EAAAA,KAAA,OAAAD,UACEC,EAAAA,EAAAA,KAAA,OAKEgE,aAAcA,KACZJ,GAAc,EAAK,EAErBK,aAAcA,KACZL,GAAc,EAAM,EACpB7D,UAEFC,EAAAA,EAAAA,KAACkE,EAAAA,EAAmB,CAACC,OAAQ4C,EAAAA,GAA8BhH,UACzDH,EAAAA,EAAAA,MAACyE,EAAAA,EAAa,CACZtG,KAAM0F,EACNc,OAAQ,CAAEC,KAAM,GAAKwB,EAAAA,GAA6BvB,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAC5EqC,YAAY,OACZ1C,OAAO,oBACPM,YAAclE,IAC4B,iBAA7BA,EAAMmE,oBAAmCnE,EAAMmE,qBAAuBrB,GAC/EG,EAAiBjD,EAAMmE,mBACzB,EAEFZ,aAAcA,KACZN,GAAkB,EAAE,EACpB5D,SAAA,EAEFC,EAAAA,EAAAA,KAAC8E,EAAAA,EAAa,CAAChF,UAAU,0DACzBE,EAAAA,EAAAA,KAACgF,EAAAA,GAAK,CAACI,QAAQ,YAAYC,OAAQ,CAACxB,EAAmBH,GAAkBuD,MAAI,EAAC3B,MAAM,OAAOI,KAAK,YAChG1F,EAAAA,EAAAA,KAAC2F,EAAAA,EAAK,CACJN,OAAQ,CAAC,OAAQ,QACjBa,YAAY,QACZL,UAAWqB,EAAAA,GACX3B,cAAeA,CAACxE,EAAOoG,IACrBA,EAAM,GAAKA,EAAMD,EAAAA,GAA8B,EA3D/D,SAAsBnG,GACpB,OAAOqG,KAAKC,IAAItG,GAAOuG,SACzB,CAyDmEC,CAAaxG,GAAS,GAE3E2E,KAAK,SACLvD,MAAO6D,EAAAA,GACPJ,SAAU,KAEZ5F,EAAAA,EAAAA,KAACwH,EAAAA,EAAG,CACFpC,QAAQ,cACRkB,MAAM1D,EAAAA,EAAAA,IAAiBC,EAAAA,GAAc4E,OACrChB,mBAAmB,EACnBiB,WAAY,EACZC,QAAQ,WAEV3H,EAAAA,EAAAA,KAACwH,EAAAA,EAAG,CACFpC,QAAQ,mBACRkB,MAAM1D,EAAAA,EAAAA,IAAiBC,EAAAA,GAAc+E,SACrCnB,mBAAmB,EACnBiB,WAAY,EACZC,QAAQ,WAEV3H,EAAAA,EAAAA,KAAC2G,EAAAA,EAAO,CACNC,QAASA,IAAM,KACfC,SAAQnE,GAAW,CAAEwC,QAAQtC,EAAAA,EAAAA,IAAiBC,EAAAA,GAAcgE,SAC5DJ,mBAAmB,YAOjC,CC/Ee,SAASoB,EAAiB3K,GAA0B,IAAzB,aAAE4K,GAAqB5K,EAC/D,MAAO6K,EAAuBC,GAA4BpK,EAAAA,UAAe,IAClEqK,EAAwBC,GAA6BtK,EAAAA,UAAe,IACpE4F,EAAa2E,GAAkBvK,EAAAA,UAAgB,IAChD,SAAEwK,EAAQ,YAAEC,IAAgBC,EAAAA,EAAAA,MAE5B7G,EAAe2G,EAAS3G,aACxB8G,EAAmBH,EAAS7I,aAC9B6I,EAAS7I,aArBf,SAAgCuI,EAAuCrG,GACrE,MAAM+G,EAAQC,OAAOC,KAAKZ,EAAarG,GAAc+G,OACrD,GAAIA,EAAMhL,OAAS,EACjB,OAAOgL,EAAMA,EAAMhL,OAAS,GAE9B,MAAMmL,EAAWF,OAAOC,KAAKZ,EAAarG,GAAckH,UACxD,OAAOA,EAASA,EAASnL,OAAS,EACpC,CAeMoL,CAAuBd,EAAcrG,GAEnC1D,GAAO8K,EAAAA,EAAAA,UAAQ,KACnB,MAAMpF,EAAgC,GAChC+E,EAAQC,OAAOC,KAAKZ,EAAarG,GAAc+G,OAC/CG,EAAWF,OAAOC,KAAKZ,EAAarG,GAAckH,UAClD9H,EAAgB,IAAI2H,KAAUG,GACpC,IAAIpJ,EAAegJ,EAQnB,GAPIhJ,IAAiBsB,EAAciI,SAASvJ,KAC1CA,EAAeA,EAAawJ,SAASC,EAAAA,IAAoBR,EAAMA,EAAMhL,OAAS,GAAKmL,EAASA,EAASnL,OAAS,IAE3G+B,IACHA,EAAeiJ,EAAMhL,OAAS,EAAIgL,EAAMA,EAAMhL,OAAS,GAAKmL,EAASA,EAASnL,OAAS,IAGrF+B,EAAc,CAChB,MAAM0J,EAAY1J,EAAawJ,SAASC,EAAAA,IACpClB,EAAarG,GAAc+G,MAAMjJ,GACjCuI,EAAarG,GAAckH,SAASpJ,GACxC,IAAK,MAAMoD,KAAYsG,EACrBxF,EAAUyF,KAAK,IACVvG,EACHM,MAAMkG,EAAAA,EAAAA,IAAexG,EAASM,KAAMxB,GACpCuB,KAAKmG,EAAAA,EAAAA,IAAexG,EAASK,IAAKvB,GAClC8E,QAAS,EAAC4C,EAAAA,EAAAA,IAAexG,EAASK,IAAKvB,IAAe0H,EAAAA,EAAAA,IAAexG,EAASM,KAAMxB,IACpFsB,MAAMoG,EAAAA,EAAAA,IAAexG,EAASI,KAAMtB,GACpC2H,kBAAmBzG,EAASW,cAC5B+F,UAAW1G,EAASpE,KAAKS,WAG/B,CAEA,MAAM6E,EAAoBJ,EAAUjG,OAASiG,EAAU,GAAG4F,UAAY,EAGtE,MAAO,CACL5F,YACAC,gBAJsBD,EAAUjG,OAASiG,EAAUA,EAAUjG,OAAS,GAAG6L,UAAY,EAKrF9J,eACAsB,gBACAgD,oBACD,GACA,CAACpC,EAAc8G,EAAkBT,IAEpC,GAA8B,IAA1B/J,EAAK0F,UAAUjG,OACjB,OAAO,KAGT,MAAMkF,EAAWqF,GAAyBE,EAE1C,OACErI,EAAAA,EAAAA,MAAA,OAAKE,UAAU,oCAAmCC,SAAA,EAChDH,EAAAA,EAAAA,MAAA,OAAKE,UAAU,yBAAwBC,SAAA,EACrCC,EAAAA,EAAAA,KAACsJ,EAAAA,GAAO,CAACC,MAAO,EAAGzJ,UAAU,oBAAmBC,SAAC,wBAGjDC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,eACfE,EAAAA,EAAAA,KAACwJ,EAAAA,GAAS,CAACtI,KAAK,QAAQpB,UAAU,qCAAoCC,SAAC,YAGvEC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,yBAAwBC,UACrCC,EAAAA,EAAAA,KAACS,EAAoB,CACnBE,SAAU5C,EAAKwB,aACfsB,cAAe9C,EAAK8C,cACpBS,SAAWX,GAAa0H,EAAY,IAAKD,EAAU7I,aAAcoB,YAIvEX,EAAAA,EAAAA,KAACuD,EAAmB,CAClBC,YAAaA,EACbC,UAAW1F,EAAK0F,UAChBC,gBAAiB3F,EAAK2F,gBACtBjC,aAAcA,EACdiB,SAAUA,EACViB,iBAAkBwE,EAClBvE,cAAeoE,EACfnE,kBAAmB9F,EAAK8F,qBAE1B7D,EAAAA,EAAAA,KAAC8G,EAAoB,CACnBtD,YAAaA,EACbC,UAAW1F,EAAK0F,UAChBC,gBAAiB3F,EAAK2F,gBACtBhB,SAAUA,EACViB,iBAAkBwE,EAClBvE,cAAesE,EACfrE,kBAAmB9F,EAAK8F,sBAIhC,C,eC/GO,SAAS4F,EAAsBvM,GAAkC,IAAjC,cAAEwM,EAAa,MAAErJ,GAAcnD,EACpE,MAAM,SAAEkL,EAAQ,YAAEC,IAAgBC,EAAAA,EAAAA,MAE5BqB,EAAgBA,CAACC,EAA6B7I,KAClDsH,EAAY,IACPD,EACH,CAACwB,GAAM7I,GACP,EAGEU,EAAe2G,EAAS3G,aAE9B,OACE7B,EAAAA,EAAAA,MAACiK,EAAAA,EAAU,CAAC3I,KAAK,QAAQb,MAAOA,GAAS,GAAGN,SAAA,EAC1CC,EAAAA,EAAAA,KAAC8J,EAAAA,EAAgB,CACfC,OAAQtI,IAAiBuI,EAAAA,GAAqBtL,IAC9CuL,UAAWP,EAAcM,EAAAA,GAAqBtL,KAC9CwL,QAASA,IAAMP,EAAc,eAAgBK,EAAAA,GAAqBtL,KAAKqB,SACxE,SAGDC,EAAAA,EAAAA,KAAC8J,EAAAA,EAAgB,CACfC,OAAQtI,IAAiBuI,EAAAA,GAAqBG,QAC9CF,UAAWP,EAAcM,EAAAA,GAAqBG,SAC9CD,QAASA,IAAMP,EAAc,eAAgBK,EAAAA,GAAqBG,SAASpK,SAC5E,cAGDC,EAAAA,EAAAA,KAAC8J,EAAAA,EAAgB,CACfC,OAAQtI,IAAiBuI,EAAAA,GAAqBI,MAC9CH,UAAWP,EAAcM,EAAAA,GAAqBI,OAC9CF,QAASA,IAAMP,EAAc,eAAgBK,EAAAA,GAAqBI,OAAOrK,SAC1E,YAKP,CClCe,SAASsK,EAAcnN,GAO5B,IAP6B,cACrCoG,EAAa,SACbR,EAAQ,MACRzC,EAAK,aACLiK,EAAY,UACZrB,EAAS,YACT7F,GACMlG,EACN,OACE0C,EAAAA,EAAAA,MAAA,OAAKE,UAAU,yEAAwEC,SAAA,EACrFC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,wBAAuBC,SAAEM,KACxCL,EAAAA,EAAAA,KAAA,OAAAD,SAAK,cACLC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,eAAcC,UAAEgG,EAAAA,EAAAA,IAAkBjD,MACjD9C,EAAAA,EAAAA,KAAA,OAAAD,SAAK,kBACLH,EAAAA,EAAAA,MAAA,OAAAG,SAAA,EACEC,EAAAA,EAAAA,KAAA,QAAMF,UAAU,iBAAgBC,SAAEqD,IAAmB,IAAE6F,MAEzDjJ,EAAAA,EAAAA,KAAA,OAAAD,SAAK,oBACLH,EAAAA,EAAAA,MAAA,OAAAG,SAAA,EACEC,EAAAA,EAAAA,KAAA,QAAMF,UAAU,gBAAeC,SAAEuD,IAAqB,IAAE2F,MAE1DjJ,EAAAA,EAAAA,KAAA,OAAAD,SAAK,mBACLC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,eAAcC,SAAEI,EAAAA,EAAemK,EAAclK,EAAAA,QAGlE,CC7BA,SAASmK,EAAkBtB,GACzB,OAAOA,GAAaA,EAAUzL,OAAS,EAAIyL,EAAUA,EAAUzL,OAAS,GAAK,IAC/E,CAEA,SAASgN,EAAgB1C,EAAuCrG,GAC9D,SACEgH,OAAOC,KAAKZ,EAAarG,GAAckH,UAAUnL,SAAUiL,OAAOC,KAAKZ,EAAarG,GAAc+G,OAAOhL,OAE7G,CAMe,SAASiN,EAAevN,GAA0B,IAAzB,aAAE4K,GAAqB5K,EAC7D,MAAM,SAAEkL,IAAaE,EAAAA,EAAAA,MAEf7G,EAAe2G,EAAS3G,aAExB1D,GAAO8K,EAAAA,EAAAA,UAAQ,KACnB,MAAMF,EAAWF,OAAOC,KAAKZ,EAAarG,GAAckH,UAClDH,EAAQC,OAAOC,KAAKZ,EAAarG,GAAc+G,OAC/CkC,EAAiB/B,EAASA,EAASnL,OAAS,GAC5CmN,EAAqBhC,EAASA,EAASnL,OAAS,GAChDoN,EAAcpC,EAAMA,EAAMhL,OAAS,GACnCqN,EAAkBrC,EAAMA,EAAMhL,OAAS,GACvCkM,EAAgB,CACpB,CAACM,EAAAA,GAAqBtL,KAAM8L,EAAgB1C,EAAckC,EAAAA,GAAqBtL,KAC/E,CAACsL,EAAAA,GAAqBG,SAAUK,EAAgB1C,EAAckC,EAAAA,GAAqBG,SACnF,CAACH,EAAAA,GAAqBI,OAAQI,EAAgB1C,EAAckC,EAAAA,GAAqBI,QAEnF,MAAO,CACLU,YAAaP,EAAkBzC,EAAarG,GAAckH,SAAS+B,IACnEK,gBAAiBR,EAAkBzC,EAAarG,GAAckH,SAASgC,IACvEK,SAAUT,EAAkBzC,EAAarG,GAAc+G,MAAMoC,IAC7DK,aAAcV,EAAkBzC,EAAarG,GAAc+G,MAAMqC,IACjEnB,gBACD,GACA,CAACjI,EAAcqG,IAEZoD,EAAUnN,EAAK+M,aAAe/M,EAAKgN,iBAAmBhN,EAAKiN,UAAYjN,EAAKkN,aAElF,OACErL,EAAAA,EAAAA,MAAA,OAAAG,SAAA,EACEH,EAAAA,EAAAA,MAAA,OAAKE,UAAU,uBAAsBC,SAAA,EACnCC,EAAAA,EAAAA,KAACsJ,EAAAA,GAAO,CAACC,MAAO,EAAGzJ,UAAU,oBAAmBC,SAAC,sBAGjDC,EAAAA,EAAAA,KAACyJ,EAAsB,CAACC,cAAe3L,EAAK2L,cAAerJ,MAAM,gBAElE6K,IACCtL,EAAAA,EAAAA,MAAA,OAAKE,UAAU,cAAaC,SAAA,CACzBhC,EAAKgN,kBACJ/K,EAAAA,EAAAA,KAACqK,EAAc,CACbhK,OAAO8K,EAAAA,EAAAA,IAAkBpN,EAAKgN,gBAAgBxL,cAC9CuD,UAAUqG,EAAAA,EAAAA,IAAepL,EAAKgN,gBAAgBhI,KAAMtB,GACpD2B,YAAarF,EAAKgN,gBAAgB3H,YAClCE,cAAevF,EAAKgN,gBAAgBzH,cACpC2F,UAAWlL,EAAKgN,gBAAgB1H,UAChCiH,aAAcvM,EAAKgN,gBAAgBxM,OAGtCR,EAAK+M,cACJ9K,EAAAA,EAAAA,KAACqK,EAAc,CACbhK,OAAO8K,EAAAA,EAAAA,IAAkBpN,EAAK+M,YAAYvL,cAC1CuD,UAAUqG,EAAAA,EAAAA,IAAepL,EAAK+M,YAAY/H,KAAMtB,GAChD2B,YAAarF,EAAK+M,YAAY1H,YAC9BE,cAAevF,EAAK+M,YAAYxH,cAChC2F,UAAWlL,EAAK+M,YAAYzH,UAC5BiH,aAAcvM,EAAK+M,YAAYvM,OAGlCR,EAAKkN,eACJjL,EAAAA,EAAAA,KAACqK,EAAc,CACbhK,OAAO+K,EAAAA,EAAAA,IAAerN,EAAKkN,aAAa1L,cACxCuD,UAAUqG,EAAAA,EAAAA,IAAepL,EAAKkN,aAAalI,KAAMtB,GACjD2B,YAAarF,EAAKkN,aAAa7H,YAC/BE,cAAevF,EAAKkN,aAAa3H,cACjC2F,UAAWlL,EAAKkN,aAAa5H,UAC7BiH,aAAcvM,EAAKkN,aAAa1M,OAGnCR,EAAKiN,WACJhL,EAAAA,EAAAA,KAACqK,EAAc,CACbhK,OAAO+K,EAAAA,EAAAA,IAAerN,EAAKiN,SAASzL,cACpCuD,UAAUqG,EAAAA,EAAAA,IAAepL,EAAKiN,SAASjI,KAAMtB,GAC7C2B,YAAarF,EAAKiN,SAAS5H,YAC3BE,cAAevF,EAAKiN,SAAS1H,cAC7B2F,UAAWlL,EAAKiN,SAAS3H,UACzBiH,aAAcvM,EAAKiN,SAASzM,WAKlC2M,IACAtL,EAAAA,EAAAA,MAAA,OAAKE,UAAU,2EAA0EC,SAAA,CAAC,MACpF2B,EAAAA,GAA2BD,GAAc,wBAKvD,CCtGe,SAAS4J,EAAiBnO,GAA0B,IAAzB,aAAE4K,GAAqB5K,EAC/D,OAAK4K,GAIHlI,EAAAA,EAAAA,MAAA,OAAKE,UAAU,kEAAiEC,SAAA,EAC9EC,EAAAA,EAAAA,KAACyK,EAAe,CAAC3C,aAAcA,KAC/B9H,EAAAA,EAAAA,KAAC6H,EAAiB,CAACC,aAAcA,OAL5B,IAQX,C,wBCXe,SAASwD,EAAYpO,GAAwC,IAAvC,MAAEqO,EAAK,MAAE1J,EAAK,MAAExB,EAAK,MAAEmL,GAActO,EACxE,MAAMuO,GAAYF,EAAQC,EAAS,KAAKlE,QAAQ,GAChD,OACE1H,EAAAA,EAAAA,MAAA,OAAKE,UAAU,kBAAiBC,SAAA,EAC9BH,EAAAA,EAAAA,MAAA,OAAKE,UAAU,0BAA0BwC,MAAO,CAAET,MAAOA,GAAQ9B,SAAA,CAC9D0L,EAAQ,QAEX7L,EAAAA,EAAAA,MAAA,OAAKE,UAAU,sBAAqBC,SAAA,EAClCH,EAAAA,EAAAA,MAAA,OAAAG,SAAA,EACEC,EAAAA,EAAAA,KAAA,QAAMF,UAAU,YAAWC,SAAEM,IAAa,0BAE5CT,EAAAA,EAAAA,MAAA,OAAAG,SAAA,EACEH,EAAAA,EAAAA,MAAA,QAAME,UAAU,YAAWC,SAAA,CACxBwL,EAAM,IAAEC,KACH,IAAI,wBAMtB,CCvBA,MAAME,GAAsB,EAMb,SAASC,GAAazO,GAA0B,IAAzB,aAAEG,GAAqBH,EAC3D,MAAMa,GAAO8K,EAAAA,EAAAA,UAAQ,KACnB,IAAIF,EAAW,EACXiD,EAAW,EACXC,EAAe,EACfC,EAAe,EACnB,IAAK,IAAI3E,EAAM9J,EAAaG,OAAS,EAAG2J,EAAM,KACxCwB,GAAY+C,IAD+BvE,IAAO,CAItD,MAAM4E,EAAU1O,EAAa8J,GACH,OAAtB4E,EAAQC,WAAoD,OAA9BD,EAAQE,mBAAsD,OAAxBF,EAAQG,cAC9EvD,GAAY,EACc,OAAtBoD,EAAQC,WAA8C,OAAxBD,EAAQtM,aAAwBsM,EAAQC,UAAYD,EAAQtM,aAC5FmM,IAG8B,OAA9BG,EAAQE,mBACwB,OAAhCF,EAAQrM,qBACRqM,EAAQE,kBAAoBF,EAAQrM,qBAEpCmM,IAGwB,OAAxBE,EAAQG,aACkB,OAA1BH,EAAQpM,eACRoM,EAAQG,YAAcH,EAAQpM,eAE9BmM,IAGN,CACA,MAAO,CACLF,WACAC,eACAC,eACAnD,WACD,GACA,CAACtL,IAEJ,OACEuC,EAAAA,EAAAA,MAAA,OAAKE,UAAU,iCAAgCC,SAAA,EAC7CC,EAAAA,EAAAA,KAACsL,EAAY,CAACzJ,MAAOsK,IAAAA,KAAY,KAAM9L,MAAM,MAAMkL,MAAOxN,EAAK6N,SAAUJ,MAAOzN,EAAK4K,YACrF3I,EAAAA,EAAAA,KAACsL,EAAY,CAACzJ,MAAOsK,IAAAA,OAAc,KAAM9L,MAAM,WAAWkL,MAAOxN,EAAK8N,aAAcL,MAAOzN,EAAK4K,YAChG3I,EAAAA,EAAAA,KAACsL,EAAY,CAACzJ,MAAOsK,IAAAA,OAAc,KAAM9L,MAAM,UAAUkL,MAAOxN,EAAK+N,aAAcN,MAAOzN,EAAK4K,aAGrG,C,4BC7Ce,SAASyD,GAAqBlP,GAMd,IANe,KAC5Ca,EAAI,QACJsO,EAAO,WACPC,EAAU,QACVC,EAAO,OACPC,GAC2BtP,EAC3B,MAAM,MAAEmD,EAAK,aAAEoM,EAAY,qBAAEC,EAAoB,QAAEC,GAAY5O,EACzD6O,EAAoC,IAAnBD,EAAQnP,QAAgBgP,EAE/C,OACE5M,EAAAA,EAAAA,MAACiN,GAAAA,GAAS,CAAA9M,SAAA,EACRH,EAAAA,EAAAA,MAACkN,GAAAA,GAAQ,CAACC,aAAa,EAAMhN,SAAA,EAC3BC,EAAAA,EAAAA,KAACgN,GAAAA,GAAS,CACRC,YAAY,EACZC,MAAOC,GAAAA,GAAWC,KAClBtN,UAAWkC,IACT,4DACA,CACE,yBAA0B4K,EAC1B,gBAAiBL,GAEnBG,GACA3M,SAED0M,QAAAA,GAAgBzM,EAAAA,EAAAA,KAAA,QAAMF,UAAU,kDAAiDC,SAAEM,MAGrFgM,EAAQvL,KAAI,CAACuM,EAAQC,EAAOC,KAAU,IAAAC,EACrC,MAAMC,EAAaH,IAAUC,EAAM/P,OAAS,EAC5C,OACEwC,EAAAA,EAAAA,KAACgN,GAAAA,GAAS,CAERE,MAAOG,EAAOH,MACdD,YAAY,EACZnN,UAAWkC,IACT,+BACA,CACE,YAAaqL,EAAOK,YACpB,WAAYd,IAAmBS,EAAOK,YACtC,WAAYL,EAAOM,cACnB,WAAYN,EAAOO,gBAAkBH,EACrC,gBAAiBlB,GAAWc,EAAOQ,iBACnC,gBAAiBtB,IAAYc,EAAOS,mBAAqBL,GACzD,gBAAiBb,GAAkBS,EAAOQ,iBAC1C,gBAAiBjB,IAAmBS,EAAOS,mBAAqBL,IAElElB,GAAWc,EAAOU,mBAAqBV,EAAOU,wBAAqBC,EACnEpB,GAAkBS,EAAOY,sBAAwBZ,EAAOY,2BAAwBD,EAChFX,EAAOvN,UACkB,QADT0N,EAChBH,EAAOa,0BAAkB,IAAAV,OAAA,EAAzBA,EAAAW,KAAAd,EAA4BtP,IAC5BgC,SAEDsN,EAAOe,aAAarQ,IArBhBsP,EAAOgB,GAsBF,OAKjB1B,EAAQ7L,KAAI,CAACO,EAAMiM,EAAOC,KAAU,IAAAe,EACnC,MAAMC,EAAoBjB,IAAUC,EAAM/P,OAAS,GAAKgP,EACxD,OACE5M,EAAAA,EAAAA,MAACkN,GAAAA,GAAQ,CAAeC,aAAa,EAAMhN,SAAA,EACzCC,EAAAA,EAAAA,KAACgN,GAAAA,GAAS,CACRC,YAAY,EACZC,MAAOC,GAAAA,GAAWC,KAClBtN,UAAWkC,IAAW,4CAA6C,CACjE,WAAYuM,EACZ,gBAAiBA,IAChBxO,SAEe,QAFfuO,EAEFjN,EAAKoL,oBAAY,IAAA6B,EAAAA,GAAItO,EAAAA,EAAAA,KAAA,QAAAD,SAAOsB,EAAKhB,UAEnCiM,aAAU,EAAVA,EAAajL,EAAKgN,IAAIvN,KAAI,CAAC0N,EAAWC,EAAQC,KAC7C,MAAMrB,EAAShB,EAAQoC,GACjBhB,EAAagB,IAAWC,EAASlR,OAAS,EAChD,OACEwC,EAAAA,EAAAA,KAACgN,GAAAA,GAAS,CAERE,MAAOsB,EAAUtB,MACjBD,YAAY,EACZnN,UAAWkC,IACTwM,EAAU1O,UACV,+BACA,CACE,WAAYyO,IAAsBlB,EAAOK,YACzC,WAAYL,EAAOM,cACnB,WAAYF,GAAcJ,EAAOO,eACjC,gBAAiBW,GAAqBlB,EAAOQ,iBAC7C,gBAAiBU,IAAsBlB,EAAOS,mBAAqBL,IAErEc,GAAqBlB,EAAOY,sBAAwBZ,EAAOY,2BAAwBD,EACnFX,EAAOsB,0BAAuBX,EAC9BX,EAAOuB,2BAAwBZ,GAC/BjO,SAEDyO,EAAUJ,aAAa/M,IAlBnBmN,EAAUH,GAmBL,MAnCHhN,EAAKgN,GAsCT,MAKrB,CCxGe,SAASQ,GAAkB3R,GAG+C,IAAvF,QAAEmP,EAAO,WAAEC,EAAU,KAAEvO,GAA8Db,EACrF,OACE0C,EAAAA,EAAAA,MAACkP,GAAAA,GAAK,CAAChP,UAAU,+CAA8CC,SAAA,EAC7DH,EAAAA,EAAAA,MAACmP,GAAAA,GAAS,CAAAhP,SAAA,EACRC,EAAAA,EAAAA,KAACgP,GAAAA,GAAW,CAAC9B,MAAOC,GAAAA,GAAWC,KAAMtN,UAAU,OAAMC,SAAC,gBAGrDsM,EAAQvL,KAAKuM,IACZrN,EAAAA,EAAAA,KAACgP,GAAAA,GAAW,CAAiB9B,MAAOG,EAAOH,MAAOpN,UAAWuN,EAAO4B,gBAAiBC,YAAY,EAAMnP,SACpGsN,EAAOtL,MADQsL,EAAOgB,SAK5BtQ,EAAK+C,KAAI,CAACqO,EAAK7B,KAAK,IAAA8B,EAAA,OACnBpP,EAAAA,EAAAA,KAACoM,GAAqB,CAEpBrO,KAAMoR,EACN9C,QAASA,EACTC,WAAYA,EACZC,QAAmB,IAAVe,EACTd,OAAQc,IAAUvP,EAAKP,OAAS,GALrB,QAKuB4R,EAL7BD,EAAId,UAAE,IAAAe,EAAAA,EAAID,EAAI9O,MAMnB,KAEJL,EAAAA,EAAAA,KAACqP,GAAAA,GAAW,CAAAtP,UACVC,EAAAA,EAAAA,KAACgN,GAAAA,GAAS,CAAClN,UAAU,oBAAoBwP,QAASjD,EAAQ7O,OAAS,EAAEuC,SAAC,sHAM9E,C,4BC3CA,SAASwP,GAAiBxO,GACxB,OAAKA,EAEMA,IAAU,GACZyO,GAAAA,EAAoBC,QAClB1O,IAAU,EACZyO,GAAAA,EAAoBE,UAClB3O,EAAQ,EACVyO,GAAAA,EAAoBG,SAClB5O,GAAS,GACXyO,GAAAA,EAAoBI,UAClB7O,GAAS,EACXyO,GAAAA,EAAoBK,YAEpBL,GAAAA,EAAoBM,WAZpBN,GAAAA,EAAoBO,OAc/B,CAOO,SAASC,GAAe9S,GAA0E,IAAzE,SAAE6C,EAAQ,UAAED,EAAS,MAAEiB,GAAgD7D,EACrG,OAAK+S,OAAOC,SAASnP,IAInBf,EAAAA,EAAAA,KAACmQ,GAAAA,EAAc,CAACrQ,UAAWA,EAAW+B,MAAO0N,GAAiBxO,GAAiBhB,SAC5EA,IAJI,IAOX,C,gBC3BA,MAAMqQ,GAAoD,CACxD,CAACC,EAAAA,EAAkBC,cAAe,UAClC,CAACD,EAAAA,EAAkBE,cAAe,UAClC,CAACF,EAAAA,EAAkBG,cAAe,SAClC,CAACH,EAAAA,EAAkBI,MAAO,OAC1B,CAACJ,EAAAA,EAAkBK,MAAO,OAC1B,CAACL,EAAAA,EAAkBM,KAAM,MACzB,CAACN,EAAAA,EAAkBO,OAAQ,QAC3B,CAACP,EAAAA,EAAkBQ,aAAc,SACjC,CAACR,EAAAA,EAAkBS,aAAc,UACjC,CAACT,EAAAA,EAAkBU,aAAc,UACjC,CAACV,EAAAA,EAAkBW,aAAc,UACjC,CAACX,EAAAA,EAAkBY,cAAe,WAG9BC,GAAuC,CAC3Cb,EAAAA,EAAkBC,aAClBD,EAAAA,EAAkBE,aAClBF,EAAAA,EAAkBG,cAEdW,GAAkC,CACtCd,EAAAA,EAAkBI,KAClBJ,EAAAA,EAAkBK,KAClBL,EAAAA,EAAkBM,IAClBN,EAAAA,EAAkBO,OAEdQ,GAAuC,CAC3Cf,EAAAA,EAAkBQ,YAClBR,EAAAA,EAAkBS,YAClBT,EAAAA,EAAkBU,aAEdM,GAAkC,CAAChB,EAAAA,EAAkBW,YAAaX,EAAAA,EAAkBY,cACpFK,GAAY,IAAIJ,MAAoBC,MAAeC,MAAoBC,IAEvEE,GAAmB,WACnBC,GAAc,qDACdC,GAAqB,+CACrBC,GAAmB,+CACnBC,GAAoB,+CACpBC,GAAkB,+CAElBC,GAAeP,GAAUQ,QAC7B,CAACC,EAAKC,EAAK7K,KACT4K,EAAIC,GAAO7K,EACJ4K,IAET,CAAC,GAGGE,GAAcC,IAClB,MAAMC,EAAkBnQ,IAAW,kBAAmB,CACpD,oBAAqBkQ,EACrB,mBAAoBA,IAGhBE,EAAcA,CAACrU,EAAgC0Q,KACnD,MAAM1N,EAAQhD,EAAKsU,QAAUtU,EAAKsU,OAAO5D,IAAW1Q,EAAKsU,OAAO5D,GAAQ1N,MACxE,OAAOf,EAAAA,EAAAA,KAAA,QAAMF,UAAU,eAAcC,SAAmB,iBAAVgB,GAAqBuR,EAAAA,EAAAA,IAAavR,GAAS,KAAW,EAGhGsL,EAA+C,IAChD6E,GAAgBpQ,KAAKyR,IAAI,CAC1BrF,MAAOC,GAAAA,GAAWqF,MAClB1S,UAAWkC,IAAWmQ,EAAiB,CAAE,WAAYI,IAASlC,EAAAA,EAAkBG,eAChF7C,cAAe4E,IAASlC,EAAAA,EAAkBC,aAC1C1C,eAAgB2E,IAASlC,EAAAA,EAAkBG,aAC3C1C,kBAAmByE,IAASlC,EAAAA,EAAkBG,aAC9CvB,gBAAiBkD,EACjB9D,GAAIkE,EACJxQ,KAAMqO,GAAYmC,GAClBnE,aAAerQ,GAAmCqU,EAAYrU,EAAM8T,GAAaU,QAEnF,CACEzS,UAAWqS,EACXlD,gBAAiBsC,GACjBlD,GAAI,aACJX,aAAa,EACb3L,KAAM,GACNqM,aAAcA,IAAM,MAEtB,CACElB,MAAOC,GAAAA,GAAWqF,MAClBvE,sBAAuBwD,GACvB3R,UAAWkC,IAAWmQ,EAAiB,WAAYT,IACnD/D,eAAe,EACfE,kBAAkB,EAClBoB,gBAAiBjN,IAAWmQ,EAAiBX,IAC7CnD,GAAIgC,EAAAA,EAAkBI,KACtB9B,oBAAqB+C,GACrB3P,KAAMqO,GAAYC,EAAAA,EAAkBI,MACpCrC,aAAerQ,GAAmCqU,EAAYrU,EAAM8T,GAAaxB,EAAAA,EAAkBI,OACnG1C,mBAAoB6D,IAEtB,CACE1E,MAAOC,GAAAA,GAAWqF,MAClBvE,sBAAuBwD,GACvB3R,UAAWqS,EACXlD,gBAAiBjN,IAAWmQ,EAAiBX,IAC7CnD,GAAIgC,EAAAA,EAAkBK,KACtB3O,KAAMqO,GAAYC,EAAAA,EAAkBK,MACpCtC,aAAerQ,GAAmCqU,EAAYrU,EAAM8T,GAAaxB,EAAAA,EAAkBK,OACnG3C,mBAAoB6D,IAEtB,CACE1E,MAAOC,GAAAA,GAAWqF,MAClBvE,sBAAuBwD,GACvB3R,UAAWqS,EACXlD,gBAAiBjN,IAAWmQ,EAAiBX,IAC7CnD,GAAIgC,EAAAA,EAAkBM,IACtB5O,KAAMqO,GAAYC,EAAAA,EAAkBM,KACpCvC,aAAerQ,GAAmCqU,EAAYrU,EAAM8T,GAAaxB,EAAAA,EAAkBM,MACnG5C,mBAAoB6D,IAEtB,CACE1E,MAAOC,GAAAA,GAAWqF,MAClBvE,sBAAuBwD,GACvB3R,UAAWkC,IAAWmQ,EAAiB,WAAYR,IACnD/D,gBAAgB,EAChBE,mBAAmB,EACnBmB,gBAAiBjN,IAAWmQ,EAAiBX,IAC7CnD,GAAIgC,EAAAA,EAAkBO,MACtB7O,KAAMqO,GAAYC,EAAAA,EAAkBO,OACpCxC,aAAerQ,GAAmCqU,EAAYrU,EAAM8T,GAAaxB,EAAAA,EAAkBO,QACnGhC,qBAAsB+C,GACtB5D,mBAAoB6D,IAEtB,CACE9R,UAAWqS,EACXlD,gBAAiBsC,GACjBlD,GAAI,aACJX,aAAa,EACb3L,KAAM,GACNqM,aAAcA,IAAM,SAEnBgD,GAAgBtQ,KAAKyR,IAAI,CAC1BrF,MAAOC,GAAAA,GAAWqF,MAClB1S,UAAWkC,IAAWmQ,EAAiB,CAAE,WAAYI,IAASlC,EAAAA,EAAkBQ,cAChFlD,cAAe4E,IAASlC,EAAAA,EAAkBQ,YAC1ChD,iBAAkB0E,IAASlC,EAAAA,EAAkBQ,YAC7C5B,gBAAiBkD,EACjB9D,GAAIkE,EACJxQ,KAAMqO,GAAYmC,GAClBnE,aAAerQ,GAAmCqU,EAAYrU,EAAM8T,GAAaU,WAEhFlB,GAAWvQ,KAAKyR,IAAI,CACrBrF,MAAOC,GAAAA,GAAWqF,MAClB1S,UAAWqS,EACXxE,cAAe4E,IAASlC,EAAAA,EAAkBW,YAC1C/B,gBAAiBkD,EACjB9D,GAAIkE,EACJxQ,KAAMqO,GAAYmC,GAClBnE,aAAerQ,GAAmCqU,EAAYrU,EAAM8T,GAAaU,SAI/EjG,EAAqD,CACzD,CAACmG,GAAAA,EAAsBC,WAAYrG,EAAQvL,KAAKuM,IAAM,CACpDgB,GAAIhB,EAAOgB,GACXtM,KAAMsL,EAAOtL,KACbmL,MAAOC,GAAAA,GAAWqF,MAClB1S,UAAWqS,EACX/D,aAAerQ,IACb,GAAIsP,EAAOK,YACT,OAAO,KAET,MAAMe,EAASoD,GAAaxE,EAAOgB,IAC7BtN,EAAQhD,EAAKsU,QAAUtU,EAAKsU,OAAO5D,IAAW1Q,EAAKsU,OAAO5D,GAAQ1N,MACxE,MAAqB,iBAAVA,GACFf,EAAAA,EAAAA,KAAA,QAAAD,SAAM,MAEXoR,GAAWrI,SAASuE,EAAOgB,KAE3BrO,EAAAA,EAAAA,KAACgQ,GAAe,CAACjP,MAAOA,EAAMhB,UAAEuS,EAAAA,EAAAA,IAAavR,EAAO,CAAE4R,cAAc,EAAMC,OAAQ,SAIpF5S,EAAAA,EAAAA,KAAC6S,GAAAA,EAAY,CAAC9R,MAAOA,EAAO+R,aAAc,KAAK/S,UAC5CuS,EAAAA,EAAAA,IAAavR,EAAO,CAAE4R,cAAc,EAAMC,OAAQ,OACtC,MAIrB,CAACH,GAAAA,EAAsBM,cAAe1G,EAAQvL,KAAKuM,IAAM,CACvDgB,GAAIhB,EAAOgB,GACXtM,KAAMsL,EAAOtL,KACbmL,MAAOC,GAAAA,GAAWqF,MAClB1S,UAAWqS,EACX/D,aAAerQ,IACb,GAAIsP,EAAOK,YACT,OAAO,KAET,MAAMe,EAASoD,GAAaxE,EAAOgB,IAC7BtN,EAAQhD,EAAKsU,QAAUtU,EAAKsU,OAAO5D,IAAW1Q,EAAKsU,OAAO5D,GAAQ1N,MACxE,MAAqB,iBAAVA,GACFf,EAAAA,EAAAA,KAAA,QAAMF,UAAU,WAAUC,SAAC,OAGlCC,EAAAA,EAAAA,KAAC6S,GAAAA,EAAY,CAAC9R,MAAOA,EAAO+R,aAAc,KAAMhT,UAAU,WAAUC,UACjEuS,EAAAA,EAAAA,IAAavR,EAAO,CAAE4R,cAAc,EAAMC,OAAQ,OACtC,OAMvB,MAAO,CAAEvG,UAASC,aAAY,EC3MjB,SAAS0G,GAAa9V,GAA+B,IAA9B,kBAAE+V,GAA0B/V,EAChE,MAAM,QAAEmP,EAAO,WAAEC,ID6MqB4F,GC7MkB,ED8MjDtU,EAAAA,SAAc,IAAMqU,GAAWC,IAAY,CAACA,KAD9C,IAAiCA,EC3MtC,MAAMnU,GAAO8K,EAAAA,EAAAA,UAAQ,KAAMqK,EAAAA,EAAAA,IAAqBD,IAAoB,CAACA,IAErE,OACErT,EAAAA,EAAAA,MAAA,OAAKE,UAAU,uBAAsBC,SAAA,EACnCC,EAAAA,EAAAA,KAAA,OAAKF,UAAU,qBAAoBC,UACjCC,EAAAA,EAAAA,KAACmT,GAAAA,EAAY,CAAC9S,MAAM,0CAEtBL,EAAAA,EAAAA,KAAC6O,GAAkB,CAACxC,QAASA,EAAStO,KAAMA,EAAMuO,WAAYA,MAGpE,CCZe,SAAS8G,GAAqBlW,GAAmE,IAAlE,kBAAEmW,EAAiB,oBAAE5V,EAAmB,cAAE6V,GAAsBpW,EAC5G,MAAM,SAAEkL,EAAQ,YAAEC,IAAgBC,EAAAA,EAAAA,MAE5BqB,EAAgBA,CAACC,EAA6B7I,KAClDsH,EAAY,IACPD,EACH,CAACwB,GAAM7I,GACP,EAGEwS,EAAiB3V,EAAAA,SAAc,IACNyV,IAAsBG,EAAAA,GAAsBC,UAGhEhW,EAAsB,aAAe,aAGvC,cACN,CAACA,EAAqB4V,IAEzB,OACEzT,EAAAA,EAAAA,MAAA,OAAKE,UAAU,0BAAyBC,SAAA,EACtCH,EAAAA,EAAAA,MAACiK,EAAAA,EAAU,CAAC3I,KAAK,QAAQb,MAAM,OAAMN,SAAA,EACnCC,EAAAA,EAAAA,KAAC8J,EAAAA,EAAgB,CACfC,OAAQ3B,EAASsL,EAAAA,GAAiBC,WAClCzJ,QAASA,KACPP,EAAc+J,EAAAA,GAAiBC,WAAYvL,EAASsL,EAAAA,GAAiBC,WAAW,EAChF5T,SAEDwT,KAEHvT,EAAAA,EAAAA,KAAC8J,EAAAA,EAAgB,CACfC,OAAQ3B,EAASsL,EAAAA,GAAiBE,cAClC1J,QAASA,KACPP,EAAc+J,EAAAA,GAAiBE,cAAexL,EAASsL,EAAAA,GAAiBE,cAAc,EACtF7T,SAED,GAAGwT,WAIPD,IACC1T,EAAAA,EAAAA,MAACiK,EAAAA,EAAU,CAAC3I,KAAK,QAAQb,MAAM,YAAWN,SAAA,EACxCC,EAAAA,EAAAA,KAAC8J,EAAAA,EAAgB,CACfC,OAAQsJ,IAAsBG,EAAAA,GAAsBK,OACpD3J,QAASA,KACPP,EAAc,oBAAqB6J,EAAAA,GAAsBK,OAAO,EAChE9T,SACH,YAGDC,EAAAA,EAAAA,KAAC8J,EAAAA,EAAgB,CACfC,OAAQsJ,IAAsBG,EAAAA,GAAsBC,UACpDvJ,QAASA,KACPP,EAAc,oBAAqB6J,EAAAA,GAAsBC,UAAU,EACnE1T,SAEDtC,EAAsB,aAAe,mBAMlD,CCvDA,SAASqW,KAAoB,IAAAC,EAAAC,EAAAC,EAC3B,MAAQlW,KAAMmW,IAAYC,EAAAA,EAAAA,OACpB,SAAE/L,IAAaE,EAAAA,EAAAA,MACf7K,GAAsBC,EAAAA,EAAAA,IAA4C,QAAtBqW,EAACG,aAAO,EAAPA,EAAS7W,oBAAY,IAAA0W,EAAAA,EAAI,IACtEhW,EAAOH,EAAAA,SAAc,KAAM,IAAAwW,EAAAC,EAAAC,EAAAC,EAC/B,GAAgB,OAAZL,EAAkB,OAAO,KAE7B,MAAMM,EAASA,CAACC,EAAYC,KAC1B,MAAQC,KAAMC,EAAOC,OAAQC,IAAYC,EAAAA,EAAAA,IAAoBN,EAAElV,aAAc9B,IACrEkX,KAAMK,EAAOH,OAAQI,IAAYF,EAAAA,EAAAA,IAAoBL,EAAEnV,aAAc9B,GAE7E,MAAI,CAACmX,EAAOI,EAAOF,EAASG,GAASnM,SAAS,MACrC,EAGL8L,IAAUI,EACLF,EAAWG,EAGbL,EAASI,CAAM,EAGlB3X,EAAe,IAA0B,QAAzB+W,EAAIF,aAAO,EAAPA,EAAS7W,oBAAY,IAAA+W,EAAAA,EAAI,IAAKc,KAAKV,GACvDlX,EAAqB,IAAgC,QAA/B+W,EAAIH,aAAO,EAAPA,EAAS5W,0BAAkB,IAAA+W,EAAAA,EAAI,IAAKa,KAAKV,GAEnEW,GAAiD,QAA/Bb,EAACJ,aAAO,EAAPA,EAASkB,6BAAqB,IAAAd,EAAAA,EAAI,IAAIxC,QAC7D,CAACC,EAAKpP,KACJ,MAAM0S,EAAY1S,EAASpD,aAAawJ,SAASC,EAAAA,IAAoB,QAAU,WACzEnI,EAAgBkR,EAAIpP,EAASlB,cAAc4T,GACjD,IAAIC,EAAazU,EAAc8B,EAASpD,cAMxC,OALK+V,IACHA,EAAa,GACbzU,EAAc8B,EAASpD,cAAgB+V,GAEzCA,EAAWpM,KAAK,IAAKvG,EAAUpE,KAAM4B,EAAAA,EAAiBwC,EAAS4S,gBACxDxD,CAAG,GAEZ,CACE,CAAC/H,EAAAA,GAAqBtL,KAAM,CAAEiK,SAAU,CAAC,EAAGH,MAAO,CAAC,GACpD,CAACwB,EAAAA,GAAqBG,SAAU,CAAExB,SAAU,CAAC,EAAGH,MAAO,CAAC,GACxD,CAACwB,EAAAA,GAAqBI,OAAQ,CAAEzB,SAAU,CAAC,EAAGH,MAAO,CAAC,KAI1D,MAAO,IACF0L,EACH7W,eACAC,qBACAwK,aAAgBoM,SAA8B,QAAvBK,EAAPL,EAASkB,6BAAqB,IAAAb,GAA9BA,EAAgC/W,OAAS2X,EAAkB,KAC5E,GACA,CAACjB,EAASzW,KAEb+X,EAAAA,EAAAA,GAAwC,CACtCC,oBAAqB,CAAC,EAAG,EAAG,GAC5BC,SAAU,CAAChC,EAAAA,GAAiBC,UAAWD,EAAAA,GAAiBE,gBAG1D,MAAM+B,IAAqB5X,SAAkB,QAAdiW,EAAJjW,EAAMV,oBAAY,IAAA2W,IAAlBA,EAAoBxW,QACzCoY,IAAkB7X,SAAwB,QAApBkW,EAAJlW,EAAMT,0BAAkB,IAAA2W,IAAxBA,EAA0BzW,QAC5C0N,IAAYnN,IAAS6X,GAAiBD,GACtCE,EAAY3K,GACd4K,EAAAA,EAAAA,IAAsB/X,aAAI,EAAJA,EAAMV,aAAcU,aAAI,EAAJA,EAAMT,mBAAoB8K,EAASiL,mBAC7EG,EAAAA,GAAsBC,UAE1B,OACE7T,EAAAA,EAAAA,MAAAmW,EAAAA,SAAA,CAAAhW,SAAA,EACEC,EAAAA,EAAAA,KAACgW,EAAAA,EAAkB,CACjBC,aAAajW,EAAAA,EAAAA,KAACkW,EAAAA,EAAsB,IACpCpD,aACE5H,GACElL,EAAAA,EAAAA,KAACoT,GAAqB,CACpB3V,oBAAqBA,EACrB6V,cAAeqC,GAAoBC,EACnCvC,kBAAmBwC,SAEnB7H,IAIP9C,GACCtL,EAAAA,EAAAA,MAAA,OAAKE,UAAU,oBAAmBC,SAAA,EAChCC,EAAAA,EAAAA,KAAC/C,EAAc,CACbG,aAAcW,EAAKX,aACnBC,aAAcU,EAAKV,aACnBC,mBAAoBS,EAAKT,sBAG3BsC,EAAAA,EAAAA,MAAA,OAAKE,UAAU,aAAYC,SAAA,CACxB,CAACoW,EAAAA,GAAuBC,IAAKD,EAAAA,GAAuBE,QAASF,EAAAA,GAAuBG,SAASxV,KAC3FyV,IACCvW,EAAAA,EAAAA,KAACwW,EAAAA,EAAc,CAEbzY,KAAMA,EACNwY,uBAAwBA,EACxBtD,kBAAmBlV,aAAI,EAAJA,EAAMkV,kBACzB7K,SAAUA,GAJLmO,KASVZ,IACC/V,EAAAA,EAAAA,MAAAmW,EAAAA,SAAA,CAAAhW,SAAA,EACGhC,aAAI,EAAJA,EAAMkV,kBAAkBzV,QAAS,IAAKwC,EAAAA,EAAAA,KAACgT,GAAa,CAACC,kBAAmBlV,aAAI,EAAJA,EAAMkV,qBAC/EjT,EAAAA,EAAAA,KAAC2L,GAAa,CAACtO,aAAcU,aAAI,EAAJA,EAAMV,mBAGvC2C,EAAAA,EAAAA,KAACqL,EAAiB,CAACvD,aAAc/J,aAAI,EAAJA,EAAM+J,sBAI3C9H,EAAAA,EAAAA,KAAA,OAAKF,UAAU,gEAA+DC,SAAC,iDAMvF,CAEe,SAAS0W,KACtB,OACEzW,EAAAA,EAAAA,KAAC0W,EAAAA,GAA8B,CAACC,gBAAiBC,EAAAA,GAAkBC,UAAWC,EAAAA,GAAoB/W,UAChGC,EAAAA,EAAAA,KAAC8T,GAAiB,KAGxB,C","sources":["webpack://@finviz/website/./js/main/modules/earnings/EarningsHeader.tsx","webpack://@finviz/website/./js/main/modules/earnings/FiscalPeriodSelector.tsx","webpack://@finviz/website/./js/main/modules/earnings/charts/PriceRevisionTooltip.tsx","webpack://@finviz/website/./js/main/modules/earnings/charts/PriceRevisionsChart.tsx","webpack://@finviz/website/./js/main/modules/earnings/charts/UpDownRevisionsChart.tsx","webpack://@finviz/website/./js/main/modules/earnings/EstimateRevisions.tsx","webpack://@finviz/website/./js/main/modules/earnings/EstimateTypeChipSwitch.tsx","webpack://@finviz/website/./js/main/modules/earnings/LatestRevision.tsx","webpack://@finviz/website/./js/main/modules/earnings/LatestRevisions.tsx","webpack://@finviz/website/./js/main/modules/earnings/EarningsRevisions.tsx","webpack://@finviz/website/./js/main/modules/earnings/EstimateBeat.tsx","webpack://@finviz/website/./js/main/modules/earnings/EstimateBeats.tsx","webpack://@finviz/website/./js/main/modules/earnings/PriceReactionTableRow.tsx","webpack://@finviz/website/./js/main/modules/earnings/PriceReactionTable.tsx","webpack://@finviz/website/./js/main/modules/earnings/OhlcPriceChange.tsx","webpack://@finviz/website/./js/main/modules/earnings/usePriceReactionColumns.tsx","webpack://@finviz/website/./js/main/modules/earnings/PriceReaction.tsx","webpack://@finviz/website/./js/main/modules/earnings/WidgetSettingsSection.tsx","webpack://@finviz/website/./js/main/modules/earnings/index.tsx"],"sourcesContent":["import * as dateFns from 'date-fns'\r\nimport { addMonths, parseISO } from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { getDate } from '../../../app/header/utils'\r\nimport { KeyStat } from '../../components/keystats/KeyStat'\r\nimport { KeyStats } from '../../components/keystats/KeyStats'\r\nimport { getEarningsDateSuffix, shortFormatDollar } from '../../util'\r\nimport { EARNINGS_DATE_FORMAT } from './constants'\r\nimport { EarningsData } from './types'\r\nimport { getFormattedPeriodValue, getIsEarningEstimate, getIsSemiAnnualEarning } from './utils'\r\n\r\nfunction getMonths(isAnnualEarning: boolean, isSemiAnnualEarning: boolean) {\r\n if (isAnnualEarning) return 12\r\n if (isSemiAnnualEarning) return 6\r\n return 3\r\n}\r\n\r\ntype WidgetHeaderProps = Pick\r\n\r\nexport default function EarningsHeader({ earningsDate, earningsData, earningsAnnualData }: WidgetHeaderProps) {\r\n const isAnnualEarning = !earningsData.length\r\n const isSemiAnnualEarning = getIsSemiAnnualEarning(earningsData)\r\n const nextReportInfo = React.useMemo(() => {\r\n const data = isAnnualEarning ? earningsAnnualData : earningsData\r\n const parsedEarningsDate = earningsDate ? parseISO(earningsDate) : null\r\n const firstEstimateEarningIndex = data.findIndex(getIsEarningEstimate)\r\n const firstEstimateEarning = data[firstEstimateEarningIndex] ?? null\r\n const lastEarning = data[firstEstimateEarningIndex - 1] ?? null\r\n\r\n if (lastEarning === null || firstEstimateEarning === null) {\r\n return {\r\n date: null,\r\n nextPeriod: null,\r\n dateSuffix: '',\r\n eps: null,\r\n gaapEps: null,\r\n revenue: null,\r\n }\r\n }\r\n\r\n const lastEarningDate = lastEarning.earningsDate\r\n const shouldShowEstimatedNextEarningsDate = !(\r\n parsedEarningsDate && getDate(parsedEarningsDate).getTime() >= Date.now()\r\n )\r\n const estimatedEarningsDate = lastEarningDate\r\n ? addMonths(parseISO(lastEarningDate), getMonths(isAnnualEarning, isSemiAnnualEarning))\r\n : null\r\n\r\n return {\r\n date: shouldShowEstimatedNextEarningsDate ? estimatedEarningsDate : parsedEarningsDate,\r\n nextPeriod: getFormattedPeriodValue(firstEstimateEarning.fiscalPeriod, isAnnualEarning, isSemiAnnualEarning),\r\n dateSuffix:\r\n shouldShowEstimatedNextEarningsDate && estimatedEarningsDate\r\n ? '(Est)'\r\n : getEarningsDateSuffix(parsedEarningsDate),\r\n eps: firstEstimateEarning?.epsEstimate,\r\n gaapEps: firstEstimateEarning.epsReportedEstimate,\r\n revenue: firstEstimateEarning?.salesEstimate,\r\n }\r\n }, [earningsDate, earningsData, earningsAnnualData, isAnnualEarning, isSemiAnnualEarning])\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Select } from '../../components'\r\nimport { formatFiscalName } from './utils'\r\n\r\ninterface Props {\r\n selected: string\r\n fiscalPeriods: string[]\r\n onSelect: (fiscalPeriod: string) => void\r\n}\r\n\r\nexport function FiscalPeriodSelector(props: Props) {\r\n const [selected, setSelected] = React.useState(props.selected)\r\n\r\n React.useEffect(() => {\r\n setSelected(props.selected)\r\n }, [props.selected])\r\n\r\n const fiscalPeriods = React.useMemo(\r\n () =>\r\n props.fiscalPeriods.map((fiscalPeriod) => ({\r\n value: fiscalPeriod,\r\n label: formatFiscalName(fiscalPeriod),\r\n })),\r\n [props.fiscalPeriods]\r\n )\r\n\r\n return (\r\n {\r\n setSelected(item.value)\r\n props.onSelect(item.value)\r\n }}\r\n isLoading={false}\r\n />\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport * as dateFns from 'date-fns'\r\nimport React, { PropsWithChildren } from 'react'\r\n\r\nimport { Icon } from '../../../components'\r\nimport { formatDollar, shortFormatDollar } from '../../../util'\r\nimport { EarningsEstimateType } from '../../earnings-common/types'\r\nimport { EARNINGS_DATE_FORMAT, EarningsColor, EarningsEstimateTypeLabels } from '../constants'\r\nimport { EarningRevisionWithDate } from '../types'\r\nimport { formatFiscalName, getEarningsColor } from '../utils'\r\n\r\nfunction formatEstimateLabel(estimateType: EarningsEstimateType, fiscalPeriod: string) {\r\n return `${formatFiscalName(fiscalPeriod)} ${EarningsEstimateTypeLabels[estimateType]} Estimate`\r\n}\r\n\r\nenum TooltipIcon {\r\n dot = 'dot',\r\n downArrow = 'downArrow',\r\n upArrow = 'upArrow',\r\n}\r\n\r\ntype TooltipRowProps = {\r\n color: string\r\n icon: TooltipIcon\r\n name: string\r\n}\r\n\r\nfunction TooltipRow({ color, icon, name, children }: PropsWithChildren) {\r\n return (\r\n
\r\n
\r\n \r\n {icon === TooltipIcon.upArrow && (\r\n \r\n )}\r\n {icon === TooltipIcon.downArrow && (\r\n \r\n )}\r\n {icon === TooltipIcon.dot && (\r\n \r\n )}\r\n {name}\r\n \r\n {children}\r\n
\r\n
\r\n )\r\n}\r\n\r\ntype Props = {\r\n estimateType: EarningsEstimateType\r\n isActive: boolean\r\n revision: EarningRevisionWithDate | undefined\r\n}\r\n\r\nexport function PriceRevisionTooltip({ estimateType, isActive, revision }: Props) {\r\n if (!estimateType || !isActive || !revision) return null\r\n\r\n return (\r\n
\r\n
\r\n {revision.date && dateFns.format(revision.date, EARNINGS_DATE_FORMAT)}\r\n
\r\n \r\n {shortFormatDollar(revision.mean)} ({shortFormatDollar(revision.low)}–{shortFormatDollar(revision.high)})\r\n \r\n \r\n {formatDollar(revision.price)}\r\n \r\n \r\n {revision.upRevisions}/{revision.estimates}\r\n \r\n \r\n {revision.downRevisions}/{revision.estimates}\r\n \r\n
\r\n )\r\n}\r\n","import React from 'react'\r\nimport { Area, ComposedChart, Line, ResponsiveContainer, Tooltip } from 'recharts'\r\n\r\nimport { CartesianGrid } from '../../../components/chart/CartesianGrid'\r\nimport { XAxis } from '../../../components/chart/XAxis'\r\nimport { YAxis } from '../../../components/chart/YAxis'\r\nimport { formatMonth, shortFormatNumber } from '../../../util'\r\nimport { EarningsEstimateType } from '../../earnings-common/types'\r\nimport { getMonthlyTicks } from '../../earnings-common/utils'\r\nimport {\r\n EarningsColor,\r\n PRICE_REVISIONS_CHART_HEIGHT,\r\n PRICE_REVISIONS_TICK_COUNT,\r\n PRICE_REVISIONS_YAXIS_WIDTH,\r\n} from '../constants'\r\nimport { RevisionsChartData } from '../types'\r\nimport { getEarningsColor } from '../utils'\r\nimport { PriceRevisionTooltip } from './PriceRevisionTooltip'\r\n\r\ntype Props = {\r\n activeIndex: number\r\n chartData: RevisionsChartData\r\n endingTimestamp: number\r\n estimateType: EarningsEstimateType\r\n isActive: boolean\r\n onSetActiveIndex: (value: number) => void\r\n onSetIsActive: (value: boolean) => void\r\n startingTimestamp: number\r\n}\r\n\r\nexport function PriceRevisionsChart({\r\n activeIndex,\r\n chartData,\r\n endingTimestamp,\r\n estimateType,\r\n isActive,\r\n onSetActiveIndex,\r\n onSetIsActive,\r\n startingTimestamp,\r\n}: Props) {\r\n const monthlyTicks = React.useMemo(\r\n () => getMonthlyTicks(startingTimestamp, endingTimestamp),\r\n [startingTimestamp, endingTimestamp]\r\n )\r\n\r\n return (\r\n
\r\n {\r\n onSetIsActive(true)\r\n }}\r\n onMouseLeave={() => {\r\n onSetIsActive(false)\r\n }}\r\n >\r\n \r\n {\r\n if (typeof props.activeTooltipIndex === 'number' && props.activeTooltipIndex !== activeIndex) {\r\n onSetActiveIndex(props.activeTooltipIndex)\r\n }\r\n }}\r\n onMouseLeave={() => {\r\n onSetActiveIndex(-1)\r\n }}\r\n >\r\n \r\n formatMonth(value)}\r\n ticks={monthlyTicks}\r\n type=\"number\"\r\n />\r\n shortFormatNumber(value)}\r\n width={PRICE_REVISIONS_YAXIS_WIDTH}\r\n yAxisId=\"estimate\"\r\n />\r\n \r\n \r\n \r\n \r\n (\r\n \r\n )}\r\n cursor={isActive ? { stroke: getEarningsColor(EarningsColor.cursor) } : false}\r\n isAnimationActive={false}\r\n />\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n","import React from 'react'\r\nimport { Bar, ComposedChart, ResponsiveContainer, Tooltip } from 'recharts'\r\n\r\nimport { CartesianGrid } from '../../../components/chart/CartesianGrid'\r\nimport { XAxis } from '../../../components/chart/XAxis'\r\nimport { YAxis } from '../../../components/chart/YAxis'\r\nimport {\r\n EarningsColor,\r\n PRICE_REVISIONS_YAXIS_WIDTH,\r\n UPDOWN_REVISIONS_CHART_HEIGHT,\r\n UPDOWN_REVISIONS_TICK_COUNT,\r\n} from '../constants'\r\nimport { RevisionsChartData } from '../types'\r\nimport { getEarningsColor } from '../utils'\r\n\r\nfunction absIntFormat(value: number): string {\r\n return Math.abs(value).toFixed()\r\n}\r\n\r\ntype Props = {\r\n activeIndex: number\r\n chartData: RevisionsChartData\r\n endingTimestamp: number\r\n isActive: boolean\r\n onSetActiveIndex: (value: number) => void\r\n onSetIsActive: (value: boolean) => void\r\n startingTimestamp: number\r\n}\r\n\r\nexport function UpDownRevisionsChart({\r\n activeIndex,\r\n chartData,\r\n endingTimestamp,\r\n isActive,\r\n onSetActiveIndex,\r\n onSetIsActive,\r\n startingTimestamp,\r\n}: Props) {\r\n return (\r\n
\r\n {\r\n onSetIsActive(true)\r\n }}\r\n onMouseLeave={() => {\r\n onSetIsActive(false)\r\n }}\r\n >\r\n \r\n {\r\n if (typeof props.activeTooltipIndex === 'number' && props.activeTooltipIndex !== activeIndex) {\r\n onSetActiveIndex(props.activeTooltipIndex)\r\n }\r\n }}\r\n onMouseLeave={() => {\r\n onSetActiveIndex(-1)\r\n }}\r\n >\r\n \r\n \r\n \r\n idx > 0 && idx < UPDOWN_REVISIONS_TICK_COUNT - 1 ? absIntFormat(value) : ''\r\n }\r\n type=\"number\"\r\n width={PRICE_REVISIONS_YAXIS_WIDTH}\r\n interval={0}\r\n />\r\n \r\n \r\n null}\r\n cursor={isActive ? { stroke: getEarningsColor(EarningsColor.cursor) } : false}\r\n isAnimationActive={false}\r\n />\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n","import React, { useMemo } from 'react'\r\n\r\nimport { Heading, Paragraph } from '../../components'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { EarningsEstimateType } from '../earnings-common/types'\r\nimport { FiscalPeriodSelector } from './FiscalPeriodSelector'\r\nimport { PriceRevisionsChart } from './charts/PriceRevisionsChart'\r\nimport { UpDownRevisionsChart } from './charts/UpDownRevisionsChart'\r\nimport { FISCAL_YEAR_MARK } from './constants'\r\nimport { EarningsRevisionsByType, EarningsSettings, RevisionsChartData } from './types'\r\nimport { adjustEstimate } from './utils'\r\n\r\nfunction getDefaultFiscalPeriod(revisionData: EarningsRevisionsByType, estimateType: EarningsEstimateType) {\r\n const years = Object.keys(revisionData[estimateType].years)\r\n if (years.length > 0) {\r\n return years[years.length - 1]\r\n }\r\n const quarters = Object.keys(revisionData[estimateType].quarters)\r\n return quarters[quarters.length - 1]\r\n}\r\n\r\ninterface Props {\r\n revisionData: EarningsRevisionsByType\r\n}\r\n\r\nexport default function EstimateRevisions({ revisionData }: Props) {\r\n const [priceRevisionIsActive, setPriceRevisionIsActive] = React.useState(false)\r\n const [upDownRevisionIsActive, setUpDownRevisionIsActive] = React.useState(false)\r\n const [activeIndex, setActiveIndex] = React.useState(-1)\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const estimateType = settings.estimateType\r\n const prepFiscalPeriod = settings.fiscalPeriod\r\n ? settings.fiscalPeriod\r\n : getDefaultFiscalPeriod(revisionData, estimateType)\r\n\r\n const data = useMemo(() => {\r\n const chartData: RevisionsChartData = []\r\n const years = Object.keys(revisionData[estimateType].years)\r\n const quarters = Object.keys(revisionData[estimateType].quarters)\r\n const fiscalPeriods = [...years, ...quarters]\r\n let fiscalPeriod = prepFiscalPeriod\r\n if (fiscalPeriod && !fiscalPeriods.includes(fiscalPeriod)) {\r\n fiscalPeriod = fiscalPeriod.endsWith(FISCAL_YEAR_MARK) ? years[years.length - 1] : quarters[quarters.length - 1]\r\n }\r\n if (!fiscalPeriod) {\r\n fiscalPeriod = years.length > 0 ? years[years.length - 1] : quarters[quarters.length - 1]\r\n }\r\n\r\n if (fiscalPeriod) {\r\n const revisions = fiscalPeriod.endsWith(FISCAL_YEAR_MARK)\r\n ? revisionData[estimateType].years[fiscalPeriod]\r\n : revisionData[estimateType].quarters[fiscalPeriod]\r\n for (const revision of revisions) {\r\n chartData.push({\r\n ...revision,\r\n high: adjustEstimate(revision.high, estimateType),\r\n low: adjustEstimate(revision.low, estimateType),\r\n lowHigh: [adjustEstimate(revision.low, estimateType), adjustEstimate(revision.high, estimateType)],\r\n mean: adjustEstimate(revision.mean, estimateType),\r\n negDownRevisions: -revision.downRevisions,\r\n timestamp: revision.date.getTime(),\r\n })\r\n }\r\n }\r\n\r\n const startingTimestamp = chartData.length ? chartData[0].timestamp : 0\r\n const endingTimestamp = chartData.length ? chartData[chartData.length - 1].timestamp : 0\r\n\r\n return {\r\n chartData,\r\n endingTimestamp,\r\n fiscalPeriod,\r\n fiscalPeriods,\r\n startingTimestamp,\r\n }\r\n }, [estimateType, prepFiscalPeriod, revisionData])\r\n\r\n if (data.chartData.length === 0) {\r\n return null\r\n }\r\n\r\n const isActive = priceRevisionIsActive || upDownRevisionIsActive\r\n\r\n return (\r\n
\r\n
\r\n \r\n Estimate Revisions\r\n \r\n
\r\n \r\n Period\r\n \r\n
\r\n setSettings({ ...settings, fiscalPeriod: selected })}\r\n />\r\n
\r\n
\r\n \r\n \r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { ChipSwitch, ChipSwitchButton } from '../../components/ChipSwitch'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { EarningsEstimateType } from '../earnings-common/types'\r\nimport { EarningsSettings } from './types'\r\n\r\ntype Props = {\r\n hasDataByType: { [K in EarningsEstimateType]: boolean }\r\n label?: string\r\n}\r\n\r\nexport function EstimateTypeChipSwitch({ hasDataByType, label }: Props) {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const toggleSetting = (key: keyof EarningsSettings, value: EarningsSettings[keyof EarningsSettings]) => {\r\n setSettings({\r\n ...settings,\r\n [key]: value,\r\n })\r\n }\r\n\r\n const estimateType = settings.estimateType\r\n\r\n return (\r\n \r\n toggleSetting('estimateType', EarningsEstimateType.eps)}\r\n >\r\n EPS\r\n \r\n toggleSetting('estimateType', EarningsEstimateType.epsGaap)}\r\n >\r\n GAAP EPS\r\n \r\n toggleSetting('estimateType', EarningsEstimateType.sales)}\r\n >\r\n Sales\r\n \r\n \r\n )\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { shortFormatNumber } from '../../util'\r\nimport { EARNINGS_DATE_FORMAT } from './constants'\r\n\r\ninterface Props {\r\n downRevisions: number\r\n estimate: number\r\n label: string\r\n revisionDate: Date\r\n revisions: number\r\n upRevisions: number\r\n}\r\n\r\nexport default function LatestRevision({\r\n downRevisions,\r\n estimate,\r\n label,\r\n revisionDate,\r\n revisions,\r\n upRevisions,\r\n}: Props) {\r\n return (\r\n
\r\n
{label}
\r\n
Estimate
\r\n
{shortFormatNumber(estimate)}
\r\n
Up Revisions
\r\n
\r\n {upRevisions}/{revisions}\r\n
\r\n
Down Revisions
\r\n
\r\n {downRevisions}/{revisions}\r\n
\r\n
Revision Date
\r\n
{dateFns.format(revisionDate, EARNINGS_DATE_FORMAT)}
\r\n
\r\n )\r\n}\r\n","import React, { useMemo } from 'react'\r\n\r\nimport { Heading } from '../../components'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { EarningsEstimateType } from '../earnings-common/types'\r\nimport { EstimateTypeChipSwitch } from './EstimateTypeChipSwitch'\r\nimport LatestRevision from './LatestRevision'\r\nimport { EarningsEstimateTypeLabels } from './constants'\r\nimport { EarningRevisionWithDate, EarningsRevisionsByType, EarningsSettings } from './types'\r\nimport { adjustEstimate, formatQuarterName, formatYearName } from './utils'\r\n\r\nfunction getLatestRevision(revisions: EarningRevisionWithDate[]): EarningRevisionWithDate | null {\r\n return revisions && revisions.length > 0 ? revisions[revisions.length - 1] : null\r\n}\r\n\r\nfunction hasRevisionData(revisionData: EarningsRevisionsByType, estimateType: EarningsEstimateType): boolean {\r\n return !!(\r\n Object.keys(revisionData[estimateType].quarters).length || Object.keys(revisionData[estimateType].years).length\r\n )\r\n}\r\n\r\ninterface Props {\r\n revisionData: EarningsRevisionsByType\r\n}\r\n\r\nexport default function LatestRevisions({ revisionData }: Props) {\r\n const { settings } = useFinancialsTableContext()\r\n\r\n const estimateType = settings.estimateType\r\n\r\n const data = useMemo(() => {\r\n const quarters = Object.keys(revisionData[estimateType].quarters)\r\n const years = Object.keys(revisionData[estimateType].years)\r\n const lastQuarterKey = quarters[quarters.length - 1]\r\n const semilastQuarterKey = quarters[quarters.length - 2]\r\n const lastYearKey = years[years.length - 1]\r\n const semilastYearKey = years[years.length - 2]\r\n const hasDataByType = {\r\n [EarningsEstimateType.eps]: hasRevisionData(revisionData, EarningsEstimateType.eps),\r\n [EarningsEstimateType.epsGaap]: hasRevisionData(revisionData, EarningsEstimateType.epsGaap),\r\n [EarningsEstimateType.sales]: hasRevisionData(revisionData, EarningsEstimateType.sales),\r\n }\r\n return {\r\n lastQuarter: getLatestRevision(revisionData[estimateType].quarters[lastQuarterKey]),\r\n semilastQuarter: getLatestRevision(revisionData[estimateType].quarters[semilastQuarterKey]),\r\n lastYear: getLatestRevision(revisionData[estimateType].years[lastYearKey]),\r\n semilastYear: getLatestRevision(revisionData[estimateType].years[semilastYearKey]),\r\n hasDataByType,\r\n }\r\n }, [estimateType, revisionData])\r\n\r\n const hasData = data.lastQuarter || data.semilastQuarter || data.lastYear || data.semilastYear\r\n\r\n return (\r\n
\r\n
\r\n \r\n Latest Revisions\r\n \r\n \r\n
\r\n {hasData && (\r\n
\r\n {data.semilastQuarter && (\r\n \r\n )}\r\n {data.lastQuarter && (\r\n \r\n )}\r\n {data.semilastYear && (\r\n \r\n )}\r\n {data.lastYear && (\r\n \r\n )}\r\n
\r\n )}\r\n {!hasData && (\r\n
\r\n No {EarningsEstimateTypeLabels[estimateType]} data available.\r\n
\r\n )}\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport EstimateRevisions from './EstimateRevisions'\r\nimport LatestRevisions from './LatestRevisions'\r\nimport { EarningsRevisionsByType } from './types'\r\n\r\ninterface Props {\r\n revisionData: EarningsRevisionsByType | null\r\n}\r\n\r\nexport default function EarningsRevisions({ revisionData }: Props) {\r\n if (!revisionData) {\r\n return null\r\n }\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\ninterface Props {\r\n beats: number\r\n color: string\r\n label: string\r\n total: number\r\n}\r\n\r\nexport default function EstimateBeat({ beats, color, label, total }: Props) {\r\n const percent = ((beats / total) * 100).toFixed(0)\r\n return (\r\n
\r\n
\r\n {percent}%\r\n
\r\n
\r\n
\r\n {label} beats the estimate\r\n
\r\n
\r\n \r\n {beats}/{total}\r\n {' '}\r\n last quarters\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React, { useMemo } from 'react'\r\n\r\nimport colors from '../../../../../config/colors'\r\nimport { Earning } from '../earnings-common/types'\r\nimport EstimateBeat from './EstimateBeat'\r\n\r\nconst QUARTERS_TO_COMPARE = 8\r\n\r\ninterface Props {\r\n earningsData: Earning[]\r\n}\r\n\r\nexport default function EstimateBeats({ earningsData }: Props) {\r\n const data = useMemo(() => {\r\n let quarters = 0\r\n let epsBeats = 0\r\n let gaapEpsBeats = 0\r\n let revenueBeats = 0\r\n for (let idx = earningsData.length - 1; idx > 0; idx--) {\r\n if (quarters >= QUARTERS_TO_COMPARE) {\r\n break\r\n }\r\n const earning = earningsData[idx]\r\n if (earning.epsActual !== null || earning.epsReportedActual !== null || earning.salesActual !== null) {\r\n quarters += 1\r\n if (earning.epsActual !== null && earning.epsEstimate !== null && earning.epsActual > earning.epsEstimate) {\r\n epsBeats++\r\n }\r\n if (\r\n earning.epsReportedActual !== null &&\r\n earning.epsReportedEstimate !== null &&\r\n earning.epsReportedActual > earning.epsReportedEstimate\r\n ) {\r\n gaapEpsBeats++\r\n }\r\n if (\r\n earning.salesActual !== null &&\r\n earning.salesEstimate !== null &&\r\n earning.salesActual > earning.salesEstimate\r\n ) {\r\n revenueBeats++\r\n }\r\n }\r\n }\r\n return {\r\n epsBeats,\r\n gaapEpsBeats,\r\n revenueBeats,\r\n quarters,\r\n }\r\n }, [earningsData])\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { TableAlign, TableBody, TableCell, TableRow } from '../../components/Table'\r\nimport { PriceReactionColumnDefinition, PriceReactionRowDataType, PriceReactionSubColumnDefinition } from './types'\r\n\r\ntype PriceReactionTableRowProps = {\r\n data: PriceReactionRowDataType\r\n columns: PriceReactionColumnDefinition[]\r\n subColumns?: Record\r\n isFirst: boolean\r\n isLast: boolean\r\n}\r\n\r\nexport default function PriceReactionTableRow({\r\n data,\r\n columns,\r\n subColumns,\r\n isFirst,\r\n isLast,\r\n}: PriceReactionTableRowProps) {\r\n const { label, labelElement, labelColumnClassName, subData } = data\r\n const isBottomBorder = subData.length === 0 && isLast\r\n\r\n return (\r\n \r\n \r\n \r\n {labelElement ?? {label}}\r\n \r\n\r\n {columns.map((column, index, array) => {\r\n const isLastCell = index === array.length - 1\r\n return (\r\n \r\n {column.renderColumn(data)}\r\n \r\n )\r\n })}\r\n \r\n\r\n {subData.map((item, index, array) => {\r\n const isSubBottomBorder = index === array.length - 1 && isLast\r\n return (\r\n \r\n \r\n {item.labelElement ?? {item.label}}\r\n \r\n {subColumns?.[item.id].map((subcolumn, colIdx, colArray) => {\r\n const column = columns[colIdx]\r\n const isLastCell = colIdx === colArray.length - 1\r\n return (\r\n \r\n {subcolumn.renderColumn(item)}\r\n \r\n )\r\n })}\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Table, TableAlign, TableCell, TableFooter, TableHead, TableHeader } from '../../components/Table'\r\nimport PriceReactionTableRow from './PriceReactionTableRow'\r\nimport { PriceReactionColumnDefinition, PriceReactionRowDataType, PriceReactionSubColumnDefinition } from './types'\r\n\r\ntype PriceReactionTableProps<\r\n RowDataType extends PriceReactionRowDataType,\r\n ColumnDefinition extends PriceReactionColumnDefinition,\r\n> = {\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n subColumns?: Record\r\n}\r\n\r\nexport default function PriceReactionTable<\r\n RowDataType extends PriceReactionRowDataType,\r\n ColumnDefinition extends PriceReactionColumnDefinition,\r\n>({ columns, subColumns, data }: PriceReactionTableProps) {\r\n return (\r\n \r\n \r\n \r\n Report Date\r\n \r\n {columns.map((column) => (\r\n \r\n {column.name}\r\n \r\n ))}\r\n \r\n {data.map((row, index) => (\r\n \r\n ))}\r\n \r\n \r\n Daily change and RSI 14 are based on the report date for BMO releases and the following day for AMC releases.\r\n \r\n \r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { PropsWithChildren } from 'react'\r\n\r\nimport { HighlightedBox, HighlightedBoxColor } from './HighlightedBox'\r\n\r\nfunction getColorForValue(value: number): HighlightedBoxColor {\r\n if (!value) {\r\n return HighlightedBoxColor.Neutral\r\n } else if (value <= -10) {\r\n return HighlightedBoxColor.DarkRed\r\n } else if (value <= -5) {\r\n return HighlightedBoxColor.MediumRed\r\n } else if (value < 0) {\r\n return HighlightedBoxColor.LightRed\r\n } else if (value >= 10) {\r\n return HighlightedBoxColor.DarkGreen\r\n } else if (value >= 5) {\r\n return HighlightedBoxColor.MediumGreen\r\n } else {\r\n return HighlightedBoxColor.LightGreen\r\n }\r\n}\r\n\r\ninterface OhlcPriceChangeProps {\r\n className?: string\r\n value?: number | null\r\n}\r\n\r\nexport function OhlcPriceChange({ children, className, value }: PropsWithChildren) {\r\n if (!Number.isFinite(value)) {\r\n return null\r\n }\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { RedGreenText } from '../../components/RedGreenText'\r\nimport { TableAlign } from '../../components/Table'\r\nimport { formatNumber } from '../../util'\r\nimport { PriceReactionWhen } from '../earnings-common/types'\r\nimport { OhlcPriceChange } from './OhlcPriceChange'\r\nimport { PriceReactionColumnsType, PriceReactionDataEnum, PriceReactionRowDataType } from './types'\r\n\r\nconst WHEN_LABELS: { [K in PriceReactionWhen]: string } = {\r\n [PriceReactionWhen.MINUS_DAYS_3]: '-3 Days',\r\n [PriceReactionWhen.MINUS_DAYS_2]: '-2 Days',\r\n [PriceReactionWhen.MINUS_DAYS_1]: '-1 Day',\r\n [PriceReactionWhen.OPEN]: 'Open',\r\n [PriceReactionWhen.HIGH]: 'High',\r\n [PriceReactionWhen.LOW]: 'Low',\r\n [PriceReactionWhen.CLOSE]: 'Close',\r\n [PriceReactionWhen.PLUS_DAYS_1]: '+1 Day',\r\n [PriceReactionWhen.PLUS_DAYS_2]: '+2 Days',\r\n [PriceReactionWhen.PLUS_DAYS_3]: '+3 Days',\r\n [PriceReactionWhen.PLUS_WEEK_1]: '+1 Week',\r\n [PriceReactionWhen.MINUS_WEEK_1]: '-1 Week',\r\n}\r\n\r\nconst PREV_DAYS_WHENS: PriceReactionWhen[] = [\r\n PriceReactionWhen.MINUS_DAYS_3,\r\n PriceReactionWhen.MINUS_DAYS_2,\r\n PriceReactionWhen.MINUS_DAYS_1,\r\n]\r\nconst OHLC_WHENS: PriceReactionWhen[] = [\r\n PriceReactionWhen.OPEN,\r\n PriceReactionWhen.HIGH,\r\n PriceReactionWhen.LOW,\r\n PriceReactionWhen.CLOSE,\r\n]\r\nconst NEXT_DAYS_WHENS: PriceReactionWhen[] = [\r\n PriceReactionWhen.PLUS_DAYS_1,\r\n PriceReactionWhen.PLUS_DAYS_2,\r\n PriceReactionWhen.PLUS_DAYS_3,\r\n]\r\nconst WEEK_WHENS: PriceReactionWhen[] = [PriceReactionWhen.PLUS_WEEK_1, PriceReactionWhen.MINUS_WEEK_1]\r\nconst ALL_WHENS = [...PREV_DAYS_WHENS, ...OHLC_WHENS, ...NEXT_DAYS_WHENS, ...WEEK_WHENS]\r\n\r\nconst SEPARATOR_HEADER = 'px-0 w-1'\r\nconst OHLC_HEADER = 'text-violet-500 dark:text-violet-300 font-semibold'\r\nconst OHLC_BOTTOM_BORDER = 'border-b-violet-500 dark:border-b-violet-300'\r\nconst OHLC_LEFT_BORDER = 'border-l-violet-500 dark:border-l-violet-300'\r\nconst OHLC_RIGHT_BORDER = 'border-r-violet-500 dark:border-r-violet-300'\r\nconst OHLC_TOP_BORDER = 'border-t-violet-500 dark:border-t-violet-300'\r\n\r\nconst WHEN_INDEXES = ALL_WHENS.reduce(\r\n (acc, val, idx) => {\r\n acc[val] = idx\r\n return acc\r\n },\r\n {} as { [K in PriceReactionWhen]: number }\r\n)\r\n\r\nconst getColumns = (isCompact: boolean) => {\r\n const commonClassName = classNames('px-4 last:pr-11', {\r\n 'w-22 last:w-29.5': !isCompact,\r\n 'w-17 last:w-24.5': isCompact,\r\n })\r\n\r\n const renderPrice = (data: PriceReactionRowDataType, colIdx: number) => {\r\n const value = data.values && data.values[colIdx] && data.values[colIdx].value\r\n return {typeof value === 'number' ? formatNumber(value) : '—'}\r\n }\r\n\r\n const columns: PriceReactionColumnsType['columns'] = [\r\n ...PREV_DAYS_WHENS.map((when) => ({\r\n align: TableAlign.Right,\r\n className: classNames(commonClassName, { 'border-r': when === PriceReactionWhen.MINUS_DAYS_1 }),\r\n hasLeftBorder: when === PriceReactionWhen.MINUS_DAYS_3,\r\n hasRightBorder: when === PriceReactionWhen.MINUS_DAYS_1,\r\n hasRightSeparator: when === PriceReactionWhen.MINUS_DAYS_1,\r\n headerClassName: commonClassName,\r\n id: when,\r\n name: WHEN_LABELS[when],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[when]),\r\n })),\r\n {\r\n className: commonClassName,\r\n headerClassName: SEPARATOR_HEADER,\r\n id: 'separator1',\r\n isSeparator: true,\r\n name: '',\r\n renderColumn: () => null,\r\n },\r\n {\r\n align: TableAlign.Right,\r\n bottomBorderClassName: OHLC_BOTTOM_BORDER,\r\n className: classNames(commonClassName, 'border-l', OHLC_LEFT_BORDER),\r\n hasLeftBorder: true,\r\n hasLeftSeparator: true,\r\n headerClassName: classNames(commonClassName, OHLC_HEADER),\r\n id: PriceReactionWhen.OPEN,\r\n leftBorderClassName: OHLC_LEFT_BORDER,\r\n name: WHEN_LABELS[PriceReactionWhen.OPEN],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[PriceReactionWhen.OPEN]),\r\n topBorderClassName: OHLC_TOP_BORDER,\r\n },\r\n {\r\n align: TableAlign.Right,\r\n bottomBorderClassName: OHLC_BOTTOM_BORDER,\r\n className: commonClassName,\r\n headerClassName: classNames(commonClassName, OHLC_HEADER),\r\n id: PriceReactionWhen.HIGH,\r\n name: WHEN_LABELS[PriceReactionWhen.HIGH],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[PriceReactionWhen.HIGH]),\r\n topBorderClassName: OHLC_TOP_BORDER,\r\n },\r\n {\r\n align: TableAlign.Right,\r\n bottomBorderClassName: OHLC_BOTTOM_BORDER,\r\n className: commonClassName,\r\n headerClassName: classNames(commonClassName, OHLC_HEADER),\r\n id: PriceReactionWhen.LOW,\r\n name: WHEN_LABELS[PriceReactionWhen.LOW],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[PriceReactionWhen.LOW]),\r\n topBorderClassName: OHLC_TOP_BORDER,\r\n },\r\n {\r\n align: TableAlign.Right,\r\n bottomBorderClassName: OHLC_BOTTOM_BORDER,\r\n className: classNames(commonClassName, 'border-r', OHLC_RIGHT_BORDER),\r\n hasRightBorder: true,\r\n hasRightSeparator: true,\r\n headerClassName: classNames(commonClassName, OHLC_HEADER),\r\n id: PriceReactionWhen.CLOSE,\r\n name: WHEN_LABELS[PriceReactionWhen.CLOSE],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[PriceReactionWhen.CLOSE]),\r\n rightBorderClassName: OHLC_RIGHT_BORDER,\r\n topBorderClassName: OHLC_TOP_BORDER,\r\n },\r\n {\r\n className: commonClassName,\r\n headerClassName: SEPARATOR_HEADER,\r\n id: 'separator2',\r\n isSeparator: true,\r\n name: '',\r\n renderColumn: () => null,\r\n },\r\n ...NEXT_DAYS_WHENS.map((when) => ({\r\n align: TableAlign.Right,\r\n className: classNames(commonClassName, { 'border-l': when === PriceReactionWhen.PLUS_DAYS_1 }),\r\n hasLeftBorder: when === PriceReactionWhen.PLUS_DAYS_1,\r\n hasLeftSeparator: when === PriceReactionWhen.PLUS_DAYS_1,\r\n headerClassName: commonClassName,\r\n id: when,\r\n name: WHEN_LABELS[when],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[when]),\r\n })),\r\n ...WEEK_WHENS.map((when) => ({\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n hasLeftBorder: when === PriceReactionWhen.PLUS_WEEK_1,\r\n headerClassName: commonClassName,\r\n id: when,\r\n name: WHEN_LABELS[when],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[when]),\r\n })),\r\n ]\r\n\r\n const subColumns: PriceReactionColumnsType['subColumns'] = {\r\n [PriceReactionDataEnum.priceDiff]: columns.map((column) => ({\r\n id: column.id,\r\n name: column.name,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n renderColumn: (data) => {\r\n if (column.isSeparator) {\r\n return null\r\n }\r\n const colIdx = WHEN_INDEXES[column.id as PriceReactionWhen]\r\n const value = data.values && data.values[colIdx] && data.values[colIdx].value\r\n if (typeof value !== 'number') {\r\n return \r\n }\r\n if (OHLC_WHENS.includes(column.id as PriceReactionWhen)) {\r\n return (\r\n {formatNumber(value, { showPlusSign: true, suffix: '%' })}\r\n )\r\n }\r\n return (\r\n \r\n {formatNumber(value, { showPlusSign: true, suffix: '%' })}\r\n \r\n )\r\n },\r\n })),\r\n [PriceReactionDataEnum.spyPriceDiff]: columns.map((column) => ({\r\n id: column.id,\r\n name: column.name,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n renderColumn: (data) => {\r\n if (column.isSeparator) {\r\n return null\r\n }\r\n const colIdx = WHEN_INDEXES[column.id as PriceReactionWhen]\r\n const value = data.values && data.values[colIdx] && data.values[colIdx].value\r\n if (typeof value !== 'number') {\r\n return \r\n }\r\n return (\r\n \r\n {formatNumber(value, { showPlusSign: true, suffix: '%' })}\r\n \r\n )\r\n },\r\n })),\r\n }\r\n\r\n return { columns, subColumns }\r\n}\r\n\r\nexport function usePriceReactionColumns(isCompact: boolean) {\r\n return React.useMemo(() => getColumns(isCompact), [isCompact])\r\n}\r\n","import React, { useMemo } from 'react'\r\n\r\nimport WidgetHeader from '../earnings-common/WidgetHeader'\r\nimport { EarningReportReaction } from '../earnings-common/types'\r\nimport PriceReactionTable from './PriceReactionTable'\r\nimport { usePriceReactionColumns } from './usePriceReactionColumns'\r\nimport { mapPriceReactionData } from './utils'\r\n\r\ninterface Props {\r\n priceReactionData: EarningReportReaction[]\r\n}\r\n\r\nexport default function PriceReaction({ priceReactionData }: Props) {\r\n const { columns, subColumns } = usePriceReactionColumns(true)\r\n\r\n const data = useMemo(() => mapPriceReactionData(priceReactionData), [priceReactionData])\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { ChipSwitch, ChipSwitchButton } from '../../components/ChipSwitch'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { EarningsDataEnum, EarningsTimeframeEnum } from '../earnings-common/types'\r\nimport { EarningsSettings } from './types'\r\n\r\ninterface Props {\r\n earningsTimeframe: EarningsTimeframeEnum\r\n isSemiAnnualEarning: boolean\r\n showTimeframe: boolean\r\n}\r\n\r\nexport default function WidgetSettingsSection({ earningsTimeframe, isSemiAnnualEarning, showTimeframe }: Props) {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const toggleSetting = (key: keyof EarningsSettings, value: EarningsSettings[keyof EarningsSettings]) => {\r\n setSettings({\r\n ...settings,\r\n [key]: value,\r\n })\r\n }\r\n\r\n const yoyGrowthLabel = React.useMemo(() => {\r\n const isQuarterlyTimeframe = earningsTimeframe === EarningsTimeframeEnum.quarterly // EarningsTimeframeEnum.quarterly is used for both quarterly & semiannual\r\n\r\n if (isQuarterlyTimeframe) {\r\n return isSemiAnnualEarning ? 'SoS Growth' : 'QoQ Growth'\r\n }\r\n\r\n return 'YoY Growth'\r\n }, [isSemiAnnualEarning, earningsTimeframe])\r\n\r\n return (\r\n
\r\n \r\n {\r\n toggleSetting(EarningsDataEnum.yoyChange, !settings[EarningsDataEnum.yoyChange])\r\n }}\r\n >\r\n {yoyGrowthLabel}\r\n \r\n {\r\n toggleSetting(EarningsDataEnum.yoyChangePct, !settings[EarningsDataEnum.yoyChangePct])\r\n }}\r\n >\r\n {`${yoyGrowthLabel} %`}\r\n \r\n \r\n\r\n {showTimeframe && (\r\n \r\n {\r\n toggleSetting('earningsTimeframe', EarningsTimeframeEnum.annual)\r\n }}\r\n >\r\n Annual\r\n \r\n {\r\n toggleSetting('earningsTimeframe', EarningsTimeframeEnum.quarterly)\r\n }}\r\n >\r\n {isSemiAnnualEarning ? 'Semiannual' : 'Quarterly'}\r\n \r\n \r\n )}\r\n
\r\n )\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { FinancialsTableContextProvider, useFinancialsTableContext } from '../../components/financials-table'\r\nimport { useFinancialsTablePersistScrollPosition } from '../../components/financials-table/useFinancialsTablePersistScrollPosition'\r\nimport { useCachedLoaderData } from '../../hooks/useCachedLoaderData'\r\nimport { EarningsWidget } from '../earnings-common/EarningsWidget'\r\nimport { EarningsWidgetCategory } from '../earnings-common/constants'\r\nimport { Earning, EarningsDataEnum, EarningsEstimateType, EarningsTimeframeEnum } from '../earnings-common/types'\r\nimport { getEffectiveTimeframe } from '../earnings-common/utils'\r\nimport { QuoteFinancialsTabMenu } from '../quote/components/QuoteFinancialsTabMenu'\r\nimport { QuoteStickySubMenu } from '../quote/components/QuoteStickySubMenu'\r\nimport EarningsHeader from './EarningsHeader'\r\nimport EarningsRevisions from './EarningsRevisions'\r\nimport EstimateBeats from './EstimateBeats'\r\nimport PriceReaction from './PriceReaction'\r\nimport WidgetSettingsSection from './WidgetSettingsSection'\r\nimport { DEFAULT_SETTINGS, FISCAL_YEAR_MARK, SETTINGS_COOKIE_KEY } from './constants'\r\nimport { EarningsData, EarningsRevisionsByType, EarningsSettings } from './types'\r\nimport { getIsSemiAnnualEarning, getYearAndPeriodInt } from './utils'\r\n\r\nfunction EarningsComponent() {\r\n const { data: dataRaw } = useCachedLoaderData()\r\n const { settings } = useFinancialsTableContext()\r\n const isSemiAnnualEarning = getIsSemiAnnualEarning(dataRaw?.earningsData ?? [])\r\n const data = React.useMemo(() => {\r\n if (dataRaw === null) return null\r\n\r\n const sorter = (a: Earning, b: Earning) => {\r\n const { year: yearA, period: periodA } = getYearAndPeriodInt(a.fiscalPeriod, isSemiAnnualEarning)\r\n const { year: yearB, period: periodB } = getYearAndPeriodInt(b.fiscalPeriod, isSemiAnnualEarning)\r\n\r\n if ([yearA, yearB, periodA, periodB].includes(null)) {\r\n return 0\r\n }\r\n\r\n if (yearA === yearB) {\r\n return periodA! - periodB!\r\n }\r\n\r\n return yearA! - yearB!\r\n }\r\n\r\n const earningsData = [...(dataRaw?.earningsData ?? [])].sort(sorter)\r\n const earningsAnnualData = [...(dataRaw?.earningsAnnualData ?? [])].sort(sorter)\r\n\r\n const revisionsByType = (dataRaw?.earningsRevisionsData ?? []).reduce(\r\n (acc, revision) => {\r\n const fiscalKey = revision.fiscalPeriod.endsWith(FISCAL_YEAR_MARK) ? 'years' : 'quarters'\r\n const fiscalPeriods = acc[revision.estimateType][fiscalKey]\r\n let fiscalData = fiscalPeriods[revision.fiscalPeriod]\r\n if (!fiscalData) {\r\n fiscalData = []\r\n fiscalPeriods[revision.fiscalPeriod] = fiscalData\r\n }\r\n fiscalData.push({ ...revision, date: dateFns.parseISO(revision.estimateDate) })\r\n return acc\r\n },\r\n {\r\n [EarningsEstimateType.eps]: { quarters: {}, years: {} },\r\n [EarningsEstimateType.epsGaap]: { quarters: {}, years: {} },\r\n [EarningsEstimateType.sales]: { quarters: {}, years: {} },\r\n } as EarningsRevisionsByType\r\n )\r\n\r\n return {\r\n ...dataRaw,\r\n earningsData,\r\n earningsAnnualData,\r\n revisionData: !!dataRaw?.earningsRevisionsData?.length ? revisionsByType : null,\r\n }\r\n }, [dataRaw, isSemiAnnualEarning])\r\n\r\n useFinancialsTablePersistScrollPosition({\r\n categoryAreasCounts: [2, 2, 2],\r\n dataKeys: [EarningsDataEnum.yoyChange, EarningsDataEnum.yoyChangePct],\r\n })\r\n\r\n const hasQuarterlyData = !!data?.earningsData?.length\r\n const hasAnnualData = !!data?.earningsAnnualData?.length\r\n const hasData = !!data && (hasAnnualData || hasQuarterlyData)\r\n const timeframe = hasData\r\n ? getEffectiveTimeframe(data?.earningsData, data?.earningsAnnualData, settings.earningsTimeframe)\r\n : EarningsTimeframeEnum.quarterly\r\n\r\n return (\r\n <>\r\n }\r\n rightContent={\r\n hasData ? (\r\n \r\n ) : undefined\r\n }\r\n />\r\n\r\n {hasData ? (\r\n
\r\n \r\n\r\n
\r\n {[EarningsWidgetCategory.Eps, EarningsWidgetCategory.EpsGaap, EarningsWidgetCategory.Revenue].map(\r\n (earningsWidgetCategory) => (\r\n \r\n )\r\n )}\r\n\r\n {hasQuarterlyData && (\r\n <>\r\n {data?.priceReactionData.length > 0 && }\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n ) : (\r\n
\r\n Earnings are not available for this stock.\r\n
\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default function Earnings() {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n"],"names":["EarningsHeader","_ref","_nextReportInfo$nextP","earningsDate","earningsData","earningsAnnualData","isAnnualEarning","length","isSemiAnnualEarning","getIsSemiAnnualEarning","nextReportInfo","React","_data$firstEstimateEa","_data","data","parsedEarningsDate","parseISO","firstEstimateEarningIndex","findIndex","getIsEarningEstimate","firstEstimateEarning","lastEarning","date","nextPeriod","dateSuffix","eps","gaapEps","revenue","lastEarningDate","shouldShowEstimatedNextEarningsDate","getDate","getTime","Date","now","estimatedEarningsDate","addMonths","getMonths","getFormattedPeriodValue","fiscalPeriod","getEarningsDateSuffix","epsEstimate","epsReportedEstimate","salesEstimate","_jsxs","KeyStats","className","children","_jsx","KeyStat","datapoint","dateFns","EARNINGS_DATE_FORMAT","label","shortFormatDollar","defaultValue","multiply","FiscalPeriodSelector","props","selected","setSelected","fiscalPeriods","map","value","formatFiscalName","Select","size","items","onChange","item","onSelect","isLoading","formatEstimateLabel","estimateType","EarningsEstimateTypeLabels","TooltipIcon","TooltipRow","color","icon","name","classNames","upArrow","Icon","width","downArrow","dot","style","backgroundColor","PriceRevisionTooltip","_ref2","isActive","revision","getEarningsColor","EarningsColor","estimate","mean","low","high","price","formatDollar","upRevisions","estimates","downRevisions","PriceRevisionsChart","activeIndex","chartData","endingTimestamp","onSetActiveIndex","onSetIsActive","startingTimestamp","monthlyTicks","getMonthlyTicks","onMouseEnter","onMouseLeave","ResponsiveContainer","height","PRICE_REVISIONS_CHART_HEIGHT","ComposedChart","syncId","margin","left","right","top","bottom","onMouseMove","activeTooltipIndex","CartesianGrid","vertical","XAxis","axisLine","stroke","axis","dataKey","domain","scale","tickFormatter","formatMonth","ticks","type","YAxis","interval","tickCount","PRICE_REVISIONS_TICK_COUNT","shortFormatNumber","PRICE_REVISIONS_YAXIS_WIDTH","yAxisId","orientation","Area","activeDot","connectNulls","fill","lowHigh","fillOpacity","isAnimationActive","Line","Tooltip","content","cursor","UpDownRevisionsChart","UPDOWN_REVISIONS_CHART_HEIGHT","stackOffset","hide","UPDOWN_REVISIONS_TICK_COUNT","idx","Math","abs","toFixed","absIntFormat","Bar","upBar","maxBarSize","stackId","downBar","EstimateRevisions","revisionData","priceRevisionIsActive","setPriceRevisionIsActive","upDownRevisionIsActive","setUpDownRevisionIsActive","setActiveIndex","settings","setSettings","useFinancialsTableContext","prepFiscalPeriod","years","Object","keys","quarters","getDefaultFiscalPeriod","useMemo","includes","endsWith","FISCAL_YEAR_MARK","revisions","push","adjustEstimate","negDownRevisions","timestamp","Heading","level","Paragraph","EstimateTypeChipSwitch","hasDataByType","toggleSetting","key","ChipSwitch","ChipSwitchButton","active","EarningsEstimateType","disabled","onClick","epsGaap","sales","LatestRevision","revisionDate","getLatestRevision","hasRevisionData","LatestRevisions","lastQuarterKey","semilastQuarterKey","lastYearKey","semilastYearKey","lastQuarter","semilastQuarter","lastYear","semilastYear","hasData","formatQuarterName","formatYearName","EarningsRevisions","EstimateBeat","beats","total","percent","QUARTERS_TO_COMPARE","EstimateBeats","epsBeats","gaapEpsBeats","revenueBeats","earning","epsActual","epsReportedActual","salesActual","colors","PriceReactionTableRow","columns","subColumns","isFirst","isLast","labelElement","labelColumnClassName","subData","isBottomBorder","TableBody","TableRow","isHoverable","TableCell","hasLeading","align","TableAlign","Left","column","index","array","_column$getColumnClas","isLastCell","isSeparator","hasLeftBorder","hasRightBorder","hasLeftSeparator","hasRightSeparator","topBorderClassName","undefined","bottomBorderClassName","getColumnClassName","call","renderColumn","id","_item$labelElement","isSubBottomBorder","subcolumn","colIdx","colArray","leftBorderClassName","rightBorderClassName","PriceReactionTable","Table","TableHead","TableHeader","headerClassName","hasPadding","row","_row$id","TableFooter","colSpan","getColorForValue","HighlightedBoxColor","DarkRed","MediumRed","LightRed","DarkGreen","MediumGreen","LightGreen","Neutral","OhlcPriceChange","Number","isFinite","HighlightedBox","WHEN_LABELS","PriceReactionWhen","MINUS_DAYS_3","MINUS_DAYS_2","MINUS_DAYS_1","OPEN","HIGH","LOW","CLOSE","PLUS_DAYS_1","PLUS_DAYS_2","PLUS_DAYS_3","PLUS_WEEK_1","MINUS_WEEK_1","PREV_DAYS_WHENS","OHLC_WHENS","NEXT_DAYS_WHENS","WEEK_WHENS","ALL_WHENS","SEPARATOR_HEADER","OHLC_HEADER","OHLC_BOTTOM_BORDER","OHLC_LEFT_BORDER","OHLC_RIGHT_BORDER","OHLC_TOP_BORDER","WHEN_INDEXES","reduce","acc","val","getColumns","isCompact","commonClassName","renderPrice","values","formatNumber","when","Right","PriceReactionDataEnum","priceDiff","showPlusSign","suffix","RedGreenText","rightContent","spyPriceDiff","PriceReaction","priceReactionData","mapPriceReactionData","WidgetHeader","WidgetSettingsSection","earningsTimeframe","showTimeframe","yoyGrowthLabel","EarningsTimeframeEnum","quarterly","EarningsDataEnum","yoyChange","yoyChangePct","annual","EarningsComponent","_dataRaw$earningsData","_data$earningsData","_data$earningsAnnualD","dataRaw","useCachedLoaderData","_dataRaw$earningsData2","_dataRaw$earningsAnnu","_dataRaw$earningsRevi","_dataRaw$earningsRevi2","sorter","a","b","year","yearA","period","periodA","getYearAndPeriodInt","yearB","periodB","sort","revisionsByType","earningsRevisionsData","fiscalKey","fiscalData","estimateDate","useFinancialsTablePersistScrollPosition","categoryAreasCounts","dataKeys","hasQuarterlyData","hasAnnualData","timeframe","getEffectiveTimeframe","_Fragment","QuoteStickySubMenu","leftContent","QuoteFinancialsTabMenu","EarningsWidgetCategory","Eps","EpsGaap","Revenue","earningsWidgetCategory","EarningsWidget","Earnings","FinancialsTableContextProvider","defaultSettings","DEFAULT_SETTINGS","cookieKey","SETTINGS_COOKIE_KEY"],"sourceRoot":""}