{"version":3,"file":"js/site.bundle.js","mappings":"4KAEA,MAAMA,EAAW,CAAEC,aAASC,GACrB,IAAIC,EAA0B,IAAIC,SAASH,GAAYD,EAASC,QAAUA,IAElE,SAASI,IACvBC,GACD,CAEO,SAASC,EAAUC,EAA8CC,GACvE,MAAMC,EAAKC,EAAEH,GAA8B,GAC3C,IAAKE,GAAMC,EAAED,GAAIE,KAAK,aAAeD,EAAED,GAAIE,KAAK,YAC/C,OAED,MAAMC,EAAUH,EAAGI,MACnBJ,EAAGI,MAAQ,KAEX,MAAMC,GAAmB,OAAUL,EAAI,CACtCM,KAAM,SACNC,WAAY,QACZC,YAAY,EACZC,UAAU,EACVC,UAAW,QACXC,QAAS,IAAMlB,EAAQH,EAASC,SAAQ,KAGrCY,GACHE,EAAiBO,QAAQ,IAAIC,KAAKV,EAAU,WAAW,EAAO,QAEhE,CAEO,SAASP,IAEIK,EAAE,sBACVa,MAAK,CAACC,EAAGf,IAAOH,EAAUG,IACtC,C,oFCjCA,SACCL,OACAqB,gBACAC,UAyEM,WACN,IAAK,IAAIjB,KAAMC,EAAE,wCAChBe,EAAchB,EAEhB,EA5ECkB,sBACAC,yBAGM,SAASxB,IACfyB,SAASC,iBAAiB,eAAeC,SAAStB,IACjD,IAAI,IAAJ,CAAc,CAAEuB,KAAM,gBAAiBA,KAAKvB,EAAkB;AAG/DoB,SAASC,iBAAiB,iBAAiBC,SAAStB,IACnD,IAAI,IAAJ,CAAc,CAAEuB,KAAM,mBAAoBA,KAAKvB,EAAkB,IAGlEoB,SAASC,iBAAiB,uBAAuBC,SAAStB,IACzD,IAAI,IAAJ,CAAc,CACbwB,MAAO,oEACPC,OAAQ,UACNF,KAAKvB,EAAkB,IAG3BoB,SAASC,iBAAiB,eAAeC,SAAStB,IACjD,IAAI,IAAJ,CAAc,CACbwB,MAAO,oBACPC,OAAQ,UACNF,KAAKvB,EAAkB,IAG3BoB,SAASC,iBAAiB,gBAAgBC,SAAStB,IAClD,IAAI,IAAJ,CAAc,CACbuB,KAAM,aACNG,YAAa,eACXH,KAAKvB,EAAkB,IAG3BoB,SAASC,iBAAiB,oBAAoBC,SAAStB,IACtDkB,EAAoBlB,EAAG,IAGxBoB,SAASC,iBAAiB,sBAAsBC,SAAStB,IACxDmB,EAAsBnB,EAAG,GAE3B,CAEO,SAASkB,EAAoBlB,GACnC,IAAI,IAAJ,CAAc,CACb2B,OAAQ,IACRC,MAAO,WACPC,gBAAgB,EAChBC,YAAY,EACZC,oBAAoB,IAClBR,KAAKvB,EACT,CAEO,SAASmB,EAAsBnB,GACrC,IAAI,IAAJ,CAAc,CACbgC,OAAQ,IACRJ,MAAO,UACPC,gBAAgB,EAChBC,YAAY,EACZC,oBAAoB,IAClBR,KAAKvB,EACT,CAEO,SAASgB,EAAchB,GAC7B,WAAiBA,GAIjB,IAAIiC,EAAchC,EAAED,GAAIkC,MACxBjC,EAAED,GAAIkC,IAAID,EACX,CAQAhC,EAAEN,E;2BC/EF,MAAML,EAAW,CAAEC,aAASC,GACrB,IAAIC,EAA0B,IAAIC,SAASH,GAAYD,EAASC,QAAUA,IAElE,SAASI,IA4BJyB,SAASC,iBAAiB,4BAClCC,SAAStB,GAzBd,SAAwBF,GAC9B,MAAME,EAAKC,EAAEH,GAA8B,GAC3C,IAAKE,EAAI,OAET,MAAMK,GAAmB,OAAUL,EAAI,CAChCM,KAAM,WACNC,WAAY,QAClB4B,SAAUC,EACVzB,QAAS,IAAMlB,EAAQH,EAASC,SAAQ,KAGnC8C,EAA2B,GACjCjB,SAASkB,kBAAkBtC,EAAGuC,QAAQC,MACpClB,SAAQmB,GAAKJ,EAAWK,KAAK,IAAI7B,KAAM4B,EAAuBrC,UAE7DiC,EAAWM,OAAS,GACtBtC,EAAiBO,QAAQyB,GAAY,EAAO,SAG7ChC,EAAiBuC,QAAQC,UAAUC,IAAI,aACxC,CAK4BC,CAAe/C,IA3B3C,CA8BA,SAASoC,EAAeY,EAAuBC,EAAiBC,GAC/D,IAAIC,EAAiBlD,EAAEiD,EAASN,SAASQ,SAASC,KAAK,yBAAyB,GAChFF,EAAeG,UAAY,GAE3B,IAAI,IAAIC,KAAQP,EAAe,CAC9B,MAAMQ,EAAYpC,SAASqC,cAAc,SACzCD,EAAUhB,KAAOU,EAASN,QAAQL,QAAQC,KAC1CgB,EAAUpD,MAAQmD,EAAKG,mBAAmB,SAC1CF,EAAUG,KAAO,SACjBH,EAAUI,aAAa,aAAcV,EAASN,QAAQL,QAAQC,MAE9DW,EAAeU,OAAOL,EACvB,CACD,C,0FCjDA,MAAMM,EAAe,MACfC,EAAoB,sBAEX,SAASpE,IAuBFyB,SAASC,iBAAiB,oBAElCC,SAAStB,GAAOgE,EAAiBhE,KAmC/C;AACC,MAAMiE,EAAe7C,SAASC,iBAAiB0C,GAE/C,IAAI,MAAMG,KAAeD,EAAc,CACtC,MAAME,EAAkB,IAAIC,OAAO,aAAcN,GAAc,GAAO,GACb,GAArD7D,EAAEiE,GAAaG,KAAK,uBAAuB1B,QAC9C1C,EAAEiE,GAAaI,QAAQH,EAEzB,CACD,CAlECI,GAEAtE,EAAE,QAAQuE,GAAG,iBAAkB,sBAAuBC,EACvD,CAEO,SAAST,EAAiBlE,GAChC,MAAME,EAAKC,EAAEH,GAA8B,GAC3C,IAAKE,EAAI,OAET,MAAM0E,EAAczE,EAAED,GAAIE,KAAK,eAC3BwE,IACH1E,EAAGuC,QAAQb,YAAcgD,IAc3B,SAAiC1E,GAEhC,MAAM2E,EAAc1E,EAAE,QAAQoE,KAAK,cAAcrE,EAAG4E,QAAQ,GACtDC,EAAqB5E,EAAED,GAAIE,KAAK,mBAEhC4E,EAAkB7E,EAAED,GAAI+E,SAAS,sBAAsBV,KAAK,+BAA+B,GAEjG,GAAKM,EAQJA,EAAYC,GAAK,GAAG5E,EAAG4E,WAEvBE,EAAgBlB,aAAa,kBAAmBe,EAAYC,QAV3C,CACjB,GAA0B,MAAtBC,GAA2D,GAA7BA,EAAmBlC,OACpD,MAAM,IAAIqC,MAAM,+BAA+BhF,EAAG4E,4BAElDE,EAAgBlB,aAAa,kBAAmBiB,EAElD,CAMD,CA9BCI,CADiBhF,EAAED,GAAIkF,YAAY,IAEnCjF,EAAED,GAAImF,SAAS,UAAUjF,KAAK,YAAa,OAC5C,CA8BO,SAASkF,KAAsBnB,GAClC,IAAI,IAAIC,KAAeD,EAAc,CACjC,MAAMoB,EAAOC,MAAMC,KAAKrB,EAAYsB,SAEjB,IAAhBH,EAAK1C,QAAgB0C,EAAK,GAAGjF,QAAU0D,IACtC7D,EAAEiE,GAAahC,IAAImD,EAAK,GAAGjF,OAC3BH,EAAEiE,GAAauB,QAAQ,UAE/B,CACJ,CAaA,SAAShB,EAAaiB;AACrB,IAAIC,EAAaD,EAAWE,OAAOC,KAAKjB,GACpCkB,EAAaR,MAAMC,KAAMtF,EAAEyF,EAAGK,eAAe,GAAyBP,SAASQ,KAAIvD,GAAKA,EAAErC,QAAO6F,QAAOxD,GAAKA,IAAMqB,IAEpH6B,IAAc7B,IAChB7D,EAAEyF,EAAGK,eAAe7D,IAAI,MACxBjC,EAAEyF,EAAGK,eAAe7D,IAAI4D,GACxB7F,EAAEyF,EAAGK,eAAeN,QAAQ,UAE9B,C,gECvFA,MAAMS,EAAkB,IAAMjG,EAAE,uBAQzB,SAASN,IACTuG,IAAkBvD,SACjBwD,IACAlG,EAAE,2BAA2BuE,GAAG,gBAAiB4B,IAC7CA,EAAEC,2BACFC,GAAwB,IAG5BrG,EAAE,QAAQuE,GAAG,UAAU,KACnB2B,GAAwB,IAG5BI,OAAOC,iBAAiB,gBAAiBJ,IAClCF,IAAkBO,GAAG,cACpBL,EAAEM,iBACFN,EAAEO,YAAc,GACpB,IAGZ,CAEO,SAASR,IACZD,IAAkBU,SAAS,SAC/B,CAEO,SAASN,IACZJ,IAAkBW,YAAY,SAClC,CAEA5G,EAAEN,E,+FCnBF,MACMmH,EAAuB,0BAE7B,GACIC,4BAGG,WACH9G,EAAE,0BAAuB+G,IAAI,IAAIF,KAAwBhG,MAAK,CAACC,EAAGqF,KAC9DnG,EAAEmG,GAAG5B,GAAG,SAAS,SAAU4B,GAevB,OAdAA,EAAEM,iBAEFO,EAAyBC,KAAKtC,GAAIsC,KAAK3E,QAAQ4E,qBAAqB;AAEhE,MAAMC,EAA2BF,KAAKG,aAAa,QAAU,IAAMH,KAAKG,aAAa,QAAUH,KAAK3E,QAAQ+E,aACtGC,EAAkBtH,EAAEiH,MAAMhH,KAAK,QAEjCkH,EACAnH,EAAEmH,GAA0B3B,QAAQ,UAEpCc,OAAOiB,SAASC,KAAOF,CAC3B,GACDL,KAAK3E,QAAQmF,OAAQR,KAAK3E,QAAQoF,mBAE9B,CACX,IACA1H,EAAEmG,GAAGQ,SAASE,EAAqB,GAE3C,GAEO,SAASG,EAAyBrC,EAAYgD,EAAiBC,EAA4BH,EAAiBC,GAE/G,MAAMG,GAAWlD,IAAM,UAAY,gBAE7BmD,EAAe3G,SAASqC,cAAc,OAC5CsE,EAAanD,GAAKkD,EAClBC,EAAanE,aAAa,QAAS,SACnCmE,EAAanE,aAAa,WAAY,KACtCmE,EAAazE,UAAY,+eAiBzBlC,SAAS4G,KAAKC,YAAYF,GAE1BG,YAAW,KACP,MAAMC,EAAoB,IAAI,KAAMJ,GACpCI,EAAkBC;AAEH,SAAXV,EACAzH,EAAE,IAAI6H,OAAaO,KAAKT,GAGxB3H,EAAE,IAAI6H,OAAaQ,KAAKV,GAG5B3H,EAAE,IAAI6H,0BAAgCtD,GAAG,SAAS,KAC1CqD,IACAA,EAAiBM,GACjBA,EAAkBI,OACtB,GACF,GACH,GACHnH,SAASoF,iBAAiB,mBAAmB,WACrCmB,EAAmB,IACnBvG,SAASoH,eAAeb,GAAkBc,OAElD,GACJ,C,gGC9FA,MAAMC,EAAe,MACR,IAAIC,gBAAgBpC,OAAOiB,SAASoB,QAAQC,IAAI,YAEvDC,EAAiB,IAAM7I,EAAE,0BACzB8I,EAAS,IAAM9I,EAAE,WAAWiC,OAAO8G,WACnCC,EAAc,IAAMhJ,EAAE,4CAA4C+G,IAAI,qBAAqBA,IAAI,aAC/FkC,EAAkB,IAAMjJ,EAAE,uCAAuC+G,IAAI,aACrEmC,EAAa,IAAMlJ,EAAE,gFACrBmJ,EAAiB,IAAMnJ,EAAE,mCACzBoJ,EAAe,IAAMpJ,EAAE,iCACvBqJ,EAAe,eACfC,EAAqB,mBAC3B,IAAIC,EAEGC,eAAeC,IACZX,MACFS,EAAkB,IAAIG,EAAgBZ,WAChCS,EAAgBI,iBAQ9B,WACI,MAAMhE,EAAS,IAAI+C,gBAAgBpC,OAAOiB,SAASoB,QACnDE,IAAiBtE,GAAG,SAAS;AACrBkE,IACA9C,EAAOiE,OAAO,YAEdjE,EAAOkE,IAAI,WAAY,QAE3BC,QAAQC,UAAU,KAAM,KAAM,IAAMpE,EAAOoD,YAC3CzC,OAAOiB,SAASyC,QAAQ,GAEhC,CAjBQC,SAmBRT,iBACQf,KACAO,IAAc/I,KAAK,WAAY,YAC/BgJ,IAAkBtC,SAAS,YAC3ByC,IAAec,WAAW,UAa9BhB,IAAarI,MAAK,CAACsJ,EAAGxH,KAGd3C,EAAE2C,GAASQ,SAASiH,SAAS,gBAAkBpK,EAAE2C,GAASQ,SAASiH,SAAS,cAQhF,MAAMC,EAAUrK,EAAE2C,GAAS1C,KAAK,YAC1BqK,KAAKtK,EAAE2C,GAAS1C,KAAK,aACrB0C,EAAQgC,GACR4F,EAAQvK,EAAE,SAAS2C,EAAQgC,QAE7B4F,EAAM7H,OAAS,IACf6H,EAAM5D,SAAS,wBACf4D,EAAM5D,SAAS4C,EAAgBiB,YAAYH,GAAW,8BAAgC,4BAEtFI,EAAkBF,EAAOF,GAC7B,IAGJlB,IAAiBtI,MAAK,CAACsJ,EAAGxH,KACtB,MAAM+H,EAAY/H,EAAQgC,GACpB4F,EAAQvK,EAAE,IAAI0K,WAEpBH,EAAM5D,SAAS4C,EAAgBiB,YAAYE,GAAa,8BAAgC,4BAExFD,EAAkBF,EAAOG,EAAU,KAvCnC,IAAuBC,YAAYC,MAAMD,IACjCA,EAAYE,eA2CNtB,EAAgBuB,eAExBzJ,SAAS0J,IACf,GAAMA,EAAU5K,MAAO,CAEnB,IAAI6K,EACJ,MAAMC,EAAgBjL,EAAE,IAAI+K,EAAUG,OACtC,GAAID,EAAcvI,OAAS,EAEvBsI,EAAQC,EAAc,OACnB,CAEH,MAAME,EAAYC,KAAKL,EAAUG,KAC3BD,EAAgBjL,EAAE,cAAcmL,OACtCH,EAAQC,EAAcvI,OAAS,EAAIuI,EAAc,GAAK,IAC1D,CAGA,GAAc,OAAVD,EAAgB,CAChB,MAAMT,EAAQvK,EAAE,SAASgL,EAAMrG;CAG3B4F,EAAM7H,OAAS,IACf6H,EAAM5D,SAAS,wBAoDnC,SAA2B4D,EAAwBc,GAC/Cd,EAAMtK,KAAK,iBAAkB,WACxBsK,EAAMtK,KAAK,sBACZsK,EAAMtK,KAAK,oBAAqB,OAEpCsK,EAAMtK,KAAK,QAASoL,GACV,IAAI,KAAQd,EAAM,GAChC,CA1DoBe,CAAkBf,EAAOQ,EAAU5K,OAE3C,CACJ,IApEI,GAGZ,CA/BcoL,GAEd,CAkGA,SAASd,EAAkBF,EAAwBF,GAE/C,MAAMmB,EAAcnB,EAAQoB,QAAQ,MAAO,KACrCC,EAAoB,GAAGpC,IAAqBkC,IAC5CG,EAAc,GAAGtC,IAAemC,IAChCI,EAAQrB,EAAMlC,OAAO3F,OAAS,EAAI6H,EAAMlC,OAASkC,EAAMtK,KAAK,SAG5D4L,EAAU,IAAI,KAAQtB,EAAM,GAAI,CAClCuB,UAAW,OACXC,UAAW,MACXvG,QAAS,SACToG,MAAO,GAAIA,sBAA2BF,oEACtCM,UAAU,EACV5D,MAAM,EACN6D,QAAS,IAAe,iBAAiBN,8CAAwDpC,EAAgBiB,YAAYH,kBAIjIE,EAAMhG,GAAG,aAAa,KAClBgG,EAAM5D,SAAS,gCACfkF,EAAQ1D,OAGRnI,EAAE,IAAI0L,KAAqBnH,GAAG,SAASiF,MAAOrD,IAC1CoE,EAAM3D,YAAY,gCAClB,MAAMsF,EAAclM,EAAE,IAAI2L,KAAe1J,MAAM8G,iBAErCQ,EAAgB4C,eAAe9B,EAAS6B,KACxCA,GACF3B,EAAM5D,SAAS,+BACf4D,EAAM3D,YAAY,8BAElB2D,EAAM5D,SAAS;AACf4D,EAAM3D,YAAY,iCAI1BiF,EAAQvD,OACRnC,EAAEM,gBAAgB,GACpB,GAEV,CAiBA,MAAMiD,EAIF,WAAA0C,CAAYtD,GACR7B,KAAK6B,OAASA,CAClB,CAEA,oBAAMa,GACF1C,KAAKoF,gBAAkB,QAAiBpF,KAAK6B,OACjD,CAEA,YAAAgC,GACI,IAAIwB,EAA4B,GAChC,IAAK,IAAIpB,KAAOjE,KAAKoF,UACbpF,KAAKoF,UAAUE,eAAerB,IAC9BoB,EAAU7J,KAAK,CAAEyI,MAAK/K,MAAO8G,KAAKoF,UAAUnB,KAGpD,OAAOoB,CACX,CAEA,WAAA9B,CAAYH,GACR,OAAOpD,KAAKoF,UAAUhC,IAAY,EACtC,CAEA,oBAAM8B,CAAe9B,EAAiBgB,GAClC,MAAMmB,QAAe,QAAiBvF,KAAK6B,OAAQuB,EAASgB,GAI5D,OAHImB,IACAvF,KAAKoF,UAAUhC,GAAWgB,GAEvBmB,CACX,E,8DClNJ,MAAMC,EAAoC,GAoC1C,SAAiBtE,KAlCjB,SAAcuE,GACb,MAAMC,EAAe3M,EAAE0M,GAAMtI,KAAK,+BAE5BwI,EAA8BzL,SAASqC,cAAc,QAC3DoJ,EAAWhK,UAAUC,IAAI,gBACzB+J,EAAWhK,UAAUC,IAAI,iBACzB+J,EAAWhK,UAAUC,IAAI,kBAEzB+J,EAAWjJ,aAAa,OAAQ,UAChCiJ,EAAWjJ,aAAa,cAAe,QAEvCgJ,EAAa9L,MAAK,CAACgM,EAAO9M,KACzBC,EAAED,GAAI4G,SAAS,6EAEf,MAAMmG,EAA4B3L,SAASqC,cAAc;CACzDsJ,EAASlK,UAAUC,IAAI,+BACvBiK,EAASC,YAAc/M,EAAED,GAAIsI,OAE7BoE,EAAYhK,KAAK,CAAEuK,OAAQjN,EAAIkN,QAASlN,EAAGgN,cAE3C/M,EAAED,GAAIqI,KAAK0E,GACX9M,EAAED,GAAI6D,OAAOgJ,GACb7M,EAAG4D,aAAa,WAAY,WAAW,GAEzC,EAUuBuJ,SARvB,WACCT,EAAYpL,SAAS8L,IACpBA,EAAaH,OAAOI,mBAAmBC,SACvCF,EAAaH,OAAOD,YAAcI,EAAaF,QAC/CE,EAAaH,OAAOM,gBAAgB,WAAW,GAEjD,E,sPC1BA,SAASC,IACR,OAAQpM,SAASqM,cAAc,6BAAkDrN,KAClF,CAWOqJ,eAAeiE,EAAmBnK,GACxC,MAAMoK,EAAc,cAAa,CAACC,WAAYrK,IAM9C,aAJuBsK,MAAM,+BAA+BF,KAC1D9C,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBsH,EAAmBlL,KAAM4D,IAGzD,CAGOqD,eAAewE,EAAuCC,KAA0BC,GACtF,MAAMR,EAAc,cAAa,CAACS,WAAYD,EAAKD,cAAeA;CAMlE,aAJ2BL,MAAM,yDAAyDF,KACxF9C,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkB6H,EAAuCzL,KAAM4D,IAG7E,CAGOqD,eAAe4E,EAAiCT,EAAoBU,GAC1E,MAAMX,EAAc,cAAa,CAACC,WAAYA,EAAYU,UAAWA,IAMrE,aAJ2BT,MAAM,wCAAwCF,KACvE9C,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBiI,EAAiC7L,KAAM4D,IAGvE,CAYOqD,eAAe8E,IAKrB,aAJgCV,MAAM,iCACpChD,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBmI,EAAyB/L,KAAM4D,MAErCzD,MAC1B,CAGO8G,eAAe+E,EAAgBJ,GACrC,MAAMxI,EAAS,IAAI+C,gBAEnByF,EAAW9M,SAAQ,CAACgN,EAAWxB,KAC9BlH,EAAO/B,OAAO,cAAciJ,KAAUwB,EAAU,IAGjD,MAAMG,EAAM,4BAA8B7I,EAAOoD,WAKjD,aAJuB6E,MAAMY,GAC3B5D,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBsI,EAAwBlM,KAAM4D,IAG9D,CAkCOqD,eAAekF,EAAqCC,EAAgBR,EAAsBS,GAChG,MACMJ,EAAM,iDADG,cAAa,CAAEG,OAAQA,EAAQR,WAAYA,EAAYS,eAAgBA,MAOtF,aAJkBhB,MAAMY,GACtB5D,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBuI,EAAqCnM,KAAM4D,IAG3E,CAGOqD,eAAeiF,EAAwBI,GAC7C,MAAMlJ,EAAS,IAAI+C,gBAEnBmG,EAAYxN,SAAQ,CAACyN,EAAYjC,KAChClH,EAAO/B,OAAO,eAAeiJ,KAAUiC,EAAW;CAGnD,MAAMN,EAAM,wBAA0B7I,EAAOoD,WAK7C,aAJuB6E,MAAMY,GAC3B5D,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBsI,EAAwBlM,KAAM4D,IAG9D,CAEOqD,eAAeuF,EAAqBC,EAAkBC,EAAkBC,GAC9E,MAAMC,QAAiBvB,MAAM,4BAA6B,CACzDwB,OAAQ,OACRrH,KAAMsH,KAAKC,UAAU,CACpBN,SAAUA,EACVC,SAAUA,EACVC,WAAYA,IAEbK,QAAS,CACR,eAAgB,mBAChB,2BAA4BhC,OAM9B,aAF+B4B,EAASrB,OAAOC,OAAM5H,IAAK,OAAkB4I,EAAqBxM,KAAM4D,IAGxG,CAGOqD,eAAegG,EAAgB7K,GAKrC,aAJ2BiJ,MAAM,sCAAsCjJ,KACrEiG,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBqJ,EAAgBjN,KAAM4D,IAGtD,CAGOqD,eAAeiG,EAAkCvB,GAKpD,aAJ4BN,MAAM,2CAA2CM,EAAIwB,KAAK,sBACjF9E,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBsJ,EAAkClN,KAAM4D,IAG9E,CAEOqD,eAAemG,EAAmChL,EAAYgJ,GAKpE,aAJ6BC,MAAM,sDAAsDjJ,gBAAiBgJ,KACxG/C,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBwJ,EAAmCpN,KAAM4D,IAGzE,CAEOqD,eAAeoG,EAA4CjL,EAAYgJ;AAK7E,aAJkCC,MAAM,+DAA+DjJ,gBAAiBgJ,KACtH/C,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkByJ,EAA4CrN,KAAM4D,IAGlF,CAEOqD,eAAeqG,IAKlB,aAJuBjC,MAAM,gCACxBhD,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkB2J,EAAiBvN,KAAM4D,IAG7D,CAEOqD,eAAesG,EAAiBhH,GAKnC,aAJwB8E,MAAM,gCAAgC9E,KACzD8B,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkB2J,EAAiBvN,KAAM4D,IAG7D,CAEOqD,eAAeuG,EAAiBjH,EAAgBuB,EAAiBgB,GACvE,OAAOuC,MAAM,6BACZ,CACC7F,KAAMsH,KAAKC,UAAU,CAAExG,SAAQuB,UAASgB,aACxC+D,OAAQ,OACRG,QAAS,CACR,eAAgB,mBAChB,2BAA6BpO,SAASqM,cAAc,6BAAkDrN,SAGvGyK,MAAKpB,MAAOqE,KAAUA,EAAIC,SAC1BC,OAAO5H,IAAM,GAChB,CAEOqD,eAAewG,EAAoBC,EAA+BC,GAKrE,aAJsBtC,MAAM,sDAAsDqC,yBAA6CC,KAC1HtF,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkB6J,EAAoBzN,KAAM4D,IAGhE,CAEOqD,eAAe2G,EAAsBC,EAAwBC,EAAgBC,GACnF,MACM9B,EAAM,kCADG,cAAa,CAAE4B,aAAcA,EAAcC,OAAQA;AAAQC,eAAgBA,MAO1F,aAJ0B1C,MAAMY,GAC9B5D,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBgK,EAAsB5N,KAAM4D,IAG5D,CAEOqD,eAAe+G,EAAyBH,EAAwBC,EAAgBG,EAAoBF,GAC1G,MACM9B,EAAM,qCADG,cAAa,CAAE4B,aAAcA,EAAcC,OAAQA,EAAQG,WAAYA,EAAYF,eAAgBA,MAOlH,aAJ0B1C,MAAMY,GAC9B5D,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBoK,EAAyBhO,KAAM4D,IAG/D,CAEOqD,eAAeiH,EAA0BC,EAAuBF,EAAoBF,GAC1F,MACM9B,EAAM,sCADG,cAAa,CAAEkC,cAAeA,EAAeF,WAAYA,EAAYF,eAAgBA,MAOpG,aAJ0B1C,MAAMY,GAC9B5D,MAAMiD,GAAQA,EAAIC,SAClBC,OAAM5H,IAAK,OAAkBsK,EAA0BlO,KAAM4D,IAGhE,CAuCMG,OAAQqK,yBAhBPnH,eAAwCoH,GAC9C,MAAMzB,QAAiBvB,MAAM,2BAA4B,CACxDwB,OAAQ,OACRrH,KAAMsH,KAAKC,UAAU,CACpBsB,sBAAuBA,IAExBrB,QAAS,CACR,eAAgB,mBAChB,2BAA4BhC,aAIxB4B,EAAS9G,OACb0F,OAAM5H,GAAK0K,QAAQC,IAAI3K,IAC1B,C,+BCvTO,SAAS4K,EAAkB3B,EAAgB4B,GACjD,MAAMrL,EAAS,IAAI+C,gBAEnBmI,QAAQC,IAAIE,EAAMrJ,SAElBhC,EAAO/B,OAAO,SAAUwL,GACxBzJ,EAAO/B,OAAO,OAAQoN,EAAMzO,MAC5BoD,EAAO/B,OAAO,UAAWoN,EAAMrJ,SAC/BhC,EAAO/B,OAAO,QAASoN,EAAMC;AAE7B3K,OAAOiB,SAASkE,QAAQ,qBAAqB9F,EAAOoD,aACrD,C,+ECUA,MAEA,EArBA,MAIQ,mBAAWmI,GACjB,OAAOjK,KAAKkK,YAAclK,KAAKkK,UAAY,IAAIlK,KAChD,CAEO,gBAAMmK,GACZnK,KAAKoK,gCACJC,eAAeC,QAAQ,0CAChB3D,MAAM,4BACXhD,MAAMiD,GAAQA,EAAIC,SAClBC,OAAO5H,IAAM,OAAkB,kCAAmCA,KAErEmL,eAAeE,QAAQ,kCAAmCvK,KAAKoK,gCAChE,GAG0CH,Q,+DCb3C,MAAMO,EAAqB,kBA8C3B,MAEA,EA9CA,MAIQ,mBAAWP,GACjB,OAAOjK,KAAKkK,YAAclK,KAAKkK,UAAY,IAAIlK,KAChD,CAEO,gBAAMmK,GACZ,IAAIM,EAAmBC,aAAaJ,QAAQE,GACtCC,GAAyC,OAArBA,EACzBzK,KAAK0D,YAAc,IAAIlL,SAA0BoO,IAAUA,EAAIwB,KAAKuC,MAAMF,GAAkB,UAEtFzK,KAAK4K,aAEb,CAEO,iBAAMA,GACZ5K,KAAK0D,YAAciD,MAAM,gDACvBhD,MAAMiD,GAAQA,EAAIC,SAClBC,OAAO5H,IAAM;AAAA,KAAkB,sCAAuCA,KACxEc,KAAK0D,YAAYC,MAAKD,IACrBgH,aAAaH,QAAQC,EAAoBpC,KAAKC,UAAU3E,GAAa,GAEvE,CAEO,2BAAMmH,CAAsBC,GAClC,aAAcnE,MAAM,2CAA4C,CAC/DwB,OAAQ,OACRG,QAAS,CACR,eAAgB,mBAChB,2BAA6BpO,SAASqM,cAAc,6BAAkDrN,OAEtG4H,KAAMsH,KAAKC,UAAUyC,KAEtBnH,MAAKpB,MAAOqE,IACZ,IAAIrB,EAASqB,EAAIC,OAEjB,OADA6D,aAAaH,QAAQC,EAAoBpC,KAAKC,UAAUyC,IACjDvF,CAAM,IAEbuB,OAAO5H,IAAM,OAAkB,wBAAyBA,IAC1D,GAGqD+K,Q,mFCtDtD,MAAMc,EAAmB,UAEzB,EAKO,WACH,MAAMC,EAAY,IAAIvJ,gBAAgBpC,OAAOiB,SAASoB,QAEtD,IAAIuJ,IACA,OAGJ,MAAMC,EAAW,cAAcF,EAAUrJ,IAAIoJ,OACvCI,EAASjR,SAASqM,cAAc2E,GAEnCC,GACCA,EAAO5J,OAEf,EAEO,SAAS0J,IAEZ,OADkB,IAAIxJ,gBAAgBpC,OAAOiB,SAASoB,QACrC0J,IAAIL,EACzB,C,eCzBA,MAEA,EAIO,WACiB,EAAE,iCACRzN,GAAG,UAAW4B,IACxB,IAAI6E,EAAQ,EAAE7E,EAAEL;CAChBkF,EAAM/I,IAAI+I,EAAM/I,MAAM8G,WAAW0C,QAAQ,YAAa,IAAI,IAG7C,EAAE,+BACRlH,GAAG,UAAW4B,IACrB,IAAI6E,EAAQ,EAAE7E,EAAEL,eAChBkF,EAAM/I,IAAI+I,EAAM/I,MAAM8G,WAAW0C,QAAQ,MAAO,IAAI,GAE5D,E,qHCde,SAAS/L,IA4BJyB,SAASC,iBAAiB,4BAClCC,SAAStB,GAzBd,SAAwBF,GAC9B,MAAME,EAAK,EAAEF,GAA8B,GAC3C,IAAKE,EAAI,OAET,MAAMK,GAAmB,OAAUL,EAAI,CAChCM,KAAM,QACNC,WAAY,QAClBC,YAAY,EACZ2B,SAAUC,IAGLC,EAA2B,GACjCjB,SAASkB,kBAAkBtC,EAAGuC,QAAQC,MACpClB,SAAQmB,GAAKJ,EAAWK,KAAK,IAAI7B,KAAM4B,EAAuBrC,UAE7DiC,EAAWM,OAAS,GACtBtC,EAAiBO,QAAQyB,GAAY,EAAO,SAG7ChC,EAAiBuC,QAAQC,UAAUC,IAAI,aACxC,CAK4ByP,CAAevS,IA3B3C,CA8BA,SAASoC,EAAeY,EAAuBC,EAAiBC,GAC/D,IAAIC,EAAiB,EAAED,EAASN,SAASQ,SAASC,KAAK,yBAAyB,GAChFF,EAAeG,UAAY,GAE3B,IAAI,IAAIC,KAAQP,EAAe,CAC9B,MAAMQ,EAAYpC,SAASqC,cAAc,SACzCD,EAAUhB,KAAOU,EAASN,QAAQL,QAAQC,KAC1CgB,EAAUpD,MAAQmD,EAAKG,mBAAmB,SAC1CF,EAAUG,KAAO,SACjBH,EAAUI,aAAa,aAAcV,EAASN,QAAQL,QAAQC,MAE9DW,EAAeU,OAAOL,EACvB,CACD,C;CCjBA,SAASgP,EAAsB9M,GAC9B,MAAM+M,EAAU/M,EAAGK,cAAcsB,aAAa,YAE1CoL,IACH,EAAE,oBAAoBA,OAAa5L,YAAY,0BAC/C,EAAE,kBAAkB4L,OAAa5L,YAAY,0BAA0ByB,KAAK,MAE9E,CAGAmB,eAAeiJ,IACd,EAAE,sBAAsBC,YAAY,UAEpC,MAAMC,EAAmB,EAAE,YAAYvI,SAAS,gBAC1CwD,MAAM,8BAA+B,CAC1CwB,OAAQ,OACRrH,KAAMsH,KAAKC,UAAU,CAACqD,qBACtBpD,QAAS,CACR,eAAgB,qBAGnB,CAGA,SAASqD,EAAiBnN,GACzB,IAAa0C,KAAK1C,EAAGK,cACtB,CAEA,SAAS+M,IACRvM,OAAOwD,QAAQgJ,MAChB,CAEA,GAlDe,WAJe,EAAE,oBAKbvO,GAAG,QAASkO,GANN,EAAE,QAOblO,GAAG,SAAUqO,GALF,EAAE,mBAMbrO,GAAG,QAASsO,GALF,EAAE,UAMbtO,GAAG,SAAUgO,GAEzB,IAAK,MAAMxS,KAAMoB,SAAS4R,uBAAuB,SAAU,CAC5C,IAAI,KAAgBhT,GAC5BoI,MACP,EAEA,EAAA7E,EAAA,OACA,WACA,UACA,IC1Bc,WACd,MAAM0P,EAAc7R,SAAS4R,uBAAuB,OAEpD,IAAK,MAAME,KAASD,EAAa;AAChC,MAAMjT,EAAKkT,EAELC,EAAe,0BACpBnT,EAAGuC,QAAQ6Q,UACR,8BAAgCpT,EAAGuC,QAAQ6Q,UAC3C,0CAGEC,EAAoBrT,EAAGuC,QAAQ6Q,UAClC,yDAAyDpT,EAAGuC,QAAQ6Q,8BAA8BpT,EAAGuC,QAAQ6Q,sBAC7G,GAEGE,EAAY,qBAAqBtT,EAAGuC,QAAQgR,OAASJ,UAEjD,IAAI,KAAQD,EAAO,CAC5BrH,MAAO,sBACPxD,MAAM,EACN6D,QAAS,GAAGmH,IAAoBC,IAChC7N,QAAS,QACTwG,UAAU,GAEZ,CACD,CDCC,EACD,I,0BE5BA,MAAMuH,EAAwB,IAA+B,EAAE,sBAa/D,GAXe/J,iBACd,GAAuC,IAAnC+J,IAAwB7Q,OAAc,OAE1C,MAAM8Q,QAA0B,UAEN,IAAtBA,IAEJD,IAAwB3M,YAAY,UACpC2M,IAAwB,GAAGxG,YAAcyG,EAAkBzK,WAC5D,I,iCCLA,iBAAmB,IAAcqI,YAAY,EAA7C,GACA,iBAAmB,IAAgBA,YAAY,EAA/C,GACA,iBCFO5H,iBACoD,SAAnDxJ,EAAE,uCAAuCiC,aACnC,IAAuB4P,aAErC,CDFmB4B,EAA+B,EAAlD,GACA,iBAAmB,QAAoB,EAAvC,GACA,EAAE,GACF,EAAE,GACF,EAAE,iC","sources":["webpack://ccib.web/./Features/Shared/Scripts/Common/Controls/date.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Controls/input-formatters.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Controls/multi-date.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Controls/multi-select.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Controls/save-changes-warning.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Globals/confirmation-modal.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Globals/help-text.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Globals/submit-loader.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Services/client-data-service.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Services/client-error-service.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Services/configuration-service.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Services/preferences-service.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Globals/input-finder.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Globals/input-number.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Controls/date-range.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Globals/global-ui-bindings.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Globals/wip.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Globals/notification-loader.ts","webpack://ccib.web/./Features/Shared/Scripts/site.ts","webpack://ccib.web/./Features/Shared/Scripts/Common/Services/local-storage-service.ts"],"sourcesContent":["import flatpickr from \"flatpickr\";\r\n\r\nconst deferred = { resolve: undefined };\r\nexport let ready: Promise = new Promise((resolve) => deferred.resolve = resolve);\r\n\r\nexport default function init(): void {\r\n\tsetupDates();\r\n}\r\n\r\nexport function setupDate(elementOrSelector: string | HTMLInputElement, config?: Partial): void {\r\n\tconst el = $(elementOrSelector as unknown)[0] as HTMLInputElement;\r\n\tif (!el || $(el).attr('disabled') || $(el).attr('readonly'))\r\n\t\treturn;\r\n\r\n\tconst dateVal = el.value;\r\n\tel.value = null;\r\n\r\n\tconst flatPickrControl = flatpickr(el, {\r\n\t\tmode: \"single\",\r\n\t\tdateFormat: \"Y-m-d\",\r\n\t\tallowInput: true,\r\n\t\taltInput: true,\r\n\t\taltFormat: \"m/d/Y\",\r\n\t\tonReady: () => ready = deferred.resolve(true)\r\n\t});\r\n\r\n\tif (dateVal) {\r\n\t\tflatPickrControl.setDate(new Date(dateVal + ' 00:00'), false, \"Y-m-d\");\r\n\t}\r\n}\r\n\r\nexport function setupDates(): void {\r\n\t// find all of the date elements\r\n\tconst dateInputs = $('input[type=\"date\"]');\r\n\tdateInputs.each((i, el) => setupDate(el as HTMLInputElement));\r\n}\r\n","import Inputmask from 'inputmask';\r\n\r\nexport default {\r\n\tinit,\r\n\tunmaskElement,\r\n\tunmaskAll,\r\n\tmaskCurrencyElement,\r\n\tmaskPercentageElement\r\n};\r\n\r\nexport function init() {\r\n\tdocument.querySelectorAll('.format-ssn').forEach((el) => {\r\n\t\tnew Inputmask({ mask: '999-99-9999' }).mask(el as HTMLElement);\r\n\t});\r\n\r\n\tdocument.querySelectorAll('.format-phone').forEach((el) => {\r\n\t\tnew Inputmask({ mask: '(999) 999-9999' }).mask(el as HTMLElement);\r\n\t});\r\n\r\n\tdocument.querySelectorAll('.format-case-number').forEach((el) => {\r\n\t\tnew Inputmask({\r\n\t\t\tregex: '^([a-zA-Z]{1})([0-9]{3})((?:19|20)\\\\d{2})([a-zA-Z]{2})([0-9]{6})$',\r\n\t\t\tcasing: 'upper',\r\n\t\t}).mask(el as HTMLElement);\r\n\t});\r\n\r\n\tdocument.querySelectorAll('.format-sid').forEach((el) => {\r\n\t\tnew Inputmask({\r\n\t\t\tregex: '^([nN]?)([0-9])+$',\r\n\t\t\tcasing: 'upper',\r\n\t\t}).mask(el as HTMLElement);\r\n\t});\r\n\r\n\tdocument.querySelectorAll('.format-date').forEach((el) => {\r\n\t\tnew Inputmask({\r\n\t\t\tmask: '99/99/9999',\r\n\t\t\tplaceholder: 'MM/DD/YYYY',\r\n\t\t}).mask(el as HTMLElement);\r\n\t});\r\n\r\n\tdocument.querySelectorAll('.format-currency').forEach((el) => {\r\n\t\tmaskCurrencyElement(el);\r\n\t});\r\n\r\n\tdocument.querySelectorAll('.format-percentage').forEach((el) => {\r\n\t\tmaskPercentageElement(el);\r\n\t});\r\n}\r\n\r\nexport function maskCurrencyElement(el: Element) {\r\n\tnew Inputmask({\r\n\t\tprefix: '$',\r\n\t\talias: 'currency',\r\n\t\tunmaskAsNumber: true,\r\n\t\tautoUnmask: true,\r\n\t\tremoveMaskOnSubmit: true\r\n\t}).mask(el as HTMLElement);\r\n}\r\n\r\nexport function maskPercentageElement(el: Element) {\r\n\tnew Inputmask({\r\n\t\tsuffix: '%',\r\n\t\talias: 'decimal',\r\n\t\tunmaskAsNumber: true,\r\n\t\tautoUnmask: true,\r\n\t\tremoveMaskOnSubmit: true\r\n\t}).mask(el as HTMLElement);\r\n}\r\n\r\nexport function unmaskElement(el: HTMLElement) {\r\n\tInputmask.remove(el);\r\n\t\r\n\t// Accessing the value triggers the autoUnmask\r\n\t// If autoUnmask is not turned on, the unmask() function will need to be called manually.\r\n\tlet unmaskedVal = $(el).val();\r\n\t$(el).val(unmaskedVal);\r\n}\r\n\r\nexport function unmaskAll() {\r\n\tfor (let el of $('.format-currency, .format-percentage')) {\r\n\t\tunmaskElement(el);\r\n\t}\r\n}\r\n\r\n$(init);\r\n","import { read } from \"@popperjs/core\";\r\nimport flatpickr from \"flatpickr\";\r\nimport { Instance as FlatPickr } from \"flatpickr/dist/types/instance\";\r\nimport { DateOption } from \"flatpickr/dist/types/options\";\r\n\r\nconst deferred = { resolve: undefined };\r\nexport let ready: Promise = new Promise((resolve) => deferred.resolve = resolve);\r\n\r\nexport default function init(): void {\r\n\tsetupMultiDates();\r\n}\r\n\r\nexport function setupMultiDate(elementOrSelector: string | HTMLInputElement): void {\r\n\tconst el = $(elementOrSelector as unknown)[0] as HTMLInputElement;\r\n\tif (!el) return;\r\n\r\n\tconst flatPickrControl = flatpickr(el, {\r\n mode: \"multiple\",\r\n dateFormat: \"m/d/Y\",\r\n\t\tonChange: appendFormData,\r\n\t\tonReady: () => ready = deferred.resolve(true)\r\n });\r\n\t\r\n\tconst dateValues: DateOption[] = [];\r\n\tdocument.getElementsByName(el.dataset.name)\r\n\t\t.forEach(x => dateValues.push(new Date((x as HTMLInputElement).value)));\r\n\t\r\n\tif(dateValues.length > 0) {\r\n\t\tflatPickrControl.setDate(dateValues, false, \"m/d/Y\");\r\n\t}\r\n\r\n\tflatPickrControl.element.classList.add('multi-date');\r\n}\r\n\r\nexport function setupMultiDates(): void {\r\n\t// find all of the date elements that should be multi-date\r\n\tconst multiDates = document.querySelectorAll('input[type=\"multi-date\"]');\r\n\tmultiDates.forEach((el) => setupMultiDate(el as HTMLInputElement));\r\n}\r\n\r\nfunction appendFormData(selectedDates: Date[], dateStr: string, instance: FlatPickr) {\r\n\tvar inputContainer = $(instance.element).parent().next('.multi-date-container')[0];\r\n\tinputContainer.innerHTML = '';\r\n\r\n\tfor(let date of selectedDates) {\r\n\t\tconst dateInput = document.createElement('input');\r\n\t\tdateInput.name = instance.element.dataset.name;\r\n\t\tdateInput.value = date.toLocaleDateString('en-us');\r\n\t\tdateInput.type = 'hidden';\r\n\t\tdateInput.setAttribute('aria-label', instance.element.dataset.name);\r\n\r\n\t\tinputContainer.append(dateInput);\r\n\t}\r\n}\r\n","import 'select-woo';\r\nimport 'select-woo/dist/css/select2.css';\r\nimport '@ttskch/select2-bootstrap4-theme/dist/select2-bootstrap4.css';\r\n\r\nconst selectAllVal = 'all';\r\nconst selectAllSelector = '.select2.select-all';\r\n\r\nexport default function init(): void {\r\n\t// initialize select2 on each of them and set the hidden input label for ADA compliance.\r\n\tsetupMultiSelects();\r\n\tsetupSelectAllOption();\r\n\r\n\t$('form').on('select2:select', '.select2.select-all', trySelectAll);\r\n}\r\n\r\nexport function setupMultiSelect(elementOrSelector: string | HTMLSelectElement): void {\r\n\tconst el = $(elementOrSelector as unknown)[0] as HTMLSelectElement;\r\n\tif (!el) return;\r\n\r\n\tconst placeHolder = $(el).attr('placeholder');\r\n\tif (placeHolder) {\r\n\t\tel.dataset.placeholder = placeHolder;\r\n\t}\r\n\tconst selectEl = $(el).selectWoo()[0];\r\n\tsetHiddenInputAriaLabel(selectEl);\r\n\t$(el).children('option').attr('aria-role', 'none');\r\n}\r\n\r\nexport function setupMultiSelects(): void {\r\n\t// find all of the select elements that should be multi-select\r\n\tconst multiSelects = document.querySelectorAll('select[multiple]');\r\n\t// initialize select2 on each of them and set the hidden input label for ADA compliance.\r\n\tmultiSelects.forEach((el) => setupMultiSelect(el as HTMLSelectElement));\r\n}\r\n\r\nfunction setHiddenInputAriaLabel(el: HTMLElement) {\r\n\t// get the label associated to the select.\r\n\tconst selectLabel = $('main').find(`label[for=\"${el.id}\"]`)[0];\r\n\tconst ariaLabelledByAttr = $(el).attr('aria-labelledby');\r\n\r\n\tconst hiddenTextInput = $(el).siblings('.select2-container').find('input.select2-search__field')[0];\r\n\r\n\tif (!selectLabel) {\r\n\t\tif (ariaLabelledByAttr == null || ariaLabelledByAttr.length == 0) {\r\n\t\t\tthrow new Error(`No label was found for the #${el.id} multi-select element.`);\r\n\t\t} else {\r\n\t\t\thiddenTextInput.setAttribute('aria-labelledby', ariaLabelledByAttr);\r\n\t\t}\r\n\t} else {\r\n\t\t// add an id to the label so that we can reference it with aria.\r\n\t\tselectLabel.id = `${el.id}-label`;\r\n\t\t// find the hidden text-input and set aria-labeled-by on it.\r\n\t\thiddenTextInput.setAttribute('aria-labelledby', selectLabel.id);\r\n\t}\r\n}\r\n\r\nexport function tryPreselectOption(...multiSelects: HTMLSelectElement[]) {\r\n for(let multiSelect of multiSelects) {\r\n const opts = Array.from(multiSelect.options);\r\n\r\n if(opts.length === 1 && opts[0].value !== selectAllVal) {\r\n $(multiSelect).val(opts[0].value);\r\n $(multiSelect).trigger('change');\r\n }\r\n }\r\n}\r\n\r\nfunction setupSelectAllOption() {\r\n\tconst multiSelects = document.querySelectorAll(selectAllSelector);\r\n\t\r\n\tfor(const multiSelect of multiSelects) {\r\n\t\tconst selectAllOption = new Option('Select All', selectAllVal, false, false);\r\n\t\tif ($(multiSelect).find('option[value=\"all\"]').length == 0) {\r\n\t\t\t$(multiSelect).prepend(selectAllOption);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction trySelectAll(ev: JQuery.ChangeEvent) {\r\n\tlet selection = (ev as any).params.data.id;\r\n\tlet allOptions = Array.from(($(ev.currentTarget)[0] as HTMLSelectElement).options).map(x => x.value).filter(x => x !== selectAllVal);\r\n\t\r\n\tif(selection === selectAllVal) {\r\n\t\t$(ev.currentTarget).val(null);\r\n\t\t$(ev.currentTarget).val(allOptions);\r\n\t\t$(ev.currentTarget).trigger('change');\r\n\t}\r\n}","const saveChangesText = () => $('.saveChangesWarning') as JQuery;\r\n\r\nexport default {\r\n\tinit,\r\n\thideSaveChangesWarning,\r\n showSaveChangesWarning\r\n};\r\n\r\nexport function init(): void {\r\n if(saveChangesText().length) {\r\n hideSaveChangesWarning();\r\n $('input, select, textarea').on('change input', (e) => {\r\n e.stopImmediatePropagation();\r\n showSaveChangesWarning();\r\n });\r\n\r\n $('form').on('submit', () => {\r\n hideSaveChangesWarning();\r\n });\r\n \r\n window.addEventListener('beforeunload', (e) => {\r\n if(saveChangesText().is(':visible')) {\r\n e.preventDefault();\r\n e.returnValue = '';\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function hideSaveChangesWarning() {\r\n saveChangesText().addClass('d-none');\r\n}\r\n\r\nexport function showSaveChangesWarning() {\r\n saveChangesText().removeClass('d-none');\r\n}\r\n\r\n$(init);","/*\r\nTo use this confirmation modal utility, you simply have to add the class \"requires-confirmation\" to a clickable element on the page\r\n and provide the attribute data-confirmation-message attribute (e.g. data-confirmation-message=\"Are you sure you want to undo the termination on this stay?\").\r\n\r\nTo confirm a GET link, create an MVC link like normal and add the pieces references above. The utility will pick up the GET url from the rendered Razor code.\r\n\r\nTo confirm a POST form, create a form element with the appropriate data fields, action and method. Add a data-form-selector attribute to your clickable element\r\n that would select the form to be posted.\r\n\r\nThis utility will pick up the confirmation modal trigger you have defined and intercept the either normal MVC route or the form submission with a modal.\r\nIf the \"Yes\" option is selected, if a form selector is designated, the form will be submitted. Otherwise the MVC GET route will be followed.\r\n\r\nThe UpdateStay.cshtml page has an example of this utility being used for a POST form submission with the Undo Stay Termination process.\r\n*/\r\n\r\nimport { Modal } from \"bootstrap\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nconst classIdentifier = 'requires-confirmation';\r\nconst configuredIdentifier = 'confirmation-configured';\r\n\r\nexport default {\r\n configureConfirmationModals\r\n}\r\n\r\nexport function configureConfirmationModals() {\r\n $(`.${classIdentifier}`).not(`.${configuredIdentifier}`).each((i, e) => {\r\n $(e).on('click', function (e) {\r\n e.preventDefault();\r\n\r\n displayConfirmationModal(this.id, this.dataset.confirmationMessage, () => {\r\n // get confirmation action values\r\n const confirmationFormSelector = this.getAttribute('form') ? '#' + this.getAttribute('form') : this.dataset.formSelector;\r\n const confirmationUrl = $(this).attr('href');\r\n\r\n if (confirmationFormSelector) {\r\n $(confirmationFormSelector).trigger('submit');\r\n } else {\r\n window.location.href = confirmationUrl;\r\n }\r\n }, this.dataset.isHtml, this.dataset.callingElementId);\r\n\r\n return false;\r\n });\r\n $(e).addClass(configuredIdentifier);\r\n });\r\n}\r\n\r\nexport function displayConfirmationModal(id: string, message: string, onConfirmHandler: Function, isHtml?: string, callingElementId?: string) {\r\n // setup modal variables from trigger\r\n const modalId = (id || uuidv4()) + '-confirmation';\r\n\r\n const modalElement = document.createElement('div');\r\n modalElement.id = modalId;\r\n modalElement.setAttribute('class', 'modal');\r\n modalElement.setAttribute('tabindex', '1');\r\n modalElement.innerHTML = `\r\n
\r\n
\r\n
\r\n
Confirmation
\r\n\r\n
\r\n
\r\n

\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n`;\r\n document.body.appendChild(modalElement);\r\n\r\n setTimeout(() => {\r\n const confirmationModal = new Modal(modalElement);\r\n confirmationModal.show();\r\n\r\n if (isHtml === \"true\") {\r\n $(`#${modalId} p`).html(message);\r\n }\r\n else {\r\n $(`#${modalId} p`).text(message);\r\n }\r\n \r\n $(`#${modalId} .confirmation-button`).on('click', () => {\r\n if (onConfirmHandler) {\r\n onConfirmHandler(confirmationModal);\r\n confirmationModal.hide();\r\n }\r\n });\r\n }, 0);\r\n document.addEventListener('hidden.bs.modal', function () {\r\n if (callingElementId > \"\") {\r\n document.getElementById(callingElementId).focus();\r\n }\r\n });\r\n}","import { Popover, Tooltip } from 'bootstrap';\r\nimport userPreferencesService from '@common/Services/preferences-service';\r\nimport { getPageHelpTexts, savePageHelpText } from '@common/Services/client-data-service';\r\n\r\nconst editModeIsOn = () => {\r\n return !!new URLSearchParams(window.location.search).get('EditMode');\r\n};\r\nconst editModeToggle = () => $('.ccib-edit-mode-toggle');\r\nconst pageId = () => $('#PageId').val()?.toString();\r\nconst pageButtons = () => $('#main button, #main input[type=\"submit\"]').not('.accordion-button').not('.nav-link');\r\nconst pageLinkButtons = () => $('#main a.btn, #main a[role=\"button\"]').not('.nav-link');\r\nconst pageInputs = () => $('#main input:not(.js-rater-box *), #main select, #main input[type=\"checkbox\"]');\r\nconst manualElements = () => $('#main .ccib-manual-help-element');\r\nconst manualLabels = () => $('#main .ccib-manual-help-label');\r\nconst editIdPrefix = 'HelpTextFor_';\r\nconst editButtonIdPrefix = 'HelpTextSaveFor_';\r\nlet helpTextManager: HelpTextManager;\r\n\r\nexport async function InitializeHelpText() {\r\n if (!!pageId()) {\r\n helpTextManager = new HelpTextManager(pageId());\r\n await helpTextManager.InitializeData();\r\n\r\n InitializeMenu();\r\n\r\n await InitializeHelpTextLabels();\r\n }\r\n}\r\n\r\nfunction InitializeMenu() {\r\n const params = new URLSearchParams(window.location.search);\r\n editModeToggle().on('click', () => {\r\n if (editModeIsOn()) {\r\n params.delete('EditMode');\r\n } else {\r\n params.set('EditMode', 'true');\r\n }\r\n history.pushState(null, null, \"?\" + params.toString());\r\n window.location.reload();\r\n });\r\n}\r\n\r\nasync function InitializeHelpTextLabels() {\r\n if (editModeIsOn()) {\r\n pageButtons().attr('disabled', 'disabled');\r\n pageLinkButtons().addClass('disabled');\r\n manualLabels().removeAttr('hidden');\r\n\r\n applyInputPopovers();\r\n } else {\r\n userPreferencesService.preferences.then((preferences) => {\r\n if (preferences.showInputHelp) {\r\n applyHelpTextTooltips();\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction applyInputPopovers() {\r\n pageInputs().each((_, element) => {\r\n // TODO: provide a solution to checkbox and toggle labels so that OCC Users can\r\n // edit them without triggering the toggle or checkbox\r\n if ($(element).parent().hasClass('form-toggle') || $(element).parent().hasClass('form-check')) {\r\n // skip toggle and checkbox inputs for now ¯\\_(ツ)_/¯\r\n // return;\r\n }\r\n\r\n // does the element have an input-id attribute?\r\n // if so, decode it (see ValidationTagHelper.cs)\r\n // if not, grab the normal id attribute\r\n const fieldId = $(element).attr('input-id')\r\n ? atob($(element).attr('input-id'))\r\n : element.id; \r\n const label = $(`[for=\"${element.id}\"]`);\r\n\r\n if (label.length > 0) {\r\n label.addClass('ccib-help-text-label');\r\n label.addClass(helpTextManager.GetHelpText(fieldId) ? 'ccib-help-text-label-exists' : 'ccib-help-text-label-new');\r\n\r\n setupLabelPopover(label, fieldId);\r\n }\r\n });\r\n\r\n manualElements().each((_, element) => {\r\n const elementId = element.id;\r\n const label = $(`#${elementId}_label`);\r\n\r\n label.addClass(helpTextManager.GetHelpText(elementId) ? 'ccib-help-text-label-exists' : 'ccib-help-text-label-new');\r\n\r\n setupLabelPopover(label, elementId);\r\n })\r\n}\r\n\r\nfunction applyHelpTextTooltips() {\r\n const helpTexts = helpTextManager.GetHelpTexts();\r\n\r\n helpTexts.forEach((textEntry) => {\r\n if (!!textEntry.value) {\r\n // see if there's an input element on this page for the help text entry\r\n let input: HTMLElement;\r\n const inputSelector = $(`#${textEntry.key}`);\r\n if (inputSelector.length > 0) {\r\n // element matched on normal id attribute\r\n input = inputSelector[0];\r\n } else {\r\n // attempt to match element on encoded input-id attribute (see ValidationTagHelper.cs)\r\n const encodedId = btoa(textEntry.key);\r\n const inputSelector = $(`[input-id=\"${encodedId}\"]`);\r\n input = inputSelector.length > 0 ? inputSelector[0] : null;\r\n }\r\n\r\n // if an input element exists...\r\n if (input !== null) {\r\n const label = $(`[for=\"${input.id}\"]`);\r\n\r\n // if there's a label for this input element...\r\n if (label.length > 0) {\r\n label.addClass('ccib-help-text-label');\r\n setupLabelTooltip(label, textEntry.value);\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction setupLabelPopover(label: JQuery, fieldId: string) {\r\n // setup popover element ids\r\n const safeFieldId = fieldId.replace(/\\./g, '_');\r\n const fieldEditButtonId = `${editButtonIdPrefix}${safeFieldId}`;\r\n const fieldEditId = `${editIdPrefix}${safeFieldId}`;\r\n const title = label.text().length > 0 ? label.text() : label.attr('title');\r\n\r\n // setup the popover\r\n const popover = new Popover(label[0], {\r\n container: 'body',\r\n placement: 'top',\r\n trigger: 'manual',\r\n title: `${ title } Help Text `,\r\n sanitize: false,\r\n html: true,\r\n content: () => { return ``; }\r\n });\r\n\r\n // setup popover manual trigger open\r\n label.on('mouseover', () => {\r\n label.addClass('ccib-help-text-label-editing');\r\n popover.show();\r\n\r\n // setup popover manual trigger close\r\n $(`#${fieldEditButtonId}`).on('click', async (e) => {\r\n label.removeClass('ccib-help-text-label-editing');\r\n const newHelpText = $(`#${fieldEditId}`).val().toString();\r\n\r\n if (await helpTextManager.UpdateHelpText(fieldId, newHelpText)) {\r\n if (!!newHelpText) {\r\n label.addClass('ccib-help-text-label-exists');\r\n label.removeClass('ccib-help-text-label-new');\r\n } else {\r\n label.addClass('ccib-help-text-label-new');\r\n label.removeClass('ccib-help-text-label-exists');\r\n }\r\n }\r\n\r\n popover.hide();\r\n e.preventDefault();\r\n });\r\n });\r\n}\r\n\r\nfunction setupLabelTooltip(label: JQuery, helpText: string) {\r\n label.attr('data-bs-toggle', 'tooltip');\r\n if (!label.attr('data-bs-placement')) {\r\n label.attr('data-bs-placement', 'top');\r\n }\r\n label.attr('title', helpText);\r\n const _ = new Tooltip(label[0]);\r\n}\r\n\r\ninterface KeyValuePair {\r\n key: string;\r\n value: string;\r\n}\r\n\r\n// class that facilitates interacting with the Help Text data\r\nclass HelpTextManager {\r\n private pageId: string;\r\n private helpTexts: any;\r\n\r\n constructor(pageId: string) {\r\n this.pageId = pageId;\r\n }\r\n\r\n async InitializeData() {\r\n this.helpTexts = await getPageHelpTexts(this.pageId);\r\n }\r\n\r\n GetHelpTexts() {\r\n var resultSet: KeyValuePair[] = [];\r\n for (var key in this.helpTexts) {\r\n if (this.helpTexts.hasOwnProperty(key)) {\r\n resultSet.push({ key, value: this.helpTexts[key] });\r\n }\r\n }\r\n return resultSet;\r\n }\r\n\r\n GetHelpText(fieldId: string) {\r\n return this.helpTexts[fieldId] || '';\r\n }\r\n\r\n async UpdateHelpText(fieldId: string, helpText: string) {\r\n const result = await savePageHelpText(this.pageId, fieldId, helpText);\r\n if (result) {\r\n this.helpTexts[fieldId] = helpText;\r\n }\r\n return result;\r\n }\r\n}","//Adds a loader and disables a form button\r\ninterface SubmitButtonRecord {\r\n\toldText: string;\r\n\tbutton: HTMLButtonElement;\r\n}\r\n\r\nconst formButtons: SubmitButtonRecord[] = [];\r\n\r\nfunction show(form: HTMLFormElement): void {\r\n\tconst submitButton = $(form).find('button:not([type=\"button\"])');\r\n\r\n\tconst loaderSpan: HTMLSpanElement = document.createElement('span');\r\n\tloaderSpan.classList.add('spinner-grow');\r\n\tloaderSpan.classList.add('submit-loader');\r\n\tloaderSpan.classList.add('text-secondary');\r\n\r\n\tloaderSpan.setAttribute('role', 'status');\r\n\tloaderSpan.setAttribute('aria-hidden', 'true');\r\n\r\n\tsubmitButton.each((index, el: HTMLButtonElement) => {\r\n\t\t$(el).addClass('d-inline-flex justify-content-center align-items-center position-relative');\r\n\r\n\t\tconst textSpan: HTMLSpanElement = document.createElement('span');\r\n\t\ttextSpan.classList.add('submit-loader-original-text');\r\n\t\ttextSpan.textContent = $(el).text();\r\n\r\n\t\tformButtons.push({ button: el, oldText: el.textContent });\r\n\r\n\t\t$(el).html(textSpan);\r\n\t\t$(el).append(loaderSpan);\r\n\t\tel.setAttribute('disabled', 'disabled');\r\n\t});\r\n}\r\n\r\nfunction resetAll(): void {\r\n\tformButtons.forEach((buttonRecord) => {\r\n\t\tbuttonRecord.button.firstElementChild?.remove();\r\n\t\tbuttonRecord.button.textContent = buttonRecord.oldText;\r\n\t\tbuttonRecord.button.removeAttribute('disabled');\r\n\t});\r\n}\r\n\r\nexport default { show, resetAll };\r\n","import { HandleClientError } from './client-error-service';\r\nimport qs from 'qs';\r\n\r\nexport interface DictionaryItem {\r\n\tkey: string;\r\n\tvalue: string;\r\n}\r\n\r\nexport interface ProgramRecord {\r\n\tprogramId: string;\r\n\tname: string;\r\n\thandlesBackgroundCheckInternally: boolean;\r\n}\r\n\r\nfunction getAntiForgeryToken(): string {\r\n\treturn (document.querySelector('[Name=\"AntiForgeryToken\"]') as HTMLInputElement).value;\r\n}\r\n\r\n//represents a code table option object\r\nexport interface CodeTableOption {\r\n\tid: string;\r\n\tcode: string;\r\n\tdescription: string;\r\n\tisActive: boolean;\r\n}\r\n\r\n//Fetches the set of programs active on a given date\r\nexport async function getCurrentPrograms(date: string): Promise {\r\n\tconst queryParams = qs.stringify({activeDate: date});\r\n\r\n\tconst programs = await fetch(`/clientData/currentPrograms?${queryParams}`)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getCurrentPrograms.name, e));\r\n\r\n\treturn programs;\r\n}\r\n\r\n//Fetches the services types for a set of program ids\r\nexport async function getCurrentServiceTypesForInvoicePeriod(invoicePeriod: string, ...ids: string[]): Promise {\r\n\tconst queryParams = qs.stringify({programIds: ids, invoicePeriod: invoicePeriod});\r\n\r\n\tconst serviceTypes = await fetch(`/clientData/currentServiceTypeOptionsForInvoicePeriod?${queryParams}`)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getCurrentServiceTypesForInvoicePeriod.name, e));\r\n\r\n\treturn serviceTypes;\r\n}\r\n\r\n//Fetches the active service types for a given program and date\r\nexport async function getCurrentServiceTypesForProgram(activeDate: string, programId: string): Promise {\r\n\tconst queryParams = qs.stringify({activeDate: activeDate, programId: programId});\r\n\r\n\tconst serviceTypes = await fetch(`/clientData/activeServiceTypeOptions?${queryParams}`)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getCurrentServiceTypesForProgram.name, e));\r\n\r\n\treturn serviceTypes;\r\n}\r\n\r\n//Fetches the counties\r\nexport async function getCounties(): Promise {\r\n\tconst counties = await fetch('/clientData/counties')\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getCounties.name, e));\r\n\r\n\treturn counties;\r\n}\r\n\r\n//Fetches the unacknowledged user notifications\r\nexport async function getUserNotificationCount(): Promise {\r\n\tconst userNotifications = await fetch('/clientData/userNotifications')\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getUserNotificationCount.name, e));\r\n\r\n\treturn userNotifications.length;\r\n}\r\n\r\n//Fetches programs\r\nexport async function getProgramsById(programIds: string[]): Promise> {\r\n\tconst params = new URLSearchParams();\r\n\r\n\tprogramIds.forEach((programId, index) => {\r\n\t\tparams.append(`programIds[${index}]`, programId);\r\n\t});\r\n\r\n\tconst url = '/clientData/programsById?' + params.toString();\r\n\tconst programs = await fetch(url)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getProgramsForProviders.name, e));\r\n\r\n\treturn programs;\r\n}\r\n\r\n//Fetches the programs\r\nexport async function getProgramsByProvider(providerId: string): Promise {\r\n\tconst programs = await fetch('/clientData/programs?providerid=' + providerId)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getProgramsByProvider.name, e));\r\n\r\n\treturn programs;\r\n}\r\n\r\n//Fetches the programs\r\nexport async function getProgramsAsDictionary(providerIds: string[]): Promise {\r\n\tlet qs = '';\r\n\tif (providerIds != null) {\r\n\t\tproviderIds.forEach((id) => (qs += '&providerIds=' + id));\r\n\t\tqs = '?' + qs.substr(1);\r\n\t}\r\n\tconst programs = await fetch('/clientData/providersprograms' + qs)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getProgramsAsDictionary.name, e));\r\n\r\n\treturn programs;\r\n}\r\n\r\n// Fetches Judicial districts\r\nexport async function getJudicialDistricts(): Promise {\r\n\tconst jds = await fetch('/clientData/judicialDistricts')\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getJudicialDistricts.name, e));\r\n\r\n\treturn jds;\r\n}\r\n\r\nexport async function getJudicialDistrictsForInvoicePeriod(period: string, programIds: string[], serviceTypeIds: string[]): Promise {\r\n\tconst params = qs.stringify({ period: period, programIds: programIds, serviceTypeIds: serviceTypeIds });\r\n\tconst url = `/clientData/judicialDistrictsForInvoicePeriod?${params}`;\r\n\r\n\tconst jds = await fetch(url)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getJudicialDistrictsForInvoicePeriod.name, e));\r\n\r\n\treturn jds;\r\n}\r\n\r\n//Fetches the programs for multiple providers\r\nexport async function getProgramsForProviders(providerIds: string[]): Promise {\r\n\tconst params = new URLSearchParams();\r\n\r\n\tproviderIds.forEach((providerId, index) => {\r\n\t\tparams.append(`providerIds[${index}]`, providerId);\r\n\t});\r\n\r\n\tconst url = '/clientData/programs?' + params.toString();\r\n\tconst programs = await fetch(url)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getProgramsForProviders.name, e));\r\n\r\n\treturn programs;\r\n}\r\n\r\nexport async function checkPasswordHistory(username: string, password: string, resetToken: string): Promise {\r\n\tconst response = await fetch('/clientData/checkPassword', {\r\n\t\tmethod: 'post',\r\n\t\tbody: JSON.stringify({\r\n\t\t\tusername: username,\r\n\t\t\tpassword: password,\r\n\t\t\tresetToken: resetToken,\r\n\t\t}),\r\n\t\theaders: {\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t\t'X-CSRF-ANTIFORGERY-TOKEN': getAntiForgeryToken(),\r\n\t\t},\r\n\t});\r\n\r\n\tconst isRecentPassword = await response.json().catch(e => HandleClientError(checkPasswordHistory.name, e));\r\n\r\n\treturn !isRecentPassword;\r\n}\r\n\r\n//Fetches the users for a give program id\r\nexport async function getProgramUsers(id: string): Promise {\r\n\tconst programUsers = await fetch(`/clientData/programUsers?programId=${id}`)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getProgramUsers.name, e));\r\n\r\n\treturn programUsers;\r\n}\r\n\r\n//Fetches the legal status codes for a given service type id\r\nexport async function getLegalStatusCodesForServiceType(ids: string[]): Promise {\r\n const legalStatuses = await fetch(`/clientData/legalStatuses?serviceTypeId=${ids.join('&serviceTypeId=')}`)\r\n .then((res) => res.json())\r\n .catch(e => HandleClientError(getLegalStatusCodesForServiceType.name, e));\r\n\r\n return legalStatuses;\r\n}\r\n\r\nexport async function getCurrentLevelCodesForServiceType(id: string, activeDate: string): Promise {\r\n\tconst levelCodeItems = await fetch(`/clientData/levelCodesForServiceType?serviceTypeId=${id}&activeDate=${activeDate}`)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getCurrentLevelCodesForServiceType.name, e));\r\n\r\n\treturn levelCodeItems;\r\n}\r\n\r\nexport async function getCurrentRateAdjustmentCodesForServiceType(id: string, activeDate: string): Promise {\r\n\tconst rateAdjustmentItems = await fetch(`/clientData/rateAdjustmentCodesForServiceType?serviceTypeId=${id}&activeDate=${activeDate}`)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getCurrentRateAdjustmentCodesForServiceType.name, e));\r\n\r\n\treturn rateAdjustmentItems;\r\n}\r\n\r\nexport async function getRoleDescriptions(): Promise {\r\n const roleInfo = await fetch(`/clientData/roleDescriptions`)\r\n .then((res) => res.json())\r\n .catch(e => HandleClientError(getPageHelpTexts.name, e));\r\n\r\n return roleInfo;\r\n}\r\n\r\nexport async function getPageHelpTexts(pageId: string): Promise {\r\n const helpTexts = await fetch(`/clientData/helpTexts?pageId=${pageId}`)\r\n .then((res) => res.json())\r\n .catch(e => HandleClientError(getPageHelpTexts.name, e));\r\n\r\n return helpTexts;\r\n}\r\n\r\nexport async function savePageHelpText(pageId: string, fieldId: string, helpText: string): Promise {\r\n\treturn fetch(`/clientData/updateHelpText`, \r\n\t\t{ \r\n\t\t\tbody: JSON.stringify({ pageId, fieldId, helpText }),\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t'X-CSRF-ANTIFORGERY-TOKEN': (document.querySelector('[Name=\"AntiForgeryToken\"]') as HTMLInputElement).value,\r\n\t\t\t}\r\n\t\t})\r\n\t\t.then(async (res) => !!res.json())\r\n\t\t.catch((e) => false);\r\n}\r\n\r\nexport async function getReleaseToOptions(serviceTypeCategoryId: string, terminationReasonId: string): Promise {\r\n const options = await fetch(`/clientData/releaseToOptions?serviceTypeCategoryId=${serviceTypeCategoryId}&terminationReasonId=${terminationReasonId}`)\r\n .then((res) => res.json())\r\n .catch(e => HandleClientError(getReleaseToOptions.name, e));\r\n\r\n return options;\r\n}\r\n\r\nexport async function getTreatmentFundTypes(serviceDates: string[], stayId: string, fundCategoryId: string): Promise {\r\n\tconst params = qs.stringify({ serviceDates: serviceDates, stayId: stayId, fundCategoryId: fundCategoryId });\r\n\tconst url = `/clientData/treatmentFundTypes?${params}`;\r\n\r\n const subTypes = await fetch(url)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getTreatmentFundTypes.name, e));\r\n\r\n\treturn subTypes;\r\n}\r\n\r\nexport async function getTreatmentFundSubTypes(serviceDates: string[], stayId: string, fundTypeId: string, fundCategoryId: string): Promise {\r\n\tconst params = qs.stringify({ serviceDates: serviceDates, stayId: stayId, fundTypeId: fundTypeId, fundCategoryId: fundCategoryId });\r\n\tconst url = `/clientData/treatmentFundSubTypes?${params}`;\r\n\r\n const subTypes = await fetch(url)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getTreatmentFundSubTypes.name, e));\r\n\r\n\treturn subTypes;\r\n}\r\n\r\nexport async function getTreatmentFundProviders(fundSubTypeId: string, fundTypeId: string, fundCategoryId: string): Promise {\r\n\tconst params = qs.stringify({ fundSubTypeId: fundSubTypeId, fundTypeId: fundTypeId, fundCategoryId: fundCategoryId });\r\n\tconst url = `/clientData/treatmentFundProviders?${params}`;\r\n\r\n const subTypes = await fetch(url)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getTreatmentFundProviders.name, e));\r\n\r\n\treturn subTypes;\r\n}\r\n\r\nexport async function getReportGroups(): Promise {\r\n\tconst url = '/clientData/reportGroups';\r\n\r\n const reportGroups = await fetch(url)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getReportGroups.name, e));\r\n\r\n\treturn reportGroups;\r\n}\r\n\r\nexport async function getAssociatedReportGroups(devExReportId: string): Promise {\r\n\tconst params = qs.stringify({ devExReportId: devExReportId });\r\n\tconst url = `/clientData/associatedReportGroups?${params}`;\r\n\r\n const reportGroups = await fetch(url)\r\n\t\t.then((res) => res.json())\r\n\t\t.catch(e => HandleClientError(getAssociatedReportGroups.name, e));\r\n\r\n\treturn reportGroups;\r\n}\r\n\r\nexport async function regenServiceInvoiceGroup(serviceInvoiceGroupId: string): Promise {\r\n\tconst response = await fetch('/admin/RegenInvoiceGroup', {\r\n\t\tmethod: 'post',\r\n\t\tbody: JSON.stringify({\r\n\t\t\tserviceInvoiceGroupId: serviceInvoiceGroupId,\r\n\t\t}),\r\n\t\theaders: {\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t\t'X-CSRF-ANTIFORGERY-TOKEN': getAntiForgeryToken(),\r\n\t\t},\r\n\t});\r\n\r\n\tawait response.text()\r\n\t\t.catch(e => console.log(e));\r\n}\r\n\r\n(window).regenServiceInvoiceGroup = regenServiceInvoiceGroup;","export function HandleClientError(method: string, error: Error): void {\r\n\tconst params = new URLSearchParams();\r\n\r\n\tconsole.log(error.message);\r\n\t\r\n\tparams.append('method', method);\r\n\tparams.append('name', error.name);\r\n\tparams.append('message', error.message);\r\n\tparams.append('stack', error.stack);\r\n\r\n\twindow.location.replace(`/Home/ClientError?${params.toString()}`);\r\n}\r\n","import { HandleClientError } from './client-error-service';\r\n\r\nclass ConfigurationService {\r\n\tprivate static _instance: ConfigurationService;\r\n\tgridMultiValuePropertyDelimiter: string;\r\n\r\n\tpublic static get Instance() {\r\n\t\treturn this._instance || (this._instance = new this());\r\n\t}\r\n\r\n\tpublic async Initialize(): Promise {\r\n\t\tthis.gridMultiValuePropertyDelimiter =\r\n\t\t\tsessionStorage.getItem('gridMultiValuePropertyDelimiter') ??\r\n\t\t\t(await fetch(`/clientData/mvpDelimiter`)\r\n\t\t\t\t.then((res) => res.json())\r\n\t\t\t\t.catch((e) => HandleClientError('gridMultiValuePropertyDelimiter', e)));\r\n\r\n\t\tsessionStorage.setItem('gridMultiValuePropertyDelimiter', this.gridMultiValuePropertyDelimiter);\r\n\t}\r\n}\r\n\r\nconst configuration = ConfigurationService.Instance;\r\n\r\nexport default configuration;\r\n","import { HandleClientError } from './client-error-service';\r\nimport { LocalStorageService } from './local-storage-service';\r\n\r\nexport interface UserPreferences {\r\n\tsaveGridSettings: boolean;\r\n\tshowInputHelp: boolean;\r\n}\r\n\r\nconst userPreferencesKey = 'UserPreferences';\r\n\r\nclass UserPreferencesService implements LocalStorageService {\r\n\tprivate static _instance: UserPreferencesService;\r\n\tpreferences: Promise;\r\n\r\n\tpublic static get Instance() {\r\n\t\treturn this._instance || (this._instance = new this());\r\n\t}\r\n\r\n\tpublic async Initialize(): Promise {\r\n\t\tvar localPreferences = localStorage.getItem(userPreferencesKey);\r\n\t\tif (!!localPreferences && localPreferences !== '{}') {\r\n\t\t\tthis.preferences = new Promise((res) => { res(JSON.parse(localPreferences)) });\r\n\t\t} else {\r\n\t\t\tawait this.RefreshData();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic async RefreshData(): Promise {\r\n\t\tthis.preferences = fetch(`/ClientPreferences/GetCurrentUserPreferences`)\r\n\t\t\t.then((res) => res.json())\r\n\t\t\t.catch((e) => HandleClientError('UserPreferencesService.Initialize()', e));\r\n\t\tthis.preferences.then(preferences => {\r\n\t\t\tlocalStorage.setItem(userPreferencesKey, JSON.stringify(preferences));\r\n\t\t});\r\n\t}\r\n\r\n\tpublic async UpdateUserPreferences(newPreferences: UserPreferences): Promise {\r\n\t\treturn (await fetch(`/ClientPreferences/UpdateUserPreferences`, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t'X-CSRF-ANTIFORGERY-TOKEN': (document.querySelector('[Name=\"AntiForgeryToken\"]') as HTMLInputElement).value,\r\n\t\t\t},\r\n\t\t body: JSON.stringify(newPreferences)\r\n\t\t})\r\n\t\t.then(async (res) => {\r\n\t\t\tvar result = res.json();\r\n\t\t\tlocalStorage.setItem(userPreferencesKey, JSON.stringify(newPreferences));\r\n\t\t\treturn result;\r\n\t\t})\r\n\t\t.catch((e) => HandleClientError('UpdateUserPreferences', e)));\r\n\t}\r\n}\r\n\r\nconst userPreferencesService = UserPreferencesService.Instance;\r\n\r\nexport default userPreferencesService;\r\n","const inputIdParamName = 'inputId';\r\n\r\nexport default {\r\n focusInputFromQueryString,\r\n inputIdIsPresent\r\n}\r\n\r\nexport function focusInputFromQueryString() {\r\n const urlParams = new URLSearchParams(window.location.search)\r\n\r\n if(!inputIdIsPresent()) {\r\n return;\r\n }\r\n\r\n const selector = `[input-id=\"${urlParams.get(inputIdParamName)}\"]`;\r\n const target = document.querySelector(selector) as HTMLElement;\r\n\r\n if(target) {\r\n target.focus();\r\n }\r\n}\r\n\r\nexport function inputIdIsPresent() {\r\n const urlParams = new URLSearchParams(window.location.search)\r\n return urlParams.has(inputIdParamName);\r\n}","const inputIdParamName = 'inputId';\r\n\r\nexport default {\r\n preventNegativeNumbers\r\n}\r\n\r\nexport function preventNegativeNumbers() {\r\n var numericInputs = $('input[type=\"number\"][min=\"0\"]'); \r\n numericInputs.on('change', (e) => {\r\n var input = $(e.currentTarget);\r\n input.val(input.val().toString().replace(/[^0-9\\.]/i, ''));\r\n });\r\n\r\n var textInputs = $('input[type=\"text\"][min=\"0\"]'); \r\n textInputs.on('change', (e) => {\r\n var input = $(e.currentTarget);\r\n input.val(input.val().toString().replace(/\\-/i, ''));\r\n });\r\n}","import flatpickr from \"flatpickr\";\r\nimport { Instance as FlatPickr } from \"flatpickr/dist/types/instance\";\r\nimport { DateOption } from \"flatpickr/dist/types/options\";\r\n\r\nexport default function init(): void {\r\n\tsetupMultiDates();\r\n}\r\n\r\nexport function setupDateRange(elementOrSelector: string | HTMLInputElement): void {\r\n\tconst el = $(elementOrSelector as unknown)[0] as HTMLInputElement;\r\n\tif (!el) return;\r\n\r\n\tconst flatPickrControl = flatpickr(el, {\r\n mode: \"range\",\r\n dateFormat: \"m/d/Y\",\r\n\t\tallowInput: true,\r\n\t\tonChange: appendFormData\r\n });\r\n\t\r\n\tconst dateValues: DateOption[] = [];\r\n\tdocument.getElementsByName(el.dataset.name)\r\n\t\t.forEach(x => dateValues.push(new Date((x as HTMLInputElement).value)));\r\n\t\r\n\tif(dateValues.length > 0) {\r\n\t\tflatPickrControl.setDate(dateValues, false, \"m/d/Y\");\r\n\t}\r\n\r\n\tflatPickrControl.element.classList.add('date-range');\r\n}\r\n\r\nexport function setupMultiDates(): void {\r\n\t// find all of the date elements that should be multi-date\r\n\tconst multiDates = document.querySelectorAll('input[type=\"date-range\"]');\r\n\tmultiDates.forEach((el) => setupDateRange(el as HTMLInputElement));\r\n}\r\n\r\nfunction appendFormData(selectedDates: Date[], dateStr: string, instance: FlatPickr) {\r\n\tvar inputContainer = $(instance.element).parent().next('.date-range-container')[0];\r\n\tinputContainer.innerHTML = '';\r\n\r\n\tfor(let date of selectedDates) {\r\n\t\tconst dateInput = document.createElement('input');\r\n\t\tdateInput.name = instance.element.dataset.name;\r\n\t\tdateInput.value = date.toLocaleDateString('en-us');\r\n\t\tdateInput.type = 'hidden';\r\n\t\tdateInput.setAttribute('aria-label', instance.element.dataset.name);\r\n\r\n\t\tinputContainer.append(dateInput);\r\n\t}\r\n}\r\n","import submitLoader from '@common/Globals/submit-loader';\r\nimport multiSelect from '@common/Controls/multi-select';\r\nimport multiDate from '@common/Controls/multi-date';\r\nimport date from '@common/Controls/date';\r\nimport dateRange from '@common/Controls/date-range';\r\nimport 'flatpickr/dist/flatpickr.min.css';\r\nimport wip from '@common/Globals/wip';\r\nimport * as bootstrap from 'bootstrap';\r\n\r\nconst globalForm = () => $('form');\r\nconst sideBarCollapse = () => $('#sidebarCollapse');\r\nconst backButton = () => $('.js-back-button');\r\nconst allInputs = () => $(':input');\r\n\r\nexport default function init(): void {\r\n\tsideBarCollapse().on('click', toggleSidebar);\r\n\tglobalForm().on('submit', showSubmitLoader);\r\n\tbackButton().on('click', goBack);\r\n\tallInputs().on('change', removeValidationError);\r\n\r\n\tfor (const el of document.getElementsByClassName('toast')) {\r\n\t\tconst toast = new bootstrap.Toast(el);\r\n\t\ttoast.show();\r\n\t}\r\n\r\n\tdate();\r\n\tmultiSelect();\r\n\tmultiDate();\r\n\tdateRange();\r\n\twip();\r\n}\r\n\r\nfunction removeValidationError(ev: JQuery.ChangeEvent) {\r\n\tconst inputId = ev.currentTarget.getAttribute('input-id');\r\n\r\n\tif (inputId) {\r\n\t\t$(`:input[input-id=\"${inputId}\"]`).removeClass('input-validation-error');\r\n\t\t$(`span[input-id=\"${inputId}\"]`).removeClass('field-validation-error').text(null);\r\n\t}\r\n}\r\n\r\n// toggles the collapse of the primary nav\r\nasync function toggleSidebar() {\r\n\t$('#sidebar, #content').toggleClass('active');\r\n\r\n\tconst sidebarCollapsed = $('#sidebar').hasClass('active');\r\n\tawait fetch('/clientData/setSidebarState', {\r\n\t\tmethod: 'POST',\r\n\t\tbody: JSON.stringify({sidebarCollapsed}),\r\n\t\theaders: {\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t}\r\n\t});\r\n}\r\n\r\n\r\nfunction showSubmitLoader(ev: JQuery.SubmitEvent) {\r\n\tsubmitLoader.show(ev.currentTarget);\r\n}\r\n\r\nfunction goBack() {\r\n\twindow.history.back();\r\n}\r\n\r\n$(init);\r\n","import { Popover } from 'bootstrap';\r\n\r\nexport default function init(): void {\r\n\tconst wipElements = document.getElementsByClassName('wip');\r\n\r\n\tfor (const wipEl of wipElements) {\r\n\t\tconst el = wipEl as HTMLElement;\r\n\r\n\t\tconst defaultNotes = `This doesn't work yet!${\r\n\t\t\tel.dataset.jiraIssue\r\n\t\t\t\t? ' It will be implemented in ' + el.dataset.jiraIssue\r\n\t\t\t\t: ' Has a JIRA issue been created for it?'\r\n\t\t}`;\r\n\r\n\t\tconst jiraIssueLinkHtml = el.dataset.jiraIssue\r\n\t\t\t? ``\r\n\t\t\t: '';\r\n\r\n\t\tconst notesHtml = `
${el.dataset.notes ?? defaultNotes}
`;\r\n\r\n\t\tconst _ = new Popover(wipEl, {\r\n\t\t\ttitle: 'Work in progress...',\r\n\t\t\thtml: true,\r\n\t\t\tcontent: `${jiraIssueLinkHtml}${notesHtml}`,\r\n\t\t\ttrigger: 'click',\r\n\t\t\tsanitize: false,\r\n\t\t});\r\n\t}\r\n}\r\n","import { getUserNotificationCount } from '@common/Services/client-data-service';\r\n\r\nconst notificationCountSpan = () => >$('#NotificationCount');\r\n\r\nexport default async function init(): Promise {\r\n\tif (notificationCountSpan().length === 0) return;\r\n\r\n\tconst notificationCount = await getUserNotificationCount();\r\n\r\n\tif (notificationCount === 0) return;\r\n\r\n\tnotificationCountSpan().removeClass('d-none');\r\n\tnotificationCountSpan()[0].textContent = notificationCount.toString();\r\n}\r\n\r\n$(init);\r\n","import configuration from '@common/Services/configuration-service';\r\nimport userPreferences from '@common/Services/preferences-service';\r\nimport { InitializeLocalStorageRefresh } from '@common/Services/local-storage-service';\r\nimport { InitializeHelpText } from '@common/Globals/help-text';\r\nimport InputFinder from '@common/Globals/input-finder';\r\nimport InputNumber from '@common/Globals/input-number';\r\nimport ConfirmationModals from '@common/Globals/confirmation-modal';\r\n\r\n(async () => await configuration.Initialize())();\r\n(async () => await userPreferences.Initialize())();\r\n(async () => await InitializeLocalStorageRefresh())();\r\n(async () => await InitializeHelpText())();\r\n$(InputFinder.focusInputFromQueryString);\r\n$(InputNumber.preventNegativeNumbers);\r\n$(ConfirmationModals.configureConfirmationModals);\r\n\r\nimport './assets';\r\nimport '@common/Globals/global-ui-bindings';\r\nimport '@common/Globals/notification-loader';\r\nimport '@common/Controls/input-formatters';\r\nimport '@common/Controls/save-changes-warning';","import userPreferencesService from './preferences-service';\r\n\r\n// Interface for enforcing LocalStorageService types that could need to be refreshed on page load\r\nexport interface LocalStorageService {\r\n RefreshData(): Promise;\r\n}\r\n\r\n// Check for flags to refresh local storage data\r\nexport async function InitializeLocalStorageRefresh() {\r\n if ($('#LocalStorageRefreshUserPreferences').val() === \"true\") {\r\n await userPreferencesService.RefreshData();\r\n }\r\n}"],"names":["deferred","resolve","undefined","ready","Promise","init","setupDates","setupDate","elementOrSelector","config","el","$","attr","dateVal","value","flatPickrControl","mode","dateFormat","allowInput","altInput","altFormat","onReady","setDate","Date","each","i","unmaskElement","unmaskAll","maskCurrencyElement","maskPercentageElement","document","querySelectorAll","forEach","mask","regex","casing","placeholder","prefix","alias","unmaskAsNumber","autoUnmask","removeMaskOnSubmit","suffix","unmaskedVal","val","onChange","appendFormData","dateValues","getElementsByName","dataset","name","x","push","length","element","classList","add","setupMultiDate","selectedDates","dateStr","instance","inputContainer","parent","next","innerHTML","date","dateInput","createElement","toLocaleDateString","type","setAttribute","append","selectAllVal","selectAllSelector","setupMultiSelect","multiSelects","multiSelect","selectAllOption","Option","find","prepend","setupSelectAllOption","on","trySelectAll","placeHolder","selectLabel","id","ariaLabelledByAttr","hiddenTextInput","siblings","Error","setHiddenInputAriaLabel","selectWoo","children","tryPreselectOption","opts","Array","from","options","trigger","ev","selection","params","data","allOptions","currentTarget","map","filter","saveChangesText","hideSaveChangesWarning","e","stopImmediatePropagation","showSaveChangesWarning","window","addEventListener","is","preventDefault","returnValue","addClass","removeClass","configuredIdentifier","configureConfirmationModals","not","displayConfirmationModal","this","confirmationMessage","confirmationFormSelector","getAttribute","formSelector","confirmationUrl","location","href","isHtml","callingElementId","message","onConfirmHandler","modalId","modalElement","body","appendChild","setTimeout","confirmationModal","show","html","text","hide","getElementById","focus","editModeIsOn","URLSearchParams","search","get","editModeToggle","pageId","toString","pageButtons","pageLinkButtons","pageInputs","manualElements","manualLabels","editIdPrefix","editButtonIdPrefix","helpTextManager","async","InitializeHelpText","HelpTextManager","InitializeData","delete","set","history","pushState","reload","InitializeMenu","removeAttr","_","hasClass","fieldId","atob","label","GetHelpText","setupLabelPopover","elementId","preferences","then","showInputHelp","GetHelpTexts","textEntry","input","inputSelector","key","encodedId","btoa","helpText","setupLabelTooltip","InitializeHelpTextLabels","safeFieldId","replace","fieldEditButtonId","fieldEditId","title","popover","container","placement","sanitize","content","newHelpText","UpdateHelpText","constructor","helpTexts","resultSet","hasOwnProperty","result","formButtons","form","submitButton","loaderSpan","index","textSpan","textContent","button","oldText","resetAll","buttonRecord","firstElementChild","remove","removeAttribute","getAntiForgeryToken","querySelector","getCurrentPrograms","queryParams","activeDate","fetch","res","json","catch","getCurrentServiceTypesForInvoicePeriod","invoicePeriod","ids","programIds","getCurrentServiceTypesForProgram","programId","getUserNotificationCount","getProgramsById","url","getProgramsForProviders","getJudicialDistrictsForInvoicePeriod","period","serviceTypeIds","providerIds","providerId","checkPasswordHistory","username","password","resetToken","response","method","JSON","stringify","headers","getProgramUsers","getLegalStatusCodesForServiceType","join","getCurrentLevelCodesForServiceType","getCurrentRateAdjustmentCodesForServiceType","getRoleDescriptions","getPageHelpTexts","savePageHelpText","getReleaseToOptions","serviceTypeCategoryId","terminationReasonId","getTreatmentFundTypes","serviceDates","stayId","fundCategoryId","getTreatmentFundSubTypes","fundTypeId","getTreatmentFundProviders","fundSubTypeId","regenServiceInvoiceGroup","serviceInvoiceGroupId","console","log","HandleClientError","error","stack","Instance","_instance","Initialize","gridMultiValuePropertyDelimiter","sessionStorage","getItem","setItem","userPreferencesKey","localPreferences","localStorage","parse","RefreshData","UpdateUserPreferences","newPreferences","inputIdParamName","urlParams","inputIdIsPresent","selector","target","has","setupDateRange","removeValidationError","inputId","toggleSidebar","toggleClass","sidebarCollapsed","showSubmitLoader","goBack","back","getElementsByClassName","wipElements","wipEl","defaultNotes","jiraIssue","jiraIssueLinkHtml","notesHtml","notes","notificationCountSpan","notificationCount","InitializeLocalStorageRefresh"],"sourceRoot":""}