{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;o1BACa,MAAAA,GAAU,OAAO,SAAS,WAAa,YAE9CC,GAAe,CACnB,kBAAmB,GACnB,qBAAsB,GACtB,8BAA+B,GAC/B,mBAAoB,GACpB,yBAA0B,GAC1B,uBAAwB,GACxB,oBAAqB,EACvB,EAKaC,IAA0E,CACrF,yBAA0B,CACxB,GACA,GACA,IACA,KACA,KACA,KACA,KAEA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KAEA,KACA,KAEA,GACA,KACA,KACA,KAEA,IACA,KACA,KACA,IACA,IACA,KACA,IACA,IACA,GACA,GACF,CACF;;;;;;+u0KC9CA,MAAMC,GAAyB,CAC7B,SAAU,GACV,sBAAuB,GACvB,oBAAqB,GACrB,oBAAqB,CAAE,GAAI,aAAc,YAAaC,IAAE,mBAAmB,CAAE,EAC7E,wBAAyB,EAC3B,EAIaC,IAAuB,CAAwBC,EAAQC,IAAiC,CAC7F,MAACC,EAAOC,CAAQ,EAAIC,IAAgBJ,EAAKC,GAAA,KAAAA,EAAcJ,GAASG,CAAG,CAAC,EAE1E,OAAIE,IAAU,OACL,CAACL,GAASG,CAAG,EAAGG,CAAQ,EAG1B,CAACD,EAAOC,CAAQ,CACzB,EClBME,GAAuD,CAC3D,UAAW,CACT,SAAU,SACV,IAAK,EACL,KAAM,EACN,MAAO,EACP,OAAQ,EAER,QAAS,OACT,WAAY,SACZ,eAAgB,WAChB,UAAW,QAEX,gBAAiB,SAEjB,WAAY,QAEZ,WAAY,eACd,EAEA,mBAAoB,CAClB,OAAQ,QACV,EAEA,WAAY,CACV,SAAU,WACV,KAAM,EACN,MAAO,EACP,OAAQ,EACR,OAAQ,QAER,WAAY,eACd,EAEA,uBAAwB,CACtB,IAAK,SACL,OAAQ,sBACV,EAEA,WAAY,CACV,QAAS,SAET,WAAY,SACZ,WAAY,IACZ,YAAa,GACf,EAEA,SAAU,CACR,WAAY,MACd,CACF,EAEMC,IAA2B,CAAC,CAAE,SAAAC,KAA2C,CAC7E,MAAMC,EAAMC,KACNC,EAAeC,MACf,CAACC,EAAqBC,CAAsB,EAAId,IAAqB,qBAAqB,EAE1Fe,EAA2BC,cAAY,IAAM,CACjDF,EAAuBG,GAAS,MAAM,MAAO,IAC5C,CAACH,CAAsB,CAAC,EAQ3B,OANwBI,UAAQ,IACvBD,GAAS,MAAM,QAAQA,GAAS,QAAQJ,CAAmB,EAAG,KAAK,EACzE,CAACA,CAAmB,CAAC,GAEgBF,sBAiB5B,SAAAH,CAAS,GAZfW,GAAA,KAAAC,YAAA,WAAAD,QAACE,IAAI,GAAI,CAACf,GAAO,UAAWA,GAAO,kBAAkB,EACnD,UAACgB,OAAAD,GAAA,CAAI,GAAI,CAACf,GAAO,WAAYA,GAAO,QAAQ,EAAG,SAAQ,aACtDgB,GAAA,IAAAD,GAAA,CAAI,GAAIf,GAAO,WAAY,SAA0B,+BACtDgB,OAACD,GAAI,IAAI,CAACf,GAAO,WAAYA,GAAO,QAAQ,EAAI,SAAAG,EAAI,UAAW,GAC/Da,OAACC,KAAW,QAASR,EAA0B,MAAM,UACnD,SAAAO,GAAA,IAACE,MAAW,CACd,IACF,EACAF,OAACD,IAAI,GAAI,CAACf,GAAO,WAAYA,GAAO,sBAAsB,EAAI,SAAAE,EAAS,CACzE,GAKN,ECjGaiB,GAAUC,GAAoB,CAE3C,ECKaC,IAA4BlB,GAAiB,CACxD,KAAM,CAACmB,EAAgBC,CAAiB,EAAIC,WAAS,EAAK,EAEpDC,EAAiBf,EAAA,YACpBgB,IACCA,EAAM,YAAcvB,EAAI,WAClBuB,EAAA,QAAU,iBAAiB,OAAAvB,EAAI,SAC9BuB,GAET,CAACvB,EAAI,WAAYA,EAAI,OAAO,GAG9BwB,YAAU,IAAM,CACd,MAAMC,EAAQC,KAAuB,WAEjC,CAACD,GAASN,IAIdM,EAAM,kBAAkBH,CAAc,EACtCF,EAAkB,EAAI,IACrB,CAACpB,EAAI,QAASsB,EAAgBH,CAAc,CAAC,CAClD;;;;;;;;;;;;;ipTC7BO,MAAMQ,IAAc,CACzB,SAAU,EACZ,ECUMC,IAA0B,CAC9B,IAAK,IAAMZ,GACX,MAAO,IAAMA,GACb,MAAO,IAAMA,GACb,KAAM,IAAMA,GACZ,KAAM,IAAMA,GACZ,MAAO,IAAMA,GACb,MAAO,IAAMA,GACb,MAAO,IAAMA,GACb,SAAU,IAAMA,EAClB,EAEMa,IAAgDD,IAYhDE,IAAY,CAAC,CAAE,cAAAC,CAAA,EAAiC,CAAE,cAAe,MACjEA,EACK,QAGFF,ICjCG,IAAAG,SACVA,EAAA,OAAS,SACTA,EAAA,QAAU,UAFAA,SAAA,IAWZ,MAAMC,GAA0B,IAAO,OAAO,UAAU,OAAS,SAAsB,UAEjFC,IAAyC,CAC7C,OAAQD,GAAwB,EAChC,qBAAsBjB,GACtB,sBAAuBA,EACzB,EAEMmB,GAAsBC,gBAAwCF,GAAY,EAE1EG,IAAkC,CAAC,CAAE,SAAAtC,KAAe,CACxD,MAAMuC,EAAMR,MACN,CAACS,EAAQC,CAAS,EAAInB,WAAuB,IAAMY,IAAyB,EAE5EQ,EAAyBlC,EAAA,YAC7B,CAACmC,EAAyBC,IAAmB,CAC3CL,EAAI,KAAK,YAAY,OAAAI,EAAS,YAAW,OAAAC,EAAQ,EACjDH,EAAUE,CAAS,CACrB,EACA,CAACJ,CAAG,GAGAM,EAAuBrC,EAAA,YAC1BoC,GAAmBF,EAAuB,SAAqBE,CAAM,EACtE,CAACF,CAAsB,GAGnBI,EAAwBtC,EAAA,YAC3BoC,GAAmBF,EAAuB,UAAsBE,CAAM,EACvE,CAACF,CAAsB,GAGnBK,EAAmBvC,EAAA,YACtBwC,GAAe,CACdN,EACEM,EAAI,OAAS,SAAW,SAAsB,UAC9C,qCAAqC,OAAAA,EAAI,KAAI,CAEjD,EACA,CAACN,CAAsB,GAGzBO,GAAS,SAAUF,CAAgB,EACnCE,GAAS,UAAWF,CAAgB,EAEpC,MAAMpD,EAAQe,EAAA,QACZ,KAAO,CACL,OAAA8B,EACA,qBAAAK,EACA,sBAAAC,CAAA,GAEF,CAACA,EAAuBD,EAAsBL,CAAM,GAGtD,OAAQ1B,OAAAsB,GAAoB,SAApB,CAA6B,MAAAzC,EAAe,SAAAK,CAAS,EAC/D,EAIakD,IAAkB,IAAM,CAC7B,MAAAC,EAAMC,aAAWhB,EAAmB,EAC1C,GAAI,CAACe,EACG,UAAI,MAAM,yEAAyE,EAEpF,OAAAA,CACT,ECrEME,GAAoB,IAKpBC,IAAWC,GAAgB,MAAMA,CAAG,EAAE,KAAMC,GAAMA,EAAE,MAAM,EAK1DC,IAAsB,IAAMJ,GAAoB,KAAK,MAAM,KAAK,SAAWA,EAAiB,EAcrFK,IAAkB,IAAM,CAInC,KAAM,CAACC,EAAYC,CAAa,EAAItC,WAAqB,cAAc,EAEjE,CAAE,sBAAAwB,GAA0BI,MAM5BW,EAAkBrD,cAAY,IAAM,CACxC,OAAQmD,EAAY,CAClB,IAAK,eACH,OAAAC,EAAc,WAAW,EAClB,EACT,IAAK,YACH,OAAAA,EAAc,YAAY,EACnBH,IAAoB,EAC7B,IAAK,aACI,OAAAJ,EACX,GACC,CAACM,CAAU,CAAC,EAET,CAAE,KAAAG,CAAS,EAAAC,IAAgB,YAAaT,IAAS,CACrD,SAAU,GACV,gBAAAO,EACA,QAAUG,GAAiB,CACHlB,EAAA,oBAAoB,OAAAkB,EAAM,QAAS,CAC3D,EACD,EAED,GAAI,CAACF,EAEG,UAAI,MAAM,sDAAsD,EAGjE,OAAAA,CACT,ECxEaG,IAAoChE,GAAkB,CACjE,KAAM,CAACiE,EAAcC,CAAe,EAAI7C,WAAkB,EAAK,EACzD8C,EAAwBC,IAAYpE,GAAA,YAAAA,EAAK,OAAO,EAEtDwB,mBAAU,IAAM,CACVyC,GAAgB,CAACjE,GAAOmE,IAA0B,QAIlDnE,EAAI,UAAYmE,GAClBD,EAAgB,EAAI,CAErB,GAAClE,EAAKiE,EAAcE,CAAqB,CAAC,EAEtCF,CACT,ECIaI,IAAoB,UACpBC,IAAiB,oBAE9B,MAAMC,GAAgD,CACpD,SAASC,GAAA,iEAAgB,cAAhB,KAAAA,GAA+B,UACxC,WAAWC,GAAA,iEAAgB,eAAhB,KAAAA,GAAgC,UAC3C,WAAYJ,IACZ,QAASC,IACT,YAAa,SACf,EAEMI,IAAoC,CACxC,IAAKH,GACL,OAAQvD,GACR,sBAAuB,EACzB,EAEM2D,GAAavC,gBAAcsC,GAAmB,EAEvCE,IAA+B,CAAC,CAAE,SAAA7E,KAAe,CAC5D,KAAM,CAACC,EAAK6E,CAAM,EAAIxD,WAAS,IAAMkD,EAAyB,EACxDO,EAAUrB,MACVsB,EAAwBf,IAAiCc,CAAO,EACtE5D,IAAyB4D,CAAO,EAE1B,MAAAE,EAAgBvE,UAAsB,IAAM,OACzC,OACL,IAAK,CACH,GAAGT,EACH,WAAY8E,EAAQ,WACpB,QAAS,iBAAiB,OAAAA,EAAQ,SAClC,aAAaN,EAAAM,EAAQ,QAAR,KAAAN,EAAiB,UAC9B,4BAA6BM,EAAQ,EACvC,EACA,OAAAD,EACA,sBAAAE,CAAA,CAED,GAAC/E,EAAK8E,EAAQ,GAAIA,EAAQ,WAAYA,EAAQ,MAAOA,EAAQ,QAASC,CAAqB,CAAC,EAG7F,OAAClE,GAAA,IAAA8D,GAAW,SAAX,CAAoB,MAAOK,EAC1B,SAAAnE,OAACf,IAA0B,UAAAC,CAAS,EACtC,EAEJ,EAEMkF,GAAqB,IAAoB,CACvC,MAAA/B,EAAMC,aAAWwB,EAAU,EACjC,GAAI,CAACzB,EACG,UAAI,MAAM,wEAAwE,EAGnF,OAAAA,CACT,EAEajD,GAAiB,IAAMgF,GAAA,EAAqB,IAE5C9E,IAA4B,IAAM,CACvC,MAAAH,EAAMiF,GAAqB,MACjC,OAAOxE,UAAQ,IAAM,CAAC,UAAW,MAAM,EAAE,SAAST,EAAI,UAAU,EAAG,CAACA,CAAG,CAAC,CAC1E,EAEakF,IAA2B,IAC/BD,GAAqB,q0nKCnF9B,IAAIE,GAES,MAAAC,GAAc,IAAIC,IAElBC,IAAwB,CACnCC,EACAC,IAC6E,CACvE,MAAAC,EAAK,IAAIC,IAAoB,CACjC,OAAQ,CACN,iBAAAH,EAGA,WAAY,CAACH,EAA0C,EACvD,oBAAqB,GACrB,iBAAkB,GAClB,0BAA2B,GAC3B,uBAAwB,GACxB,wBAAyB,GACzB,sBAAuB,GACvB,4BAA6B,GAC7B,6BAA8B,GAC9B,0BAA2B,GAC3B,uBAAwB,GACxB,wCAAyC,GACzC,yBAA0B,CAAC,qBAAsB,wBAAwB,EACzE,mBAAoB,GACpB,gBAAiB,CACf,CAACA,GAAY,UAAU,EAAG,CACxB,QAAAI,CACF,CACF,CACF,EACD,EAEE,OAAAC,EAAA,wBAAyBE,GAAa,OAC9BA,EAAA,MAAOnB,EAAAmB,EAAS,OAAT,KAAAnB,EAAiB,GACxBmB,EAAA,KAAK,eAAe,EAAI,kBAClC,EAEDF,EAAG,gBAAgB,EAEnBA,EAAG,cAAc,EACHN,GAAAM,EAEP,CAACA,EAAIL,EAAW,CACzB,EAEaQ,IAA2B,IAAM,CAAC,CAACT,GAEnCU,IAAiB,IAAM,CAClC,GAAI,CAACV,GACG,UAAI,MAAM,mDAAmD,EAG9D,OAAAA,EACT,ECpDMW,IAA8B,CAAC,CAAE,SAAA/F,KAAe,CACpD,MAAMC,EAAMC,KACNuF,EAAUO,KACV,CAACX,EAAaY,CAAc,EAAI3E,WAAkC,MAAS,EAYjF,OAVAG,YAAU,IAAM,CACd,GAAIxB,EAAI,6BAA+B,CAAC4F,MAA4B,CAElE,KAAM,EAAGR,CAAW,EAAIE,IAAsBtF,EAAI,4BAA6BwF,CAAO,EACtFQ,EAAeZ,CAAW,CAC5B,GAGC,CAACpF,EAAI,2BAA2B,CAAC,EAEhCoF,SACMa,GAAmB,SAAnB,CAA4B,MAAOb,EAAc,SAAArF,CAAS,uBAExD,SAAAA,CAAS,EAEvB,EC7BemG,IAAA,i7ICOTC,IAAW,IAEJC,IAAmB,CAAC,CAAE,UAAAC,EAAY,GAAM,MAAAC,EAAQ,MAAgC,CAC3F,KAAM,CAACC,CAAO,EAAIC,IAAWH,EAAY,EAAIF,GAAQ,EAEjD,OAACI,IAKH7F,GAAA,KAAC,OACC,MAAM,6BACN,QAAQ,YACR,oBAAoB,WACpB,MAAA4F,EACA,KAAK,UAEL,UAACzF,OAAA,QAAK,EAAE,MAAM,EAAE,MAAM,MAAM,IAAI,OAAO,IACrC,SAAAA,GAAA,IAAC,WACC,cAAc,OACd,OAAO,kBACP,SAAS,UACT,IAAI,KACJ,YAAY,aACZ,MAAM,KACN,SAAS,aAEb,EACAA,OAAC,QAAK,EAAE,MAAM,EAAE,MAAM,MAAM,IAAI,OAAO,IACrC,SAAAA,GAAA,IAAC,WACC,cAAc,OACd,OAAO,kBACP,SAAS,UACT,IAAI,KACJ,YAAY,aACZ,MAAM,SACN,SAAS,aAEb,EACAA,OAAC,QAAK,EAAE,OAAO,EAAE,MAAM,MAAM,IAAI,OAAO,IACtC,SAAAA,GAAA,IAAC,WACC,cAAc,OACd,OAAO,kBACP,SAAS,UACT,IAAI,KACJ,YAAY,aACZ,MAAM,QACN,SAAS,aAEb,EACAA,OAAC,QAAK,EAAE,OAAO,EAAE,MAAM,MAAM,IAAI,OAAO,IACtC,SAAAA,GAAA,IAAC,WACC,cAAc,OACd,OAAO,kBACP,SAAS,UACT,IAAI,KACJ,YAAY,aACZ,MAAM,SACN,SAAS,aAEb,EACAA,OAAC,QAAK,EAAE,OAAO,EAAE,OAAO,MAAM,IAAI,OAAO,IACvC,SAAAA,GAAA,IAAC,WACC,cAAc,OACd,OAAO,kBACP,SAAS,UACT,IAAI,KACJ,YAAY,aACZ,MAAM,OACN,SAAS,aAEb,EACAA,OAAC,QAAK,EAAE,MAAM,EAAE,OAAO,MAAM,IAAI,OAAO,IACtC,SAAAA,GAAA,IAAC,WACC,cAAc,OACd,OAAO,kBACP,SAAS,UACT,IAAI,KACJ,YAAY,aACZ,MAAM,SACN,SAAS,aAEb,EACAA,OAAC,QAAK,EAAE,MAAM,EAAE,OAAO,MAAM,IAAI,OAAO,IACtC,SAAAA,GAAA,IAAC,WACC,cAAc,OACd,OAAO,kBACP,SAAS,UACT,IAAI,KACJ,YAAY,aACZ,MAAM,QACN,SAAS,aAEb,EACAA,OAAC,QAAK,EAAE,MAAM,EAAE,MAAM,MAAM,IAAI,OAAO,IACrC,SAAAA,GAAA,IAAC,WACC,cAAc,OACd,OAAO,kBACP,SAAS,UACT,IAAI,KACJ,YAAY,aACZ,MAAM,SACN,SAAS,aAEb,KAlGK,IAqGX,ECpGMhB,GAAwC,CAC5C,WAAY,CACV,QAAS,OACT,cAAe,SACf,WAAY,SACZ,aAAc,SAEd,MAAO,QACP,OAAQ,QAER,gBAAiB,SACnB,EAEA,cAAe,CACb,OAAQ,OACR,MAAO,OACT,EAEA,gBAAiB,CACf,SAAU,GACV,QAAS,OACT,OAAQ,SACR,WAAY,CACd,EAEA,eAAgB,CACd,MAAO,IACP,OAAQ,EACV,EAEA,WAAY,CACV,QAAS,OACT,cAAe,MAEf,OAAQ,GACR,UAAW,GAEX,WAAY,SACZ,aAAc,SACd,aAAc,QAChB,EAEA,iBAAkB,CAChB,SAAU,CACZ,CACF,EAEa4G,IAA6B,IAEtC5F,GAAA,IAAC,QAAK,MAAOhB,GAAO,WAClB,SAACa,GAAA,YAAI,MAAOb,GAAO,cACjB,UAACgB,GAAA,WAAI,MAAOhB,GAAO,eACjB,SAAAgB,OAAC,OAAI,IAAK6F,IAAS,IAAI,eAAe,CACxC,GACChG,GAAA,YAAI,MAAOb,GAAO,WACjB,UAACgB,OAAA,OAAI,MAAOhB,GAAO,gBAAkB,GACpCgB,GAAA,UAAG,MAAOhB,GAAO,gBAAiB,SAAU,sBAC5CuG,IAAiB,KACpB,EACF,EACF,48jBCnEJ,IAAIO,GAA6C,IAQpB,kEAAgB,iBACpB,kEAAgB,gBAGzC,MAAMC,IAAmB,IAAM,SAC7B,MAAMC,GAAuBrC,EAAA,cAAgB,aAAa,QAAQ,sBAAsB,IAA3D,KAAAA,EAAiE,KAEvEmC,IADAlC,EAAA,KAAK,MAAMoC,CAAmB,IAA9B,KAAApC,EAAmC,EAE5D,EAEaqC,GAA8B,KAAO,CAAE,GAAG3H,GAAc,GAAGwH,EAAqB,GAE7F,SAAwBI,IAAeC,EAA4C,CACjF,MAAMC,EAAsBH,KACrB,OAAAI,IAAID,EAAqBD,EAAiB,EAAK,CACxD,CAEO,SAASG,KAAyB,CACvC,MAAMC,EAAcN,KACpB,OAAO,OAAO,KAAKM,CAAW,EAAE,OAAO,CAACC,EAAQC,IAAS,CACvD,MAAM9H,EAAM8H,EAENC,EAAM,CACV,OAAQpI,GAAaK,CAAG,EACxB,SAAUmH,GAAqBnH,CAAG,EAClC,OAAQ4H,EAAY5H,CAAG,GAGzB,MAAO,CAAE,GAAG6H,EAAQ,CAAC7H,CAAG,EAAG+H,CAAI,CACjC,EAAG,CAAoD,EACzD,CAEA,MAAMC,GAAS,IAAM,CACnB,MAAMC,EAAeN,MAEb,aACN,8BACA,wFAEF,QAAQ,MAAMM,CAAY,CAC5B,EAEMC,GAA4BC,GAA0C,CACnDhB,GAAAgB,EACvB,aAAa,QAAQ,uBAAwB,KAAK,UAAUA,CAAe,CAAC,EACrEH,KAGP,SAAS,SAAS,QACpB,EAEMI,GAAM,CAACZ,EAAmCa,IAAmB,CACjE,MAAMC,EAAU,CAAE,CAACd,CAAe,EAAGa,CAAM,EACrCE,EAA0B,CAAE,GAAGpB,GAAsB,GAAGmB,CAAQ,EACtEJ,GAAyBK,CAAuB,CAClD,EAEaC,IAAY,IAAM,CAC7BN,GAAyBO,IAAU9I,GAAc,IAAM,EAAI,CAAC,CAC9D,EAEa+I,IAAW,IAAM,CAE5BR,GADgC,EACgB,CAClD,EAEMS,IAASnB,GAAsC,CAEnD,KAAM,CAAE,CAACA,CAAe,EAAGoB,EAAa,GAAGC,GAAiB1B,GAEtDoB,EAA0B,CAAE,GAAGM,GACrCX,GAAyBK,CAAuB,CAClD,EAEaO,IAAWtB,GAAsCY,GAAIZ,EAAiB,EAAI,EAC1EuB,IAAYvB,GAAsCY,GAAIZ,EAAiB,EAAK,EAEnFwB,IAAqB,CACzB,OAAAhB,GACA,SAAU,CACR,IAAAI,GACA,QAAAU,IACA,SAAAC,IACA,MAAAJ,IACA,SAAAD,GACF,CACF,EAQAtB,MAEO,MAAM6B,IAA2B,SAA2B,CACjE,OAAO,aAAeD,IAEd,uBACN,wCACA,uFACA,yBAEKhB,KACC,aAAK,OAAO,YAAY,EAChC,QAAQ,SAAS,CACnB,mPCxHA,MAAMkB,IAAiB,IAAM,CACfC,GAAA,cACV,uHAEJ,ECAMC,IAAyB,IAAU,IAAM,KAEzCC,IAA+B,IACd,OAAO,aAAa,QAAQ,+BAA+B,IACxD,OAGpBC,GAAgCpJ,GAAmB,CACvD,OAAO,aAAa,QAAQ,gCAAiCA,EAAM,UAAU,CAC/E,EAEaqJ,IACXC,GAEAC,OAAK,SAAY,CACf,MAAMC,EAAmCL,MAErC,IACI,MAAAM,EAAY,MAAMH,IAExB,OAAAF,GAA6B,EAAK,EAE3BK,QACApF,EAAO,CACd,GAAI,CAACmF,EAGH,OAAAJ,GAA6B,EAAI,EACjC,OAAO,SAAS,SAGT,IAAI,QAASM,GAAY,CACtBA,EAAA,CACN,QAASR,IAA0B,EACpC,EACF,EAMG,MAAA7E,CACR,CACF,CAAC,42CCjDS,IAAAsF,QACVA,EAAA,KAAO,QACPA,EAAA,KAAO,QAFGA,QAAA,ICMZC,GAAK,IAAIC,GAAgB,EAAE,IACzBC,IAAmB,MAAOC,EAAkBC,IACnCC,yjFACR,CACH,EAEA,MAAMC,GAAc,GAChB,aAAa,QAAQ,WAAW,IAClCN,GAAK,IAAI,CACP,KAAM,gBACN,KAAM,WACN,QAAS,IAAM,OAChB,EACDM,GAAY,KAAK,UAAU,UAG7B,MAAMC,KAAQrF,GAAA,aAAa,QAAQ,QAAQ,IAA7B,KAAAA,GAAkC6E,GAAc,KAEzDC,GAAK,KAAK,CACb,YAAAM,GACA,IAAKC,IACL,KAAM,cACN,YAAaR,GAAc,KAC3B,UAAW,CAAC,WAAY,QAAQ,EAChC,GAAI,CACF,wBACA,gBACA,qBACA,qBACA,eACA,iBACA,gBACA,QACA,SACA,SACA,WACA,SACA,MACF,EACA,cAAe,CACb,YAAa,GACb,OAAQ,CAAC3J,EAAeoK,IAClBA,IAAW,YACNpK,EAAM,oBAGRA,CAEX,EACA,MAAO,CACL,2BAA4B,GAC5B,2BAA4B,CAAC,KAAM,SAAU,IAAK,IAAK,KAAM,MAAM,CACrE,EACA,MAAO,EACT,CAAC,ECxCDqK,GAAY,CACV,IAAK7K,GAAU,GAAK,6EACpB,aAAc,CAAC,IAAI8K,GAAyB,IAAIC,EAAe,EAC/D,YAAa,UACb,QAAS,UACT,QAAStI,IAAY,SAErB,yBAA0B,IAE1B,yBAA0B,EAI1B,iBAAkB,CACpB,CAAC,GAEA,SAC0B8G,SAG3B,MAAMyB,IAAMnB,IAAc,WAAM,OAAO,mBAAW,gBAAC,sBAEnDL,MAEA,MAAMyB,IAAY,IAChBC,GAAA,OACGvJ,OAAAwJ,GAAM,WAAN,CACC,SAACxJ,OAAAyJ,EAAA,UAAS,SAAUzJ,GAAA,IAAC4F,IAAiB,IACpC,SAAC5F,OAAA0J,GAAA,CACC,SAAC1J,OAAA2J,GAAA,CACC,SAAC3J,GAAA,IAAAwB,IAAA,CACC,SAACxB,OAAA+D,IAAA,CACC,SAAC/D,OAAAiF,IAAA,CACC,SAACjF,GAAA,IAAAqJ,IAAA,EAAI,CACP,EACF,EACF,GACF,CACF,EACF,GACF,EACA,SAAS,eAAe,MAAM,CAChC,EAEF,eAAeO,KAAQ,CAIjBC,MACF,MAAMC,GAAA,WAAO,wBAA6C,OAAAC,KAAA,wBAElDT,KACZ,CAEAM,IAAM","names":["isLocal","featureFlags","featureFlagBySystemID","defaults","t","useLocalStorageClean","key","defaultVal","value","setValue","useLocalStorage","styles","EnvironmentBannerWrapper","children","env","useEnvironment","isProduction","useIsProductionDeployment","bannerDismissedTime","setBannerDismissedTime","handleDismissBannerClick","useCallback","DateTime","useMemo","jsxs","Fragment","Box","jsx","IconButton","CancelIcon","noOpFn","_args","useConfigureSentryEvents","processorAdded","setProcessorAdded","useState","eventProcessor","event","useEffect","scope","Sentry.getCurrentHub","environment","blackHoleLogger","loggerInstance","useLogger","forcedLogging","OnlineStatus","onlineStatusFromBrowser","defaultValue","OnlineStatusContext","createContext","OnlineStatusContextProvider","log","status","setStatus","updateConnectionStatus","newStatus","reason","markConnectionOnline","markConnectionOffline","onNavigatorEvent","evt","useEvent","useOnlineStatus","ctx","useContext","FETCH_INTERVAL_MS","fetcher","url","r","randomFirstInterval","useFetchEnvJson","fetchState","setFetchState","refreshInterval","data","useSWR","error","useIsNewReleaseAvailableDetector","isNewRelease","setIsNewRelease","previousActiveRelease","usePrevious","defaultDeployment","defaultRelease","initialEnvironmentDetails","_a","_b","initialContextValue","EnvContext","EnvContextProvider","setEnv","envJson","isNewReleaseAvailable","providerValue","useContextInternal","useIsNewReleaseAvailable","appInsights","reactPlugin","ReactPlugin","initializeAppInsights","connectionString","history","ai","ApplicationInsights","envelope","isAppInsightsInitialized","getAppInsights","TelemetryProvider","useHistory","setReactPlugin","AppInsightsContext","logo","DELAY_MS","LoadingAnimation","immediate","width","isReady","useTimeout","FullScreenLoader","logoImg","featureFlagOverrides","hydrateOverrides","flagOverridesString","getFeatureFlagWithOverrides","hasFeatureFlag","featureFlagName","currentFeatureFlags","get","getFeatureFlagStatuses","resultFlags","result","_key","row","report","reportValues","storeFeatureFlagOverride","newFeatureFlags","set","state","newFlag","newFeatureFlagOverrides","enableAll","mapValues","resetAll","reset","flagRemoved","currentFlags","setTrue","setFalse","windowFeatureFlags","initFeatureFlagOverrides","initMuiLicense","LicenseInfo","nullReturningFnBuilder","getPageHasBeenForceRefreshed","setPageHasBeenForceRefreshed","lazyWithRetry","componentImport","lazy","pageHasAlreadyBeenForceRefreshed","component","resolve","WaterlyLocals","i18n","initReactI18next","resourcesToBackend","language","namespace","__variableDynamicImportRuntimeHelper","postProcess","local","format","Sentry.init","Sentry.BrowserTracing","Sentry.Replay","App","renderApp","render","React","Suspense","BrowserRouter","CompatRouter","start","shouldPolyfill","__vitePreload","n"],"sources":["../../../../src/apps/waterly-frontend/src/app/config/featureFlags.ts","../../../../src/apps/waterly-frontend/src/app/hooks/useLocalStorageClean.ts","../../../../src/apps/waterly-frontend/src/app/ui/global/EnvironmentBannerWrapper.tsx","../../../../src/apps/waterly-frontend/src/app/util/noOpFunction.ts","../../../../src/apps/waterly-frontend/src/app/context/internal/useConfigureSentryEvents.ts","../../../../src/apps/waterly-frontend/src/environments/environment.ts","../../../../src/apps/waterly-frontend/src/app/hooks/useLogger.ts","../../../../src/apps/waterly-frontend/src/app/context/OnlineStatusContext.tsx","../../../../src/apps/waterly-frontend/src/app/context/internal/useFetchEnvJson.ts","../../../../src/apps/waterly-frontend/src/app/context/internal/useIsNewReleaseAvailableDetector.ts","../../../../src/apps/waterly-frontend/src/app/context/EnvContext.tsx","../../../../src/apps/waterly-frontend/src/appInsights.ts","../../../../src/apps/waterly-frontend/src/app/providers/TelemetryProvider.tsx","../../../../src/apps/waterly-frontend/src/app/ui/assets/logo.svg","../../../../src/apps/waterly-frontend/src/app/ui/loaders/loadingAnimation.tsx","../../../../src/apps/waterly-frontend/src/app/ui/loaders/fullScreenLoader.tsx","../../../../src/apps/waterly-frontend/src/app/util/featureFlagsUtilities.ts","../../../../src/apps/waterly-frontend/src/app/util/initMuiLicense.ts","../../../../src/apps/waterly-frontend/src/app/util/lazyWithRetry.ts","../../../../src/apps/waterly-frontend/src/locales/index.ts","../../../../src/apps/waterly-frontend/src/initI18next.ts","../../../../src/apps/waterly-frontend/src/main.tsx"],"sourcesContent":["export const isDevelopment = window.location.hostname === \"app.dev.waterlyapp.com\";\nexport const isLocal = window.location.hostname === \"localhost\";\n\nconst featureFlags = {\n numberInputForIOS: false,\n showSampleManagement: false,\n enableAuditEventsSubscription: false,\n enableLocalization: false,\n enableScheduleManagement: false,\n enableSampleManagement: false,\n enterpriseReporting: true,\n};\n\nexport type FeatureFlags = typeof featureFlags;\nexport type FeatureFlagsEnum = keyof FeatureFlags;\n\nexport const featureFlagBySystemID: Partial<{ [key in FeatureFlagsEnum]: number[] }> = {\n enableScheduleManagement: [\n 10, // Lake Zebra, IL\n 26, // West Dundee, IL\n 899, // Arlington Heights IL\n 1040, //\tCRWA - Wild Wings WW\n 1041, //\tCRWA - Wild Wings\n 1109, //\tCRWA - NBRID WW\n 1108, //\tCRWA - LSA South Shore WW\n /** Start - Singh Operations **/\n 954, // SOS - SAG\n 920, // SOS - Calvert Gateway\n 910, // SOS - Calvert Gateway WW\n 1021, // SOS - Boones Estates WW\n 1020, // SOS - Lyons Creek WW\n 1022, // SOS - Maryland Manor WW\n 1014, // SOS - SAG WW\n 1015, // SOS - Boones Estates\n 1018, // SOS - Idlewood\n 1013, // SOS - Lyons Creek\n 1016, // SOS - Maryland Manor\n 1017, // SOS - Patuxent MHP\n 1023, // SOS - Patuxent WW\n /** End - Singh Operations **/\n 1115, // Golden Hills CSD\n 1165, // Golden Hills Lands\n /** Start - Edinburgh, IN **/\n 75, // 💧 Edinburgh, IN\n 1036, // 💩 Edinburgh, IN\n 1161, // 📝Supt Log\n 1162, // 🏋️‍♂️ Edinburgh, IN\n /** End - Edinburgh, IN **/\n 752, // Ramsey Water Company\n 1163, //\tEJW - Witt\n 1170, //\tEJW - Delbert\n 915, //\tAnimas Water\n 131, // Mukwonago, WI\n 1007, // Mukwonago, WI - Wastewater,\n 771, // Gurnee, IL WW\n 772, // Gurnee, IL Water,\n 48, // Mount Zion, IL\n 119, //\tBartlett, IL Water\n ],\n};\n\nexport default featureFlags;\n","import { t } from \"i18next\";\nimport { useLocalStorage } from \"react-use\";\n\nimport type { DropdownOption } from \"../ui/shared/AutoComplete/utils\";\n\ntype DefaultTypes = {\n editMode: boolean;\n showHiddenAndArchived: boolean;\n bannerDismissedTime: string;\n overviewStateFilter: DropdownOption;\n overviewFavoritesFilter: boolean;\n};\n\nconst defaults: DefaultTypes = {\n editMode: false,\n showHiddenAndArchived: false,\n bannerDismissedTime: \"\",\n overviewStateFilter: { id: \"ALL_STATES\", displayName: t(\"common:all_states\") },\n overviewFavoritesFilter: false,\n};\n\nexport type StorageKeys = keyof typeof defaults;\n\nexport const useLocalStorageClean = (key: K, defaultVal?: DefaultTypes[K]) => {\n const [value, setValue] = useLocalStorage(key, defaultVal ?? defaults[key]);\n\n if (value === undefined) {\n return [defaults[key], setValue] as const;\n }\n\n return [value, setValue] as const;\n};\n","import type { PropsWithChildren } from \"react\";\nimport { useCallback, useMemo } from \"react\";\n\nimport CancelIcon from \"@mui/icons-material/CancelOutlined\";\nimport Box from \"@mui/material/Box\";\nimport IconButton from \"@mui/material/IconButton\";\nimport type { Theme } from \"@mui/material/styles\";\nimport type { SystemStyleObject } from \"@mui/system/styleFunctionSx/styleFunctionSx\";\nimport { DateTime } from \"luxon\";\n\nimport { useEnvironment, useIsProductionDeployment } from \"../../context/EnvContext\";\nimport { useLocalStorageClean } from \"../../hooks/useLocalStorageClean\";\n\nconst styles: { [name: string]: SystemStyleObject } = {\n bannerBox: {\n position: \"sticky\",\n top: 0,\n left: 0,\n right: 0,\n height: 0,\n\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n textAlign: \"right\",\n\n backgroundColor: \"orange\",\n\n typography: \"body2\",\n\n transition: \"all 0.5s ease\",\n },\n\n bannerBoxDisplayed: {\n height: \"1.5rem\",\n },\n\n appWrapper: {\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: 0,\n height: \"100vh\",\n\n transition: \"all 0.5s ease\",\n },\n\n appWrapperBoxDisplayed: {\n top: \"1.5rem\",\n height: `calc(100vh - 1.5rem)`,\n },\n\n bannerText: {\n display: \"inline\",\n\n whiteSpace: \"nowrap\",\n marginLeft: 0.25,\n marginRight: 0.25,\n },\n\n boldText: {\n fontWeight: \"bold\",\n },\n};\n\nconst EnvironmentBannerWrapper = ({ children }: PropsWithChildren) => {\n const env = useEnvironment();\n const isProduction = useIsProductionDeployment();\n const [bannerDismissedTime, setBannerDismissedTime] = useLocalStorageClean(\"bannerDismissedTime\");\n\n const handleDismissBannerClick = useCallback(() => {\n setBannerDismissedTime(DateTime.now().toISO());\n }, [setBannerDismissedTime]);\n\n const bannerDismissed = useMemo(() => {\n return DateTime.now().hasSame(DateTime.fromISO(bannerDismissedTime), \"day\");\n }, [bannerDismissedTime]);\n\n const showBanner = !(bannerDismissed || isProduction);\n\n if (showBanner) {\n return (\n <>\n \n Warning:\n Non-production environment\n {env.Deployment}\n \n \n \n \n {children}\n \n );\n } else {\n return <>{children};\n }\n};\n\nexport default EnvironmentBannerWrapper;\n","export const noOpFn = (_args?: unknown) => {\n /* no-op */\n};\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport * as Sentry from \"@sentry/react\";\nimport type { Event, EventProcessor } from \"@sentry/types\";\n\nimport type { EnvJson } from \"./useFetchEnvJson\";\n\nexport const useConfigureSentryEvents = (env: EnvJson) => {\n const [processorAdded, setProcessorAdded] = useState(false);\n\n const eventProcessor = useCallback(\n (event: Event) => {\n event.environment = env.deployment;\n event.release = `frontend-main@${env.release}`;\n return event;\n },\n [env.deployment, env.release],\n );\n\n useEffect(() => {\n const scope = Sentry.getCurrentHub().getScope();\n\n if (!scope || processorAdded) {\n return;\n }\n\n scope.addEventProcessor(eventProcessor);\n setProcessorAdded(true);\n }, [env.release, eventProcessor, processorAdded]);\n};\n","export const environment = {\n deployed: import.meta.env.MODE === \"production\",\n};\n","import { environment } from \"../../environments/environment\";\nimport { noOpFn } from \"../util/noOpFunction\";\n\ntype LogObj = Pick<\n typeof console,\n \"log\" | \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"table\" | \"group\" | \"groupEnd\"\n>;\n\nexport type LoggerOptions = {\n forcedLogging?: boolean;\n};\n\nconst blackHoleLogger: LogObj = {\n log: () => noOpFn,\n trace: () => noOpFn,\n debug: () => noOpFn,\n info: () => noOpFn,\n warn: () => noOpFn,\n error: () => noOpFn,\n table: () => noOpFn,\n group: () => noOpFn,\n groupEnd: () => noOpFn,\n};\n\nconst loggerInstance: LogObj = environment.deployed ? blackHoleLogger : console;\n\n/**\n * Usage:\n * ```\n * import useLogger from \"../hooks/useLogger\";\n * const MyComponent = () => {\n * const log = useLogger();\n * log.info(\"Such Water Wow!\");\n * }\n * ```\n */\nconst useLogger = ({ forcedLogging }: LoggerOptions = { forcedLogging: false }): LogObj => {\n if (forcedLogging) {\n return console;\n }\n\n return loggerInstance;\n};\n\nexport default useLogger;\n","import type { FC } from \"react\";\nimport React, { createContext, useCallback, useContext, useMemo, useState } from \"react\";\n\nimport { useEvent } from \"react-use\";\n\nimport useLogger from \"../hooks/useLogger\";\nimport { noOpFn } from \"../util/noOpFunction\";\n\nexport enum OnlineStatus {\n online = \"online\",\n offline = \"offline\",\n}\n\ntype OnlineStatusContextValue = {\n status: OnlineStatus;\n markConnectionOnline: (reason: string) => void;\n markConnectionOffline: (reason: string) => void;\n};\n\nconst onlineStatusFromBrowser = () => (window.navigator.onLine ? OnlineStatus.online : OnlineStatus.offline);\n\nconst defaultValue: OnlineStatusContextValue = {\n status: onlineStatusFromBrowser(),\n markConnectionOnline: noOpFn,\n markConnectionOffline: noOpFn,\n};\n\nconst OnlineStatusContext = createContext(defaultValue);\n\nconst OnlineStatusContextProvider: FC = ({ children }) => {\n const log = useLogger();\n const [status, setStatus] = useState(() => onlineStatusFromBrowser());\n\n const updateConnectionStatus = useCallback(\n (newStatus: OnlineStatus, reason: string) => {\n log.info(`Received ${newStatus} event: ${reason}`);\n setStatus(newStatus);\n },\n [log],\n );\n\n const markConnectionOnline = useCallback(\n (reason: string) => updateConnectionStatus(OnlineStatus.online, reason),\n [updateConnectionStatus],\n );\n\n const markConnectionOffline = useCallback(\n (reason: string) => updateConnectionStatus(OnlineStatus.offline, reason),\n [updateConnectionStatus],\n );\n\n const onNavigatorEvent = useCallback(\n (evt: Event) => {\n updateConnectionStatus(\n evt.type === \"online\" ? OnlineStatus.online : OnlineStatus.offline,\n `browser updated online status to: ${evt.type}`,\n );\n },\n [updateConnectionStatus],\n );\n\n useEvent(\"online\", onNavigatorEvent);\n useEvent(\"offline\", onNavigatorEvent);\n\n const value = useMemo(\n () => ({\n status,\n markConnectionOnline,\n markConnectionOffline,\n }),\n [markConnectionOffline, markConnectionOnline, status],\n );\n\n return {children};\n};\n\nexport default OnlineStatusContextProvider;\n\nexport const useOnlineStatus = () => {\n const ctx = useContext(OnlineStatusContext);\n if (!ctx) {\n throw new Error(\"useOnlineStatus() may only be used from a child of OnlineStatusContext.\");\n }\n return ctx;\n};\n","import { useCallback, useState } from \"react\";\n\nimport useSWR from \"swr\";\n\nimport { useOnlineStatus } from \"../OnlineStatusContext\";\n\nexport type EnvJson = {\n deployment: \"dev\" | \"prod\" | \"local\" | string;\n release: \"pending\" | string;\n ga_id?: \"unknown\" | string;\n ai?: string;\n};\n\ntype FetchState = \"initializing\" | \"staggered\" | \"continuing\";\n\nconst FETCH_INTERVAL_MS = 30_000;\n\n/**\n * (Small shim here used by swr - this should be moved to a util if we end up using SWR anywhere else)\n */\nconst fetcher = (url: string) => fetch(url).then((r) => r.json());\n\n/**\n * Returns a random interval value between FETCH_INTERVAL_MS and 2 * FETCH_INTERVAL_MS\n */\nconst randomFirstInterval = () => FETCH_INTERVAL_MS + Math.floor(Math.random() * FETCH_INTERVAL_MS);\n\n/**\n * A hook that fetches (and re-fetches) /env.json on a regular basis and returns its contents.\n *\n * This hook leverages suspense mode, so that a parent suspense block will... block the UI until\n * the first data is fetched. The return value from this hook is guaranteed to be defined.\n *\n * The rules for the refresh intervals are as follows:\n * - When the hook is first loaded, it uses a tiny refresh interval (1ms) to ensure that env.json is requested immediately.\n * - The second interval is a random value, to avoid refresh \"storms\" if many browsers come back online at the same time,\n * so that we can spread out the requests.\n * - All subsequent requests use the constant value (FETCH_INTERVAL_MS) defined in this module.\n */\nexport const useFetchEnvJson = () => {\n /**\n * fetchState is a tiny state machine. It only traverses forward: initializing -> staggered -> continuing.\n */\n const [fetchState, setFetchState] = useState(\"initializing\");\n\n const { markConnectionOffline } = useOnlineStatus();\n\n /**\n * Returns an appropriate refresh interval for the current fetchState and, as a side effect,\n * pushes the fetchState forward.\n */\n const refreshInterval = useCallback(() => {\n switch (fetchState) {\n case \"initializing\":\n setFetchState(\"staggered\");\n return 1;\n case \"staggered\":\n setFetchState(\"continuing\");\n return randomFirstInterval();\n case \"continuing\":\n return FETCH_INTERVAL_MS;\n }\n }, [fetchState]);\n\n const { data } = useSWR(\"/env.json\", fetcher, {\n suspense: true,\n refreshInterval: refreshInterval,\n onError: (error: Error) => {\n markConnectionOffline(`fetchEnv failed: ${error.message}`);\n },\n });\n\n if (!data) {\n // suspense mode in swr guarantees data is set\n throw new Error(\"Unexpectedly did not have environment data available\");\n }\n\n return data;\n};\n","import { useEffect, useState } from \"react\";\n\nimport { usePrevious } from \"react-use\";\n\nimport type { EnvJson } from \"./useFetchEnvJson\";\n\nexport const useIsNewReleaseAvailableDetector = (env?: EnvJson) => {\n const [isNewRelease, setIsNewRelease] = useState(false);\n const previousActiveRelease = usePrevious(env?.release);\n\n useEffect(() => {\n if (isNewRelease || !env || previousActiveRelease === undefined) {\n return;\n }\n\n if (env.release !== previousActiveRelease) {\n setIsNewRelease(true);\n }\n }, [env, isNewRelease, previousActiveRelease]);\n\n return isNewRelease;\n};\n","import React, { createContext, useContext, useMemo, useState } from \"react\";\n\nimport EnvironmentBannerWrapper from \"../ui/global/EnvironmentBannerWrapper\";\nimport { noOpFn } from \"../util/noOpFunction\";\n\nimport { useConfigureSentryEvents } from \"./internal/useConfigureSentryEvents\";\nimport type { EnvJson } from \"./internal/useFetchEnvJson\";\nimport { useFetchEnvJson } from \"./internal/useFetchEnvJson\";\nimport { useIsNewReleaseAvailableDetector } from \"./internal/useIsNewReleaseAvailableDetector\";\n\nexport type EnvironmentDetails = {\n BuildId: string;\n CommitSHA: string;\n Deployment: EnvJson[\"deployment\"] | \"pending\";\n Release: string;\n AnalyticsId: \"unknown\" | string;\n AppInsightsConnectionString?: string;\n};\n\ntype ContextValue = {\n env: EnvironmentDetails;\n setEnv: (newEnv: EnvironmentDetails) => void;\n isNewReleaseAvailable: boolean;\n};\n\nexport const defaultDeployment = \"pending\";\nexport const defaultRelease = \"pending\";\n\nconst initialEnvironmentDetails: EnvironmentDetails = {\n BuildId: import.meta.env.NX_BUILD_ID ?? \"unknown\",\n CommitSHA: import.meta.env.NX_BUILD_SHA ?? \"unknown\",\n Deployment: defaultDeployment,\n Release: defaultRelease,\n AnalyticsId: \"unknown\",\n};\n\nconst initialContextValue: ContextValue = {\n env: initialEnvironmentDetails,\n setEnv: noOpFn,\n isNewReleaseAvailable: false,\n};\n\nconst EnvContext = createContext(initialContextValue);\n\nexport const EnvContextProvider: React.FC = ({ children }) => {\n const [env, setEnv] = useState(() => initialEnvironmentDetails);\n const envJson = useFetchEnvJson();\n const isNewReleaseAvailable = useIsNewReleaseAvailableDetector(envJson);\n useConfigureSentryEvents(envJson);\n\n const providerValue = useMemo(() => {\n return {\n env: {\n ...env,\n Deployment: envJson.deployment,\n Release: `frontend-main@${envJson.release}`,\n AnalyticsId: envJson.ga_id ?? \"unknown\",\n AppInsightsConnectionString: envJson.ai,\n },\n setEnv,\n isNewReleaseAvailable,\n };\n }, [env, envJson.ai, envJson.deployment, envJson.ga_id, envJson.release, isNewReleaseAvailable]);\n\n return (\n \n {children}\n \n );\n};\n\nconst useContextInternal = (): ContextValue => {\n const ctx = useContext(EnvContext);\n if (!ctx) {\n throw new Error(\"useEnvironment may only be used in a descendant of EnvContextProvider.\");\n }\n\n return ctx;\n};\n\nexport const useEnvironment = () => useContextInternal().env;\n\nexport const useIsProductionDeployment = () => {\n const env = useContextInternal().env;\n return useMemo(() => [\"pending\", \"prod\"].includes(env.Deployment), [env]);\n};\n\nexport const useIsNewReleaseAvailable = () => {\n return useContextInternal().isNewReleaseAvailable;\n};\n","import { ReactPlugin } from \"@microsoft/applicationinsights-react-js\";\nimport type { ITelemetryPlugin } from \"@microsoft/applicationinsights-web\";\nimport { ApplicationInsights } from \"@microsoft/applicationinsights-web\";\nimport type { History } from \"history\";\n\nlet appInsights: ApplicationInsights | undefined;\n\nexport const reactPlugin = new ReactPlugin();\n\nexport const initializeAppInsights = (\n connectionString: string,\n history: History,\n): [appInsights: ApplicationInsights | undefined, reactPlugin: ReactPlugin] => {\n const ai = new ApplicationInsights({\n config: {\n connectionString,\n // Ugh. Some issues with typing conflicts currently. Can be removed once we've fully consumed\n // the result from https://github.com/microsoft/applicationinsights-react-js/issues/32\n extensions: [reactPlugin as unknown as ITelemetryPlugin],\n isBeaconApiDisabled: true,\n disableTelemetry: false,\n disableCorrelationHeaders: false,\n autoTrackPageVisitTime: true,\n enableAutoRouteTracking: false, // reactPlugin catches this\n enableCorsCorrelation: true,\n enableRequestHeaderTracking: true,\n enableResponseHeaderTracking: true,\n enableAjaxErrorStatusText: true,\n enableAjaxPerfTracking: true,\n enableUnhandledPromiseRejectionTracking: true,\n correlationHeaderDomains: [\"app.waterlyapp.com\", \"app.dev.waterlyapp.com\"],\n samplingPercentage: 10,\n extensionConfig: {\n [reactPlugin.identifier]: {\n history,\n },\n },\n },\n });\n\n ai.addTelemetryInitializer((envelope) => {\n envelope.tags = envelope.tags ?? [];\n envelope.tags[\"ai.cloud.role\"] = \"WaterlyFrontend\";\n });\n\n ai.loadAppInsights();\n\n ai.trackPageView();\n appInsights = ai;\n\n return [ai, reactPlugin];\n};\n\nexport const isAppInsightsInitialized = () => !!appInsights;\n\nexport const getAppInsights = () => {\n if (!appInsights) {\n throw new Error(\"Application Insights has not yet been initialized\");\n }\n\n return appInsights;\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport type { ReactPlugin } from \"@microsoft/applicationinsights-react-js\";\nimport { AppInsightsContext } from \"@microsoft/applicationinsights-react-js\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { initializeAppInsights, isAppInsightsInitialized } from \"../../appInsights\";\nimport { useEnvironment } from \"../context/EnvContext\";\n\nconst TelemetryProvider: React.FC = ({ children }) => {\n const env = useEnvironment();\n const history = useHistory();\n const [reactPlugin, setReactPlugin] = useState(undefined);\n\n useEffect(() => {\n if (env.AppInsightsConnectionString && !isAppInsightsInitialized()) {\n // @ts-expect-error - history is a strange type\n const [, reactPlugin] = initializeAppInsights(env.AppInsightsConnectionString, history);\n setReactPlugin(reactPlugin);\n }\n // Specifically do *not* include history here as we'll assume it exists at this point. It changes constantly.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [env.AppInsightsConnectionString]);\n\n if (reactPlugin) {\n return {children};\n } else {\n return <>{children};\n }\n};\n\nexport default TelemetryProvider;\n","export default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjMwIDE2IDEyNCAzMyIgZmlsbC1ydWxlPSJldmVub2RkIj4NCiAgICA8c3R5bGU+DQogICAgICAgIEBmb250LWZhY2V7Zm9udC1mYW1pbHk6JnF1b3Q7Um9ib3RvJnF1b3Q7O3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUFjTUFBd0FBQUFBQ1dBQUFpTVNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJIVUU5VEFBQUJIQUFBQUo4QUFBRG1Cbmp1UEU5VEx6SUFBQUc4QUFBQVVRQUFBR0IwYnhFelkyMWhjQUFBQWhBQUFBQnRBQUFCZWdnZ0VHSm5ZWE53QUFBQ2dBQUFBQXdBQUFBTUFBZ0FFMmRzZVdZQUFBS01BQUFDU2dBQUFuQm5qVDFJYUdWaFpBQUFCTmdBQUFBMUFBQUFOZ2dWMEgxb2FHVmhBQUFGRUFBQUFCb0FBQUFrQjI0RkwyaHRkSGdBQUFVc0FBQUFKQUFBQUNRZ1F3S3liRzlqWVFBQUJWQUFBQUFVQUFBQUZBSzBBM2h0WVhod0FBQUZaQUFBQUJnQUFBQWdBQThBS201aGJXVUFBQVY4QUFBQmVRQUFBbi92UUFXWmNHOXpkQUFBQnZnQUFBQVVBQUFBSVA5dEFHMTRuRDJOTVFyQ1lBeUZ2L3l0VlJ3Y0hCeCtQSVI0QUFjUkp3Y0hMeUJhSEZvNkZCZFhUK2ttenVJZ0hpQ21hVFVoeWVQeDhoNENESm14SUYydE56dmk0VktYeEZPZEY4UnlmNjZJcEtaQmxVWXJSVjVYREJya2t4THNCcTdtRWxpNjlzaVducldYdnVsS1ArMytNZnJTRzJOSEQ3MDdKZllWU013bHN3d3gzUGNFNlN5U1A5Zm1KNTR0akp3SlRKbTRJdGkvbUc1dU85UG5GeC84SHBNQWVKeGpZR0dleWppQmdaV0JnWFVXcXpFREE2TThoR2EreUpER3hNREFBTUlRME1EQW9DNEFZU3FBQ0hkL2YzY0dCeUM3a28zaEh3TkRHdnNzSmlDSGNUNUlqc1dLZFFPUW84REFEQUFMcGdzZUFBQUFlSnhqWUdCZ1pvQmdHUVpHQmhBb0FmSVl3WHdXaGdnZ0xjUWdBQlJoWWxCZ0NHZElaRWhseUdFb0FxcXAvUDhmS0ljaDl2L2gvOVgvRi8yZi8zL20veW4vSi8vdmg1cUpCaGpac0ltaXFTR3NCQnRnZ3JOQWZtS0JNRm5CSkJzRE80amlJTTlnYWdNQS85NFlod0FBQUFBQkFBSUFDQUFDLy84QUQzaWNWVkpOU0ZSUkZEN24zdmZlYVBuM2JONDhBdE41ODNJY0M0em0rZDZFWlRtQlZKUmhnU2xGQTVvdVdwU0pVa0VwdUxIQkVwRktBd1d0aEFnS0I3UkEzUmc0UlJNdElqZVJ0U2czaWJtb1RhanYya2xYbmNXNUhNNjk1L3ZPOTEyUW9SR0FoK1FFY0ZBZ0hUSWdHNkRRVUEydXBxT0szRUFiRFI1eUQ3QlpSeXlMS2N4WVlGd0laSzRMY21KbFZQYTQ3ZXphcXNxdXV6RVdpN01ZL0I4STVRREtUNXFmUzRVZVFZdlNOZ3ROTFBKUXN2QjdYakg2SCtIMlVNRzNWMko0VE16cHVuZzdKa1ptOE4zTWMvNW5MUzB4eXhkV3FxWEM1dWJWenpTR2dzR2w5U1crS0oyRWZBZ1IyMkNSWWdhQ2R1bk8vV2lYQnMyQW9wbWxCOUVLKzNUVnEydUZZU2RpbTM3TjYrT2huQzJkNHlQdkVYOU10TFZjNkpwcVRWNmRucE9DWW12dGtOa25ucldCLzNUWGk5dFBwMnZxV3h1UG5CcW9teDRWV2ZmcmNuck9IdjM2cHJhQmNNOFQ3bS9DMVdBSGdCeUFjdHdBeWxVMUk1OU9KNklyR0ZBOGhsMkNyR3BlTE4zNDB2bHgwVFdsOGU2R3VOVVNGNSt1UE1obCtXbHhMeHEvQWcvZFhyRW8zS3FSWlBYaHVnODg5Zmh1VnMvZ3BtWkRsR29VTW9hMk0xVUxheVlueVozTjNoMFNZSUE0WkZKQnkzcFV1cUE3VmxobkE3djJ2b3hPVHZCelQ1dzhmczh6NklKVTF0NlhSVy9TMTVmWUdibUNlQU9xbG1hcVhwOFZqbWdic3FtbWJhbDRLNVZ5b3Y1OXh5cHZkaVNUY29WWTZYWHJvOUdNZm05L054dnVSV1VUMnllTzg0UlU5dStQSUpuSXpEMW82MkhuRUpLUnkydXZSVlhUdkZrWmpsME1GSXVPRkdiejNhc0Y0aGZQN0pkT05GMldTbWpFWDFkMHNQWUFBSGljWTJCa1lHQmdVaGE2YitPK09aN2Y1aXVISkFjRENCejVJS2dIb3E4eUJuMWg0UHpuemZhV0RjVGxaR0FDVVFBenl3cDdBQUFBZUp4allHUmdZTS81eHdNa0pSa2dnSkVCRlhBQ0FEQ2NBYWtBQUFPTUFHUUIrd0FBQnhrQVBRUmFBRzBFUFFCZEFmRUFuQUsxQUl3Q25RQUpBOGtBRmdBQUFDb0FNQUJhQUpZQXlnRFlBUElCRmdFNGVKeGpZR1JnWU9CazBHUmdaUUFCUmdZMEFBQUZ0d0E2ZUp4ZGtzOXF3a0FReHIvNHI1U0tGSHJvcFllRlFnOEZOMUVwZ3ZaaVJhd2dIbUx4VWlqRXVFUWhaRU1TRlorajc5VDM2UU1VK2lVdUZwdGxkbjh6Mzh6c0xBVEFOYjVnNGZqWnRDTmJxTkU3Y2drWGVESmNadnpaY0lYOFlyaUtHN3dhcnFHQmQ4TU5QR0xES3F0eVNlOERuNFl0MVBGdHVNU3NIOE5sMUswcnd4WHlyZUVxSHF4N3d6WGNXUlBERGJ4WmFxampRN0lKMXBsb082MldHR3NkaEVwTUlsK0tRUmdLTjVkUzRhcFVKVHUxa3E1ZTZreTdLdGlHWG1LY1lsK29KTjNvU0xSbHE5UHQ1ODI2UjZGcGt0ZFpGdmRzZTcvZlN5LzIvTFdTT2duc2NPT3JLRldwUFowTVI3UDVxTm1XRG9iUWlIRkF3dWNIV0NPRFFCc09XbHdDWTZxYThSQ0szZ1FSZkVqU2dKR1FwM3VxU2d0UDhWVHN0ZU8rWXFiTDZpVXRvK1ZxZ0MzclBHYWNLMys4S09wVDl0VzhMWjlGY3BJT3V1aWZKdXVlVlRUL2RjNm55ZmltSG44TUcvdGlTU294emFlcTZHbm1CVlJEM3VNekVoVnpwNHhNK2NvaFJwaGh6cjFaM08vOEF2cWVib1VBQUFCNG5HTmdaZ0NELzFrTUtReVlnQk1BS2lnQjJnPT0pIGZvcm1hdCgmcXVvdDt3b2ZmJnF1b3Q7KTtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWx9DQogICAgPC9zdHlsZT4NCiAgICA8dGV4dCBmb250LWZhbWlseT0iUm9ib3RvLU1lZGl1bSwgUm9ib3RvIiBmb250LXNpemU9IjI4IiBmaWxsPSIjZmZmIj4NCiAgICAgICAgPHRzcGFuIHg9IjU5IiB5PSI0MiI+V2F0ZXJseTwvdHNwYW4+DQogICAgPC90ZXh0Pg0KICAgIDxwYXRoIGQ9Ik0zNS4xMyA0MC42NGEuODMuODMgMCAwIDEtLjctLjM4IDYuNzYgNi43NiAwIDAgMS0xLjEtMy43YzAtMi41NSAxLjAyLTQuMiAyLjI1LTUuOTZhLjgzLjgzIDAgMCAxIDEuMTYtLjIuODUuODUgMCAwIDEgLjIgMS4xN0MzNS44NCAzMy4xNCAzNSAzNC41IDM1IDM2LjU1YzAgMSAuMjggMS45NS44MiAyLjc4YS44NS44NSAwIDAgMS0uMjMgMS4xNy44NC44NCAwIDAgMS0uNDYuMTR6IiBmaWxsPSIjZmZmIi8+DQogICAgPHBhdGggZD0iTTQwIDIwLjNhNTYuNzYgNTYuNzYgMCAwIDAgNC4zMyA2LjgzYzIuMzIgMy4yNyA0IDUuNjMgNCA5LjQzIDAgNC42NC0zLjczIDguNDItOC4zMyA4LjQycy04LjMzLTMuNzgtOC4zMy04LjQyYzAtMy44IDEuNjgtNi4xNiA0LTkuNDNBNTQuOTggNTQuOTggMCAwIDAgNDAgMjAuMjl6bTAtMy45NmMtNC4xNyAxMC4xLTEwIDEyLjYzLTEwIDIwLjIxIDAgNS41OSA0LjQ4IDEwLjExIDEwIDEwLjExczEwLTQuNTIgMTAtMTAuMWMwLTcuNTktNS44My0xMC4xMi0xMC0yMC4yMnoiIGZpbGw9IiM0M2MxYzMiLz4NCjwvc3ZnPg==\"","import { useTimeout } from \"react-use\";\n\nexport type LoadingAnimationProps = {\n immediate?: boolean;\n width?: number;\n};\n\nconst DELAY_MS = 300;\n\nexport const LoadingAnimation = ({ immediate = true, width = 24 }: LoadingAnimationProps) => {\n const [isReady] = useTimeout(immediate ? 0 : DELAY_MS);\n\n if (!isReady()) {\n return null;\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import type { CSSProperties } from \"react\";\nimport React from \"react\";\n\nimport logoImg from \"../assets/logo.svg\";\n\nimport { LoadingAnimation } from \"./loadingAnimation\";\n\n/**\n * This loader very specifically should *not* incorporate material-ui or other\n * larger libraries, as it is used primarily in Suspense fallbacks to allow for\n * a better experience while lazy-loading larger libraries and components.\n * (Inline styles aren't very nice, but in use here to avoid importing mui-styles)\n */\n\nconst styles: Record = {\n loaderMain: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyItems: \"center\",\n\n width: \"100vw\",\n height: \"100vh\",\n\n backgroundColor: \"#1c2b35\",\n },\n\n loaderContent: {\n margin: \"auto\",\n color: \"white\",\n },\n\n loaderContentH1: {\n fontSize: 20,\n display: \"flex\",\n margin: \"0 10px\",\n flexShrink: 1,\n },\n\n loaderMainLogo: {\n width: 300,\n height: 80,\n },\n\n loaderText: {\n display: \"flex\",\n flexDirection: \"row\",\n // width: \"100%\",\n height: 30,\n marginTop: 10,\n\n alignItems: \"center\",\n justifyItems: \"center\",\n alignContent: \"center\",\n },\n\n loaderTextSpacer: {\n flexGrow: 1,\n },\n};\n\nexport const FullScreenLoader: React.FC = () => {\n return (\n
\n
\n
\n \"Waterly\n
\n
\n
\n

Loading...

\n \n
\n
\n
\n );\n};\n","/* eslint-disable no-console, @typescript-eslint/no-explicit-any */\nimport get from \"lodash/get\";\nimport mapValues from \"lodash/mapValues\";\n\nimport featureFlags, { type FeatureFlags, type FeatureFlagsEnum } from \"../config/featureFlags\";\n\ntype FeatureFlagOverrides = Partial;\nlet featureFlagOverrides: FeatureFlagOverrides = {};\n\nexport type FeatureFlagStatus = {\n before: boolean;\n override?: boolean;\n result: boolean;\n};\n\nexport const isDevelopment = import.meta.env.REACT_APP_STAGE === \"development\";\nexport const isStaging = import.meta.env.REACT_APP_STAGE === \"staging\";\nexport const isDevelopmentOrStaging = isDevelopment || isStaging;\n\nconst hydrateOverrides = () => {\n const flagOverridesString = (localStorage && localStorage.getItem(\"featureFlagOverrides\")) ?? \"{}\";\n const flagOverrides = (JSON.parse(flagOverridesString) ?? {}) as FeatureFlagOverrides;\n featureFlagOverrides = flagOverrides;\n};\n\nexport const getFeatureFlagWithOverrides = () => ({ ...featureFlags, ...featureFlagOverrides });\n\nexport default function hasFeatureFlag(featureFlagName: FeatureFlagsEnum): boolean {\n const currentFeatureFlags = getFeatureFlagWithOverrides();\n return get(currentFeatureFlags, featureFlagName, false);\n}\n\nexport function getFeatureFlagStatuses() {\n const resultFlags = getFeatureFlagWithOverrides();\n return Object.keys(resultFlags).reduce((result, _key) => {\n const key = _key as FeatureFlagsEnum;\n\n const row = {\n before: featureFlags[key],\n override: featureFlagOverrides[key],\n result: resultFlags[key],\n };\n\n return { ...result, [key]: row };\n }, {} as { [K in FeatureFlagsEnum]: FeatureFlagStatus });\n}\n\nconst report = () => {\n const reportValues = getFeatureFlagStatuses();\n\n console.info(\n \"%c🧪 Current flag overrides\",\n \"background-color: lightgreen; color: #111111; padding: 4px 12px; border-radius: 4px;\",\n );\n console.table(reportValues);\n};\n\nconst storeFeatureFlagOverride = (newFeatureFlags: FeatureFlagOverrides) => {\n featureFlagOverrides = newFeatureFlags;\n localStorage.setItem(\"featureFlagOverrides\", JSON.stringify(newFeatureFlags));\n report();\n // IDK why but this line is important for localization to initialize for unit tests.\n // Disable this line and remove the import then run unit tests to see what I mean.\n document.location.reload();\n};\n\nconst set = (featureFlagName: FeatureFlagsEnum, state: boolean) => {\n const newFlag = { [featureFlagName]: state };\n const newFeatureFlagOverrides = { ...featureFlagOverrides, ...newFlag };\n storeFeatureFlagOverride(newFeatureFlagOverrides);\n};\n\nexport const enableAll = () => {\n storeFeatureFlagOverride(mapValues(featureFlags, () => true));\n};\n\nexport const resetAll = () => {\n const newFeatureFlagOverrides = {};\n storeFeatureFlagOverride(newFeatureFlagOverrides);\n};\n\nconst reset = (featureFlagName: FeatureFlagsEnum) => {\n // eslint-disable-next-line no-unused-vars\n const { [featureFlagName]: flagRemoved, ...currentFlags } = featureFlagOverrides;\n\n const newFeatureFlagOverrides = { ...currentFlags };\n storeFeatureFlagOverride(newFeatureFlagOverrides);\n};\n\nexport const setTrue = (featureFlagName: FeatureFlagsEnum) => set(featureFlagName, true);\nexport const setFalse = (featureFlagName: FeatureFlagsEnum) => set(featureFlagName, false);\n\nconst windowFeatureFlags = {\n report,\n override: {\n set,\n setTrue,\n setFalse,\n reset,\n resetAll,\n },\n};\n\ndeclare global {\n interface Window {\n featureFlags: typeof windowFeatureFlags;\n }\n}\n\nhydrateOverrides();\n\nexport const initFeatureFlagOverrides = async (): Promise => {\n window.featureFlags = windowFeatureFlags;\n\n console.groupCollapsed(\n \"%c🧪 Feature Flag Overrides available\",\n \"background-color: lightgreen; color: #111111; padding: 4px 12px; border-radius: 4px;\",\n \"(window.featureFlags)\",\n );\n report();\n console.info(window.featureFlags);\n console.groupEnd();\n};\n","import { LicenseInfo } from \"@mui/x-license\";\n\nconst initMuiLicense = () => {\n LicenseInfo.setLicenseKey(\n \"49808f97dabf0947698a0538b3a1e427Tz0xMDg0MTgsRT0xNzcxODA0Nzk5MDAwLFM9cHJvLExNPXN1YnNjcmlwdGlvbixQVj1pbml0aWFsLEtWPTI=\",\n );\n};\n\nexport default initMuiLicense;\n","import type { ComponentClass, ComponentType, LazyExoticComponent } from \"react\";\nimport { lazy } from \"react\";\n\n// Inspiration from: https://raphael-leger.medium.com/react-webpack-chunkloaderror-loading-chunk-x-failed-ac385bd110e0\n\n// Isolating type coercion\nconst nullReturningFnBuilder = () => (() => null) as unknown as T;\n\nconst getPageHasBeenForceRefreshed = (): boolean => {\n const storageValue = window.localStorage.getItem(\"page-has-been-force-refreshed\");\n return storageValue === \"true\";\n};\n\nconst setPageHasBeenForceRefreshed = (value: boolean) => {\n window.localStorage.setItem(\"page-has-been-force-refreshed\", value.toString());\n};\n\nexport const lazyWithRetry = | ComponentClass>(\n componentImport: () => Promise<{ default: T }>,\n): LazyExoticComponent =>\n lazy(async () => {\n const pageHasAlreadyBeenForceRefreshed = getPageHasBeenForceRefreshed();\n\n try {\n const component = await componentImport();\n\n setPageHasBeenForceRefreshed(false);\n\n return component;\n } catch (error) {\n if (!pageHasAlreadyBeenForceRefreshed) {\n // Assuming that the user is not on the latest version of the application.\n // Let's refresh the page immediately.\n setPageHasBeenForceRefreshed(true);\n window.location.reload();\n\n // This is a bogus promise - we're reloading, so this won't be in play\n return new Promise((resolve) => {\n resolve({\n default: nullReturningFnBuilder(),\n });\n });\n }\n\n // The page has already been reloaded\n // Assuming that user is already using the latest version of the application.\n // Let's let the application crash and raise the error.\n throw error;\n }\n });\n","export enum WaterlyLocals {\n enUS = \"en-US\",\n esES = \"es-ES\",\n}\n","import i18n from \"i18next\";\nimport resourcesToBackend from \"i18next-resources-to-backend\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { WaterlyLocals } from \"./locales\";\n\ni18n.use(initReactI18next).use(\n resourcesToBackend(async (language: string, namespace: string) => {\n return import(`./locales/${language}/${namespace}.json`);\n }),\n);\n\nconst postProcess = [];\nif (localStorage.getItem(\"test-LANG\")) {\n i18n.use({\n type: \"postProcessor\",\n name: \"testLang\",\n process: () => \"~~~~\",\n });\n postProcess.push(\"testLang\");\n}\n\nconst local = localStorage.getItem(\"locale\") ?? WaterlyLocals.enUS;\n\nvoid i18n.init({\n postProcess,\n lng: local,\n load: \"currentOnly\",\n fallbackLng: WaterlyLocals.enUS,\n defaultNS: [\"glossary\", \"common\"],\n ns: [\n \"DataGridColumnHeaders\",\n \"EventTypeEnum\",\n \"EventTypeGroupEnum\",\n \"RecurrenceTypeEnum\",\n \"SiteTypeEnum\",\n \"SystemTypeEnum\",\n \"WaterlyLocals\",\n \"admin\",\n \"common\",\n \"errors\",\n \"glossary\",\n \"months\",\n \"role\",\n ],\n interpolation: {\n escapeValue: false, // react already safe from xss\n format: (value: string, format) => {\n if (format === \"lowercase\") {\n return value.toLocaleLowerCase();\n }\n\n return value;\n },\n },\n react: {\n transSupportBasicHtmlNodes: true,\n transKeepBasicHtmlNodesFor: [\"br\", \"strong\", \"i\", \"p\", \"em\", \"span\"],\n },\n debug: process.env.NODE_ENV === \"development\",\n});\n\nexport default i18n;\n","import React, { Suspense } from \"react\";\n\nimport { shouldPolyfill } from \"@formatjs/intl-getcanonicallocales/should-polyfill\";\nimport * as Sentry from \"@sentry/react\";\nimport { render } from \"react-dom\";\nimport { BrowserRouter } from \"react-router-dom\";\nimport { CompatRouter } from \"react-router-dom-v5-compat\";\n\nimport { isLocal } from \"./app/config/featureFlags\";\nimport { EnvContextProvider } from \"./app/context/EnvContext\";\nimport OnlineStatusContextProvider from \"./app/context/OnlineStatusContext\";\nimport TelemetryProvider from \"./app/providers/TelemetryProvider\";\nimport { FullScreenLoader } from \"./app/ui/loaders/fullScreenLoader\";\nimport { initFeatureFlagOverrides } from \"./app/util/featureFlagsUtilities\";\nimport initMuiLicense from \"./app/util/initMuiLicense\";\nimport { lazyWithRetry } from \"./app/util/lazyWithRetry\";\nimport { environment } from \"./environments/environment\";\n\nimport \"./initI18next\";\n\nSentry.init({\n dsn: isLocal ? \"\" : \"https://8c04c6de44a9418a8b57700e85210311@o1083388.ingest.sentry.io/6093050\",\n integrations: [new Sentry.BrowserTracing(), new Sentry.Replay()],\n environment: \"unknown\",\n release: \"unknown\",\n enabled: environment.deployed,\n // capture replays on 2% of sessions - let's see how this works out\n replaysSessionSampleRate: 0.02,\n // capture replay on all errors\n replaysOnErrorSampleRate: 1.0,\n // Set tracesSampleRate to 1.0 to capture 100%\n // of transactions for performance monitoring.\n // We recommend adjusting this value in production\n tracesSampleRate: 1.0,\n});\n\n(async () => {\n initFeatureFlagOverrides();\n})();\n\nconst App = lazyWithRetry(() => import(\"./app/app\"));\n\ninitMuiLicense();\n\nconst renderApp = () =>\n render(\n \n }>\n \n \n \n \n \n \n \n \n \n \n \n \n ,\n document.getElementById(\"root\"),\n );\n\nasync function start() {\n // Check if platform already supports Intl.getCanonicalLocales\n // https://caniuse.com/mdn-javascript_builtins_intl_supportedvaluesof\n // Global support at the time of writing 89.63%\n if (shouldPolyfill()) {\n await import(\"@formatjs/intl-getcanonicallocales/polyfill\");\n }\n renderApp();\n}\n\nstart();\n"],"file":"assets/index-F3AjIeH2.js"}