{"version":3,"file":"MuteTimings.cb66b37f52c9ee3ce1da.js","mappings":"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Q,gBAACuB,EAAA,EAAI,CAAC,KAAK,YAAa,GAEhC,aAAcZ,EAAU,SACxB,YAAY,QACZ,cAAY,sBACd,CACF,EACA,gBAACa,GAAA,GACC,UAAWxB,EAAO,gBAClB,MAAM,SACN,KAAK,YACL,QAAUyB,GAAM,CACdA,EAAE,eAAe,EACjBlB,EAAgBK,CAAK,CACvB,EACA,QAAQ,oBACV,CACF,CACF,CAEJ,CAAC,CACH,CACF,EACA,gBAACc,EAAA,IACC,UAAW1B,EAAO,aAClB,QAAQ,YACR,KAAK,SACL,KAAK,OACL,QAAS,IAAMM,EAAa,CAAE,WAAY,GAAI,SAAU,EAAG,CAAC,GAC7D,wBAED,CACF,CAEJ,EAEML,GAAa0B,IAA0B,CAC3C,SAAO;AAAA;AAAA,IAGP,aAAW;AAAA,qBACQA,EAAM,QAAQ,CAAC;AAAA,IAElC,kBAAgB;AAAA;AAAA,IAGhB,mBAAiB;AAAA,cACLA,EAAM,QAAQ,CAAC,SAASA,EAAM,QAAQ,EAAG;AAAA,IAErD,gBAAc;AAAA,qBACKA,EAAM,QAAQ,CAAC;AAAA,GAEpC,G,gBCjKA,MAAMC,GAAY,CAChB,iBACA,eACA,qBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,kBACA,qBACA,mBACA,eACA,oBACA,eACA,iBACA,eACA,uBACA,kBACA,gBACA,kBACA,kBACA,kBACA,gBACA,sBACA,cACA,iBACA,kBACA,gBACA,kBACA,eACA,oBACA,cACA,gBACA,oBACA,gBACA,gBACA,gBACA,gBACA,iBACA,mBACA,kBACA,iBACA,kBACA,gBACA,oBACA,qBACA,oBACA,kBACA,iBACA,eACA,kBACA,eACA,oBACA,mBACA,kBACA,oBACA,iCACA,8BACA,4BACA,0BACA,6BACA,4BACA,iCACA,0BACA,6BACA,6BACA,4BACA,4BACA,gBACA,mBACA,mBACA,gBACA,yBACA,mBACA,gBACA,iBACA,uBACA,oBACA,iBACA,gBACA,wBACA,uBACA,iBACA,kBACA,kBACA,iBACA,kBACA,oBACA,wBACA,qBACA,kBACA,iBACA,kBACA,uBACA,iBACA,uBACA,iBACA,kBACA,mBACA,mBACA,mBACA,sBACA,sBACA,oBACA,oBACA,kBACA,oBACA,qBACA,kBACA,qBACA,oBACA,oBACA,iBACA,kBACA,iBACA,qBACA,+BACA,uBACA,0BACA,6BACA,4BACA,wBACA,4BACA,0BACA,iBACA,kBACA,kBACA,iBACA,8BACA,8BACA,qBACA,iBACA,eACA,sBACA,wBACA,iBACA,kBACA,iBACA,kBACA,qBACA,oBACA,mBACA,oBACA,iBACA,qBACA,sBACA,mBACA,kBACA,oBACA,qBACA,mBACA,qBACA,iBACA,mBACA,kBACA,eACA,kBACA,8BACA,8BACA,iCACA,eACA,kBACA,iBACA,sBACA,qBACA,kBACA,yBACA,wBACA,sBACA,sBACA,uBACA,sBACA,uBACA,iBACA,iBACA,mBACA,qBACA,uBACA,mBACA,mBACA,wBACA,oBACA,uBACA,mBACA,gBACA,wBACA,mBACA,mBACA,mBACA,oBACA,qBACA,wBACA,sBACA,gBACA,sBACA,kBACA,kBACA,kBACA,oBACA,qBACA,mBACA,kBACA,sBACA,mBACA,mBACA,4BACA,uBACA,oBACA,qBACA,oBACA,qBACA,wBACA,mBACA,mBACA,oBACA,sBACA,YACA,cACA,aACA,cACA,aACA,cACA,gBACA,cACA,eACA,eACA,YACA,eACA,eACA,cACA,eACA,cACA,gBACA,aACA,kBACA,iBACA,eACA,gBACA,aACA,YACA,aACA,gBACA,iBACA,YACA,cACA,cACA,mBACA,iBACA,YACA,eACA,eACA,gBACA,iBACA,aACA,iBACA,eACA,eACA,iBACA,gBACA,gBACA,mBACA,oBACA,eACA,cACA,aACA,eACA,gBACA,cACA,cACA,eACA,oBACA,mBACA,YACA,YACA,kBACA,iBACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,gBACA,iBACA,aACA,gBACA,iBACA,qBACA,cACA,gBACA,eACA,cACA,eACA,aACA,aACA,mBACA,cACA,gBACA,iBACA,mBACA,eACA,cACA,qBACA,eACA,kBACA,mBACA,kBACA,sBACA,iBACA,mBACA,qBACA,yBACA,qBACA,mBACA,qBACA,qBACA,wBACA,mBACA,mBACA,kBACA,mBACA,qBACA,sBACA,sBACA,kBACA,mBACA,mBACA,iBACA,mBACA,gBACA,kBACA,gBACA,oBACA,kBACA,mBACA,kBACA,kBACA,kBACA,oBACA,gBACA,mBACA,kBACA,kBACA,qBACA,kBACA,gBACA,qBACA,cACA,eACA,cACA,gBACA,mBACA,gBACA,oBACA,gBACA,eACA,mBACA,eACA,gBACA,gBACA,cACA,eACA,mBACA,gBACA,cACA,cACA,gBACA,oBACA,kBACA,iBACA,oBACA,gBACA,eACA,mBACA,iBACA,gBACA,mBACA,kBACA,eACA,iBACA,gBACA,iBACA,mBACA,gBACA,gBACA,oBACA,gBACA,MACA,sBACA,gBACA,mBACA,eACA,gBACA,mBACA,cACA,kBACA,mBACA,iBACA,iBACA,QACA,eACA,mBACA,uBACA,kBACA,gBACA,iBACA,gBACA,oBACA,kBACA,eACA,mBACA,oBACA,kBACA,sBACA,eACA,mBACA,mBACA,iBACA,qBACA,iBACA,oBACA,iBACA,oBACA,iBACA,gBACA,eACA,kBACA,iBACA,oBACA,gBACA,mBACA,kBACA,iBACA,uBACA,oBACA,iBACA,iBACA,iBACA,oBACA,eACA,eACA,iBACA,KACF,EAEaC,GAAkBC,GAAuC,CACpE,MAAMC,EAAkDH,GAAU,IAAKI,IAAQ,CAC7E,MAAOA,EACP,MAAOA,CACT,EAAE,EAEF,OAAO,gBAACC,GAAA,GAAM,CAAU,GAAGH,EAAS,QAASC,CAAA,CAAiB,CAChE,EC7baG,GAAyB,IAAM,CAC1C,MAAMlC,KAAS,MAAW,EAAS,EAC7B,CAAE,UAAAG,EAAW,SAAAD,EAAU,SAAAiC,CAAS,KAAI,MAAiC,EACrE,CACJ,OAAQjD,EACR,OAAQkD,EACR,OAAQC,CACV,KAAI,MAAc,CAChB,KAAM,gBACR,CAAC,EAED,OACE,gBAACC,EAAA,EAAQ,CAAC,MAAM,kBACd,gCACE,gBAAC,SAAE,wVAKH,EACA,gBAACC,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,GAC5BrD,EAAc,IAAI,CAACsD,EAAcC,IAAsB,CACtD,MAAMC,EAASvC,EAAU,OAIzB,OAAAD,EAAS,kBAAkBuC,YAA4B,EAGrD,gBAAC,OAAI,IAAKD,EAAa,GAAI,UAAWxC,EAAO,qBAC3C,gBAACF,GAAmB,CAAC,cAAe2C,CAAA,CAAmB,EACvD,gBAAC/B,EAAA,GACC,MAAM,WACN,QAAS,EAAQgC,EAAO,iBAAiBD,CAAiB,GAAG,SAC7D,MAAOC,EAAO,iBAAiBD,CAAiB,GAAG,UAAU,SAE7D,gBAACZ,GAAA,CACC,OAAQ,gBAACN,EAAA,EAAI,CAAC,KAAK,YAAa,GAChC,MAAO,GACP,SAAWoB,GAAqB,CAC9BR,EAAS,kBAAkBM,aAA8BE,EAAiB,KAAK,CACjF,EAEA,aAAc,CAAE,MAAOH,EAAa,SAAU,MAAOA,EAAa,QAAS,EAC3E,cAAY,uBACd,CACF,EACA,gBAAC9B,EAAA,EAAK,CAAC,MAAM,oBACX,gBAACkC,GAAA,CACC,SAAWC,GAAe,CACxBV,EAAS,kBAAkBM,aAA8BI,CAAU,CACrE,EAEA,aAAcL,EAAa,SAC7B,CACF,EACA,gBAAC9B,EAAA,GACC,MAAM,oBACN,YAAY,6HACZ,QAAS,CAAC,CAACgC,EAAO,iBAAiBD,CAAiB,GAAG,cACvD,MAAOC,EAAO,iBAAiBD,CAAiB,GAAG,eAAe,SAElE,gBAACpB,EAAA,GACE,GAAGnB,EAAS,kBAAkBuC,kBAAmC,CAChE,SAAWjE,GACTD,EACEC,EACCsE,GAAQ,CACP,MAAMC,EAAY,SAASD,EAAK,EAAE,EAClC,OAAQC,EAAY,KAAOA,EAAY,GAAOA,EAAY,GAAKA,EAAY,EAC7E,EACA,aACF,CACJ,CAAC,EACD,MAAO,GAEP,aAAcP,EAAa,cAC3B,YAAY,wBACZ,cAAY,mBACd,CACF,EACA,gBAAC9B,EAAA,GACC,MAAM,SACN,YAAY,wEACZ,QAAS,CAAC,CAACgC,EAAO,iBAAiBD,CAAiB,GAAG,OACvD,MAAOC,EAAO,iBAAiBD,CAAiB,GAAG,QAAQ,SAE3D,gBAACpB,EAAA,GACE,GAAGnB,EAAS,kBAAkBuC,WAA4B,CACzD,SAAWjE,GACTD,EACEC,EACCwE,GAAU3E,EAAO,SAAS2E,CAAK,GAAM,SAASA,EAAO,EAAE,EAAI,IAAM,SAASA,EAAO,EAAE,EAAI,EACxF,eACF,CACJ,CAAC,EACD,MAAO,GACP,YAAY,qCAEZ,aAAcR,EAAa,OAC3B,cAAY,qBACd,CACF,EACA,gBAAC9B,EAAA,GACC,MAAM,QACN,QAAS,CAAC,CAACgC,EAAO,iBAAiBD,CAAiB,GAAG,MACvD,MAAOC,EAAO,iBAAiBD,CAAiB,GAAG,OAAO,SAAW,IAErE,gBAACpB,EAAA,GACE,GAAGnB,EAAS,kBAAkBuC,UAA2B,CACxD,SAAWjE,GAAUD,EAAmBC,EAAQyE,GAAS,UAAU,KAAKA,CAAI,EAAG,cAAc,CAC/F,CAAC,EACD,MAAO,GACP,YAAY,2BAEZ,aAAcT,EAAa,MAC3B,cAAY,oBACd,CACF,EACA,gBAACd,EAAA,IACC,KAAK,SACL,QAAQ,cACR,KAAK,UACL,KAAK,YACL,QAAS,IAAMW,EAAmBI,CAAiB,GACpD,sBAED,CACF,CAEJ,CAAC,CACH,EACA,gBAACf,EAAA,IACC,KAAK,SACL,QAAQ,YACR,UAAW1B,EAAO,yBAClB,QAAS,IAAM,CACboC,EAAgB9D,CAAmB,CACrC,EACA,KAAK,QACN,2BAED,CACF,CACF,CAEJ,EAOM4E,GAAa5B,GAA4B,CAC7C,MAAM6B,EAAa7B,EAChB,MAAM,GAAG,EACT,IAAKwB,GAAQA,EAAI,KAAK,CAAC,EAEvB,QAASA,GAASA,EAAI,SAAS,GAAG,EAAIM,GAAkBN,CAAG,EAAIA,CAAI,EACnE,IAAKA,GAAQA,EAAI,YAAY,CAAC,EAE9B,OAAQA,GAAQ1E,EAAiB,SAAS0E,CAAG,CAAC,EAEjD,SAAO,QAAKK,CAAU,CACxB,EAGA,SAASC,GAAkB9B,EAAyB,CAClD,KAAM,CAAC+B,EAAQ,GAAIC,EAAM,EAAE,EAAIhC,EAAM,MAAM,GAAG,EAExCiC,EAAanF,EAAiB,QAAQiF,CAAK,EAC3CG,EAAWpF,EAAiB,QAAQkF,CAAG,EAE7C,OAAOlF,EAAiB,MAAMmF,EAAYC,EAAW,CAAC,CACxD,CAEA,MAAMZ,GAAgB,CAAC,CAAE,aAAAa,EAAe,GAAI,SAAAC,CAAS,IAA0B,CAC7E,MAAM1D,KAAS,MAAW,EAAS,EAC7B2D,EAAgBT,GAAUO,CAAY,EACtC,CAACG,EAAcC,CAAe,KAAI,YAAmBF,CAAa,EAElEG,EAAahB,GAAgB,CACjCc,EAAa,SAASd,CAAG,EACrBe,EAAiBD,MAAiB,WAAQA,EAAcd,CAAG,CAAC,EAC5De,EAAiBD,MAAiB,UAAOA,EAAcd,CAAG,CAAC,CACjE,EAEA,sBAAU,IAAM,CACdY,EAASE,EAAa,KAAK,IAAI,CAAC,CAClC,EAAG,CAACA,EAAcF,CAAQ,CAAC,EAGzB,gBAAC,OAAI,cAAY,wBACf,gBAACnB,EAAA,EAAK,CAAC,IAAK,GACTnE,EAAiB,IAAK0E,GAAQ,CAC7B,MAAMiB,KAAQ,MAAG/D,EAAO,aAAc4D,EAAa,SAASd,CAAG,GAAK,UAAU,EACxEkB,EAAclB,EAAI,MAAM,EAAG,CAAC,EAElC,OACE,gBAAC,UAAO,KAAK,SAAS,IAAKA,EAAK,UAAWiB,EAAO,QAAS,IAAMD,EAAUhB,CAAG,MAC3E,cAAWkB,CAAW,CACzB,CAEJ,CAAC,CACH,CACF,CAEJ,EAEM,GAAarC,IAA0B,CAC3C,SAAO;AAAA;AAAA,IAGP,uBAAqB;AAAA,wBACCA,EAAM,OAAO,WAAW;AAAA,eACjCA,EAAM,QAAQ,CAAC;AAAA,IAE5B,4BAA0B;AAAA,kBACVA,EAAM,QAAQ,CAAC;AAAA,IAE/B,gBAAc;AAAA;AAAA;AAAA,eAGDA,EAAM,QAAQ,CAAC,KAAKA,EAAM,QAAQ,CAAC;AAAA;AAAA,wBAE1BA,EAAM,OAAO,OAAO;AAAA;AAAA,qBAEvBA,EAAM,MAAM,OAAO;AAAA;AAAA,aAE3BA,EAAM,OAAO,KAAK;AAAA;AAAA;AAAA,qBAGVA,EAAM,WAAW;AAAA,eACvBA,EAAM,OAAO,QAAQ;AAAA,sBACdA,EAAM,OAAO,QAAQ;AAAA,oBACvBA,EAAM,OAAO,QAAQ;AAAA;AAAA,GAGzC,GCjOMsC,GAAoBC,GAAoD,CAC5E,MAAMP,EAAgB,CACpB,KAAM,GACN,eAAgB,CAACrF,CAAmB,CACtC,EAEA,GAAI,CAAC4F,EACH,OAAOP,EAGT,MAAMQ,EAAYD,EAAW,eAAe,IAAKzE,IAAc,CAC7D,MAAOA,EAAS,OAASnB,EAAoB,MAC7C,SAAUmB,EAAS,UAAU,KAAK,IAAI,GAAKnB,EAAoB,SAC/D,cAAemB,EAAS,eAAe,KAAK,IAAI,GAAKnB,EAAoB,cACzE,OAAQmB,EAAS,QAAQ,KAAK,IAAI,GAAKnB,EAAoB,OAC3D,MAAOmB,EAAS,OAAO,KAAK,IAAI,GAAKnB,EAAoB,MACzD,SAAUmB,EAAS,UAAYnB,EAAoB,QACrD,EAAE,EAEF,MAAO,CACL,KAAM4F,EAAW,KACjB,eAAgBC,CAClB,CACF,EAEMC,GAAiB,CAAC,CAAE,WAAAF,EAAY,UAAAG,EAAW,QAAAC,EAAS,WAAAC,CAAW,IAAa,CAChF,MAAMC,KAAW,eAAY,EACvB,CAAE,qBAAAC,CAAqB,KAAI,MAAgB,EAC3CzE,KAAS,MAAW,EAAS,EAE7B,CAAC0E,EAAUC,CAAW,KAAI,YAAS,EAAK,EAExC,CAAE,YAAaC,CAAO,KAAIC,EAAA,GAAsBJ,CAAoB,EACpEK,EAASF,GAAQ,oBAEjBjB,EAAgBM,GAAiBC,CAAU,EAC3Ca,KAAU,MAAQ,CAAE,cAAApB,CAAc,CAAC,EAEnCqB,EAAYC,GAA6B,CAC7C,GAAI,CAACL,EACH,OAGF,MAAMM,EAAgBlG,GAAiBiG,CAAM,EAEvCE,EAAcjB,EAChBY,GAAQ,qBAAqB,OAAO,CAAC,CAAE,KAAAM,CAAK,IAAMA,IAASlB,EAAW,IAAI,EAC1EY,GAAQ,oBAENO,EAAsC,CAC1C,GAAGT,EACH,oBAAqB,CACnB,GAAGE,EACH,MACEZ,GAAcgB,EAAc,OAAShB,EAAW,QAC5C,MAAkBgB,EAAc,KAAMhB,EAAW,KAAMY,GAAQ,OAAS,CAAC,CAAC,EAC1EA,GAAQ,MACd,oBAAqB,CAAC,GAAIK,GAAe,CAAC,EAAID,CAAa,CAC7D,CACF,EAEMI,EAAad,KACjB,MAA+B,CAC7B,UAAAa,EACA,UAAWT,EACX,uBAAwBH,EACxB,eAAgB,oBAChB,aAAc,oBACd,eAAgB,kBAClB,CAAC,CACH,EAEAE,EAAY,EAAI,EAEhBW,EAAW,OAAO,EAAE,QAAQ,IAAM,CAChCX,EAAY,EAAK,CACnB,CAAC,CACH,EAEA,OACE,gCACGJ,GAAc,gBAACgB,EAAA,GAAiB,CAAC,SAAU,KAAoB,WAAY,EAC3EjB,GAAW,gBAACkB,EAAA,EAAkB,CAAC,KAAK,qBAAsB,GAC1DnB,GAAa,gBAACoB,EAAA,EAAK,CAAC,MAAM,+BAAgC,GAC1Db,GAAU,CAACN,GAAW,CAACD,GACtB,gBAAC,KAAY,CAAE,GAAGU,CAAA,EAChB,gBAAC,QAAK,SAAUA,EAAQ,aAAaC,CAAQ,EAAG,cAAY,oBAC1D,gBAAC1C,EAAA,EAAQ,CAAC,MAAO,qBAAsB,SAAU,EAAQiC,GAAeG,CAAA,EACtE,gBAAChE,EAAA,GACC,SAAQ,GACR,MAAM,OACN,YAAY,oCACZ,QAAS,CAAC,CAACqE,EAAQ,UAAU,QAAQ,KACrC,MAAOA,EAAQ,UAAU,OAAO,MAAM,SAEtC,gBAAC1D,EAAA,GACE,GAAG0D,EAAQ,SAAS,OAAQ,CAC3B,SAAU,GACV,SAAWvG,GAAU,CACnB,GAAI,CAAC0F,EAEH,OAD2BY,GAAQ,qBAAqB,KAAK,CAAC,CAAE,KAAAM,CAAK,IAAM5G,IAAU4G,CAAI,EAC7D,mCAAmC5G,KAAW,EAG9E,CACF,CAAC,EACD,UAAWwB,EAAO,MAClB,cAAa,mBACf,CACF,EACA,gBAACkC,GAAsB,IAAC,EACxB,gBAACR,EAAA,GAAM,CAAC,KAAK,SAAS,UAAW1B,EAAO,aAAc,SAAU0E,CAAA,EAAU,kBAE1E,EACA,gBAAC,MACC,KAAK,SACL,QAAQ,YACR,KAAK,UACL,QAAM,MAAW,oBAAqBD,EAAsB,CAAE,IAAK,cAAe,CAAC,EACnF,SAAUC,CAAA,EACX,QAED,CACF,CACF,CACF,CAEJ,CAEJ,EAEM,GAAa/C,IAA0B,CAC3C,SAAO;AAAA;AAAA,IAGP,gBAAc;AAAA,oBACIA,EAAM,QAAQ,CAAC;AAAA,GAEnC,GAEA,GAAeyC,GC1JTsB,GAAc,IAAM,CACxB,KAAM,CAACC,CAAW,KAAIC,EAAA,GAAe,EAC/B,CAAE,qBAAAnB,CAAqB,KAAI,MAAgB,EAC3C,CAAE,YAAAoB,EAAa,UAAAC,EAAW,MAAAC,CAAM,KAAIlB,EAAA,GAAsBJ,EAAsB,CACpF,eAAgB,GAChB,mBAAoB,EACtB,CAAC,EACKK,EAASe,GAAa,oBAEtBG,KAAsB,eACzBC,GAA6C,CAC5C,MAAMC,EAASpB,GAAQ,qBAAqB,KAAK,CAAC,CAAE,KAAAM,CAAK,IAAwBA,IAASa,CAAE,EAE5F,GAAIC,EAAQ,CACV,MAAM3B,EAAaO,GAAQ,sBAAsBoB,EAAO,IAAI,EAE5D,MAAO,CACL,GAAGA,EACH,WAAA3B,CACF,EAGF,OAAO2B,CACT,EACA,CAACpB,CAAM,CACT,EAEA,OACE,gCACGiB,GAAS,CAACD,GAAa,CAACD,GACvB,gBAACJ,EAAA,EAAK,CAAC,SAAS,QAAQ,MAAO,yCAAyChB,GAAA,EACrEsB,EAAM,SAAW,gBACpB,EAEDF,GAAe,CAACE,GACf,gBAAC,KAAM,KACL,gBAAC,KAAK,CAAC,MAAK,GAAC,KAAK,oCAChB,gBAAC,GAAc,CAAC,QAASD,CAAA,CAAW,CACtC,EACA,gBAAC,KAAK,CAAC,MAAK,GAAC,KAAK,qCACf,IAAM,CACL,GAAIH,EAAY,SAAa,CAC3B,MAAMzB,EAAa8B,EAAoB,OAAOL,EAAY,QAAW,CAAC,EAChEpB,EAAaL,GAAY,WAE/B,OACE,gBAAC,IACC,QAAS4B,EACT,WAAA5B,EACA,UAAW,CAACA,GAAc,CAAC4B,EAC3B,WAAAvB,CAAA,CACF,EAGJ,OAAO,gBAAC,KAAQ,CAAC,GAAG,kBAAmB,EACzC,CACF,CACF,CAEJ,CAEJ,EAEM4B,GAAkB,IAAM,CAC5B,MAAMC,EAAUC,GAAqB,EAErC,OACE,gBAAC,IAAuB,CAAC,MAAM,YAAY,QAAAD,EAAkB,WAAW,gBACtE,gBAACV,GAAA,IAAY,CACf,CAEJ,EAEO,SAASW,IAAuB,CACrC,KAAM,CAAE,QAAAC,EAAS,KAAAC,CAAK,KAAI,MAAc,EAClC,CAACH,EAASI,CAAU,KAAI,YAAiE,EAE/F,sBAAU,IAAM,CACVD,IAAS,mCACXC,EAAW,CACT,GAAI,mBACJ,KAAM,iBACR,CAAC,EACQD,IAAS,qCAClBC,EAAW,CACT,GAAI,oBACJ,KAAM,kBACR,CAAC,CAEL,EAAG,CAACD,EAAMD,CAAO,CAAC,EAEXF,CACT,CAEA,SAAeD,E,mGC7Ff,MAAMM,EAAmB,kDAEnBC,EAAqBC,GAClBA,EAAaF,EAAiB,KAAKE,CAAU,EAAI,GAGpDC,EAAyB,CAAC3F,EAAoBC,IAA8B,CAEhF,GAAI,CAACD,GAAa,CAACC,EACjB,MAAO,GAGT,GAAK,CAACD,GAAaC,GAAaD,GAAa,CAACC,EAC5C,MAAO,GAGT,MAAM2F,EAAW,QAEXC,EAAY,IAAO,EAAE,QAAQ,KAAK,EAAE,IAAI7F,EAAW4F,CAAQ,EAE3DE,EAAU,IAAO,EAAE,QAAQ,KAAK,EAAE,IAAI7F,EAAS2F,CAAQ,EAM7D,MAJI,GAAA5F,GAAaC,GAAW4F,EAAU,SAASC,CAAO,GAIlD9F,GAAaC,GAAW6F,EAAQ,QAAQD,CAAS,EAKvD,EAEA,SAASE,EAAoB9C,EAA8B,CAGzD,OAFsBA,EAAW,eAEZ,IAAI,CAACzE,EAAUmB,IAAU,CAC5C,KAAM,CAAE,MAAAzB,EAAO,SAAAC,EAAU,cAAAC,EAAe,OAAAC,EAAQ,MAAAC,EAAO,SAAAC,CAAS,EAAIC,EAC9DkH,KAAa,MAAcxH,EAAOK,CAAQ,EAC1CyH,KAAgB,MAAiB7H,CAAQ,EACzC8H,KAAa,MAAqB7H,CAAa,EAC/C8H,KAAe,MAAgB7H,CAAM,EACrC8H,KAAc,MAAe7H,CAAK,EAExC,OACE,gBAAC,YAAe,IAAK,KAAK,UAAUE,CAAQ,EAAImB,CAAA,EAC7C,GAAG+F,KAAcM,IAClB,gBAAC,SAAG,EACH,CAACC,EAAYC,EAAcC,CAAW,EAAE,KAAK,KAAK,EACnD,gBAAC,SAAG,CACN,CAEJ,CAAC,CACH,C,kDCxDO,SAASvC,EAAsBwC,EAAuBvF,EAAmB,CAC9E,MAAMwF,EAAc,IAAgB,UAAU,6BAA6B,SAASD,GAAgB,GAAI,CACtG,GAAGvF,EACH,KAAM,CAACuF,CACT,CAAC,EAED,MAAO,CACL,GAAGC,EAEH,MAAOA,EAAY,KACrB,CACF,C","sources":["webpack://grafana/./public/app/features/alerting/unified/utils/mute-timings.ts","webpack://grafana/./public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeRange.tsx","webpack://grafana/./public/app/features/alerting/unified/components/mute-timings/timezones.tsx","webpack://grafana/./public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeInterval.tsx","webpack://grafana/./public/app/features/alerting/unified/components/mute-timings/MuteTimingForm.tsx","webpack://grafana/./public/app/features/alerting/unified/MuteTimings.tsx","webpack://grafana/./public/app/features/alerting/unified/components/mute-timings/util.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useAlertmanagerConfig.ts"],"sourcesContent":["import { omitBy, isUndefined } from 'lodash';\n\nimport { MuteTimeInterval, TimeInterval } from 'app/plugins/datasource/alertmanager/types';\n\nimport { MuteTimingFields, MuteTimingIntervalFields } from '../types/mute-timing-form';\n\nexport const DAYS_OF_THE_WEEK = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];\n\nexport const MONTHS = [\n 'january',\n 'february',\n 'march',\n 'april',\n 'may',\n 'june',\n 'july',\n 'august',\n 'september',\n 'october',\n 'november',\n 'december',\n];\n\nexport const defaultTimeInterval: MuteTimingIntervalFields = {\n times: [{ start_time: '', end_time: '' }],\n weekdays: '',\n days_of_month: '',\n months: '',\n years: '',\n location: '',\n};\n\nexport const validateArrayField = (value: string, validateValue: (input: string) => boolean, invalidText: string) => {\n if (value) {\n return (\n value\n .split(',')\n .map((x) => x.trim())\n .every((entry) => entry.split(':').every(validateValue)) || invalidText\n );\n } else {\n return true;\n }\n};\n\nconst convertStringToArray = (str: string) => {\n return str ? str.split(',').map((s) => s.trim()) : undefined;\n};\n\nexport const createMuteTiming = (fields: MuteTimingFields): MuteTimeInterval => {\n const timeIntervals: TimeInterval[] = fields.time_intervals.map(\n ({ times, weekdays, days_of_month, months, years, location }) => {\n const interval = {\n times: times.filter(({ start_time, end_time }) => !!start_time && !!end_time),\n weekdays: convertStringToArray(weekdays)?.map((v) => v.toLowerCase()),\n days_of_month: convertStringToArray(days_of_month),\n months: convertStringToArray(months),\n years: convertStringToArray(years),\n location: location ? location : undefined,\n };\n\n return omitBy(interval, isUndefined);\n }\n );\n\n return {\n name: fields.name,\n time_intervals: timeIntervals,\n };\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\nimport { useFieldArray, useFormContext } from 'react-hook-form';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Button, Field, Icon, IconButton, InlineField, InlineFieldRow, Input, useStyles2 } from '@grafana/ui';\n\nimport { MuteTimingFields } from '../../types/mute-timing-form';\n\nimport { isValidStartAndEndTime, isvalidTimeFormat } from './util';\n\ninterface Props {\n intervalIndex: number;\n}\n\nconst INVALID_FORMAT_MESSAGE = 'Times must be between 00:00 and 24:00 UTC';\n\nexport const MuteTimingTimeRange = ({ intervalIndex }: Props) => {\n const styles = useStyles2(getStyles);\n const { register, formState, getValues } = useFormContext();\n\n const {\n fields: timeRanges,\n append: addTimeRange,\n remove: removeTimeRange,\n } = useFieldArray({\n name: `time_intervals.${intervalIndex}.times`,\n });\n\n const formErrors = formState.errors.time_intervals?.[intervalIndex];\n const timeRangeInvalid = formErrors?.times?.some?.((value) => value?.start_time || value?.end_time) ?? false;\n\n return (\n
\n \n <>\n {timeRanges.map((timeRange, index) => {\n const timeRangeErrors = formErrors?.times?.[index];\n const startTimeKey = `time_intervals.${intervalIndex}.times.${index}.start_time`;\n const endTimeKey = `time_intervals.${intervalIndex}.times.${index}.end_time`;\n\n const getStartAndEndTime = (): [string | undefined, string | undefined] => {\n // @ts-ignore react-hook-form doesn't handle nested field arrays well\n const startTime: string = getValues(startTimeKey);\n // @ts-ignore react-hook-form doesn't handle nested field arrays well\n const endTime: string = getValues(endTimeKey);\n\n return [startTime, endTime];\n };\n\n return (\n
\n \n \n {\n const validFormat = isvalidTimeFormat(input);\n if (!validFormat) {\n return INVALID_FORMAT_MESSAGE;\n }\n\n const [startTime, endTime] = getStartAndEndTime();\n\n if (isValidStartAndEndTime(startTime, endTime)) {\n return;\n } else {\n return 'Start time must be before end time';\n }\n },\n })}\n className={styles.timeRangeInput}\n maxLength={5}\n suffix={}\n // @ts-ignore react-hook-form doesn't handle nested field arrays well\n defaultValue={timeRange.start_time}\n placeholder=\"HH:mm\"\n data-testid=\"mute-timing-starts-at\"\n />\n \n \n {\n const validFormat = isvalidTimeFormat(input);\n if (!validFormat) {\n return INVALID_FORMAT_MESSAGE;\n }\n\n const [startTime, endTime] = getStartAndEndTime();\n\n if (isValidStartAndEndTime(startTime, endTime)) {\n return;\n } else {\n return 'End time must be after start time';\n }\n },\n })}\n className={styles.timeRangeInput}\n maxLength={5}\n suffix={}\n // @ts-ignore react-hook-form doesn't handle nested field arrays well\n defaultValue={timeRange.end_time}\n placeholder=\"HH:mm\"\n data-testid=\"mute-timing-ends-at\"\n />\n \n {\n e.preventDefault();\n removeTimeRange(index);\n }}\n tooltip=\"Remove time range\"\n />\n \n
\n );\n })}\n \n \n addTimeRange({ start_time: '', end_time: '' })}\n >\n Add another time range\n \n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n field: css`\n margin-bottom: 0;\n `,\n timeRange: css`\n margin-bottom: ${theme.spacing(1)};\n `,\n timeRangeInput: css`\n width: 90px;\n `,\n deleteTimeRange: css`\n margin: ${theme.spacing(1)} 0 0 ${theme.spacing(0.5)};\n `,\n addTimeRange: css`\n margin-bottom: ${theme.spacing(2)};\n `,\n});\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select, SelectCommonProps } from '@grafana/ui';\n\nconst TIMEZONES = [\n 'Africa/Abidjan',\n 'Africa/Accra',\n 'Africa/Addis_Ababa',\n 'Africa/Algiers',\n 'Africa/Asmara',\n 'Africa/Bamako',\n 'Africa/Bangui',\n 'Africa/Banjul',\n 'Africa/Bissau',\n 'Africa/Blantyre',\n 'Africa/Brazzaville',\n 'Africa/Bujumbura',\n 'Africa/Cairo',\n 'Africa/Casablanca',\n 'Africa/Ceuta',\n 'Africa/Conakry',\n 'Africa/Dakar',\n 'Africa/Dar_es_Salaam',\n 'Africa/Djibouti',\n 'Africa/Douala',\n 'Africa/El_Aaiun',\n 'Africa/Freetown',\n 'Africa/Gaborone',\n 'Africa/Harare',\n 'Africa/Johannesburg',\n 'Africa/Juba',\n 'Africa/Kampala',\n 'Africa/Khartoum',\n 'Africa/Kigali',\n 'Africa/Kinshasa',\n 'Africa/Lagos',\n 'Africa/Libreville',\n 'Africa/Lome',\n 'Africa/Luanda',\n 'Africa/Lubumbashi',\n 'Africa/Lusaka',\n 'Africa/Malabo',\n 'Africa/Maputo',\n 'Africa/Maseru',\n 'Africa/Mbabane',\n 'Africa/Mogadishu',\n 'Africa/Monrovia',\n 'Africa/Nairobi',\n 'Africa/Ndjamena',\n 'Africa/Niamey',\n 'Africa/Nouakchott',\n 'Africa/Ouagadougou',\n 'Africa/Porto-Novo',\n 'Africa/Sao_Tome',\n 'Africa/Tripoli',\n 'Africa/Tunis',\n 'Africa/Windhoek',\n 'America/Adak',\n 'America/Anchorage',\n 'America/Anguilla',\n 'America/Antigua',\n 'America/Araguaina',\n 'America/Argentina/Buenos_Aires',\n 'America/Argentina/Catamarca',\n 'America/Argentina/Cordoba',\n 'America/Argentina/Jujuy',\n 'America/Argentina/La_Rioja',\n 'America/Argentina/Mendoza',\n 'America/Argentina/Rio_Gallegos',\n 'America/Argentina/Salta',\n 'America/Argentina/San_Juan',\n 'America/Argentina/San_Luis',\n 'America/Argentina/Tucuman',\n 'America/Argentina/Ushuaia',\n 'America/Aruba',\n 'America/Asuncion',\n 'America/Atikokan',\n 'America/Bahia',\n 'America/Bahia_Banderas',\n 'America/Barbados',\n 'America/Belem',\n 'America/Belize',\n 'America/Blanc-Sablon',\n 'America/Boa_Vista',\n 'America/Bogota',\n 'America/Boise',\n 'America/Cambridge_Bay',\n 'America/Campo_Grande',\n 'America/Cancun',\n 'America/Caracas',\n 'America/Cayenne',\n 'America/Cayman',\n 'America/Chicago',\n 'America/Chihuahua',\n 'America/Ciudad_Juarez',\n 'America/Costa_Rica',\n 'America/Creston',\n 'America/Cuiaba',\n 'America/Curacao',\n 'America/Danmarkshavn',\n 'America/Dawson',\n 'America/Dawson_Creek',\n 'America/Denver',\n 'America/Detroit',\n 'America/Dominica',\n 'America/Edmonton',\n 'America/Eirunepe',\n 'America/El_Salvador',\n 'America/Fort_Nelson',\n 'America/Fortaleza',\n 'America/Glace_Bay',\n 'America/Godthab',\n 'America/Goose_Bay',\n 'America/Grand_Turk',\n 'America/Grenada',\n 'America/Guadeloupe',\n 'America/Guatemala',\n 'America/Guayaquil',\n 'America/Guyana',\n 'America/Halifax',\n 'America/Havana',\n 'America/Hermosillo',\n 'America/Indiana/Indianapolis',\n 'America/Indiana/Knox',\n 'America/Indiana/Marengo',\n 'America/Indiana/Petersburg',\n 'America/Indiana/Tell_City',\n 'America/Indiana/Vevay',\n 'America/Indiana/Vincennes',\n 'America/Indiana/Winamac',\n 'America/Inuvik',\n 'America/Iqaluit',\n 'America/Jamaica',\n 'America/Juneau',\n 'America/Kentucky/Louisville',\n 'America/Kentucky/Monticello',\n 'America/Kralendijk',\n 'America/La_Paz',\n 'America/Lima',\n 'America/Los_Angeles',\n 'America/Lower_Princes',\n 'America/Maceio',\n 'America/Managua',\n 'America/Manaus',\n 'America/Marigot',\n 'America/Martinique',\n 'America/Matamoros',\n 'America/Mazatlan',\n 'America/Menominee',\n 'America/Merida',\n 'America/Metlakatla',\n 'America/Mexico_City',\n 'America/Miquelon',\n 'America/Moncton',\n 'America/Monterrey',\n 'America/Montevideo',\n 'America/Montreal',\n 'America/Montserrat',\n 'America/Nassau',\n 'America/New_York',\n 'America/Nipigon',\n 'America/Nome',\n 'America/Noronha',\n 'America/North_Dakota/Beulah',\n 'America/North_Dakota/Center',\n 'America/North_Dakota/New_Salem',\n 'America/Nuuk',\n 'America/Ojinaga',\n 'America/Panama',\n 'America/Pangnirtung',\n 'America/Paramaribo',\n 'America/Phoenix',\n 'America/Port-au-Prince',\n 'America/Port_of_Spain',\n 'America/Porto_Velho',\n 'America/Puerto_Rico',\n 'America/Punta_Arenas',\n 'America/Rainy_River',\n 'America/Rankin_Inlet',\n 'America/Recife',\n 'America/Regina',\n 'America/Resolute',\n 'America/Rio_Branco',\n 'America/Santa_Isabel',\n 'America/Santarem',\n 'America/Santiago',\n 'America/Santo_Domingo',\n 'America/Sao_Paulo',\n 'America/Scoresbysund',\n 'America/Shiprock',\n 'America/Sitka',\n 'America/St_Barthelemy',\n 'America/St_Johns',\n 'America/St_Kitts',\n 'America/St_Lucia',\n 'America/St_Thomas',\n 'America/St_Vincent',\n 'America/Swift_Current',\n 'America/Tegucigalpa',\n 'America/Thule',\n 'America/Thunder_Bay',\n 'America/Tijuana',\n 'America/Toronto',\n 'America/Tortola',\n 'America/Vancouver',\n 'America/Whitehorse',\n 'America/Winnipeg',\n 'America/Yakutat',\n 'America/Yellowknife',\n 'Antarctica/Casey',\n 'Antarctica/Davis',\n 'Antarctica/DumontDUrville',\n 'Antarctica/Macquarie',\n 'Antarctica/Mawson',\n 'Antarctica/McMurdo',\n 'Antarctica/Palmer',\n 'Antarctica/Rothera',\n 'Antarctica/South_Pole',\n 'Antarctica/Syowa',\n 'Antarctica/Troll',\n 'Antarctica/Vostok',\n 'Arctic/Longyearbyen',\n 'Asia/Aden',\n 'Asia/Almaty',\n 'Asia/Amman',\n 'Asia/Anadyr',\n 'Asia/Aqtau',\n 'Asia/Aqtobe',\n 'Asia/Ashgabat',\n 'Asia/Atyrau',\n 'Asia/Baghdad',\n 'Asia/Bahrain',\n 'Asia/Baku',\n 'Asia/Bangkok',\n 'Asia/Barnaul',\n 'Asia/Beirut',\n 'Asia/Bishkek',\n 'Asia/Brunei',\n 'Asia/Calcutta',\n 'Asia/Chita',\n 'Asia/Choibalsan',\n 'Asia/Chongqing',\n 'Asia/Colombo',\n 'Asia/Damascus',\n 'Asia/Dhaka',\n 'Asia/Dili',\n 'Asia/Dubai',\n 'Asia/Dushanbe',\n 'Asia/Famagusta',\n 'Asia/Gaza',\n 'Asia/Harbin',\n 'Asia/Hebron',\n 'Asia/Ho_Chi_Minh',\n 'Asia/Hong_Kong',\n 'Asia/Hovd',\n 'Asia/Irkutsk',\n 'Asia/Jakarta',\n 'Asia/Jayapura',\n 'Asia/Jerusalem',\n 'Asia/Kabul',\n 'Asia/Kamchatka',\n 'Asia/Karachi',\n 'Asia/Kashgar',\n 'Asia/Kathmandu',\n 'Asia/Katmandu',\n 'Asia/Khandyga',\n 'Asia/Krasnoyarsk',\n 'Asia/Kuala_Lumpur',\n 'Asia/Kuching',\n 'Asia/Kuwait',\n 'Asia/Macau',\n 'Asia/Magadan',\n 'Asia/Makassar',\n 'Asia/Manila',\n 'Asia/Muscat',\n 'Asia/Nicosia',\n 'Asia/Novokuznetsk',\n 'Asia/Novosibirsk',\n 'Asia/Omsk',\n 'Asia/Oral',\n 'Asia/Phnom_Penh',\n 'Asia/Pontianak',\n 'Asia/Pyongyang',\n 'Asia/Qatar',\n 'Asia/Qostanay',\n 'Asia/Qyzylorda',\n 'Asia/Rangoon',\n 'Asia/Riyadh',\n 'Asia/Sakhalin',\n 'Asia/Samarkand',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Asia/Singapore',\n 'Asia/Srednekolymsk',\n 'Asia/Taipei',\n 'Asia/Tashkent',\n 'Asia/Tbilisi',\n 'Asia/Tehran',\n 'Asia/Thimphu',\n 'Asia/Tokyo',\n 'Asia/Tomsk',\n 'Asia/Ulaanbaatar',\n 'Asia/Urumqi',\n 'Asia/Ust-Nera',\n 'Asia/Vientiane',\n 'Asia/Vladivostok',\n 'Asia/Yakutsk',\n 'Asia/Yangon',\n 'Asia/Yekaterinburg',\n 'Asia/Yerevan',\n 'Atlantic/Azores',\n 'Atlantic/Bermuda',\n 'Atlantic/Canary',\n 'Atlantic/Cape_Verde',\n 'Atlantic/Faroe',\n 'Atlantic/Madeira',\n 'Atlantic/Reykjavik',\n 'Atlantic/South_Georgia',\n 'Atlantic/St_Helena',\n 'Atlantic/Stanley',\n 'Australia/Adelaide',\n 'Australia/Brisbane',\n 'Australia/Broken_Hill',\n 'Australia/Currie',\n 'Australia/Darwin',\n 'Australia/Eucla',\n 'Australia/Hobart',\n 'Australia/Lindeman',\n 'Australia/Lord_Howe',\n 'Australia/Melbourne',\n 'Australia/Perth',\n 'Australia/Sydney',\n 'Europe/Amsterdam',\n 'Europe/Andorra',\n 'Europe/Astrakhan',\n 'Europe/Athens',\n 'Europe/Belgrade',\n 'Europe/Berlin',\n 'Europe/Bratislava',\n 'Europe/Brussels',\n 'Europe/Bucharest',\n 'Europe/Budapest',\n 'Europe/Busingen',\n 'Europe/Chisinau',\n 'Europe/Copenhagen',\n 'Europe/Dublin',\n 'Europe/Gibraltar',\n 'Europe/Guernsey',\n 'Europe/Helsinki',\n 'Europe/Isle_of_Man',\n 'Europe/Istanbul',\n 'Europe/Jersey',\n 'Europe/Kaliningrad',\n 'Europe/Kiev',\n 'Europe/Kirov',\n 'Europe/Kyiv',\n 'Europe/Lisbon',\n 'Europe/Ljubljana',\n 'Europe/London',\n 'Europe/Luxembourg',\n 'Europe/Madrid',\n 'Europe/Malta',\n 'Europe/Mariehamn',\n 'Europe/Minsk',\n 'Europe/Monaco',\n 'Europe/Moscow',\n 'Europe/Oslo',\n 'Europe/Paris',\n 'Europe/Podgorica',\n 'Europe/Prague',\n 'Europe/Riga',\n 'Europe/Rome',\n 'Europe/Samara',\n 'Europe/San_Marino',\n 'Europe/Sarajevo',\n 'Europe/Saratov',\n 'Europe/Simferopol',\n 'Europe/Skopje',\n 'Europe/Sofia',\n 'Europe/Stockholm',\n 'Europe/Tallinn',\n 'Europe/Tirane',\n 'Europe/Ulyanovsk',\n 'Europe/Uzhgorod',\n 'Europe/Vaduz',\n 'Europe/Vatican',\n 'Europe/Vienna',\n 'Europe/Vilnius',\n 'Europe/Volgograd',\n 'Europe/Warsaw',\n 'Europe/Zagreb',\n 'Europe/Zaporozhye',\n 'Europe/Zurich',\n 'GMT',\n 'Indian/Antananarivo',\n 'Indian/Chagos',\n 'Indian/Christmas',\n 'Indian/Cocos',\n 'Indian/Comoro',\n 'Indian/Kerguelen',\n 'Indian/Mahe',\n 'Indian/Maldives',\n 'Indian/Mauritius',\n 'Indian/Mayotte',\n 'Indian/Reunion',\n 'Local', // this is the local timezone of the machine\n 'Pacific/Apia',\n 'Pacific/Auckland',\n 'Pacific/Bougainville',\n 'Pacific/Chatham',\n 'Pacific/Chuuk',\n 'Pacific/Easter',\n 'Pacific/Efate',\n 'Pacific/Enderbury',\n 'Pacific/Fakaofo',\n 'Pacific/Fiji',\n 'Pacific/Funafuti',\n 'Pacific/Galapagos',\n 'Pacific/Gambier',\n 'Pacific/Guadalcanal',\n 'Pacific/Guam',\n 'Pacific/Honolulu',\n 'Pacific/Johnston',\n 'Pacific/Kanton',\n 'Pacific/Kiritimati',\n 'Pacific/Kosrae',\n 'Pacific/Kwajalein',\n 'Pacific/Majuro',\n 'Pacific/Marquesas',\n 'Pacific/Midway',\n 'Pacific/Nauru',\n 'Pacific/Niue',\n 'Pacific/Norfolk',\n 'Pacific/Noumea',\n 'Pacific/Pago_Pago',\n 'Pacific/Palau',\n 'Pacific/Pitcairn',\n 'Pacific/Pohnpei',\n 'Pacific/Ponape',\n 'Pacific/Port_Moresby',\n 'Pacific/Rarotonga',\n 'Pacific/Saipan',\n 'Pacific/Tahiti',\n 'Pacific/Tarawa',\n 'Pacific/Tongatapu',\n 'Pacific/Truk',\n 'Pacific/Wake',\n 'Pacific/Wallis',\n 'UTC',\n];\n\nexport const TimezoneSelect = (options: SelectCommonProps) => {\n const timezoneOptions: Array> = TIMEZONES.map((tz) => ({\n label: tz,\n value: tz,\n }));\n\n return {...options} options={timezoneOptions} />;\n};\n","import { css, cx } from '@emotion/css';\nimport { concat, uniq, upperFirst, without } from 'lodash';\nimport React, { useEffect, useState } from 'react';\nimport { useFieldArray, useFormContext } from 'react-hook-form';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Button, Field, FieldSet, Icon, Input, useStyles2, Stack } from '@grafana/ui';\n\nimport { MuteTimingFields } from '../../types/mute-timing-form';\nimport { DAYS_OF_THE_WEEK, defaultTimeInterval, MONTHS, validateArrayField } from '../../utils/mute-timings';\n\nimport { MuteTimingTimeRange } from './MuteTimingTimeRange';\nimport { TimezoneSelect } from './timezones';\n\nexport const MuteTimingTimeInterval = () => {\n const styles = useStyles2(getStyles);\n const { formState, register, setValue } = useFormContext();\n const {\n fields: timeIntervals,\n append: addTimeInterval,\n remove: removeTimeInterval,\n } = useFieldArray({\n name: 'time_intervals',\n });\n\n return (\n
\n <>\n

\n A time interval is a definition for a moment in time. All fields are lists, and at least one list element must\n be satisfied to match the field. If a field is left blank, any moment of time will match the field. For an\n instant of time to match a complete time interval, all fields must match. A mute timing can contain multiple\n time intervals.\n

\n \n {timeIntervals.map((timeInterval, timeIntervalIndex) => {\n const errors = formState.errors;\n\n // manually register the \"location\" field, react-hook-form doesn't handle nested field arrays well and will refuse to set\n // the default value for the field when using \"useFieldArray\"\n register(`time_intervals.${timeIntervalIndex}.location`);\n\n return (\n
\n \n \n }\n width={50}\n onChange={(selectedTimezone) => {\n setValue(`time_intervals.${timeIntervalIndex}.location`, selectedTimezone.value);\n }}\n // @ts-ignore react-hook-form doesn't handle nested field arrays well\n defaultValue={{ label: timeInterval.location, value: timeInterval.location }}\n data-testid=\"mute-timing-location\"\n />\n \n \n {\n setValue(`time_intervals.${timeIntervalIndex}.weekdays`, daysOfWeek);\n }}\n // @ts-ignore react-hook-form doesn't handle nested field arrays well\n defaultValue={timeInterval.weekdays}\n />\n \n \n \n validateArrayField(\n value,\n (day) => {\n const parsedDay = parseInt(day, 10);\n return (parsedDay > -31 && parsedDay < 0) || (parsedDay > 0 && parsedDay < 32);\n },\n 'Invalid day'\n ),\n })}\n width={50}\n // @ts-ignore react-hook-form doesn't handle nested field arrays well\n defaultValue={timeInterval.days_of_month}\n placeholder=\"Example: 1, 14:16, -1\"\n data-testid=\"mute-timing-days\"\n />\n \n \n \n validateArrayField(\n value,\n (month) => MONTHS.includes(month) || (parseInt(month, 10) < 13 && parseInt(month, 10) > 0),\n 'Invalid month'\n ),\n })}\n width={50}\n placeholder=\"Example: 1:3, may:august, december\"\n // @ts-ignore react-hook-form doesn't handle nested field arrays well\n defaultValue={timeInterval.months}\n data-testid=\"mute-timing-months\"\n />\n \n \n validateArrayField(value, (year) => /^\\d{4}$/.test(year), 'Invalid year'),\n })}\n width={50}\n placeholder=\"Example: 2021:2022, 2030\"\n // @ts-ignore react-hook-form doesn't handle nested field arrays well\n defaultValue={timeInterval.years}\n data-testid=\"mute-timing-years\"\n />\n \n removeTimeInterval(timeIntervalIndex)}\n >\n Remove time interval\n \n
\n );\n })}\n
\n {\n addTimeInterval(defaultTimeInterval);\n }}\n icon=\"plus\"\n >\n Add another time interval\n \n \n
\n );\n};\n\ninterface DaysOfTheWeekProps {\n defaultValue?: string;\n onChange: (input: string) => void;\n}\n\nconst parseDays = (input: string): string[] => {\n const parsedDays = input\n .split(',')\n .map((day) => day.trim())\n // each \"day\" could still be a range of days, so we parse the range\n .flatMap((day) => (day.includes(':') ? parseWeekdayRange(day) : day))\n .map((day) => day.toLowerCase())\n // remove invalid weekdays\n .filter((day) => DAYS_OF_THE_WEEK.includes(day));\n\n return uniq(parsedDays);\n};\n\n// parse monday:wednesday to [\"monday\", \"tuesday\", \"wednesday\"]\nfunction parseWeekdayRange(input: string): string[] {\n const [start = '', end = ''] = input.split(':');\n\n const startIndex = DAYS_OF_THE_WEEK.indexOf(start);\n const endIndex = DAYS_OF_THE_WEEK.indexOf(end);\n\n return DAYS_OF_THE_WEEK.slice(startIndex, endIndex + 1);\n}\n\nconst DaysOfTheWeek = ({ defaultValue = '', onChange }: DaysOfTheWeekProps) => {\n const styles = useStyles2(getStyles);\n const defaultValues = parseDays(defaultValue);\n const [selectedDays, setSelectedDays] = useState(defaultValues);\n\n const toggleDay = (day: string) => {\n selectedDays.includes(day)\n ? setSelectedDays((selectedDays) => without(selectedDays, day))\n : setSelectedDays((selectedDays) => concat(selectedDays, day));\n };\n\n useEffect(() => {\n onChange(selectedDays.join(', '));\n }, [selectedDays, onChange]);\n\n return (\n
\n \n {DAYS_OF_THE_WEEK.map((day) => {\n const style = cx(styles.dayOfTheWeek, selectedDays.includes(day) && 'selected');\n const abbreviated = day.slice(0, 3);\n\n return (\n \n );\n })}\n \n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n input: css`\n width: 400px;\n `,\n timeIntervalSection: css`\n background-color: ${theme.colors.background.secondary};\n padding: ${theme.spacing(2)};\n `,\n removeTimeIntervalButton: css`\n margin-top: ${theme.spacing(2)};\n `,\n dayOfTheWeek: css`\n cursor: pointer;\n user-select: none;\n padding: ${theme.spacing(1)} ${theme.spacing(3)};\n\n border: solid 1px ${theme.colors.border.medium};\n background: none;\n border-radius: ${theme.shape.radius.default};\n\n color: ${theme.colors.text.secondary};\n\n &.selected {\n font-weight: ${theme.typography.fontWeightBold};\n color: ${theme.colors.primary.text};\n border-color: ${theme.colors.primary.border};\n background: ${theme.colors.primary.transparent};\n }\n `,\n});\n","import { css } from '@emotion/css';\nimport React, { useState } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Alert, Button, Field, FieldSet, Input, LinkButton, LoadingPlaceholder, useStyles2 } from '@grafana/ui';\nimport { AlertManagerCortexConfig, MuteTimeInterval } from 'app/plugins/datasource/alertmanager/types';\nimport { useDispatch } from 'app/types';\n\nimport { useAlertmanagerConfig } from '../../hooks/useAlertmanagerConfig';\nimport { useAlertmanager } from '../../state/AlertmanagerContext';\nimport { updateAlertManagerConfigAction } from '../../state/actions';\nimport { MuteTimingFields } from '../../types/mute-timing-form';\nimport { renameMuteTimings } from '../../utils/alertmanager';\nimport { makeAMLink } from '../../utils/misc';\nimport { createMuteTiming, defaultTimeInterval } from '../../utils/mute-timings';\nimport { ProvisionedResource, ProvisioningAlert } from '../Provisioning';\n\nimport { MuteTimingTimeInterval } from './MuteTimingTimeInterval';\n\ninterface Props {\n muteTiming?: MuteTimeInterval;\n showError?: boolean;\n provenance?: string;\n loading?: boolean;\n}\n\nconst useDefaultValues = (muteTiming?: MuteTimeInterval): MuteTimingFields => {\n const defaultValues = {\n name: '',\n time_intervals: [defaultTimeInterval],\n };\n\n if (!muteTiming) {\n return defaultValues;\n }\n\n const intervals = muteTiming.time_intervals.map((interval) => ({\n times: interval.times ?? defaultTimeInterval.times,\n weekdays: interval.weekdays?.join(', ') ?? defaultTimeInterval.weekdays,\n days_of_month: interval.days_of_month?.join(', ') ?? defaultTimeInterval.days_of_month,\n months: interval.months?.join(', ') ?? defaultTimeInterval.months,\n years: interval.years?.join(', ') ?? defaultTimeInterval.years,\n location: interval.location ?? defaultTimeInterval.location,\n }));\n\n return {\n name: muteTiming.name,\n time_intervals: intervals,\n };\n};\n\nconst MuteTimingForm = ({ muteTiming, showError, loading, provenance }: Props) => {\n const dispatch = useDispatch();\n const { selectedAlertmanager } = useAlertmanager();\n const styles = useStyles2(getStyles);\n\n const [updating, setUpdating] = useState(false);\n\n const { currentData: result } = useAlertmanagerConfig(selectedAlertmanager);\n const config = result?.alertmanager_config;\n\n const defaultValues = useDefaultValues(muteTiming);\n const formApi = useForm({ defaultValues });\n\n const onSubmit = (values: MuteTimingFields) => {\n if (!result) {\n return;\n }\n\n const newMuteTiming = createMuteTiming(values);\n\n const muteTimings = muteTiming\n ? config?.mute_time_intervals?.filter(({ name }) => name !== muteTiming.name)\n : config?.mute_time_intervals;\n\n const newConfig: AlertManagerCortexConfig = {\n ...result,\n alertmanager_config: {\n ...config,\n route:\n muteTiming && newMuteTiming.name !== muteTiming.name\n ? renameMuteTimings(newMuteTiming.name, muteTiming.name, config?.route ?? {})\n : config?.route,\n mute_time_intervals: [...(muteTimings || []), newMuteTiming],\n },\n };\n\n const saveAction = dispatch(\n updateAlertManagerConfigAction({\n newConfig,\n oldConfig: result,\n alertManagerSourceName: selectedAlertmanager!,\n successMessage: 'Mute timing saved',\n redirectPath: '/alerting/routes/',\n redirectSearch: 'tab=mute_timings',\n })\n );\n\n setUpdating(true);\n\n saveAction.unwrap().finally(() => {\n setUpdating(false);\n });\n };\n\n return (\n <>\n {provenance && }\n {loading && }\n {showError && }\n {result && !loading && !showError && (\n \n
\n
\n \n {\n if (!muteTiming) {\n const existingMuteTiming = config?.mute_time_intervals?.find(({ name }) => value === name);\n return existingMuteTiming ? `Mute timing already exists for \"${value}\"` : true;\n }\n return;\n },\n })}\n className={styles.input}\n data-testid={'mute-timing-name'}\n />\n \n \n \n \n Cancel\n \n
\n
\n
\n )}\n \n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n input: css`\n width: 400px;\n `,\n submitButton: css`\n margin-right: ${theme.spacing(1)};\n `,\n});\n\nexport default MuteTimingForm;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { Route, Redirect, Switch, useRouteMatch } from 'react-router-dom';\n\nimport { NavModelItem } from '@grafana/data';\nimport { Alert } from '@grafana/ui';\nimport { useQueryParams } from 'app/core/hooks/useQueryParams';\nimport { MuteTimeInterval } from 'app/plugins/datasource/alertmanager/types';\n\nimport { AlertmanagerPageWrapper } from './components/AlertingPageWrapper';\nimport MuteTimingForm from './components/mute-timings/MuteTimingForm';\nimport { useAlertmanagerConfig } from './hooks/useAlertmanagerConfig';\nimport { useAlertmanager } from './state/AlertmanagerContext';\n\nconst MuteTimings = () => {\n const [queryParams] = useQueryParams();\n const { selectedAlertmanager } = useAlertmanager();\n const { currentData, isLoading, error } = useAlertmanagerConfig(selectedAlertmanager, {\n refetchOnFocus: true,\n refetchOnReconnect: true,\n });\n const config = currentData?.alertmanager_config;\n\n const getMuteTimingByName = useCallback(\n (id: string): MuteTimeInterval | undefined => {\n const timing = config?.mute_time_intervals?.find(({ name }: MuteTimeInterval) => name === id);\n\n if (timing) {\n const provenance = config?.muteTimeProvenances?.[timing.name];\n\n return {\n ...timing,\n provenance,\n };\n }\n\n return timing;\n },\n [config]\n );\n\n return (\n <>\n {error && !isLoading && !currentData && (\n \n {error.message || 'Unknown error.'}\n \n )}\n {currentData && !error && (\n \n \n \n \n \n {() => {\n if (queryParams['muteName']) {\n const muteTiming = getMuteTimingByName(String(queryParams['muteName']));\n const provenance = muteTiming?.provenance;\n\n return (\n \n );\n }\n return ;\n }}\n \n \n )}\n \n );\n};\n\nconst MuteTimingsPage = () => {\n const pageNav = useMuteTimingNavData();\n\n return (\n \n \n \n );\n};\n\nexport function useMuteTimingNavData() {\n const { isExact, path } = useRouteMatch();\n const [pageNav, setPageNav] = useState | undefined>();\n\n useEffect(() => {\n if (path === '/alerting/routes/mute-timing/new') {\n setPageNav({\n id: 'alert-policy-new',\n text: 'Add mute timing',\n });\n } else if (path === '/alerting/routes/mute-timing/edit') {\n setPageNav({\n id: 'alert-policy-edit',\n text: 'Edit mute timing',\n });\n }\n }, [path, isExact]);\n\n return pageNav;\n}\n\nexport default MuteTimingsPage;\n","import moment from 'moment';\nimport React from 'react';\n\nimport { MuteTimeInterval } from 'app/plugins/datasource/alertmanager/types';\n\nimport {\n getDaysOfMonthString,\n getMonthsString,\n getTimeString,\n getWeekdayString,\n getYearsString,\n} from '../../utils/alertmanager';\n\n// https://github.com/prometheus/alertmanager/blob/9de8ef36755298a68b6ab20244d4369d38bdea99/timeinterval/timeinterval.go#L443\nconst TIME_RANGE_REGEX = /^((([01][0-9])|(2[0-3])):[0-5][0-9])$|(^24:00$)/;\n\nconst isvalidTimeFormat = (timeString: string): boolean => {\n return timeString ? TIME_RANGE_REGEX.test(timeString) : true;\n};\n\nconst isValidStartAndEndTime = (startTime?: string, endTime?: string): boolean => {\n // empty time range is perfactly valid for a mute timing\n if (!startTime && !endTime) {\n return true;\n }\n\n if ((!startTime && endTime) || (startTime && !endTime)) {\n return false;\n }\n\n const timeUnit = 'HH:mm';\n // @ts-ignore typescript types here incorrect, sigh\n const startDate = moment().startOf('day').add(startTime, timeUnit);\n // @ts-ignore typescript types here incorrect, sigh\n const endDate = moment().startOf('day').add(endTime, timeUnit);\n\n if (startTime && endTime && startDate.isBefore(endDate)) {\n return true;\n }\n\n if (startTime && endTime && endDate.isAfter(startDate)) {\n return true;\n }\n\n return false;\n};\n\nfunction renderTimeIntervals(muteTiming: MuteTimeInterval) {\n const timeIntervals = muteTiming.time_intervals;\n\n return timeIntervals.map((interval, index) => {\n const { times, weekdays, days_of_month, months, years, location } = interval;\n const timeString = getTimeString(times, location);\n const weekdayString = getWeekdayString(weekdays);\n const daysString = getDaysOfMonthString(days_of_month);\n const monthsString = getMonthsString(months);\n const yearsString = getYearsString(years);\n\n return (\n \n {`${timeString} ${weekdayString}`}\n
\n {[daysString, monthsString, yearsString].join(' | ')}\n
\n
\n );\n });\n}\n\nexport { isvalidTimeFormat, isValidStartAndEndTime, renderTimeIntervals };\n","import { SerializedError } from '@reduxjs/toolkit';\n\nimport { alertmanagerApi } from '../api/alertmanagerApi';\n\ntype Options = {\n refetchOnFocus: boolean;\n refetchOnReconnect: boolean;\n};\n\n// TODO refactor this so we can just call \"alertmanagerApi.endpoints.getAlertmanagerConfiguration\" everywhere\n// and remove this hook since it adds little value\nexport function useAlertmanagerConfig(amSourceName?: string, options?: Options) {\n const fetchConfig = alertmanagerApi.endpoints.getAlertmanagerConfiguration.useQuery(amSourceName ?? '', {\n ...options,\n skip: !amSourceName,\n });\n\n return {\n ...fetchConfig,\n // TODO refactor to get rid of this type assertion\n error: fetchConfig.error as SerializedError,\n };\n}\n"],"names":["DAYS_OF_THE_WEEK","MONTHS","defaultTimeInterval","validateArrayField","value","validateValue","invalidText","x","entry","convertStringToArray","str","s","createMuteTiming","fields","timeIntervals","times","weekdays","days_of_month","months","years","location","interval","start_time","end_time","v","INVALID_FORMAT_MESSAGE","MuteTimingTimeRange","intervalIndex","styles","getStyles","register","formState","getValues","timeRanges","addTimeRange","removeTimeRange","formErrors","timeRangeInvalid","Field","timeRange","index","timeRangeErrors","startTimeKey","endTimeKey","getStartAndEndTime","startTime","endTime","InlineFieldRow","InlineField","Input","input","Icon","IconButton","e","Button","theme","TIMEZONES","TimezoneSelect","options","timezoneOptions","tz","Select","MuteTimingTimeInterval","setValue","addTimeInterval","removeTimeInterval","FieldSet","Stack","timeInterval","timeIntervalIndex","errors","selectedTimezone","DaysOfTheWeek","daysOfWeek","day","parsedDay","month","year","parseDays","parsedDays","parseWeekdayRange","start","end","startIndex","endIndex","defaultValue","onChange","defaultValues","selectedDays","setSelectedDays","toggleDay","style","abbreviated","useDefaultValues","muteTiming","intervals","MuteTimingForm","showError","loading","provenance","dispatch","selectedAlertmanager","updating","setUpdating","result","useAlertmanagerConfig","config","formApi","onSubmit","values","newMuteTiming","muteTimings","name","newConfig","saveAction","Provisioning","LoadingPlaceholder","Alert","MuteTimings","queryParams","useQueryParams","currentData","isLoading","error","getMuteTimingByName","id","timing","MuteTimingsPage","pageNav","useMuteTimingNavData","isExact","path","setPageNav","TIME_RANGE_REGEX","isvalidTimeFormat","timeString","isValidStartAndEndTime","timeUnit","startDate","endDate","renderTimeIntervals","weekdayString","daysString","monthsString","yearsString","amSourceName","fetchConfig"],"sourceRoot":""}