{"version":3,"file":"src_app_modules_main-application_main-application_module_ts.c8ea5b5b88de6f49.js","mappings":"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gB,YAAa,CACX,CACExyC,MAAO,QACPyyC,QAASygB,qBACT10B,KAAM20B,cACNhuD,gBAAiBiuD,kCAEnB,CACEpzD,MAAO,QACPyyC,QAASygB,qBACT10B,KAAM20B,eACNhuD,gBAAiBiuD,yCAEnB,CACEpzD,MAAO,WACPyyC,QAASygB,wBACT10B,KAAM20B,eACNhuD,gBAAiBiuD,oCAEnB,CACEpzD,MAAO,SACPyyC,QAASygB,sBACT/tD,gBAAiBiuD,0BACjBC,iBAAiB,EACjB70B,KAAM20B,aAQC7c,EAAgC,CAC3Ct2C,MAAO,QACPyyC,QAASygB,cACT10B,KAAM20B,kBACNG,iBAAiB,EACjBnuD,gBAAiB,CACfiuD,mBACAA,yCACAA,yCACAA,6BAEF5gB,YAAa,CACX,CACExyC,MAAO,WACPizC,uBAAwBmgB,yCACxB9f,qBAAsBigB,OAKfhd,EAA6B,CACxCv2C,MAAO,SACPyyC,QAASygB,WACT10B,KAAM20B,UACNG,iBAAiB,EACjBnuD,gBAAiB,CACfiuD,mBACAA,cACAA,eACAA,gBAEF5gB,YAAa,CACX,CACExyC,MAAO,YACPizC,uBAAwBmgB,eACxB9f,qBAAsBkgB,OAQfhd,EAAkC,CAC7Cx2C,MAAO,UACPyyC,QAASygB,gBACT10B,KAAM20B,WACNG,iBAAiB,EACjB9gB,YAAa,CACX,CACExyC,MAAO,WACPyyC,QAASygB,qBACT/tD,gBAAiBiuD,mBACjB/b,aAAc4b,EACdz0B,KAAM20B,eAER,CACEnzD,MAAO,YACPyyC,QAASygB,sBACT/tD,gBAAiBiuD,6BACjB/b,aAAc4b,EACdz0B,KAAM20B,eAER,CACEnzD,MAAO,SACPyyC,QAASygB,4BACT/tD,gBAAiBiuD,mCACjB/b,aAAc4b,EACdz0B,KAAM20B,iBAQC1c,EAAkC,CAC7Cz2C,MAAO,QACPyyC,QAASygB,gBACT10B,KAAM20B,gBAEN3gB,YAAa,IAMFkE,EAA8B,CACzC12C,MAAO,UACPyyC,QAASygB,YACT10B,KAAM20B,eACNG,iBAAiB,EACjB9gB,YAAa,CACX,CACExyC,MAAO,YACPyyC,QAASygB,sBACT/tD,gBAAiB,CACfiuD,kCACAA,oCAEF50B,KAAM20B,eAER,CACEnzD,MAAO,MACPyyC,QAASygB,gBACT/tD,gBAAiB,CACfiuD,kCACAA,oCAEF50B,KAAM20B,eAER,CACEnzD,MAAO,UACPyyC,QAASygB,oBACT/tD,gBAAiB,CAACiuD,oBAClB/b,aAAc4b,EACdz0B,KAAM20B,iBAmCCnc,EAA8B,CACzCh3C,MAAO,UACPyyC,QAASygB,YACT10B,KAAM20B,WACN3gB,YAAa,IAMFmE,GAAiC,CAC5C32C,MAAO,WACPyyC,QAASygB,aACT10B,KAAM20B,aACN3gB,YAAa,CACX,CACExyC,MAAO,QACPyyC,QAASygB,mBACT/tD,gBAAiBiuD,qBACjB50B,KAAM20B,gBAER,CACEnzD,MAAO,QACPyyC,QAASygB,mBACT/tD,gBAAiB,CAACiuD,sBAClB50B,KAAM20B,UAcR,CACEnzD,MAAO,aACPyyC,QAASygB,uBACT/tD,gBAAiBiuD,8BACjB50B,KAAM20B,gBAER,CACEnzD,MAAO,UACPyyC,QAASygB,oBACT/tD,gBAAiBiuD,mBACjB50B,KAAM20B,eAER,CACEnzD,MAAO,QACPyyC,QAASygB,oCACT/tD,gBAAiBiuD,0CACjB50B,KAAM20B,mBAER,CACEnzD,MAAO,SACPyyC,QAASygB,oBACT/tD,gBAAiBiuD,eACjB50B,KAAM20B,yHCpQL,MAAMM,2CAAmB,0BAAnBA,gCAHD9qD,6CCOV+qD,IACAC,IACAC,IACAC,IACAC,IACAC,IAQK,MAAMC,2CAAgB,0BAAhBA,gCAJDrrD,KAAc8qD,EAAqBhjD,OAAmB,qHCV3D,IAAMwjD,EAAN,MAIL54D,YACUo+B,EACAy6B,EACAp2D,GAFApC,mBACAA,qBACAA,aANVA,oBAAwC,EAOrC,CAEUy4D,sBAAkBhvD,GAC7BzJ,KAAKyJ,gBAAkBA,EACvBzJ,KAAK04D,iBACP,CAEAh4D,WACEV,KAAKoC,MACF4B,OAAO20D,MACP93D,QACC+3D,KAAe54D,OAAI,EACnB64D,KAAQ7e,KAA4CA,IAAc,EAClE8e,KAAK9e,IACHh6C,KAAKg6C,eAAiBA,EACtBh6C,KAAK04D,iBAAe,IAGvBx3D,WACL,CAEAQ,cAAqB,CAEbg3D,kBACN,MAAMK,KAAgBC,KAAqBh5D,KAAKg6C,eAAgBh6C,KAAKyJ,iBACrEzJ,KAAKw4D,cAAcS,QACfF,GACF/4D,KAAKw4D,cAAcU,mBAAmBl5D,KAAK+9B,YAE/C,yCArCWw6B,GAAuBY,gEAAvBZ,EAAuB52D,yFAAvB42D,8UAAuB32D,KADnCg3D,QACYL,EAAuB,mDCN7B,MAAMa,EASXz5D,cARUK,uBAAoB,IAAIq5D,KAQnB,CANFC,kBAAcC,GACrBA,EAAcr5D,OAASq5D,EAAcC,YACvCx5D,KAAKy5D,kBAAkBh4C,MAE3B,wCAPW23C,EAAoB,0BAApBA,EAAoBz3D,gLCC1B,MAAM+3D,EAYX/5D,YAAoBiuB,EAAgC+rC,GAAhC35D,kBAAgCA,gBAXpDA,sBAAkC,GAClCA,mBAAgB,OAEPA,eAAY,GACXA,eAAoC,IAAIq5D,MAQhDr5D,KAAK25D,SAASC,SAAS55D,KAAK4tB,WAAW5T,cAAe,mBACtDha,KAAK25D,SAASv/C,aAAapa,KAAK4tB,WAAW5T,cAAe,YAAaha,KAAK65D,cAC9E,CARmCC,UACjC95D,KAAK+5D,kBACL/5D,KAAKg6D,YACP,CAOQD,kBACN,OAAQ/5D,KAAKi6D,sBACN,GAEDj6D,KAAKi6D,iBAAmB,MACxBj6D,KAAK65D,cAAgB,YAEvB,UACG,MAED75D,KAAKi6D,iBAAmB,OACxBj6D,KAAK65D,cAAgB,aAEvB,UACG,OAED75D,KAAKi6D,iBAAmB,GACxBj6D,KAAK65D,cAAgB,OAI3B75D,KAAK25D,SAASv/C,aAAapa,KAAK4tB,WAAW5T,cAAe,YAAaha,KAAK65D,cAC9E,CAEQG,aACFh6D,KAAKk6D,WACPl6D,KAAKm6D,UAAU14C,KAAK,CAClB24C,MAAOp6D,KAAKk6D,UACZ//B,UAAWn6B,KAAKi6D,kBAGtB,wCAhDWP,GAAmBL,oDAAnBK,EAAmB/3D,qGAAnBuF,YAAe,uFCR5B,IAAYmzD,8BAAa,KACvBA,iBACAA,6CACAA,uCACAA,2BACAA,0BALuB,mBCAzB,IAAYC,8BAAW,KAKrBA,iBACAA,mCACAA,2CACAA,2BACAA,qBAKAA,qBACAA,qCACAA,yCACAA,qCACAA,yCACAA,oBAGAA,wBAtBqB,kBCAvB,IAAYC,8BAAa,KACvBA,iBAGAA,2CACAA,yCACAA,uCACAA,mDACAA,uCACAA,+CACAA,qDAGAA,uCACAA,2BACAA,kCACAA,gCACAA,4BACAA,4BACAA,oCACAA,sCACAA,wBAGAA,kCACAA,4BACAA,oCACAA,oCACAA,0BACAA,gCACAA,4BAGAA,4CACAA,yCAlCuB,oCCAlB,MAAM7e,EAA2B,CAACzB,EAAeugB,KACrDA,GAAgB12D,QAAU02D,EAAel6C,KAAKs7B,GAAU3B,EAAM/0C,SAAS02C,GAAO,mBCC1E,SAAS6e,EAA8BC,GAC5C,OAAKA,EAGE,GAAGA,GAASxN,SAAW,MAAMwN,GAASvN,SAAW,MAAMuN,GAAStN,MAAQ,OAAOsN,GAAS1tC,OAAS,MACtG0tC,GAASrN,KAAO,KAHT,QAKX,oCCNO,SAASsN,EACdC,EACAC,GAEA,OAAQA,GAAY,IAAIz1D,KAAKlF,GAASA,EAAM28C,uBAAyB+d,EACvE,CAEO,SAASE,EACdF,EACAC,GAEA,OAAQA,GAAY,IAAIz1D,KAAKlF,GAASA,EAAM28C,uBAAyB+d,GAAgB16D,EAAMmT,YAC7F,4ECZO,SAAS0nD,EACdle,EACAme,EACAC,GAAgB,GAEhB,IAAKD,EACH,OAAO,EAGT,GAAIC,EACF,OAAOD,EAAcE,MAErB,OAAQre,QACDse,WACH,OAAOH,EAAcI,YAElBD,YACH,OAAOH,EAAcK,aAElBF,QACH,OAAOH,EAAcM,SAElBH,cACH,OAAOH,EAAcO,eAElBJ,SACH,OAAOH,EAAcQ,UAElBL,UACH,OAAOH,EAAcS,WAElBN,aACH,OAAOH,EAAcU,cAElBP,cACH,OAAOH,EAAcW,eAElBR,YACH,OAAOH,EAAcY,aAElBT,WACH,OAAOH,EAAca,OAI7B,mDC5CO,SAASC,EAAcp+B,GAc5B,OAbkBA,EAAOpd,KAAK5b,GCIzB,SAASq3D,EAAoBC,GAClC,MAAiC,mBAAnBA,EAAOC,OACvB,CDLQF,CAAoBr3D,IACdA,EAAKu3D,WAEb,EAAIz6B,WAAQ98B,EAAKw3D,aACXx3D,EAAKw3D,YAAYp4D,YACgE,IAA3EY,EAAKw3D,YAA+B92D,KAAKwe,GAAKA,IAAMlf,EAAKixC,mBADnE,EAIOjxC,EAAKw3D,cAAgBx3D,EAAKixC,aAKzC,oBEnBO,SAASwmB,EAA0Bj8D,GACxC,OAAKA,GAAmB,IAAVA,EAGPA,EAAMi4C,WAAWsK,QAAQ,IAAK,KAF5B,EAGX,gHCMO,MAAM2Z,EAIXz8D,YAAoBsjD,EAAkDlhD,GAAlD/B,2BAAkDA,cAHtEA,wBAAoB,CAGmE,CAEvFsmD,YAAY39C,GACV,OAAO3I,KAAKijD,oBAAoBgB,iBAAiBpjD,QAC/Cw7D,KAAIC,IACGA,EAAava,iBAChB/hD,KAAK+B,OACF4E,SAAS,CAAC41D,WAAkB,CAC3BxkB,YAAa,CACXgO,UAAWh1C,OAAO4lC,SAASuB,QAG9Bx3B,OAEE47C,EAAava,kBAG1B,wCArBWqa,GAASI,oDAATJ,EAAS/xD,QAAT+xD,EAAS,qBAFR,QAAM,yICMb,MAAMK,EACX98D,YAAoBgL,EAAkC5I,GAAlC/B,mBAAkCA,aAAiB,CAEvEsmD,YAAY39C,GACV,OAAO3I,KAAK2K,YAAY+xD,cAAc77D,QACpC87D,KAAQ9uD,KAAyBA,IAAQ,EACzC+uD,KAAK/uD,IACH,MAAMpE,EAAyCoE,EAASpE,gBAClDozD,GAAmB,CAAE9kB,YAAapvC,EAAMovC,YAAa+I,SAAUn4C,EAAMm4C,UAC3E,GAAIjzC,EAASsvC,WAAa2f,aAAmB,CAC3C,MAAIC,KAAqBtzD,EAAiBE,oBACxC,OAAO3J,KAAK+B,OAAOk2C,cAAc,CAACskB,sBAA6BM,IAGjE,MAAIE,KAAqBtzD,EAAiBE,yCACxC,OAAO3J,KAAK+B,OAAOk2C,cAAc,CAACskB,sBAA6BM,IAGjE,MAAIE,KAAqBtzD,EAAiBE,wCACxC,OAAO3J,KAAK+B,OAAOk2C,cAAc,CAACskB,6BAAoCM,IAGxE,MAAIE,KAAqBtzD,EAAiBE,oCACxC,OAAO3J,KAAK+B,OAAOk2C,cAAc,CAACskB,yBAAgCM,IAItE,OAAIhvD,EAASsvC,WAAa2f,oBACpBC,KAAqBtzD,EAAiBE,4BACjC3J,KAAK+B,OAAOk2C,cAAc,CAACskB,uBAA8BM,GAG7D,GAGb,wCAnCWJ,GAAiBO,mDAAjBP,EAAiBpyD,QAAjBoyD,EAAiB,qBAFhB,QAAM,6HCJb,MAAMQ,EAA+BC,GACnCC,EAA+B,CAACD,IAQ5BC,EAAkCC,GACtC,KACL,MAAMr7D,KAASs7D,OAAOC,MAGtB,SAFoBD,OAAOE,KAERC,oBAAoB38D,QACrC87D,KAAI5wD,GAAQA,EAAKtC,kBAAe,EAChCmzD,KAAQnzD,KAA6CA,GAAiB3F,SAAM,EAC5E64D,KAAKlzD,IACH,MAAIC,KAAqBD,EAAiB2zD,EAAoB,OAC5D,OAAO,EAET,MAAMK,EAAsB17D,EAAO27D,SAASlG,mBAC5C,OAAI4F,EAAmBt5D,QAAU,EAC/B25D,EAAoB1lB,YAAY,uBAAyBqlB,EAAmB,GAE5EK,EAAoB1lB,YAAY,2BAA6BqlB,EAAmBznD,KAAK,KAEhF8nD,IACP,CAEN,8DC/BK,MAAME,EACXh+D,YAAoB0C,yBAAmC,CAEvDqlD,gBAGE,OAAO,CACT,wCAPWiW,GAAcC,uCAAdD,EAActzD,QAAdszD,EAAc,qBAFb,QAAM,mBCNpB,IAAYE,8BAAY,KACtBA,mBACAA,qBACAA,oBAHsB,8DCMjB,MAAMC,EACXn+D,YAAoBo+D,sBAA6B,CAEjD/2D,UACE9G,EACA89D,EAAkE,IAElE,IAAK99D,EAAO,OAAO,KACnB,MAAM+9D,GAAe/9D,EAAQ,GAAM,EAAI,QAAU,QACjD,OAAOF,KAAK+9D,aAAa/2D,UAAU9G,EAAO,MAAO89D,EAASC,EAC5D,wCAVWH,GAAiBzE,+DAAjByE,EAAiBI,4DCDvB,MAAMC,EACXn3D,UAAU9G,GACR,OAAOA,EAAQ,MAAQ,IACzB,wCAHWi+D,EAAmB,kDAAnBA,EAAmBD,uECGzB,MAAME,EACXp3D,UAAU9G,EAAcm+D,GACtB,SAAOjS,WAAQlsD,GAAOiE,OAAOW,GAAKu5D,EAAe/9C,KAAKkL,GAAKA,EAAEtrB,QAAU4E,GACzE,wCAHWs5D,EAAW,0CAAXA,EAAWF,uECDjB,MAAMI,EACXt3D,UAAU9G,GACR,OAAQA,QACDq+D,SACH,MAAO,SAEJA,SACH,MAAO,SAEJA,eACH,MAAO,gBAEJA,eACH,MAAO,mBAGP,MAAO,GAGb,wCAnBWD,EAAmB,kDAAnBA,EAAmBJ,4DCFzB,MAAMM,EACXx3D,UAAU9G,EAAeu+D,EAAY,GACnC,OAAOz+D,KAAK0+D,iBAAiBx+D,EAAOu+D,EACtC,CAEQC,iBAAiBC,EAAKC,GAO5B,GAAY,OAARD,GAAwB,IAARA,EAClB,MAAO,KAETC,GAASA,GAASA,EAAQ,EAAI,EAAIA,EAClC,MAAMnzC,EAAIkzC,EAAIE,YAAY,GAAGtc,MAAM,KACjCuc,EAAiB,IAAbrzC,EAAE3nB,OAAe,EAAI+gB,KAAKsG,MAAMtG,KAAKC,IAAI2G,EAAE,GAAGF,MAAM,GAAI,IAAM,GAClEwzC,EAAID,EAAI,EAAIH,EAAIK,QAAQJ,IAAUD,EAAM95C,KAAKo6C,IAAI,GAAQ,EAAJH,IAAQE,QAAQJ,GAGvE,MAAO,MAFDG,EAAI,EAAIA,EAAIl6C,KAAKq6C,IAAIH,IACjB,CAAC,GAAI,IAAK,IAAK,IAAK,KAAKD,GAErC,wCAtBWN,EAAiC,gEAAjCA,EAAiCN,uECEvC,MAAMiB,EACXn4D,UAAU9G,EAAgBk/D,EAAW,IAAKC,EAAiB,GACzD,OAAOC,MAAMp/D,IAANo/D,MAAgBp/D,EACnBq/D,IACAr/D,GAAS,EACT,GAAGk/D,IAAWl/D,EAAM8+D,QAAQK,KAC5B,IAAID,IAAWv6C,KAAKq6C,IAAIh/D,GAAO8+D,QAAQK,IAC7C,wCAPWF,EAAkB,iDAAlBA,EAAkBjB,kFCCxB,MAAMsB,EACX7/D,YAAoB0jD,0BAEpBrjD,cAAW,IAAIy/D,KAAS,QAF+B,CAIvDz4D,UAAU9G,EAAsBw/D,EAAS,WAAYC,GAAY,GAC/D,IAAKz/D,EACH,MAAO,GAGT,MAAM0/D,EAAY,IAAIC,KAAK3/D,GAC3B,OAMJ,SAAS4/D,EAAQC,EAAUC,GACzB,OACED,EAASE,YAAcD,EAAMC,WAC7BF,EAASG,aAAeF,EAAME,YAC9BH,EAAS1a,gBAAkB2a,EAAM3a,aAErC,CAZWya,CAAQF,EAAW5/D,KAAKqjD,gBAAgB+B,mBAAqBua,EAChE,QACA3/D,KAAKmgE,SAASn5D,UAAU44D,EAAWF,EACzC,wCAdWF,GAAahD,0DAAbgD,EAAatB,SAuB1B,yECvBO,MAAMkC,EACXzgE,YAAoB0jD,yBAAmC,CAEvDr8C,UAAU9G,GACR,MAAMmgE,EAAO,IAAIR,KAAK3/D,GAChBogE,EAAaz7C,KAAKq6C,IAAIqB,EAAOvgE,KAAKqjD,gBAAgB+B,kBAAkBob,KAAKD,EAAOF,GAAO,SAE7F,OAAsB,IAAfC,EAAmB,GAAGA,QAAmB,GAAGA,QACrD,wCARWF,GAAW5D,wDAAX4D,EAAWlC,uECEjB,MAAMuC,EACXz5D,UACE61C,EACAme,EACAC,GAAgB,GAEhB,MAAMyF,KAAOC,KAAc9jB,EAAsBme,EAAeC,GAE1D2F,EAAW/7C,KAAKsG,MAAMu1C,SAAqB,EAC3CG,EAAOh8C,KAAKsG,MAAMy1C,EAAW,KAAO,EAE1C,MAAO,CAAEC,OAAMC,MADDF,EAAkB,GAAPC,GAAa,EAExC,wCAZWJ,EAAc,4CAAdA,EAAcvC,4DCLpB,MAAM6C,EACX/5D,UAAUg6D,EAA6CC,GAAmB,GACxE,MAAQJ,OAAMC,SAAUE,EACxB,OAAQH,GAASC,EAAe,GAAGG,GAAoBH,GAAS,GAAKE,EAAWH,KAAOG,EAAWH,KAAO,IAAhF,IAC3B,wCAJWE,EAAY,2CAAZA,EAAY7C,uECKlB,MAAMgD,EACXl6D,UAAUpD,EAAwBu9D,GAChC,MAAMC,EAAQx9D,EAAKigB,IAAI,CAACw9C,YAClBz+D,EAAQgB,EAAKigB,IAAI,CAACs9C,IACxB,OAAOC,EAAM3oC,UAAY0oC,GAAyBv+D,EAAM61B,OAC1D,wCALWyoC,EAA2B,0DAA3BA,EAA2BhD,uECAjC,MAAMoD,EACXt6D,UAAUpD,EAAwBu9D,GAChC,MAAMI,EAAoB39D,EAAKigB,IAAI,CAACw9C,8BAC9BD,EAAQx9D,EAAKigB,IAAI,CAACw9C,YAClBz+D,EAAQgB,EAAKigB,IAAI,CAACs9C,IACxB,OAAOI,EAAkBC,UAAYJ,EAAMI,UAAY5+D,EAAM4+D,QAC/D,wCANWF,EAA4B,2DAA5BA,EAA4BpD,uECJlC,MAAMuD,EACXz6D,UAAU9G,GACR,QAAIA,GACKqgE,IAASmB,QAAQ,OAAOjoD,QAAQ8mD,EAAOrgE,GAAOwhE,QAAQ,OAGjE,wCANWD,EAAe,8CAAfA,EAAevD,uECErB,MAAMyD,EACX36D,UAAUpE,EAAkBg/D,GAAW,GACrC,GAAIh/D,EAAM61B,QACR,MAAO,GAGT,MAAQopC,MAAKC,QAASl/D,EAAM1C,MAE5B,MAAIksD,SAAMyV,KAAG,EAAKzV,SAAM0V,IAAiB,KAARD,GAAuB,KAATC,EAC7C,MAAO,GAGT,MAAMC,EAAW5iB,SAAS0iB,EAAK,IACzBG,EAAY7iB,SAAS2iB,EAAM,IAIjC,OAAc,IAFAj9C,KAAKq6C,IAAI8C,EAAYD,GAG1BH,EAAW,IAAGG,EAAW,GAAM,GAAGA,EAAW,IAG/CH,EAAW,GAAGI,OAAeD,IAAa,GAAGA,EAAW,OAAOC,GACxE,wCAtBWL,EAAuB,sDAAvBA,EAAuBzD,2DCA7B,MAAM+D,EACXj7D,UACEsF,EACA41D,GAEA,OAAOA,GAAU98D,KAAK+8D,GAAYA,EAASjiE,MAAMyE,KAAO2H,EAC1D,wCANW21D,EAAmB,kDAAnBA,EAAmB/D,uECCzB,MAAMkE,EACXp7D,UAAU9G,EAAemiE,GACvB,IAAKniE,IAAUmiE,GAAYv+D,OACzB,OAAO,KAET,MAAMmG,KAASmiD,SAAMiW,EAAWl+D,OAAOO,GAAQA,GAAMJ,MAAMyY,gBAAkB7c,GAAO6c,iBAAiB7c,MACrG,OAAOo/D,MAAMr1D,GAAU,KAAOA,CAChC,wCAPWm4D,EAAa,4CAAbA,EAAalE,6CCT1B,MAAMoE,EAAQ,CAAE,sBAAuB,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,+CAAgD,CAAC,OAAQ,oCAAqC,CAAC,OAAQ,oCAAqC,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,6BAA8B,CAAC,QAAS,mCAAoC,CAAC,OAAQ,oCAAqC,CAAC,OAAQ,oCAAqC,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,0BAA2B,CAAC,MAAO,SAAU,8DAA+D,CAAC,OAAQ,0CAA2C,CAAC,QAAS,4BAA6B,CAAC,MAAO,QAAS,gCAAiC,CAAC,OAAQ,6BAA8B,CAAC,SAAU,sBAAuB,CAAC,OAAQ,8BAA+B,CAAC,SAAU,wCAAyC,CAAC,OAAQ,wCAAyC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,uCAAwC,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,0CAA2C,CAAC,OAAQ,yDAA0D,CAAC,OAAQ,sDAAuD,CAAC,OAAQ,uCAAwC,CAAC,OAAQ,sCAAuC,CAAC,QAAS,gCAAiC,CAAC,OAAQ,gCAAiC,CAAC,QAAS,gCAAiC,CAAC,WAAY,8BAA+B,CAAC,SAAU,+BAAgC,CAAC,UAAW,qCAAsC,CAAC,OAAQ,wCAAyC,CAAC,QAAS,6BAA8B,CAAC,OAAQ,oCAAqC,CAAC,QAAS,oCAAqC,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,+BAAgC,CAAC,SAAU,uCAAwC,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,2CAA4C,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,gCAAiC,CAAC,MAAO,MAAO,MAAO,MAAO,OAAQ,+CAAgD,CAAC,UAAW,mDAAoD,CAAC,UAAW,8BAA+B,CAAC,OAAQ,+BAAgC,CAAC,WAAY,8BAA+B,CAAC,OAAQ,gCAAiC,CAAC,QAAS,yCAA0C,CAAC,QAAS,wCAAyC,CAAC,QAAS,yCAA0C,CAAC,QAAS,yCAA0C,CAAC,QAAS,wCAAyC,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,6BAA8B,CAAC,SAAU,uBAAwB,CAAC,QAAS,kCAAmC,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,4BAA6B,CAAC,MAAO,OAAQ,MAAO,QAAS,gCAAiC,CAAC,MAAO,QAAS,mCAAoC,CAAC,MAAO,QAAS,2BAA4B,CAAC,MAAO,QAAS,yCAA0C,CAAC,aAAc,sBAAuB,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,+BAAgC,CAAC,QAAS,8BAA+B,CAAC,QAAS,0BAA2B,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,mCAAoC,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,+BAAgC,CAAC,MAAO,OAAQ,8BAA+B,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,sBAAuB,CAAC,QAAS,6BAA8B,CAAC,SAAU,4BAA6B,CAAC,OAAQ,YAAa,6BAA8B,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,6BAA8B,CAAC,KAAM,QAAS,QAAS,QAAS,8BAA+B,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,mCAAoC,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,sCAAuC,CAAC,OAAQ,6CAA8C,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,mCAAoC,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,oCAAqC,CAAC,MAAO,OAAQ,0BAA2B,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,uCAAwC,CAAC,QAAS,2CAA4C,CAAC,WAAY,0CAA2C,CAAC,UAAW,uCAAwC,CAAC,OAAQ,mCAAoC,CAAC,OAAQ,yBAA0B,CAAC,MAAO,OAAQ,iCAAkC,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,0CAA2C,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,sCAAuC,CAAC,OAAQ,uCAAwC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,6CAA8C,CAAC,OAAQ,uBAAwB,CAAC,QAAS,oCAAqC,CAAC,OAAQ,0BAA2B,CAAC,QAAS,0BAA2B,CAAC,QAAS,yBAA0B,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,2BAA4B,CAAC,SAAU,uCAAwC,CAAC,aAAc,8BAA+B,CAAC,OAAQ,6BAA8B,CAAC,MAAO,UAAW,YAAa,wCAAyC,CAAC,OAAQ,uCAAwC,CAAC,MAAO,6BAA8B,CAAC,MAAO,OAAQ,2BAA4B,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,mCAAoC,CAAC,MAAO,OAAQ,2BAA4B,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,wCAAyC,CAAC,aAAc,0CAA2C,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,wCAAyC,CAAC,OAAQ,uBAAwB,CAAC,QAAS,qCAAsC,CAAC,QAAS,0BAA2B,CAAC,MAAO,OAAQ,6BAA8B,CAAC,UAAW,6BAA8B,CAAC,QAAS,+BAAgC,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,iCAAkC,CAAC,MAAO,OAAQ,8BAA+B,CAAC,OAAQ,4BAA6B,CAAC,MAAO,OAAQ,6BAA8B,CAAC,QAAS,+BAAgC,CAAC,OAAQ,wBAAyB,CAAC,MAAO,OAAQ,uBAAwB,CAAC,MAAO,MAAO,MAAO,OAAQ,mCAAoC,CAAC,OAAQ,8BAA+B,CAAC,UAAW,qDAAsD,CAAC,OAAQ,0DAA2D,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,mCAAoC,CAAC,WAAY,qCAAsC,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,qCAAsC,CAAC,SAAU,uBAAwB,CAAC,OAAQ,uBAAwB,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,qCAAsC,CAAC,OAAQ,qCAAsC,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,oCAAqC,CAAC,OAAQ,2BAA4B,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,iDAAkD,CAAC,QAAS,wDAAyD,CAAC,QAAS,iDAAkD,CAAC,QAAS,oDAAqD,CAAC,QAAS,gCAAiC,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,iCAAkC,CAAC,QAAS,6BAA8B,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,6BAA8B,CAAC,QAAS,gCAAiC,CAAC,MAAO,MAAO,OAAQ,sDAAuD,CAAC,QAAS,6DAA8D,CAAC,QAAS,sDAAuD,CAAC,QAAS,0DAA2D,CAAC,QAAS,yDAA0D,CAAC,QAAS,6BAA8B,CAAC,OAAQ,OAAQ,mDAAoD,CAAC,QAAS,mDAAoD,CAAC,QAAS,2BAA4B,CAAC,MAAO,MAAO,MAAO,OAAQ,yBAA0B,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,uBAAwB,CAAC,QAAS,2BAA4B,CAAC,OAAQ,8BAA+B,CAAC,QAAS,wBAAyB,CAAC,UAAW,oCAAqC,CAAC,OAAQ,uBAAwB,CAAC,MAAO,QAAS,qCAAsC,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,sCAAuC,CAAC,OAAQ,oCAAqC,CAAC,SAAU,+CAAgD,CAAC,UAAW,qCAAsC,CAAC,QAAS,sCAAuC,CAAC,QAAS,+BAAgC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,2CAA4C,CAAC,OAAQ,oDAAqD,CAAC,OAAQ,8CAA+C,CAAC,OAAQ,6CAA8C,CAAC,OAAQ,sDAAuD,CAAC,QAAS,8CAA+C,CAAC,OAAQ,uDAAwD,CAAC,OAAQ,2CAA4C,CAAC,OAAQ,oDAAqD,CAAC,OAAQ,kDAAmD,CAAC,OAAQ,2DAA4D,CAAC,OAAQ,iDAAkD,CAAC,OAAQ,0DAA2D,CAAC,OAAQ,0CAA2C,CAAC,OAAQ,iDAAkD,CAAC,OAAQ,mDAAoD,CAAC,OAAQ,8CAA+C,CAAC,OAAQ,6BAA8B,CAAC,MAAO,8BAA+B,CAAC,OAAQ,oCAAqC,CAAC,QAAS,0CAA2C,CAAC,OAAQ,yCAA0C,CAAC,OAAQ,4EAA6E,CAAC,QAAS,qEAAsE,CAAC,QAAS,yEAA0E,CAAC,QAAS,wEAAyE,CAAC,QAAS,oEAAqE,CAAC,QAAS,uEAAwE,CAAC,QAAS,0EAA2E,CAAC,QAAS,0EAA2E,CAAC,QAAS,yCAA0C,CAAC,OAAQ,0BAA2B,CAAC,MAAO,iCAAkC,CAAC,OAAQ,uBAAwB,CAAC,MAAO,MAAO,QAAS,4BAA6B,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,yBAA0B,CAAC,QAAS,6BAA8B,CAAC,MAAO,8BAA+B,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,qCAAsC,CAAC,OAAQ,mCAAoC,CAAC,OAAQ,wCAAyC,CAAC,OAAQ,4BAA6B,CAAC,QAAS,sCAAuC,CAAC,QAAS,oCAAqC,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,sBAAuB,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,qCAAsC,CAAC,OAAQ,yCAA0C,CAAC,YAAa,iCAAkC,CAAC,cAAe,0BAA2B,CAAC,OAAQ,+BAAgC,CAAC,MAAO,mCAAoC,CAAC,QAAS,qCAAsC,CAAC,UAAW,uCAAwC,CAAC,MAAO,0BAA2B,CAAC,OAAQ,uBAAwB,CAAC,QAAS,uBAAwB,CAAC,QAAS,uBAAwB,CAAC,QAAS,0CAA2C,CAAC,OAAQ,8CAA+C,CAAC,OAAQ,6CAA8C,CAAC,OAAQ,yCAA0C,CAAC,OAAQ,qCAAsC,CAAC,MAAO,QAAS,uBAAwB,CAAC,OAAQ,gCAAiC,CAAC,WAAY,8CAA+C,CAAC,MAAO,kCAAmC,CAAC,OAAQ,QAAS,+BAAgC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,oCAAqC,CAAC,OAAQ,oCAAqC,CAAC,OAAQ,uCAAwC,CAAC,OAAQ,oCAAqC,CAAC,OAAQ,sCAAuC,CAAC,MAAO,OAAQ,6CAA8C,CAAC,OAAQ,oCAAqC,CAAC,SAAU,sCAAuC,CAAC,MAAO,+BAAgC,CAAC,QAAS,+BAAgC,CAAC,OAAQ,wCAAyC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,wCAAyC,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,2CAA4C,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,wCAAyC,CAAC,OAAQ,0CAA2C,CAAC,OAAQ,+BAAgC,CAAC,MAAO,QAAS,sBAAuB,CAAC,OAAQ,kCAAmC,CAAC,MAAO,QAAS,6BAA8B,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,mCAAoC,CAAC,OAAQ,4CAA6C,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,MAAO,OAAQ,iCAAkC,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,uBAAwB,CAAC,MAAO,QAAS,4BAA6B,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,wBAAyB,CAAC,YAAa,2BAA4B,CAAC,OAAQ,MAAO,sBAAuB,CAAC,OAAQ,wBAAyB,CAAC,MAAO,MAAO,MAAO,OAAQ,4BAA6B,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,4BAA6B,CAAC,SAAU,2BAA4B,CAAC,QAAS,iCAAkC,CAAC,SAAU,2BAA4B,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,uBAAwB,CAAC,OAAQ,uBAAwB,CAAC,QAAS,gCAAiC,CAAC,OAAQ,mCAAoC,CAAC,OAAQ,kCAAmC,CAAC,OAAQ,yCAA0C,CAAC,OAAQ,oDAAqD,CAAC,UAAW,oCAAqC,CAAC,OAAQ,qCAAsC,CAAC,OAAQ,0CAA2C,CAAC,OAAQ,sBAAuB,CAAC,MAAO,QAAS,iCAAkC,CAAC,OAAQ,8BAA+B,CAAC,MAAO,wBAAyB,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,gCAAiC,CAAC,QAAS,oBAAqB,CAAC,OAAQ,+BAAgC,CAAC,MAAO,MAAO,MAAO,OAAQ,+BAAgC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,sBAAuB,CAAC,SAAU,qBAAsB,CAAC,SAAU,2BAA4B,CAAC,WAAY,sBAAuB,CAAC,MAAO,SAAU,qBAAsB,CAAC,MAAO,sBAAuB,CAAC,MAAO,OAAQ,oBAAqB,CAAC,MAAO,MAAO,MAAO,MAAO,OAAQ,uBAAwB,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,qBAAsB,CAAC,QAAS,0BAA2B,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,qBAAsB,CAAC,QAAS,oBAAqB,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,QAAS,+BAAgC,CAAC,OAAQ,yBAA0B,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,qBAAsB,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,oBAAqB,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,oBAAqB,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,2BAA4B,CAAC,MAAO,MAAO,MAAO,OAAQ,wBAAyB,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,yBAA0B,CAAC,YAAa,2BAA4B,CAAC,UAAW,qBAAsB,CAAC,QAAS,oBAAqB,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,qCAAsC,CAAC,WAAY,8BAA+B,CAAC,QAAS,qCAAsC,CAAC,QAAS,yCAA0C,CAAC,YAAa,qCAAsC,CAAC,UAAW,kCAAmC,CAAC,WAAY,+BAAgC,CAAC,QAAS,yBAA0B,CAAC,QAAS,sBAAuB,CAAC,SAAU,6BAA8B,CAAC,QAAS,+BAAgC,CAAC,MAAO,OAAQ,yBAA0B,CAAC,OAAQ,oBAAqB,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,QAAS,+BAAgC,CAAC,eAAgB,4BAA6B,CAAC,OAAQ,uBAAwB,CAAC,OAAQ,uBAAwB,CAAC,OAAQ,wBAAyB,CAAC,QAAS,yBAA0B,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,uBAAwB,CAAC,OAAQ,8BAA+B,CAAC,QAAS,2BAA4B,CAAC,OAAQ,OAAQ,MAAO,MAAO,QAAS,4BAA6B,CAAC,MAAO,MAAO,OAAQ,2BAA4B,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,wBAAyB,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,wBAAyB,CAAC,OAAQ,uBAAwB,CAAC,KAAM,OAAQ,oCAAqC,CAAC,OAAQ,oBAAqB,CAAC,OAAQ,qBAAsB,CAAC,KAAM,MAAO,sBAAuB,CAAC,OAAQ,QAAS,uBAAwB,CAAC,MAAO,OAAQ,mCAAoC,CAAC,MAAO,OAAQ,kCAAmC,CAAC,OAAQ,+BAAgC,CAAC,QAAS,uCAAwC,CAAC,OAAQ,sCAAuC,CAAC,OAAQ,oBAAqB,CAAC,OAAQ,mBAAoB,CAAC,MAAO,qBAAsB,CAAC,QAAS,gCAAiC,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,oBAAqB,CAAC,QAAS,wBAAyB,CAAC,OAAQ,yBAA0B,CAAC,QAAS,uBAAwB,CAAC,OAAQ,wBAAyB,CAAC,WAAY,uBAAwB,CAAC,UAAW,2BAA4B,CAAC,MAAO,qBAAsB,CAAC,OAAQ,oBAAqB,CAAC,OAAQ,oBAAqB,CAAC,MAAO,MAAO,oBAAqB,CAAC,OAAQ,wBAAyB,CAAC,OAAQ,wBAAyB,CAAC,UAAW,QAAS,qBAAsB,CAAC,QAAS,sBAAuB,CAAC,SAAU,+BAAgC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,gCAAiC,CAAC,QAAS,wCAAyC,CAAC,gBAAiB,+BAAgC,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,gCAAiC,CAAC,QAAS,4BAA6B,CAAC,OAAQ,sCAAuC,CAAC,UAAW,6BAA8B,CAAC,MAAO,MAAO,OAAQ,qBAAsB,CAAC,OAAQ,0BAA2B,CAAC,QAAS,0BAA2B,CAAC,OAAQ,mBAAoB,CAAC,MAAO,yBAA0B,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,uBAAwB,CAAC,MAAO,QAAS,0BAA2B,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,mBAAoB,CAAC,SAAU,yBAA0B,CAAC,OAAQ,mCAAoC,CAAC,OAAQ,4BAA6B,CAAC,aAAc,4BAA6B,CAAC,aAAc,4BAA6B,CAAC,aAAc,gBAAiB,CAAC,OAAQ,cAAe,CAAC,QAAS,eAAgB,CAAC,MAAO,OAAQ,QAAS,cAAe,CAAC,OAAQ,eAAgB,CAAC,QAAS,cAAe,CAAC,QAAS,mBAAoB,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,iBAAkB,CAAC,OAAQ,iBAAkB,CAAC,OAAQ,uBAAwB,CAAC,MAAO,MAAO,8BAA+B,CAAC,OAAQ,oBAAqB,CAAC,OAAQ,cAAe,CAAC,QAAS,iBAAkB,CAAC,OAAQ,iBAAkB,CAAC,OAAQ,kBAAmB,CAAC,QAAS,iBAAkB,CAAC,OAAQ,kBAAmB,CAAC,QAAS,iBAAkB,CAAC,OAAQ,iBAAkB,CAAC,OAAQ,OAAQ,gBAAiB,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,mCAAoC,CAAC,OAAQ,yBAA0B,CAAC,MAAO,OAAQ,MAAO,QAAS,iBAAkB,CAAC,OAAQ,OAAQ,yBAA0B,CAAC,QAAS,gBAAiB,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,mBAAoB,CAAC,OAAQ,oBAAqB,CAAC,OAAQ,qBAAsB,CAAC,OAAQ,oBAAqB,CAAC,OAAQ,oBAAqB,CAAC,OAAQ,wBAAyB,CAAC,OAAQ,iCAAkC,CAAC,OAAQ,qBAAsB,CAAC,QAAS,iBAAkB,CAAC,OAAQ,uBAAwB,CAAC,OAAQ,cAAe,CAAC,OAAQ,qBAAsB,CAAC,OAAQ,cAAe,CAAC,OAAQ,mBAAoB,CAAC,KAAM,MAAO,MAAO,MAAO,OAAQ,eAAgB,CAAC,QAAS,cAAe,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,iBAAkB,CAAC,QAAS,cAAe,CAAC,QAAS,eAAgB,CAAC,MAAO,OAAQ,0BAA2B,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,2BAA4B,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,cAAe,CAAC,OAAQ,cAAe,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,wBAAyB,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,oBAAqB,CAAC,QAAS,sCAAuC,CAAC,OAAQ,oCAAqC,CAAC,OAAQ,uBAAwB,CAAC,MAAO,QAAS,oBAAqB,CAAC,OAAQ,iBAAkB,CAAC,QAAS,qBAAsB,CAAC,QAAS,sCAAuC,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,qBAAsB,CAAC,OAAQ,gBAAiB,CAAC,QAAS,sBAAuB,CAAC,SAAU,sBAAuB,CAAC,SAAU,sBAAuB,CAAC,SAAU,wBAAyB,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,eAAgB,CAAC,OAAQ,wBAAyB,CAAC,OAAQ,oBAAqB,CAAC,MAAO,qBAAsB,CAAC,QAAS,qBAAsB,CAAC,QAAS,mCAAoC,CAAC,OAAQ,mBAAoB,CAAC,OAAQ,yBAA0B,CAAC,QAAS,aAAc,CAAC,IAAK,OAAQ,WAAY,CAAC,IAAK,KAAM,MAAO,MAAO,IAAK,KAAM,OAAQ,mBAAoB,CAAC,OAAQ,iBAAkB,CAAC,IAAK,MAAO,MAAO,OAAQ,6BAA8B,CAAC,OAAQ,qBAAsB,CAAC,QAAS,aAAc,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,aAAc,CAAC,OAAQ,cAAe,CAAC,QAAS,aAAc,CAAC,QAAS,gBAAiB,CAAC,IAAK,OAAQ,oBAAqB,CAAC,OAAQ,cAAe,CAAC,QAAS,cAAe,CAAC,QAAS,gBAAiB,CAAC,OAAQ,aAAc,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,kBAAmB,CAAC,MAAO,mBAAoB,CAAC,OAAQ,eAAgB,CAAC,OAAQ,oBAAqB,CAAC,MAAO,QAAS,wBAAyB,CAAC,MAAO,QAAS,oBAAqB,CAAC,MAAO,QAAS,oBAAqB,CAAC,MAAO,QAAS,uBAAwB,CAAC,MAAO,QAAS,qBAAsB,CAAC,OAAQ,gBAAiB,CAAC,OAAQ,oBAAqB,CAAC,MAAO,OAAQ,mCAAoC,CAAC,OAAQ,qBAAsB,CAAC,MAAO,QAAS,iBAAkB,CAAC,OAAQ,cAAe,CAAC,OAAQ,cAAe,CAAC,OAAQ,cAAe,CAAC,OAAQ,cAAe,CAAC,OAAQ,mBAAoB,CAAC,MAAO,OAAQ,OAAQ,cAAe,CAAC,OAAQ,iBAAkB,CAAC,MAAO,OAAQ,iBAAkB,CAAC,OAAQ,gBAAiB,CAAC,MAAO,iBAAkB,CAAC,OAAQ,iBAAkB,CAAC,OAAQ,iBAAkB,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,oBAAqB,CAAC,SAAU,cAAe,CAAC,OAAQ,0BAA2B,CAAC,QACx91B/7D,OAAO+sC,OAAOgvB,GACd,QAAeA,ECFTA,EAAQ,CAAE,2BAA4B,CAAC,MAAO,2BAA4B,CAAC,gBAAiB,yBAA0B,CAAC,MAAO,mBAAoB,CAAC,QAAS,yBAA0B,CAAC,cAAe,uBAAwB,CAAC,QAAS,0BAA2B,CAAC,WAAY,8BAA+B,CAAC,eAAgB,0BAA2B,CAAC,WAAY,2BAA4B,CAAC,OAAQ,4BAA6B,CAAC,QAAS,4BAA6B,CAAC,QAAS,mCAAoC,CAAC,OAAQ,oCAAqC,CAAC,QAAS,mBAAoB,CAAC,QAAS,2BAA4B,CAAC,OAAQ,wBAAyB,CAAC,SAAU,uBAAwB,CAAC,QAAS,8BAA+B,CAAC,SAAU,6BAA8B,CAAC,SAAU,0BAA2B,CAAC,SAAU,0BAA2B,CAAC,SAAU,yBAA0B,CAAC,SAAU,sBAAuB,CAAC,OAAQ,uBAAwB,CAAC,MAAO,kBAAmB,CAAC,OAAQ,uBAAwB,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,2BAA4B,CAAC,YAAa,0BAA2B,CAAC,OAAQ,uBAAwB,CAAC,QAAS,uBAAwB,CAAC,SAAU,yBAA0B,CAAC,QAAS,uBAAwB,CAAC,QAAS,4BAA6B,CAAC,aAAc,uBAAwB,CAAC,QAAS,kBAAmB,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,yBAA0B,CAAC,OAAQ,uBAAwB,CAAC,WAAY,sBAAuB,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,mBAAoB,CAAC,MAAO,oBAAqB,CAAC,SAAU,0BAA2B,CAAC,OAAQ,wBAAyB,CAAC,MAAO,SAAU,oBAAqB,CAAC,SAAU,sBAAuB,CAAC,OAAQ,2BAA4B,CAAC,MAAO,MAAO,OAAQ,qCAAsC,CAAC,OAAQ,sBAAuB,CAAC,SAAU,yBAA0B,CAAC,OAAQ,mBAAoB,CAAC,OAAQ,OAAQ,oBAAqB,CAAC,SAAU,0BAA2B,CAAC,UAAW,sBAAuB,CAAC,UAAW,sBAAuB,CAAC,OAAQ,uBAAwB,CAAC,WAAY,2BAA4B,CAAC,OAAQ,6BAA8B,CAAC,OAAQ,uBAAwB,CAAC,QAAS,4BAA6B,CAAC,eAAgB,mBAAoB,CAAC,OAAQ,0BAA2B,CAAC,QAAS,0BAA2B,CAAC,KAAM,KAAM,MAAO,yBAA0B,CAAC,UAAW,mBAAoB,CAAC,QAAS,uCAAwC,CAAC,OAAQ,qCAAsC,CAAC,SAAU,2BAA4B,CAAC,YAAa,4BAA6B,CAAC,SAAU,uBAAwB,CAAC,QAAS,0BAA2B,CAAC,QAAS,0BAA2B,CAAC,QAAS,uBAAwB,CAAC,QAAS,mBAAoB,CAAC,MAAO,QAAS,kBAAmB,CAAC,OAAQ,QAAS,OAAQ,OAAQ,mBAAoB,CAAC,QAAS,yBAA0B,CAAC,cAAe,qBAAsB,CAAC,MAAO,OAAQ,kBAAmB,CAAC,OAAQ,sBAAuB,CAAC,MAAO,wBAAyB,CAAC,MAAO,mBAAoB,CAAC,OAAQ,2BAA4B,CAAC,MAAO,MAAO,MAAO,MAAO,KAAM,OAAQ,QAAS,MAAO,MAAO,OAAQ,MAAO,SAAU,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,UAAW,kBAAmB,CAAC,OAAQ,gCAAiC,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,wBAAyB,CAAC,SAAU,sBAAuB,CAAC,SAAU,UAAW,SAAU,UAAW,mBAAoB,CAAC,QAAS,8BAA+B,CAAC,QAAS,kCAAmC,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,uBAAwB,CAAC,OAAQ,4BAA6B,CAAC,MAAO,QAAS,yBAA0B,CAAC,OAAQ,qBAAsB,CAAC,OAAQ,yBAA0B,CAAC,MAAO,OAAQ,8BAA+B,CAAC,OAAQ,oBAAqB,CAAC,MAAO,6BAA8B,CAAC,MAAO,wBAAyB,CAAC,OAAQ,uBAAwB,CAAC,OAAQ,2BAA4B,CAAC,WAAY,sBAAuB,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,yBAA0B,CAAC,KAAM,MAAO,MAAO,6BAA8B,CAAC,SAAU,uBAAwB,CAAC,WAAY,wBAAyB,CAAC,QAAS,sBAAuB,CAAC,MAAO,OAAQ,0BAA2B,CAAC,OAAQ,sCAAuC,CAAC,OAAQ,iCAAkC,CAAC,MAAO,sCAAuC,CAAC,OAAQ,+BAAgC,CAAC,MAAO,4BAA6B,CAAC,QAAS,+BAAgC,CAAC,OAAQ,4BAA6B,CAAC,QAAS,gCAAiC,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,uBAAwB,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,uBAAwB,CAAC,QAAS,8BAA+B,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,8BAA+B,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,wBAAyB,CAAC,UAAW,yBAA0B,CAAC,WAAY,qCAAsC,CAAC,UAAW,0CAA2C,CAAC,UAAW,sBAAuB,CAAC,OAAQ,oBAAqB,CAAC,MAAO,SAAU,uBAAwB,CAAC,MAAO,QAAS,2BAA4B,CAAC,MAAO,iCAAkC,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,mBAAoB,CAAC,QAAS,uBAAwB,CAAC,SAAU,sBAAuB,CAAC,OAAQ,uBAAwB,CAAC,QAAS,uBAAwB,CAAC,QAAS,uBAAwB,CAAC,WAAY,sBAAuB,CAAC,MAAO,aAAc,yBAA0B,CAAC,OAAQ,+BAAgC,CAAC,OAAQ,mBAAoB,CAAC,QAAS,mBAAoB,CAAC,QAAS,uBAAwB,CAAC,QAAS,qBAAsB,CAAC,OAAQ,+BAAgC,CAAC,UAAW,iCAAkC,CAAC,MAAO,2BAA4B,CAAC,QAAS,mBAAoB,CAAC,QAAS,8BAA+B,CAAC,OAAQ,qBAAsB,CAAC,OAAQ,qBAAsB,CAAC,OAAQ,uBAAwB,CAAC,QAAS,2BAA4B,CAAC,YAAa,uBAAwB,CAAC,QAAS,2BAA4B,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,4BAA6B,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,0BAA2B,CAAC,OAAQ,uBAAwB,CAAC,QAAS,mBAAoB,CAAC,QAAS,wBAAyB,CAAC,QAAS,OAAQ,wBAAyB,CAAC,OAAQ,kBAAmB,CAAC,MAAO,MAAO,MAAO,OAAQ,sBAAuB,CAAC,OAAQ,sBAAuB,CAAC,OAAQ,wBAAyB,CAAC,OAAQ,uBAAwB,CAAC,OAAQ,QAAS,uBAAwB,CAAC,QAAS,qBAAsB,CAAC,OAAQ,QAAS,OAAQ,OAAQ,mBAAoB,CAAC,QAAS,sBAAuB,CAAC,OAAQ,kBAAmB,CAAC,OAAQ,aAAc,CAAC,SAAU,YAAa,CAAC,OAAQ,OAAQ,cAAe,CAAC,OAAQ,YAAa,CAAC,OAAQ,cAAe,CAAC,KAAM,OAAQ,aAAc,CAAC,MAAO,OAAQ,MAAO,OAAQ,mBAAoB,CAAC,QAAS,YAAa,CAAC,QAAS,YAAa,CAAC,MAAO,QAAS,aAAc,CAAC,OAAQ,MAAO,OAAQ,MAAO,MAAO,OAAQ,YAAa,CAAC,MAAO,MAAO,MAAO,QAAS,YAAa,CAAC,OAAQ,aAAc,CAAC,OAAQ,YAAa,CAAC,OAAQ,aAAc,CAAC,QAAS,aAAc,CAAC,QAAS,WAAY,CAAC,MAAO,kBAAmB,CAAC,OAAQ,WAAY,CAAC,OAAQ,WAAY,CAAC,OAAQ,YAAa,CAAC,QAAS,aAAc,CAAC,SAAU,aAAc,CAAC,OAAQ,aAAc,CAAC,QAAS,aAAc,CAAC,QAAS,aAAc,CAAC,QAAS,aAAc,CAAC,QAAS,YAAa,CAAC,MAAO,OAAQ,YAAa,CAAC,OAAQ,kBAAmB,CAAC,QAAS,YAAa,CAAC,OAAQ,YAAa,CAAC,OAAQ,aAAc,CAAC,QAAS,cAAe,CAAC,MAAO,YAAa,CAAC,OAAQ,aAAc,CAAC,QAAS,sBAAuB,CAAC,SAAU,aAAc,CAAC,QAAS,sBAAuB,CAAC,SAAU,cAAe,CAAC,QAAS,aAAc,CAAC,QAAS,YAAa,CAAC,OAAQ,YAAa,CAAC,OAAQ,YAAa,CAAC,MAAO,QAAS,aAAc,CAAC,OAAQ,MAAO,OAAQ,YAAa,CAAC,OAAQ,aAAc,CAAC,OAAQ,YAAa,CAAC,MAAO,QAAS,YAAa,CAAC,MAAO,OAAQ,YAAa,CAAC,OAAQ,aAAc,CAAC,QAAS,aAAc,CAAC,QAAS,YAAa,CAAC,OAAQ,aAAc,CAAC,QAAS,aAAc,CAAC,QAAS,aAAc,CAAC,QAAS,YAAa,CAAC,OAAQ,aAAc,CAAC,QAAS,YAAa,CAAC,OAAQ,YAAa,CAAC,OAAQ,gBAAiB,CAAC,MAAO,QAAS,YAAa,CAAC,OAAQ,aAAc,CAAC,MAAO,QAAS,gBAAiB,CAAC,OAAQ,aAAc,CAAC,QAAS,YAAa,CAAC,OAAQ,mCAAoC,CAAC,4BAA6B,iBAAkB,CAAC,SAAU,iCAAkC,CAAC,SAAU,0CAA2C,CAAC,SAAU,yBAA0B,CAAC,SAAU,iBAAkB,CAAC,MAAO,QAAS,YAAa,CAAC,OAAQ,kBAAmB,CAAC,QAAS,oBAAqB,CAAC,OAAQ,aAAc,CAAC,MAAO,QAAS,WAAY,CAAC,MAAO,aAAc,CAAC,MAAO,OAAQ,QAAS,YAAa,CAAC,OAAQ,YAAa,CAAC,OAAQ,YAAa,CAAC,OAAQ,iBAAkB,CAAC,QAAS,iBAAkB,CAAC,QAAS,qBAAsB,CAAC,SAAU,YAAa,CAAC,OAAQ,YAAa,CAAC,OAAQ,aAAc,CAAC,MAAO,QAAS,mBAAoB,CAAC,QAAS,SAAU,wBAAyB,CAAC,QAAS,iBAAkB,CAAC,QAAS,SAAU,gBAAiB,CAAC,MAAO,QAAS,iBAAkB,CAAC,QAAS,sBAAuB,CAAC,WAAY,YAAa,gBAAiB,CAAC,MAAO,OAAQ,oBAAqB,CAAC,SAAU,aAAc,WAAY,CAAC,OAAQ,WAAY,CAAC,OAAQ,YAAa,CAAC,OAAQ,MAAO,SAAU,YAAa,CAAC,QAAS,kBAAmB,CAAC,KAAM,OAAQ,WAAY,CAAC,OAAQ,YAAa,CAAC,QAAS,gBAAiB,CAAC,KAAM,YAAa,cAAe,CAAC,OAAQ,WAAY,CAAC,OAAQ,UAAW,CAAC,MAAO,aAAc,CAAC,MAAO,OAAQ,OAAQ,MAAO,OAAQ,MAAO,KAAM,OAAQ,gBAAiB,CAAC,OAAQ,WAAY,CAAC,QAAS,YAAa,CAAC,OAAQ,OAAQ,YAAa,CAAC,QAAS,YAAa,CAAC,OAAQ,OAAQ,YAAa,CAAC,QAAS,cAAe,CAAC,SAAU,QAAS,4BAA6B,CAAC,OAAQ,aAAc,CAAC,IAAK,KAAM,OAAQ,MAAO,KAAM,MAAO,cAAe,CAAC,OAAQ,gBAAiB,CAAC,MAAO,OAAQ,QAAS,aAAc,CAAC,SAAU,WAAY,CAAC,OAAQ,YAAa,CAAC,QAAS,WAAY,CAAC,QAAS,YAAa,CAAC,OAAQ,OAAQ,aAAc,CAAC,MAAO,QAAS,cAAe,CAAC,OAAQ,aAAc,CAAC,QAAS,aAAc,CAAC,QAAS,aAAc,CAAC,QAAS,oBAAqB,CAAC,OAAQ,aAAc,CAAC,QAAS,YAAa,CAAC,OAAQ,SAAU,YAAa,CAAC,MAAO,QAAS,aAAc,CAAC,MAAO,YAAa,CAAC,MAAO,OAAQ,QAAS,aAAc,CAAC,OAAQ,MAAO,MAAO,MAAO,OAAQ,YAAa,CAAC,OAAQ,kBAAmB,CAAC,KAAM,OAAQ,aAAc,CAAC,SACxzV/7D,OAAO+sC,OAAOgvB,GACd,QAAeA,ECFf,IAKIC,EAAuBC,EAAuBC,EAL9CC,EAAkE,SAAUC,GAAU31C,EAAO41C,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAV91C,EAAuB21C,KAAa31C,IAAU61C,GAAK71C,EAAM+1C,IAAIJ,IAAW,MAAM,IAAIG,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKL,IAAYE,EAAIA,EAAE3iE,MAAQ8sB,EAAMnJ,IAAI8+C,GACvF,EA8EDJ,EAAwB,IAAIU,QAAWT,EAAwB,IAAIS,QAAWR,EAAyB,IAAIQ,QAC3G,MC/EAC,EAAe,IDEf,MAAMC,EACFxjE,eAAeyjE,GACXb,EAAsBc,IAAIrjE,KAAM,IAAIsjE,KACpCd,EAAsBa,IAAIrjE,KAAM,IAAIsjE,KACpCb,EAAuBY,IAAIrjE,KAAM,IAAIsjE,KACrC,UAAWC,KAAOH,EACdpjE,KAAKwjE,OAAOD,EAEnB,CACDC,OAAOC,EAASC,GAAQ,GACpB,QAAU1xD,EAAMa,KAAetM,OAAOgP,QAAQkuD,GAAU,CACpDzxD,EAAOA,EAAK+K,cACZlK,EAAaA,EAAWpO,IAAKk/D,IAAQA,GAAI5mD,eACpC2lD,EAAuB1iE,KAAMyiE,EAAwB,KAAKM,IAAI/wD,IAC/D0wD,EAAuB1iE,KAAMyiE,EAAwB,KAAKY,IAAIrxD,EAAM,IAAI4xD,KAE5E,MAAMC,EAAgBnB,EAAuB1iE,KAAMyiE,EAAwB,KAAK5+C,IAAI7R,GACpF,IAAI6xC,IAAQ,EACZ,QAASigB,MAAajxD,EAAY,CAC9B,MAAMkxD,GAAUD,GAAUjtB,WAAW,KAOrC,GANAitB,GAAYC,GAAUD,GAAUv4C,MAAM,GAAKu4C,GAC3CD,GAAep9D,IAAIq9D,IACfjgB,IACA6e,EAAuB1iE,KAAMwiE,EAAuB,KAAKa,IAAIrxD,EAAM8xD,IAEvEjgB,IAAQ,EACJkgB,GACA,SACJ,MAAMC,GAActB,EAAuB1iE,KAAMuiE,EAAuB,KAAK1+C,IAAIigD,IACjF,GAAIE,IAAeA,IAAehyD,IAAS0xD,EACvC,MAAM,IAAIO,MAAO,IAAGjyD,QAAW8xD,uBAA8BE,SAAkBF,yDAEnFpB,EAAuB1iE,KAAMuiE,EAAuB,KAAKc,IAAIS,GAAW9xD,EAC3E,CACJ,CACD,OAAOhS,IACV,CACDkkE,QAAQhrB,GAAM,MACV,GAAoB,iBAATA,EACP,OAAO,KACX,MAAMt0C,EAAOs0C,EAAKuJ,QAAQ,WAAY,IAAI1lC,cACpC4mD,EAAM/+D,EAAK69C,QAAQ,QAAS,IAAI1lC,cAChConD,EAAUv/D,EAAKd,OAASo1C,EAAKp1C,OAEnC,OADe6/D,EAAI7/D,OAASc,EAAKd,OAAS,IAC3BqgE,IAEf,UAAOzB,EAAuB1iE,KAAMuiE,EAAuB,KAAK1+C,IAAI8/C,UAApE,QADW,IAEd,CACDS,aAAapyD,GAAM,UACf,MAAoB,iBAATA,EACA,KAEX,WADAA,EAAI,UAAGA,SAAH,iBAAGqyD,EAAM9hB,aAAT,aAAG+hB,SAAc,KAAK,KACT5B,EAAuB1iE,KAAMwiE,EAAuB,KAAK3+C,IAAI7R,EAAK0I,OAAOqC,sBAA1F,QAA6G,IAChH,CACDwnD,iBAAiBvyD,GAAM,MACnB,MAAoB,iBAATA,EACA,KACX,UAAO0wD,EAAuB1iE,KAAMyiE,EAAwB,KAAK5+C,IAAI7R,EAAK+K,sBAA1E,QAA4F,IAC/F,CACDynD,UACIxkE,KAAKwjE,OAAS,KACV,MAAM,IAAIS,MAAM,+HAAV,EAEV19D,OAAO+sC,OAAOtzC,MACd,UAAW6S,KAAc6vD,EAAuB1iE,KAAMyiE,EAAwB,KAAKx8C,SAC/E1f,OAAO+sC,OAAOzgC,GAElB,OAAO7S,IACV,CACDykE,gBACI,MAAO,CACHnC,MAAOI,EAAuB1iE,KAAMuiE,EAAuB,KAC3D1vD,WAAY6vD,EAAuB1iE,KAAMwiE,EAAuB,KAEvE,GC5EmBkC,EAAeC,GAAYH,oCCI5C,MAAMI,EACX59D,UAAU69D,GACR,MAAM7yD,EAAOkxD,UAAa2B,GAC1B,GAAI7yD,EAAM,CACR,GAAIA,EAAK6kC,WAAW,SAClB,OAAOiuB,UAET,GAAI9yD,EAAK6kC,WAAW,SAClB,OAAOiuB,UAGX,OAAOA,SACT,wCAZWF,EAAgB,+CAAhBA,EAAgB1G,uECFtB,MAAM6G,EACXplE,YAAoBqlE,mBAA0B,CAE9Ch+D,UAAU9G,GACR,OAAOF,KAAKglE,UAAUC,uBAAuBtrB,IAAIurB,gBAAgBhlE,GACnE,wCALW6kE,GAAmB1L,iEAAnB0L,EAAmB7G,uECAzB,MAAMiH,EACXn+D,UAAarC,EAAYwD,GACvB,SAAOikD,QAAKjkD,EAAM,CAAExD,MACtB,wCAHWwgE,EAAY,2CAAZA,EAAYjH,uECAlB,MAAMkH,EACXp+D,UAAa9G,GACX,SAAOksD,SAAMlsD,EACf,wCAHWklE,EAAS,wCAATA,EAASlH,sECAf,MAAMmH,EACXr+D,UAAUwmD,EAAY,GAAIC,EAAW,IAEnC,UADgBrB,YAAMA,QAAKoB,GAAa,MAAQ,QAAOpB,YAAMA,QAAKqB,GAAY,MAAQ,KACrE,GACnB,wCAJW4X,EAAkB,iDAAlBA,EAAkBnH,uECExB,MAAMoH,EACXt+D,UAAUu+D,GACR,SAAOC,KAAuBD,EAAaE,uBAAwBF,EAAa1K,SAClF,wCAHWyK,EAA0B,yDAA1BA,EAA0BpH,4DCFhC,MAAMwH,EACX1+D,UAAUpE,EAAkBs3D,GAC1B,OAAKt3D,GAAUs3D,EAIRt3D,EAAMihB,IAAIq2C,GAHR,IAIX,wCAPWwL,EAAgB,+CAAhBA,EAAgBxH,4DCDtB,MAAMyH,EACX3+D,UAAU9G,EAAe0lE,GACvB,OAAK1lE,GAAU0lE,EAGR,IAAK1lE,EAAQ0lE,EAAY,KAAK5G,QAAQ,OAFpC,KAGX,wCANW2G,EAAsB,qDAAtBA,EAAsBzH,uECI5B,MAAM2H,EACX7+D,UAAUu+D,EAAqCnyD,GAC7C,SAAOoyD,KAAuBpyD,EAAMmyD,EAAa1K,SACnD,wCAHWgL,EAAmB,kDAAnBA,EAAmB3H,4DCJzB,MAAM4H,EACX9+D,UAAU9G,EAAe8gE,GACvB,MAAQH,OAAMC,SAAUE,EACxB,OAAQH,GAASC,IAAaD,EAAO,IAAO,GAAG3gE,KAAtB,EAC3B,wCAJW4lE,EAAa,4CAAbA,EAAa5H,4DCAnB,MAAM6H,EAEX/+D,UAAU9G,GACR,OAAO6lE,EAAa/+D,UAAU9G,EAChC,CAEA+V,iBAAiB/V,GACf,MAAqB,iBAAVA,EACFA,EAIPA,EAAM,GAAGkgD,cACTlgD,EACGuiD,QAAQ,kBAAmB,SAC3B1lC,cACAwO,MAAM,EAEb,wCAlBWw6C,EAAY,2CAAZA,EAAY7H,4DCAlB,MAAM8H,EACXh/D,UAAU9G,GACR,SAAUA,EAAQ,EACpB,wCAHW8lE,EAAS,wCAATA,EAAS9H,uECGf,MAAM+H,EACXj/D,UACEk/D,EACAC,EACAC,GAEA,OAAIF,EAAeC,EACVC,EAGLF,IAAiBC,EACZE,kBAGFA,gBACT,wCAfWJ,EAA6B,4DAA7BA,EAA6B/H,sECAnC,MAAMoI,EACXt/D,UACEoM,EACAmzD,EACAC,GAEA,OAAKpzD,EAIAmzD,EAIDnzD,EAAOmzD,EACFF,kBAGLjzD,IAASmzD,EACJF,kBAGFA,iBAXEG,EAJAH,gBAgBX,wCAvBWC,EAA4B,2DAA5BA,EAA4BpI,sECDlC,MAAMuI,EACXz/D,UAAU0/D,GACR,OAAQA,QACDC,qBACH,MAAO,qBAEJA,oBACH,MAAO,iBAEJA,mBACH,MAAO,kBAEJA,yBACH,MAAO,uBAEJA,mBACH,MAAO,kBAEJA,uBACH,MAAO,eAEJA,0BACH,MAAO,gBAEJA,mBACH,MAAO,uBAEJA,aACH,MAAO,gBAEJA,gBACH,MAAO,oBAEJA,eACH,MAAO,oBAEJA,aACH,MAAO,4BAEJA,aACH,MAAO,kBAEJA,iBACH,MAAO,qBAEJA,kBACH,MAAO,sBAEJA,gBACH,MAAO,qCAEJA,aACH,MAAO,mBAEJA,iBACH,MAAO,sBAEJA,iBACH,MAAO,qBAEJA,YACH,MAAO,gBAEJA,eACH,MAAO,mBAEJA,aACH,MAAO,qBAEJA,qBACH,MAAO,0BAEJA,oBACH,MAAO,4BAGP,MAAO,GAGb,wCA/EWF,EAAa,4CAAbA,EAAavI,uECDnB,MAAM0I,EACX5/D,UAAU9G,GACR,SAAIksD,SAAMlsD,GACD,iBAEF,GAAGA,KAAmB,IAAVA,EAAc,MAAQ,QAC3C,wCANW0mE,EAAgB,+CAAhBA,EAAgB1I,uECAtB,MAAM2I,EACX7/D,UAAU9G,EAAe4mE,EAAkBj3D,GACzC,SAAIu8C,SAAMlsD,GACD,KAEF,GAAG4mE,KAAY5mE,IAAQ2P,GAAQ,IACxC,wCANWg3D,EAAY,2CAAZA,EAAY3I,kFCElB,MAAM6I,EACXpnE,YAAoB0jD,yBAAmC,CAEvDr8C,UAAUggE,GACR,MAAMC,EAAK1G,EAAOvgE,KAAKqjD,gBAAgB+B,kBAAkB3+C,IAAIugE,EAAW,QAAQtH,OAAO,SAC1E76C,KAAKq6C,IAAI8H,GACtB,MAAO,gBAAgBC,GAiBzB,wCAvBWF,GAA2BvK,wEAA3BuK,EAA2B7I,4DCHjC,MAAMgJ,EACXlgE,UAAU1C,EAAe0iE,GACvB,OAAKA,EAGE,GAAG1iE,KAASugB,KAAKq6C,IAAI8H,MAAcA,EAAY,EAAI,OAAS,KAF1D,GAAG1iE,OAGd,wCANW4iE,EAAkB,iDAAlBA,EAAkBhJ,4DCAxB,MAAMiJ,EACXngE,UAAU1C,EAAe8iE,GACvB,OAAKA,EAGE,GAAG9iE,KAASugB,KAAKq6C,IAAIkI,MAAiBA,EAAe,EAAI,GAAK,SAF5D,GAAG9iE,MAGd,wCANW6iE,EAAqB,oDAArBA,EAAqBjJ,4DCE3B,MAAMmJ,EACXrgE,UAAUggE,EAAuB1W,GAC/B,IAAKA,EAAM,OAAO,EAElB,MAAMgX,EAAchX,EAAO,GACrBiX,EAAeD,EAAc,GACnC,OAAOE,aAAaR,EAAUnG,MAAQ,GAAKyG,GAAeN,EAAUlG,OAAS,GAAKyG,GAAcvI,QAAQ,GAC1G,wCAPWqI,EAAe,8CAAfA,EAAenJ,uECCrB,MAAMuJ,EACXzgE,UAAU0gE,EAA0BC,EAAgBC,GAAc,GAChE,MAAIxb,YAASub,IAAWD,EACtB,GAAKE,EAWH,OAAQF,OACD,MACH,MAAO,QAEJ,OACH,MAAO,WAGP,OAAOA,OAlBX,OAAQA,OACD,UACA,OACH,OAAOC,EAAS,GAAKA,GAAU,EAAID,EAAc,GAAGA,aAGpD,OAAOA,EAiBf,MAAO,EACT,wCA5BWD,EAAe,8CAAfA,EAAevJ,4DCDrB,MAAM2J,EACX7gE,UAAU9G,EAAegO,EAAwB5B,GAC/C,OAAKpM,GAGEA,EAAMuiD,QAAQ,gBAAiB,CAACmE,EAAGkhB,KACxC,MAAM/7D,EAAOmC,GAAO9I,KAAK2iE,GAAKA,EAAE9tB,QAAU6tB,GAC1C,OAAO/7D,EACH,6BAA6BO,IAAWP,EAAKpH,GAAK,KAAO,cAAcoH,EAAKkuC,WAC1EluC,EAAKsE,qBAEPu2C,GAER,wCAbWihB,EAAkB,iDAAlBA,EAAkB3J,sECDxB,MAAM8J,EACXhhE,UAAU9G,EAAY+nE,GAAW,EAAOC,GAUtC,MAAMP,EATQphE,OAAOysC,KAAK9yC,GACvBiE,OACCqR,GACiB,OAAftV,EAAMsV,SACS,IAAftV,EAAMsV,OACL,EAAC42C,WAAQlsD,EAAMsV,KAAStV,EAAMsV,GAAK8K,KAAKrb,GAAKA,MACvB,kBAAf/E,EAAMsV,IAAsBtV,EAAMsV,KAE7CrR,OAAOqR,IAAQ0yD,GAAepkE,SAAWokE,EAAc5nD,KAAK6J,GAAKA,IAAM3U,IACrD1R,OACrB,OAAQmkE,GAAaN,EAAgBA,EAAP,IAChC,wCAbWK,EAAuB,sDAAvBA,EAAuB9J,uECC7B,MAAMiK,EACXnhE,UAAU9G,EAAeu+D,EAAY,EAAG2J,EAAS,IAC/C,OAAI9I,MAAMp/D,IAAoB,OAAVA,EACXq/D,IAEFr/D,EAAM8+D,QAAQP,GAAa2J,CACpC,wCANWD,EAAU,+CAAVA,EAAUjK,uECAhB,MAAMmK,EACXrhE,UAAU9G,GACR,OAAKo/D,MAAMp/D,GAINA,EAGEsnE,cAAWc,KAA0BpoE,IAFnC,KAJAA,CAOX,wCAVWmoE,EAAc,6CAAdA,EAAcnK,uECCpB,MAAMqK,EACXvhE,UAAU0zD,GACR,SAAO8N,KAA8B9N,EACvC,wCAHW6N,EAAmB,kDAAnBA,EAAmBrK,6HCFzB,MAAMuK,EACXzhE,UAAU9G,IACR,SAAOshC,WAAQthC,GACjB,0CAHWuoE,EAA6B,4DAA7BA,EAA6BvK,UCDnC,MAAMwK,EACX1hE,UAAU2hE,GAA+BC,IACvC,OAAQD,KAAyBC,EACnC,0CAHWF,EAAiC,gEAAjCA,EAAiCxK,iFCAvC,MAAM2K,EACX7hE,UAAUk5C,IACR,OAAOA,IAAYz7C,IAAIkP,MAEnBzT,MAAOyT,GACPrP,MAAOqP,GAAS3Q,OAGtB,0CARW6lE,EAA0B,yDAA1BA,EAA0B3K,yBCDhC,MAAM4K,EACXnpE,YAAoBqlE,qBAA0B,CAE9Ch+D,UAAU+hE,IACR,OAAO/oE,KAAKglE,UAAUgE,wBAAwBD,GAChD,0CALWD,GAAYtpE,0DAAZspE,EAAY5K,UCIlB,MAAM+K,EACXjiE,UAAU9G,GAAegpE,IAEvB,SADa1nC,QAAK0nC,GAAc,CAAEtmB,iBAAkB1iD,KACxCipE,WACd,0CAJWF,EAAyB,wDAAzBA,EAAyB/K,cCJ1BkL,yCAAqB,KAC/BxmB,oCACAwmB,yCACAA,2BACAA,6BACAA,qCCAF,MAAMC,GAA6B,CACjC,CAACC,eAA6B,EAC9B,CAACA,YAA0B,IAMtB,MAAMC,GACXviE,UAAUwiE,GAAkCC,IAM1C,MAAMC,GDRH,SAASC,GACdC,GACAp0D,GACAtV,IAEA,SAAOshC,UACLooC,GACA,CAAC3/D,GAAQ4/D,MACP5/D,GAAO4/D,GAAgBr0D,KAAQq0D,GAAgB3pE,IACxC+J,IAET,GAEJ,CCVkC0/D,CAC5BF,GACAL,cACAA,qBAE+CI,IACjD,OAAOH,GAA2BK,GACpC,2CATWH,GAAgC,gEAAhCA,GAAgCrL,0BCVtC,MAAM4L,EACX9iE,UAAU+iE,IACR,OAAQA,SACDC,uBACH,MAAO,WAEJA,oBACH,MAAO,YAEJA,cACH,MAAO,gBAEJA,cACH,MAAO,mBAGP,MAAO,GAGb,0CAnBWF,EAAiB,gDAAjBA,EAAiB5L,mFCAvB,MAAM+L,EACXjjE,UAAU45D,IACR,MAAMC,GAAOh8C,KAAKsG,MAAMy1C,GAAW,KAAO,EAE1C,MAAO,CAAEC,QAAMC,MADDF,GAAkB,GAAPC,IAAa,EAExC,0CALWoJ,EAAgB,+CAAhBA,EAAgB/L,6FCCtB,MAAMgM,GACXljE,UAAU9G,GAAeiqE,IACvB,OAAKA,IAAUrmE,WAIR09B,SAAM2oC,GAAShmE,OAAOg+D,IAAYA,GAASvf,mBAAqB1iD,MAASipE,aAAejpE,EACjG,2CAPWgqE,GAA0B,0DAA1BA,GAA0BhM,oKCHhC,MAAMkM,EACXpjE,UAAU9G,GAAe+lB,IACvB,OAAIjL,MAAM44B,QAAQ3tB,IACTA,GAAO/gB,SAAShF,IAElBA,KAAU+lB,EACnB,0CANWmkD,EAAa,4CAAbA,EAAalM,uMCAnB,MAAMmM,GACXrjE,UAAU9G,GAAeoqE,GAAU,GAAI7nB,GAAU,IAC/C,OAAKviD,GAGEA,GAAMuiD,QAAQ6nB,GAAS7nB,IAFrB,EAGX,2CANW4nB,GAAgB,gDAAhBA,GAAgBnM,UCAtB,MAAMqM,GACXvjE,UAAU9G,IACR,OAAKA,GAGE2kB,KAAK2lD,MAAMtqE,IAFT,CAGX,2CANWqqE,GAAc,8CAAdA,GAAcrM,0BCApB,MAAMuM,GACXzjE,UAAU9G,GAAeoqE,IACvB,QAAKpqE,IAGEA,GAAMwa,OAAOqC,cAAc85B,WAAWyzB,GAAQ5vD,OAAOqC,cAC9D,2CANW0tD,GAAc,8CAAdA,GAAcvM,yBCMpB,MAAMwM,GACX1jE,UAAU2jE,GAA4BC,IACpC,OAAKD,IAAS7mE,QAAW8mE,IAKvBD,GAAQxmE,OAAO5B,KACb,MAAIi/B,WAAQopC,MAAgBA,IAAYC,WACtC,OAAO,EAGT,MAAMC,GAAqC,GAE3C,OAAIF,IAAYC,YACdC,GAActmE,KAAK,CACjBmxC,aAAcpzC,GAAKsoE,WACnB3O,YAAa0O,GAAWC,cACzB,EAGIE,MAAcD,GAAa,IAChChnE,QAnBG,CAqBX,2CAxBW4mE,GAAkC,kEAAlCA,GAAkCxM,qFCNxC,MAAM8M,EACXhkE,UAAU9G,GAAem/D,GAAiB,GACxC,OAAIC,MAAMp/D,IACD,KAEFA,IAAO8+D,QAAQK,GACxB,0CANW2L,EAAgB,+CAAhBA,EAAgB9M,+ICsF7B,MAAM+M,GAAQ,CACZC,IACAC,IACA9iB,KACAD,KACAD,KACAijB,IACAC,IACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACA1B,EACAN,EACAiC,KACAC,IACAC,IACAjB,EACAd,GACAgC,KACAC,KACAC,KACAC,IACAC,KACAC,KACAC,KACAC,IACA/D,EACAD,EACAiE,IACAC,IACAC,IACAC,IACAC,KACAC,KACAC,IACAC,KACApE,EACAI,EACAM,GACAmB,GACAH,GACAF,GACA6C,KACAC,IACAC,IACAC,KACAC,IACAC,KACAtD,EACAuD,IACAC,KACAhD,GACAiD,KACAC,IACAC,KACAC,KACAC,KACAC,IACAC,KACAC,KACAC,IACAC,KACAC,KACAC,IACAC,KACAC,KACAC,IACAC,KACAC,KACAC,IACAl7D,KACAq1D,EACA8F,IACAC,IACAC,IACAC,KACAC,KACAC,IACAC,IACAC,IACAC,KASK,MAAMC,gDAAW,2BAAXA,mCAFA,IAAIpE,GAAOh+D,OAAa,mDCnL9B,MAAMqiE,EACXtoE,UAAU9G,EAAeqvE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B9tB,KAAqBmpE,iEC8B1E,MAAMW,2CAAwB,0BAAxBA,gCAlBT5xE,KACA2I,KACAb,KACAmpE,IACAj0B,IACA60B,IACAC,IACAC,IACAC,IACAC,IACAr8C,KACAy7C,KACAv7C,KACA47C,KACAQ,IACAC,uBCTG,MAAMC,8CAAsB,2BAAtBA,kCAZTpyE,KACA2I,KACAitB,KACAE,KACAhuB,KACAmpE,IACAj0B,IACAk0B,IACAC,IACAkB,oCCEG,MAAMC,8CAAoB,2BAApBA,kCAZTtyE,KACA2I,KACAitB,KACAq7C,IACAnpE,KACAk1C,IACAlnB,KACAgmB,KACAy2B,QCbG,MAAMC,2CAAyB,0BAAzBA,gCAHDxyE,KAAc2I,KAAiBitB,QCKpC,MAAM68C,2CAAuB,0BAAvBA,gCAHDzyE,KAAc2I,KAAiBitB,KAAiBK,KAAmBnuB,yDC2BxE,MAAM4qE,8CAAwB,2BAAxBA,kCAhBT1yE,KACA2I,KACAitB,KACAE,KACA0mB,KACAllD,KACAwQ,KACAmpE,IACAj0B,IACA21B,KACAzB,IACAC,IACAyB,IACAr9C,wBCMG,MAAMs9C,8CAAwB,2BAAxBA,kCAlBT7yE,KACA+xE,IACAC,IACAE,IACAjB,IACAa,IACA90B,IACA00B,KACA/oE,KACAmqE,KACAl9C,KACA9tB,KACAqqE,IACAJ,IACAr8C,IACAI,QCgCG,MAAMi9C,8CAAY,2BAAZA,mCAjCA,CAACC,IAAeC,KAAuB3zD,SAEhDtf,KACA48C,IACAw0B,GACAG,GACAK,EACAY,EACAK,GACAvB,GACAE,GACAY,GACAM,GACAJ,GACAG,EACAzB,GACAroE,KACAitB,KACAE,KACAhuB,KACAk1C,IACAl1C,KACAgqE,IACAr1B,KACAw0B,IACA/0B,IACAg3B,KACAC,KACAC,IACAzB,EACAK,MAAgB,gKCpCb,MAAMqB,2CAAsB,0BAAtBA,iCAFA,CAAChE,MAAS/vD,SAXnBg0D,IACAC,IACAC,KACAjM,KACAkM,IACAC,IACArE,KACA3H,KACAiM,KACAC,MAAkB,yECjBf,MAAMC,EAUXnhF,YAAoB0C,0BATZrC,qBAAkB,EAC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","names":["core","CustomColorPickerComponent","custom_control_abstract","constructor","ngControl","cdr","formDirective","super","this","labelCss","value","_labelCss","labelOutsideDefaultCss","valueCss","_valueCss","content","_labelElement","detectChanges","ngOnInit","control","valueChanges","pipe","ngneat_until_destroy","distinctUntilChanged","tap","onChanged","subscribe","statusChanges","status","checkControlStatus","errors","checkStatus","writeValue","setValue","ngOnDestroy","selectors","__decorate","i0","BoardsCreateComponent","router","activatedRoute","dialogRef","formBuilder","boardService","store","snackbarService","enumerationValuePipe","data","BehaviorSubject","boardActionSubject","asObservable","ButtonType","group","selectedPortfolioIds","boardType","Validators","name","progressType","datasource","outputAction","outputBehaviour","boardCellColor","ProgressTypeList","BoardSourceTypeList","BoardTypeList","BoardOutputTypeList","BoardOutputBehaviourList","editMode","form","patchValue","length","controls","select","selectPortfolios","untilDestroyed","filter","portfolios","userPortfolios","label","sort","push","map","item","id","last","remove","x","boardTypeList","flat","e","includes","selected","find","BoardType","BoardProgressType","BoardSourceType","BoardOutputType","BoardOutputBehaviour","undefined","isSettingsOpened","setValidators","updateValueAndValidity","clearValidators","toggleAdvancedSettings","ok","disallowSourceTypeOutputTypeMap","valid","next","close","board","Board","Object","assign","add","RestBoardModel","navigate","AppRoutes","relativeTo","markAllAsTouched","error","transform","MAT_DIALOG_DATA","ctx","boards_create_component_decorate","UntilDestroy","BoardService","service","modalsService","rxjs__WEBPACK_IMPORTED_MODULE_7__","getTurnoverList","boardId","portfolioId","getData","_app_services_turnovers_service__WEBPACK_IMPORTED_MODULE_0__","getList","_list$","closed","rxjs__WEBPACK_IMPORTED_MODULE_8__","getListInternal","list","refresh","rxjs__WEBPACK_IMPORTED_MODULE_9__","rxjs__WEBPACK_IMPORTED_MODULE_10__","updateSavedData","updateFunction","rxjs__WEBPACK_IMPORTED_MODULE_11__","updatedList","route","getListByPortfolio","entity","post","update","index","findIndex","copyOfArray","splice","delete","removeBoard","boardName","_shared_selectors_user_selectors__WEBPACK_IMPORTED_MODULE_3__","rxjs__WEBPACK_IMPORTED_MODULE_12__","permissionLevel","_shared_functions_check_permission_level_function__WEBPACK_IMPORTED_MODULE_2__","_shared_enums_permission_level_enum__WEBPACK_IMPORTED_MODULE_1__","rxjs__WEBPACK_IMPORTED_MODULE_13__","openConfirmationModal","title","confirmColor","afterClosed","result","_ui_components_modals_config_dialog_result_enum__WEBPACK_IMPORTED_MODULE_4__","boardRemoving$","_angular_core__WEBPACK_IMPORTED_MODULE_14__","factory","ContractorsService","restApiService","getUnassignedContractorsList","CompaniesEffects","actions$","userService","adminService","companiesService","contractorsService","ngrx_effects","companies_actions","exhaustMap","action","getCompanyList","companyList","catchError","snackbar_message_enum","of","switchMap","getCompany","companyId","companyModel","mergeMap","addNewCompany","inviteUser","user","contactPersonId","company","addEmployeeToCompany","userIds","setUserToGeneralRole","roleId","userId","updateCompany","deleteCompany","updateEmployeeItem","deleteEmployeeFromCompany","contractors","addAddressToCompany","postCompanyAddressModel","updateAddressInCompany","restAddressModel","CompaniesStoreModule","common","ngrx_store","companies_reducer","DashboardUserHeaderComponent","DashboardsAbstract","UntypedFormControl","PriorityType","showBack","previousRoute","combineLatest","selectUserData","selectDashboardFilterState","userData","assignee","dispatch","setDashboardFilter","selectActiveUsers","users","myTasksLoading$","selectMyTasksLoading","myTasksTurnovers$","selectMyTasksTurnoversCount","myTasksTickets$","selectMyTasksTicketsCount","staleTurnovers$","selectStaleTurnoversCount","lateTurnovers$","selectLateTurnoversCount","goBack","evt","preventDefault","navigateByUrl","_ngrx_store__WEBPACK_IMPORTED_MODULE_1__","_dashboards_reducers_dashboard_filter_reducer__WEBPACK_IMPORTED_MODULE_0__","DelinquencyFields","NOTES","InspectionsBaseComponent","_app_components_abstract_component_abstract__WEBPACK_IMPORTED_MODULE_0__","inspectionService","modalService","_models_rest_inspections_model_interface__WEBPACK_IMPORTED_MODULE_3__","inspection","sortHeaderId","entityDetails","unit","toLocaleLowerCase","isTurboMode","propertyName","inspectionTemplate","inspectionType","areasLabel","assigneeUser","displayName","createdAt","completedAt","dueDate","share","openSendDialog","download","attachments","attachment","url","window","open","unitName","confirmLabel","_ui_components_modals_config_dialog_result_enum__WEBPACK_IMPORTED_MODULE_2__","rxjs_operators__WEBPACK_IMPORTED_MODULE_9__","_","caught","_shared_enums_route_path_enum__WEBPACK_IMPORTED_MODULE_1__","_angular_core__WEBPACK_IMPORTED_MODULE_10__","features","InspectionStepModel","page","stepNumber","propertyState","elements","elm","type","questionsElms","notesElms","questions","qElm","isRequired","notesCount","imagesCount","mainImage","note","flagsCount","InspectionAreaModel","answer","extensions","answerJSON","steps","pages","idx","stepsCount","completedStepsCount","step","isCompleted","rest_inspections_model_interface","isSkipped","InspectionModel","humanize_pipe","propertyId","property","inspectionContents","areas","allSteps","flatMap","area","Boolean","areasCount","completedOrSkippedAreasCount","reduce","acc","curStep","summary","completedRooms","totalRooms","SendInspectionComponent","inputErrorService","inspectionTitle","button_type","to","fesm2020_forms","email_validator","subject","body","isSubmitted","toArray","cur","strErrors","entries","key","errorParams","getValidationMessage","join","dialog","InspectionService","matDialog","survey","_currentSurvey","static","timezone","forEach","TimezoneEntityHelper","fixTimezoneForRestInspectionsModelList","updateCalendarView","inspectionModel","calendarPosition","create","inspectionId","getById","getBeUnitId","unitId","config","minWidth","panelClass","sendRequest","firstValueFrom","_this","sendReport","success","SnackbarErrorMessage","console","request","nextId","_MatBadgeBase","mixinDisabled","BADGE_CONTENT_CLASS","MatBadge","_ngZone","_elementRef","_ariaDescriber","_renderer","_animationMode","_color","_overlap","position","size","_id","_isInitialized","color","_setColor","overlap","val","coerceBooleanProperty","_content","newContent","_updateRenderedContent","description","_description","newDescription","_updateHostAriaDescription","hidden","_hidden","isAbove","indexOf","isAfter","getBadgeElement","_badgeElement","_clearExistingBadges","_createBadgeElement","destroyNode","removeDescription","nativeElement","badgeElement","createElement","activeClass","setAttribute","classList","appendChild","requestAnimationFrame","runOutsideAngular","newContentNormalized","trim","textContent","describe","colorPalette","badges","querySelectorAll","Array","from","ɵfac","i1","ANIMATION_MODULE_TYPE","ɵdir","MatBadgeModule","ɵmod","ɵinj","A11yModule","MatCommonModule","_MatListBase","mixinDisableRipple","_MatListItemMixinBase","MAT_LIST","InjectionToken","MAT_NAV_LIST","MatNavList","arguments","_stateChanges","Subject","ngOnChanges","complete","t","ɵcmp","provide","useExisting","ngContentSelectors","MatList","_getListType","nodeName","toLowerCase","MatListAvatarCssMatStyler","MatListIconCssMatStyler","MatListSubheaderCssMatStyler","MatListItem","_element","_changeDetectorRef","navList","_isInteractiveList","_destroyed","_disabled","_list","element","_getHostElement","hasAttribute","takeUntil","markForCheck","disabled","ngAfterContentInit","setLines","_lines","_isRippleDisabled","disableRipple","dirIndex","MatLine","_t","_c2","encapsulation","_MatSelectionListBase","_MatListOptionBase","MAT_SELECTION_LIST_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","MatSelectionList","multi","MatSelectionListChange","source","options","MatListOption","_changeDetector","selectionList","_selected","_hasFocus","selectedChange","EventEmitter","checkboxPosition","_inputsInitialized","newValue","_value","compareWith","selectedOptions","isSelected","_setSelected","multiple","_reportValueChange","some","wasSelected","Promise","resolve","then","hadFocus","newActiveItem","_removeOptionFromList","focus","toggle","getLabel","_text","_handleClick","_emitChangeEvent","_handleFocus","_setFocusedOption","_handleBlur","_onTouched","deselect","emit","_markForCheck","_c4","_c5","i2","_focusMonitor","_multiple","_contentInitialized","selectionChange","a1","a2","SelectionModel","_tabIndex","_onChange","_markOptionsForCheck","_keyManager","FocusKeyManager","withWrap","withTypeAhead","withHomeAndEnd","skipPredicate","withAllowedModifierKeys","_setOptionsFromValues","tabOut","_allowFocusEscape","changes","startWith","_updateTabIndex","changed","event","added","removed","monitor","origin","toFocus","i","get","_this$options$get","setActiveItem","disableRippleChanges","colorChanges","firstChange","stopMonitoring","_isDestroyed","selectAll","_setAllOptionsSelected","deselectAll","option","updateActiveItem","optionIndex","_getOptionIndex","activeItemIndex","Math","min","activeItem","_keydown","keyCode","manager","previousFocusIndex","hasModifier","hasModifierKey","SPACE","ENTER","isTyping","_toggleFocusedOption","A","shouldSelect","onKeydown","UP_ARROW","DOWN_ARROW","shiftKey","_getSelectedOptionValues","values","setDisabledState","isDisabled","registerOnChange","fn","registerOnTouched","correspondingOption","focusedIndex","_isValidIndex","focusedOption","skipDisabled","isUserInput","changedOptions","setTimeout","i3","MatListModule","MatLineModule","MatRippleModule","MatPseudoCheckboxModule","CommonModule","MatDividerModule","_r8","ctx_r7","ctx_r4","_r10","ctx_r9","_r12","ctx_r11","MatPaginatorIntl","itemsPerPageLabel","nextPageLabel","previousPageLabel","firstPageLabel","lastPageLabel","getRangeLabel","pageSize","startIndex","max","ɵprov","MAT_PAGINATOR_INTL_PROVIDER","deps","Optional","SkipSelf","useFactory","MAT_PAGINATOR_INTL_PROVIDER_FACTORY","parentIntl","MAT_PAGINATOR_DEFAULT_OPTIONS","_MatPaginatorMixinBase","mixinInitialized","_MatPaginatorBase","_intl","defaults","_pageIndex","_length","_pageSizeOptions","_hidePageSize","_showFirstLastButtons","selectConfig","_intlChanges","pageSizeOptions","hidePageSize","showFirstLastButtons","_pageSize","pageIndex","coerceNumberProperty","_updateDisplayedPageSizeOptions","p","_initialized","_markInitialized","unsubscribe","nextPage","hasNextPage","previousPageIndex","_emitPageEvent","previousPage","hasPreviousPage","firstPage","lastPage","getNumberOfPages","maxPageIndex","ceil","_changePageSize","floor","_nextButtonsDisabled","_previousButtonsDisabled","_displayedPageSizeOptions","slice","a","b","inputs","MatPaginator","intl","changeDetectorRef","formFieldAppearance","_formFieldAppearance","decls","i4","i5","i6","i7","styles","MatPaginatorModule","imports","MatButtonModule","MatSelectModule","MatTooltipModule","_r3","ctx_r2","matDrawerAnimations","transformDrawer","trigger","state","style","visibility","transition","animate","MAT_DRAWER_DEFAULT_AUTOSIZE","providedIn","MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY","MAT_DRAWER_CONTAINER","MatDrawerContent","CdkScrollable","_container","elementRef","scrollDispatcher","ngZone","_contentMarginChanges","MatDrawerContainer","MatDrawer","_focusTrapFactory","_platform","_interactivityChecker","_doc","_elementFocusedBeforeDrawerWasOpened","_enableAnimations","_position","_mode","_disableClose","_opened","_animationStarted","_animationEnd","_animationState","openedChange","_openedStream","o","openedStart","fromState","toState","mapTo","_closedStream","closedStart","onPositionChanged","_modeChanged","opened","activeElement","_takeFocus","_isFocusWithinDrawer","_restoreFocus","_openedVia","fromEvent","ESCAPE","disableClose","run","stopPropagation","y","_isAttached","_updatePositionInParent","mode","_updateFocusTrapState","autoFocus","_autoFocus","_forceFocus","isFocusable","tabIndex","callback","removeEventListener","removeAttribute","addEventListener","_focusByCssSelector","selector","elementToFocus","querySelector","_focusTrap","focusInitialElementWhenReady","hasMovedFocus","focusOrigin","focusVia","blur","activeEl","contains","ngAfterViewInit","ngAfterContentChecked","isBrowser","destroy","_anchor","openedVia","_closeViaBackdropClick","_setOpen","isOpen","restoreFocus","take","_getWidth","offsetWidth","enabled","newPosition","parent","parentNode","createComment","insertBefore","DOCUMENT","sidenav_c1","changeDetection","_dir","viewportRuler","defaultAutosize","_drawers","QueryList","backdropClick","_doCheckSubject","_contentMargins","left","right","change","_validateDrawers","updateContentMargins","_autosize","start","_start","end","_end","autosize","hasBackdrop","_backdropOverride","scrollable","_userContent","_allDrawers","drawer","reset","notifyOnChanges","_watchDrawerToggle","_watchDrawerPosition","_watchDrawerMode","_isDrawerOpen","debounceTime","_left","width","_right","ngDoCheck","_isPushed","_setContainerClass","onMicrotaskEmpty","merge","isAdd","className","_onBackdropClicked","_closeModalDrawersViaBackdrop","_canHaveBackdrop","_isShowingBackdrop","sidenav_c2","MatSidenavContent","container","MatSidenavContainer","MatSidenav","_fixedInViewport","_fixedTopGap","_fixedBottomGap","fixedInViewport","fixedTopGap","fixedBottomGap","sidenav_c4","MatSidenavModule","CdkScrollableModule","CdkStepHeader","CdkStepLabel","template","STEP_STATE","STEPPER_GLOBAL_OPTIONS","CdkStep","_stepper","stepperOptions","interacted","interactedStream","_editable","_optional","_completedOverride","_customError","_stepperOptions","_displayDefaultIndicatorType","displayDefaultIndicatorType","editable","optional","completed","_getDefaultCompleted","stepControl","hasError","_getDefaultError","invalid","_stateChanged","_markAsInteracted","_showError","showError","CdkStepper","TemplateRef","_sortedHeaders","_linear","_selectedIndex","_orientation","_groupId","linear","selectedIndex","newIndex","_steps","_anyControlsInvalidOrPending","_updateSelectedItemIndex","orientation","withVerticalOrientation","_stepHeader","headers","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","_layoutDirection","direction","withHorizontalOrientation","previous","_getStepLabelId","_getStepContentId","_getAnimationDirection","_getIndicatorType","isCurrentStep","_isCurrentStep","_getDefaultIndicatorLogic","_getGuidelineLogic","_getFocusIndex","stepsArray","previouslySelectedIndex","selectedStep","previouslySelectedStep","_containsFocus","_onKeydown","pending","stepperElement","focusedElement","_getFocusedElementPierceShadowDom","CdkStepperNext","CdkStepperPrevious","CdkStepperModule","BidiModule","ctx_r6","ctx_r8","ctx_r3","ctx_r5","_r13","ctx_r12","_r19","ctx_r18","_r23","step_r20","ctx_r24","MatStepLabel","MatStepperIntl","optionalLabel","completedLabel","editableLabel","MAT_STEPPER_INTL_PROVIDER","MAT_STEPPER_INTL_PROVIDER_FACTORY","_MatStepHeaderBase","mixinColor","MatStepHeader","_intlSubscription","_stringLabel","_templateLabel","_getIconContext","active","_getDefaultTextForState","matStepperAnimations","horizontalStepTransition","params","animationDuration","verticalStepTransition","height","MatStepperIcon","templateRef","MatStepContent","_template","MatStep","stepper","_errorStateMatcher","_viewContainerRef","_isSelected","Subscription","_lazyContent","_portal","TemplatePortal","isErrorState","originalErrorState","customErrorState","MatStepper","ErrorStateMatcher","i2$1","dir","animationDone","labelPosition","headerPosition","_iconOverrides","_animationDone","_animationDuration","test","_icons","_stepIsNavigable","_getAnimationDuration","i3$1","hostVars","MatStepperNext","MatStepperPrevious","MatStepperModule","PortalModule","MatIconModule","_MatToolbarBase","MatToolbarRow","MatToolbar","document","_document","_checkToolbarMixedModes","_toolbarRows","toolbar_c0","MatToolbarModule","IdleTimeModule","NotificationRestService","getNotifications","markAllAsRead","customPatchData","markAsRead","baseNotificationBody","notificationIds","NotificationsEffects","notificationRestService","notifications_actions","sortedList","lodash","moment","timestamp","valueOf","lastNotificationList","notifications_selectors","notifications","readNotifications","wasRead","additionalData","turnoverIds","turnoverId","withLatestFrom","notification","notificationId","NotificationsModule","icon_module","notifications_reducer","NotificationRingItemModule","pipes_module","pill_list_module","fesm2020_button","icon","progress_spinner","NotificationRingModule","menu","fesm2020_checkbox","getDashboardMode","generalRole","dashboard_mode","NotificationsService","auth","connect","tokenPromise","watchForAccessToken","hubConnection","HubConnectionBuilder","configureLogging","environment","environment_config","ILogger","withUrl","transport","ITransport","skipNegotiation","accessTokenFactory","withAutomaticReconnect","build","on","distributeNotifications","catch","err","stop","GENERAL","UKNOWN","BROWSERS","CHROME","FIREFOX","SAFARI","OPERA","IE","MS_EDGE","MS_EDGE_CHROMIUM","FB_MESSANGER","SAMSUNG","UCBROWSER","UNKNOWN","MOBILES_RE","HTC","NEXUS_PHONE","DELL","MOTOROLA","RegExp","LG","SONY","ASUS","NOKIA_LUMIA","MICROMAX","PALM","VERTU","PANTECH","FLY","WIKO","I_MOBILE","SIMVALLEY","WOLFGANG","ALCATEL","NINTENDO","AMOI","INQ","VITA","BLACKBERRY","FIREFOX_OS","IPHONE","iPod","ANDROID","WINDOWS_PHONE","GENERIC_PHONE","TABLETS_RE","iPad","NexusTablet","GoogleTablet","SamsungTablet","Kindle","SurfaceTablet","HPTablet","AsusTablet","BlackBerryTablet","HTCtablet","MotorolaTablet","NookTablet","AcerTablet","ToshibaTablet","LGTablet","FujitsuTablet","PrestigioTablet","LenovoTablet","DellTablet","YarvikTablet","MedionTablet","ArnovaTablet","IntensoTablet","IRUTablet","MegafonTablet","EbodaTablet","AllViewTablet","ArchosTablet","AinolTablet","NokiaLumiaTablet","SonyTablet","PhilipsTablet","CubeTablet","CobyTablet","MIDTablet","MSITablet","SMiTTablet","RockChipTablet","FlyTablet","bqTablet","HuaweiTablet","NecTablet","PantechTablet","BronchoTablet","VersusTablet","ZyncTablet","PositivoTablet","NabiTablet","KoboTablet","DanewTablet","TexetTablet","PlaystationTablet","TrekstorTablet","PyleAudioTablet","AdvanTablet","DanyTechTablet","GalapadTablet","MicromaxTablet","KarbonnTablet","AllFineTablet","PROSCANTablet","YONESTablet","ChangJiaTablet","GUTablet","PointOfViewTablet","OvermaxTablet","HCLTablet","DPSTablet","VistureTablet","CrestaTablet","MediatekTablet","ConcordeTablet","GoCleverTablet","ModecomTablet","VoninoTablet","ECSTablet","StorexTablet","VodafoneTablet","EssentielBTablet","RossMoorTablet","iMobileTablet","TolinoTablet","AudioSonicTablet","AMPETablet","SkkTablet","TecnoTablet","JXDTablet","iJoyTablet","FX2Tablet","XoroTablet","ViewsonicTablet","VerizonTablet","OdysTablet","CaptivaTablet","IconbitTablet","TeclastTablet","OndaTablet","JaytechTablet","BlaupunktTablet","DigmaTablet","EvolioTablet","LavaTablet","AocTablet","MpmanTablet","CelkonTablet","WolderTablet","MediacomTablet","MiTablet","NibiruTablet","NexoTablet","LeaderTablet","UbislateTablet","PocketBookTablet","KocasoTablet","HisenseTablet","Hudl","TelstraTablet","Honeywell","GenericTablet","DEVICES","CHROME_BOOK","PS4","MAC","CHROMECAST","APPLE_TV","GOOGLE_TV","Tesla","HONEYWELL","MI_SE_9","DESKTOP_DEVICES","OS","WINDOWS","IOS","LINUX","UNIX","CHROME_OS","OS_VERSIONS","WINDOWS_3_11","WINDOWS_95","WINDOWS_ME","WINDOWS_98","WINDOWS_CE","WINDOWS_2000","WINDOWS_XP","WINDOWS_SERVER_2003","WINDOWS_VISTA","WINDOWS_7","WINDOWS_8_1","WINDOWS_8","WINDOWS_10","WINDOWS_PHONE_7_5","WINDOWS_PHONE_8_1","WINDOWS_PHONE_10","WINDOWS_NT_4_0","MACOSX_11_0","MACOSX_16","MACOSX_15","MACOSX_14","MACOSX_13","MACOSX_12","MACOSX_11","MACOSX_10","MACOSX_9","MACOSX_8","MACOSX_7","MACOSX_6","MACOSX_5","MACOSX_4","MACOSX_3","MACOSX_2","MACOSX","iOS","ANDROID_9","OS_RE","and","or","not","DEVICES_RE","OS_VERSIONS_RE_MAP","BROWSER_VERSIONS_RE_MAP","OS_VERSIONS_RE","keys","obj","BROWSER_VERSIONS_RE","DeviceType","OrientationType","Constants","freeze","__proto__","BROWSERS_RE","ReTree","str","regex","isArray","every","exec","res","Mobile","Tablet","Desktop","Unknown","Portrait","Landscape","DeviceDetectorService","platformId","ua","userAgent","os","browser","device","os_version","browser_version","reTree","deviceType","isPlatformBrowser","navigator","setDeviceInfo","mappings","const","prop","mapping","platform","maxTouchPoints","previousValue","currentValue","re","matchMedia","matches","isTablet","isMobile","isDesktop","getDeviceInfo","mobile","PLATFORM_ID","SidePanelSectionItemComponent","ComponentAbstract","appVersionService","helpRouterService","selectUserPermissionLevel","isActive","location","pathname","startsWith","sectionItem","urlPath","version$","appVersion","currentVersion","version_number","needUpgrade","events","NavigationEnd","permissionLevelWarning","permissionLevels","permissionLevels$","checkPermissionLevel","warning","modalDialogComponent","NewTurnoverModalComponent","openNewTurnoverModal","queryParams","getGlobalPreservedParams","createUrlTree","href","toString","menuActions","menuActionsEvent","toggleSection","$event","isExpanded","openSubsection","menuSectionItem","SidePanelSectionComponent","component_abstract","app_routes_const","checkActiveSection","currentSectionBSubject","currentSection","section","path","route_path_enum","homePaths","separator","side_panel_section_component_decorate","SidePanelComponent","PermissionLevelType","currentVersionTimestamp","version_timestamp","URL","searchParams","append","selectSelectedDashboardMode","dashboardMode","permissionList","email","menuConfig","getMenuConfig","menuAction","mainPageActionEvent","checkRolesSection","availableDashboardPermissionsCount","homeDashboardPermissions","permission","checkHomeSection","checksMainSection","turnoversSection","boardsSection","InspectionsSection","MaintenanceSection","reportsSection","managementSection","sections","homeSection","rolesSection","checkTicketSection","ticketsSection","newSection","hideWithoutSubsections","checksSubsection","isUserEmailDomainAllowed","emailDomains","domain","side_panel_component_decorate","EntityType","EntityTypeListConst","NotificationRingItemComponent","getNotificationIcon","getNotificationTitle","getNotificationContent","footer","getNotificationFooter","selectEvent","deleteInProgress","deleteEvent","category","notification_category","icon_enum","relatedObjectTypeId","workflowStepEnumType","workflow_step_list_const","ticketName","workflow_step_enum","entityList","unitNames","userType","user_type","companyName","NotificationRingComponent","getLastMessages","deleteInProgress$","selectDeleteNotificationInProgress","selectLastNotificationList","allNotificationList","filterList","unreadOnly","selectNotification","webNotification","openSource","deleteNotification","displayedNotificationList","setUnreadCount","unreadCount","getLastNotificationList","openTicketPreviewModal","ticketId","relatedObjectId","NotificationCategory","RouteData","UserType","RoutePath","bidId","notification_ring_component_decorate","PropertySelectorComponent","dashboard_view_type","snapshot","urlPortfolioId","parseInt","route_data","urlPropertyId","maxNameLength$","maxNameLength","maxWidth","targetWidth","selectorsWidthCss","dashboards_selectors","groupingByItems","joined","grouping","portfolio_selectors","portfolio","emitEvent","properties","userProperties","toUpperCase","firstChild","newDashboardViewType","dashboardViewType","portfolioItem","updateRouterParam","dashboard_actions","propertyItem","currentParams","currentFragment","fragment","queryParamsHandling","replaceUrl","property_selector_component_decorate","BreadcrumbItemComponent","reloadRoute","skipLocationChange","TopPanelComponent","dashboards_abstract","routeBreadcrumbList","getBreadcrumbList","root","breadcrumbList","mergeBreadcrumbList","getDashboardViewTypes","additionalBreadcrumbList","user_selectors","isAuthenticated","user_actions","portfolio_actions","home","main_page_actions","breadcrumbs","routeConfig","lastRoutePart","split","pop","replace","enumeration_selectors","dashboardViewTypes","enumerationValue","dashboardViewTypeEnum","top_panel_component_decorate","ApplicationMenuComponent","authService","oidcSecurityService","notificationsService","sidePanelService","deviceService","timezoneService","screenWiperService","screenClasses$","wipeDuration","globalWiperVisible$","showBanner","watchForSidePanel","isSidePanelExpanded$","first","currentVersionTimeStamp","checkSlackResponse","checkBuildiumResponse","isAuthenticated$","setAuthenticated","loadTenantData","loadUserData","loadEnumerations","isLoading$","selectLoadEnumerationsLoading","dashboardViewType$","selectDashboardViewType","isExternal","selectedDashboardMode","selectTenantData","tenantData","tenantId","hostname","tenantUrl","sessionStorage","removeItem","currentYear","getCurrentDate","getFullYear","pull","slackAdded","removeQueryParam","buildium","paramName","toggleSidePanel","mainPageActions","MainPageActions","logoff","returnUrl","application_menu_component_decorate","routes","component","children","redirectTo","pathMatch","canActivate","angular_auth_oidc_client","auth_guard","home_redirect_guard","loadChildren","__webpack_require__","m","HomeDashboardModule","DashboardRolesModule","TurnoversModule","InspectionsModule","MaintenanceModule","BoardsModule","loadComponent","TokenExchangeComponent","DashboardReportsModule","permission_level_guard","permission_level_enum","TicketsModule","management_route_enum","canDeactivate","view_close_guard","ManagementModule","unit_details_component","NoPermissionComponent","MainApplicationRoutingModule","playerFactory","lottie_default","MainApplicationModule","yesEmpty_pipe","valueIfPositive_pipe","valueIfNonZero_pipe","ngx_lottie","player","shared_store_module","modals_module","scrolling","shared_module","autocomplete","card","datepicker","divider","expansion","form_field","grid_list","input","fesm2020_core","fesm2020_radio","fesm2020_select","snack_bar","tabs","table","tooltip","chips","directives_module","new_turnover_modal_module","accept_token_module","avatar_module","search_input_module","radio_button_dropdown_module","portfolio_store_module","animation_module","clearNotificationsStore","_ngrx_store__WEBPACK_IMPORTED_MODULE_0__","addLatestNotification","addLatestAnyNotification","markAnyNotificationsAsRead","clearAnyNotifications","updateAnyNotifications","getLastNotificationListSuccess","getLastNotificationListFailed","markAllAsReadSuccess","markAllAsReadFailed","markAsReadSuccess","markAsReadFailed","deleteNotificationSuccess","deleteNotificationFailed","notificationsFeatureKey","initialState","bidNotification","ticketNotification","turnoverNotification","lastAnyNotificationList","lastNotificationListLoading","markAllAsReadInProgress","markAllAsReadStatus","markAsReadInProgress","markAsReadStatus","markAsReadId","deleteNotificationInProgress","reducer","_ngrx_store__WEBPACK_IMPORTED_MODULE_3__","_main_application_notifications_actions_notifications_actions__WEBPACK_IMPORTED_MODULE_1__","_shared_enums_update_status__WEBPACK_IMPORTED_MODULE_2__","lodash__WEBPACK_IMPORTED_MODULE_0__","selectNotificationsState","_main_application_notifications_reducers_notifications_reducer__WEBPACK_IMPORTED_MODULE_0__","notificationsState","selectLastAnyNotificationList","selectLastNotificationListLoading","selectMarkAsReadInProgress","selectMarkAsReadStatus","selectMarkAsReadId","UnitDetailsComponentForm","FINISH","UnitDetailsAbstract","getPropertyAddress","physicalAddress","street1","street2","city","zip","getPropertyManager","propertyManager","firstName","lastName","UnitDetailsPicturesSectionComponentForm","PHOTO","UnitDetailsPicturesSectionComponent","unit_details_abstract","attachment_type","file_extensions_const","initForm","unitAttachments","prepareUnitAttachments","fileUploaded","unitAttachmentType","upload","setAttachment","showUnitPictures","openGalleryModal","attachmentType","attachmentsBSubject","unitPhotosBSubject","readOnly","showUnitFloorPlans","unitFloorPlanBSubject","attachmentToEntity","externalUrl","applianceId","fileUploadId","originalFileName","FLOOR_PLAN","unitPhotos","unitFloorPlan","targetAttachmentType","displayedUnitPhotos","displayedUnitFloorPlan","UnitDetailsPropertySectionComponent","descriptionGroup","DESCRIPTION","finish","propertyAddress","addresses","propertyManagerEmail","finishEnumeration","finishList","get_enumeration_radio_list_function","unit_details_property_section_component_decorate","UnitDetailsDescriptionSectionComponent","rent","RENT","marketRent","MARKETRENT","advertisedRent","ADVERTISEDRENT","oldRent","OLDRENT","renewalStrategyLoading$","selectRenewalStrategyForUnitLoading","selectRenewalStrategyForUnit","restUnitTypeRentTargetModel","selectUnit","unit_details_description_section_component_decorate","UnitDetailsInspectionsComponent","inspections_base_component","inspectionsSource","template_actions","template_selectors","templates","templateList","initDataSource","inspections","inspection_model","inspectionTemplateId","sortingDataAccessor","tableSortPredicate","bind","deleteInspection","unit_details_inspections_component_decorate","UnitDetailsComponent","unitNonPmsService","unitService","turnoverService","MoveOutTypeListConst","selectPreviousRoute","prevRoute","sourceView","paramMap","bulkBidId","selectUnitLoading","isUnitDoNotAutoCreateTurnsLoading$","selectUnitDoNotAutoCreateTurnsLoading","nameControl","loadUnit","getRenewalStrategyForUnit","selectLoadEnumerations","enumerationConfig","applianceTypeList","getEnumerationRadioListFunction","applianceTypes","colorTypeList","applianceColors","selectTurnoverDeleteStatus","turnoverDeleteStatus","UpdateStatus","doNotAutoCreateTurns","updateBreadcrumb","initTurnover","clearUnit","getTurnover","turnover","moveOutType","changeDoNotAutoCreateTurns","updateUnitDoNotAutoCreateTurns","DialogResult","deleteTurnover","goToHome","DigitsValidator","formValue","EIcon","setCustomBreadcrumbs","deleteUnit","finalize","unit_details_component_decorate","SpaceTemplateEffects","surveyService","propertiesService","unitsService","fileUploadsService","space_template_actions","listItems","categoriesList","SpaceTemplateStoreModule","surveys_effects","space_template_reducer","surveys_reducer","selectTemplateState","_template_reducer__WEBPACK_IMPORTED_MODULE_0__","selectTemplates","templateState","selectTemplatesLoading","listItemsLoading","selectTemplateUpdate","entityUpdateOngoing","selectTemplateDeleteOngoing","deleteEntityOngoing","selectTemplateAreaUpdateOngoing","selectTemplateAreaUpdateStatus","templateAreaUpdateStatus","templateAreaUpdateOngoing","selectTemplateAreaDeleteOngoing","templateAreaRemoveOngoing","selectUnitTypes","unitTypes","TurnoverDateRangeModule","_angular_common__WEBPACK_IMPORTED_MODULE_3__","_ui_components_components_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_1__","_ui_components_components_date_dropdown_date_dropdown_module__WEBPACK_IMPORTED_MODULE_0__","_angular_forms__WEBPACK_IMPORTED_MODULE_4__","allFileExtensions","imageVideoFileExtensions","_shared_enums_move_out_type_enum__WEBPACK_IMPORTED_MODULE_0__","MANAGEMENT_EMAIL_DOMAINS","_shared_constants_app_routes_const__WEBPACK_IMPORTED_MODULE_1__","_shared_enums_icon_enum__WEBPACK_IMPORTED_MODULE_2__","_shared_enums_permission_level_enum__WEBPACK_IMPORTED_MODULE_3__","forExternalOnly","passQueryParams","_ui_components_modals_new_turnover_modal_new_turnover_modal_component__WEBPACK_IMPORTED_MODULE_4__","_main_application_boards_boards_create_boards_create_component__WEBPACK_IMPORTED_MODULE_0__","CustomTooltipModule","have_permission_directive","sort_header_directive","last_element_directive","custom_tooltip_directive","content_editable_directive","drop_zone_directive","DirectivesModule","HavePermissionDirective","viewContainer","appHavePermission","checkPermission","_shared_selectors_user_selectors__WEBPACK_IMPORTED_MODULE_1__","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_2__","rxjs_operators__WEBPACK_IMPORTED_MODULE_3__","rxjs_operators__WEBPACK_IMPORTED_MODULE_4__","hasPermission","_shared_functions_check_permission_level_function__WEBPACK_IMPORTED_MODULE_0__","clear","createEmbeddedView","_angular_core__WEBPACK_IMPORTED_MODULE_5__","LastElementDirective","_angular_core__WEBPACK_IMPORTED_MODULE_0__","isLastElement","lastItemParam","itemsCount","lastElementLoaded","SortHeaderDirective","renderer","addClass","ariaDirection","onClick","changeDirection","sortAction","currentDirection","fieldName","sortEvent","field","BidStatusType","MoveOutType","ThresholdType","allowedDomains","FormatAddressToStringFunction","address","getCurrentWorkflowStep","workflowStep","workflow","getCompletedWorkflowStep","getTimeInStep","timerInstance","forAllProcess","total","_shared_enums_workflow_step_enum__WEBPACK_IMPORTED_MODULE_0__","notice","moveOut","bid","makeReady","reno","punch","approval","marketing","leaseUp","moveIn","paramsCompare","isParamsCompareFunc","object","compare","expectValue","replaceCommaToDotFunction","AuthGuard","rxjs_operators__WEBPACK_IMPORTED_MODULE_1__","isAuthorized","_shared_constants_app_routes_const__WEBPACK_IMPORTED_MODULE_0__","_angular_core__WEBPACK_IMPORTED_MODULE_2__","HomeRedirectGuard","getUserData","rxjs_operators__WEBPACK_IMPORTED_MODULE_5__","rxjs_operators__WEBPACK_IMPORTED_MODULE_6__","navigationExtras","_shared_enums_user_type__WEBPACK_IMPORTED_MODULE_2__","_shared_functions_check_permission_level_function__WEBPACK_IMPORTED_MODULE_3__","_angular_core__WEBPACK_IMPORTED_MODULE_7__","PermissionLevelGuardFactory","permissionToCheck","AnyPermissionLevelGuardFactory","permissionsToCheck","_angular_core__WEBPACK_IMPORTED_MODULE_3__","_angular_router__WEBPACK_IMPORTED_MODULE_4__","_app_services_user_service__WEBPACK_IMPORTED_MODULE_0__","getCashedUserData","noPermissionUrlTree","parseUrl","ViewCloseGuard","_angular_core__WEBPACK_IMPORTED_MODULE_1__","FileMimeType","BoardCurrencyPipe","currencyPipe","display","valueFormat","pure","BooleanToStringPipe","CompactPipe","availableItems","CompareOperatorPipe","_shared_enums_compare_operator_enum__WEBPACK_IMPORTED_MODULE_0__","CustomCurrencyShortWithSuffixPipe","precision","abbreviateNumber","num","fixed","toPrecision","k","c","toFixed","pow","abs","CustomCurrencyPipe","currency","fractionDigits","isNaN","_shared_constants_none_radio_option_const__WEBPACK_IMPORTED_MODULE_0__","TodayDatePipe","_angular_common__WEBPACK_IMPORTED_MODULE_1__","format","showToday","dateValue","Date","isToday","someDate","today","getDate","getMonth","datePipe","DaysAgoPipe","date","diffInDays","moment__WEBPACK_IMPORTED_MODULE_0__","diff","DaysInStepPipe","time","_shared_functions_get_time_in_step_function__WEBPACK_IMPORTED_MODULE_0__","allHours","days","hours","DaysPastPipe","daysInStep","discardHoursPart","DelinquencyGroupInvalidPipe","delinquencyResultType","notes","_main_application_delinquencies_models_delinquency_fields_enum__WEBPACK_IMPORTED_MODULE_0__","DelinquencyPristineGroupPipe","delinquencyResult","pristine","ElapsedDatePipe","startOf","ElapsedDaysMidRangePipe","reversed","low","high","lowValue","highValue","EnumerationUserPipe","userList","enumItem","FieldTypePipe","fieldsList","types","_Mime_extensionToType","_Mime_typeToExtension","_Mime_typeToExtensions","__classPrivateFieldGet","receiver","kind","f","TypeError","has","call","WeakMap","src","Mime","args","set","Map","arg","define","typeMap","force","ext","Set","allExtensions","extension","starred","currentType","Error","getType","hasPath","getExtension","_type","_type$split","getAllExtensions","_freeze","_getTestState","standardTypes","otherTypes","FileMimeTypePipe","fileName","file_mime_types","FileToObjectUrlPipe","sanitizer","bypassSecurityTrustUrl","createObjectURL","FindByIdPipe","FirstPipe","FormatToAvatarPipe","GetCurrentWorkflowStepPipe","turnoverData","_shared_functions_get_current_workflow_step_function__WEBPACK_IMPORTED_MODULE_0__","activeWorkflowStepType","GetFromGroupPipe","GetPercentageValuePipe","sumValue","GetWorkflowStepPipe","HoursPastPipe","HumanizePipe","IsOddPipe","KanbanHeaderWorkflowPhasePipe","currentPhase","defaultPhase","defaultTheme","_shared_enums_breadcrumb_theme_enum__WEBPACK_IMPORTED_MODULE_0__","KanbanHeaderWorkflowStepPipe","currentStep","currentTheme","KpiHeaderPipe","thresholdType","_shared_enums_threshold_type__WEBPACK_IMPORTED_MODULE_0__","KpiTaskValuePipe","KpiValuePipe","operator","LabelAvailableDayInStepPipe","dayInStep","dt","LabelDayInStepPipe","LabelDaySinceStepPipe","daySinceStep","LostRevenuePipe","pricePerDay","pricePerHour","parseFloat","MeasureTypePipe","measureType","amount","shortFormat","MentionCommentPipe","g","u","NotEmptyPropsAmountPipe","showZero","excludedProps","NumberPipe","suffix","ParseFloatPipe","_shared_functions_replace_comma_to_dot_function__WEBPACK_IMPORTED_MODULE_0__","PhysicalAddressPipe","_shared_functions_format_address_to_string_function__WEBPACK_IMPORTED_MODULE_0__","IsSaveGeneralRoleDisabledPipe","IsSubmitRolesAndUnitsDisabledPipe","isGeneralRoleChanged","arePropertiesChanged","PropertiesToRadioInputPipe","SafeHtmlPipe","html","bypassSecurityTrustHtml","TurnoverPhaseToStatusPipe","enumerations","displayText","EnumerationProperties","WorkflowPhaseToProgressMap","workflow_phase_type","WorkflowPhaseToProgressValuePipe","workflowPhase","workflowPhases","workflowPhaseValue","enumerationListToKeyValueMap","enumerationList","enumerationItem","BidStatusTypePipe","statusType","bid_status_type","DayFromHoursPipe","EnumValueToDisplayTextPipe","enumList","IsIncludePipe","ReplaceValuePipe","pattern","RoundValuePipe","round","StartsWithPipe","TaskTableSubsectionResultCountPipe","tickets","filterItem","assigneeId","compareParams","params_compare_function","ToFixedValuePipe","PIPES","trust_html_pipe","pluralization_pipe","date_pipe","format_to_avatar_pipe","kpi_header_pipe","kpi_value_pipe","kpi_task_value_pipe","workflow_phase_type_pipe","kanban_header_workflow_phase_pipe","workflow_phase_done_pipe","text_mask_pipe","time_from_date_pipe","enumeration_value_pipe","turnover_attachment_pipe","days_ago_pipe","compare_operator_pipe","parse_float_pipe","get_percentage_value_pipe","escape_html_pipe","field_type_pipe","boolean_to_string_pipe","utc_date_pipe","physical_address_pipe","is_user_existing_pipe","is_odd_pipe","file_to_object_url_pipe","delinquency_group_invalid_pipe","delinquency_pristine_group_pipe","section_id_pipe","kanban_header_workflow_step_pipe","priority_icon_pipe","priority_to_css_class_pipe","priority_css_pipe","days_in_step_pipe","file_size_pipe","workflow_step_done_pipe","lost_revenue_pipe","threshold_priority_css_pipe","find_by_id_pipe","get_workflow_step_pipe","time_diff_pipe","first_pipe","get_from_group_pipe","elapsed_days_mid_range_pipe","label_day_in_step_pipe","label_day_since_step_pipe","custom_currency_pipe","custom_currency_short_with_suffix_pipe","days_past_pipe","hours_past_pipe","get_current_workflow_step_pipe","measure_type_pipe","number_pipe","number_validation_pipe","mention_comment_pipe","threshold_configuration_pipe","threshold_step_configuration_pipe","truncate_text_pipe","compact_pipe","label_available_day_in_step_pipe","not_empty_props_amount_pipe","uppercase_first_letter_of_words_pipe","elapsed_date_pipe","enumeration_user_pipe","value_length_pipe","board_currency_pipe","file_mime_type_pipe","PipesModule","PluralizationPipe","count","PriorityCssPipe","ticketPriorityType","fontColor","_shared_enums_priority_type__WEBPACK_IMPORTED_MODULE_0__","PriorityIconPipe","_shared_enums_priority_type__WEBPACK_IMPORTED_MODULE_1__","_shared_enums_color_palette_enum__WEBPACK_IMPORTED_MODULE_0__","TaskCssClasses","PriorityToCssClassPipe","SectionIdPipe","idPrefix","TextMaskPipe","limit","sign","ThresholdConfigurationPipe","configuration","readyPhaseThreshold","lowThresholdValue","notReadyPhaseThreshold","highThresholdValue","ThresholdPriorityCssPipe","ThresholdStepConfigurationPipe","stepType","stepThresholds","s","TimeDiffPipe","diffLabelPrefix","diffInYears","diffInMonths","diffInWeeks","diffInHours","suffixFunction","TimeFromDatePipe","showFullDate","currrentDate","TruncateTextPipe","patterns","UppercaseFirstLetterOfWordsPipe","text","word","substring","UtcDatePipe","_shared_functions_get_utc_function__WEBPACK_IMPORTED_MODULE_0__","ValueLengthPipe","ValueIfNonZeroPipe","ValueIfPositivePipe","WorkflowPhaseDonePipe","_shared_enums_icon_enum__WEBPACK_IMPORTED_MODULE_0__","WorkflowPhaseTypePipe","workflowPhaseType","_shared_enums_workflow_phase_type__WEBPACK_IMPORTED_MODULE_0__","WorkflowStepDonePipe","YesEmptyPipe","routeState","_ngrx_store__WEBPACK_IMPORTED_MODULE_2__","_core_selector__WEBPACK_IMPORTED_MODULE_1__","coreState","_shared_reducers_route_reducer__WEBPACK_IMPORTED_MODULE_0__","getStorageItem","storageValue","localStorage","getItem","JSON","parse","setStorageItem","stringify","setItem","parseJSON","json","positiveOnly","digitsPositive","digits","AttachmentItemModule","_angular_material_button__WEBPACK_IMPORTED_MODULE_4__","_app_modules_ui_components_components_icon_icon_module__WEBPACK_IMPORTED_MODULE_0__","_angular_material_tooltip__WEBPACK_IMPORTED_MODULE_5__","_shared_pipes_pipes_module__WEBPACK_IMPORTED_MODULE_1__","AttachmentModule","_angular_common__WEBPACK_IMPORTED_MODULE_7__","_app_modules_ui_components_components_radio_button_radio_button_module__WEBPACK_IMPORTED_MODULE_4__","_angular_forms__WEBPACK_IMPORTED_MODULE_8__","_app_modules_ui_components_components_input_file_input_file_module__WEBPACK_IMPORTED_MODULE_3__","_app_modules_ui_components_components_input_input_module__WEBPACK_IMPORTED_MODULE_1__","_angular_material_button__WEBPACK_IMPORTED_MODULE_9__","_app_modules_ui_components_components_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_2__","_angular_material_tooltip__WEBPACK_IMPORTED_MODULE_10__","_ui_components_components_attachment_item_attachment_item_module__WEBPACK_IMPORTED_MODULE_5__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_11__","AttachmentsListModule","_angular_common__WEBPACK_IMPORTED_MODULE_2__","_attachment_item_attachment_item_module__WEBPACK_IMPORTED_MODULE_0__","_angular_core__WEBPACK_IMPORTED_MODULE_4__","AvatarComponent","avatarService","userInfo","avatarTheme","getUserConfig","SYSTEM_USER_ID","setFullName","fullName","AvatarModule","_ui_components_components_avatar_services_avatar_service__WEBPACK_IMPORTED_MODULE_2__","_angular_common__WEBPACK_IMPORTED_MODULE_4__","AvatarService","setThemeConfigList","avatarThemeItem","configList","themeNumber","themeAmount","getAvatarTheme","updateAvatarTheme","themePrefix","local_storage_data_enum","getRandomValue","minValue","maxValue","random","ButtonModule","_angular_material_button__WEBPACK_IMPORTED_MODULE_2__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_3__","DashboardContainerComponent","_main_application_dashboards_components_abstract_dashboards_abstract__WEBPACK_IMPORTED_MODULE_0__","isLoading","loading","isEmptyDashboard","emptyDashboard","onBodyScroll","onScroll","target","scrollTop","DateDropdownModule","_app_modules_ui_components_components_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_1__","_angular_material_menu__WEBPACK_IMPORTED_MODULE_4__","_angular_material_datepicker__WEBPACK_IMPORTED_MODULE_5__","_angular_material_button__WEBPACK_IMPORTED_MODULE_6__","ngx_mask__WEBPACK_IMPORTED_MODULE_7__","_angular_material_tooltip__WEBPACK_IMPORTED_MODULE_9__","DividerModule","_angular_material_divider__WEBPACK_IMPORTED_MODULE_2__","EmptyDashboardComponent","userData$","EmptyDataComponent","_shared_enums_icon_enum__WEBPACK_IMPORTED_MODULE_1__","IconModule","_shared_pipes_pipes_module__WEBPACK_IMPORTED_MODULE_0__","_angular_material_icon__WEBPACK_IMPORTED_MODULE_3__","InputAreaModule","_app_modules_ui_components_components_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_0__","_angular_forms__WEBPACK_IMPORTED_MODULE_5__","_ui_components_directives_autoresize_autoresize_module__WEBPACK_IMPORTED_MODULE_2__","_shared_directives_directives_module__WEBPACK_IMPORTED_MODULE_1__","_angular_material_input__WEBPACK_IMPORTED_MODULE_6__","InputErrorModule","_app_modules_ui_components_components_input_error_services_input_error_service__WEBPACK_IMPORTED_MODULE_0__","InputFileModule","_angular_common__WEBPACK_IMPORTED_MODULE_5__","_angular_forms__WEBPACK_IMPORTED_MODULE_6__","_angular_material_input__WEBPACK_IMPORTED_MODULE_7__","ngx_mask__WEBPACK_IMPORTED_MODULE_8__","_shared_pipes_pipes_module__WEBPACK_IMPORTED_MODULE_3__","_shared_directives_directives_module__WEBPACK_IMPORTED_MODULE_2__","InputTypeFileModule","_angular_material_button__WEBPACK_IMPORTED_MODULE_8__","_shared_pipes_pipes_module__WEBPACK_IMPORTED_MODULE_2__","InputModule","_angular_material_input__WEBPACK_IMPORTED_MODULE_4__","_angular_material_form_field__WEBPACK_IMPORTED_MODULE_5__","_icon_icon_module__WEBPACK_IMPORTED_MODULE_0__","_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_1__","PictureComponent","fileMimeType","_shared_interfaces_file_mime_types__WEBPACK_IMPORTED_MODULE_1__","comment","picture","selectPicture","selectPictureEvent","deleteItem","deletePictureEvent","toggleEditMode","showCommentActionButtons","currentComment","save","updatePictureEvent","cancel","PictureModule","_angular_material_button__WEBPACK_IMPORTED_MODULE_5__","_angular_material_tooltip__WEBPACK_IMPORTED_MODULE_6__","_ui_components_components_icon_icon_module__WEBPACK_IMPORTED_MODULE_1__","_ui_components_components_input_area_input_area_module__WEBPACK_IMPORTED_MODULE_2__","_angular_forms__WEBPACK_IMPORTED_MODULE_7__","_angular_material_icon__WEBPACK_IMPORTED_MODULE_8__","PillListComponent","_angular_forms__WEBPACK_IMPORTED_MODULE_1__","valueAccessor","availableOptions","availableOptionsValue","onTouched","disable","enable","selectOption","selectable","_angular_material_chips__WEBPACK_IMPORTED_MODULE_4__","PillListModule","_angular_material_chips__WEBPACK_IMPORTED_MODULE_2__","_angular_material_tooltip__WEBPACK_IMPORTED_MODULE_3__","RadioButtonDropdownModule","_angular_common__WEBPACK_IMPORTED_MODULE_6__","_angular_material_menu__WEBPACK_IMPORTED_MODULE_7__","_radio_button_radio_button_module__WEBPACK_IMPORTED_MODULE_4__","_icon_icon_module__WEBPACK_IMPORTED_MODULE_3__","_app_modules_ui_components_components_input_input_module__WEBPACK_IMPORTED_MODULE_0__","_ng_select_ng_select__WEBPACK_IMPORTED_MODULE_10__","_ui_components_components_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_2__","_angular_material_tooltip__WEBPACK_IMPORTED_MODULE_11__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_12__","_angular_material_divider__WEBPACK_IMPORTED_MODULE_13__","RadioButtonModule","_angular_material_radio__WEBPACK_IMPORTED_MODULE_4__","ReadOnlyFieldModule","SearchInputModule","_angular_forms__WEBPACK_IMPORTED_MODULE_3__","SelectTreeModule","_circlon_angular_tree_component__WEBPACK_IMPORTED_MODULE_4__","_angular_material_menu__WEBPACK_IMPORTED_MODULE_5__","_icon_icon_module__WEBPACK_IMPORTED_MODULE_1__","TableEmptyContentModule","TableStatusToggleModule","_angular_material_button__WEBPACK_IMPORTED_MODULE_3__","_angular_material_checkbox__WEBPACK_IMPORTED_MODULE_4__","UserSelectDropdownModule","_ng_select_ng_select__WEBPACK_IMPORTED_MODULE_5__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_7__","AutoresizeModule","AddVendorUserModalModule","input_module","select_tree_module","radio_button_module","GalleryModalModule","picture_module","InfoModalModule","NewBulkScopeModule","NextStepAssigneeModalModule","read_only_field_module","user_select_dropdown_module","PromptModalModule","TicketPreviewModalModule","input_error_module","date_dropdown_module","attachment_item_module","attachment_module","table_status_toggle_module","input_area_module","attachments_list_module","UserPreviewModalModule","companies_store_module","AddVendorModalModule","divider_module","CommentTooLongModalModule","ConfirmationModalModule","SpaceTemplateModalModule","table_empty_content_module","space_template_store_module","TurnoverPunchModalModule","button_module","ModalsModule","modals_service","workflow_actions_service","ngx_mask","input_file_module","input_type_file_module","NewTurnoverModalModule","_ui_components_components_input_input_module__WEBPACK_IMPORTED_MODULE_3__","_ui_components_components_slide_toggle_slide_toggle_component__WEBPACK_IMPORTED_MODULE_4__","_angular_material_dialog__WEBPACK_IMPORTED_MODULE_7__","_main_application_turnovers_components_sections_turnover_date_range_turnover_date_range_module__WEBPACK_IMPORTED_MODULE_1__","_app_modules_ui_components_components_radio_button_dropdown_radio_button_dropdown_module__WEBPACK_IMPORTED_MODULE_0__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_10__","_ui_components_components_date_dropdown_date_dropdown_module__WEBPACK_IMPORTED_MODULE_2__","ScreenWiperService","rxjs__WEBPACK_IMPORTED_MODULE_1__","screenWipeState","screenClasses","globalWiperVisible","globalWiper","runWiper","setClasses","info","bound01","n","isOnePointZero","isPercent","isPercentage","String","clamp01","boundAlpha","convertToPercentage","concat","Number","pad2","rgbToHsl","r","h","l","d","hue2rgb","q","rgbToHsv","v","rgbToHex","allow3Char","hex","charAt","convertDecimalToHex","convertHexToDecimal","parseIntFromHex","names","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","goldenrod","gold","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavenderblush","lavender","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","inputToRGB","rgb","stringInputToObject","named","match","matchers","rgba","hsl","hsla","hsv","hsva","hex8","hex6","hex4","hex3","isValidCSSUnit","rgbToRgb","substr","hsvToRgb","mod","hslToRgb","prototype","hasOwnProperty","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","TinyColor","opts","_a","numberInputToObject","originalInput","roundA","gradientType","isValid","isDark","getBrightness","isLight","toRgb","getLuminance","RsRGB","GsRGB","BsRGB","getAlpha","setAlpha","alpha","isMonochrome","toHsl","toHsv","toHsvString","toHslString","toHex","toHexString","toHex8","allow4Char","rgbaToHex","toHex8String","toHexShortString","allowShortChar","toRgbString","toPercentageRgb","fmt","toPercentageRgbString","rnd","toName","_i","_b","formatSet","formattedString","hasAlpha","toNumber","clone","lighten","brighten","darken","tint","mix","shade","desaturate","saturate","greyscale","spin","hue","rgb1","rgb2","analogous","results","slices","part","ret","complement","monochromatic","modification","splitcomplement","onBackground","background","fg","bg","triad","polyad","tetrad","increment","equals","DEFAULT_RETRY_DELAYS_IN_MILLISECONDS","DefaultReconnectPolicy","retryDelays","_retryDelays","nextRetryDelayInMilliseconds","retryContext","previousRetryCount","HttpError","errorMessage","statusCode","trueProto","TimeoutError","AbortError","UnsupportedTransportError","message","errorType","DisabledTransportError","FailedToStartTransportError","FailedToNegotiateWithServerError","AggregateErrors","innerErrors","HttpResponse","statusText","HttpClient","send","method","getCookieString","NullLogger","log","_logLevel","_message","instance","Arg","Platform","isWebWorker","self","isReactNative","isNode","getDataDetail","includeContent","detail","isArrayBuffer","byteLength","formatArrayBuffer","view","Uint8Array","ArrayBuffer","sendMessage","_x","logger","transportName","httpClient","token","Authorization","getUserAgentHeader","LogLevel","logMessageContent","responseType","response","timeout","withCredentials","SubjectSubscription","observer","_subject","_observer","dispose","observers","cancelCallback","ConsoleLogger","minimumLogLevel","_minLevel","out","logLevel","msg","toISOString","warn","userAgentHeaderName","constructUserAgent","getOsName","getRuntimeVersion","version","runtime","runtimeVersion","majorAndMinor","process","versions","node","getErrorString","stack","FetchHttpClient","_logger","fetch","requireFunc","__non_webpack_require__","_jar","CookieJar","_fetchType","getGlobalThis","globalThis","global","AbortController","_abortControllerType","abortSignal","aborted","abortController","onabort","abort","timeoutId","msTimeout","cache","credentials","redirect","signal","clearTimeout","deserializeContent","payload","cookies","getCookies","arrayBuffer","XhrHttpClient","reject","xhr","XMLHttpRequest","setRequestHeader","header","onload","responseText","onerror","ontimeout","DefaultHttpClient","_httpClient","HeaderNames","Cookie","_isAborted","LongPollingTransport","_accessTokenFactory","_pollAbort","_options","_running","onreceive","onclose","pollAborted","transferFormat","TransferFormat","_url","j","pollOptions","_getAccessToken","_updateHeaderToken","pollUrl","now","_closeError","_receiving","_poll","_this2","_this3","_raiseOnClose","_this4","_this5","deleteOptions","logMessage","ServerSentEventsTransport","encodeURIComponent","eventSource","EventSource","onmessage","_close","onopen","_eventSource","WebSocketTransport","webSocketConstructor","_logMessageContent","_webSocketConstructor","_headers","webSocket","binaryType","_event","_webSocket","ErrorEvent","readyState","OPEN","_isCloseEvent","wasClean","code","reason","HttpConnection","_stopPromiseResolver","_negotiateVersion","createLogger","baseUrl","_resolveUrl","webSocketModule","eventSourceModule","WebSocket","_connectionState","_connectionStarted","_startInternalPromise","_startInternal","_stopPromise","_sendQueue","TransportSendQueue","_stopInternal","_stopError","_stopConnection","HttpTransportType","_constructTransport","_startTransport","negotiateResponse","redirects","_getNegotiationResponse","ProtocolVersion","accessToken","_createTransport","inherentKeepAlive","negotiateUrl","_resolveNegotiateUrl","negotiateVersion","connectionToken","connectionId","_createConnectUrl","requestedTransport","requestedTransferFormat","connectUrl","_this6","_isITransport","transportExceptions","transports","availableTransports","negotiate","endpoint","transportOrError","_resolveTransportOrError","ex","transportMatches","actualTransport","transferFormats","lastIndexOf","aTag","_transport","_buffer","_executing","_sendBufferedData","PromiseSource","_transportResult","_sendLoopPromise","_sendLoop","_bufferData","promise","_this7","transportResult","_concatBuffers","arrayBuffers","totalLength","offset","buffer","_resolver","_rejecter","TextMessageFormat","output","RecordSeparator","messages","RecordSeparatorCode","fromCharCode","HandshakeProtocol","writeHandshakeRequest","handshakeRequest","parseHandshakeResponse","messageData","remainingData","binaryData","separatorIndex","responseLength","apply","textData","MessageType","Invocation","StreamItem","Completion","StreamInvocation","CancelInvocation","Ping","Close","HubConnectionState","Disconnected","Connecting","Connected","Disconnecting","Reconnecting","HubConnection","connection","protocol","reconnectPolicy","_nextKeepAlive","_freezeEventListener","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","_protocol","_reconnectPolicy","_handshakeProtocol","_processIncomingData","_connectionClosed","_callbacks","_methods","_closedCallbacks","_reconnectingCallbacks","_reconnectedCallbacks","_invocationId","_receivedHandshakeResponse","_cachedPingMessage","writeMessage","_startPromise","_startWithStateTransitions","_stopDuringStartError","handshakePromise","_handshakeResolver","_handshakeRejecter","_sendMessage","_cleanupTimeout","_resetTimeoutPeriod","_resetKeepAliveInterval","_cleanupPingTimer","startPromise","_reconnectDelayHandle","_completeClose","stream","methodName","streams","streamIds","_replaceStreamingParams","invocationDescriptor","_createStreamInvocation","promiseQueue","cancelInvocation","_createCancelInvocation","invocationId","_sendWithProtocol","invocationEvent","_launchStreams","sendPromise","_createInvocation","invoke","newMethod","off","handlers","removeIdx","onreconnecting","onreconnected","_processHandshakeResponse","parseMessages","_invokeClientMethod","allowReconnect","responseMessage","getTime","_timeoutHandle","serverTimeout","_pingServerHandle","nextPing","invocationMessage","methods","_cancelCallbacksWithError","_reconnect","reconnectStartTime","previousReconnectAttempts","retryError","nextRetryDelay","_getNextRetryDelay","elapsedMilliseconds","retryReason","callbacks","nonblocking","streamId","_createCompletionMessage","_createStreamItemMessage","argument","_isObservable","JsonHubProtocol","hubMessages","parsedMessage","_isInvocationMessage","_isStreamItemMessage","_isCompletionMessage","_assertNotEmptyString","LogLevelNameMapping","trace","debug","information","critical","none","logging","isLogger","parseLogLevel","transportTypeOrOptions","httpConnectionOptions","withHubProtocol","retryDelaysOrReconnectPolicy","Trace","Debug","Information","Warning","Critical","None","WebSockets","ServerSentEvents","LongPolling","Text","Binary","_uniqueAutocompleteIdCounter","MatAutocompleteSelectedEvent","_MatAutocompleteMixinBase","MAT_AUTOCOMPLETE_DEFAULT_OPTIONS","MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY","autoActiveFirstOption","autoSelectActiveOption","_MatAutocompleteBase","_activeOptionChanges","showPanel","_isOpen","displayWith","optionSelected","optionActivated","_classList","inertGroups","_autoActiveFirstOption","_autoSelectActiveOption","coerceStringArray","_setVisibilityClasses","ActiveDescendantKeyManager","_setVisibility","_setScrollTop","panel","_getScrollTop","_emitSelectEvent","_getPanelAriaLabelledby","labelId","ariaLabel","labelExpression","ariaLabelledby","_visibleClass","_hiddenClass","viewQuery","_c0","MatAutocomplete","MAT_OPTGROUP","MatOption","MAT_OPTION_PARENT_COMPONENT","_MatAutocompleteOriginBase","MatAutocompleteOrigin","MAT_AUTOCOMPLETE_SCROLL_STRATEGY","MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER","Overlay","MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY","overlay","scrollStrategies","reposition","MAT_AUTOCOMPLETE_VALUE_ACCESSOR","MatAutocompleteTrigger","_MatAutocompleteTriggerBase","_overlay","_zone","scrollStrategy","_formField","_viewportRuler","_defaults","_componentDestroyed","_autocompleteDisabled","_manuallyFloatingLabel","_viewportSubscription","_canOpenOnNextFocus","_closeKeyEventStream","_windowBlurHandler","panelOpen","autocompleteAttribute","_overlayAttached","optionSelections","defer","onSelectionChange","onStable","_scrollStrategy","autocompleteDisabled","_getWindow","_positionStrategy","_setStrategyPositions","_overlayRef","updatePosition","_destroyPanel","openPanel","_attachOverlay","_floatLabel","closePanel","_resetLabel","_pendingAutoselectedOption","hasAttached","detach","_closingActionsSubscription","panelClosingActions","_getOutsideClickStream","detachments","MatOptionSelectionChange","activeOption","clickTarget","_getEventTarget","formField","customOrigin","connectedTo","overlayElement","_assignOptionValue","_handleKeydown","_selectViaInteraction","_resetActiveItem","prevActiveItem","isArrowKey","TAB","_canOpen","_scrollToOption","_valueBeforeAutoSelection","_handleInput","_previousValue","shouldAnimate","floatLabel","_animateAndLockLabel","_subscribeToClosingActions","firstStable","optionChanges","reapplyLastPosition","delay","wasOpen","_setValueAndClose","toDisplay","_updateNativeInputValue","_control","toSelect","_clearPreviousSelectedOption","skip","overlayRef","setOrigin","_getConnectedElement","updateSize","_getPanelWidth","_this$_formField","getLabelId","_getOverlayConfig","_handleOverlayEvents","attach","OverlayConfig","positionStrategy","_getOverlayPosition","_this$_defaults","overlayPanelClass","strategy","flexibleConnectedTo","withFlexibleDimensions","withPush","belowPositions","originX","originY","overlayX","overlayY","_aboveClass","abovePositions","positions","withPositions","getConnectedOverlayOrigin","panelWidth","_getHostWidth","getBoundingClientRect","setFirstItemActive","defaultView","labelCount","_countGroupLabelsBeforeOption","optionGroups","newScrollPosition","_getOptionScrollPosition","offsetTop","offsetHeight","keydownEvents","outsidePointerEvents","i1$1","MAT_FORM_FIELD","MatAutocompleteModule","OverlayModule","MatOptionModule","MatCardContent","MatCardTitle","MatCardSubtitle","MatCardActions","align","MatCardFooter","MatCardImage","MatCardSmImage","MatCardMdImage","MatCardLgImage","MatCardXlImage","MatCardAvatar","MatCard","MatCardHeader","MatCardTitleGroup","MatCardModule","MAT_CHIP_REMOVE","MAT_CHIP_AVATAR","MAT_CHIP_TRAILING_ICON","_MatChipMixinBase","mixinTabIndex","MatChipBase","MatChipAvatar","MatChipTrailingIcon","MatChip","globalRippleOptions","animationMode","chipListSelectable","_chipListMultiple","_chipListDisabled","role","_selectable","_removable","_onFocus","_onBlur","destroyed","_addHostClassName","_chipRippleTarget","_chipRipple","RippleRenderer","setupTriggerEvents","rippleConfig","_animationsDisabled","rippleDisabled","coercedValue","_dispatchSelectionChange","removable","ariaSelected","basicChipAttrName","tagName","chip","_removeTriggerEvents","selectViaInteraction","toggleSelected","DELETE","BACKSPACE","_blur","MAT_RIPPLE_GLOBAL_OPTIONS","MatChipRemove","_parentChip","parentChip","MAT_CHIPS_DEFAULT_OPTIONS","_MatChipListBase","mixinErrorState","_defaultErrorStateMatcher","_parentForm","_parentFormGroup","stateChanges","nextUniqueId$1","MatChipListChange","MatChipList","controlType","_lastDestroyedChipIndex","_uid","_userTabIndex","_compareWith","o1","o2","ariaOrientation","valueChange","_selectionModel","_this$_selectionModel2","_explicitRole","empty","_syncChipsState","_initializeSelection","_chipInput","required","_required","_this$ngControl","_this$ngControl$contr","hasValidator","placeholder","_placeholder","focused","_hasFocusedChip","shouldLabelFloat","chipSelectionChanges","chipFocusChanges","chipBlurChanges","chipRemoveChanges","_resetChips","_updateFocusForDestroyedChips","updateErrorState","_dropSubscriptions","registerInput","inputElement","setDescribedByIds","ids","_setSelectionByValue","onContainerClick","_originatesFromChip","_focusInput","newChipIndex","_clearSelection","_selectValue","_sortValues","correspondingChip","_propagateChanges","fallbackValue","valueToEmit","_markAsTouched","_listenToChipsFocus","_listenToChipsSelection","_listenToChipsRemoved","_chipFocusSubscription","_chipBlurSubscription","_chipSelectionSubscription","_chipRemoveSubscription","chipIndex","currentElement","parentElement","MatFormFieldControl","nextUniqueId","MatChipInput","_defaultOptions","_addOnBlur","separatorKeyCodes","chipEnd","chipList","_chipList","addOnBlur","_focusLastChipOnBackspace","setLastItemActive","_emitChipEnd","_keyup","_focus","_isSeparatorKey","chipInput","_onInput","MatChipsModule","useValue","nextId$1","CDK_ACCORDION","CdkAccordion","_openCloseAllActions","_multi","openAll","closeAll","CdkAccordionItem","accordion","_expansionDispatcher","_openCloseAllSubscription","expandedChange","_expanded","_removeUniqueSelectionListener","listen","accordionId","expanded","_subscribeToOpenCloseAllActions","notify","CdkAccordionModule","MAT_ACCORDION","EXPANSION_PANEL_ANIMATION_TIMING","matExpansionAnimations","indicatorRotate","bodyExpansion","MAT_EXPANSION_PANEL","MatExpansionPanelContent","_expansionPanel","uniqueId","MAT_EXPANSION_PANEL_DEFAULT_OPTIONS","MatExpansionPanel","_uniqueSelectionDispatcher","defaultOptions","_hideToggle","afterExpand","afterCollapse","_inputChanges","_headerId","_bodyAnimationDone","hideToggle","togglePosition","_togglePosition","_hasSpacing","displayMode","_getExpandedState","_body","bodyElement","_c1","MatExpansionPanelActionRow","_MatExpansionPanelHeaderMixinBase","MatExpansionPanelHeaderBase","MatExpansionPanelHeader","_parentChangeSubscription","accordionHideToggleChange","EMPTY","expandedHeight","collapsedHeight","_toggle","_isExpanded","_getPanelId","_getTogglePosition","_showToggle","_getHeaderHeight","_handleHeaderKeydown","_handleHeaderFocus","_c3","MatExpansionPanelDescription","MatExpansionPanelTitle","MatAccordion","_ownHeaders","show","MatExpansionModule","TileCoordinator","columnIndex","rowIndex","rowCount","rowspan","lastRowMax","tracker","numColumns","tiles","fill","tile","_trackTile","gapStartIndex","_findMatchingGap","colspan","_markTilePosition","TilePosition","tileCols","gapEndIndex","_nextRow","_findGapEndIndex","row","col","MAT_GRID_LIST","MatGridTile","_gridList","_rowspan","_colspan","_setStyle","MatGridTileText","MatGridAvatarCssMatStyler","MatGridTileHeaderCssMatStyler","MatGridTileFooterCssMatStyler","cssCalcAllowedValue","TileStyler","_rows","init","gutterSize","cols","_gutterSize","normalizeUnits","_cols","_direction","getBaseTileSize","sizePercent","gutterFraction","getTilePosition","baseSize","calc","getTileSize","span","setStyle","colIndex","percentWidthPerTile","gutterWidthFractionPerTile","setColStyles","setRowStyles","percentWidth","gutterWidth","baseTileWidth","side","getGutterSpan","getTileSpan","tileHeight","getComputedHeight","FixedTileStyler","fixedRowHeight","_setListStyle","_tiles","RatioTileStyler","_parseRatio","percentHeightPerTile","rowHeightRatio","baseTileHeight","ratioParts","FitTileStyler","gutterHeightPerTile","exp","MatGridList","_gutter","rowHeight","_rowHeight","_setTileStyler","_checkCols","_checkRowHeight","_layoutTiles","_tileStyler","_tileCoordinator","pos","MatGridListModule","_r9","ctx_r10","matSelectAnimations","transformPanelWrap","query","animateChild","transformPanel","opacity","SELECT_PANEL_MAX_HEIGHT","SELECT_PANEL_PADDING_X","MAT_SELECT_SCROLL_STRATEGY","MAT_SELECT_CONFIG","MAT_SELECT_SCROLL_STRATEGY_PROVIDER","MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY","MatSelectChange","_MatSelectMixinBase","MAT_SELECT_TRIGGER","MatSelectTrigger","_MatSelectBase","_parentFormField","scrollStrategyFactory","_liveAnnouncer","_panelOpen","_triggerAriaLabelledBy","_destroy","_valueId","_panelDoneAnimatingStream","_overlayPanelClass","_focused","_disableOptionCentering","_this$_defaultOptions3","disableOptionCentering","optionSelectionChanges","typeaheadDebounceInterval","_typeaheadDebounceInterval","_scrollStrategyFactory","_assignValue","_panelDoneAnimating","_initKeyManager","_resetOptions","newAriaLabelledby","_getTriggerAriaLabelledby","_previousControl","userAriaDescribedBy","_highlightCorrectOption","_isRtl","triggerValue","viewValue","reverse","_handleOpenKeydown","_handleClosedKeydown","LEFT_ARROW","RIGHT_ARROW","isOpenKey","altKey","previouslySelectedOption","selectedOption","announce","ctrlKey","hasDeselectedOptions","opt","previouslyFocusedIndex","_onAttached","_overlayDir","positionChange","_positioningSettled","_getPanelTheme","isEmpty","setInactiveStyles","_selectOptionByValue","_scrollOptionIntoView","changedOrDestroyed","_onSelect","sortComparator","_getChangeEvent","_this$_parentFormFiel","_getAriaActiveDescendant","_this$_parentFormFiel2","CdkConnectedOverlay","MatSelect","_scrollTop","_triggerFontSize","_transformOrigin","_offsetY","_positions","_calculateOverlayScroll","scrollBuffer","maxScroll","itemHeight","_getItemHeight","optimalScrollPosition","_triggerRect","getComputedStyle","fontSize","_calculateOverlayPosition","_calculateOverlayOffsetX","offsetX","overlayRect","viewportSize","getViewportSize","isRtl","paddingWidth","SELECT_MULTIPLE_PANEL_PADDING_X","leftOverflow","rightOverflow","_calculateOverlayOffsetY","optionHeightAdjustment","maxOptionsDisplayed","optionOffsetFromPanelTop","_getItemCount","_checkOverlayWithinViewport","topSpaceAvailable","top","bottomSpaceAvailable","bottom","panelHeightTop","panelHeightBottom","_adjustPanelUp","_adjustPanelDown","_getOriginBasedOnOption","distanceBelowViewport","distanceAboveViewport","items","panelHeight","selectedOptionOffset","i8","MatFormFieldModule","tab_r4","_r0","ctx_r14","_r18","ctx_r17","ctx_r19","_MAT_INK_BAR_POSITIONER","_MAT_INK_BAR_POSITIONER_FACTORY","offsetLeft","MatInkBar","_inkBarPositioner","alignToElement","inkBar","hide","MAT_TAB_CONTENT","MatTabContent","MAT_TAB_LABEL","MAT_TAB","MatTabLabel","CdkPortal","viewContainerRef","_closestTab","_MatTabBase","MAT_TAB_GROUP","MatTab","_closestTabGroup","textLabel","_contentPortal","templateLabel","_setTemplateLabelInput","_explicitContent","_implicitContent","matTabsAnimations","translateTab","minHeight","MatTabBodyPortal","CdkPortalOutlet","componentFactoryResolver","_host","_centeringSub","_leavingSub","_beforeCentering","_isCenterPosition","isCentering","_afterLeavingCenter","preserveContent","MatTabBody","_MatTabBodyBase","_dirChangeSubscription","_translateTabComplete","_onCentering","_onCentered","_computePositionAnimationState","_positionIndex","_computePositionFromOrigin","_onTranslateTabStarted","clientHeight","_getLayoutDirection","MAT_TABS_CONFIG","_MatTabLabelWrapperBase","MatTabLabelWrapper","getOffsetLeft","getOffsetWidth","passiveEventListenerOptions","normalizePassiveListenerOptions","passive","MatPaginatedTabHeader","_scrollDistance","_selectedIndexChanged","_showPaginationControls","_disableScrollAfter","_disableScrollBefore","_stopScrolling","_disablePagination","selectFocusedIndex","indexFocused","_stopInterval","disablePagination","_previousPaginator","_handlePaginatorPress","_nextPaginator","dirChange","resize","realign","updatePagination","_alignInkBarToSelectedTab","_items","_itemsResized","_getMaxScrollDistance","newFocusIndex","_setTabFocus","ResizeObserver","tabItems","Observable","resizeObserver","observe","disconnect","contentRect","_tabLabelCount","_scrollToLabel","_checkScrollingControls","_scrollDistanceChanged","_updateTabScrollPosition","focusIndex","_itemSelected","_onContentChanges","_currentTextContent","_checkPaginationEnabled","tab","containerEl","_tabListContainer","scrollLeft","scrollWidth","scrollDistance","translateX","_tabList","TRIDENT","EDGE","_scrollTo","_scrollHeader","scrollAmount","_handlePaginatorClick","labelIndex","selectedLabel","viewLength","labelBeforePos","labelAfterPos","_tabListInner","beforeVisiblePos","afterVisiblePos","isEnabled","selectedItem","selectedLabelWrapper","_inkBar","mouseEvent","button","timer","maxScrollDistance","distance","_MatTabHeaderBase","_disableRipple","MatTabHeader","_c6","_c7","MatTabChangeEvent","_MatTabGroupMixinBase","_MatTabGroupBase","defaultConfig","_tabs","_indexToSelect","_lastFocusedTabIndex","_tabBodyWrapperHeight","_tabsSubscription","_tabLabelSubscription","_dynamicHeight","_preserveContent","selectedIndexChange","focusChange","selectedTabChange","dynamicHeight","contentTabIndex","_contentTabIndex","backgroundColor","_backgroundColor","indexToSelect","_clampTabIndex","isFirstRun","_createChangeEvent","wrapper","_tabBodyWrapper","_subscribeToAllTabChanges","_subscribeToTabLabels","selectedTab","_allTabs","realignInkBar","_tabHeader","focusTab","_focusChanged","_getTabLabelId","_getTabContentId","_setTabBodyWrapperHeight","tabHeight","_removeTabBodyWrapperHeight","tabHeader","_getTabIndex","_tabFocusChanged","MatTabGroup","_c8","_c9","i1$2","_MatTabNavBase","updateActiveLink","tabPanel","_activeTabId","_getRole","getAttribute","MatTabNav","MatTabLink","attrs","_MatTabLinkMixinBase","_MatTabLinkBase","_tabNavBar","_isActive","animation","enterDuration","exitDuration","click","_getAriaControls","_this$_tabNavBar$tabP","_getAriaSelected","_getAriaCurrent","tabNavBar","focusMonitor","_tabLinkRipple","MatTabNavPanel","MatTabsModule","ObserversModule","_r7","ctx_r13","_r17","ctx_r16","ctx_r20","ctx_r21","_r2","ctx_r1","ChromeFieldsComponent","onChange","borderRadius","border","boxShadow","marginTop","toggleViews","handleChange","isValidHex","disableAlpha","ChromeComponent","ColorWrap","circle","pointer","afterValidChange","activeBackground","handleValueChange","ColorChromeModule","AlphaModule","CheckboardModule","EditableInputModule","HueModule","SaturationModule","checkboardCache","getCheckerboard","c1","c2","checkboard","render","canvas","getContext","fillStyle","fillRect","translate","toDataURL","CheckboardComponent","gridStyles","CoordinatesDirective","el","coordinatesChange","mousechange","mouseListening","mousemove","isTouch","mouseup","mousedown","sub","containerWidth","clientWidth","containerHeight","pageXOffset","pageYOffset","clientX","clientY","CoordinatesModule","AlphaComponent","pointerLeft","pointerTop","gradient","simpleCheckForValidColor","checked","passed","keysToCheck","letter","oldHue","ColorMode","HEX","HSL","HSV","RGB","colorChange","onChangeComplete","onSwatchHover","_onChangeCompleteSubscription","_onSwatchHoverSubscription","isDevMode","setState","currentColor","handleSwatchHover","ColorWrapModule","EditableInputComponent","wrapStyle","wrap","inputStyle","labelStyle","dragLabel","cursor","handleFocus","handleFocusOut","blurValue","handleKeydown","stringValue","arrowOffset","handleKeyup","ev","handleDrag","handleMousedown","movementX","dragMax","HueComponent","hidePointer","RaisedComponent","zDepth","radius","RaisedModule","SaturationComponent","saturation","bright","SwatchComponent","focusStyle","onHover","divStyles","focusStyles","inFocus","currentStyles","handleHover","handleClick","SwatchModule","ShadeComponent","ShadeModule"],"sourceRoot":"webpack:///","sources":["./src/app/modules/ui-components/components/custom-color-picker/custom-color-picker.component.html","./src/app/modules/ui-components/components/custom-color-picker/custom-color-picker.component.ts","./src/app/modules/main-application/boards/boards-create/boards-create.component.html","./src/app/modules/main-application/boards/boards-create/boards-create.component.ts","./src/app/modules/main-application/boards/services/board.service.ts","./src/app/services/contractors.service.ts","./src/app/modules/main-application/companies/effects/companies.effects.ts","./src/app/modules/main-application/companies/companies-store.module.ts","./src/app/modules/main-application/dashboards/components/dashboard-user-header/dashboard-user-header.component.html","./src/app/modules/main-application/dashboards/components/dashboard-user-header/dashboard-user-header.component.ts","./src/app/modules/main-application/dashboards/selectors/dashboard-filter.selectors.ts","./src/app/modules/main-application/delinquencies/models/delinquency-fields.enum.ts","./src/app/modules/main-application/inspections/components/inspections-base.component.ts","./src/app/modules/main-application/inspections/models/inspection-step.model.ts","./src/app/modules/main-application/inspections/models/inspection-area.model.ts","./src/app/modules/main-application/inspections/models/inspection.model.ts","./src/app/modules/main-application/inspections/components/send-inspection/send-inspection.component.ts","./src/app/modules/main-application/inspections/components/send-inspection/send-inspection.component.html","./src/app/modules/main-application/inspections/services/inspection.service.ts","./node_modules/@angular/material/fesm2020/badge.mjs","./node_modules/@angular/material/fesm2020/list.mjs","./node_modules/@angular/material/fesm2020/paginator.mjs","./node_modules/@angular/material/fesm2020/sidenav.mjs","./node_modules/@angular/cdk/fesm2020/stepper.mjs","./node_modules/@angular/material/fesm2020/stepper.mjs","./node_modules/@angular/material/fesm2020/toolbar.mjs","./src/app/modules/ui-components/components/idle-time/idle-time.module.ts","./src/app/services/notification-rest.service.ts","./src/app/modules/main-application/notifications/effects/notifications.effects.ts","./src/app/modules/main-application/notifications/notifications.module.ts","./src/app/modules/ui-components/components/notification-ring/components/notification-ring-item/notification-ring-item.module.ts","./src/app/modules/ui-components/components/notification-ring/notification-ring.module.ts","./src/app/modules/shared/functions/get-dashboard-mode.function.ts","./src/app/modules/main-application/notifications/services/notifications.service.ts","./node_modules/ngx-device-detector/fesm2020/ngx-device-detector.mjs","./src/app/modules/main-application/application-menu/side-panel-section-item/side-panel-section-item.component.html","./src/app/modules/main-application/application-menu/side-panel-section-item/side-panel-section-item.component.ts","./src/app/modules/main-application/application-menu/side-panel-section/side-panel-section.component.html","./src/app/modules/main-application/application-menu/side-panel-section/side-panel-section.component.ts","./src/app/modules/main-application/application-menu/side-panel/side-panel.component.html","./src/app/modules/main-application/application-menu/side-panel/side-panel.component.ts","./src/app/modules/shared/enums/entity-type.ts","./src/app/modules/shared/constants/entity-type-list.const.ts","./src/app/modules/ui-components/components/notification-ring/components/notification-ring-item/notification-ring-item.component.html","./src/app/modules/ui-components/components/notification-ring/components/notification-ring-item/notification-ring-item.component.ts","./src/app/modules/ui-components/components/notification-ring/notification-ring.component.html","./src/app/modules/ui-components/components/notification-ring/notification-ring.component.ts","./src/app/modules/main-application/application-menu/property-selector/property-selector.component.ts","./src/app/modules/main-application/application-menu/property-selector/property-selector.component.html","./src/app/modules/main-application/application-menu/breadcrumb-item/breadcrumb-item.component.ts","./src/app/modules/main-application/application-menu/breadcrumb-item/breadcrumb-item.component.html","./src/app/modules/main-application/application-menu/top-panel/top-panel.component.html","./src/app/modules/main-application/application-menu/top-panel/top-panel.component.ts","./src/app/modules/main-application/application-menu/application-menu.component.html","./src/app/modules/main-application/application-menu/application-menu.component.ts","./src/app/modules/main-application/main-application.routing.module.ts","./src/app/modules/main-application/main-application.module.ts","./src/app/modules/main-application/notifications/actions/notifications.actions.ts","./src/app/modules/main-application/notifications/reducers/notifications.reducer.ts","./src/app/modules/main-application/notifications/selectors/notifications.selectors.ts","./src/app/modules/main-application/portfolio/components/unit-details/config/enums/unit-details-component-form.ts","./src/app/modules/main-application/portfolio/components/unit-details/abstract/unit-details.abstract.ts","./src/app/modules/main-application/portfolio/components/unit-details/components/unit-details-pictures-section/unit-details-pictures-section.component.ts","./src/app/modules/main-application/portfolio/components/unit-details/components/unit-details-pictures-section/unit-details-pictures-section.component.html","./src/app/modules/main-application/portfolio/components/unit-details/components/unit-details-property-section/unit-details-property-section.component.html","./src/app/modules/main-application/portfolio/components/unit-details/components/unit-details-property-section/unit-details-property-section.component.ts","./src/app/modules/main-application/portfolio/components/unit-details/components/unit-details-description-section/unit-details-description-section.component.html","./src/app/modules/main-application/portfolio/components/unit-details/components/unit-details-description-section/unit-details-description-section.component.ts","./src/app/modules/main-application/portfolio/components/unit-details/components/unit-details-inspections/unit-details-inspections.component.html","./src/app/modules/main-application/portfolio/components/unit-details/components/unit-details-inspections/unit-details-inspections.component.ts","./src/app/modules/main-application/portfolio/components/unit-details/unit-details.component.html","./src/app/modules/main-application/portfolio/components/unit-details/unit-details.component.ts","./src/app/modules/main-application/space-template/store/space-template.effects.ts","./src/app/modules/main-application/space-template/store/space-template-store.module.ts","./src/app/modules/main-application/template/store/template.selectors.ts","./src/app/modules/main-application/turnovers/components/sections/turnover-date-range/turnover-date-range.module.ts","./src/app/modules/shared/constants/file-extensions.const.ts","./src/app/modules/shared/constants/move-out-type-list.const.ts","./src/app/modules/shared/constants/side-panel-config.const.ts","./src/app/modules/ui-components/components/custom-tooltip/custom-tooltip.module.ts","./src/app/modules/shared/directives/directives.module.ts","./src/app/modules/shared/directives/have-permission.directive.ts","./src/app/modules/shared/directives/last-element.directive.ts","./src/app/modules/shared/directives/sort-header.directive.ts","./src/app/modules/shared/enums/bid-status-type.ts","./src/app/modules/shared/enums/move-out-type.enum.ts","./src/app/modules/shared/enums/threshold-type.ts","./src/app/modules/shared/functions/check-user-email-domain.ts","./src/app/modules/shared/functions/format-address-to-string.function.ts","./src/app/modules/shared/functions/get-current-workflow-step.function.ts","./src/app/modules/shared/functions/get-time-in-step.function.ts","./src/app/modules/shared/functions/params-compare.function.ts","./src/app/modules/shared/interfaces/params-compare-item.ts","./src/app/modules/shared/functions/replace-comma-to-dot.function.ts","./src/app/modules/shared/guards/auth.guard.ts","./src/app/modules/shared/guards/home-redirect.guard.ts","./src/app/modules/shared/guards/permission-level.guard.ts","./src/app/modules/shared/guards/view-close.guard.ts","./src/app/modules/shared/interfaces/file-mime-types.ts","./src/app/modules/shared/pipes/board-currency.pipe.ts","./src/app/modules/shared/pipes/boolean-to-string.pipe.ts","./src/app/modules/shared/pipes/compact.pipe.ts","./src/app/modules/shared/pipes/compare-operator.pipe.ts","./src/app/modules/shared/pipes/custom-currency-short-with-suffix.pipe.ts","./src/app/modules/shared/pipes/custom-currency.pipe.ts","./src/app/modules/shared/pipes/date.pipe.ts","./src/app/modules/shared/pipes/days-ago.pipe.ts","./src/app/modules/shared/pipes/days-in-step.pipe.ts","./src/app/modules/shared/pipes/days-past.pipe.ts","./src/app/modules/shared/pipes/delinquency-group-invalid.pipe.ts","./src/app/modules/shared/pipes/delinquency-pristine-group.pipe.ts","./src/app/modules/shared/pipes/elapsed-date.pipe.ts","./src/app/modules/shared/pipes/elapsed-days-mid-range.pipe.ts","./src/app/modules/shared/pipes/enumeration-user.pipe.ts","./src/app/modules/shared/pipes/field-type.pipe.ts","./node_modules/mime/dist/types/other.js","./node_modules/mime/dist/types/standard.js","./node_modules/mime/dist/src/Mime.js","./node_modules/mime/dist/src/index.js","./src/app/modules/shared/pipes/file-mime-type.pipe.ts","./src/app/modules/shared/pipes/file-to-object-url.pipe.ts","./src/app/modules/shared/pipes/find-by-id.pipe.ts","./src/app/modules/shared/pipes/first.pipe.ts","./src/app/modules/shared/pipes/format-to-avatar.pipe.ts","./src/app/modules/shared/pipes/get-current-workflow-step.pipe.ts","./src/app/modules/shared/pipes/get-from-group.pipe.ts","./src/app/modules/shared/pipes/get-percentage-value.pipe.ts","./src/app/modules/shared/pipes/get-workflow-step.pipe.ts","./src/app/modules/shared/pipes/hours-past.pipe.ts","./src/app/modules/shared/pipes/humanize.pipe.ts","./src/app/modules/shared/pipes/is-odd.pipe.ts","./src/app/modules/shared/pipes/kanban-header-workflow-phase.pipe.ts","./src/app/modules/shared/pipes/kanban-header-workflow-step.pipe.ts","./src/app/modules/shared/pipes/kpi-header.pipe.ts","./src/app/modules/shared/pipes/kpi-task-value.pipe.ts","./src/app/modules/shared/pipes/kpi-value.pipe.ts","./src/app/modules/shared/pipes/label-available-day-in-step.pipe.ts","./src/app/modules/shared/pipes/label-day-in-step.pipe.ts","./src/app/modules/shared/pipes/label-day-since-step.pipe.ts","./src/app/modules/shared/pipes/lost-revenue.pipe.ts","./src/app/modules/shared/pipes/measure-type.pipe.ts","./src/app/modules/shared/pipes/mention-comment.pipe.ts","./src/app/modules/shared/pipes/not-empty-props-amount.pipe.ts","./src/app/modules/shared/pipes/number.pipe.ts","./src/app/modules/shared/pipes/parse-float.pipe.ts","./src/app/modules/shared/pipes/physical-address.pipe.ts","./src/app/modules/shared/pipes/is-save-general-role-disabled.pipe.ts","./src/app/modules/shared/pipes/is-submit-roles-and-units-disabled.pipe.ts","./src/app/modules/shared/pipes/properties-to-radio-input.pipe.ts","./src/app/modules/shared/pipes/safe-html.pipe.ts","./src/app/modules/shared/pipes/turnover-phase-to-status.pipe.ts","./src/app/modules/shared/functions/enumeration-list-to-key-value-map.ts","./src/app/modules/shared/pipes/workflow-phase-to-progress-value.pipe.ts","./src/app/modules/shared/pipes/bid-status-type.pipe.ts","./src/app/modules/shared/pipes/day-from-date.pipe.ts","./src/app/modules/shared/pipes/enum-value-to-display-text.pipe.ts","./src/app/modules/shared/pipes/is-include.pipe.ts","./src/app/modules/shared/pipes/replace-value.pipe.ts","./src/app/modules/shared/pipes/round-value.pipe.ts","./src/app/modules/shared/pipes/starts-with.pipe.ts","./src/app/modules/shared/pipes/task-table-subsection-result-count.pipe.ts","./src/app/modules/shared/pipes/to-fixed-value.pipe.ts","./src/app/modules/shared/pipes/pipes.module.ts","./src/app/modules/shared/pipes/pluralization.pipe.ts","./src/app/modules/shared/pipes/priority-css.pipe.ts","./src/app/modules/shared/pipes/priority-icon.pipe.ts","./src/app/modules/shared/pipes/priority-to-css-class.pipe.ts","./src/app/modules/shared/pipes/section-id.pipe.ts","./src/app/modules/shared/pipes/text-mask.pipe.ts","./src/app/modules/shared/pipes/threshold-configuration.pipe.ts","./src/app/modules/shared/pipes/threshold-priority-css.pipe.ts","./src/app/modules/shared/pipes/threshold-step-configuration.pipe.ts","./src/app/modules/shared/pipes/time-diff.pipe.ts","./src/app/modules/shared/functions/suffix.function.ts","./src/app/modules/shared/pipes/time-from-date.pipe.ts","./src/app/modules/shared/pipes/truncate-text.pipe.ts","./src/app/modules/shared/pipes/uppercase-first-letter-of-words-pipe.ts","./src/app/modules/shared/pipes/utc-date.pipe.ts","./src/app/modules/shared/pipes/value-length.pipe.ts","./src/app/modules/shared/pipes/valueIfNonZero.pipe.ts","./src/app/modules/shared/pipes/valueIfPositive.pipe.ts","./src/app/modules/shared/pipes/workflow-phase-done.pipe.ts","./src/app/modules/shared/pipes/workflow-phase-type.pipe.ts","./src/app/modules/shared/pipes/workflow-step-done.pipe.ts","./src/app/modules/shared/pipes/yesEmpty.pipe.ts","./src/app/modules/shared/selectors/route-state.selector.ts","./src/app/modules/shared/utils/extensions.ts","./src/app/modules/shared/validators/digits.validator.ts","./src/app/modules/ui-components/components/attachment-item/attachment-item.module.ts","./src/app/modules/ui-components/components/attachment/attachment.module.ts","./src/app/modules/ui-components/components/attachments-list/attachments-list.module.ts","./src/app/modules/ui-components/components/avatar/avatar.component.html","./src/app/modules/ui-components/components/avatar/avatar.component.ts","./src/app/modules/ui-components/components/avatar/avatar.module.ts","./src/app/modules/ui-components/components/avatar/services/avatar.service.ts","./src/app/modules/shared/functions/get-random-value.function.ts","./src/app/modules/ui-components/components/button/button.module.ts","./src/app/modules/ui-components/components/dashboard-container/dashboard-container.component.html","./src/app/modules/ui-components/components/dashboard-container/dashboard-container.component.ts","./src/app/modules/ui-components/components/date-dropdown/date-dropdown.module.ts","./src/app/modules/ui-components/components/divider/divider.module.ts","./src/app/modules/ui-components/components/empty-dashboard/empty-dashboard.component.ts","./src/app/modules/ui-components/components/empty-dashboard/empty-dashboard.component.html","./src/app/modules/ui-components/components/empty-data/empty-data.component.ts","./src/app/modules/ui-components/components/empty-data/empty-data.component.html","./src/app/modules/ui-components/components/icon/icon.module.ts","./src/app/modules/ui-components/components/input-area/input-area.module.ts","./src/app/modules/ui-components/components/input-error/input-error.module.ts","./src/app/modules/ui-components/components/input-file/input-file.module.ts","./src/app/modules/ui-components/components/input-type-file/input-type-file.module.ts","./src/app/modules/ui-components/components/input/input.module.ts","./src/app/modules/ui-components/components/picture/picture.component.html","./src/app/modules/ui-components/components/picture/picture.component.ts","./src/app/modules/ui-components/components/picture/picture.module.ts","./src/app/modules/ui-components/components/pill-list/pill-list.component.html","./src/app/modules/ui-components/components/pill-list/pill-list.component.ts","./src/app/modules/ui-components/components/pill-list/pill-list.module.ts","./src/app/modules/ui-components/components/radio-button-dropdown/radio-button-dropdown.module.ts","./src/app/modules/ui-components/components/radio-button/radio-button.module.ts","./src/app/modules/ui-components/components/read-only-field/read-only-field.module.ts","./src/app/modules/ui-components/components/search-input/search-input.module.ts","./src/app/modules/ui-components/components/select-tree/select-tree.module.ts","./src/app/modules/ui-components/components/table-empty-content/table-empty-content.module.ts","./src/app/modules/ui-components/components/table-status-toggle/table-status-toggle.module.ts","./src/app/modules/ui-components/components/user-select-dropdown/user-select-dropdown.module.ts","./src/app/modules/ui-components/directives/autoresize/autoresize.module.ts","./src/app/modules/ui-components/modals/add-vendor-user-modal/add-vendor-user-modal.module.ts","./src/app/modules/ui-components/modals/gallery-modal/gallery-modal.module.ts","./src/app/modules/ui-components/modals/info-modal/info-modal.module.ts","./src/app/modules/ui-components/modals/new-bulk-scope/new-bulk-scope.module.ts","./src/app/modules/ui-components/modals/next-step-assignee-modal/next-step-assignee-modal.module.ts","./src/app/modules/ui-components/modals/prompt-modal/prompt-modal.module.ts","./src/app/modules/ui-components/modals/ticket-preview-modal/ticket-preview-modal.module.ts","./src/app/modules/ui-components/modals/user-preview-modal/user-preview-modal.module.ts","./src/app/modules/ui-components/modals/add-vendor-modal/add-vendor-modal.module.ts","./src/app/modules/ui-components/modals/comment-too-long-modal/comment-too-long-modal.module.ts","./src/app/modules/ui-components/modals/confirmation-modal/confirmation-modal.module.ts","./src/app/modules/ui-components/modals/space-template-modal/space-template-modal.module.ts","./src/app/modules/ui-components/modals/turnover-punch-modal/turnover-punch-modal.module.ts","./src/app/modules/ui-components/modals/modals.module.ts","./src/app/modules/ui-components/modals/new-turnover-modal/new-turnover-modal.module.ts","./src/app/services/screen-wiper.service.ts","./node_modules/@ctrl/tinycolor/dist/module/util.js","./node_modules/@ctrl/tinycolor/dist/module/conversion.js","./node_modules/@ctrl/tinycolor/dist/module/css-color-names.js","./node_modules/@ctrl/tinycolor/dist/module/format-input.js","./node_modules/@ctrl/tinycolor/dist/module/index.js","./node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js","./node_modules/@microsoft/signalr/dist/esm/Errors.js","./node_modules/@microsoft/signalr/dist/esm/HttpClient.js","./node_modules/@microsoft/signalr/dist/esm/Loggers.js","./node_modules/@microsoft/signalr/dist/esm/Utils.js","./node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js","./node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js","./node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js","./node_modules/@microsoft/signalr/dist/esm/HeaderNames.js","./node_modules/@microsoft/signalr/dist/esm/AbortController.js","./node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js","./node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js","./node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js","./node_modules/@microsoft/signalr/dist/esm/HttpConnection.js","./node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js","./node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js","./node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js","./node_modules/@microsoft/signalr/dist/esm/Subject.js","./node_modules/@microsoft/signalr/dist/esm/HubConnection.js","./node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js","./node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js","./node_modules/@microsoft/signalr/dist/esm/ILogger.js","./node_modules/@microsoft/signalr/dist/esm/ITransport.js","./node_modules/@angular/material/fesm2020/autocomplete.mjs","./node_modules/@angular/material/fesm2020/card.mjs","./node_modules/@angular/material/fesm2020/chips.mjs","./node_modules/@angular/cdk/fesm2020/accordion.mjs","./node_modules/@angular/material/fesm2020/expansion.mjs","./node_modules/@angular/material/fesm2020/grid-list.mjs","./node_modules/@angular/material/fesm2020/select.mjs","./node_modules/@angular/material/fesm2020/tabs.mjs","./node_modules/ngx-color/fesm2020/ngx-color-chrome.mjs","./node_modules/ngx-color/fesm2020/ngx-color.mjs"],"sourcesContent":["
\n \n \n
{{ control.value }}
\n
\n \n
\n
\n\n \n\n\n\n
\n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, UntypedFormControl } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { distinctUntilChanged, tap } from 'rxjs/operators';\n\nimport { CustomControlAbstract } from '@app/components/abstract/custom-control.abstract';\nimport { EIcon } from '@shared/enums/icon.enum';\n\n@UntilDestroy()\n@Component({\n selector: 'app-custom-color-picker',\n templateUrl: './custom-color-picker.component.html',\n styleUrls: ['./custom-color-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomColorPickerComponent\n extends CustomControlAbstract\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n readonly labelOutsideDefaultCss = 'nowrap body-small-bold';\n\n @Input() selectCss = 'body-small text-color dark';\n @Input() set labelCss(value: string) {\n this._labelCss = value;\n }\n get labelCss(): string {\n if (this._labelCss) return this._labelCss;\n\n return this.labelOutsideDefaultCss;\n }\n\n private _valueCss: string;\n @Input() set valueCss(value) {\n this._valueCss = value;\n }\n get valueCss() {\n if (this._valueCss) {\n return this._valueCss;\n }\n return 'ellipsis text-color dark body-small';\n }\n @Input() containerCss = 'display-flex align-items-center';\n @Input() label = '';\n @Input() icon: EIcon;\n @Input() iconCss = 'dropdown-icon';\n @Input() iconTooltip = '';\n @Input() attrPlaceholder = '';\n @Input() attrDisable = false;\n @Input() markAsInvalid = false;\n @Input() errorSection = true;\n\n _labelCss = '';\n _labelElement: ElementRef;\n\n @ViewChild('labelElement', { static: false }) set content(value: ElementRef) {\n if (!value) return;\n\n this._labelElement = value;\n this.cdr.detectChanges();\n }\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnInit(): void {\n if (this.ngControl?.control) {\n this.control = this.ngControl?.control as UntypedFormControl;\n }\n\n this.control.valueChanges\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(value => this.onChanged(value))\n )\n .subscribe();\n\n this.control.statusChanges.pipe(untilDestroyed(this)).subscribe(status => this.checkControlStatus(status));\n\n if (this.ngControl?.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n this.checkStatus();\n }\n }\n\n writeValue(value: any): void {\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n }\n\n ngOnDestroy(): void {}\n}\n","

{{ editMode ? 'Edit' : 'Add' }} board

\n
\n \n
\n
\n \n \n
\n\n
\n \n
\n\n
\n
\n
\n \n\n
\n\n \n\n \n\n \n\n \n
\n\n \n
\n
\n
\n
\n \n
\n \n \n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { last, remove } from 'lodash';\nimport { BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\nimport {\n Board,\n BoardConfiguration,\n BoardOutputBehaviourList,\n BoardOutputTypeList,\n BoardSourceTypeList,\n BoardTypeList,\n ProgressTypeList,\n RestBoardModel,\n disallowSourceTypeOutputTypeMap,\n} from '@main-application/boards/interfaces/board';\nimport { selectPortfolios } from '@portfolio/selectors/portfolio.selectors';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { ButtonType } from '@shared/enums/button-type';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestPortfolioModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { EnumerationValuePipe } from '@shared/pipes/enumeration-value.pipe';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport {\n BoardOutputBehaviour,\n BoardOutputType,\n BoardProgressType,\n BoardSourceType,\n BoardType,\n} from '../interfaces/board.enums';\nimport { BoardService } from '../services/board.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-boards-create',\n templateUrl: './boards-create.component.html',\n styleUrls: ['./boards-create.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BoardsCreateComponent implements OnInit {\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private dialogRef: MatDialogRef,\n private formBuilder: FormBuilder,\n private boardService: BoardService,\n private store: Store<{}>,\n private cdr: ChangeDetectorRef,\n private snackbarService: SnackbarService,\n private enumerationValuePipe: EnumerationValuePipe,\n @Inject(MAT_DIALOG_DATA) public data?: BoardConfiguration\n ) {}\n\n private boardActionSubject = new BehaviorSubject(false);\n inProgress$ = this.boardActionSubject.asObservable();\n ButtonType = ButtonType;\n form = this.formBuilder.group({\n selectedPortfolioIds: [this.data?.selectedPortfolioIds],\n boardType: [this.data?.boardType, [Validators.required]],\n name: [this.data?.name, [Validators.required]],\n progressType: [this.data?.progressType, [Validators.required]],\n datasource: [this.data?.datasource, [Validators.required]],\n outputAction: [this.data?.outputAction, []],\n outputBehaviour: [this.data?.outputBehaviour, []],\n boardCellColor: [this.data?.boardCellColor ?? '#ffffff'],\n });\n progressTypeList = ProgressTypeList;\n boardSourceTypeList = BoardSourceTypeList;\n boardTypeList = BoardTypeList;\n boardOutputTypeList = BoardOutputTypeList;\n boardOutputBehaviorList = BoardOutputBehaviourList;\n userPortfolios: IRadioButtonOption[] = [];\n editMode: boolean;\n isSettingsOpened = false;\n\n ngOnInit(): void {\n this.editMode = !!this.data;\n this.form.patchValue(this.data);\n if (!this.data?.selectedPortfolioIds?.length) {\n this.form.controls.selectedPortfolioIds.setValue([-1]);\n }\n this.store\n .select(selectPortfolios)\n .pipe(\n untilDestroyed(this),\n filter(portfolios => !!portfolios?.length),\n tap((portfolios: RestPortfolioModel[]) => {\n this.userPortfolios = [\n {\n value: -1,\n label: 'All portfolios',\n sort: 0,\n },\n ];\n this.userPortfolios.push(\n ...portfolios.map>(item => {\n return {\n value: item.id,\n label: item.name,\n };\n })\n );\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.form.controls.selectedPortfolioIds.valueChanges\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(value => {\n if (value?.length > 1 && last(value) > 0) {\n remove(value, x => x < 0);\n this.form.controls.selectedPortfolioIds.setValue(value);\n }\n if (value?.length > 1 && last(value) < 0) {\n this.form.controls.selectedPortfolioIds.setValue([-1]);\n }\n if (!value?.length) {\n this.form.controls.selectedPortfolioIds.setValue([-1]);\n }\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.form.controls.boardType.valueChanges\n .pipe(\n distinctUntilChanged(),\n untilDestroyed(this),\n tap(value => {\n if (\n !this.form.value.name ||\n this.boardTypeList\n .flat()\n .map(e => e.label)\n .includes(this.form.value.name)\n ) {\n const selected = this.boardTypeList.flat().find(x => x.value === value);\n if (selected) {\n this.form.controls.name.setValue(selected.label);\n\n switch (value) {\n case BoardType.MakeReady:\n this.form.controls.progressType.setValue(BoardProgressType.UpdateMakeReadyProgressBar);\n this.form.controls.datasource.setValue(BoardSourceType.MakeReadyUnits);\n this.form.controls.outputAction.setValue(BoardOutputType.SendToApproval);\n this.form.controls.outputBehaviour.setValue(BoardOutputBehaviour.Automatically);\n this.form.controls.boardCellColor.setValue('#ffffff');\n break;\n case BoardType.Reno:\n this.form.controls.progressType.setValue(BoardProgressType.UpdateRENOProgressBar);\n this.form.controls.datasource.setValue(BoardSourceType.RenoUnits);\n this.form.controls.outputAction.setValue(BoardOutputType.SendToApproval);\n this.form.controls.outputBehaviour.setValue(BoardOutputBehaviour.Automatically);\n this.form.controls.boardCellColor.setValue('#f5fbfb');\n break;\n case BoardType.Marketing:\n this.form.controls.progressType.setValue(BoardProgressType.None);\n this.form.controls.datasource.setValue(BoardSourceType.UnleasedUnits);\n this.form.controls.outputAction.setValue(BoardOutputType.None);\n this.form.controls.outputBehaviour.setValue(null);\n this.form.controls.boardCellColor.setValue('#fafffa');\n break;\n case BoardType.Eviction:\n this.form.controls.progressType.setValue(BoardProgressType.UpdateNoticeProgressBar);\n this.form.controls.datasource.setValue(BoardSourceType.UnitsInNoticeUnderEviction);\n this.form.controls.outputAction.setValue(BoardOutputType.SendToMoveOut);\n this.form.controls.outputBehaviour.setValue(BoardOutputBehaviour.Automatically);\n this.form.controls.boardCellColor.setValue('#FFF7F7');\n break;\n case BoardType.MoveIn:\n this.form.controls.progressType.setValue(BoardProgressType.UpdateMoveInProgressBar);\n this.form.controls.datasource.setValue(BoardSourceType.UnitsInMoveIn);\n this.form.controls.outputAction.setValue(BoardOutputType.SendToArchive);\n this.form.controls.outputBehaviour.setValue(BoardOutputBehaviour.Automatically);\n this.form.controls.boardCellColor.setValue('#ffffff');\n break;\n case BoardType.MoveOut:\n this.form.controls.progressType.setValue(BoardProgressType.UpdateMoveOutProgressBar);\n this.form.controls.datasource.setValue(BoardSourceType.MoveOutUnits);\n this.form.controls.outputAction.setValue(BoardOutputType.SendToMakeReady);\n this.form.controls.outputBehaviour.setValue(BoardOutputBehaviour.Automatically);\n this.form.controls.boardCellColor.setValue('#ffffff');\n break;\n case BoardType.Approval:\n this.form.controls.progressType.setValue(BoardProgressType.UpdateApprovalProgressBar);\n this.form.controls.datasource.setValue(BoardSourceType.NonPmsUnits);\n this.form.controls.outputAction.setValue(BoardOutputType.SendToArchive);\n this.form.controls.outputBehaviour.setValue(BoardOutputBehaviour.Automatically);\n this.form.controls.boardCellColor.setValue('#ffffff');\n break;\n case BoardType.NonPms:\n this.form.controls.progressType.setValue(BoardProgressType.None);\n this.form.controls.datasource.setValue(BoardSourceType.NonPmsUnits);\n this.form.controls.outputAction.setValue(BoardOutputType.SendToArchive);\n this.form.controls.outputBehaviour.setValue(BoardOutputBehaviour.Automatically);\n this.form.controls.boardCellColor.setValue('#fdfdf2');\n break;\n case BoardType.Custom:\n this.form.controls.progressType.setValue(BoardProgressType.None);\n this.form.controls.datasource.setValue(undefined);\n this.form.controls.outputAction.setValue(undefined);\n this.form.controls.outputBehaviour.setValue(BoardOutputBehaviour.Automatically);\n this.form.controls.boardCellColor.setValue('#ffffff');\n this.isSettingsOpened = true;\n }\n }\n }\n\n switch (value) {\n case BoardType.MakeReady:\n case BoardType.Reno:\n this.form.controls.outputAction.setValidators(Validators.required);\n this.form.controls.outputAction.updateValueAndValidity();\n break;\n case BoardType.Marketing:\n this.form.controls.outputAction.clearValidators();\n this.form.controls.outputAction.updateValueAndValidity();\n break;\n }\n\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n if (!this.editMode) {\n this.form.controls.boardType.setValue(BoardType.MakeReady);\n }\n }\n\n toggleAdvancedSettings() {\n this.isSettingsOpened = !this.isSettingsOpened;\n }\n\n ok() {\n if (\n this.form.value.outputBehaviour === BoardOutputBehaviour.Automatically &&\n this.form.value.datasource != null &&\n this.form.value.outputAction != null &&\n disallowSourceTypeOutputTypeMap[this.form.value.datasource] === this.form.value.outputAction\n ) {\n this.snackbarService.error(\n `Turns cannot auto-progress to the same step they started in. Either set “Remove rows” to \"manual\" or choose an ending destination that is not \"${this.enumerationValuePipe.transform(\n this.form.value.outputAction,\n BoardOutputTypeList\n )}\"`\n );\n return;\n }\n\n if (this.form.valid) {\n this.boardActionSubject.next(true);\n if (this.editMode) {\n this.dialogRef.close({\n ...this.data,\n ...this.form.value,\n });\n return;\n }\n const board = new Board(Object.assign({}, this.data, this.form.value));\n this.boardService.add(new RestBoardModel(board)).subscribe(id => {\n this.router.navigate([AppRoutes.BOARDS, id], { relativeTo: this.activatedRoute });\n this.dialogRef.close();\n });\n } else {\n this.form.markAllAsTouched();\n }\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, ReplaySubject, filter, first, of, switchMap, tap } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { TurnoversService } from '@app/services/turnovers.service';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { RestTurnoverTaskModel } from '@shared/interfaces/turnover.interface';\nimport { selectUserPermissionLevel } from '@shared/selectors/user.selectors';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nimport { RestBoardModel } from '../interfaces/board';\n\n@Injectable({ providedIn: 'root' })\nexport class BoardService {\n private readonly route = 'boards/';\n private _list$: ReplaySubject;\n boardRemoving$ = new BehaviorSubject(0);\n\n constructor(private service: RestapiService, private modalsService: ModalsService, private store: Store<{}>) {}\n\n getTurnoverList(boardId: number, portfolioId: number) {\n return this.service.getData(\n `turnovers/bb/${boardId}/${portfolioId}`,\n TurnoversService.fixTimezoneForTurnoverTaskModel\n );\n }\n\n getList() {\n if (!this._list$ || this._list$.closed) {\n this._list$ = new ReplaySubject(1);\n this.getListInternal().subscribe({\n next: list => this._list$.next(list),\n error: error => this._list$.error(error),\n });\n }\n return this._list$.asObservable();\n }\n\n refresh() {\n if (this._list$ && !this._list$.closed) {\n return this.getListInternal().pipe(tap(list => this._list$.next(list)));\n }\n return of(null);\n }\n\n private updateSavedData(updateFunction: (list: RestBoardModel[]) => RestBoardModel[]) {\n if (!this._list$ || this._list$.closed) {\n return;\n }\n this._list$.pipe(first()).subscribe(list => {\n const updatedList = updateFunction(list);\n this._list$.next(updatedList);\n });\n }\n\n private getListInternal() {\n return this.service.getData(this.route + 'list');\n }\n\n getListByPortfolio(portfolioId: number) {\n return this.service.getData(this.route + 'getByPortfolio/' + portfolioId);\n }\n\n add(entity: RestBoardModel) {\n return this.service\n .post(this.route + 'add', entity)\n .pipe(tap(id => this.updateSavedData(list => [...list, { ...entity, id: id }])));\n }\n\n update(entity: RestBoardModel) {\n return this.service.post(this.route + 'update', entity).pipe(\n tap(() =>\n this.updateSavedData(list => {\n const index = list.findIndex(e => e.id === entity.id);\n const copyOfArray = [...list];\n if (index >= 0) {\n copyOfArray.splice(index, 1, entity);\n }\n return copyOfArray;\n })\n )\n );\n }\n\n delete(id: number) {\n return this.service\n .post(this.route + `delete/${id}`)\n .pipe(tap(() => this.updateSavedData(list => list.filter(e => e.id != id))));\n }\n\n removeBoard(boardName: string, boardId: number) {\n return this.store.select(selectUserPermissionLevel).pipe(\n first(),\n filter(\n (permissionLevel: PermissionLevelType[]) =>\n !!permissionLevel?.length && checkPermissionLevel(permissionLevel, PermissionLevelType.Board_Edit)\n ),\n switchMap(() =>\n this.modalsService\n .openConfirmationModal({\n title: `Delete board: \"${boardName}\"?`,\n content: `Board will be deleted permanently along with its data.`,\n confirmColor: 'warn',\n })\n .afterClosed()\n .pipe(\n first(),\n filter(result => result === DialogResult.Success),\n tap(() => {\n this.boardRemoving$.next(boardId);\n }),\n switchMap(() => this.delete(boardId))\n )\n )\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { RestContractorModel } from '@shared/interfaces/contractors.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ContractorsService {\n constructor(private restApiService: RestapiService) {}\n\n getUnassignedContractorsList(): Observable {\n return this.restApiService.getData(`Contractors/unassigned`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, exhaustMap, map, mergeMap, switchMap } from 'rxjs/operators';\n\nimport { AdminPanelService } from '@app/services/admin-panel.service';\nimport { CompaniesService } from '@app/services/companies.service';\nimport { ContractorsService } from '@app/services/contractors.service';\nimport { UserService } from '@app/services/user.service';\nimport {\n addAddressToCompany,\n addAddressToCompanyFailed,\n addAddressToCompanySuccess,\n addCompany,\n addCompanyFailed,\n addCompanySuccess,\n addCompanyWithOwner,\n addCompanyWithOwnerFailure,\n addCompanyWithOwnerSuccess,\n addEmployeeToCompany,\n addEmployeeToCompanyFailed,\n addEmployeeToCompanySuccess,\n deleteCompany,\n deleteCompanyFailed,\n deleteCompanySuccess,\n deleteEmployeeFromCompany,\n deleteEmployeeFromCompanyFailed,\n deleteEmployeeFromCompanySuccess,\n getCompaniesList,\n getCompaniesListFailed,\n getCompaniesListSuccess,\n getCompany,\n getCompanyFailed,\n getCompanySuccess,\n getContractorList,\n getContractorListFailed,\n getContractorListSuccess,\n updateAddressInCompany,\n updateAddressInCompanyFailed,\n updateAddressInCompanySuccess,\n updateCompany,\n updateCompanyFailed,\n updateCompanySuccess,\n} from '@companies/actions/companies.actions';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Injectable()\nexport class CompaniesEffects {\n constructor(\n private actions$: Actions,\n private snackbarService: SnackbarService,\n private userService: UserService,\n private adminService: AdminPanelService,\n private companiesService: CompaniesService,\n private contractorsService: ContractorsService\n ) {}\n\n getCompaniesList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getCompaniesList),\n exhaustMap(action =>\n this.companiesService.getCompanyList().pipe(\n map(list => getCompaniesListSuccess({ companyList: list || [] })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingCompanyList);\n return of(getCompaniesListFailed());\n })\n )\n )\n )\n );\n\n getCompany$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getCompany),\n switchMap(action =>\n this.companiesService.getCompany(action.companyId).pipe(\n map(companyModel => getCompanySuccess({ companyModel })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingCompanyData);\n return of(getCompanyFailed());\n })\n )\n )\n )\n );\n\n addCompany$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addCompany),\n mergeMap(action =>\n this.companiesService.addNewCompany(action.companyModel).pipe(\n mergeMap(companyModel => [addCompanySuccess({ companyModel })]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.AddingNewVendor);\n return of(addCompanyFailed());\n })\n )\n )\n )\n );\n\n addCompanyWithOwner$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addCompanyWithOwner),\n mergeMap(action =>\n this.userService.inviteUser(action.user).pipe(\n mergeMap(user =>\n this.companiesService\n .addNewCompany({\n ...action.companyModel,\n contactPersonId: user.id,\n })\n .pipe(\n mergeMap(company =>\n this.companiesService\n .addEmployeeToCompany({ companyId: company.id, userIds: [user.id] })\n .pipe(map(() => company))\n ),\n mergeMap(company =>\n this.adminService\n .setUserToGeneralRole([{ roleId: action.roleId, userId: user.id }])\n .pipe(map(() => company))\n )\n )\n )\n )\n ),\n map(company => addCompanyWithOwnerSuccess({ company })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.AddingNewVendor);\n return of(addCompanyWithOwnerFailure());\n })\n )\n );\n\n updateCompany$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateCompany),\n mergeMap(action =>\n this.companiesService.updateCompany(action.companyModel).pipe(\n mergeMap(companyModel => [updateCompanySuccess({ companyModel })]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingVendor);\n return of(updateCompanyFailed());\n })\n )\n )\n )\n );\n\n deleteCompany$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteCompany),\n mergeMap(action =>\n this.companiesService.deleteCompany(action.companyId).pipe(\n mergeMap(() => [deleteCompanySuccess(), getCompaniesList()]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.DeletingVendor);\n return of(deleteCompanyFailed());\n })\n )\n )\n )\n );\n\n addEmployeeToCompany$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addEmployeeToCompany),\n mergeMap(action =>\n this.companiesService.addEmployeeToCompany(action.updateEmployeeItem).pipe(\n mergeMap(companyList => [\n addEmployeeToCompanySuccess(),\n getCompany({ companyId: action.updateEmployeeItem.companyId }),\n getContractorList(),\n ]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.AddingEmployee);\n return of(addEmployeeToCompanyFailed());\n })\n )\n )\n )\n );\n\n deleteEmployeeFromCompany$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteEmployeeFromCompany),\n mergeMap(action =>\n this.companiesService.deleteEmployeeFromCompany(action.updateEmployeeItem).pipe(\n mergeMap(companyList => [\n deleteEmployeeFromCompanySuccess(),\n getCompany({ companyId: action.updateEmployeeItem.companyId }),\n getContractorList(),\n ]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.DeletingEmployee);\n return of(deleteEmployeeFromCompanyFailed());\n })\n )\n )\n )\n );\n\n getContractorList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getContractorList),\n exhaustMap(() => {\n return this.contractorsService.getUnassignedContractorsList().pipe(\n map(contractors => getContractorListSuccess({ contractors })),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingVendors);\n return of(getContractorListFailed());\n })\n );\n })\n )\n );\n\n addAddressToCompany$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addAddressToCompany),\n mergeMap(action => {\n return this.companiesService.addAddressToCompany(action.postCompanyAddressModel).pipe(\n mergeMap(contractors => [\n addAddressToCompanySuccess(),\n getCompany({ companyId: action.postCompanyAddressModel.companyId }),\n ]),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.AddingAddress);\n return of(addAddressToCompanyFailed());\n })\n );\n })\n )\n );\n\n updateAddressInCompany$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateAddressInCompany),\n mergeMap(action => {\n return this.companiesService.updateAddressInCompany(action.restAddressModel, action.companyId).pipe(\n mergeMap(contractors => [updateAddressInCompanySuccess(), getCompany({ companyId: action.companyId })]),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingAddress);\n return of(updateAddressInCompanyFailed());\n })\n );\n })\n )\n );\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\n\nimport { CompaniesEffects } from '@companies/effects/companies.effects';\nimport * as fromCompanies from '@companies/reducers/companies.reducer';\n\n@NgModule({\n imports: [\n CommonModule,\n StoreModule.forFeature(fromCompanies.companiesFeatureKey, fromCompanies.reducer),\n EffectsModule.forFeature([CompaniesEffects]),\n ],\n})\nexport class CompaniesStoreModule {}\n","\n \n \n \n Back\n \n \n
\n \n
\n\n\n\n \n\n\n\n
\n
\n

Hello, {{ userData?.firstName || '' }}! 👋

\n \n \n \n {{ userData.id === assignee.value ? 'You have ' : '' }} {{ data.myTasksTurnovers }}\n {{ data.myTasksTurnovers === 1 ? 'turn' : 'turns' }} and {{ data.myTasksTickets }}\n {{ data.myTasksTickets === 1 ? 'ticket' : 'tickets' }}.\n \n {{ data.staleTurnovers }} stale\n \n \n \n {{ data.lateTurnovers }} late\n \n \n
\n \n
\n
\n \n
\n \n
\n\n\n

{{ headerValue || '' }}!

\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n} from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\nimport { setDashboardFilter } from '@dashboards/actions/dashboard-filter.actions';\nimport { selectDashboardFilterState } from '@dashboards/selectors/dashboard-filter.selectors';\nimport {\n selectLateTurnoversCount,\n selectMyTasksLoading,\n selectMyTasksTicketsCount,\n selectMyTasksTurnoversCount,\n selectStaleTurnoversCount,\n} from '@dashboards/selectors/dashboards.selectors';\nimport { selectActiveUsers } from '@main-application/administration/selectors/administration.selectors';\nimport { DashboardsAbstract } from '@main-application/dashboards/components/abstract/dashboards.abstract';\nimport { PriorityType } from '@shared/enums/priority-type';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { selectUserData } from '@shared/selectors/user.selectors';\n\n@UntilDestroy()\n@Component({\n selector: 'app-dashboard-user-header',\n templateUrl: './dashboard-user-header.component.html',\n styleUrls: ['./dashboard-user-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DashboardUserHeaderComponent extends DashboardsAbstract implements OnInit, OnDestroy {\n myTasksTurnovers$: Observable;\n staleTurnovers$: Observable;\n lateTurnovers$: Observable;\n myTasksTickets$: Observable;\n myTasksLoading$: Observable;\n assignee: UntypedFormControl = new UntypedFormControl();\n users: RestUserModel[];\n\n @Input() previousRoute?: string;\n @Input() headerValue = '';\n @Input() customHeaderTemplate: TemplateRef;\n @Input() containerCss = '';\n @Input() showAssigneeControl = false;\n\n get showBack() {\n return this.previousRoute;\n }\n\n constructor(protected cdr: ChangeDetectorRef, private store: Store<{}>, private router: Router) {\n super(cdr);\n }\n\n ngOnInit(): void {\n combineLatest([this.store.select(selectUserData), this.store.select(selectDashboardFilterState)])\n .pipe(\n untilDestroyed(this),\n filter(([userData]) => !!userData),\n tap(([userData, filter]) => {\n this.userData = userData;\n if (filter?.assignee !== undefined) {\n this.assignee.setValue(filter.assignee ?? -1);\n } else {\n this.store.dispatch(setDashboardFilter({ assignee: this.userData.id }));\n }\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectActiveUsers)\n .pipe(\n untilDestroyed(this),\n filter((users: RestUserModel[]) => !!users?.length),\n tap((users: RestUserModel[]) => {\n this.users = users;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.assignee.valueChanges\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(assignee => {\n this.store.dispatch(setDashboardFilter({ assignee: assignee > 0 ? assignee : null }));\n })\n )\n .subscribe();\n\n this.myTasksLoading$ = this.store.select(selectMyTasksLoading);\n this.myTasksTurnovers$ = this.store.select(selectMyTasksTurnoversCount);\n this.myTasksTickets$ = this.store.select(selectMyTasksTicketsCount);\n this.staleTurnovers$ = this.store.select(selectStaleTurnoversCount);\n this.lateTurnovers$ = this.store.select(selectLateTurnoversCount);\n }\n\n goBack(evt: Event) {\n evt.preventDefault();\n this.router.navigateByUrl(this.previousRoute);\n }\n\n ngOnDestroy(): void {}\n\n protected readonly PriorityType = PriorityType;\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromDashboardFilter from '@dashboards/reducers/dashboard-filter.reducer';\n\nexport const selectDashboardFilterState = createFeatureSelector(\n fromDashboardFilter.dashboardFilterFeatureKey\n);\n","export enum DelinquencyFields {\n NOTES = 'notes',\n ASSISTANCE_TYPE = 'assistanceType',\n DATE_TENANT_CONTACTED = 'dateTenantContacted',\n DATE_PAYMENT_EXPECTED = 'datePaymentExpected',\n PAYMENT_AMOUNT = 'paymentAmount',\n DELINQUENCY_RESULT_TYPE = 'delinquencyResultType',\n IS_JUDGMENT_WON = 'isJudgementWon',\n WRIT_DATE = 'writDate',\n COURT_DATE = 'courtDate',\n APPEAL_END_DATE = 'appealEndDate',\n DATE_MOVED_OUT = 'dateMovedOut',\n DATE_PLAN_BEGINS = 'datePlanBegins',\n PAYMENT_FORM = 'paymentForm',\n NUMBER_OF_INSTALLMENTS = 'numberOfInstallments',\n INSTALLMENT_AMOUNT = 'installmentAmount',\n DATE_PAYMENT_RECEIVED = 'datePaymentReceived',\n SMALL_BALANCE_CONSISTS_OF = 'smallBalanceConsistOf',\n CREDIT_REASON = 'creditReason',\n CREDIT_AMOUNT = 'creditAmount',\n NTV_POSTED = 'nTVPosted',\n}\n","import { ChangeDetectorRef, Directive } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { filter, map, mergeMap } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { InspectionModel } from '@main-application/inspections/models/inspection.model';\nimport { InspectionService } from '@main-application/inspections/services/inspection.service';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nimport { InspectionStatus } from '../models/rest-inspections-model.interface';\n\n@Directive()\nexport class InspectionsBaseComponent extends ComponentAbstract {\n readonly InspectionStatus = InspectionStatus;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n protected inspectionService: InspectionService,\n protected snackbarService: SnackbarService,\n protected modalService: ModalsService,\n public router: Router\n ) {\n super(cdr);\n }\n\n share(inspection: InspectionModel, evt?: Event) {\n if (evt) {\n evt.preventDefault();\n }\n\n if (inspection.entityDetails.status === InspectionStatus.Completed) {\n this.inspectionService.openSendDialog(\n inspection.entityDetails.id,\n `${inspection.inspectionType} inspection: ${inspection.entityDetails.unit.propertyName} - ${inspection.entityDetails.unit.name}`\n );\n } else {\n this.snackbarService.error(`You can only share a completed inspection`);\n }\n }\n\n protected tableSortPredicate = (inspection: InspectionModel, sortHeaderId: string) => {\n switch (sortHeaderId) {\n case 'unit.name':\n return inspection.entityDetails.unit.name?.toLocaleLowerCase();\n case 'turboMode':\n return inspection.entityDetails.isTurboMode;\n case 'unit.propertyName':\n return inspection.entityDetails.unit.propertyName?.toLocaleLowerCase();\n case 'inspectionType':\n return (inspection.inspectionTemplate?.name ?? inspection.inspectionType)?.toLocaleLowerCase();\n case 'rooms':\n return inspection.areasLabel;\n case 'assignee':\n return inspection.entityDetails.assigneeUser?.displayName?.toLocaleLowerCase();\n case 'createdAt':\n return inspection.entityDetails.createdAt;\n case 'completedAt':\n return inspection.entityDetails.completedAt;\n case 'dueDate':\n return inspection.entityDetails.dueDate;\n default:\n return inspection[sortHeaderId];\n }\n };\n\n download(inspection: InspectionModel, evt?: Event) {\n if (evt) {\n evt.preventDefault();\n }\n\n if (inspection.entityDetails.status === InspectionStatus.Completed) {\n if (inspection.entityDetails.attachments?.attachment?.url) {\n window.open(inspection.entityDetails.attachments.attachment.url);\n } else {\n this.snackbarService.error('Inspection .pdf not found');\n }\n } else {\n this.snackbarService.error('Inpspection must be completed first');\n }\n }\n\n delete(inspection: InspectionModel) {\n return this.modalService\n .openConfirmationModal(\n {\n title: `Delete inspection?`,\n content: `Delete inspection for ${inspection.propertyName} - ${inspection.unitName}?`,\n confirmColor: 'warn',\n confirmLabel: 'Delete',\n },\n 'xs'\n )\n .afterClosed()\n .pipe(\n filter(result => result === DialogResult.Success),\n mergeMap(() => {\n return this.inspectionService.delete(inspection.id).pipe(\n catchError((_, caught) => {\n this.snackbarService.error('Error deleting inspection');\n return caught;\n })\n );\n })\n );\n }\n\n open(inspection: InspectionModel, evt?: Event) {\n if (evt) {\n evt.preventDefault();\n }\n\n if (inspection.entityDetails.status === InspectionStatus.Completed) {\n this.router.navigate([RoutePath.INSPECTIONS, inspection.entityDetails.id]);\n } else {\n this.snackbarService.error('Only completed inspections can be viewed');\n }\n }\n}\n","import { InspectionPage } from './inspection-area.model';\nimport { PropertyState } from './inspection.model';\n\nexport class InspectionStepModel {\n readonly propertyState: PropertyState;\n readonly notesCount: number;\n readonly imagesCount: number;\n readonly note: string;\n readonly questions: [string, boolean][];\n\n constructor(public readonly page: InspectionPage, public readonly stepNumber: number) {\n this.propertyState =\n (page.elements?.find(elm => elm.type === 'propertystate')?.value as PropertyState) ?? 'skipped';\n\n const questionsElms = page.elements?.find(elm => elm.type === 'panel' && elm.elements.length)?.elements;\n const notesElms = page.elements?.filter(elm => elm.type === 'comment' && elm.value);\n\n this.questions = questionsElms?.map(qElm => [qElm.title, qElm?.isRequired ? qElm.value === 'true' : true]);\n this.notesCount = notesElms?.length ?? 0;\n this.imagesCount = page.mainImage?.length ?? 0;\n\n this.note = notesElms?.[0]?.value ?? '';\n }\n\n get flagsCount() {\n return 0; // TODO\n }\n}\n","import { parseJSON } from '@shared/utils/extensions';\n\nimport { InspectionStepModel } from './inspection-step.model';\nimport { InspectionItemStatus, RestInspectionContents } from './rest-inspections-model.interface';\n\nexport interface InspectionAnswer {\n title: string;\n pages: InspectionPage[];\n}\n\nexport interface InspectionPage {\n name: string;\n title: string;\n mainImage?: InspectionImage[];\n isCompleted: boolean;\n elements?: InspectionElement[];\n}\n\nexport interface InspectionImage {\n fileUploadId: number;\n filePath: string;\n}\n\nexport interface InspectionElement {\n title: string;\n name: string;\n type: string;\n isRequired: boolean;\n guid: string;\n value: string;\n choices: string[];\n visibleIf: null;\n requiredIf: null;\n elements: InspectionElement[];\n}\n\nexport class InspectionAreaModel {\n readonly steps: InspectionStepModel[];\n readonly stepsCount: number;\n readonly completedStepsCount: number;\n readonly isCompleted: boolean;\n readonly isSkipped: boolean;\n\n constructor(public readonly content: RestInspectionContents) {\n const answer = parseJSON(content.answerJSON);\n this.steps = answer?.pages?.map((page, idx) => new InspectionStepModel(page, idx + 1)) ?? [];\n this.stepsCount = answer?.pages?.length ?? 1;\n this.completedStepsCount = this.steps?.filter(step => step.page.isCompleted).length ?? 0;\n\n this.isCompleted = content.status === InspectionItemStatus.Completed;\n this.isSkipped = content.status === InspectionItemStatus.Skipped;\n }\n}\n","import { HumanizePipe } from '@shared/pipes/humanize.pipe';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\n\nimport { InspectionAreaModel } from './inspection-area.model';\nimport { InspectionStepModel } from './inspection-step.model';\nimport { InspectionStatus, InspectionType, RestInspectionsModel } from './rest-inspections-model.interface';\n\nexport declare type PropertyState = 'good' | 'fair' | 'poor' | 'skipped' | undefined;\n\nexport class InspectionModel {\n readonly id: number;\n readonly completedOrSkippedAreasCount: number;\n readonly areasCount: number;\n readonly title: string;\n readonly status: string;\n readonly inspectionType: string;\n readonly areas: InspectionAreaModel[];\n\n readonly summary: { [key: string]: number } = { flagsCount: 0 };\n readonly allSteps: InspectionStepModel[];\n readonly propertyId: number;\n readonly portfolioId: number;\n readonly unitName: string;\n readonly propertyName: string;\n\n constructor(\n public readonly entityDetails: RestInspectionsModel,\n public readonly inspectionTemplate: RestTemplateModel\n ) {\n this.id = entityDetails.id;\n this.inspectionType =\n entityDetails.inspectionType != null\n ? HumanizePipe.transform(InspectionType[entityDetails.inspectionType])\n : 'Inspection';\n this.title = `${this.inspectionType} - ${entityDetails.unit.name}`;\n this.status = HumanizePipe.transform(InspectionStatus[entityDetails.status]);\n this.propertyId = entityDetails.unit?.propertyId;\n this.portfolioId = entityDetails.unit?.property?.portfolioId;\n this.unitName = entityDetails?.unit?.name;\n this.propertyName = entityDetails?.unit?.property?.name;\n\n if (entityDetails?.inspectionContents.length) {\n this.areas = entityDetails.inspectionContents.map(content => new InspectionAreaModel(content));\n this.allSteps = this.areas.flatMap(area => area.steps).filter(Boolean);\n this.areasCount = this.areas.length;\n\n this.completedOrSkippedAreasCount = this.areas.filter(area => area.isCompleted || area.isSkipped).length;\n this.allSteps.reduce((acc, curStep) => {\n acc[curStep.propertyState] = (acc[curStep.propertyState] ?? 0) + 1;\n acc.notesCount = (acc.notesCount ?? 0) + curStep.notesCount;\n\n return acc;\n }, this.summary);\n } else {\n this.completedOrSkippedAreasCount = entityDetails.completedRooms;\n this.areasCount = entityDetails.totalRooms;\n }\n }\n\n get areasLabel() {\n return `${this.completedOrSkippedAreasCount}/${this.areasCount}`;\n }\n}\n","import { Component, Inject, OnInit, QueryList, ViewChildren } from '@angular/core';\nimport { FormBuilder, NgControl, ValidationErrors, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { ButtonType } from '@shared/enums/button-type';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { InputErrorService } from '@ui-components/components/input-error/services/input-error.service';\nimport { EmailPatternValidator } from '@ui-components/validators/email.validator';\n\n@Component({\n selector: 'app-send-inspection',\n templateUrl: './send-inspection.component.html',\n styleUrls: ['./send-inspection.component.scss'],\n})\nexport class SendInspectionComponent implements OnInit {\n ButtonType = ButtonType;\n\n form = this.formBuilder.group({\n to: [null, [Validators.required, EmailPatternValidator, Validators.email]],\n subject: [null, [Validators.required]],\n body: [null],\n });\n isSubmitted = false;\n\n @ViewChildren(NgControl) controls: QueryList;\n\n constructor(\n private formBuilder: FormBuilder,\n private dialogRef: MatDialogRef,\n private inputErrorService: InputErrorService,\n private snackbarService: SnackbarService,\n @Inject(MAT_DIALOG_DATA) inspectionTitle: string\n ) {\n this.form.patchValue({ subject: inspectionTitle });\n }\n\n ngOnInit(): void {}\n\n ok() {\n this.isSubmitted = true;\n\n if (this.form.valid) {\n this.dialogRef.close({\n ...this.form.value,\n to: [this.form.value.to],\n });\n } else {\n const errors: ValidationErrors = this.controls\n .toArray()\n .flatMap(control => control.control.errors)\n .reduce((acc, cur) => ({ ...acc, ...cur }), {});\n\n const strErrors = (Object.entries(errors) || [])\n .filter(([key, errorParams]) => !!errorParams)\n .map(([key, errorParams]) => {\n return this.inputErrorService.getValidationMessage(key, errorParams);\n });\n this.snackbarService.error(strErrors.join('
'));\n }\n }\n}\n","

Email copy of inspection (as a .pdf)

\n\n
\n \n \n \n \n
\n\n \n \n\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { Observable, firstValueFrom } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { TimezoneEntityHelper } from '@main-application/management/components/system-configuration/components/timezone-entity.helper';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { SendInspectionComponent } from '../components/send-inspection/send-inspection.component';\nimport {\n RestInspectionContents,\n RestInspectionCreateModel,\n RestInspectionsModel,\n SendInspectionReportRequest,\n} from '../models/rest-inspections-model.interface';\n\n@Injectable({ providedIn: 'root' })\nexport class InspectionService {\n private _currentSurvey: RestInspectionContents | undefined;\n\n get survey() {\n return this._currentSurvey;\n }\n\n constructor(\n private readonly snackbarService: SnackbarService,\n private restApiService: RestapiService,\n private readonly matDialog: MatDialog\n ) {}\n\n private static fixTimezoneForRestInspectionsModelList(data: RestInspectionsModel[], timezone: number) {\n data.forEach(e => TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToClient(e, timezone));\n return data;\n }\n\n list() {\n return this.restApiService.getData(\n `inspections/list?doNotReturnContent=true`,\n InspectionService.fixTimezoneForRestInspectionsModelList\n );\n }\n\n updateCalendarView(inspectionModel: RestInspectionsModel) {\n return this.restApiService.post(\n `inspections/updateCalendarView/${inspectionModel.id}`,\n {\n calendarPosition: inspectionModel.calendarPosition,\n dueDate: inspectionModel.dueDate,\n },\n TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToServer\n );\n }\n\n create(inspectionModel: RestInspectionCreateModel): Observable {\n return this.restApiService.create(`inspections/add`, inspectionModel);\n }\n\n delete(inspectionId: number): Observable {\n return this.restApiService.delete(`inspections/${inspectionId}`);\n }\n\n getById(inspectionId: number) {\n return this.restApiService.getData(`inspections/${inspectionId}`);\n }\n\n getBeUnitId(unitId: number) {\n return this.restApiService.getData(`inspections/ByUnit/${unitId}`);\n }\n\n async openSendDialog(id: number, inspectionTitle: string) {\n const config: MatDialogConfig = {\n minWidth: '500px',\n panelClass: 'send-inspection-report-modal-container',\n data: inspectionTitle,\n };\n\n const sendRequest = await firstValueFrom(\n this.matDialog\n .open(SendInspectionComponent, config)\n .afterClosed()\n );\n\n if (sendRequest) {\n this.sendReport(id, sendRequest).subscribe({\n next: () => this.snackbarService.success(SnackbarErrorMessage.InspectionReportSentSuccessfully),\n error: error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorSendingInspectionReport);\n console.error(error);\n },\n });\n }\n }\n\n sendReport(inspectionId: number, request: SendInspectionReportRequest) {\n return this.restApiService.post(`inspections/${inspectionId}/sendReport`, request);\n }\n}\n","import * as i0 from '@angular/core';\nimport { Directive, Optional, Inject, Input, NgModule } from '@angular/core';\nimport { mixinDisabled, MatCommonModule } from '@angular/material/core';\nimport * as i1 from '@angular/cdk/a11y';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet nextId = 0;\n// Boilerplate for applying mixins to MatBadge.\n/** @docs-private */\nconst _MatBadgeBase = mixinDisabled(class {\n});\nconst BADGE_CONTENT_CLASS = 'mat-badge-content';\n/** Directive to display a text badge. */\nclass MatBadge extends _MatBadgeBase {\n constructor(_ngZone, _elementRef, _ariaDescriber, _renderer, _animationMode) {\n super();\n this._ngZone = _ngZone;\n this._elementRef = _elementRef;\n this._ariaDescriber = _ariaDescriber;\n this._renderer = _renderer;\n this._animationMode = _animationMode;\n this._color = 'primary';\n this._overlap = true;\n /**\n * Position the badge should reside.\n * Accepts any combination of 'above'|'below' and 'before'|'after'\n */\n this.position = 'above after';\n /** Size of the badge. Can be 'small', 'medium', or 'large'. */\n this.size = 'medium';\n /** Unique id for the badge */\n this._id = nextId++;\n /** Whether the OnInit lifecycle hook has run yet */\n this._isInitialized = false;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const nativeElement = _elementRef.nativeElement;\n if (nativeElement.nodeType !== nativeElement.ELEMENT_NODE) {\n throw Error('matBadge must be attached to an element node.');\n }\n }\n }\n /** The color of the badge. Can be `primary`, `accent`, or `warn`. */\n get color() {\n return this._color;\n }\n set color(value) {\n this._setColor(value);\n this._color = value;\n }\n /** Whether the badge should overlap its contents or not */\n get overlap() {\n return this._overlap;\n }\n set overlap(val) {\n this._overlap = coerceBooleanProperty(val);\n }\n /** The content for the badge */\n get content() {\n return this._content;\n }\n set content(newContent) {\n this._updateRenderedContent(newContent);\n }\n /** Message used to describe the decorated element via aria-describedby */\n get description() {\n return this._description;\n }\n set description(newDescription) {\n this._updateHostAriaDescription(newDescription);\n }\n /** Whether the badge is hidden. */\n get hidden() {\n return this._hidden;\n }\n set hidden(val) {\n this._hidden = coerceBooleanProperty(val);\n }\n /** Whether the badge is above the host or not */\n isAbove() {\n return this.position.indexOf('below') === -1;\n }\n /** Whether the badge is after the host or not */\n isAfter() {\n return this.position.indexOf('before') === -1;\n }\n /**\n * Gets the element into which the badge's content is being rendered. Undefined if the element\n * hasn't been created (e.g. if the badge doesn't have content).\n */\n getBadgeElement() {\n return this._badgeElement;\n }\n ngOnInit() {\n // We may have server-side rendered badge that we need to clear.\n // We need to do this in ngOnInit because the full content of the component\n // on which the badge is attached won't necessarily be in the DOM until this point.\n this._clearExistingBadges();\n if (this.content && !this._badgeElement) {\n this._badgeElement = this._createBadgeElement();\n this._updateRenderedContent(this.content);\n }\n this._isInitialized = true;\n }\n ngOnDestroy() {\n // ViewEngine only: when creating a badge through the Renderer, Angular remembers its index.\n // We have to destroy it ourselves, otherwise it'll be retained in memory.\n if (this._renderer.destroyNode) {\n this._renderer.destroyNode(this._badgeElement);\n }\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);\n }\n /** Creates the badge element */\n _createBadgeElement() {\n const badgeElement = this._renderer.createElement('span');\n const activeClass = 'mat-badge-active';\n badgeElement.setAttribute('id', `mat-badge-content-${this._id}`);\n // The badge is aria-hidden because we don't want it to appear in the page's navigation\n // flow. Instead, we use the badge to describe the decorated element with aria-describedby.\n badgeElement.setAttribute('aria-hidden', 'true');\n badgeElement.classList.add(BADGE_CONTENT_CLASS);\n if (this._animationMode === 'NoopAnimations') {\n badgeElement.classList.add('_mat-animation-noopable');\n }\n this._elementRef.nativeElement.appendChild(badgeElement);\n // animate in after insertion\n if (typeof requestAnimationFrame === 'function' && this._animationMode !== 'NoopAnimations') {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n badgeElement.classList.add(activeClass);\n });\n });\n }\n else {\n badgeElement.classList.add(activeClass);\n }\n return badgeElement;\n }\n /** Update the text content of the badge element in the DOM, creating the element if necessary. */\n _updateRenderedContent(newContent) {\n const newContentNormalized = `${newContent ?? ''}`.trim();\n // Don't create the badge element if the directive isn't initialized because we want to\n // append the badge element to the *end* of the host element's content for backwards\n // compatibility.\n if (this._isInitialized && newContentNormalized && !this._badgeElement) {\n this._badgeElement = this._createBadgeElement();\n }\n if (this._badgeElement) {\n this._badgeElement.textContent = newContentNormalized;\n }\n this._content = newContentNormalized;\n }\n /** Updates the host element's aria description via AriaDescriber. */\n _updateHostAriaDescription(newDescription) {\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);\n if (newDescription) {\n this._ariaDescriber.describe(this._elementRef.nativeElement, newDescription);\n }\n this._description = newDescription;\n }\n /** Adds css theme class given the color to the component host */\n _setColor(colorPalette) {\n const classList = this._elementRef.nativeElement.classList;\n classList.remove(`mat-badge-${this._color}`);\n if (colorPalette) {\n classList.add(`mat-badge-${colorPalette}`);\n }\n }\n /** Clears any existing badges that might be left over from server-side rendering. */\n _clearExistingBadges() {\n // Only check direct children of this host element in order to avoid deleting\n // any badges that might exist in descendant elements.\n const badges = this._elementRef.nativeElement.querySelectorAll(`:scope > .${BADGE_CONTENT_CLASS}`);\n for (const badgeElement of Array.from(badges)) {\n if (badgeElement !== this._badgeElement) {\n badgeElement.remove();\n }\n }\n }\n}\nMatBadge.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatBadge, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i1.AriaDescriber }, { token: i0.Renderer2 }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatBadge.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatBadge, selector: \"[matBadge]\", inputs: { disabled: [\"matBadgeDisabled\", \"disabled\"], color: [\"matBadgeColor\", \"color\"], overlap: [\"matBadgeOverlap\", \"overlap\"], position: [\"matBadgePosition\", \"position\"], content: [\"matBadge\", \"content\"], description: [\"matBadgeDescription\", \"description\"], size: [\"matBadgeSize\", \"size\"], hidden: [\"matBadgeHidden\", \"hidden\"] }, host: { properties: { \"class.mat-badge-overlap\": \"overlap\", \"class.mat-badge-above\": \"isAbove()\", \"class.mat-badge-below\": \"!isAbove()\", \"class.mat-badge-before\": \"!isAfter()\", \"class.mat-badge-after\": \"isAfter()\", \"class.mat-badge-small\": \"size === \\\"small\\\"\", \"class.mat-badge-medium\": \"size === \\\"medium\\\"\", \"class.mat-badge-large\": \"size === \\\"large\\\"\", \"class.mat-badge-hidden\": \"hidden || !content\", \"class.mat-badge-disabled\": \"disabled\" }, classAttribute: \"mat-badge\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatBadge, decorators: [{\n type: Directive,\n args: [{\n selector: '[matBadge]',\n inputs: ['disabled: matBadgeDisabled'],\n host: {\n 'class': 'mat-badge',\n '[class.mat-badge-overlap]': 'overlap',\n '[class.mat-badge-above]': 'isAbove()',\n '[class.mat-badge-below]': '!isAbove()',\n '[class.mat-badge-before]': '!isAfter()',\n '[class.mat-badge-after]': 'isAfter()',\n '[class.mat-badge-small]': 'size === \"small\"',\n '[class.mat-badge-medium]': 'size === \"medium\"',\n '[class.mat-badge-large]': 'size === \"large\"',\n '[class.mat-badge-hidden]': 'hidden || !content',\n '[class.mat-badge-disabled]': 'disabled',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i1.AriaDescriber }, { type: i0.Renderer2 }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { color: [{\n type: Input,\n args: ['matBadgeColor']\n }], overlap: [{\n type: Input,\n args: ['matBadgeOverlap']\n }], position: [{\n type: Input,\n args: ['matBadgePosition']\n }], content: [{\n type: Input,\n args: ['matBadge']\n }], description: [{\n type: Input,\n args: ['matBadgeDescription']\n }], size: [{\n type: Input,\n args: ['matBadgeSize']\n }], hidden: [{\n type: Input,\n args: ['matBadgeHidden']\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatBadgeModule {\n}\nMatBadgeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatBadgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatBadgeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatBadgeModule, declarations: [MatBadge], imports: [A11yModule, MatCommonModule], exports: [MatBadge, MatCommonModule] });\nMatBadgeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatBadgeModule, imports: [A11yModule, MatCommonModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatBadgeModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [A11yModule, MatCommonModule],\n exports: [MatBadge, MatCommonModule],\n declarations: [MatBadge],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatBadge, MatBadgeModule };\n","import * as i2 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Component, ViewEncapsulation, ChangeDetectionStrategy, Directive, Optional, Inject, ContentChildren, ContentChild, Input, forwardRef, EventEmitter, Output, ViewChild, NgModule } from '@angular/core';\nimport * as i1 from '@angular/material/core';\nimport { mixinDisabled, mixinDisableRipple, setLines, MatLine, MatLineModule, MatRippleModule, MatCommonModule, MatPseudoCheckboxModule } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { takeUntil, startWith } from 'rxjs/operators';\nimport * as i3 from '@angular/cdk/a11y';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { hasModifierKey, A, ENTER, SPACE, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatDividerModule } from '@angular/material/divider';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatList.\n/** @docs-private */\nconst _MatListBase = mixinDisabled(mixinDisableRipple(class {\n}));\n// Boilerplate for applying mixins to MatListItem.\n/** @docs-private */\nconst _MatListItemMixinBase = mixinDisableRipple(class {\n});\n/**\n * Injection token that can be used to inject instances of `MatList`. It serves as\n * alternative token to the actual `MatList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_LIST = new InjectionToken('MatList');\n/**\n * Injection token that can be used to inject instances of `MatNavList`. It serves as\n * alternative token to the actual `MatNavList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_NAV_LIST = new InjectionToken('MatNavList');\nclass MatNavList extends _MatListBase {\n constructor() {\n super(...arguments);\n /** Emits when the state of the list changes. */\n this._stateChanges = new Subject();\n }\n ngOnChanges() {\n this._stateChanges.next();\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\nMatNavList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatNavList, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatNavList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatNavList, selector: \"mat-nav-list\", inputs: { disableRipple: \"disableRipple\", disabled: \"disabled\" }, host: { attributes: { \"role\": \"navigation\" }, classAttribute: \"mat-nav-list mat-list-base\" }, providers: [{ provide: MAT_NAV_LIST, useExisting: MatNavList }], exportAs: [\"matNavList\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"\\n\\n\", styles: [\".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}button.mat-list-item,button.mat-list-option{padding:0;width:100%;background:none;color:inherit;border:none;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:left}[dir=rtl] button.mat-list-item,[dir=rtl] button.mat-list-option{text-align:right}button.mat-list-item::-moz-focus-inner,button.mat-list-option::-moz-focus-inner{border:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}.mat-list-item-disabled{pointer-events:none}.cdk-high-contrast-active .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active :host .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active .mat-list-option:hover,.cdk-high-contrast-active .mat-nav-list .mat-list-item:hover,.cdk-high-contrast-active mat-action-list .mat-list-item:hover{outline:dotted 1px;z-index:1}.cdk-high-contrast-active .mat-list-single-selected-option::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active [dir=rtl] .mat-list-single-selected-option::after{right:auto;left:16px}@media(hover: none){.mat-list-option:not(.mat-list-single-selected-option):not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatNavList, decorators: [{\n type: Component,\n args: [{ selector: 'mat-nav-list', exportAs: 'matNavList', host: {\n 'role': 'navigation',\n 'class': 'mat-nav-list mat-list-base',\n }, inputs: ['disableRipple', 'disabled'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MAT_NAV_LIST, useExisting: MatNavList }], template: \"\\n\\n\", styles: [\".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}button.mat-list-item,button.mat-list-option{padding:0;width:100%;background:none;color:inherit;border:none;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:left}[dir=rtl] button.mat-list-item,[dir=rtl] button.mat-list-option{text-align:right}button.mat-list-item::-moz-focus-inner,button.mat-list-option::-moz-focus-inner{border:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}.mat-list-item-disabled{pointer-events:none}.cdk-high-contrast-active .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active :host .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active .mat-list-option:hover,.cdk-high-contrast-active .mat-nav-list .mat-list-item:hover,.cdk-high-contrast-active mat-action-list .mat-list-item:hover{outline:dotted 1px;z-index:1}.cdk-high-contrast-active .mat-list-single-selected-option::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active [dir=rtl] .mat-list-single-selected-option::after{right:auto;left:16px}@media(hover: none){.mat-list-option:not(.mat-list-single-selected-option):not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}\"] }]\n }] });\nclass MatList extends _MatListBase {\n constructor(_elementRef) {\n super();\n this._elementRef = _elementRef;\n /** Emits when the state of the list changes. */\n this._stateChanges = new Subject();\n if (this._getListType() === 'action-list') {\n _elementRef.nativeElement.classList.add('mat-action-list');\n _elementRef.nativeElement.setAttribute('role', 'group');\n }\n }\n _getListType() {\n const nodeName = this._elementRef.nativeElement.nodeName.toLowerCase();\n if (nodeName === 'mat-list') {\n return 'list';\n }\n if (nodeName === 'mat-action-list') {\n return 'action-list';\n }\n return null;\n }\n ngOnChanges() {\n this._stateChanges.next();\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\nMatList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatList, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nMatList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatList, selector: \"mat-list, mat-action-list\", inputs: { disableRipple: \"disableRipple\", disabled: \"disabled\" }, host: { classAttribute: \"mat-list mat-list-base\" }, providers: [{ provide: MAT_LIST, useExisting: MatList }], exportAs: [\"matList\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"\\n\\n\", styles: [\".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}button.mat-list-item,button.mat-list-option{padding:0;width:100%;background:none;color:inherit;border:none;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:left}[dir=rtl] button.mat-list-item,[dir=rtl] button.mat-list-option{text-align:right}button.mat-list-item::-moz-focus-inner,button.mat-list-option::-moz-focus-inner{border:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}.mat-list-item-disabled{pointer-events:none}.cdk-high-contrast-active .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active :host .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active .mat-list-option:hover,.cdk-high-contrast-active .mat-nav-list .mat-list-item:hover,.cdk-high-contrast-active mat-action-list .mat-list-item:hover{outline:dotted 1px;z-index:1}.cdk-high-contrast-active .mat-list-single-selected-option::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active [dir=rtl] .mat-list-single-selected-option::after{right:auto;left:16px}@media(hover: none){.mat-list-option:not(.mat-list-single-selected-option):not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatList, decorators: [{\n type: Component,\n args: [{ selector: 'mat-list, mat-action-list', exportAs: 'matList', host: {\n 'class': 'mat-list mat-list-base',\n }, inputs: ['disableRipple', 'disabled'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MAT_LIST, useExisting: MatList }], template: \"\\n\\n\", styles: [\".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}button.mat-list-item,button.mat-list-option{padding:0;width:100%;background:none;color:inherit;border:none;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:left}[dir=rtl] button.mat-list-item,[dir=rtl] button.mat-list-option{text-align:right}button.mat-list-item::-moz-focus-inner,button.mat-list-option::-moz-focus-inner{border:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}.mat-list-item-disabled{pointer-events:none}.cdk-high-contrast-active .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active :host .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active .mat-list-option:hover,.cdk-high-contrast-active .mat-nav-list .mat-list-item:hover,.cdk-high-contrast-active mat-action-list .mat-list-item:hover{outline:dotted 1px;z-index:1}.cdk-high-contrast-active .mat-list-single-selected-option::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active [dir=rtl] .mat-list-single-selected-option::after{right:auto;left:16px}@media(hover: none){.mat-list-option:not(.mat-list-single-selected-option):not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatListAvatarCssMatStyler {\n}\nMatListAvatarCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatListAvatarCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatListAvatarCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatListAvatarCssMatStyler, selector: \"[mat-list-avatar], [matListAvatar]\", host: { classAttribute: \"mat-list-avatar\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatListAvatarCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-list-avatar], [matListAvatar]',\n host: { 'class': 'mat-list-avatar' },\n }]\n }] });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatListIconCssMatStyler {\n}\nMatListIconCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatListIconCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatListIconCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatListIconCssMatStyler, selector: \"[mat-list-icon], [matListIcon]\", host: { classAttribute: \"mat-list-icon\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatListIconCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-list-icon], [matListIcon]',\n host: { 'class': 'mat-list-icon' },\n }]\n }] });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatListSubheaderCssMatStyler {\n}\nMatListSubheaderCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatListSubheaderCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatListSubheaderCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatListSubheaderCssMatStyler, selector: \"[mat-subheader], [matSubheader]\", host: { classAttribute: \"mat-subheader\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatListSubheaderCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-subheader], [matSubheader]',\n host: { 'class': 'mat-subheader' },\n }]\n }] });\n/** An item within a Material Design list. */\nclass MatListItem extends _MatListItemMixinBase {\n constructor(_element, _changeDetectorRef, navList, list) {\n super();\n this._element = _element;\n this._isInteractiveList = false;\n this._destroyed = new Subject();\n this._disabled = false;\n this._isInteractiveList = !!(navList || (list && list._getListType() === 'action-list'));\n this._list = navList || list;\n // If no type attribute is specified for \\n \\n \\n \\n \\n \\n\\n\", styles: [\".mat-paginator{display:block}.mat-paginator-outer-container{display:flex}.mat-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap-reverse;width:100%}.mat-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-paginator-page-size{margin-right:0;margin-left:8px}.mat-paginator-page-size-label{margin:0 4px}.mat-paginator-page-size-select{margin:6px 4px 0 4px;width:56px}.mat-paginator-page-size-select.mat-form-field-appearance-outline{width:64px}.mat-paginator-page-size-select.mat-form-field-appearance-fill{width:64px}.mat-paginator-range-label{margin:0 32px 0 24px}.mat-paginator-range-actions{display:flex;align-items:center}.mat-paginator-icon{display:inline-block;width:28px;fill:currentColor}[dir=rtl] .mat-paginator-icon{transform:rotate(180deg)}.cdk-high-contrast-active .mat-paginator-icon{fill:CanvasText}\"], dependencies: [{ kind: \"directive\", type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i3.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"component\", type: i4.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"component\", type: i5.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i6.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"directive\", type: i7.MatTooltip, selector: \"[matTooltip]\", exportAs: [\"matTooltip\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatPaginator, decorators: [{\n type: Component,\n args: [{ selector: 'mat-paginator', exportAs: 'matPaginator', inputs: ['disabled'], host: {\n 'class': 'mat-paginator',\n 'role': 'group',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\n
\\n
\\n
\\n {{_intl.itemsPerPageLabel}}\\n
\\n\\n 1\\\"\\n [appearance]=\\\"_formFieldAppearance!\\\"\\n [color]=\\\"color\\\"\\n class=\\\"mat-paginator-page-size-select\\\">\\n \\n \\n {{pageSizeOption}}\\n \\n \\n \\n\\n {{pageSize}}
\\n
\\n\\n
\\n
\\n {{_intl.getRangeLabel(pageIndex, pageSize, length)}}\\n
\\n\\n \\n \\n \\n \\n
\\n
\\n\\n\", styles: [\".mat-paginator{display:block}.mat-paginator-outer-container{display:flex}.mat-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap-reverse;width:100%}.mat-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-paginator-page-size{margin-right:0;margin-left:8px}.mat-paginator-page-size-label{margin:0 4px}.mat-paginator-page-size-select{margin:6px 4px 0 4px;width:56px}.mat-paginator-page-size-select.mat-form-field-appearance-outline{width:64px}.mat-paginator-page-size-select.mat-form-field-appearance-fill{width:64px}.mat-paginator-range-label{margin:0 32px 0 24px}.mat-paginator-range-actions{display:flex;align-items:center}.mat-paginator-icon{display:inline-block;width:28px;fill:currentColor}[dir=rtl] .mat-paginator-icon{transform:rotate(180deg)}.cdk-high-contrast-active .mat-paginator-icon{fill:CanvasText}\"] }]\n }], ctorParameters: function () { return [{ type: MatPaginatorIntl }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_PAGINATOR_DEFAULT_OPTIONS]\n }] }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatPaginatorModule {\n}\nMatPaginatorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatPaginatorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatPaginatorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatPaginatorModule, declarations: [MatPaginator], imports: [CommonModule, MatButtonModule, MatSelectModule, MatTooltipModule, MatCommonModule], exports: [MatPaginator] });\nMatPaginatorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatPaginatorModule, providers: [MAT_PAGINATOR_INTL_PROVIDER], imports: [CommonModule, MatButtonModule, MatSelectModule, MatTooltipModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatPaginatorModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatButtonModule, MatSelectModule, MatTooltipModule, MatCommonModule],\n exports: [MatPaginator],\n declarations: [MatPaginator],\n providers: [MAT_PAGINATOR_INTL_PROVIDER],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PAGINATOR_DEFAULT_OPTIONS, MAT_PAGINATOR_INTL_PROVIDER, MAT_PAGINATOR_INTL_PROVIDER_FACTORY, MatPaginator, MatPaginatorIntl, MatPaginatorModule, PageEvent, _MatPaginatorBase };\n","import * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollable, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i5 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, EventEmitter, Optional, Input, Output, ViewChild, QueryList, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport * as i2 from '@angular/cdk/a11y';\nimport * as i4 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport * as i3 from '@angular/cdk/platform';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, map, mapTo, takeUntil, distinctUntilChanged, take, startWith, debounceTime } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nconst matDrawerAnimations = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: trigger('transform', [\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', style({\n 'transform': 'none',\n 'visibility': 'visible',\n })),\n state('void', style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void', animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')),\n ]),\n};\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nfunction throwMatDuplicatedDrawerError(position) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n/** Configures whether drawers should use auto sizing by default. */\nconst MAT_DRAWER_DEFAULT_AUTOSIZE = new InjectionToken('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n});\n/**\n * Used to provide a drawer container to a drawer while avoiding circular references.\n * @docs-private\n */\nconst MAT_DRAWER_CONTAINER = new InjectionToken('MAT_DRAWER_CONTAINER');\n/** @docs-private */\nfunction MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY() {\n return false;\n}\nclass MatDrawerContent extends CdkScrollable {\n constructor(_changeDetectorRef, _container, elementRef, scrollDispatcher, ngZone) {\n super(elementRef, scrollDispatcher, ngZone);\n this._changeDetectorRef = _changeDetectorRef;\n this._container = _container;\n }\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\nMatDrawerContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawerContent, deps: [{ token: i0.ChangeDetectorRef }, { token: forwardRef(() => MatDrawerContainer) }, { token: i0.ElementRef }, { token: i1.ScrollDispatcher }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nMatDrawerContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatDrawerContent, selector: \"mat-drawer-content\", host: { properties: { \"style.margin-left.px\": \"_container._contentMargins.left\", \"style.margin-right.px\": \"_container._contentMargins.right\" }, classAttribute: \"mat-drawer-content\" }, providers: [\n {\n provide: CdkScrollable,\n useExisting: MatDrawerContent,\n },\n ], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawerContent, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-drawer-content',\n template: '',\n host: {\n 'class': 'mat-drawer-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: CdkScrollable,\n useExisting: MatDrawerContent,\n },\n ],\n }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: MatDrawerContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatDrawerContainer)]\n }] }, { type: i0.ElementRef }, { type: i1.ScrollDispatcher }, { type: i0.NgZone }]; } });\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\nclass MatDrawer {\n constructor(_elementRef, _focusTrapFactory, _focusMonitor, _platform, _ngZone, _interactivityChecker, _doc, _container) {\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._focusMonitor = _focusMonitor;\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._interactivityChecker = _interactivityChecker;\n this._doc = _doc;\n this._container = _container;\n this._elementFocusedBeforeDrawerWasOpened = null;\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n this._enableAnimations = false;\n this._position = 'start';\n this._mode = 'over';\n this._disableClose = false;\n this._opened = false;\n /** Emits whenever the drawer has started animating. */\n this._animationStarted = new Subject();\n /** Emits whenever the drawer is done animating. */\n this._animationEnd = new Subject();\n /** Current state of the sidenav animation. */\n this._animationState = 'void';\n /** Event emitted when the drawer open state is changed. */\n this.openedChange = \n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter(/* isAsync */ true);\n /** Event emitted when the drawer has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => { }));\n /** Event emitted when the drawer has started opening. */\n this.openedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0), mapTo(undefined));\n /** Event emitted when the drawer has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));\n /** Event emitted when the drawer has started closing. */\n this.closedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState === 'void'), mapTo(undefined));\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n this.onPositionChanged = new EventEmitter();\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n this._modeChanged = new Subject();\n this.openedChange.subscribe((opened) => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement;\n }\n this._takeFocus();\n }\n else if (this._isFocusWithinDrawer()) {\n this._restoreFocus(this._openedVia || 'program');\n }\n });\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._elementRef.nativeElement, 'keydown')\n .pipe(filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }), takeUntil(this._destroyed))\n .subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._animationEnd\n .pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n }))\n .subscribe((event) => {\n const { fromState, toState } = event;\n if ((toState.indexOf('open') === 0 && fromState === 'void') ||\n (toState === 'void' && fromState.indexOf('open') === 0)) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n /** The side that the drawer is attached to. */\n get position() {\n return this._position;\n }\n set position(value) {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value !== this._position) {\n // Static inputs in Ivy are set before the element is in the DOM.\n if (this._isAttached) {\n this._updatePositionInParent(value);\n }\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n get mode() {\n return this._mode;\n }\n set mode(value) {\n this._mode = value;\n this._updateFocusTrapState();\n this._modeChanged.next();\n }\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n get disableClose() {\n return this._disableClose;\n }\n set disableClose(value) {\n this._disableClose = coerceBooleanProperty(value);\n }\n /**\n * Whether the drawer should focus the first focusable element automatically when opened.\n * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly\n * enabled, focus will be moved into the sidenav in `side` mode as well.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or AutoFocusTarget\n * instead.\n */\n get autoFocus() {\n const value = this._autoFocus;\n // Note that usually we don't allow autoFocus to be set to `first-tabbable` in `side` mode,\n // because we don't know how the sidenav is being used, but in some cases it still makes\n // sense to do it. The consumer can explicitly set `autoFocus`.\n if (value == null) {\n if (this.mode === 'side') {\n return 'dialog';\n }\n else {\n return 'first-tabbable';\n }\n }\n return value;\n }\n set autoFocus(value) {\n if (value === 'true' || value === 'false' || value == null) {\n value = coerceBooleanProperty(value);\n }\n this._autoFocus = value;\n }\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n get opened() {\n return this._opened;\n }\n set opened(value) {\n this.toggle(coerceBooleanProperty(value));\n }\n /**\n * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n * attribute to forcefully focus it. The attribute is removed after focus is moved.\n * @param element The element to focus.\n */\n _forceFocus(element, options) {\n if (!this._interactivityChecker.isFocusable(element)) {\n element.tabIndex = -1;\n // The tabindex attribute should be removed to avoid navigating to that element again\n this._ngZone.runOutsideAngular(() => {\n const callback = () => {\n element.removeEventListener('blur', callback);\n element.removeEventListener('mousedown', callback);\n element.removeAttribute('tabindex');\n };\n element.addEventListener('blur', callback);\n element.addEventListener('mousedown', callback);\n });\n }\n element.focus(options);\n }\n /**\n * Focuses the first element that matches the given selector within the focus trap.\n * @param selector The CSS selector for the element to set focus to.\n */\n _focusByCssSelector(selector, options) {\n let elementToFocus = this._elementRef.nativeElement.querySelector(selector);\n if (elementToFocus) {\n this._forceFocus(elementToFocus, options);\n }\n }\n /**\n * Moves focus into the drawer. Note that this works even if\n * the focus trap is disabled in `side` mode.\n */\n _takeFocus() {\n if (!this._focusTrap) {\n return;\n }\n const element = this._elementRef.nativeElement;\n // When autoFocus is not on the sidenav, if the element cannot be focused or does\n // not exist, focus the sidenav itself so the keyboard navigation still works.\n // We need to check that `focus` is a function due to Universal.\n switch (this.autoFocus) {\n case false:\n case 'dialog':\n return;\n case true:\n case 'first-tabbable':\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n element.focus();\n }\n });\n break;\n case 'first-heading':\n this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n break;\n default:\n this._focusByCssSelector(this.autoFocus);\n break;\n }\n }\n /**\n * Restores focus to the element that was originally focused when the drawer opened.\n * If no element was focused at that time, the focus will be restored to the drawer.\n */\n _restoreFocus(focusOrigin) {\n if (this.autoFocus === 'dialog') {\n return;\n }\n if (this._elementFocusedBeforeDrawerWasOpened) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, focusOrigin);\n }\n else {\n this._elementRef.nativeElement.blur();\n }\n this._elementFocusedBeforeDrawerWasOpened = null;\n }\n /** Whether focus is currently within the drawer. */\n _isFocusWithinDrawer() {\n const activeEl = this._doc.activeElement;\n return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n }\n ngAfterViewInit() {\n this._isAttached = true;\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._updateFocusTrapState();\n // Only update the DOM position when the sidenav is positioned at\n // the end since we project the sidenav before the content by default.\n if (this._position === 'end') {\n this._updatePositionInParent('end');\n }\n }\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n ngOnDestroy() {\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n this._anchor?.remove();\n this._anchor = null;\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia) {\n return this.toggle(true, openedVia);\n }\n /** Close the drawer. */\n close() {\n return this.toggle(false);\n }\n /** Closes the drawer with context that the backdrop was clicked. */\n _closeViaBackdropClick() {\n // If the drawer is closed upon a backdrop click, we always want to restore focus. We\n // don't need to check whether focus is currently in the drawer, as clicking on the\n // backdrop causes blurs the active element.\n return this._setOpen(/* isOpen */ false, /* restoreFocus */ true, 'mouse');\n }\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen = !this.opened, openedVia) {\n // If the focus is currently inside the drawer content and we are closing the drawer,\n // restore the focus to the initially focused element (when the drawer opened).\n if (isOpen && openedVia) {\n this._openedVia = openedVia;\n }\n const result = this._setOpen(isOpen, \n /* restoreFocus */ !isOpen && this._isFocusWithinDrawer(), this._openedVia || 'program');\n if (!isOpen) {\n this._openedVia = null;\n }\n return result;\n }\n /**\n * Toggles the opened state of the drawer.\n * @param isOpen Whether the drawer should open or close.\n * @param restoreFocus Whether focus should be restored on close.\n * @param focusOrigin Origin to use when restoring focus.\n */\n _setOpen(isOpen, restoreFocus, focusOrigin) {\n this._opened = isOpen;\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n }\n else {\n this._animationState = 'void';\n if (restoreFocus) {\n this._restoreFocus(focusOrigin);\n }\n }\n this._updateFocusTrapState();\n return new Promise(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n _getWidth() {\n return this._elementRef.nativeElement ? this._elementRef.nativeElement.offsetWidth || 0 : 0;\n }\n /** Updates the enabled state of the focus trap. */\n _updateFocusTrapState() {\n if (this._focusTrap) {\n // The focus trap is only enabled when the drawer is open in any mode other than side.\n this._focusTrap.enabled = this.opened && this.mode !== 'side';\n }\n }\n /**\n * Updates the position of the drawer in the DOM. We need to move the element around ourselves\n * when it's in the `end` position so that it comes after the content and the visual order\n * matches the tab order. We also need to be able to move it back to `start` if the sidenav\n * started off as `end` and was changed to `start`.\n */\n _updatePositionInParent(newPosition) {\n const element = this._elementRef.nativeElement;\n const parent = element.parentNode;\n if (newPosition === 'end') {\n if (!this._anchor) {\n this._anchor = this._doc.createComment('mat-drawer-anchor');\n parent.insertBefore(this._anchor, element);\n }\n parent.appendChild(element);\n }\n else if (this._anchor) {\n this._anchor.parentNode.insertBefore(element, this._anchor);\n }\n }\n}\nMatDrawer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawer, deps: [{ token: i0.ElementRef }, { token: i2.FocusTrapFactory }, { token: i2.FocusMonitor }, { token: i3.Platform }, { token: i0.NgZone }, { token: i2.InteractivityChecker }, { token: DOCUMENT, optional: true }, { token: MAT_DRAWER_CONTAINER, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatDrawer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatDrawer, selector: \"mat-drawer\", inputs: { position: \"position\", mode: \"mode\", disableClose: \"disableClose\", autoFocus: \"autoFocus\", opened: \"opened\" }, outputs: { openedChange: \"openedChange\", _openedStream: \"opened\", openedStart: \"openedStart\", _closedStream: \"closed\", closedStart: \"closedStart\", onPositionChanged: \"positionChanged\" }, host: { attributes: { \"tabIndex\": \"-1\" }, listeners: { \"@transform.start\": \"_animationStarted.next($event)\", \"@transform.done\": \"_animationEnd.next($event)\" }, properties: { \"attr.align\": \"null\", \"class.mat-drawer-end\": \"position === \\\"end\\\"\", \"class.mat-drawer-over\": \"mode === \\\"over\\\"\", \"class.mat-drawer-push\": \"mode === \\\"push\\\"\", \"class.mat-drawer-side\": \"mode === \\\"side\\\"\", \"class.mat-drawer-opened\": \"opened\", \"@transform\": \"_animationState\" }, classAttribute: \"mat-drawer\" }, viewQueries: [{ propertyName: \"_content\", first: true, predicate: [\"content\"], descendants: true }], exportAs: [\"matDrawer\"], ngImport: i0, template: \"
\\r\\n \\r\\n
\\r\\n\", dependencies: [{ kind: \"directive\", type: i1.CdkScrollable, selector: \"[cdk-scrollable], [cdkScrollable]\" }], animations: [matDrawerAnimations.transformDrawer], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawer, decorators: [{\n type: Component,\n args: [{ selector: 'mat-drawer', exportAs: 'matDrawer', animations: [matDrawerAnimations.transformDrawer], host: {\n 'class': 'mat-drawer',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n 'tabIndex': '-1',\n '[@transform]': '_animationState',\n '(@transform.start)': '_animationStarted.next($event)',\n '(@transform.done)': '_animationEnd.next($event)',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\r\\n \\r\\n
\\r\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i2.FocusTrapFactory }, { type: i2.FocusMonitor }, { type: i3.Platform }, { type: i0.NgZone }, { type: i2.InteractivityChecker }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: MatDrawerContainer, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DRAWER_CONTAINER]\n }] }]; }, propDecorators: { position: [{\n type: Input\n }], mode: [{\n type: Input\n }], disableClose: [{\n type: Input\n }], autoFocus: [{\n type: Input\n }], opened: [{\n type: Input\n }], openedChange: [{\n type: Output\n }], _openedStream: [{\n type: Output,\n args: ['opened']\n }], openedStart: [{\n type: Output\n }], _closedStream: [{\n type: Output,\n args: ['closed']\n }], closedStart: [{\n type: Output\n }], onPositionChanged: [{\n type: Output,\n args: ['positionChanged']\n }], _content: [{\n type: ViewChild,\n args: ['content']\n }] } });\n/**\n * `` component.\n *\n * This is the parent component to one or two ``s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\nclass MatDrawerContainer {\n constructor(_dir, _element, _ngZone, _changeDetectorRef, viewportRuler, defaultAutosize = false, _animationMode) {\n this._dir = _dir;\n this._element = _element;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** Drawers that belong to this container. */\n this._drawers = new QueryList();\n /** Event emitted when the drawer backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n this._doCheckSubject = new Subject();\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n this._contentMargins = { left: null, right: null };\n this._contentMarginChanges = new Subject();\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler\n .change()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n this._autosize = defaultAutosize;\n }\n /** The drawer child with the `start` position. */\n get start() {\n return this._start;\n }\n /** The drawer child with the `end` position. */\n get end() {\n return this._end;\n }\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n get autosize() {\n return this._autosize;\n }\n set autosize(value) {\n this._autosize = coerceBooleanProperty(value);\n }\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n get hasBackdrop() {\n if (this._backdropOverride == null) {\n return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';\n }\n return this._backdropOverride;\n }\n set hasBackdrop(value) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable() {\n return this._userContent || this._content;\n }\n ngAfterContentInit() {\n this._allDrawers.changes\n .pipe(startWith(this._allDrawers), takeUntil(this._destroyed))\n .subscribe((drawer) => {\n this._drawers.reset(drawer.filter(item => !item._container || item._container === this));\n this._drawers.notifyOnChanges();\n });\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n this._drawers.forEach((drawer) => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n if (!this._drawers.length ||\n this._isDrawerOpen(this._start) ||\n this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n this._changeDetectorRef.markForCheck();\n });\n // Avoid hitting the NgZone through the debounce timeout.\n this._ngZone.runOutsideAngular(() => {\n this._doCheckSubject\n .pipe(debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n });\n }\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._drawers.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Calls `open` of both start and end drawers */\n open() {\n this._drawers.forEach(drawer => drawer.open());\n }\n /** Calls `close` of both start and end drawers */\n close() {\n this._drawers.forEach(drawer => drawer.close());\n }\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._getWidth();\n }\n else if (this._left.mode == 'push') {\n const width = this._left._getWidth();\n left += width;\n right -= width;\n }\n }\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._getWidth();\n }\n else if (this._right.mode == 'push') {\n const width = this._right._getWidth();\n right += width;\n left -= width;\n }\n }\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null;\n right = right || null;\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = { left, right };\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n _watchDrawerToggle(drawer) {\n drawer._animationStarted\n .pipe(filter((event) => event.fromState !== event.toState), takeUntil(this._drawers.changes))\n .subscribe((event) => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n if (drawer.mode !== 'side') {\n drawer.openedChange\n .pipe(takeUntil(this._drawers.changes))\n .subscribe(() => this._setContainerClass(drawer.opened));\n }\n }\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n _watchDrawerPosition(drawer) {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n this._validateDrawers();\n });\n });\n }\n /** Subscribes to changes in drawer mode so we can run change detection. */\n _watchDrawerMode(drawer) {\n if (drawer) {\n drawer._modeChanged\n .pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))\n .subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n _setContainerClass(isAdd) {\n const classList = this._element.nativeElement.classList;\n const className = 'mat-drawer-container-has-open';\n if (isAdd) {\n classList.add(className);\n }\n else {\n classList.remove(className);\n }\n }\n /** Validate the state of the drawer children components. */\n _validateDrawers() {\n this._start = this._end = null;\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n }\n else {\n if (this._start != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n this._right = this._left = null;\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n }\n else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n /** Whether the container is being pushed to the side by one of the drawers. */\n _isPushed() {\n return ((this._isDrawerOpen(this._start) && this._start.mode != 'over') ||\n (this._isDrawerOpen(this._end) && this._end.mode != 'over'));\n }\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawersViaBackdrop();\n }\n _closeModalDrawersViaBackdrop() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end]\n .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))\n .forEach(drawer => drawer._closeViaBackdropClick());\n }\n _isShowingBackdrop() {\n return ((this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||\n (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end)));\n }\n _canHaveBackdrop(drawer) {\n return drawer.mode !== 'side' || !!this._backdropOverride;\n }\n _isDrawerOpen(drawer) {\n return drawer != null && drawer.opened;\n }\n}\nMatDrawerContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawerContainer, deps: [{ token: i4.Directionality, optional: true }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.ViewportRuler }, { token: MAT_DRAWER_DEFAULT_AUTOSIZE }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatDrawerContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatDrawerContainer, selector: \"mat-drawer-container\", inputs: { autosize: \"autosize\", hasBackdrop: \"hasBackdrop\" }, outputs: { backdropClick: \"backdropClick\" }, host: { properties: { \"class.mat-drawer-container-explicit-backdrop\": \"_backdropOverride\" }, classAttribute: \"mat-drawer-container\" }, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer,\n },\n ], queries: [{ propertyName: \"_content\", first: true, predicate: MatDrawerContent, descendants: true }, { propertyName: \"_allDrawers\", predicate: MatDrawer, descendants: true }], viewQueries: [{ propertyName: \"_userContent\", first: true, predicate: MatDrawerContent, descendants: true }], exportAs: [\"matDrawerContainer\"], ngImport: i0, template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\"], dependencies: [{ kind: \"directive\", type: i5.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: MatDrawerContent, selector: \"mat-drawer-content\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatDrawerContainer, decorators: [{\n type: Component,\n args: [{ selector: 'mat-drawer-container', exportAs: 'matDrawerContainer', host: {\n 'class': 'mat-drawer-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer,\n },\n ], template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\"] }]\n }], ctorParameters: function () { return [{ type: i4.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.ViewportRuler }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DRAWER_DEFAULT_AUTOSIZE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { _allDrawers: [{\n type: ContentChildren,\n args: [MatDrawer, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true,\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatDrawerContent]\n }], _userContent: [{\n type: ViewChild,\n args: [MatDrawerContent]\n }], autosize: [{\n type: Input\n }], hasBackdrop: [{\n type: Input\n }], backdropClick: [{\n type: Output\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSidenavContent extends MatDrawerContent {\n constructor(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n}\nMatSidenavContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavContent, deps: [{ token: i0.ChangeDetectorRef }, { token: forwardRef(() => MatSidenavContainer) }, { token: i0.ElementRef }, { token: i1.ScrollDispatcher }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nMatSidenavContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatSidenavContent, selector: \"mat-sidenav-content\", host: { properties: { \"style.margin-left.px\": \"_container._contentMargins.left\", \"style.margin-right.px\": \"_container._contentMargins.right\" }, classAttribute: \"mat-drawer-content mat-sidenav-content\" }, providers: [\n {\n provide: CdkScrollable,\n useExisting: MatSidenavContent,\n },\n ], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavContent, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-sidenav-content',\n template: '',\n host: {\n 'class': 'mat-drawer-content mat-sidenav-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: CdkScrollable,\n useExisting: MatSidenavContent,\n },\n ],\n }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: MatSidenavContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatSidenavContainer)]\n }] }, { type: i0.ElementRef }, { type: i1.ScrollDispatcher }, { type: i0.NgZone }]; } });\nclass MatSidenav extends MatDrawer {\n constructor() {\n super(...arguments);\n this._fixedInViewport = false;\n this._fixedTopGap = 0;\n this._fixedBottomGap = 0;\n }\n /** Whether the sidenav is fixed in the viewport. */\n get fixedInViewport() {\n return this._fixedInViewport;\n }\n set fixedInViewport(value) {\n this._fixedInViewport = coerceBooleanProperty(value);\n }\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n get fixedTopGap() {\n return this._fixedTopGap;\n }\n set fixedTopGap(value) {\n this._fixedTopGap = coerceNumberProperty(value);\n }\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n get fixedBottomGap() {\n return this._fixedBottomGap;\n }\n set fixedBottomGap(value) {\n this._fixedBottomGap = coerceNumberProperty(value);\n }\n}\nMatSidenav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenav, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatSidenav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatSidenav, selector: \"mat-sidenav\", inputs: { fixedInViewport: \"fixedInViewport\", fixedTopGap: \"fixedTopGap\", fixedBottomGap: \"fixedBottomGap\" }, host: { attributes: { \"tabIndex\": \"-1\" }, properties: { \"attr.align\": \"null\", \"class.mat-drawer-end\": \"position === \\\"end\\\"\", \"class.mat-drawer-over\": \"mode === \\\"over\\\"\", \"class.mat-drawer-push\": \"mode === \\\"push\\\"\", \"class.mat-drawer-side\": \"mode === \\\"side\\\"\", \"class.mat-drawer-opened\": \"opened\", \"class.mat-sidenav-fixed\": \"fixedInViewport\", \"style.top.px\": \"fixedInViewport ? fixedTopGap : null\", \"style.bottom.px\": \"fixedInViewport ? fixedBottomGap : null\" }, classAttribute: \"mat-drawer mat-sidenav\" }, exportAs: [\"matSidenav\"], usesInheritance: true, ngImport: i0, template: \"
\\r\\n \\r\\n
\\r\\n\", dependencies: [{ kind: \"directive\", type: i1.CdkScrollable, selector: \"[cdk-scrollable], [cdkScrollable]\" }], animations: [matDrawerAnimations.transformDrawer], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenav, decorators: [{\n type: Component,\n args: [{ selector: 'mat-sidenav', exportAs: 'matSidenav', animations: [matDrawerAnimations.transformDrawer], host: {\n 'class': 'mat-drawer mat-sidenav',\n 'tabIndex': '-1',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n '[class.mat-sidenav-fixed]': 'fixedInViewport',\n '[style.top.px]': 'fixedInViewport ? fixedTopGap : null',\n '[style.bottom.px]': 'fixedInViewport ? fixedBottomGap : null',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\r\\n \\r\\n
\\r\\n\" }]\n }], propDecorators: { fixedInViewport: [{\n type: Input\n }], fixedTopGap: [{\n type: Input\n }], fixedBottomGap: [{\n type: Input\n }] } });\nclass MatSidenavContainer extends MatDrawerContainer {\n}\nMatSidenavContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavContainer, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatSidenavContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatSidenavContainer, selector: \"mat-sidenav-container\", host: { properties: { \"class.mat-drawer-container-explicit-backdrop\": \"_backdropOverride\" }, classAttribute: \"mat-drawer-container mat-sidenav-container\" }, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer,\n },\n ], queries: [{ propertyName: \"_content\", first: true, predicate: MatSidenavContent, descendants: true }, { propertyName: \"_allDrawers\", predicate: MatSidenav, descendants: true }], exportAs: [\"matSidenavContainer\"], usesInheritance: true, ngImport: i0, template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\"], dependencies: [{ kind: \"directive\", type: i5.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: MatSidenavContent, selector: \"mat-sidenav-content\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavContainer, decorators: [{\n type: Component,\n args: [{ selector: 'mat-sidenav-container', exportAs: 'matSidenavContainer', host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer,\n },\n ], template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\"] }]\n }], propDecorators: { _allDrawers: [{\n type: ContentChildren,\n args: [MatSidenav, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true,\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatSidenavContent]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSidenavModule {\n}\nMatSidenavModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatSidenavModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavModule, declarations: [MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent], imports: [CommonModule, MatCommonModule, CdkScrollableModule], exports: [CdkScrollableModule,\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent] });\nMatSidenavModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavModule, imports: [CommonModule, MatCommonModule, CdkScrollableModule, CdkScrollableModule,\n MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSidenavModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule, CdkScrollableModule],\n exports: [\n CdkScrollableModule,\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n declarations: [\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DRAWER_DEFAULT_AUTOSIZE, MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent, MatSidenavModule, matDrawerAnimations, throwMatDuplicatedDrawerError };\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport * as i1 from '@angular/cdk/bidi';\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey, SPACE, ENTER } from '@angular/cdk/keycodes';\nimport * as i0 from '@angular/core';\nimport { Directive, InjectionToken, EventEmitter, forwardRef, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, Optional, ContentChild, ViewChild, Input, Output, QueryList, ContentChildren, NgModule } from '@angular/core';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { Subject, of } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkStepHeader {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n /** Focuses the step header. */\n focus() {\n this._elementRef.nativeElement.focus();\n }\n}\nCdkStepHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepHeader, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepHeader.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStepHeader, selector: \"[cdkStepHeader]\", host: { attributes: { \"role\": \"tab\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepHeader, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepHeader]',\n host: {\n 'role': 'tab',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkStepLabel {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkStepLabel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepLabel, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepLabel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStepLabel, selector: \"[cdkStepLabel]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepLabel, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepLabel]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate unique ID for each stepper component. */\nlet nextId = 0;\n/** Change event emitted on selection changes. */\nclass StepperSelectionEvent {\n}\n/** Enum to represent the different states of the steps. */\nconst STEP_STATE = {\n NUMBER: 'number',\n EDIT: 'edit',\n DONE: 'done',\n ERROR: 'error',\n};\n/** InjectionToken that can be used to specify the global stepper options. */\nconst STEPPER_GLOBAL_OPTIONS = new InjectionToken('STEPPER_GLOBAL_OPTIONS');\nclass CdkStep {\n constructor(_stepper, stepperOptions) {\n this._stepper = _stepper;\n /** Whether user has attempted to move away from the step. */\n this.interacted = false;\n /** Emits when the user has attempted to move away from the step. */\n this.interactedStream = new EventEmitter();\n this._editable = true;\n this._optional = false;\n this._completedOverride = null;\n this._customError = null;\n this._stepperOptions = stepperOptions ? stepperOptions : {};\n this._displayDefaultIndicatorType = this._stepperOptions.displayDefaultIndicatorType !== false;\n }\n /** Whether the user can return to this step once it has been marked as completed. */\n get editable() {\n return this._editable;\n }\n set editable(value) {\n this._editable = coerceBooleanProperty(value);\n }\n /** Whether the completion of step is optional. */\n get optional() {\n return this._optional;\n }\n set optional(value) {\n this._optional = coerceBooleanProperty(value);\n }\n /** Whether step is marked as completed. */\n get completed() {\n return this._completedOverride == null ? this._getDefaultCompleted() : this._completedOverride;\n }\n set completed(value) {\n this._completedOverride = coerceBooleanProperty(value);\n }\n _getDefaultCompleted() {\n return this.stepControl ? this.stepControl.valid && this.interacted : this.interacted;\n }\n /** Whether step has an error. */\n get hasError() {\n return this._customError == null ? this._getDefaultError() : this._customError;\n }\n set hasError(value) {\n this._customError = coerceBooleanProperty(value);\n }\n _getDefaultError() {\n return this.stepControl && this.stepControl.invalid && this.interacted;\n }\n /** Selects this step component. */\n select() {\n this._stepper.selected = this;\n }\n /** Resets the step to its initial state. Note that this includes resetting form data. */\n reset() {\n this.interacted = false;\n if (this._completedOverride != null) {\n this._completedOverride = false;\n }\n if (this._customError != null) {\n this._customError = false;\n }\n if (this.stepControl) {\n this.stepControl.reset();\n }\n }\n ngOnChanges() {\n // Since basically all inputs of the MatStep get proxied through the view down to the\n // underlying MatStepHeader, we have to make sure that change detection runs correctly.\n this._stepper._stateChanged();\n }\n _markAsInteracted() {\n if (!this.interacted) {\n this.interacted = true;\n this.interactedStream.emit(this);\n }\n }\n /** Determines whether the error state can be shown. */\n _showError() {\n // We want to show the error state either if the user opted into/out of it using the\n // global options, or if they've explicitly set it through the `hasError` input.\n return this._stepperOptions.showError ?? this._customError != null;\n }\n}\nCdkStep.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStep, deps: [{ token: forwardRef(() => CdkStepper) }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nCdkStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStep, selector: \"cdk-step\", inputs: { stepControl: \"stepControl\", label: \"label\", errorMessage: \"errorMessage\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], state: \"state\", editable: \"editable\", optional: \"optional\", completed: \"completed\", hasError: \"hasError\" }, outputs: { interactedStream: \"interacted\" }, queries: [{ propertyName: \"stepLabel\", first: true, predicate: CdkStepLabel, descendants: true }], viewQueries: [{ propertyName: \"content\", first: true, predicate: TemplateRef, descendants: true, static: true }], exportAs: [\"cdkStep\"], usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStep, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-step',\n exportAs: 'cdkStep',\n template: '',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n }]\n }], ctorParameters: function () { return [{ type: CdkStepper, decorators: [{\n type: Inject,\n args: [forwardRef(() => CdkStepper)]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [STEPPER_GLOBAL_OPTIONS]\n }] }]; }, propDecorators: { stepLabel: [{\n type: ContentChild,\n args: [CdkStepLabel]\n }], content: [{\n type: ViewChild,\n args: [TemplateRef, { static: true }]\n }], stepControl: [{\n type: Input\n }], interactedStream: [{\n type: Output,\n args: ['interacted']\n }], label: [{\n type: Input\n }], errorMessage: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], state: [{\n type: Input\n }], editable: [{\n type: Input\n }], optional: [{\n type: Input\n }], completed: [{\n type: Input\n }], hasError: [{\n type: Input\n }] } });\nclass CdkStepper {\n constructor(_dir, _changeDetectorRef, _elementRef) {\n this._dir = _dir;\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Steps that belong to the current stepper, excluding ones from nested steppers. */\n this.steps = new QueryList();\n /** List of step headers sorted based on their DOM order. */\n this._sortedHeaders = new QueryList();\n this._linear = false;\n this._selectedIndex = 0;\n /** Event emitted when the selected step has changed. */\n this.selectionChange = new EventEmitter();\n this._orientation = 'horizontal';\n this._groupId = nextId++;\n }\n /** Whether the validity of previous steps should be checked or not. */\n get linear() {\n return this._linear;\n }\n set linear(value) {\n this._linear = coerceBooleanProperty(value);\n }\n /** The index of the selected step. */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(index) {\n const newIndex = coerceNumberProperty(index);\n if (this.steps && this._steps) {\n // Ensure that the index can't be out of bounds.\n if (!this._isValidIndex(newIndex) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('cdkStepper: Cannot assign out-of-bounds value to `selectedIndex`.');\n }\n this.selected?._markAsInteracted();\n if (this._selectedIndex !== newIndex &&\n !this._anyControlsInvalidOrPending(newIndex) &&\n (newIndex >= this._selectedIndex || this.steps.toArray()[newIndex].editable)) {\n this._updateSelectedItemIndex(newIndex);\n }\n }\n else {\n this._selectedIndex = newIndex;\n }\n }\n /** The step that is selected. */\n get selected() {\n return this.steps ? this.steps.toArray()[this.selectedIndex] : undefined;\n }\n set selected(step) {\n this.selectedIndex = step && this.steps ? this.steps.toArray().indexOf(step) : -1;\n }\n /** Orientation of the stepper. */\n get orientation() {\n return this._orientation;\n }\n set orientation(value) {\n // This is a protected method so that `MatStepper` can hook into it.\n this._orientation = value;\n if (this._keyManager) {\n this._keyManager.withVerticalOrientation(value === 'vertical');\n }\n }\n ngAfterContentInit() {\n this._steps.changes\n .pipe(startWith(this._steps), takeUntil(this._destroyed))\n .subscribe((steps) => {\n this.steps.reset(steps.filter(step => step._stepper === this));\n this.steps.notifyOnChanges();\n });\n }\n ngAfterViewInit() {\n // If the step headers are defined outside of the `ngFor` that renders the steps, like in the\n // Material stepper, they won't appear in the `QueryList` in the same order as they're\n // rendered in the DOM which will lead to incorrect keyboard navigation. We need to sort\n // them manually to ensure that they're correct. Alternatively, we can change the Material\n // template to inline the headers in the `ngFor`, but that'll result in a lot of\n // code duplication. See #23539.\n this._stepHeader.changes\n .pipe(startWith(this._stepHeader), takeUntil(this._destroyed))\n .subscribe((headers) => {\n this._sortedHeaders.reset(headers.toArray().sort((a, b) => {\n const documentPosition = a._elementRef.nativeElement.compareDocumentPosition(b._elementRef.nativeElement);\n // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n // tslint:disable-next-line:no-bitwise\n return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n }));\n this._sortedHeaders.notifyOnChanges();\n });\n // Note that while the step headers are content children by default, any components that\n // extend this one might have them as view children. We initialize the keyboard handling in\n // AfterViewInit so we're guaranteed for both view and content children to be defined.\n this._keyManager = new FocusKeyManager(this._sortedHeaders)\n .withWrap()\n .withHomeAndEnd()\n .withVerticalOrientation(this._orientation === 'vertical');\n (this._dir ? this._dir.change : of())\n .pipe(startWith(this._layoutDirection()), takeUntil(this._destroyed))\n .subscribe(direction => this._keyManager.withHorizontalOrientation(direction));\n this._keyManager.updateActiveItem(this._selectedIndex);\n // No need to `takeUntil` here, because we're the ones destroying `steps`.\n this.steps.changes.subscribe(() => {\n if (!this.selected) {\n this._selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n });\n // The logic which asserts that the selected index is within bounds doesn't run before the\n // steps are initialized, because we don't how many steps there are yet so we may have an\n // invalid index on init. If that's the case, auto-correct to the default so we don't throw.\n if (!this._isValidIndex(this._selectedIndex)) {\n this._selectedIndex = 0;\n }\n }\n ngOnDestroy() {\n this.steps.destroy();\n this._sortedHeaders.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Selects and focuses the next step in list. */\n next() {\n this.selectedIndex = Math.min(this._selectedIndex + 1, this.steps.length - 1);\n }\n /** Selects and focuses the previous step in list. */\n previous() {\n this.selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n /** Resets the stepper to its initial state. Note that this includes clearing form data. */\n reset() {\n this._updateSelectedItemIndex(0);\n this.steps.forEach(step => step.reset());\n this._stateChanged();\n }\n /** Returns a unique id for each step label element. */\n _getStepLabelId(i) {\n return `cdk-step-label-${this._groupId}-${i}`;\n }\n /** Returns unique id for each step content element. */\n _getStepContentId(i) {\n return `cdk-step-content-${this._groupId}-${i}`;\n }\n /** Marks the component to be change detected. */\n _stateChanged() {\n this._changeDetectorRef.markForCheck();\n }\n /** Returns position state of the step with the given index. */\n _getAnimationDirection(index) {\n const position = index - this._selectedIndex;\n if (position < 0) {\n return this._layoutDirection() === 'rtl' ? 'next' : 'previous';\n }\n else if (position > 0) {\n return this._layoutDirection() === 'rtl' ? 'previous' : 'next';\n }\n return 'current';\n }\n /** Returns the type of icon to be displayed. */\n _getIndicatorType(index, state = STEP_STATE.NUMBER) {\n const step = this.steps.toArray()[index];\n const isCurrentStep = this._isCurrentStep(index);\n return step._displayDefaultIndicatorType\n ? this._getDefaultIndicatorLogic(step, isCurrentStep)\n : this._getGuidelineLogic(step, isCurrentStep, state);\n }\n _getDefaultIndicatorLogic(step, isCurrentStep) {\n if (step._showError() && step.hasError && !isCurrentStep) {\n return STEP_STATE.ERROR;\n }\n else if (!step.completed || isCurrentStep) {\n return STEP_STATE.NUMBER;\n }\n else {\n return step.editable ? STEP_STATE.EDIT : STEP_STATE.DONE;\n }\n }\n _getGuidelineLogic(step, isCurrentStep, state = STEP_STATE.NUMBER) {\n if (step._showError() && step.hasError && !isCurrentStep) {\n return STEP_STATE.ERROR;\n }\n else if (step.completed && !isCurrentStep) {\n return STEP_STATE.DONE;\n }\n else if (step.completed && isCurrentStep) {\n return state;\n }\n else if (step.editable && isCurrentStep) {\n return STEP_STATE.EDIT;\n }\n else {\n return state;\n }\n }\n _isCurrentStep(index) {\n return this._selectedIndex === index;\n }\n /** Returns the index of the currently-focused step header. */\n _getFocusIndex() {\n return this._keyManager ? this._keyManager.activeItemIndex : this._selectedIndex;\n }\n _updateSelectedItemIndex(newIndex) {\n const stepsArray = this.steps.toArray();\n this.selectionChange.emit({\n selectedIndex: newIndex,\n previouslySelectedIndex: this._selectedIndex,\n selectedStep: stepsArray[newIndex],\n previouslySelectedStep: stepsArray[this._selectedIndex],\n });\n // If focus is inside the stepper, move it to the next header, otherwise it may become\n // lost when the active step content is hidden. We can't be more granular with the check\n // (e.g. checking whether focus is inside the active step), because we don't have a\n // reference to the elements that are rendering out the content.\n this._containsFocus()\n ? this._keyManager.setActiveItem(newIndex)\n : this._keyManager.updateActiveItem(newIndex);\n this._selectedIndex = newIndex;\n this._stateChanged();\n }\n _onKeydown(event) {\n const hasModifier = hasModifierKey(event);\n const keyCode = event.keyCode;\n const manager = this._keyManager;\n if (manager.activeItemIndex != null &&\n !hasModifier &&\n (keyCode === SPACE || keyCode === ENTER)) {\n this.selectedIndex = manager.activeItemIndex;\n event.preventDefault();\n }\n else {\n manager.onKeydown(event);\n }\n }\n _anyControlsInvalidOrPending(index) {\n if (this._linear && index >= 0) {\n return this.steps\n .toArray()\n .slice(0, index)\n .some(step => {\n const control = step.stepControl;\n const isIncomplete = control\n ? control.invalid || control.pending || !step.interacted\n : !step.completed;\n return isIncomplete && !step.optional && !step._completedOverride;\n });\n }\n return false;\n }\n _layoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Checks whether the stepper contains the focused element. */\n _containsFocus() {\n const stepperElement = this._elementRef.nativeElement;\n const focusedElement = _getFocusedElementPierceShadowDom();\n return stepperElement === focusedElement || stepperElement.contains(focusedElement);\n }\n /** Checks whether the passed-in index is a valid step index. */\n _isValidIndex(index) {\n return index > -1 && (!this.steps || index < this.steps.length);\n }\n}\nCdkStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepper, deps: [{ token: i1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStepper, selector: \"[cdkStepper]\", inputs: { linear: \"linear\", selectedIndex: \"selectedIndex\", selected: \"selected\", orientation: \"orientation\" }, outputs: { selectionChange: \"selectionChange\" }, queries: [{ propertyName: \"_steps\", predicate: CdkStep, descendants: true }, { propertyName: \"_stepHeader\", predicate: CdkStepHeader, descendants: true }], exportAs: [\"cdkStepper\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepper, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepper]',\n exportAs: 'cdkStepper',\n }]\n }], ctorParameters: function () { return [{ type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { _steps: [{\n type: ContentChildren,\n args: [CdkStep, { descendants: true }]\n }], _stepHeader: [{\n type: ContentChildren,\n args: [CdkStepHeader, { descendants: true }]\n }], linear: [{\n type: Input\n }], selectedIndex: [{\n type: Input\n }], selected: [{\n type: Input\n }], selectionChange: [{\n type: Output\n }], orientation: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Button that moves to the next step in a stepper workflow. */\nclass CdkStepperNext {\n constructor(_stepper) {\n this._stepper = _stepper;\n /** Type of the next button. Defaults to \"submit\" if not specified. */\n this.type = 'submit';\n }\n}\nCdkStepperNext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperNext, deps: [{ token: CdkStepper }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepperNext.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStepperNext, selector: \"button[cdkStepperNext]\", inputs: { type: \"type\" }, host: { listeners: { \"click\": \"_stepper.next()\" }, properties: { \"type\": \"type\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperNext, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[cdkStepperNext]',\n host: {\n '[type]': 'type',\n '(click)': '_stepper.next()',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkStepper }]; }, propDecorators: { type: [{\n type: Input\n }] } });\n/** Button that moves to the previous step in a stepper workflow. */\nclass CdkStepperPrevious {\n constructor(_stepper) {\n this._stepper = _stepper;\n /** Type of the previous button. Defaults to \"button\" if not specified. */\n this.type = 'button';\n }\n}\nCdkStepperPrevious.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperPrevious, deps: [{ token: CdkStepper }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepperPrevious.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkStepperPrevious, selector: \"button[cdkStepperPrevious]\", inputs: { type: \"type\" }, host: { listeners: { \"click\": \"_stepper.previous()\" }, properties: { \"type\": \"type\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperPrevious, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[cdkStepperPrevious]',\n host: {\n '[type]': 'type',\n '(click)': '_stepper.previous()',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkStepper }]; }, propDecorators: { type: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkStepperModule {\n}\nCdkStepperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCdkStepperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperModule, declarations: [CdkStep,\n CdkStepper,\n CdkStepHeader,\n CdkStepLabel,\n CdkStepperNext,\n CdkStepperPrevious], imports: [BidiModule], exports: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious] });\nCdkStepperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperModule, imports: [BidiModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkStepperModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [BidiModule],\n exports: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious],\n declarations: [\n CdkStep,\n CdkStepper,\n CdkStepHeader,\n CdkStepLabel,\n CdkStepperNext,\n CdkStepperPrevious,\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkStep, CdkStepHeader, CdkStepLabel, CdkStepper, CdkStepperModule, CdkStepperNext, CdkStepperPrevious, STEPPER_GLOBAL_OPTIONS, STEP_STATE, StepperSelectionEvent };\n","import * as i2$1 from '@angular/cdk/portal';\nimport { TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { CdkStepLabel, CdkStepHeader, CdkStep, STEPPER_GLOBAL_OPTIONS, CdkStepper, CdkStepperNext, CdkStepperPrevious, CdkStepperModule } from '@angular/cdk/stepper';\nimport * as i3 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Directive, Injectable, Optional, SkipSelf, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, forwardRef, Inject, ContentChild, QueryList, EventEmitter, ViewChildren, ContentChildren, Output, NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport * as i1 from '@angular/material/core';\nimport { mixinColor, ErrorStateMatcher, MatCommonModule, MatRippleModule } from '@angular/material/core';\nimport * as i4 from '@angular/material/icon';\nimport { MatIconModule } from '@angular/material/icon';\nimport * as i2 from '@angular/cdk/a11y';\nimport { Subject, Subscription } from 'rxjs';\nimport * as i3$1 from '@angular/cdk/bidi';\nimport { switchMap, map, startWith, takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatStepLabel extends CdkStepLabel {\n}\nMatStepLabel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepLabel, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatStepLabel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepLabel, selector: \"[matStepLabel]\", usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepLabel, decorators: [{\n type: Directive,\n args: [{\n selector: '[matStepLabel]',\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Stepper data that is required for internationalization. */\nclass MatStepperIntl {\n constructor() {\n /**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\n this.changes = new Subject();\n /** Label that is rendered below optional steps. */\n this.optionalLabel = 'Optional';\n /** Label that is used to indicate step as completed to screen readers. */\n this.completedLabel = 'Completed';\n /** Label that is used to indicate step as editable to screen readers. */\n this.editableLabel = 'Editable';\n }\n}\nMatStepperIntl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMatStepperIntl.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperIntl, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperIntl, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n/** @docs-private */\nfunction MAT_STEPPER_INTL_PROVIDER_FACTORY(parentIntl) {\n return parentIntl || new MatStepperIntl();\n}\n/** @docs-private */\nconst MAT_STEPPER_INTL_PROVIDER = {\n provide: MatStepperIntl,\n deps: [[new Optional(), new SkipSelf(), MatStepperIntl]],\n useFactory: MAT_STEPPER_INTL_PROVIDER_FACTORY,\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatStepHeader.\n/** @docs-private */\nconst _MatStepHeaderBase = mixinColor(class MatStepHeaderBase extends CdkStepHeader {\n constructor(elementRef) {\n super(elementRef);\n }\n}, 'primary');\nclass MatStepHeader extends _MatStepHeaderBase {\n constructor(_intl, _focusMonitor, _elementRef, changeDetectorRef) {\n super(_elementRef);\n this._intl = _intl;\n this._focusMonitor = _focusMonitor;\n this._intlSubscription = _intl.changes.subscribe(() => changeDetectorRef.markForCheck());\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true);\n }\n ngOnDestroy() {\n this._intlSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n /** Focuses the step header. */\n focus(origin, options) {\n if (origin) {\n this._focusMonitor.focusVia(this._elementRef, origin, options);\n }\n else {\n this._elementRef.nativeElement.focus(options);\n }\n }\n /** Returns string label of given step if it is a text label. */\n _stringLabel() {\n return this.label instanceof MatStepLabel ? null : this.label;\n }\n /** Returns MatStepLabel if the label of given step is a template label. */\n _templateLabel() {\n return this.label instanceof MatStepLabel ? this.label : null;\n }\n /** Returns the host HTML element. */\n _getHostElement() {\n return this._elementRef.nativeElement;\n }\n /** Template context variables that are exposed to the `matStepperIcon` instances. */\n _getIconContext() {\n return {\n index: this.index,\n active: this.active,\n optional: this.optional,\n };\n }\n _getDefaultTextForState(state) {\n if (state == 'number') {\n return `${this.index + 1}`;\n }\n if (state == 'edit') {\n return 'create';\n }\n if (state == 'error') {\n return 'warning';\n }\n return state;\n }\n}\nMatStepHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepHeader, deps: [{ token: MatStepperIntl }, { token: i2.FocusMonitor }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nMatStepHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepHeader, selector: \"mat-step-header\", inputs: { color: \"color\", state: \"state\", label: \"label\", errorMessage: \"errorMessage\", iconOverrides: \"iconOverrides\", index: \"index\", selected: \"selected\", active: \"active\", optional: \"optional\", disableRipple: \"disableRipple\" }, host: { attributes: { \"role\": \"tab\" }, classAttribute: \"mat-step-header\" }, usesInheritance: true, ngImport: i0, template: \"
\\n\\n
\\n
\\n \\n \\n {{_getDefaultTextForState(state)}}\\n {{_intl.completedLabel}}\\n {{_intl.editableLabel}}\\n {{_getDefaultTextForState(state)}}\\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n \\n
{{label}}
\\n\\n
{{_intl.optionalLabel}}
\\n
{{errorMessage}}
\\n
\\n\\n\", styles: [\".mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-step-header:focus .mat-focus-indicator::before{content:\\\"\\\"}.cdk-high-contrast-active .mat-step-header{outline:solid 1px}.cdk-high-contrast-active .mat-step-header[aria-selected=true] .mat-step-label{text-decoration:underline}.mat-step-optional,.mat-step-sub-label-error{font-size:12px}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative}.mat-step-icon-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);display:flex}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\"], dependencies: [{ kind: \"directive\", type: i3.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i3.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i3.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i3.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i3.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"component\", type: i4.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"directive\", type: i1.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepHeader, decorators: [{\n type: Component,\n args: [{ selector: 'mat-step-header', inputs: ['color'], host: {\n 'class': 'mat-step-header',\n 'role': 'tab',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"
\\n\\n
\\n
\\n \\n \\n {{_getDefaultTextForState(state)}}\\n {{_intl.completedLabel}}\\n {{_intl.editableLabel}}\\n {{_getDefaultTextForState(state)}}\\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n \\n
{{label}}
\\n\\n
{{_intl.optionalLabel}}
\\n
{{errorMessage}}
\\n
\\n\\n\", styles: [\".mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-step-header:focus .mat-focus-indicator::before{content:\\\"\\\"}.cdk-high-contrast-active .mat-step-header{outline:solid 1px}.cdk-high-contrast-active .mat-step-header[aria-selected=true] .mat-step-label{text-decoration:underline}.mat-step-optional,.mat-step-sub-label-error{font-size:12px}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative}.mat-step-icon-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);display:flex}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\"] }]\n }], ctorParameters: function () { return [{ type: MatStepperIntl }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { state: [{\n type: Input\n }], label: [{\n type: Input\n }], errorMessage: [{\n type: Input\n }], iconOverrides: [{\n type: Input\n }], index: [{\n type: Input\n }], selected: [{\n type: Input\n }], active: [{\n type: Input\n }], optional: [{\n type: Input\n }], disableRipple: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_HORIZONTAL_ANIMATION_DURATION = '500ms';\nconst DEFAULT_VERTICAL_ANIMATION_DURATION = '225ms';\n/**\n * Animations used by the Material steppers.\n * @docs-private\n */\nconst matStepperAnimations = {\n /** Animation that transitions the step along the X axis in a horizontal stepper. */\n horizontalStepTransition: trigger('horizontalStepTransition', [\n state('previous', style({ transform: 'translate3d(-100%, 0, 0)', visibility: 'hidden' })),\n // Transition to `inherit`, rather than `visible`,\n // because visibility on a child element the one from the parent,\n // making this element focusable inside of a `hidden` element.\n state('current', style({ transform: 'none', visibility: 'inherit' })),\n state('next', style({ transform: 'translate3d(100%, 0, 0)', visibility: 'hidden' })),\n transition('* => *', animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)'), {\n params: { 'animationDuration': DEFAULT_HORIZONTAL_ANIMATION_DURATION },\n }),\n ]),\n /** Animation that transitions the step along the Y axis in a vertical stepper. */\n verticalStepTransition: trigger('verticalStepTransition', [\n state('previous', style({ height: '0px', visibility: 'hidden' })),\n state('next', style({ height: '0px', visibility: 'hidden' })),\n // Transition to `inherit`, rather than `visible`,\n // because visibility on a child element the one from the parent,\n // making this element focusable inside of a `hidden` element.\n state('current', style({ height: '*', visibility: 'inherit' })),\n transition('* <=> current', animate('{{animationDuration}} cubic-bezier(0.4, 0.0, 0.2, 1)'), {\n params: { 'animationDuration': DEFAULT_VERTICAL_ANIMATION_DURATION },\n }),\n ]),\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Template to be used to override the icons inside the step header.\n */\nclass MatStepperIcon {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nMatStepperIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperIcon, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatStepperIcon.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepperIcon, selector: \"ng-template[matStepperIcon]\", inputs: { name: [\"matStepperIcon\", \"name\"] }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperIcon, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[matStepperIcon]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; }, propDecorators: { name: [{\n type: Input,\n args: ['matStepperIcon']\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Content for a `mat-step` that will be rendered lazily.\n */\nclass MatStepContent {\n constructor(_template) {\n this._template = _template;\n }\n}\nMatStepContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepContent, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatStepContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepContent, selector: \"ng-template[matStepContent]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepContent, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[matStepContent]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatStep extends CdkStep {\n constructor(stepper, _errorStateMatcher, _viewContainerRef, stepperOptions) {\n super(stepper, stepperOptions);\n this._errorStateMatcher = _errorStateMatcher;\n this._viewContainerRef = _viewContainerRef;\n this._isSelected = Subscription.EMPTY;\n }\n ngAfterContentInit() {\n this._isSelected = this._stepper.steps.changes\n .pipe(switchMap(() => {\n return this._stepper.selectionChange.pipe(map(event => event.selectedStep === this), startWith(this._stepper.selected === this));\n }))\n .subscribe(isSelected => {\n if (isSelected && this._lazyContent && !this._portal) {\n this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);\n }\n });\n }\n ngOnDestroy() {\n this._isSelected.unsubscribe();\n }\n /** Custom error state matcher that additionally checks for validity of interacted form. */\n isErrorState(control, form) {\n const originalErrorState = this._errorStateMatcher.isErrorState(control, form);\n // Custom error state checks for the validity of form that is not submitted or touched\n // since user can trigger a form change by calling for another step without directly\n // interacting with the current form.\n const customErrorState = !!(control && control.invalid && this.interacted);\n return originalErrorState || customErrorState;\n }\n}\nMatStep.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStep, deps: [{ token: forwardRef(() => MatStepper) }, { token: i1.ErrorStateMatcher, skipSelf: true }, { token: i0.ViewContainerRef }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStep, selector: \"mat-step\", inputs: { color: \"color\" }, providers: [\n { provide: ErrorStateMatcher, useExisting: MatStep },\n { provide: CdkStep, useExisting: MatStep },\n ], queries: [{ propertyName: \"stepLabel\", first: true, predicate: MatStepLabel, descendants: true }, { propertyName: \"_lazyContent\", first: true, predicate: MatStepContent, descendants: true }], exportAs: [\"matStep\"], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: i2$1.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStep, decorators: [{\n type: Component,\n args: [{ selector: 'mat-step', providers: [\n { provide: ErrorStateMatcher, useExisting: MatStep },\n { provide: CdkStep, useExisting: MatStep },\n ], encapsulation: ViewEncapsulation.None, exportAs: 'matStep', changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n \\n \\n\\n\" }]\n }], ctorParameters: function () { return [{ type: MatStepper, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatStepper)]\n }] }, { type: i1.ErrorStateMatcher, decorators: [{\n type: SkipSelf\n }] }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [STEPPER_GLOBAL_OPTIONS]\n }] }]; }, propDecorators: { stepLabel: [{\n type: ContentChild,\n args: [MatStepLabel]\n }], color: [{\n type: Input\n }], _lazyContent: [{\n type: ContentChild,\n args: [MatStepContent, { static: false }]\n }] } });\nclass MatStepper extends CdkStepper {\n constructor(dir, changeDetectorRef, elementRef) {\n super(dir, changeDetectorRef, elementRef);\n /** Steps that belong to the current stepper, excluding ones from nested steppers. */\n this.steps = new QueryList();\n /** Event emitted when the current step is done transitioning in. */\n this.animationDone = new EventEmitter();\n /**\n * Whether the label should display in bottom or end position.\n * Only applies in the `horizontal` orientation.\n */\n this.labelPosition = 'end';\n /**\n * Position of the stepper's header.\n * Only applies in the `horizontal` orientation.\n */\n this.headerPosition = 'top';\n /** Consumer-specified template-refs to be used to override the header icons. */\n this._iconOverrides = {};\n /** Stream of animation `done` events when the body expands/collapses. */\n this._animationDone = new Subject();\n this._animationDuration = '';\n const nodeName = elementRef.nativeElement.nodeName.toLowerCase();\n this.orientation = nodeName === 'mat-vertical-stepper' ? 'vertical' : 'horizontal';\n }\n /** Duration for the animation. Will be normalized to milliseconds if no units are set. */\n get animationDuration() {\n return this._animationDuration;\n }\n set animationDuration(value) {\n this._animationDuration = /^\\d+$/.test(value) ? value + 'ms' : value;\n }\n ngAfterContentInit() {\n super.ngAfterContentInit();\n this._icons.forEach(({ name, templateRef }) => (this._iconOverrides[name] = templateRef));\n // Mark the component for change detection whenever the content children query changes\n this.steps.changes.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._stateChanged();\n });\n this._animationDone\n .pipe(\n // This needs a `distinctUntilChanged` in order to avoid emitting the same event twice due\n // to a bug in animations where the `.done` callback gets invoked twice on some browsers.\n // See https://github.com/angular/angular/issues/24084\n distinctUntilChanged((x, y) => x.fromState === y.fromState && x.toState === y.toState), takeUntil(this._destroyed))\n .subscribe(event => {\n if (event.toState === 'current') {\n this.animationDone.emit();\n }\n });\n }\n _stepIsNavigable(index, step) {\n return step.completed || this.selectedIndex === index || !this.linear;\n }\n _getAnimationDuration() {\n if (this.animationDuration) {\n return this.animationDuration;\n }\n return this.orientation === 'horizontal'\n ? DEFAULT_HORIZONTAL_ANIMATION_DURATION\n : DEFAULT_VERTICAL_ANIMATION_DURATION;\n }\n}\nMatStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepper, deps: [{ token: i3$1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nMatStepper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepper, selector: \"mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]\", inputs: { selectedIndex: \"selectedIndex\", disableRipple: \"disableRipple\", color: \"color\", labelPosition: \"labelPosition\", headerPosition: \"headerPosition\", animationDuration: \"animationDuration\" }, outputs: { animationDone: \"animationDone\" }, host: { attributes: { \"role\": \"tablist\" }, properties: { \"class.mat-stepper-horizontal\": \"orientation === \\\"horizontal\\\"\", \"class.mat-stepper-vertical\": \"orientation === \\\"vertical\\\"\", \"class.mat-stepper-label-position-end\": \"orientation === \\\"horizontal\\\" && labelPosition == \\\"end\\\"\", \"class.mat-stepper-label-position-bottom\": \"orientation === \\\"horizontal\\\" && labelPosition == \\\"bottom\\\"\", \"class.mat-stepper-header-position-bottom\": \"headerPosition === \\\"bottom\\\"\", \"attr.aria-orientation\": \"orientation\" } }, providers: [{ provide: CdkStepper, useExisting: MatStepper }], queries: [{ propertyName: \"_steps\", predicate: MatStep, descendants: true }, { propertyName: \"_icons\", predicate: MatStepperIcon, descendants: true }], viewQueries: [{ propertyName: \"_stepHeader\", predicate: MatStepHeader, descendants: true }], exportAs: [\"matStepper\", \"matVerticalStepper\", \"matHorizontalStepper\"], usesInheritance: true, ngImport: i0, template: \"\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n\\n
\\n
\\n \\n
\\n
\\n
\\n\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n\\n\\n\\n \\n\\n\", styles: [\".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-header-position-bottom .mat-horizontal-stepper-header-container{order:1}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\\\"\\\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-wrapper{display:flex;flex-direction:column}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content.mat-horizontal-stepper-content-inactive{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.cdk-high-contrast-active .mat-horizontal-content-container{outline:solid 1px}.mat-stepper-header-position-bottom .mat-horizontal-content-container{padding:24px 24px 0 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}.cdk-high-contrast-active .mat-vertical-content-container{outline:solid 1px}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\\\"\\\";position:absolute;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\"], dependencies: [{ kind: \"directive\", type: i3.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i3.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i3.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i3.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i3.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"component\", type: MatStepHeader, selector: \"mat-step-header\", inputs: [\"color\", \"state\", \"label\", \"errorMessage\", \"iconOverrides\", \"index\", \"selected\", \"active\", \"optional\", \"disableRipple\"] }], animations: [\n matStepperAnimations.horizontalStepTransition,\n matStepperAnimations.verticalStepTransition,\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepper, decorators: [{\n type: Component,\n args: [{ selector: 'mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]', exportAs: 'matStepper, matVerticalStepper, matHorizontalStepper', inputs: ['selectedIndex'], host: {\n '[class.mat-stepper-horizontal]': 'orientation === \"horizontal\"',\n '[class.mat-stepper-vertical]': 'orientation === \"vertical\"',\n '[class.mat-stepper-label-position-end]': 'orientation === \"horizontal\" && labelPosition == \"end\"',\n '[class.mat-stepper-label-position-bottom]': 'orientation === \"horizontal\" && labelPosition == \"bottom\"',\n '[class.mat-stepper-header-position-bottom]': 'headerPosition === \"bottom\"',\n '[attr.aria-orientation]': 'orientation',\n 'role': 'tablist',\n }, animations: [\n matStepperAnimations.horizontalStepTransition,\n matStepperAnimations.verticalStepTransition,\n ], providers: [{ provide: CdkStepper, useExisting: MatStepper }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n\\n
\\n
\\n \\n
\\n
\\n
\\n\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n\\n\\n\\n \\n\\n\", styles: [\".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-header-position-bottom .mat-horizontal-stepper-header-container{order:1}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\\\"\\\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-wrapper{display:flex;flex-direction:column}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content.mat-horizontal-stepper-content-inactive{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.cdk-high-contrast-active .mat-horizontal-content-container{outline:solid 1px}.mat-stepper-header-position-bottom .mat-horizontal-content-container{padding:24px 24px 0 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}.cdk-high-contrast-active .mat-vertical-content-container{outline:solid 1px}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\\\"\\\";position:absolute;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\"] }]\n }], ctorParameters: function () { return [{ type: i3$1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { _stepHeader: [{\n type: ViewChildren,\n args: [MatStepHeader]\n }], _steps: [{\n type: ContentChildren,\n args: [MatStep, { descendants: true }]\n }], _icons: [{\n type: ContentChildren,\n args: [MatStepperIcon, { descendants: true }]\n }], animationDone: [{\n type: Output\n }], disableRipple: [{\n type: Input\n }], color: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], headerPosition: [{\n type: Input\n }], animationDuration: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Button that moves to the next step in a stepper workflow. */\nclass MatStepperNext extends CdkStepperNext {\n}\nMatStepperNext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperNext, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatStepperNext.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepperNext, selector: \"button[matStepperNext]\", inputs: { type: \"type\" }, host: { properties: { \"type\": \"type\" }, classAttribute: \"mat-stepper-next\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperNext, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[matStepperNext]',\n host: {\n 'class': 'mat-stepper-next',\n '[type]': 'type',\n },\n inputs: ['type'],\n }]\n }] });\n/** Button that moves to the previous step in a stepper workflow. */\nclass MatStepperPrevious extends CdkStepperPrevious {\n}\nMatStepperPrevious.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperPrevious, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatStepperPrevious.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatStepperPrevious, selector: \"button[matStepperPrevious]\", inputs: { type: \"type\" }, host: { properties: { \"type\": \"type\" }, classAttribute: \"mat-stepper-previous\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperPrevious, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[matStepperPrevious]',\n host: {\n 'class': 'mat-stepper-previous',\n '[type]': 'type',\n },\n inputs: ['type'],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatStepperModule {\n}\nMatStepperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatStepperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperModule, declarations: [MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent], imports: [MatCommonModule,\n CommonModule,\n PortalModule,\n MatButtonModule,\n CdkStepperModule,\n MatIconModule,\n MatRippleModule], exports: [MatCommonModule,\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent] });\nMatStepperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperModule, providers: [MAT_STEPPER_INTL_PROVIDER, ErrorStateMatcher], imports: [MatCommonModule,\n CommonModule,\n PortalModule,\n MatButtonModule,\n CdkStepperModule,\n MatIconModule,\n MatRippleModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatStepperModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n MatCommonModule,\n CommonModule,\n PortalModule,\n MatButtonModule,\n CdkStepperModule,\n MatIconModule,\n MatRippleModule,\n ],\n exports: [\n MatCommonModule,\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent,\n ],\n declarations: [\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent,\n ],\n providers: [MAT_STEPPER_INTL_PROVIDER, ErrorStateMatcher],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_STEPPER_INTL_PROVIDER, MAT_STEPPER_INTL_PROVIDER_FACTORY, MatStep, MatStepContent, MatStepHeader, MatStepLabel, MatStepper, MatStepperIcon, MatStepperIntl, MatStepperModule, MatStepperNext, MatStepperPrevious, matStepperAnimations };\n","import * as i0 from '@angular/core';\nimport { Directive, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, ContentChildren, NgModule } from '@angular/core';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport * as i1 from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatToolbar.\n/** @docs-private */\nconst _MatToolbarBase = mixinColor(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n});\nclass MatToolbarRow {\n}\nMatToolbarRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarRow, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatToolbarRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatToolbarRow, selector: \"mat-toolbar-row\", host: { classAttribute: \"mat-toolbar-row\" }, exportAs: [\"matToolbarRow\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarRow, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-toolbar-row',\n exportAs: 'matToolbarRow',\n host: { 'class': 'mat-toolbar-row' },\n }]\n }] });\nclass MatToolbar extends _MatToolbarBase {\n constructor(elementRef, _platform, document) {\n super(elementRef);\n this._platform = _platform;\n // TODO: make the document a required param when doing breaking changes.\n this._document = document;\n }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._checkToolbarMixedModes();\n this._toolbarRows.changes.subscribe(() => this._checkToolbarMixedModes());\n }\n }\n /**\n * Throws an exception when developers are attempting to combine the different toolbar row modes.\n */\n _checkToolbarMixedModes() {\n if (this._toolbarRows.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n // Check if there are any other DOM nodes that can display content but aren't inside of\n // a element.\n const isCombinedUsage = Array.from(this._elementRef.nativeElement.childNodes)\n .filter(node => !(node.classList && node.classList.contains('mat-toolbar-row')))\n .filter(node => node.nodeType !== (this._document ? this._document.COMMENT_NODE : 8))\n .some(node => !!(node.textContent && node.textContent.trim()));\n if (isCombinedUsage) {\n throwToolbarMixedModesError();\n }\n }\n }\n}\nMatToolbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbar, deps: [{ token: i0.ElementRef }, { token: i1.Platform }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });\nMatToolbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatToolbar, selector: \"mat-toolbar\", inputs: { color: \"color\" }, host: { properties: { \"class.mat-toolbar-multiple-rows\": \"_toolbarRows.length > 0\", \"class.mat-toolbar-single-row\": \"_toolbarRows.length === 0\" }, classAttribute: \"mat-toolbar\" }, queries: [{ propertyName: \"_toolbarRows\", predicate: MatToolbarRow, descendants: true }], exportAs: [\"matToolbar\"], usesInheritance: true, ngImport: i0, template: \"\\n\\n\", styles: [\".cdk-high-contrast-active .mat-toolbar{outline:solid 1px}.mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbar, decorators: [{\n type: Component,\n args: [{ selector: 'mat-toolbar', exportAs: 'matToolbar', inputs: ['color'], host: {\n 'class': 'mat-toolbar',\n '[class.mat-toolbar-multiple-rows]': '_toolbarRows.length > 0',\n '[class.mat-toolbar-single-row]': '_toolbarRows.length === 0',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"\\n\\n\", styles: [\".cdk-high-contrast-active .mat-toolbar{outline:solid 1px}.mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Platform }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, propDecorators: { _toolbarRows: [{\n type: ContentChildren,\n args: [MatToolbarRow, { descendants: true }]\n }] } });\n/**\n * Throws an exception when attempting to combine the different toolbar row modes.\n * @docs-private\n */\nfunction throwToolbarMixedModesError() {\n throw Error('MatToolbar: Attempting to combine different toolbar modes. ' +\n 'Either specify multiple `` elements explicitly or just place content ' +\n 'inside of a `` for a single row.');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatToolbarModule {\n}\nMatToolbarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatToolbarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarModule, declarations: [MatToolbar, MatToolbarRow], imports: [MatCommonModule], exports: [MatToolbar, MatToolbarRow, MatCommonModule] });\nMatToolbarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarModule, imports: [MatCommonModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatToolbarModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: [MatToolbar, MatToolbarRow, MatCommonModule],\n declarations: [MatToolbar, MatToolbarRow],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatToolbar, MatToolbarModule, MatToolbarRow, throwToolbarMixedModesError };\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { IdleTimeComponent } from './idle-time.component';\n\n@NgModule({\n declarations: [IdleTimeComponent],\n exports: [IdleTimeComponent],\n imports: [CommonModule],\n})\nexport class IdleTimeModule {}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { ConnectionConfig } from '@shared/interfaces/connection-config.interface';\nimport { BaseNotificationBody, WebNotification } from '@shared/interfaces/notification.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationRestService {\n constructor(private restApiService: RestapiService) {}\n\n getNotifications(): Observable {\n return this.restApiService.getData(`notification`);\n }\n\n markAllAsRead(): Observable {\n return this.restApiService.customPatchData(`notification/markallasread`, null);\n }\n\n markAsRead(baseNotificationBody: BaseNotificationBody): Observable {\n return this.restApiService.customPatchData(`notification/markasread`, baseNotificationBody);\n }\n\n delete(baseNotificationBody: BaseNotificationBody): Observable {\n return this.restApiService.delete(\n `notification?NotificationIds=${baseNotificationBody.notificationIds}`\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { first, orderBy } from 'lodash';\nimport * as moment from 'moment';\nimport { of } from 'rxjs';\nimport { catchError, map, mergeMap, switchMap, take, withLatestFrom } from 'rxjs/operators';\n\nimport { NotificationRestService } from '@app/services/notification-rest.service';\nimport {\n deleteNotification,\n deleteNotificationFailed,\n deleteNotificationSuccess,\n getLastNotificationList,\n getLastNotificationListFailed,\n getLastNotificationListSuccess,\n markAllAsRead,\n markAllAsReadFailed,\n markAllAsReadSuccess,\n markAnyNotificationsAsRead,\n markAsRead,\n markAsReadFailed,\n markAsReadSuccess,\n updateAnyNotifications,\n} from '@main-application/notifications/actions/notifications.actions';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { selectLastAnyNotificationList, selectLastNotificationList } from '../selectors/notifications.selectors';\n\n@Injectable()\nexport class NotificationsEffects {\n /**\n * get last notification list\n */\n getLastNotificationList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getLastNotificationList),\n switchMap(action =>\n this.notificationRestService.getNotifications().pipe(\n map(list => {\n const sortedList = orderBy(list || [], item => moment(item.timestamp).valueOf(), 'desc');\n return getLastNotificationListSuccess({ lastNotificationList: sortedList });\n }),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingNotificationList);\n return of(getLastNotificationListFailed());\n })\n )\n )\n )\n );\n\n /**\n * mark last notification of any user any event\n */\n setAnyNotificationAsRead$ = createEffect(() =>\n this.actions$.pipe(\n ofType(markAnyNotificationsAsRead),\n mergeMap(action =>\n this.store.select(selectLastAnyNotificationList).pipe(\n take(1),\n mergeMap(notifications => {\n const readNotifications = notifications.map(e => ({\n ...e,\n wasRead: e.wasRead || e.additionalData.turnoverIds.includes(action.turnoverId),\n }));\n return [updateAnyNotifications({ list: readNotifications })];\n })\n )\n )\n )\n );\n\n /**\n * set all as read\n */\n setAllAsRead$ = createEffect(() =>\n this.actions$.pipe(\n ofType(markAllAsRead),\n mergeMap(action =>\n this.notificationRestService.markAllAsRead().pipe(\n withLatestFrom(this.store.select(selectLastNotificationList)),\n mergeMap(([, notifications]) => {\n const lastNotificationList = notifications.map(notification => ({ ...notification, wasRead: true }));\n return [markAllAsReadSuccess(), getLastNotificationListSuccess({ lastNotificationList })];\n }),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.MarkingAllNotificationsAsRead);\n return of(markAllAsReadFailed());\n })\n )\n )\n )\n );\n\n /**\n * mark selected as read\n */\n markAsRead$ = createEffect(() =>\n this.actions$.pipe(\n ofType(markAsRead),\n mergeMap(action =>\n this.notificationRestService.markAsRead(action.baseNotificationBody).pipe(\n withLatestFrom(this.store.select(selectLastNotificationList)),\n mergeMap(([, notifications]) => {\n const lastNotificationList = notifications.map(item =>\n item.notificationId === first(action.baseNotificationBody.notificationIds)\n ? { ...item, wasRead: true }\n : item\n );\n return [markAsReadSuccess(), getLastNotificationListSuccess({ lastNotificationList })];\n }),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.MarkingNotificationAsRead);\n return of(markAsReadFailed());\n })\n )\n )\n )\n );\n /**\n * delete notification\n */\n deleteNotification$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteNotification),\n mergeMap(action =>\n this.notificationRestService.delete(action.baseNotificationBody).pipe(\n withLatestFrom(this.store.select(selectLastNotificationList)),\n mergeMap(([, notifications]) => {\n const lastNotificationList = notifications.filter(\n item => item.notificationId !== first(action.baseNotificationBody.notificationIds)\n );\n\n return [deleteNotificationSuccess(), getLastNotificationListSuccess({ lastNotificationList })];\n }),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.DeletingNotification);\n return of(deleteNotificationFailed());\n })\n )\n )\n )\n );\n\n constructor(\n private actions$: Actions,\n private snackbarService: SnackbarService,\n private store: Store<{}>,\n private notificationRestService: NotificationRestService\n ) {}\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\n\nimport { NotificationsEffects } from '@main-application/notifications/effects/notifications.effects';\nimport { IconModule } from '@ui-components/components/icon/icon.module';\n\nimport * as fromNotifications from './reducers/notifications.reducer';\n\n@NgModule({\n imports: [\n CommonModule,\n IconModule,\n StoreModule.forFeature(fromNotifications.notificationsFeatureKey, fromNotifications.reducer),\n EffectsModule.forFeature([NotificationsEffects]),\n ],\n})\nexport class NotificationsModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { IconModule } from '@ui-components/components/icon/icon.module';\nimport { PillListModule } from '@ui-components/components/pill-list/pill-list.module';\n\nimport { NotificationRingItemComponent } from './notification-ring-item.component';\n\n@NgModule({\n declarations: [NotificationRingItemComponent],\n imports: [\n CommonModule,\n IconModule,\n PipesModule,\n PillListModule,\n MatButtonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n ],\n exports: [NotificationRingItemComponent],\n})\nexport class NotificationRingItemModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { IconModule } from '@ui-components/components/icon/icon.module';\nimport { NotificationRingItemModule } from '@ui-components/components/notification-ring/components/notification-ring-item/notification-ring-item.module';\n\nimport { NotificationRingComponent } from './notification-ring.component';\n\n@NgModule({\n declarations: [NotificationRingComponent],\n imports: [\n CommonModule,\n IconModule,\n MatMenuModule,\n MatCheckboxModule,\n ReactiveFormsModule,\n NotificationRingItemModule,\n PipesModule,\n MatButtonModule,\n ],\n exports: [NotificationRingComponent],\n})\nexport class NotificationRingModule {}\n","import { DashboardMode } from '@shared/enums/dashboard-mode';\nimport { UserData } from '@shared/interfaces/user-data';\n\nexport function getDashboardMode(userData: UserData): DashboardMode {\n // TODO Add Administrator general roles handling when available\n if (userData.generalRole === 'Asset Manager') {\n return DashboardMode.ASSET_MANAGER;\n }\n if (userData.generalRole === 'SuperUser') {\n // return DashboardMode.SUPER_USER;\n return DashboardMode.ASSET_MANAGER;\n }\n\n return DashboardMode.PROPERTY_MANAGER;\n}\n","import { Injectable } from '@angular/core';\nimport * as signalR from '@microsoft/signalr';\nimport { HubConnection } from '@microsoft/signalr';\nimport { Store } from '@ngrx/store';\nimport { filter, firstValueFrom } from 'rxjs';\n\nimport { addLatestNotification } from '@main-application/notifications/actions/notifications.actions';\nimport { WebNotification } from '@shared/interfaces/notification.interface';\nimport { AuthService } from '@shared/services/auth.service';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { environment } from 'src/environments/environment';\nimport { EnvironmentType } from 'src/environments/environment-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationsService {\n hubConnection: HubConnection;\n\n constructor(private snackbarService: SnackbarService, private auth: AuthService, private store: Store<{}>) {}\n\n connect(): Promise {\n const tokenPromise = firstValueFrom(this.auth.watchForAccessToken().pipe(filter(Boolean)));\n\n if (!this.hubConnection) {\n this.hubConnection = new signalR.HubConnectionBuilder()\n .configureLogging(\n environment.type === EnvironmentType.Prod ? signalR.LogLevel.Critical : signalR.LogLevel.Information\n )\n\n .withUrl(environment.notificationsAllUrl, {\n transport: signalR.HttpTransportType.WebSockets,\n skipNegotiation: true,\n accessTokenFactory: () => tokenPromise,\n })\n .withAutomaticReconnect()\n .build();\n\n this.hubConnection.on('Notify', (notification: WebNotification) => {\n this.distributeNotifications(notification);\n });\n }\n\n return this.hubConnection.start().catch(err => {\n return err;\n });\n }\n\n close() {\n if (this.hubConnection) {\n this.hubConnection.stop().then();\n }\n }\n\n private distributeNotifications(notification: WebNotification) {\n this.store.dispatch(addLatestNotification({ notification }));\n }\n}\n","import * as i0 from '@angular/core';\nimport { PLATFORM_ID, Injectable, Inject } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n/**\n * Created by ahsanayaz on 08/11/2016.\n */\nconst GENERAL = {\n UKNOWN: 'Unknown',\n};\nconst BROWSERS = {\n CHROME: 'Chrome',\n FIREFOX: 'Firefox',\n SAFARI: 'Safari',\n OPERA: 'Opera',\n IE: 'IE',\n MS_EDGE: 'MS-Edge',\n MS_EDGE_CHROMIUM: 'MS-Edge-Chromium',\n FB_MESSANGER: 'FB-Messanger',\n SAMSUNG: 'Samsung',\n UCBROWSER: 'UC-Browser',\n UNKNOWN: GENERAL.UKNOWN,\n};\nconst MOBILES_RE = {\n // tslint:disable-next-line:max-line-length\n HTC: /HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel/,\n NEXUS_PHONE: /Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6/,\n DELL: /Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b/,\n MOTOROLA: new RegExp(`Motorola|DROIDX|DROID BIONIC|\\\\bDroid\\\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|\n A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|\n MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|\n ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|\n WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|\n XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|\n XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\\\bMoto E\\\\b|XT1068|XT1092|XT1052`),\n SAMSUNG: new RegExp(`\\\\bSamsung\\\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|\n GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|\n GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|\n GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|\n GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|\n GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|\n GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|\n GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|\n GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|\n GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|\n GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|\n GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|\n GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|\n GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|\n GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|\n GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|\n GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|\n GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|\n SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|\n SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|\n SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|\n SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|\n SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|\n SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|\n SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|\n SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|\n SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|\n SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|\n SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|\n SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|\n SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|\n SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|\n SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|\n SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|\n SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|\n SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|\n SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|\n SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|\n SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|\n SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|\n SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|\n SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|\n SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|\n SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|\n SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|\n SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|\n SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|\n SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|\n SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|\n GT-N7105|SCH-I535|SM-N900A|SM-N900T|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|\n GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|\n GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|\n SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|\n SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|\n SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F`),\n LG: new RegExp(`\\\\bLG\\\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|\n LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|\n C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|\n LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|\n VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|\n MS323|M257)`),\n SONY: /SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533/,\n ASUS: /Asus.*Galaxy|PadFone.*Mobile/,\n NOKIA_LUMIA: /Lumia [0-9]{3,4}/,\n MICROMAX: /Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b/,\n PALM: /PalmSource|Palm/,\n VERTU: /Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature/,\n PANTECH: new RegExp(`PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|\n IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|\n IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|\n CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|\n P2000|P7040|P7000|C790`),\n FLY: /IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250/,\n WIKO: new RegExp(`KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|\n SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|\n CINK KING|CINK PEAX|CINK SLIM|SUBLIM`),\n I_MOBILE: /i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)/,\n SIMVALLEY: /\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b/,\n WOLFGANG: /AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q/,\n ALCATEL: /Alcatel|Mobile; rv:49.0|Mobile; ALCATEL 4052R; rv:48.0/,\n NINTENDO: /Nintendo (3DS|Switch)/,\n AMOI: /Amoi/,\n INQ: /INQ/,\n VITA: /\\bVita\\b/,\n BLACKBERRY: /\\bBlackBerry\\b|\\bBB10\\b|rim[0-9]+/,\n FIREFOX_OS: /\\bFirefox-OS\\b/,\n IPHONE: /\\biPhone\\b/,\n iPod: /\\biPod\\b/,\n ANDROID: /\\bAndroid\\b/,\n WINDOWS_PHONE: /\\bWindows-Phone\\b/,\n GENERIC_PHONE: new RegExp(`Tapatalk|PDA;|SAGEM|\\\\bmmp\\\\b|pocket|\\\\bpsp\\\\b|symbian|Smartphone|smartfon|treo|up.browser|\n up.link|vodafone|\\\\bwap\\\\b|nokia|Nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser`),\n};\nconst TABLETS_RE = {\n iPad: /iPad|iPad.*Mobile/,\n NexusTablet: /Android.*Nexus[\\s]+(7|9|10)/,\n GoogleTablet: /Android.*Pixel C/,\n SamsungTablet: new RegExp(`SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|\n GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|\n SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|\n GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|\n SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|\n GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|\n SHV-E230S|SHW-M180K|SHW-M180L|SM-T865|SM-T290|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|\n SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|\n GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T385M|SM-P585M|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|\n SM-P601|SM-P605|SM-P615|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|\n GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|\n SM-T510|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|\n SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T500|SM-T330|\n SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|\n SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|\n SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|\n SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|\n SM-T719|SM-T725|SM-T813|SM-T819|SM-T580|SM-T590|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|\n SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-P585Y|SM-X200`),\n Kindle: new RegExp(`Kindle|Silk.*Accelerated|Android.*\\\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|\n KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\\\b|Android.*Silk\\/[0-9.]+ like Chrome\\\n /[0-9.]+ (?!Mobile)`),\n SurfaceTablet: /Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)/,\n HPTablet: /HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10/,\n AsusTablet: new RegExp(`^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|\n TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|\n Slider SL101|\\\\bK00F\\\\b|\\\\bK00C\\\\b|\\\\bK00E\\\\b|\\\\bK00L\\\\b|TX201LA|ME176C|ME102A|\\\\bM80TA\\\\b|ME372CL|\n ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\\\bME70C\\\\b|ME581C|\n ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\\\bP027\\\\b|\\\\bP024\\\\b|\\\\bP00C\\\\b`),\n BlackBerryTablet: /PlayBook|RIM Tablet/,\n HTCtablet: /HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410/,\n MotorolaTablet: /xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617/,\n NookTablet: /Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2/,\n AcerTablet: new RegExp(`Android.*; \\\\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|\n W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\\\b|W3-810|\\\\bA3-A10\\\\b|\\\\bA3-A11\\\\b|\n \\\\bA3-A20\\\\b|\\\\bA3-A30`),\n ToshibaTablet: /Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO/,\n LGTablet: /\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b/,\n FujitsuTablet: /Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b/,\n PrestigioTablet: new RegExp(`PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|\n PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|\n PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|\n PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|\n PMT5887|PMT5001|PMT5002`),\n LenovoTablet: new RegExp(`Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|\n YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|\n B8000|B8080)(-|)(FL|F|HV|H|)|TB-X606F|TB-X103F|TB-X304F|TB-X304L|TB-X704F|TB-8703F|Tab2A7-10F|TB2-X30L|TB-8504F`),\n DellTablet: /Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7/,\n YarvikTablet: new RegExp(`Android.*\\\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|\n TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|\n TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|\n TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|\n TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\\\b`),\n MedionTablet: /Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB/,\n ArnovaTablet: /97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2/,\n IntensoTablet: /INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004/,\n IRUTablet: /M702pro/,\n MegafonTablet: /MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b/,\n EbodaTablet: /E-Boda (Supreme|Impresspeed|Izzycomm|Essential)/,\n AllViewTablet: /Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)/,\n ArchosTablet: new RegExp(`\\\\b(101G9|80G9|A101IT)\\\\b|Qilive 97R|Archos5|\\\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10|\n Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\\\b`),\n AinolTablet: /NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark/,\n NokiaLumiaTablet: /Lumia 2520/,\n SonyTablet: new RegExp(`Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|\n SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|\n EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|\n SGP612|SGP712`),\n PhilipsTablet: /\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b/,\n CubeTablet: /Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT/,\n CobyTablet: new RegExp(`MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|\n MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010`),\n MIDTablet: new RegExp(`M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|\n MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|\n MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10`),\n MSITablet: new RegExp(`MSI \\\\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|\n Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\\\b`),\n SMiTTablet: /Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)/,\n RockChipTablet: /Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A/,\n FlyTablet: /IQ310|Fly Vision/,\n bqTablet: new RegExp(`Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|\n Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))|Maxwell.*Lite|Maxwell.*Plus`),\n HuaweiTablet: new RegExp(`MediaPad|MediaPad 7 Youth|MediaPad T3 10|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|\n S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-W09`),\n NecTablet: /\\bN-06D|\\bN-08D/,\n PantechTablet: /Pantech.*P4100/,\n BronchoTablet: /Broncho.*(N701|N708|N802|a710)/,\n VersusTablet: /TOUCHPAD.*[78910]|\\bTOUCHTAB\\b/,\n ZyncTablet: /z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900/,\n PositivoTablet: /TB07STA|TB10STA|TB07FTA|TB10FTA/,\n NabiTablet: /Android.*\\bNabi/,\n KoboTablet: /Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build/,\n DanewTablet: /DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b/,\n TexetTablet: new RegExp(`NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|\n TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|\n TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|\n TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|\n TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|\n TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|\n TB-436|TB-416|TB-146SE|TB-126SE`),\n PlaystationTablet: /Playstation.*(Portable|Vita)/,\n TrekstorTablet: /ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab/,\n PyleAudioTablet: /\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b/,\n AdvanTablet: new RegExp(`Android.* \\\\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|\n T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\\\b`),\n DanyTechTablet: `Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|\n Genius TAB GII|Genius TAB GIII|Genius Tab S1`,\n GalapadTablet: /Android.*\\bG1\\b(?!\\))/,\n MicromaxTablet: /Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b/,\n KarbonnTablet: /Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b/,\n AllFineTablet: /Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide/,\n PROSCANTablet: new RegExp(`\\\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|\n PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|\n PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|\n PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\\\b`),\n YONESTablet: /BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026/,\n ChangJiaTablet: new RegExp(`TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|\n TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|\n TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|\n TPC10111|TPC10203|TPC10205|TPC10503`),\n GUTablet: /TX-A1301|TX-M9002|Q702|kf026/,\n PointOfViewTablet: new RegExp(`TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|\n TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|\n TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|\n TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10`),\n OvermaxTablet: new RegExp(`OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|\n MagicTab|Stream|TB-08|TB-09)|Qualcore 1027`),\n HCLTablet: /HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync/,\n DPSTablet: /DPS Dream 9|DPS Dual 7/,\n VistureTablet: /V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10/,\n CrestaTablet: /CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989/,\n MediatekTablet: /\\bMT8125|MT8389|MT8135|MT8377\\b/,\n ConcordeTablet: /Concorde([ ]+)?Tab|ConCorde ReadMan/,\n GoCleverTablet: new RegExp(`GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|\n TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|\n GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|\n TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|\n TAB R104|TAB R83.3|TAB A1042`),\n ModecomTablet: new RegExp(`FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|\n FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|\n FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003`),\n VoninoTablet: new RegExp(`\\\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|\n Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|\n Primus[ _]?QS|Android.*\\\\bQ8\\\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\\\b`),\n ECSTablet: /V07OT2|TM105A|S10OT1|TR10CS1/,\n StorexTablet: /eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab/,\n VodafoneTablet: /SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497/,\n EssentielBTablet: /Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2/,\n RossMoorTablet: /RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711/,\n iMobileTablet: /i-mobile i-note/,\n TolinoTablet: /tolino tab [0-9.]+|tolino shine/,\n AudioSonicTablet: /\\bC-22Q|T7-QC|T-17B|T-17P\\b/,\n AMPETablet: /Android.* A78 /,\n SkkTablet: /Android.* (SKYPAD|PHOENIX|CYCLOPS)/,\n TecnoTablet: /TECNO P9|TECNO DP8D/,\n JXDTablet: new RegExp(`Android.* \\\\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|\n S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|\n P1000|P300|S18|S6600|S9100)\\\\b`),\n iJoyTablet: new RegExp(`Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|\n Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|\n Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|\n Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|\n Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)`),\n FX2Tablet: /FX2 PAD7|FX2 PAD10/,\n XoroTablet: new RegExp(`KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|\n PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|\n PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|\n TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151`),\n ViewsonicTablet: /ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a/,\n VerizonTablet: /QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1/,\n OdysTablet: /LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10/,\n CaptivaTablet: /CAPTIVA PAD/,\n IconbitTablet: new RegExp(`NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|\n NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S`),\n TeclastTablet: new RegExp(`T98 4G|\\\\bP80\\\\b|\\\\bX90HD\\\\b|X98 Air|X98 Air 3G|\\\\bX89\\\\b|P80 3G|\\\\bX80h\\\\b|P98 Air|\n \\\\bX89HD\\\\b|P98 3G|\\\\bP90HD\\\\b|P89 3G|X98 3G|\\\\bP70h\\\\b|P79HD 3G|G18d 3G|\\\\bP79HD\\\\b|\\\\bP89s\\\\b|\\\\bA88\\\\b|\n \\\\bP10HD\\\\b|\\\\bP19HD\\\\b|G18 3G|\\\\bP78HD\\\\b|\\\\bA78\\\\b|\\\\bP75\\\\b|G17s 3G|G17h 3G|\\\\bP85t\\\\b|\\\\bP90\\\\b|\n \\\\bP11\\\\b|\\\\bP98t\\\\b|\\\\bP98HD\\\\b|\\\\bG18d\\\\b|\\\\bP85s\\\\b|\\\\bP11HD\\\\b|\\\\bP88s\\\\b|\\\\bA80HD\\\\b|\\\\bA80se\\\\b|\n \\\\bA10h\\\\b|\\\\bP89\\\\b|\\\\bP78s\\\\b|\\\\bG18\\\\b|\\\\bP85\\\\b|\\\\bA70h\\\\b|\\\\bA70\\\\b|\\\\bG17\\\\b|\\\\bP18\\\\b|\\\\bA80s\\\\b|\n \\\\bA11s\\\\b|\\\\bP88HD\\\\b|\\\\bA80h\\\\b|\\\\bP76s\\\\b|\\\\bP76h\\\\b|\\\\bP98\\\\b|\\\\bA10HD\\\\b|\\\\bP78\\\\b|\\\\bP88\\\\b|\\\\bA11\\\\b|\n \\\\bA10t\\\\b|\\\\bP76a\\\\b|\\\\bP76t\\\\b|\\\\bP76e\\\\b|\\\\bP85HD\\\\b|\\\\bP85a\\\\b|\\\\bP86\\\\b|\\\\bP75HD\\\\b|\\\\bP76v\\\\b|\\\\bA12\\\\b|\n \\\\bP75a\\\\b|\\\\bA15\\\\b|\\\\bP76Ti\\\\b|\\\\bP81HD\\\\b|\\\\bA10\\\\b|\\\\bT760VE\\\\b|\\\\bT720HD\\\\b|\\\\bP76\\\\b|\\\\bP73\\\\b|\\\\bP71\\\\b|\n \\\\bP72\\\\b|\\\\bT720SE\\\\b|\\\\bC520Ti\\\\b|\\\\bT760\\\\b|\\\\bT720VE\\\\b|T720-3GE|T720-WiFi`),\n OndaTablet: new RegExp(`\\\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|\n V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|\n V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|\n Vi40)\\\\b[\\s]+|V10 \\\\b4G\\\\b`),\n JaytechTablet: /TPC-PA762/,\n BlaupunktTablet: /Endeavour 800NG|Endeavour 1010/,\n DigmaTablet: /\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b/,\n EvolioTablet: /ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b/,\n LavaTablet: /QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b/,\n AocTablet: /MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712/,\n MpmanTablet: new RegExp(`MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\n \\\\bMPG7\\\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|\n MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010`),\n CelkonTablet: /CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b/,\n WolderTablet: new RegExp(`miTab \\\\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|\n POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|\n FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\\\b`),\n MediacomTablet: 'M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA',\n MiTablet: /\\bMI PAD\\b|\\bHM NOTE 1W\\b/,\n NibiruTablet: /Nibiru M1|Nibiru Jupiter One/,\n NexoTablet: /NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI/,\n LeaderTablet: new RegExp(`TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|\n TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100`),\n UbislateTablet: /UbiSlate[\\s]?7C/,\n PocketBookTablet: /Pocketbook/,\n KocasoTablet: /\\b(TB-1207)\\b/,\n HisenseTablet: /\\b(F5281|E2371)\\b/,\n Hudl: /Hudl HT7S3|Hudl 2/,\n TelstraTablet: /T-Hub2/,\n Honeywell: /RT10A/,\n GenericTablet: new RegExp(`Android.*\\\\b97D\\\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\\\bA7EB\\\\b|CatNova8|\n A1_07|CT704|CT1002|\\\\bM721\\\\b|rk30sdk|\\\\bEVOTAB\\\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|\n Tablet-PC-4|Tagi Tab|\\\\bM6pro\\\\b|CT1020W|arc 10HD|\\\\bTP750\\\\b|\\\\bQTAQZ3\\\\b|WVT101|TM1088|KT107`),\n};\nconst DEVICES = {\n BLACKBERRY: 'Blackberry',\n FIREFOX_OS: 'Firefox-OS',\n CHROME_BOOK: 'Chrome-Book',\n WINDOWS_PHONE: 'Windows-Phone',\n VITA: 'Vita',\n PS4: 'PS4',\n MAC: 'Macintosh',\n CHROMECAST: 'Chromecast',\n APPLE_TV: 'Apple-TV',\n GOOGLE_TV: 'Google-TV',\n ANDROID: 'Android',\n Tesla: 'Tesla',\n iPad: 'iPad',\n IPHONE: 'iPhone',\n iPod: 'iPod',\n UNKNOWN: GENERAL.UKNOWN,\n HTC: 'HTC',\n NEXUS_PHONE: 'Nexus Phone',\n NexusTablet: 'Nexus Tablet',\n DELL: 'Dell',\n MOTOROLA: 'Motorola',\n SAMSUNG: 'Samsung',\n LG: 'LG',\n SONY: 'Sony',\n ASUS: 'Asus',\n NOKIA_LUMIA: 'Nokia Lumia',\n MICROMAX: 'Micromax',\n PALM: 'Palm',\n VERTU: 'Vertu',\n PANTECH: 'PANTECH',\n FLY: 'Fly',\n WIKO: `WIKO`,\n I_MOBILE: 'i-mobile',\n SIMVALLEY: 'Simvalley',\n WOLFGANG: 'Wolfgang',\n ALCATEL: 'Alcatel',\n HONEYWELL: 'Honeywell',\n NINTENDO: 'Nintendo',\n AMOI: 'Amoi',\n INQ: 'INQ',\n GENERIC_PHONE: 'Generic Phone',\n MI_SE_9: 'Mi SE 9',\n};\nconst DESKTOP_DEVICES = [\n DEVICES.PS4,\n DEVICES.CHROME_BOOK,\n DEVICES.MAC,\n DEVICES.DELL,\n DEVICES.ASUS,\n DEVICES.UNKNOWN,\n];\nconst OS = {\n WINDOWS: 'Windows',\n MAC: 'Mac',\n IOS: 'iOS',\n ANDROID: 'Android',\n LINUX: 'Linux',\n UNIX: 'Unix',\n FIREFOX_OS: 'Firefox-OS',\n CHROME_OS: 'Chrome-OS',\n WINDOWS_PHONE: 'Windows-Phone',\n UNKNOWN: GENERAL.UKNOWN,\n};\nconst OS_VERSIONS = {\n WINDOWS_3_11: 'windows-3-11',\n WINDOWS_95: 'windows-95',\n WINDOWS_ME: 'windows-me',\n WINDOWS_98: 'windows-98',\n WINDOWS_CE: 'windows-ce',\n WINDOWS_2000: 'windows-2000',\n WINDOWS_XP: 'windows-xp',\n WINDOWS_SERVER_2003: 'windows-server-2003',\n WINDOWS_VISTA: 'windows-vista',\n WINDOWS_7: 'windows-7',\n WINDOWS_8_1: 'windows-8-1',\n WINDOWS_8: 'windows-8',\n WINDOWS_10: 'windows-10',\n WINDOWS_PHONE_7_5: 'windows-phone-7-5',\n WINDOWS_PHONE_8_1: 'windows-phone-8-1',\n WINDOWS_PHONE_10: 'windows-phone-10',\n WINDOWS_NT_4_0: 'windows-nt-4-0',\n MACOSX_11_0: 'mac-os-x-11-0',\n MACOSX_16: 'mac-os-x-16',\n MACOSX_15: 'mac-os-x-15',\n MACOSX_14: 'mac-os-x-14',\n MACOSX_13: 'mac-os-x-13',\n MACOSX_12: 'mac-os-x-12',\n MACOSX_11: 'mac-os-x-11',\n MACOSX_10: 'mac-os-x-10',\n MACOSX_9: 'mac-os-x-9',\n MACOSX_8: 'mac-os-x-8',\n MACOSX_7: 'mac-os-x-7',\n MACOSX_6: 'mac-os-x-6',\n MACOSX_5: 'mac-os-x-5',\n MACOSX_4: 'mac-os-x-4',\n MACOSX_3: 'mac-os-x-3',\n MACOSX_2: 'mac-os-x-2',\n MACOSX: 'mac-os-x',\n iOS: 'iOS',\n ANDROID_9: 'android-9',\n UNKNOWN: GENERAL.UKNOWN.toLowerCase(),\n};\nconst OS_RE = {\n WINDOWS: {\n and: [{ or: [/\\bWindows|(Win\\d\\d)\\b/, /\\bWin 9x\\b/] }, { not: /\\bWindows Phone\\b/ }],\n },\n MAC: {\n and: [/\\bMac OS\\b/, { not: { or: [/\\biPhone\\b/, /\\biPad\\b/, /\\biPod\\b/, /\\bWindows Phone\\b/] } }],\n },\n IOS: {\n and: [{ or: [/\\biPad\\b/, /\\biPhone\\b/, /\\biPod\\b/] }, { not: /\\bWindows Phone\\b/ }],\n },\n ANDROID: { and: [/\\bAndroid\\b/, { not: /\\bWindows Phone\\b/ }] },\n LINUX: /\\bLinux\\b/,\n UNIX: /\\bUNIX\\b/,\n FIREFOX_OS: { and: [/\\bFirefox\\b/, /Mobile\\b/] },\n CHROME_OS: /\\bCrOS\\b/,\n WINDOWS_PHONE: { or: [/\\bIEMobile\\b/, /\\bWindows Phone\\b/] },\n PS4: /\\bMozilla\\/5.0 \\(PlayStation 4\\b/,\n VITA: /\\bMozilla\\/5.0 \\(Play(S|s)tation Vita\\b/,\n};\nconst BROWSERS_RE = {\n CHROME: {\n and: [\n { or: [/\\bChrome\\b/, /\\bCriOS\\b/, /\\bHeadlessChrome\\b/] },\n {\n not: {\n or: [/\\bOPR\\b/, /\\bEdg(e|A|iOS)\\b/, /\\bEdg\\/\\b/, /\\bSamsungBrowser\\b/, /\\bUCBrowser\\b/],\n },\n },\n ],\n },\n FIREFOX: { or: [/\\bFirefox\\b/, /\\bFxiOS\\b/] },\n SAFARI: {\n and: [\n /^((?!CriOS).)*\\Safari\\b.*$/,\n {\n not: {\n or: [/\\bOPR\\b/, /\\bEdg(e|A|iOS)\\b/, /\\bEdg\\/\\b/, /\\bWindows Phone\\b/, /\\bSamsungBrowser\\b/, /\\bUCBrowser\\b/],\n },\n },\n ],\n },\n OPERA: { or: [/Opera\\b/, /\\bOPR\\b/] },\n IE: {\n or: [/\\bMSIE\\b/, /\\bTrident\\b/, /^Mozilla\\/5\\.0 \\(Windows NT 10\\.0; Win64; x64\\)$/],\n },\n MS_EDGE: { or: [/\\bEdg(e|A|iOS)\\b/] },\n MS_EDGE_CHROMIUM: /\\bEdg\\/\\b/,\n PS4: /\\bMozilla\\/5.0 \\(PlayStation 4\\b/,\n VITA: /\\bMozilla\\/5.0 \\(Play(S|s)tation Vita\\b/,\n FB_MESSANGER: /\\bFBAN\\/MessengerForiOS\\b/,\n SAMSUNG: /\\bSamsungBrowser\\b/,\n UCBROWSER: /\\bUCBrowser\\b/,\n};\nconst DEVICES_RE = {\n ...MOBILES_RE,\n ...TABLETS_RE,\n ...OS_RE,\n FIREFOX_OS: { and: [/\\bFirefox\\b/, /\\bMobile\\b/] },\n CHROME_BOOK: /\\bCrOS\\b/,\n PS4: /\\bMozilla\\/5.0 \\(PlayStation 4\\b/,\n CHROMECAST: /\\bCrKey\\b/,\n APPLE_TV: /^iTunes-AppleTV\\/4.1$/,\n GOOGLE_TV: /\\bGoogleTV\\b/,\n Tesla: /Tesla\\/([0-9]{4}.[0-9]{1,2}.?[0-9]{0,2}.?[0-9]{0,2})-(.{7})/,\n MI_SE_9: /\\bXiaomi\\b/,\n MAC: {\n and: [/\\bMac OS\\b/, { not: { or: [/\\biPhone\\b/, /\\biPad\\b/, /\\biPod\\b/, /\\bWindows Phone\\b/] } }],\n },\n};\nconst OS_VERSIONS_RE_MAP = {\n WINDOWS_3_11: /Win16/,\n WINDOWS_95: /(Windows 95|Win95|Windows_95)/,\n WINDOWS_ME: /(Win 9x 4.90|Windows ME)/,\n WINDOWS_98: /(Windows 98|Win98)/,\n WINDOWS_CE: /Windows CE/,\n WINDOWS_2000: /(Windows NT 5.0|Windows 2000)/,\n WINDOWS_XP: /(Windows NT 5.1|Windows XP)/,\n WINDOWS_SERVER_2003: /Windows NT 5.2/,\n WINDOWS_VISTA: /Windows NT 6.0/,\n WINDOWS_7: /(Windows 7|Windows NT 6.1)/,\n WINDOWS_8_1: /(Windows 8.1|Windows NT 6.3)/,\n WINDOWS_8: /(Windows 8|Windows NT 6.2)/,\n WINDOWS_10: /(Windows NT 10.0)/,\n WINDOWS_PHONE_7_5: /(Windows Phone OS 7.5)/,\n WINDOWS_PHONE_8_1: /(Windows Phone 8.1)/,\n WINDOWS_PHONE_10: /(Windows Phone 10)/,\n WINDOWS_NT_4_0: {\n and: [/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/, { not: /Windows NT 10.0/ }],\n },\n MACOSX: /(MAC OS X\\s*[^ 0-9])/,\n MACOSX_3: /(Darwin 10.3|Mac OS X 10.3)/,\n MACOSX_4: /(Darwin 10.4|Mac OS X 10.4)/,\n MACOSX_5: /(Mac OS X 10.5)/,\n MACOSX_6: /(Mac OS X 10.6)/,\n MACOSX_7: /(Mac OS X 10.7)/,\n MACOSX_8: /(Mac OS X 10.8)/,\n MACOSX_9: /(Mac OS X 10.9)/,\n MACOSX_10: /(Mac OS X 10.10)/,\n MACOSX_11: /(Mac OS X 10.11)/,\n MACOSX_12: /(Mac OS X 10.12)/,\n MACOSX_13: /(Mac OS X 10.13)/,\n MACOSX_14: /(Mac OS X 10.14)/,\n MACOSX_15: /(Mac OS X 10.15)/,\n MACOSX_16: /(Mac OS X 10.16)/,\n MACOSX_11_0: {\n or: [/11_0 like Mac OS X/, /Mac OS X 11/],\n },\n iOS: /(iPhone OS\\s*[0-9_]+)/,\n ANDROID_9: /(Android 9)/,\n};\nconst BROWSER_VERSIONS_RE_MAP = {\n CHROME: [/\\bChrome\\/([\\d\\.]+)\\b/, /\\bCriOS\\/([\\d\\.]+)\\b/, /\\bHeadlessChrome\\/([\\d\\.]+)\\b/],\n FIREFOX: [/\\bFirefox\\/([\\d\\.]+)\\b/, /\\bFxiOS\\/([\\d\\.]+)\\b/],\n SAFARI: [/\\bVersion\\/([\\d\\.]+)\\b/, /\\bSafari\\/([\\d\\.]+)\\b/],\n OPERA: [/\\bVersion\\/([\\d\\.]+)\\b/, /\\bOPR\\/([\\d\\.]+)\\b/],\n IE: [/\\bMSIE ([\\d\\.]+\\w?)\\b/, /\\brv:([\\d\\.]+\\w?)\\b/],\n MS_EDGE: /\\bEdg(?:e|A|iOS)\\/([\\d\\.]+)\\b/,\n MS_EDGE_CHROMIUM: /\\bEdg\\/([\\d\\.]+)\\b/,\n SAMSUNG: /\\bSamsungBrowser\\/([\\d\\.]+)\\b/,\n UCBROWSER: /\\bUCBrowser\\/([\\d\\.]+)\\b/,\n};\nconst OS_VERSIONS_RE = Object.keys(OS_VERSIONS_RE_MAP).reduce((obj, key) => {\n obj[key] = OS_VERSIONS_RE_MAP[key];\n return obj;\n}, {});\nconst BROWSER_VERSIONS_RE = Object.keys(BROWSER_VERSIONS_RE_MAP).reduce((obj, key) => {\n obj[BROWSERS[key]] = BROWSER_VERSIONS_RE_MAP[key];\n return obj;\n}, {});\n\nvar Constants = /*#__PURE__*/Object.freeze({\n __proto__: null,\n GENERAL: GENERAL,\n BROWSERS: BROWSERS,\n MOBILES_RE: MOBILES_RE,\n TABLETS_RE: TABLETS_RE,\n DEVICES: DEVICES,\n DESKTOP_DEVICES: DESKTOP_DEVICES,\n OS: OS,\n OS_VERSIONS: OS_VERSIONS,\n OS_RE: OS_RE,\n BROWSERS_RE: BROWSERS_RE,\n DEVICES_RE: DEVICES_RE,\n OS_VERSIONS_RE_MAP: OS_VERSIONS_RE_MAP,\n BROWSER_VERSIONS_RE_MAP: BROWSER_VERSIONS_RE_MAP,\n OS_VERSIONS_RE: OS_VERSIONS_RE,\n BROWSER_VERSIONS_RE: BROWSER_VERSIONS_RE\n});\n\n/**\n * Created by ahsanayaz on 08/11/2016.\n */\nclass ReTree {\n constructor() { }\n test(str, regex) {\n if (typeof regex === 'string') {\n regex = new RegExp(regex);\n }\n if (regex instanceof RegExp) {\n return regex.test(str);\n }\n else if (regex && Array.isArray(regex.and)) {\n return regex.and.every((item) => {\n return this.test(str, item);\n });\n }\n else if (regex && Array.isArray(regex.or)) {\n return regex.or.some((item) => {\n return this.test(str, item);\n });\n }\n else if (regex && regex.not) {\n return !this.test(str, regex.not);\n }\n else {\n return false;\n }\n }\n exec(str, regex) {\n if (typeof regex === 'string') {\n regex = new RegExp(regex);\n }\n if (regex instanceof RegExp) {\n return regex.exec(str);\n }\n else if (regex && Array.isArray(regex)) {\n return regex.reduce((res, item) => {\n return !!res ? res : this.exec(str, item);\n }, null);\n }\n else {\n return null;\n }\n }\n}\n\n// tslint:disable: variable-name\nvar DeviceType;\n(function (DeviceType) {\n DeviceType[\"Mobile\"] = \"mobile\";\n DeviceType[\"Tablet\"] = \"tablet\";\n DeviceType[\"Desktop\"] = \"desktop\";\n DeviceType[\"Unknown\"] = \"unknown\";\n})(DeviceType || (DeviceType = {}));\nvar OrientationType;\n(function (OrientationType) {\n OrientationType[\"Portrait\"] = \"portrait\";\n OrientationType[\"Landscape\"] = \"landscape\";\n})(OrientationType || (OrientationType = {}));\nconst iPad = 'iPad';\nclass DeviceDetectorService {\n constructor(platformId) {\n this.platformId = platformId;\n this.ua = '';\n this.userAgent = '';\n this.os = '';\n this.browser = '';\n this.device = '';\n this.os_version = '';\n this.browser_version = '';\n this.reTree = new ReTree();\n this.deviceType = '';\n this.orientation = '';\n if (isPlatformBrowser(this.platformId) && typeof window !== 'undefined') {\n this.userAgent = window.navigator.userAgent;\n }\n this.setDeviceInfo(this.userAgent);\n }\n /**\n * @author Ahsan Ayaz\n * @desc Sets the initial value of the device when the service is initiated.\n * This value is later accessible for usage\n */\n setDeviceInfo(ua = this.userAgent) {\n if (ua !== this.userAgent) {\n this.userAgent = ua;\n }\n const mappings = [\n { const: 'OS', prop: 'os' },\n { const: 'BROWSERS', prop: 'browser' },\n { const: 'DEVICES', prop: 'device' },\n { const: 'OS_VERSIONS', prop: 'os_version' },\n ];\n mappings.forEach(mapping => {\n this[mapping.prop] = Object.keys(Constants[mapping.const]).reduce((obj, item) => {\n if (Constants[mapping.const][item] === 'device') {\n // hack for iOS 13 Tablet\n if (isPlatformBrowser(this.platformId) &&\n (!!this.reTree.test(this.userAgent, TABLETS_RE[iPad]) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1))) {\n obj[Constants[mapping.const][item]] = iPad;\n return Object;\n }\n }\n obj[Constants[mapping.const][item]] = this.reTree.test(ua, Constants[`${mapping.const}_RE`][item]);\n return obj;\n }, {});\n });\n mappings.forEach(mapping => {\n this[mapping.prop] = Object.keys(Constants[mapping.const])\n .map(key => {\n return Constants[mapping.const][key];\n })\n .reduce((previousValue, currentValue) => {\n if (mapping.prop === 'device' && previousValue === Constants[mapping.const].ANDROID) {\n // if we have the actual device found, instead of 'Android', return the actual device\n return this[mapping.prop][currentValue] ? currentValue : previousValue;\n }\n else {\n return previousValue === Constants[mapping.const].UNKNOWN && this[mapping.prop][currentValue]\n ? currentValue\n : previousValue;\n }\n }, Constants[mapping.const].UNKNOWN);\n });\n this.browser_version = '0';\n if (this.browser !== BROWSERS.UNKNOWN) {\n const re = BROWSER_VERSIONS_RE[this.browser];\n const res = this.reTree.exec(ua, re);\n if (!!res) {\n this.browser_version = res[1];\n }\n }\n if (typeof window !== 'undefined' && window.matchMedia) {\n this.orientation = window.matchMedia('(orientation: landscape)').matches\n ? OrientationType.Landscape\n : OrientationType.Portrait;\n }\n else {\n this.orientation = GENERAL.UKNOWN;\n }\n this.deviceType = this.isTablet()\n ? DeviceType.Tablet\n : this.isMobile(this.userAgent)\n ? DeviceType.Mobile\n : this.isDesktop(this.userAgent)\n ? DeviceType.Desktop\n : DeviceType.Unknown;\n }\n /**\n * @author Ahsan Ayaz\n * @desc Returns the device information\n * @returns the device information object.\n */\n getDeviceInfo() {\n const deviceInfo = {\n userAgent: this.userAgent,\n os: this.os,\n browser: this.browser,\n device: this.device,\n os_version: this.os_version,\n browser_version: this.browser_version,\n deviceType: this.deviceType,\n orientation: this.orientation,\n };\n return deviceInfo;\n }\n /**\n * @author Ahsan Ayaz\n * @desc Compares the current device info with the mobile devices to check\n * if the current device is a mobile and also check current device is tablet so it will return false.\n * @returns whether the current device is a mobile\n */\n isMobile(userAgent = this.userAgent) {\n if (this.isTablet(userAgent)) {\n return false;\n }\n const match = Object.keys(MOBILES_RE).find(mobile => {\n return this.reTree.test(userAgent, MOBILES_RE[mobile]);\n });\n return !!match;\n }\n /**\n * @author Ahsan Ayaz\n * @desc Compares the current device info with the tablet devices to check\n * if the current device is a tablet.\n * @returns whether the current device is a tablet\n */\n isTablet(userAgent = this.userAgent) {\n if (isPlatformBrowser(this.platformId) &&\n (!!this.reTree.test(this.userAgent, TABLETS_RE[iPad]) ||\n (typeof navigator !== 'undefined' && navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1))) {\n return true;\n }\n const match = Object.keys(TABLETS_RE).find(mobile => {\n return !!this.reTree.test(userAgent, TABLETS_RE[mobile]);\n });\n return !!match;\n }\n /**\n * @author Ahsan Ayaz\n * @desc Compares the current device info with the desktop devices to check\n * if the current device is a desktop device.\n * @returns whether the current device is a desktop device\n */\n isDesktop(userAgent = this.userAgent) {\n if (this.device === DEVICES.UNKNOWN) {\n if (this.isMobile(userAgent) || this.isTablet(userAgent)) {\n return false;\n }\n }\n return DESKTOP_DEVICES.indexOf(this.device) > -1;\n }\n}\nDeviceDetectorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.0.4\", ngImport: i0, type: DeviceDetectorService, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });\nDeviceDetectorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.0.4\", ngImport: i0, type: DeviceDetectorService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.0.4\", ngImport: i0, type: DeviceDetectorService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }]; } });\n\n/*\n * Public API Surface of ngx-device-detector\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BROWSERS, BROWSERS_RE, BROWSER_VERSIONS_RE, BROWSER_VERSIONS_RE_MAP, DESKTOP_DEVICES, DEVICES, DEVICES_RE, DeviceDetectorService, DeviceType, GENERAL, MOBILES_RE, OS, OS_RE, OS_VERSIONS, OS_VERSIONS_RE, OS_VERSIONS_RE_MAP, OrientationType, ReTree, TABLETS_RE };\n","
\n \n
\n\n\n \n
\n {{ sectionItem.label }}\n
\n \n \n \n \n
\n \n
\n {{ item.label }}\n
\n
\n \n
\n\n\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { firstValueFrom } from 'rxjs';\nimport { distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { AppVersionService } from '@app/services/app-version.service';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { MenuSectionItem } from '@shared/interfaces/menu-config.interface';\nimport { selectUserPermissionLevel } from '@shared/selectors/user.selectors';\nimport { HelpRouterService } from '@shared/services/help-router.service';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { ModalsService } from '@ui-components/modals/modals.service';\nimport { NewTurnoverModalComponent } from '@ui-components/modals/new-turnover-modal/new-turnover-modal.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-side-panel-section-item',\n templateUrl: './side-panel-section-item.component.html',\n styleUrls: ['./side-panel-section-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidePanelSectionItemComponent extends ComponentAbstract implements OnInit, OnDestroy {\n @Input() sectionItem: MenuSectionItem;\n @Output() menuActionsEvent: EventEmitter = new EventEmitter();\n\n currentVersion = '';\n needUpgrade = false;\n\n permissionLevels$ = this.store.select(selectUserPermissionLevel).pipe(\n untilDestroyed(this),\n filter((permissionLevel: PermissionLevelType[]) => !!permissionLevel?.length)\n );\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private router: Router,\n private dialog: MatDialog,\n private modalsService: ModalsService,\n private appVersionService: AppVersionService,\n private helpRouterService: HelpRouterService,\n private store: Store,\n private snackbarService: SnackbarService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.isActive = window.location.pathname.startsWith(this.sectionItem.urlPath);\n this.appVersionService.version$\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(appVersion => {\n if (this.currentVersion && this.currentVersion !== appVersion.version_number) {\n this.needUpgrade = true;\n }\n this.currentVersion = appVersion.version_number;\n })\n )\n .subscribe();\n\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd),\n distinctUntilChanged(),\n tap((event: NavigationEnd) => {\n this.isActive = event.url.startsWith(this.sectionItem.urlPath);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {}\n\n async open() {\n if (this.sectionItem.permissionLevelWarning) {\n const permissionLevels = await firstValueFrom(this.permissionLevels$);\n if (!checkPermissionLevel(permissionLevels, this.sectionItem.permissionLevelWarning)) {\n this.snackbarService.warning(`Permission: ${this.sectionItem.permissionLevelWarning.toLowerCase()} required`);\n return;\n }\n }\n\n if (this.sectionItem.modalDialogComponent) {\n switch (this.sectionItem.modalDialogComponent) {\n case NewTurnoverModalComponent:\n this.modalsService.openNewTurnoverModal([], false);\n break;\n default:\n this.dialog.open(this.sectionItem.modalDialogComponent);\n }\n\n return;\n }\n\n if (this.sectionItem.urlPath) {\n const queryParams = this.helpRouterService.getGlobalPreservedParams();\n if (this.needUpgrade) {\n const url = this.router.createUrlTree([this.sectionItem.urlPath], { queryParams });\n window.location.href = url.toString();\n } else {\n this.router.navigate([this.sectionItem.urlPath], { queryParams }).then();\n }\n }\n\n if (this.sectionItem.menuActions) {\n this.menuActionsEvent.emit(this.sectionItem.menuActions);\n }\n }\n\n toggleSection($event: MouseEvent) {\n $event.stopPropagation();\n this.isExpanded = !this.isExpanded;\n this.cdr.detectChanges();\n }\n\n openSubsection(menuSectionItem: MenuSectionItem) {\n if (menuSectionItem.urlPath) {\n const queryParams = this.helpRouterService.getGlobalPreservedParams();\n this.router.navigate([menuSectionItem.urlPath], { queryParams }).then();\n }\n }\n}\n","
\n
\n \n \n
\n
\n \n\n\n\n \n \n\n\n\n \n \n\n\n\n \n\n\n\n
{{ section?.label }}
\n
\n\n\n \n\n\n\n
\n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { some } from 'lodash';\nimport { BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { MenuSection } from '@shared/interfaces/menu-config.interface';\nimport { HelpRouterService } from '@shared/services/help-router.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-side-panel-section',\n templateUrl: './side-panel-section.component.html',\n styleUrls: ['./side-panel-section.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidePanelSectionComponent extends ComponentAbstract implements OnInit, OnDestroy {\n @Input() section: MenuSection;\n @Input() currentSectionBSubject: BehaviorSubject;\n @Output() menuActionsEvent: EventEmitter = new EventEmitter();\n\n homePaths = [\n AppRoutes.ROLES_ADMIN_HOME,\n AppRoutes.ROLES_ASSET_HOME,\n AppRoutes.ROLES_CONSTRUCTION_HOME,\n AppRoutes.ROLES_PROPERTY_HOME,\n AppRoutes.ROLES_VENDOR_HOME,\n ];\n\n constructor(protected cdr: ChangeDetectorRef, private router: Router, private helpRouterService: HelpRouterService) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.checkActiveSection(window.location.pathname);\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd),\n distinctUntilChanged(),\n tap((event: NavigationEnd) => {\n this.checkActiveSection(event.url);\n })\n )\n .subscribe();\n\n this.currentSectionBSubject\n ?.pipe(\n untilDestroyed(this),\n tap(currentSection => {\n this.isExpanded = currentSection === this.section.label;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {}\n\n open() {\n const queryParams = this.helpRouterService.getGlobalPreservedParams();\n if (this.section.urlPath) {\n this.router.navigate([this.section.urlPath], { queryParams }).then();\n }\n }\n\n toggleSection(event: MouseEvent) {\n event.stopPropagation();\n let currentSection = null;\n if (!this.isExpanded) {\n currentSection = this.section.label;\n }\n this.currentSectionBSubject?.next(currentSection);\n }\n\n private checkActiveSection(path: string) {\n if (this.section.urlPath === RoutePath.HOME) {\n this.isActive = some(this.homePaths, item => path.startsWith(`/${item}`));\n } else {\n this.isActive =\n path.startsWith(`${this.section.urlPath}`) ||\n some(\n this.section.sectionItem,\n sectionItem => !sectionItem.separator && path.startsWith(`${sectionItem.urlPath}`)\n );\n }\n\n this.cdr.detectChanges();\n }\n\n menuActions($event: MainPageActions) {\n this.menuActionsEvent.emit($event);\n }\n}\n","\n \n\n
\n \n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\nimport { AppVersionService } from '@app/services/app-version.service';\nimport { DashboardsAbstract } from '@main-application/dashboards/components/abstract/dashboards.abstract';\nimport { selectSelectedDashboardMode } from '@main-application/dashboards/selectors/dashboards.selectors';\nimport {\n InspectionsSection,\n MaintenanceSection,\n boardsSection,\n homeSection,\n managementSection,\n reportsSection,\n rolesSection,\n ticketsSection,\n turnoversSection,\n} from '@shared/constants/side-panel-config.const';\nimport { DashboardMode } from '@shared/enums/dashboard-mode';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { isUserEmailDomainAllowed } from '@shared/functions/check-user-email-domain';\nimport { MenuSection, MenuSectionItem } from '@shared/interfaces/menu-config.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { selectUserData, selectUserPermissionLevel } from '@shared/selectors/user.selectors';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-side-panel',\n templateUrl: './side-panel.component.html',\n styleUrls: ['./side-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidePanelComponent extends DashboardsAbstract implements OnInit, OnDestroy {\n menuConfig: MenuSection[] = [];\n currentVersionTimestamp = 0;\n readonly homeDashboardPermissions = [\n PermissionLevelType.Administrator_Dashboard_Read,\n PermissionLevelType.AssetManager_PropertyDashboard_Read,\n PermissionLevelType.ConstructionManager_Dashboard_Read,\n PermissionLevelType.PropertyManager_Dashboard_Read,\n PermissionLevelType.Turnovers_Kanban_Read, // TODO - temporary permission for Vendor\n ];\n\n currentSectionBSubject: BehaviorSubject = new BehaviorSubject(null);\n\n @Input() isSidePanelExpanded = true;\n @Output() mainPageActionEvent: EventEmitter = new EventEmitter();\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private store: Store<{}>,\n private appVersionService: AppVersionService,\n private snackbarService: SnackbarService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.appVersionService.version$\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(appVersion => {\n if (this.currentVersionTimestamp && this.currentVersionTimestamp !== appVersion.version_timestamp) {\n const url = new URL(window.location.href);\n url.searchParams.append('version', appVersion.version_number);\n this.snackbarService.warning(\n `🎉 New PropUp version. Plz reload your browser.`,\n 24 * 60 * 60 * 1000,\n false\n );\n }\n this.currentVersionTimestamp = appVersion.version_timestamp;\n })\n )\n .subscribe();\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n combineLatest([\n this.store.select(selectSelectedDashboardMode).pipe(filter((dashboardMode: DashboardMode) => !!dashboardMode)),\n this.store\n .select(selectUserPermissionLevel)\n .pipe(filter((permissionList: PermissionLevelType[]) => !!permissionList)),\n this.store.select(selectUserData).pipe(filter((userData: UserData) => !!userData?.email)),\n ])\n .pipe(\n untilDestroyed(this),\n tap(async ([dashboardMode, permissionList, userData]) => {\n this.dashboardMode = dashboardMode;\n this.permissionList = permissionList;\n this.userData = userData;\n this.menuConfig = this.getMenuConfig();\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n menuAction(action: MainPageActions) {\n this.mainPageActionEvent.emit(action);\n }\n\n private getMenuConfig(): MenuSection[] {\n const menuConfig: MenuSection[] = [];\n if (!this.dashboardMode) {\n return menuConfig;\n }\n\n if (this.permissionList.includes(PermissionLevelType.AllPermissions)) {\n this.checkRolesSection(menuConfig);\n } else {\n const availableDashboardPermissionsCount = this.homeDashboardPermissions.filter(permission =>\n this.permissionList.includes(permission)\n ).length;\n\n if (availableDashboardPermissionsCount === 1) {\n this.checkHomeSection(menuConfig);\n } else if (availableDashboardPermissionsCount > 1) {\n this.checkRolesSection(menuConfig);\n }\n }\n this.checksMainSection(menuConfig, turnoversSection, false);\n this.checksMainSection(menuConfig, boardsSection, false);\n this.checksMainSection(menuConfig, InspectionsSection, false);\n this.checksMainSection(menuConfig, MaintenanceSection, false);\n this.checksMainSection(menuConfig, reportsSection, true);\n // this.checkTicketSection(menuConfig);\n this.checksMainSection(menuConfig, managementSection, true);\n return menuConfig;\n }\n\n ngOnDestroy(): void {}\n\n private checkHomeSection(sections: MenuSection[]) {\n const section: MenuSection = { ...homeSection };\n sections.push(section);\n }\n\n private checkRolesSection(sections: MenuSection[]) {\n this.checksMainSection(sections, rolesSection, true);\n }\n\n private checkTicketSection(sections: MenuSection[]) {\n if (checkPermissionLevel(this.permissionList, PermissionLevelType.Tickets_Read)) {\n const sectionItem: MenuSectionItem[] = [];\n const section: MenuSection = { ...ticketsSection };\n // TODO - to change after implementing view\n // if (!sectionItem.length) {\n // return;\n // }\n section.sectionItem = sectionItem;\n sections.push(section);\n }\n }\n\n private checksMainSection(sections: MenuSection[], newSection: MenuSection, hideWithoutSubsections: boolean) {\n const section: MenuSection = { ...newSection };\n const sectionItem: MenuSectionItem[] = this.checksSubsection(section.sectionItem);\n\n const hasRights =\n checkPermissionLevel(this.permissionList, section.permissionLevel, 'any') &&\n isUserEmailDomainAllowed(this.userData.email, section.emailDomains);\n if (!hasRights || (hideWithoutSubsections && !sectionItem.length)) {\n return;\n }\n section.sectionItem = sectionItem;\n sections.push(section);\n }\n\n private checksSubsection(sectionItem: MenuSectionItem[]): MenuSectionItem[] {\n if (!sectionItem?.length) {\n return [];\n }\n return sectionItem\n .filter((item: MenuSectionItem) => {\n return checkPermissionLevel(this.permissionList, item.permissionLevel);\n })\n .filter(\n (item: MenuSectionItem) =>\n !item.emailDomains?.length || item.emailDomains.some(domain => this.userData.email.includes(domain))\n );\n }\n}\n","export enum EntityType {\n Turnover = 1,\n Bid,\n Ticket,\n WorkflowStep,\n Company,\n}\n","import { EntityType } from '@shared/enums/entity-type';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const EntityTypeListConst: IRadioButtonOption[] = [\n {\n value: EntityType.Bid,\n label: 'Bid',\n },\n {\n value: EntityType.Ticket,\n label: 'Ticket',\n },\n {\n value: EntityType.Turnover,\n label: 'Turnover',\n },\n {\n value: EntityType.WorkflowStep,\n label: 'WorkflowStep',\n },\n {\n value: EntityType.Company,\n label: 'Vendor',\n },\n];\n","\n
\n
\n \n
\n
\n
\n {{ title }}\n
\n
\n {{ content }}\n
\n
\n {{ footer }}\n
\n
\n
\n \n \n
{{ notification.timestamp | timeFromDate }}
\n
\n
\n\n\n\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EntityTypeListConst } from '@shared/constants/entity-type-list.const';\nimport { WorkflowStepListConst } from '@shared/constants/workflow-step-list.const';\nimport { EntityType } from '@shared/enums/entity-type';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { NotificationCategory } from '@shared/enums/notification-category';\nimport { UserType } from '@shared/enums/user-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { WebNotification } from '@shared/interfaces/notification.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { EnumerationValuePipe } from '@shared/pipes/enumeration-value.pipe';\n\n@Component({\n selector: 'app-notification-ring-item',\n templateUrl: './notification-ring-item.component.html',\n styleUrls: ['./notification-ring-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NotificationRingItemComponent extends ComponentAbstract implements OnInit {\n entityList: IRadioButtonOption[] = EntityTypeListConst;\n\n title = '';\n content = '';\n footer = '';\n\n icon: EIcon;\n deleteInProgress = false;\n\n @Input() isOdd = false;\n @Input() notification: WebNotification;\n @Input() deleteDisabled: boolean;\n @Output() selectEvent: EventEmitter = new EventEmitter();\n @Output() deleteEvent: EventEmitter = new EventEmitter();\n\n constructor(protected cdr: ChangeDetectorRef, private enumerationValuePipe: EnumerationValuePipe) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.icon = this.getNotificationIcon();\n this.title = this.getNotificationTitle();\n this.content = this.getNotificationContent();\n this.footer = this.getNotificationFooter();\n }\n\n select() {\n this.selectEvent.emit();\n }\n\n delete($event: MouseEvent) {\n this.deleteInProgress = true;\n this.cdr.detectChanges();\n $event.stopPropagation();\n this.deleteEvent.emit();\n }\n\n private getNotificationIcon(): EIcon {\n switch (this.notification.category) {\n case NotificationCategory.TurnoverComment:\n return EIcon.COMMENT2;\n case NotificationCategory.Bid:\n return EIcon.DOLLAR;\n case NotificationCategory.BidAccepted:\n return EIcon.DOLLAR;\n case NotificationCategory.BidRejected:\n return EIcon.DOLLAR;\n case NotificationCategory.BidComment:\n return EIcon.COMMENT2;\n case NotificationCategory.Ticket:\n return EIcon.TICKET;\n case NotificationCategory.BidSentBack:\n return EIcon.DOLLAR;\n case NotificationCategory.Turnover:\n return EIcon.TIME_SCHEDULE;\n case NotificationCategory.TurnStepSchedule:\n return EIcon.TIME_SCHEDULE;\n }\n }\n\n private getNotificationTitle(): string {\n if (this.notification.category === NotificationCategory.TurnStepSchedule) {\n return this.notification.title;\n }\n switch (this.notification.relatedObjectTypeId) {\n case EntityType.WorkflowStep: {\n return `${\n this.enumerationValuePipe.transform(\n this.notification.additionalData?.workflowStepEnumType,\n WorkflowStepListConst\n ) || ''\n }`;\n }\n case EntityType.Ticket: {\n return this.notification.additionalData?.ticketName || 'Ticket';\n }\n case EntityType.Bid: {\n return `${this.enumerationValuePipe.transform(WorkflowStepEnumType.Bid, WorkflowStepListConst) || ''}`;\n }\n default: {\n return `${this.enumerationValuePipe.transform(this.notification.relatedObjectTypeId, this.entityList) || ''}`;\n }\n }\n }\n\n private getNotificationFooter() {\n const unitName = this.notification.additionalData?.unitName\n ? `- ${this.notification.additionalData?.unitName}`\n : '';\n const unitNames = this.notification.additionalData?.unitNames\n ? `- ${this.notification.additionalData?.unitNames.join(', ')}`\n : '';\n return `${this.notification.additionalData?.propertyName || ''} ${unitName || unitNames}`;\n }\n\n private getNotificationContent() {\n switch (this.notification.category) {\n case NotificationCategory.Turnover: {\n return 'A turnover has been assigned to you';\n }\n case NotificationCategory.TurnoverComment: {\n return 'New comment';\n }\n case NotificationCategory.Bid: {\n return 'A new bid is available';\n }\n case NotificationCategory.BidAccepted: {\n return 'Bid accepted';\n }\n case NotificationCategory.BidRejected: {\n return 'Bid rejected';\n }\n case NotificationCategory.BidComment: {\n return this.notification.additionalData?.userType === UserType.Contractor\n ? `A new comment from ${this.notification.additionalData?.companyName} was added.`\n : 'A new comment was added';\n }\n case NotificationCategory.Ticket: {\n return 'A ticket has been assigned to you.';\n }\n case NotificationCategory.BidSentBack: {\n return 'A new offer is available.';\n }\n default: {\n return this.notification?.content || '';\n }\n }\n }\n}\n","\n \n\n \n 9 ? trimCounter : defaultCounter\">\n \n\n\n\n
{{ unreadCount }}
\n
\n\n\n
9+
\n
\n\n\n \n
\n
Notifications
\n \n \n show unread only\n \n
\n\n
\n \n \n \n
\n \n \n
No new notifications.
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { Params, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport {\n deleteNotification,\n getLastNotificationList,\n markAllAsRead,\n markAsRead,\n} from '@main-application/notifications/actions/notifications.actions';\nimport {\n selectDeleteNotificationInProgress,\n selectLastNotificationList,\n} from '@main-application/notifications/selectors/notifications.selectors';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { EntityType } from '@shared/enums/entity-type';\nimport { NotificationCategory } from '@shared/enums/notification-category';\nimport { RouteData } from '@shared/enums/route-data';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { UserType } from '@shared/enums/user-type';\nimport { WebNotification } from '@shared/interfaces/notification.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { selectUserData } from '@shared/selectors/user.selectors';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-notification-ring',\n templateUrl: './notification-ring.component.html',\n styleUrls: ['./notification-ring.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NotificationRingComponent extends ComponentAbstract implements OnInit, OnDestroy {\n allNotificationList: WebNotification[] = [];\n displayedNotificationList: WebNotification[] = [];\n userData: UserData;\n deleteInProgress$: Observable;\n unreadOnly = new UntypedFormControl(false);\n\n unreadCount = 0;\n\n @Input() userId: number;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private store: Store<{}>,\n private router: Router,\n private modalsService: ModalsService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.getLastMessages();\n\n this.deleteInProgress$ = this.store.select(selectDeleteNotificationInProgress);\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n })\n )\n .subscribe();\n\n this.store\n .select(selectLastNotificationList)\n .pipe(\n untilDestroyed(this),\n filter((lastNotificationList: WebNotification[]) => !!lastNotificationList),\n tap((lastNotificationList: WebNotification[]) => {\n this.allNotificationList = lastNotificationList;\n this.filterList();\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.unreadOnly.valueChanges\n .pipe(\n untilDestroyed(this),\n tap(() => {\n this.filterList();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {}\n\n selectNotification(webNotification: WebNotification) {\n if (!webNotification.wasRead) {\n this.store.dispatch(\n markAsRead({\n baseNotificationBody: {\n notificationIds: [webNotification.notificationId],\n },\n })\n );\n }\n\n this.openSource(webNotification);\n }\n\n markAllAsRead() {\n this.store.dispatch(markAllAsRead());\n }\n\n deleteNotification(webNotification: WebNotification) {\n this.store.dispatch(\n deleteNotification({\n baseNotificationBody: {\n notificationIds: [webNotification.notificationId],\n },\n })\n );\n }\n\n private filterList() {\n if (this.unreadOnly.value) {\n this.displayedNotificationList = this.allNotificationList.filter(item => !item.wasRead);\n } else {\n this.displayedNotificationList = [...this.allNotificationList];\n }\n this.setUnreadCount();\n this.cdr.detectChanges();\n }\n\n private setUnreadCount() {\n this.unreadCount = (this.allNotificationList || []).filter(item => !item.wasRead).length;\n }\n\n private getLastMessages() {\n this.store.dispatch(getLastNotificationList());\n }\n\n private openSource(webNotification: WebNotification) {\n switch (webNotification.relatedObjectTypeId) {\n case EntityType.Ticket:\n this.modalsService.openTicketPreviewModal({\n ticketId: webNotification.relatedObjectId,\n unitName: webNotification.additionalData?.unitName,\n propertyName: webNotification.additionalData?.propertyName,\n propertyId: webNotification.additionalData?.propertyId,\n });\n break;\n\n case EntityType.Turnover:\n case EntityType.WorkflowStep:\n if (webNotification.additionalData?.workflowStepEnumType) {\n const params =\n webNotification.category === NotificationCategory.TurnoverComment\n ? {\n queryParams: { [RouteData.COMMENT_ID]: webNotification.relatedObjectId },\n }\n : {};\n\n this.router.navigate([AppRoutes.TURNOVERS, webNotification.additionalData.turnoverIds?.[0]], params);\n }\n break;\n\n case EntityType.Bid:\n let queryParams: Params =\n this.userData.userType === UserType.Employee\n ? { [RouteData.SOURCE_VIEW]: RoutePath.BID }\n : { [RouteData.SOURCE_VIEW]: RoutePath.VENDOR_DASHBOARD };\n if (webNotification.category === NotificationCategory.BidComment) {\n queryParams = { ...queryParams, [RouteData.COMMENT_ID]: webNotification.relatedObjectId };\n }\n\n const bidId =\n webNotification.category === NotificationCategory.BidComment\n ? webNotification.additionalData.bidId\n : webNotification.relatedObjectId;\n\n const path: any[] =\n this.userData.userType === UserType.Employee\n ? [\n RoutePath.TURNOVERS,\n RoutePath.BID,\n webNotification.additionalData?.turnoverIds?.[0],\n RoutePath.BID_DETAIL,\n bidId,\n ]\n : [RoutePath.ROLES, RoutePath.VENDOR_DASHBOARD, RoutePath.BID_DETAIL, bidId];\n\n if (bidId) {\n this.router.navigate(path, {\n queryParams,\n });\n }\n break;\n }\n }\n}\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Params, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { first, isNil, max, sortBy } from 'lodash';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, filter, map, mergeMap, startWith, tap } from 'rxjs/operators';\n\nimport {\n clearTurnoverKanbanPortfolio,\n joinProperties,\n selectedPortfolioId,\n selectedPropertyId,\n} from '@dashboards/actions/dashboard.actions';\nimport { selectJoinProperties, selectSelectedPortfolioId } from '@dashboards/selectors/dashboards.selectors';\nimport { selectPortfolios, selectProperties } from '@portfolio/selectors/portfolio.selectors';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { RouteData } from '@shared/enums/route-data';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestPortfolioModel } from '@shared/interfaces/rest-portfolio-model.interface';\n\n@UntilDestroy()\n@Component({\n selector: 'app-property-selector',\n templateUrl: './property-selector.component.html',\n styleUrls: ['./property-selector.component.scss'],\n})\nexport class PropertySelectorComponent implements OnInit {\n userProperties: IRadioButtonOption[] = [];\n userPortfolios: IRadioButtonOption[] = [];\n groupingByItems: IRadioButtonOption[] = [];\n\n DashboardViewType = DashboardViewType;\n\n urlPortfolioId: number = null;\n urlPropertyId: number = null;\n\n selectorsWidthCss = '';\n maxNameLength = 0;\n maxNameLength$ = new BehaviorSubject(0);\n\n dashboardViewType = DashboardViewType.PORTFOLIO_WIDE_VIEW;\n\n properties: UntypedFormControl = new UntypedFormControl();\n portfolio: UntypedFormControl = new UntypedFormControl();\n grouping: UntypedFormControl = new UntypedFormControl(2);\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private store: Store<{}>,\n private cdr: ChangeDetectorRef,\n private router: Router\n ) {}\n\n ngOnInit(): void {\n const { queryParams } = this.activatedRoute.snapshot;\n this.urlPortfolioId = parseInt(queryParams?.[RouteData.PORTFOLIO_ID], 10) || null;\n this.urlPropertyId = parseInt(queryParams?.[RouteData.PROPERTY_ID], 10) || null;\n this.maxNameLength$\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(value => {\n this.maxNameLength = Math.max(this.maxNameLength, value);\n const maxWidth = this.maxNameLength * 6.31 + 90;\n let targetWidth = 200;\n while (targetWidth < maxWidth) {\n targetWidth += 10;\n }\n this.selectorsWidthCss = `width-${targetWidth}`;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n combineLatest([this.activatedRoute.queryParams, this.store.select(selectSelectedPortfolioId)])\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(([queryParams, portfolioId]) => {\n this.urlPortfolioId = parseInt(queryParams?.[RouteData.PORTFOLIO_ID], 10) || portfolioId;\n this.urlPropertyId = parseInt(queryParams?.[RouteData.PROPERTY_ID], 10) || null;\n\n this.groupingByItems = [\n { label: 'None', value: true },\n { label: 'By property', value: false },\n ];\n })\n )\n .subscribe();\n\n this.store\n .select(selectJoinProperties)\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(joined => {\n this.grouping.setValue(joined);\n })\n )\n .subscribe();\n\n this.store\n .select(selectPortfolios)\n .pipe(\n untilDestroyed(this),\n filter(portfolios => !!portfolios?.length),\n tap((portfolios: RestPortfolioModel[]) => {\n this.userPortfolios = portfolios.map>(item => {\n return {\n value: item.id,\n label: item.name,\n };\n });\n this.maxNameLength$.next(max(this.userPortfolios.map(x => x.label.length)));\n if (this.urlPortfolioId && this.userPortfolios.some(e => e.value == this.urlPortfolioId)) {\n this.portfolio.setValue(this.urlPortfolioId, { emitEvent: false });\n } else {\n this.portfolio.setValue(first(this.userPortfolios || [])?.value);\n }\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n combineLatest([this.store.select(selectSelectedPortfolioId), this.store.select(selectProperties)])\n .pipe(\n untilDestroyed(this),\n filter(([portfolioId, properties]) => !!portfolioId && !!properties?.length),\n tap(([portfolioId, properties]) => {\n this.maxNameLength = 0;\n this.userProperties = [\n {\n value: -1,\n label: 'All properties',\n sort: 0,\n },\n ];\n const options = properties\n .filter(x => x.portfolioId === portfolioId)\n .map>((item, index) => {\n return {\n value: item.id,\n label: item.name,\n sort: index + 1,\n };\n });\n this.userProperties.push(...sortBy(options, [item => item.label.toUpperCase()]));\n this.maxNameLength$.next(max(this.userProperties.map(x => x.label.length)));\n if (this.urlPropertyId && this.userProperties.some(e => e.value == this.urlPropertyId)) {\n this.properties.setValue(this.urlPropertyId, { emitEvent: false });\n } else {\n this.properties.setValue(this.userProperties[0]?.value);\n }\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd),\n startWith(null),\n map(() => this.activatedRoute),\n map(route => {\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route;\n }),\n mergeMap(route => route.data),\n tap(data => {\n const newDashboardViewType = (\n isNil(data?.[RouteData.DASHBOARD_VIEW_TYPE])\n ? DashboardViewType.NONE\n : data?.[RouteData.DASHBOARD_VIEW_TYPE]\n ) as DashboardViewType;\n if (this.dashboardViewType !== newDashboardViewType) {\n this.dashboardViewType = newDashboardViewType;\n this.cdr.detectChanges();\n }\n })\n )\n .subscribe();\n\n this.portfolio.valueChanges\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n filter(portfolioItem => !isNil(portfolioItem)),\n tap((portfolioId: number) => {\n this.updateRouterParam({ [RouteData.PORTFOLIO_ID]: portfolioId, [RouteData.PROPERTY_ID]: null });\n // clear cached kanban\n this.store.dispatch(clearTurnoverKanbanPortfolio());\n this.store.dispatch(selectedPortfolioId({ portfolioId }));\n })\n )\n .subscribe();\n\n combineLatest([this.properties.valueChanges.pipe(distinctUntilChanged()), this.store.select(selectProperties)])\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n filter(([propertyItem, properties]) => !isNil(propertyItem) && !!properties?.length),\n map(([propertyId, properties]) => {\n return properties?.find(p => p.id === propertyId);\n }),\n tap(property => {\n if (\n [DashboardViewType.PROPERTY_VIEW, DashboardViewType.PROPERTY_WITH_GROUPING_VIEW].includes(\n this.dashboardViewType\n )\n ) {\n this.updateRouterParam({\n [RouteData.PORTFOLIO_ID]: this.portfolio.value,\n [RouteData.PROPERTY_ID]: property?.id,\n });\n }\n this.store.dispatch(selectedPropertyId({ propertyId: property?.id }));\n })\n )\n .subscribe();\n\n this.grouping.valueChanges\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(state => {\n this.store.dispatch(joinProperties({ state }));\n })\n )\n .subscribe();\n }\n\n private updateRouterParam(params: Params) {\n const currentParams = this.activatedRoute.snapshot.queryParams;\n const currentFragment = this.activatedRoute.snapshot.fragment;\n this.router\n .navigate([], {\n relativeTo: this.activatedRoute,\n queryParams: { ...currentParams, ...params },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n fragment: currentFragment,\n })\n .then();\n }\n}\n","
\n \n \n \n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { BreadcrumbItem } from '@shared/interfaces/breadcrumb-item';\nimport { HelpRouterService } from '@shared/services/help-router.service';\n\n@Component({\n selector: 'app-breadcrumb-item',\n templateUrl: './breadcrumb-item.component.html',\n styleUrls: ['./breadcrumb-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BreadcrumbItemComponent extends ComponentAbstract implements OnInit {\n constructor(protected cdr: ChangeDetectorRef, private router: Router, private helpRouterService: HelpRouterService) {\n super(cdr);\n }\n\n @Input() item: BreadcrumbItem;\n\n ngOnInit(): void {}\n\n open() {\n const queryParams = this.helpRouterService.getGlobalPreservedParams();\n if (this.item?.url) {\n this.reloadRoute().then(() => this.router.navigate([this.item.url], { queryParams }));\n }\n }\n\n private reloadRoute(): Promise {\n return this.router.navigateByUrl('/', { skipLocationChange: true });\n }\n}\n","\n \n
{{ item?.label }}
\n\n","
\n
\n \n \n \n
\n \n \n \n
\n \n
\n \n \n \n \n \n \n
\n
\n
\n
\n\n\n\n \n\n\n\n \n\n\n\n
\n \n \n
\n
\n\n\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Params, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { isNil } from 'lodash';\nimport { Observable } from 'rxjs';\nimport { filter, map, mergeMap, startWith, switchMap, tap } from 'rxjs/operators';\n\nimport {\n selectedDashboardViewType,\n setCustomBreadcrumbs,\n} from '@main-application/dashboards/actions/dashboard.actions';\nimport { DashboardsAbstract } from '@main-application/dashboards/components/abstract/dashboards.abstract';\nimport { selectCustomBreadcrumbs } from '@main-application/dashboards/selectors/dashboards.selectors';\nimport { loadAllUserPortfolios } from '@portfolio/actions/portfolio.actions';\nimport { loadAllUserProperties } from '@shared/actions/user.actions';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { RouteData } from '@shared/enums/route-data';\nimport { BreadcrumbItem } from '@shared/interfaces/breadcrumb-item';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { selectDashboardViewType } from '@shared/selectors/enumeration.selectors';\nimport { selectIsAuthenticated, selectUserData } from '@shared/selectors/user.selectors';\n\n@UntilDestroy()\n@Component({\n selector: 'app-top-panel',\n templateUrl: './top-panel.component.html',\n styleUrls: ['./top-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TopPanelComponent extends DashboardsAbstract implements OnInit, OnDestroy {\n breadcrumbList: BreadcrumbItem[] = [];\n routeBreadcrumbList: BreadcrumbItem[] = [];\n additionalBreadcrumbList: BreadcrumbItem[] = [];\n userData: UserData;\n\n @Input() isSidePanelExpanded: boolean;\n @Output() mainPageActionEvent: EventEmitter = new EventEmitter();\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private store: Store<{}>\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd),\n startWith(null),\n tap((event: NavigationEnd) => {\n this.routeBreadcrumbList = this.getBreadcrumbList(this.activatedRoute.root);\n this.store.dispatch(setCustomBreadcrumbs({ breadcrumbList: [] }));\n this.mergeBreadcrumbList();\n }),\n map(() => this.activatedRoute),\n map(route => {\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route;\n }),\n mergeMap(route => {\n return route.data;\n }),\n tap(data => {\n const newDashboardViewType = (\n isNil(data?.[RouteData.DASHBOARD_VIEW_TYPE])\n ? DashboardViewType.NONE\n : data?.[RouteData.DASHBOARD_VIEW_TYPE]\n ) as DashboardViewType;\n\n if (this.dashboardViewType !== newDashboardViewType) {\n this.dashboardViewType = newDashboardViewType;\n this.cdr.detectChanges();\n }\n }),\n switchMap(() => this.getDashboardViewTypes())\n )\n .subscribe();\n\n this.store\n .select(selectCustomBreadcrumbs)\n .pipe(\n untilDestroyed(this),\n tap((breadcrumbList: BreadcrumbItem[]) => {\n this.additionalBreadcrumbList = breadcrumbList;\n this.mergeBreadcrumbList();\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectIsAuthenticated)\n .pipe(\n untilDestroyed(this),\n tap((isAuthenticated: boolean) => {\n this.isAuthenticated = isAuthenticated;\n this.cdr.detectChanges();\n }),\n filter(isAuthenticated => isAuthenticated)\n )\n .subscribe(() => {\n this.store.dispatch(loadAllUserProperties());\n this.store.dispatch(loadAllUserPortfolios());\n });\n }\n\n ngOnDestroy(): void {}\n\n menuAction(action: MainPageActions) {\n this.mainPageActionEvent.emit(action);\n }\n\n home() {\n this.menuAction(MainPageActions.HOME_PAGE);\n }\n\n private getBreadcrumbList(\n activatedRoute: ActivatedRoute,\n url = '',\n breadcrumbs: BreadcrumbItem[] = []\n ): BreadcrumbItem[] {\n if (!activatedRoute) {\n return [];\n }\n\n const icon = (activatedRoute.routeConfig?.data?.[RouteData.BREADCRUMB_ICON] as EIcon) || null;\n const label = activatedRoute.routeConfig?.data?.[RouteData.BREADCRUMB] || null;\n let path = activatedRoute.routeConfig?.path || null;\n if (path) {\n const lastRoutePart = path.split('/').pop();\n const isDynamicRoute = lastRoutePart.startsWith(':');\n if (isDynamicRoute && !!activatedRoute.snapshot) {\n path = path.replace(lastRoutePart, activatedRoute.snapshot.params[lastRoutePart.split(':')[1]]);\n }\n url = `${url}/${path}`;\n }\n\n if (label) {\n breadcrumbs.push({ label, url, icon });\n }\n\n if (activatedRoute.firstChild) {\n this.getBreadcrumbList(activatedRoute.firstChild, url, breadcrumbs);\n }\n return breadcrumbs;\n }\n\n private getDashboardViewTypes(): Observable {\n return this.store.select(selectDashboardViewType).pipe(\n untilDestroyed(this),\n filter(dashboardViewType => !!dashboardViewType),\n map(dashboardViewTypes => dashboardViewTypes.find(e => e.enumerationValue == this.dashboardViewType)),\n tap((dashboardViewTypeEnum: EnumerationItem) => {\n this.store.dispatch(selectedDashboardViewType({ dashboardViewType: dashboardViewTypeEnum }));\n this.cdr.detectChanges();\n })\n );\n }\n\n private mergeBreadcrumbList() {\n this.breadcrumbList = [...this.routeBreadcrumbList, ...this.additionalBreadcrumbList];\n this.cdr.detectChanges();\n }\n\n private updateRouterParam(params: Params) {\n const currentParams = this.activatedRoute.snapshot.queryParams;\n const currentFragment = this.activatedRoute.snapshot.fragment;\n this.router\n .navigate([], {\n relativeTo: this.activatedRoute,\n queryParams: { ...currentParams, ...params },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n fragment: currentFragment,\n })\n .then();\n }\n}\n","
Safari unsupported. Use Chrome
\n
\n
\n
\n
\n \n
\n \n
\n \n
\n \n \n
\n \n
\n\n\n\n\n\n
\n \n
\n
\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\nimport { DeviceDetectorService } from 'ngx-device-detector';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, first, map, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { AppVersionService } from '@app/services/app-version.service';\nimport { selectedDashboardMode } from '@main-application/dashboards/actions/dashboard.actions';\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\nimport { NotificationsService } from '@main-application/notifications/services/notifications.service';\nimport { loadEnumerations } from '@shared/actions/enumerations.actions';\nimport { loadTenantData, loadUserData, setAuthenticated } from '@shared/actions/user.actions';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { UserType } from '@shared/enums/user-type';\nimport { getDashboardMode } from '@shared/functions/get-dashboard-mode.function';\nimport { TenantData } from '@shared/interfaces/tenant-data';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { selectDashboardViewType, selectLoadEnumerationsLoading } from '@shared/selectors/enumeration.selectors';\nimport { selectTenantData, selectUserData } from '@shared/selectors/user.selectors';\nimport { AuthService } from '@shared/services/auth.service';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { environment } from 'src/environments/environment';\n\nimport { ScreenWiperService } from '../../../services/screen-wiper.service';\nimport { SidePanelService } from '../../../services/side-panel.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-application-menu',\n templateUrl: './application-menu.component.html',\n styleUrls: ['./application-menu.component.scss'],\n})\nexport class ApplicationMenuComponent extends ComponentAbstract implements OnInit, OnDestroy {\n screenWipeStatus$ = this.screenWiperService.screenClasses$;\n wipeDuration = this.screenWiperService.wipeDuration;\n wiperVisible$ = this.screenWiperService.globalWiperVisible$;\n environment = environment;\n isAuthenticated = false;\n videoUrl: string;\n isSearchSelected = false;\n showContent = true;\n currentYear: number;\n currentVersion = '';\n currentVersionTimeStamp = 0;\n\n showBuildTime = environment.showBuildTime;\n isExternal = false;\n displayNavigation = true; //Can be used for full screen mode in future\n\n isSidePanelExpanded$: Observable;\n showBanner = false;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private authService: AuthService,\n private router: Router,\n private oidcSecurityService: OidcSecurityService,\n private store: Store<{}>,\n private notificationsService: NotificationsService,\n private sidePanelService: SidePanelService,\n private snackbarService: SnackbarService,\n private appVersionService: AppVersionService,\n private activatedRoute: ActivatedRoute,\n private deviceService: DeviceDetectorService,\n private timezoneService: TimezoneService,\n private screenWiperService: ScreenWiperService\n ) {\n super(cdr);\n }\n\n ngOnInit() {\n this.showBanner = this.deviceService.browser === 'Safari';\n\n this.authService.watchForAccessToken().pipe(untilDestroyed(this)).subscribe();\n this.snackbarService.watchForSidePanel().pipe(untilDestroyed(this)).subscribe();\n\n this.isSidePanelExpanded$ = this.sidePanelService.isSidePanelExpanded$;\n\n this.appVersionService.version$\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n filter(appVersion => appVersion.version_timestamp > 0),\n first(),\n tap(appVersion => {\n this.currentVersionTimeStamp = appVersion.version_timestamp;\n this.currentVersion = appVersion.version_number;\n })\n )\n .subscribe();\n\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd)\n )\n .subscribe(() => {\n this.checkSlackResponse();\n this.checkBuildiumResponse();\n this.cdr.detectChanges();\n });\n\n this.oidcSecurityService.isAuthenticated$\n .pipe(\n untilDestroyed(this),\n map(({ isAuthenticated }) => isAuthenticated),\n distinctUntilChanged()\n )\n .subscribe(isAuthenticated => {\n this.store.dispatch(setAuthenticated({ isAuthenticated }));\n\n if (!isAuthenticated) {\n this.notificationsService.close();\n return;\n }\n\n this.store.dispatch(loadTenantData());\n this.store.dispatch(loadUserData());\n this.store.dispatch(loadEnumerations());\n this.notificationsService.connect();\n });\n\n this.isLoading$ = this.store.select(selectLoadEnumerationsLoading);\n\n this.dashboardViewType$ = this.store.select(selectDashboardViewType);\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData)\n )\n .subscribe((userData: UserData) => {\n this.userData = userData;\n this.isExternal = this.userData.userType === UserType.Contractor;\n this.store.dispatch(selectedDashboardMode({ dashboardMode: getDashboardMode(userData) }));\n });\n\n this.store\n .select(selectTenantData)\n .pipe(\n untilDestroyed(this),\n filter((tenantData: TenantData) => !!tenantData?.tenantId),\n tap((tenantData: TenantData) => {\n const { href, hostname } = window.location;\n if (hostname !== 'localhost' && !href.includes(tenantData.tenantUrl)) {\n setTimeout(() => {\n sessionStorage.removeItem(`0-${environment.azureAuthConfig.clientID}`);\n window.location.href = tenantData.tenantUrl;\n }, 0);\n }\n })\n )\n .subscribe();\n\n this.currentYear = this.timezoneService.getCurrentDate().getFullYear();\n\n this.appVersionService.pull();\n }\n\n checkSlackResponse() {\n const { slackAdded } = this.activatedRoute.snapshot.queryParams;\n if (slackAdded === 'true') {\n this.removeQueryParam('slackAdded');\n setTimeout(() => {\n this.snackbarService.success(SnackbarErrorMessage.SlackAdded);\n }, 1000);\n }\n }\n\n checkBuildiumResponse() {\n const { buildium } = this.activatedRoute.snapshot.queryParams;\n if (buildium === 'true') {\n this.removeQueryParam('buildium');\n setTimeout(() => {\n this.snackbarService.success(SnackbarErrorMessage.BuildiumSetupCompleted);\n }, 1000);\n }\n if (buildium === 'false') {\n this.removeQueryParam('buildium');\n setTimeout(() => {\n this.snackbarService.error(SnackbarErrorMessage.BuildiumSetupIncompleted);\n }, 1000);\n }\n }\n\n removeQueryParam(paramName: string) {\n this.router.navigate([], {\n queryParams: {\n [paramName]: null,\n },\n queryParamsHandling: 'merge',\n });\n }\n\n ngOnDestroy() {\n this.notificationsService.close();\n }\n\n toggleSidePanel() {\n this.sidePanelService.toggleSidePanel();\n }\n\n mainPageActions(action: MainPageActions) {\n switch (action) {\n case MainPageActions.ACCOUNT:\n {\n // todo - redirect to account settings\n }\n break;\n case MainPageActions.PASSWORD:\n {\n // todo - redirect to password settings\n }\n break;\n case MainPageActions.NOTIFICATIONS:\n {\n // todo - redirect to notifications settings\n }\n break;\n case MainPageActions.LOGOUT:\n {\n this.oidcSecurityService.logoff();\n this.isAuthenticated = false;\n }\n break;\n case MainPageActions.LOGIN:\n {\n this.router\n .navigate([AppRoutes.LOGIN], {\n queryParams: {\n returnUrl: window.location.href,\n },\n })\n .then();\n }\n break;\n case MainPageActions.HOME_PAGE:\n {\n this.router.navigate([AppRoutes.HOME]).then();\n }\n break;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { AutoLoginPartialRoutesGuard } from 'angular-auth-oidc-client';\n\nimport { UnitDetailsComponent } from '@portfolio/components/unit-details/unit-details.component';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { ManagementRoute } from '@shared/enums/management-route.enum';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { RouteData } from '@shared/enums/route-data';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { AuthGuard } from '@shared/guards/auth.guard';\nimport { HomeRedirectGuard } from '@shared/guards/home-redirect.guard';\nimport { PermissionLevelGuardFactory } from '@shared/guards/permission-level.guard';\nimport { ViewCloseGuard } from '@shared/guards/view-close.guard';\n\nimport { ApplicationMenuComponent } from './application-menu/application-menu.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: ApplicationMenuComponent,\n children: [\n {\n path: '',\n redirectTo: AppRoutes.HOME,\n pathMatch: 'full',\n },\n {\n path: RoutePath.HOME,\n canActivate: [AutoLoginPartialRoutesGuard, AuthGuard, HomeRedirectGuard],\n loadChildren: () =>\n import('@main-application/home-dashboard/home-dashboard.module').then(m => m.HomeDashboardModule),\n },\n {\n path: RoutePath.ROLES,\n canActivate: [AutoLoginPartialRoutesGuard, AuthGuard],\n data: { [RouteData.BREADCRUMB]: 'Home', [RouteData.BREADCRUMB_ICON]: EIcon.HOME },\n loadChildren: () =>\n import('@main-application/dashboard-roles/dashboard-roles.module').then(m => m.DashboardRolesModule),\n },\n {\n path: RoutePath.TURNOVERS,\n canActivate: [AutoLoginPartialRoutesGuard, AuthGuard],\n loadChildren: () => import('@main-application/turnovers/turnovers.module').then(m => m.TurnoversModule),\n },\n {\n path: RoutePath.INSPECTIONS,\n canActivate: [AutoLoginPartialRoutesGuard, AuthGuard],\n loadChildren: () => import('@main-application/inspections/inspections.module').then(m => m.InspectionsModule),\n },\n {\n path: RoutePath.Maintenance,\n canActivate: [AutoLoginPartialRoutesGuard, AuthGuard],\n loadChildren: () => import('@main-application/maintenance/maintenance.module').then(m => m.MaintenanceModule),\n },\n {\n path: RoutePath.BOARDS,\n canActivate: [AutoLoginPartialRoutesGuard, AuthGuard],\n data: { [RouteData.BREADCRUMB]: 'Boards' },\n loadChildren: () => import('@main-application/boards/boards.module').then(m => m.BoardsModule),\n },\n {\n path: `${RoutePath.BUILDIUM}/tokenExchange`,\n canActivate: [AuthGuard],\n loadComponent: () =>\n import('@main-application/buildium/token-exchange/token-exchange.component').then(\n m => m.TokenExchangeComponent\n ),\n },\n {\n path: RoutePath.REPORTS,\n canActivate: [AutoLoginPartialRoutesGuard, AuthGuard],\n data: {\n [RouteData.BREADCRUMB]: 'Reports',\n [RouteData.BREADCRUMB_ICON]: EIcon.CHART_LINE,\n },\n loadChildren: () =>\n import('@main-application/dashboard-reports/dashboard-reports.module').then(m => m.DashboardReportsModule),\n },\n {\n path: RoutePath.TICKETS,\n canActivate: [\n AutoLoginPartialRoutesGuard,\n AuthGuard,\n PermissionLevelGuardFactory(PermissionLevelType.Tickets_Read),\n ],\n loadChildren: () => import('@main-application/tickets/tickets.module').then(m => m.TicketsModule),\n },\n {\n path: ManagementRoute.SETTINGS,\n canActivate: [AutoLoginPartialRoutesGuard, AuthGuard],\n canDeactivate: [ViewCloseGuard],\n data: {\n [RouteData.BREADCRUMB]: 'Settings',\n [RouteData.BREADCRUMB_ICON]: EIcon.SHIELD_USER,\n },\n loadChildren: () => import('@main-application/management/management.module').then(m => m.ManagementModule),\n },\n {\n path: `${RoutePath.UNIT_DETAILS}/:unitId`,\n component: UnitDetailsComponent,\n canActivate: [AutoLoginPartialRoutesGuard, AuthGuard],\n canDeactivate: [ViewCloseGuard],\n data: {\n [RouteData.BREADCRUMB]: 'Unit details',\n [RouteData.DASHBOARD_VIEW_TYPE]: DashboardViewType.NONE,\n },\n },\n {\n path: RoutePath.NO_PERMISSION,\n canActivate: [AutoLoginPartialRoutesGuard],\n data: {\n [RouteData.BREADCRUMB]: 'No permission',\n [RouteData.DASHBOARD_VIEW_TYPE]: DashboardViewType.NONE,\n },\n loadComponent: () =>\n import('@main-application/no-permission/no-permission.component').then(m => m.NoPermissionComponent),\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class MainApplicationRoutingModule {}\n","import { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport player from 'lottie-web';\nimport { LottieModule } from 'ngx-lottie';\n\nimport { AcceptTokenModule } from '@app/modules/accept-token/accept-token.module';\nimport { IconModule } from '@app/modules/ui-components/components/icon/icon.module';\nimport { IdleTimeModule } from '@app/modules/ui-components/components/idle-time/idle-time.module';\nimport { NewTurnoverModalModule } from '@app/modules/ui-components/modals/new-turnover-modal/new-turnover-modal.module';\nimport { SharedStoreModule } from '@dashboards/shared-store.module';\nimport { NotificationsModule } from '@main-application/notifications/notifications.module';\nimport { PortfolioStoreModule } from '@portfolio/store/portfolio-store.module';\nimport { DirectivesModule } from '@shared/directives/directives.module';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { ValueIfNonZeroPipe } from '@shared/pipes/valueIfNonZero.pipe';\nimport { ValueIfPositivePipe } from '@shared/pipes/valueIfPositive.pipe';\nimport { YesEmptyPipe } from '@shared/pipes/yesEmpty.pipe';\nimport { SharedModule } from '@shared/shared.module';\nimport { AnimationModule } from '@ui-components/components/animation/animation.module';\nimport { AvatarModule } from '@ui-components/components/avatar/avatar.module';\nimport { NotificationRingModule } from '@ui-components/components/notification-ring/notification-ring.module';\nimport { RadioButtonDropdownModule } from '@ui-components/components/radio-button-dropdown/radio-button-dropdown.module';\nimport { SearchInputModule } from '@ui-components/components/search-input/search-input.module';\nimport { ModalsModule } from '@ui-components/modals/modals.module';\n\nimport { ApplicationMenuComponent } from './application-menu/application-menu.component';\nimport { BreadcrumbItemComponent } from './application-menu/breadcrumb-item/breadcrumb-item.component';\nimport { PropertySelectorComponent } from './application-menu/property-selector/property-selector.component';\nimport { SidePanelComponent } from './application-menu/side-panel/side-panel.component';\nimport { SidePanelSectionComponent } from './application-menu/side-panel-section/side-panel-section.component';\nimport { SidePanelSectionItemComponent } from './application-menu/side-panel-section-item/side-panel-section-item.component';\nimport { TopPanelComponent } from './application-menu/top-panel/top-panel.component';\nimport { MainApplicationRoutingModule } from './main-application.routing.module';\n\nexport function playerFactory() {\n return player;\n}\n\n@NgModule({\n declarations: [\n ApplicationMenuComponent,\n SidePanelComponent,\n SidePanelSectionComponent,\n SidePanelSectionItemComponent,\n TopPanelComponent,\n PropertySelectorComponent,\n BreadcrumbItemComponent,\n ],\n imports: [\n LottieModule.forRoot({ player: playerFactory }),\n CommonModule,\n NotificationsModule,\n SharedStoreModule,\n ModalsModule,\n ScrollingModule,\n FormsModule,\n ReactiveFormsModule,\n SharedModule,\n MatAutocompleteModule,\n MatBadgeModule,\n MatButtonModule,\n MatCardModule,\n MatCheckboxModule,\n MatDatepickerModule,\n MatDialogModule,\n MatDividerModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatGridListModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatMenuModule,\n MatNativeDateModule,\n MatPaginatorModule,\n MatRadioModule,\n MatSelectModule,\n MatSidenavModule,\n MatSnackBarModule,\n MatSortModule,\n MatStepperModule,\n MatTabsModule,\n MatTableModule,\n MatToolbarModule,\n MatTooltipModule,\n MatChipsModule,\n MatProgressSpinnerModule,\n MainApplicationRoutingModule,\n PipesModule,\n IdleTimeModule,\n IconModule,\n DirectivesModule,\n NewTurnoverModalModule,\n AcceptTokenModule,\n ModalsModule,\n AvatarModule,\n SearchInputModule,\n RadioButtonDropdownModule,\n PortfolioStoreModule,\n NotificationRingModule,\n AnimationModule,\n ],\n providers: [YesEmptyPipe, ValueIfPositivePipe, ValueIfNonZeroPipe],\n})\nexport class MainApplicationModule {}\n","import { createAction, props } from '@ngrx/store';\n\nimport { BaseNotificationBody, WebNotification } from '@shared/interfaces/notification.interface';\n\n/**\n * Clear Notifications store\n */\nexport const clearNotificationsStore = createAction('[Notifications] Clear Notifications store');\n\n/**\n * add latest notification\n */\nexport const addLatestNotification = createAction(\n '[Notifications] add latest Notification',\n props<{ notification: WebNotification }>()\n);\n/**\n * add latest notification of any user any event\n */\nexport const addLatestAnyNotification = createAction(\n '[Notifications] add latest any Notification',\n props<{ notification: WebNotification }>()\n);\n/**\n * mark last notification of any user any event\n */\nexport const markAnyNotificationsAsRead = createAction(\n '[Notifications] mark all turnovers of any notifications as read',\n props<{ turnoverId: number }>()\n);\n/**\n * clear list of any notification\n */\nexport const clearAnyNotifications = createAction('[Notifications] clear list of any notifications');\n/**\n * clear list of any notification\n */\nexport const updateAnyNotifications = createAction(\n '[Notifications] update list of any notifications',\n props<{ list: WebNotification[] }>()\n);\n\n/**\n * get last notification list\n */\nexport const getLastNotificationList = createAction('[Notifications] get last notification list');\nexport const getLastNotificationListSuccess = createAction(\n '[Notifications] get last notification list success',\n props<{ lastNotificationList: WebNotification[] }>()\n);\nexport const getLastNotificationListFailed = createAction('[Notifications] get last notification list failed');\n\n/**\n * mark all as read\n */\nexport const markAllAsRead = createAction('[Notifications] set all as read');\nexport const markAllAsReadSuccess = createAction('[Notifications] set all as read success');\nexport const markAllAsReadFailed = createAction('[Notifications] set mark all as read failed');\n\n/**\n * mark selected as read\n */\nexport const markAsRead = createAction(\n '[Notifications] set mark all as read',\n props<{ baseNotificationBody: BaseNotificationBody }>()\n);\nexport const markAsReadSuccess = createAction('[Notifications] set mark all as read success');\nexport const markAsReadFailed = createAction('[Notifications] set mark all as read failed');\n\n/**\n * delete notification\n */\nexport const deleteNotification = createAction(\n '[Notifications] delete notification',\n props<{ baseNotificationBody: BaseNotificationBody }>()\n);\nexport const deleteNotificationSuccess = createAction('[Notifications] delete notification success');\nexport const deleteNotificationFailed = createAction('[Notifications] delete notification failed');\n","import { createReducer, on } from '@ngrx/store';\nimport { first } from 'lodash';\n\nimport {\n addLatestAnyNotification,\n addLatestNotification,\n clearAnyNotifications,\n clearNotificationsStore,\n deleteNotification,\n deleteNotificationFailed,\n deleteNotificationSuccess,\n getLastNotificationList,\n getLastNotificationListFailed,\n getLastNotificationListSuccess,\n markAllAsRead,\n markAllAsReadFailed,\n markAllAsReadSuccess,\n markAsRead,\n markAsReadFailed,\n markAsReadSuccess,\n updateAnyNotifications,\n} from '@main-application/notifications/actions/notifications.actions';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { WebNotification } from '@shared/interfaces/notification.interface';\n\nexport const notificationsFeatureKey = 'notifications';\n\nexport interface State {\n bidNotification: WebNotification;\n ticketNotification: WebNotification;\n turnoverNotification: WebNotification;\n lastAnyNotificationList: WebNotification[];\n lastNotificationList: WebNotification[];\n lastNotificationListLoading: boolean;\n markAllAsReadInProgress: boolean;\n markAllAsReadStatus: UpdateStatus;\n markAsReadInProgress: boolean;\n markAsReadStatus: UpdateStatus;\n markAsReadId: string;\n deleteNotificationInProgress: boolean;\n}\n\nexport const initialState: State = {\n bidNotification: null,\n ticketNotification: null,\n turnoverNotification: null,\n lastAnyNotificationList: [],\n lastNotificationList: [],\n lastNotificationListLoading: false,\n markAllAsReadInProgress: false,\n markAllAsReadStatus: null,\n markAsReadInProgress: false,\n markAsReadStatus: null,\n markAsReadId: null,\n deleteNotificationInProgress: false,\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * Clear Notifications store\n */\n on(clearNotificationsStore, (state, action) => ({\n ...state,\n ...initialState,\n })),\n\n /**\n * get last notification list\n */\n on(getLastNotificationList, (state, action) => ({\n ...state,\n lastNotificationListLoading: true,\n })),\n on(getLastNotificationListSuccess, (state, action) => ({\n ...state,\n lastNotificationList: action.lastNotificationList,\n lastNotificationListLoading: false,\n })),\n on(getLastNotificationListFailed, (state, action) => ({\n ...state,\n lastNotificationList: [],\n lastNotificationListLoading: false,\n })),\n\n on(addLatestNotification, (state, action) => ({\n ...state,\n lastNotificationList: [action.notification, ...state.lastNotificationList],\n })),\n\n on(addLatestAnyNotification, (state, action) => ({\n ...state,\n lastAnyNotificationList: [action.notification, ...state.lastAnyNotificationList],\n })),\n\n on(clearAnyNotifications, (state, action) => ({\n ...state,\n lastAnyNotificationList: [],\n })),\n\n on(updateAnyNotifications, (state, action) => ({\n ...state,\n lastAnyNotificationList: [...action.list],\n })),\n\n /**\n * mark all as read\n */\n on(markAllAsRead, (state, action) => ({\n ...state,\n markAllAsReadInProgress: true,\n markAllAsReadStatus: null,\n })),\n on(markAllAsReadSuccess, (state, action) => ({\n ...state,\n markAllAsReadInProgress: false,\n markAllAsReadStatus: UpdateStatus.UPDATE,\n })),\n on(markAllAsReadFailed, (state, action) => ({\n ...state,\n markAllAsReadInProgress: false,\n markAllAsReadStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * mark selected as read\n */\n on(markAsRead, (state, action) => ({\n ...state,\n markAsReadInProgress: true,\n markAsReadStatus: null,\n markAsReadId: first(action.baseNotificationBody?.notificationIds),\n })),\n on(markAsReadSuccess, (state, action) => ({\n ...state,\n markAsReadInProgress: false,\n markAsReadStatus: UpdateStatus.UPDATE,\n })),\n on(markAsReadFailed, (state, action) => ({\n ...state,\n markAsReadInProgress: false,\n markAsReadStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * delete notification\n */\n on(deleteNotification, (state, action) => ({\n ...state,\n deleteNotificationInProgress: true,\n })),\n on(deleteNotificationSuccess, (state, action) => ({\n ...state,\n deleteNotificationInProgress: false,\n })),\n on(deleteNotificationFailed, (state, action) => ({\n ...state,\n deleteNotificationInProgress: false,\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromNotifications from '@main-application/notifications/reducers/notifications.reducer';\n\nexport const selectNotificationsState = createFeatureSelector(\n fromNotifications.notificationsFeatureKey\n);\n\n/**\n * get last notification list\n */\nexport const selectLastNotificationList = createSelector(\n selectNotificationsState,\n notificationsState => notificationsState.lastNotificationList\n);\nexport const selectLastNotificationListLoading = createSelector(\n selectNotificationsState,\n notificationsState => notificationsState.lastNotificationListLoading\n);\n\n/**\n * get last any notification\n */\nexport const selectLastAnyNotificationList = createSelector(\n selectNotificationsState,\n notificationsState => notificationsState.lastAnyNotificationList\n);\n\n/**\n * mark selected as read\n */\nexport const selectMarkAsReadInProgress = createSelector(\n selectNotificationsState,\n notificationsState => notificationsState.markAsReadInProgress\n);\nexport const selectMarkAsReadStatus = createSelector(\n selectNotificationsState,\n notificationsState => notificationsState.markAsReadStatus\n);\nexport const selectMarkAsReadId = createSelector(\n selectNotificationsState,\n notificationsState => notificationsState.markAsReadId\n);\n\n/**\n * delete notification\n */\nexport const selectDeleteNotificationInProgress = createSelector(\n selectNotificationsState,\n notificationsState => notificationsState.deleteNotificationInProgress\n);\n","export enum UnitDetailsComponentForm {\n FINISH = 'finish',\n DESCRIPTION = 'description',\n RENT = 'rent',\n OLDRENT = 'oldRent',\n MARKETRENT = 'marketRent',\n ADVERTISEDRENT = 'advertisedRent',\n}\n","import { ChangeDetectorRef, Directive, Input } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { MatTableDataSource } from '@angular/material/table';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { UnitDetailsComponentForm } from '@portfolio/components/unit-details/config/enums/unit-details-component-form';\nimport { RestAddressModel } from '@shared/interfaces/address.interface';\nimport { RestApplianceModel } from '@shared/interfaces/appliance.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n@Directive()\nexport abstract class UnitDetailsAbstract extends ComponentAbstract {\n readonly displayedColumns = [\n 'applianceType',\n 'id',\n 'brand',\n 'modelNumber',\n 'serialNumberReplaced',\n 'serialNumber',\n 'applianceColor',\n ];\n dataSource: MatTableDataSource;\n\n propertyAddress = '';\n propertyManager = '';\n\n form: UntypedFormGroup;\n portfolioId: number;\n propertyId: number;\n turnoverId: number;\n applianceId: number;\n bulkBidId: number;\n unit: RestUnitModel;\n applianceInUnit: RestApplianceModel[] = [];\n applianceTypeList: IRadioButtonOption[] = [];\n colorTypeList: IRadioButtonOption[] = [];\n\n @Input() unitId: number;\n @Input() readOnly = true;\n\n protected constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n get UnitDetailsComponentForm(): typeof UnitDetailsComponentForm {\n return UnitDetailsComponentForm;\n }\n\n getPropertyAddress(physicalAddress: RestAddressModel): string {\n if (physicalAddress) {\n return `${physicalAddress?.street1 || ''} ${physicalAddress?.street2 || ''}, ${physicalAddress?.city || ''} ${\n physicalAddress?.zip || ''\n }`;\n }\n return '';\n }\n\n getPropertyManager(propertyManager: RestUserModel) {\n if (!propertyManager?.firstName && !propertyManager?.lastName) {\n return 'N/A';\n }\n return `${propertyManager?.firstName || ''} ${propertyManager?.lastName || ''}`;\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { getUnitAttachments, setUnitAttachment } from '@portfolio/actions/portfolio.actions';\nimport { UnitDetailsAbstract } from '@portfolio/components/unit-details/abstract/unit-details.abstract';\nimport { selectUnitAttachments } from '@portfolio/selectors/portfolio.selectors';\nimport { imageVideoFileExtensions } from '@shared/constants/file-extensions.const';\nimport { UnitAttachmentType } from '@shared/enums/attachment-type';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { UpdateTypedAttachmentToEntityModel } from '@shared/interfaces/turnover.interface';\nimport { Upload } from '@shared/interfaces/upload';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nexport enum UnitDetailsPicturesSectionComponentForm {\n PHOTO = 'photo',\n FLOOR_PLAN = 'floorPlan',\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-unit-details-pictures-section',\n templateUrl: './unit-details-pictures-section.component.html',\n styleUrls: ['./unit-details-pictures-section.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UnitDetailsPicturesSectionComponent extends UnitDetailsAbstract implements OnInit, OnDestroy {\n fileUploadInProgress = false;\n form: UntypedFormGroup;\n unitPhotos: RestGenericTypedAttachment[] = [];\n unitFloorPlan: RestGenericTypedAttachment[] = [];\n unitPhotosBSubject: BehaviorSubject = new BehaviorSubject(\n []\n );\n unitFloorPlanBSubject: BehaviorSubject = new BehaviorSubject<\n RestGenericTypedAttachment[]\n >([]);\n displayedUnitPhotos: RestGenericTypedAttachment[] = [];\n displayedUnitFloorPlan: RestGenericTypedAttachment[] = [];\n UnitAttachmentType = UnitAttachmentType;\n protected readonly acceptedFormats = imageVideoFileExtensions;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private store: Store<{}>,\n private formBuilder: UntypedFormBuilder,\n private modalsService: ModalsService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.initForm();\n\n this.store.dispatch(getUnitAttachments({ unitId: this.unitId }));\n\n this.store\n .select(selectUnitAttachments)\n .pipe(\n untilDestroyed(this),\n filter((unitAttachments: RestGenericTypedAttachment[]) => !!unitAttachments),\n tap((unitAttachments: RestGenericTypedAttachment[]) => {\n this.prepareUnitAttachments(unitAttachments);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {}\n\n fileUploaded(item: AttachmentItem, unitAttachmentType: UnitAttachmentType) {\n if (item?.upload) {\n this.setAttachment(item.upload, unitAttachmentType);\n }\n }\n\n showUnitPictures() {\n this.modalsService.openGalleryModal({\n attachmentType: UnitAttachmentType.Photo,\n attachmentsBSubject: this.unitPhotosBSubject,\n readOnly: this.readOnly,\n unitId: this.unitId,\n });\n }\n\n showUnitFloorPlans() {\n this.modalsService.openGalleryModal({\n attachmentType: UnitAttachmentType.FloorPlan,\n attachmentsBSubject: this.unitFloorPlanBSubject,\n readOnly: this.readOnly,\n unitId: this.unitId,\n });\n }\n\n private setAttachment(upload: Upload, attachmentType: UnitAttachmentType) {\n const attachmentToEntity: UpdateTypedAttachmentToEntityModel = {\n externalUrl: '',\n unitId: this.unitId,\n propertyId: 0,\n portfolioId: 0,\n turnoverIds: [],\n applianceId: 0,\n bidId: 0,\n ticketId: 0,\n attachmentType,\n fileUploadId: upload?.id,\n title: upload?.originalFileName,\n description: '',\n };\n this.store.dispatch(setUnitAttachment({ attachmentToEntity }));\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n [UnitDetailsPicturesSectionComponentForm.PHOTO]: [null, [Validators.required]],\n [UnitDetailsPicturesSectionComponentForm.FLOOR_PLAN]: [null, [Validators.required]],\n });\n }\n\n private prepareUnitAttachments(unitAttachments: RestGenericTypedAttachment[]) {\n this.unitPhotos = [];\n this.unitFloorPlan = [];\n\n unitAttachments?.forEach(item => {\n switch (item.targetAttachmentType as UnitAttachmentType) {\n case UnitAttachmentType.Photo:\n {\n this.unitPhotos.push(item);\n }\n break;\n case UnitAttachmentType.FloorPlan:\n {\n this.unitFloorPlan.push(item);\n }\n break;\n }\n });\n\n this.unitPhotosBSubject.next(this.unitPhotos);\n this.unitFloorPlanBSubject.next(this.unitFloorPlan);\n\n this.displayedUnitPhotos = this.unitPhotos.slice(0, 2);\n this.displayedUnitFloorPlan = this.unitFloorPlan.slice(0, 2);\n }\n}\n","
\n
\n
Photos ({{ unitPhotos?.length || 0 }})
\n
\n \n
\n
\n
displayedUnitPhotos?.length\">\n
\n \n
\n
\n \n
\n
\n
\n
Floor plan ({{ unitFloorPlan?.length || 0 }})
\n
\n \n
\n
\n
displayedUnitFloorPlan?.length\">\n
\n \n
\n
\n \n
\n
\n
\n\n\n
\n \n Add photos\n \n
\n
\n\n\n
\n \n Add floor plan\n \n
\n
\n\n\n \n\n\n\n \n\n","
\n
\n
\n
\n
\n
Property manager:
\n
\n {{ propertyManager }}\n {{ propertyManager }}\n
\n
\n
\n
Unit type:
\n
{{ unit?.unitType || '' }}
\n
\n
\n
Finish:
\n \n \n \n \n
{{ unit?.finish | enumerationValue: finishList }}
\n
\n
\n
\n
\n
\n
Lease expires:
\n
{{ unit?.dateLeaseExpires | date: 'MM/dd/yy' }}
\n
\n
\n
Bd/Br:
\n
{{ unit?.numberOfBedrooms || '-' }} / {{ unit?.numberOfBathrooms || '-' }}
\n
\n
\n
Sf:
\n
{{ unit?.squareFootage || '' }}
\n
\n
\n
\n
\n
\n
Description
\n \n \n \n \n
{{ unit?.description || '' }}
\n
\n
\n
\n
Address:
\n
{{ propertyAddress || '' }}
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { selectUnit } from '@dashboards/selectors/dashboards.selectors';\nimport { UnitDetailsAbstract } from '@portfolio/components/unit-details/abstract/unit-details.abstract';\nimport { getEnumerationRadioListFunction } from '@shared/functions/get-enumeration-radio-list.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\nimport { selectFinishTypesEnumeration } from '@shared/selectors/enumeration.selectors';\n\n@UntilDestroy()\n@Component({\n selector: 'app-unit-details-property-section',\n templateUrl: './unit-details-property-section.component.html',\n styleUrls: ['./unit-details-property-section.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UnitDetailsPropertySectionComponent extends UnitDetailsAbstract implements OnInit, OnDestroy {\n propertyManagerEmail = '';\n finishList: IRadioButtonOption[] = [];\n\n @Input() descriptionGroup: UntypedFormGroup;\n\n get description(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.DESCRIPTION) as UntypedFormControl;\n }\n\n get finish(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.FINISH) as UntypedFormControl;\n }\n\n constructor(protected cdr: ChangeDetectorRef, private store: Store<{}>) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.store\n .select(selectUnit)\n .pipe(\n untilDestroyed(this),\n filter((unit: RestUnitModel) => !!unit),\n tap((unit: RestUnitModel) => {\n this.unit = unit;\n this.propertyAddress = this.getPropertyAddress(this.unit.property?.addresses?.physicalAddress);\n this.propertyManager = this.getPropertyManager(this.unit?.property?.propertyManager);\n this.propertyManagerEmail = this.unit?.property?.propertyManager?.email;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectFinishTypesEnumeration)\n .pipe(\n untilDestroyed(this),\n tap(finishEnumeration => {\n this.finishList = getEnumerationRadioListFunction(finishEnumeration, '', false);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {}\n}\n","
\n
\n
\n \n
\n \n \n \n \n
\n
\n \n
\n
Market Rent:
\n
\n
{{ unit?.marketRent | currency: 'USD':'symbol':'1.0-0' }}
\n \n
\n
Adv. Rent:
\n
\n
{{ unit?.advertisedRent | currency: 'USD':'symbol':'1.0-0' }}
\n \n
\n
Old Rent:
\n
\n
{{ unit?.oldRent | currency: 'USD':'symbol':'1.0-0' }}
\n \n
\n
Rent:
\n
\n
{{ unit?.rent | currency: 'USD':'symbol':'1.0-0' }}
\n \n
\n
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport {\n selectRenewalStrategyForUnit,\n selectRenewalStrategyForUnitLoading,\n selectUnit,\n} from '@dashboards/selectors/dashboards.selectors';\nimport { UnitDetailsAbstract } from '@portfolio/components/unit-details/abstract/unit-details.abstract';\nimport { getEnumerationRadioListFunction } from '@shared/functions/get-enumeration-radio-list.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestUnitRenewalTargetModel } from '@shared/interfaces/renevals.interface';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\nimport { selectFinishTypesEnumeration } from '@shared/selectors/enumeration.selectors';\n\n@UntilDestroy()\n@Component({\n selector: 'app-unit-details-description-section',\n templateUrl: './unit-details-description-section.component.html',\n styleUrls: ['./unit-details-description-section.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UnitDetailsDescriptionSectionComponent extends UnitDetailsAbstract implements OnInit, OnDestroy {\n restUnitTypeRentTargetModel: RestUnitRenewalTargetModel;\n renewalStrategyLoading$: Observable;\n\n @Input() descriptionGroup: UntypedFormGroup;\n\n constructor(protected cdr: ChangeDetectorRef, private store: Store<{}>) {\n super(cdr);\n }\n\n get rent(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.RENT) as UntypedFormControl;\n }\n\n get marketRent(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.MARKETRENT) as UntypedFormControl;\n }\n\n get advertisedRent(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.ADVERTISEDRENT) as UntypedFormControl;\n }\n\n get oldRent(): UntypedFormControl {\n return this.descriptionGroup?.get(this.UnitDetailsComponentForm.OLDRENT) as UntypedFormControl;\n }\n\n ngOnInit(): void {\n this.renewalStrategyLoading$ = this.store.select(selectRenewalStrategyForUnitLoading);\n\n this.store\n .select(selectRenewalStrategyForUnit)\n .pipe(\n untilDestroyed(this),\n filter((restUnitTypeRentTargetModel: RestUnitRenewalTargetModel) => !!restUnitTypeRentTargetModel),\n tap((restUnitTypeRentTargetModel: RestUnitRenewalTargetModel) => {\n this.restUnitTypeRentTargetModel = restUnitTypeRentTargetModel;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectUnit)\n .pipe(\n untilDestroyed(this),\n filter((unit: RestUnitModel) => !!unit),\n tap((unit: RestUnitModel) => {\n this.unit = unit;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {}\n}\n","
0; else noInspections\">\n
\n \n \n Turbo\n \n \n \n \n \n Type\n \n {{ inspection.inspectionTemplate?.name ?? inspection.inspectionType }}\n \n \n \n Status\n \n \n {{ inspection.status }}\n \n \n \n \n Spaces\n {{ inspection.areasLabel }}\n \n \n Due\n \n {{ inspection.entityDetails.dueDate | date: 'MM/dd/yy' }}\n \n \n \n Completed\n \n {{ inspection.entityDetails.completedAt | date: 'MM/dd/yy' }}\n \n \n \n Assignee\n {{ inspection.entityDetails.assigneeUser?.displayName }}\n \n \n Actions\n \n \n more_vert\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n\n No inspections. Go have a look! 🔎\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { MatSort, SortDirection } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { combineLatest } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { selectUnit } from '@dashboards/selectors/dashboards.selectors';\nimport { InspectionsBaseComponent } from '@main-application/inspections/components/inspections-base.component';\nimport { InspectionModel } from '@main-application/inspections/models/inspection.model';\nimport { InspectionService } from '@main-application/inspections/services/inspection.service';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { loadAllUserTemplates } from '@template/store/template.actions';\nimport { selectTemplates } from '@template/store/template.selectors';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-unit-details-inspections',\n templateUrl: './unit-details-inspections.component.html',\n styleUrls: [\n '../../../../../inspections/components/inspections-base.component.scss',\n './unit-details-inspections.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UnitDetailsInspectionsComponent extends InspectionsBaseComponent implements OnInit {\n sortDirection: SortDirection = 'desc';\n sortActive = 'completedAt';\n inspectionsSource: MatTableDataSource;\n unit: RestUnitModel;\n templateList: RestTemplateModel[];\n\n @Input()\n readonly displayedColumns = [\n 'inspectionType',\n 'turboMode',\n 'status',\n 'rooms',\n 'dueDate',\n 'completedAt',\n 'assignee',\n 'actions',\n ];\n\n @ViewChild(MatSort, { static: false }) set content(sort: MatSort) {\n if (sort) {\n if (this.inspectionsSource) {\n this.inspectionsSource.sort = sort;\n this.cdr.detectChanges();\n }\n }\n }\n\n constructor(\n cdr: ChangeDetectorRef,\n router: Router,\n snackbarService: SnackbarService,\n inspectionService: InspectionService,\n modalService: ModalsService,\n private store: Store<{}>\n ) {\n super(cdr, inspectionService, snackbarService, modalService, router);\n }\n\n ngOnInit(): void {\n this.store.dispatch(loadAllUserTemplates());\n\n combineLatest([this.store.select(selectUnit), this.store.select(selectTemplates)])\n .pipe(\n untilDestroyed(this),\n filter(([unit, templates]) => !!unit && !!templates),\n tap(([unit, templateList]) => {\n this.unit = unit;\n this.templateList = templateList;\n this.initDataSource();\n })\n )\n .subscribe();\n }\n\n private initDataSource() {\n this.inspectionService.getBeUnitId(this.unit.id).subscribe(inspections => {\n this.inspectionsSource = new MatTableDataSource(\n inspections.map(\n e =>\n new InspectionModel(\n e,\n this.templateList.find(t => t.id == e.inspectionTemplateId)\n )\n )\n );\n this.inspectionsSource.sortingDataAccessor = this.tableSortPredicate.bind(this);\n this.cdr.detectChanges();\n });\n }\n\n deleteInspection(inspectionModel: InspectionModel) {\n super.delete(inspectionModel).subscribe(() => {\n this.snackbarService.success('Inspection deleted');\n this.initDataSource();\n });\n }\n}\n","
\n \n
\n \n
\n
\n
\n
\n
unit details
\n
\n \n \n Do not auto create turns for this unit\n \n
\n
\n
\n
Inspections
\n \n
\n
\n \n
\n
\n
Property information
\n
\n \n
\n
\n
\n
Rents
\n
\n \n
\n
\n
\n
\n \n
\n\n\n
\n
\n \n \n \n
\n \n Back\n
\n
\n

{{ unit?.propertyName || '' }} - {{ unit?.name || '' }}

\n\n {{ moveOutType | enumerationValue: moveOutTypeListConst:true }}\n
\n \n \n
\n Delete unit\n \n
\n \n
\n
\n
\n\n\n \n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { debounceTime, filter, finalize, take, tap } from 'rxjs/operators';\n\nimport { TurnoversService } from '@app/services/turnovers.service';\nimport { UnitNonPmsService } from '@app/services/unit-non-pms.service';\nimport { UnitsService } from '@app/services/units.service';\nimport {\n clearUnit,\n getRenewalStrategyForUnit,\n loadUnit,\n setCustomBreadcrumbs,\n updateUnitDoNotAutoCreateTurns,\n} from '@dashboards/actions/dashboard.actions';\nimport {\n selectUnit,\n selectUnitDoNotAutoCreateTurnsLoading,\n selectUnitLoading,\n} from '@dashboards/selectors/dashboards.selectors';\nimport { deleteTurnover } from '@main-application/turnovers/actions/turnovers.actions';\nimport { selectTurnoverDeleteStatus } from '@main-application/turnovers/selectors/turnovers.selectors';\nimport { UnitDetailsAbstract } from '@portfolio/components/unit-details/abstract/unit-details.abstract';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { MoveOutTypeListConst } from '@shared/constants/move-out-type-list.const';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { RouteData } from '@shared/enums/route-data';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { getEnumerationRadioListFunction } from '@shared/functions/get-enumeration-radio-list.function';\nimport { BreadcrumbItem } from '@shared/interfaces/breadcrumb-item';\nimport { EnumerationConfig } from '@shared/interfaces/enumeration-config';\nimport { RestUnitModel, UnitDetailsForm } from '@shared/interfaces/unit.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { selectLoadEnumerations } from '@shared/selectors/enumeration.selectors';\nimport { selectPreviousRoute } from '@shared/selectors/route-state.selector';\nimport { selectUserData, selectUserPermissionLevel } from '@shared/selectors/user.selectors';\nimport { DigitsValidator } from '@shared/validators/digits.validator';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-unit-details',\n templateUrl: './unit-details.component.html',\n styleUrls: ['./unit-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UnitDetailsComponent extends UnitDetailsAbstract implements OnInit, OnDestroy {\n private sourceView: RoutePath;\n previousRoute?: string;\n doNotAutoCreateTurns: boolean;\n isUnitDoNotAutoCreateTurnsLoading$: Observable;\n nameControl = this.formBuilder.control('', [Validators.required]);\n deleteInProgress$ = new BehaviorSubject(false);\n protected readonly moveOutTypeListConst = MoveOutTypeListConst;\n moveOutType = null;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private formBuilder: FormBuilder,\n private store: Store<{}>,\n private unitNonPmsService: UnitNonPmsService,\n private unitService: UnitsService,\n private modalsService: ModalsService,\n private snackbarService: SnackbarService,\n private turnoverService: TurnoversService\n ) {\n super(cdr);\n\n this.store\n .select(selectPreviousRoute)\n .pipe(untilDestroyed(this))\n .subscribe(prevRoute => (this.previousRoute = prevRoute));\n }\n\n ngOnInit(): void {\n this.sourceView = this.activatedRoute?.snapshot?.queryParams[RouteData.SOURCE_VIEW] as RoutePath;\n this.unitId = parseInt(this.activatedRoute.snapshot.paramMap.get('unitId'), 10);\n this.portfolioId = parseInt(this.activatedRoute.snapshot.paramMap.get('portfolioId'), 10);\n this.propertyId = parseInt(this.activatedRoute.snapshot.paramMap.get('propertyId'), 10);\n this.turnoverId = parseInt(this.activatedRoute.snapshot.paramMap.get('turnoverId'), 10);\n this.applianceId = parseInt(this.activatedRoute.snapshot.paramMap.get('applianceId'), 10);\n this.bulkBidId = this.activatedRoute?.snapshot?.queryParams[RouteData.BULK_SECTION_ID] as number;\n this.isLoading$ = this.store.select(selectUnitLoading);\n this.isUnitDoNotAutoCreateTurnsLoading$ = this.store.select(selectUnitDoNotAutoCreateTurnsLoading);\n\n this.nameControl.valueChanges\n .pipe(\n debounceTime(500),\n filter(name => !!name)\n )\n .subscribe(name =>\n this.unitNonPmsService\n .update({\n id: this.unit.id,\n propertyId: this.unit.propertyId,\n name: name,\n })\n .subscribe(() => {\n this.snackbarService.success(`Unit name changed to \"${name}\"`);\n this.unit.name = name;\n this.cdr.detectChanges();\n })\n );\n\n this.store.dispatch(loadUnit({ unitId: this.unitId }));\n this.store.dispatch(getRenewalStrategyForUnit({ unitId: this.unitId }));\n this.store\n .select(selectUserPermissionLevel)\n .pipe(\n untilDestroyed(this),\n filter((permissionList: PermissionLevelType[]) => !!permissionList),\n tap((permissionList: PermissionLevelType[]) => {\n this.readOnly = !checkPermissionLevel(permissionList, PermissionLevelType.PropertyManager_UnitList_Edit);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectLoadEnumerations)\n .pipe(\n untilDestroyed(this),\n filter(value => !!value),\n tap((enumerationConfig: EnumerationConfig) => {\n this.applianceTypeList = getEnumerationRadioListFunction(enumerationConfig.applianceTypes, '');\n this.colorTypeList = getEnumerationRadioListFunction(enumerationConfig.applianceColors, '');\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectTurnoverDeleteStatus)\n .pipe(\n untilDestroyed(this),\n filter((turnoverDeleteStatus: UpdateStatus) => turnoverDeleteStatus === UpdateStatus.DELETED)\n )\n .subscribe(turnoverDeleteStatus => {\n if (turnoverDeleteStatus === UpdateStatus.DELETED) {\n this.snackbarService.success(`Turn ${this.nameControl.value} has been deleted`);\n this.store.dispatch(loadUnit({ unitId: this.unitId }));\n }\n });\n\n this.store\n .select(selectUnit)\n .pipe(\n untilDestroyed(this),\n filter((unit: RestUnitModel) => !!unit),\n tap((unit: RestUnitModel) => {\n this.unit = { ...unit };\n this.nameControl.setValue(unit.name, { emitEvent: false });\n this.doNotAutoCreateTurns = this.unit.doNotAutoCreateTurns;\n this.updateBreadcrumb();\n this.initForm();\n this.initTurnover();\n this.propertyAddress = this.getPropertyAddress(this.unit.property?.addresses?.physicalAddress);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n this.store.dispatch(clearUnit());\n }\n initTurnover() {\n if (this.unit.turnoverId) {\n this.turnoverService.getTurnover(this.unit.turnoverId).subscribe(turnover => {\n this.moveOutType = turnover.moveOutType;\n this.cdr.detectChanges();\n });\n }\n }\n\n goBack(evt: Event) {\n evt?.preventDefault();\n this.router.navigateByUrl(this.previousRoute).then();\n }\n\n changeDoNotAutoCreateTurns(value: boolean) {\n this.doNotAutoCreateTurns = value;\n this.store.dispatch(\n updateUnitDoNotAutoCreateTurns({ unitId: this.unit.id, doNotAutoCreateTurns: this.doNotAutoCreateTurns })\n );\n\n if (this.unit?.turnoverId && value) {\n this.modalsService\n .openConfirmationModal({\n title: `${this.nameControl.value} is an active turn 😱`,\n content: 'Are you 💯 you want to delete it?',\n confirmColor: 'warn',\n confirmLabel: 'Delete',\n })\n .afterClosed()\n .pipe(\n take(1),\n tap(result => {\n if (result === DialogResult.Success) {\n this.store.dispatch(deleteTurnover({ turnoverId: this.unit.turnoverId }));\n }\n })\n )\n .subscribe();\n }\n }\n\n // NOTE: commented temporary, do not delete\n // backToParent(): void {\n // if (this.sourceView) {\n // switch (this.sourceView) {\n // case RoutePath.JOBS_AVAILABLE_AND_BIDS_SENT:\n // {\n // if (this.userData.companyId) {\n // this.router.navigate(['.'], { relativeTo: this.activatedRoute.parent }).then();\n // } else {\n // this.goToHome();\n // }\n // }\n // break;\n\n // case RoutePath.MOVE_OUT_CONFIRMATION:\n // case RoutePath.BID:\n // case RoutePath.RENO:\n // case RoutePath.APPROVAL:\n // case RoutePath.MARKETING:\n // case RoutePath.LEASE_UP:\n // case RoutePath.MOVE_IN:\n // case RoutePath.ARCHIVE:\n // case RoutePath.HISTORY:\n // {\n // if (this.turnoverId) {\n // this.router\n // .navigate([this.sourceView, this.turnoverId], {\n // relativeTo: this.activatedRoute.parent,\n // })\n // .then();\n // } else {\n // this.goToHome();\n // }\n // }\n // break;\n // case RoutePath.APPLIANCE_DETAIL:\n // {\n // if (this.turnoverId && this.applianceId) {\n // this.router\n // .navigate([RoutePath.BID, this.turnoverId, this.sourceView, this.applianceId], {\n // relativeTo: this.activatedRoute.parent,\n // })\n // .then();\n // } else {\n // this.goToHome();\n // }\n // }\n // break;\n\n // case RoutePath.DELINQUENCY:\n // {\n // this.router.navigate([AppRoutes.REPORTS_DELINQUENCIES]).then();\n // }\n // break;\n\n // case RoutePath.UNIT_LIST:\n // {\n // this.router.navigate([`AppRoutes.REPORTS_RENT_ROLL]).then();\n // }\n // break;\n\n // case RoutePath.RENEWALS:\n // {\n // this.router.navigate([`AppRoutes.REPORTS_RENEWALS]).then();\n // }\n // break;\n // case RoutePath.RENEWALS_LIST:\n // {\n // this.router.navigate([AppRoutes.REPORTS_RENEWALS]).then();\n // }\n // break;\n\n // case RoutePath.DELINQUENCY_LIST:\n // {\n // this.router.navigate([AppRoutes.DELINQUENCIES]).then();\n // }\n // break;\n\n // case RoutePath.ACTIVE_TURNOVERS:\n // {\n // this.router.navigate([AppRoutes.TURNOVERS_ACTIVE]).then();\n // }\n // break;\n\n // case RoutePath.ARCHIVED:\n // {\n // this.router.navigate([AppRoutes.TURNOVERS_ARCHIVED]).then();\n // }\n // break;\n\n // case RoutePath.PROPERTY_DASHBOARD:\n // {\n // this.router.navigate([AppRoutes.PROPERTY_MANAGER_HOME_DASHBOARD]).then();\n // }\n // break;\n\n // case RoutePath.TICKETS:\n // {\n // this.router.navigate([AppRoutes.TICKETS]).then();\n // }\n // break;\n\n // case RoutePath.DASHBOARD_TICKETS:\n // {\n // this.router.navigate([AppRoutes.DASHBOARD_TICKETS]).then();\n // }\n // break;\n\n // case RoutePath.MOVE_OUT_PROPERTY:\n // {\n // this.router.navigate([AppRoutes.MOVE_OUT_PROPERTY_MANAGER]).then();\n // }\n // break;\n\n // case RoutePath.MOVE_OUT_PORTFOLIO:\n // {\n // this.router.navigate([AppRoutes.MOVE_OUT_ASSET_MANAGER]).then();\n // }\n // break;\n\n // case RoutePath.BULK_BIDS:\n // {\n // this.router.navigate([AppRoutes.TURNOVERS_BULK_BIDS]).then();\n // }\n // break;\n // case RoutePath.BULK_BIDS_EDIT:\n // {\n // this.router.navigate([`${AppRoutes.TURNOVERS_BULK_BIDS}/${RoutePath.EDIT}/${this.bulkBidId}`]).then();\n // }\n // break;\n // default: {\n // this.goToHome();\n // }\n // }\n // } else {\n // if (this.portfolioId && this.propertyId) {\n // this.router.navigate([AppRoutes.SETTINGS_PORTFOLIO, this.portfolioId, this.propertyId]).then();\n // } else {\n // this.goToHome();\n // }\n // }\n // }\n\n goToHome() {\n this.router.navigate([AppRoutes.HOME]).then();\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n [this.UnitDetailsComponentForm.RENT]: [this.unit?.rent, [DigitsValidator(true), Validators.maxLength(5)]],\n [this.UnitDetailsComponentForm.OLDRENT]: [this.unit?.oldRent, [DigitsValidator(true), Validators.maxLength(5)]],\n [this.UnitDetailsComponentForm.MARKETRENT]: [\n this.unit?.marketRent,\n [DigitsValidator(true), Validators.maxLength(5)],\n ],\n [this.UnitDetailsComponentForm.ADVERTISEDRENT]: [\n this.unit?.advertisedRent,\n [DigitsValidator(true), Validators.maxLength(5)],\n ],\n [this.UnitDetailsComponentForm.FINISH]: [this.unit?.finish],\n [this.UnitDetailsComponentForm.DESCRIPTION]: [this.unit?.description || null, [Validators.maxLength(1024)]],\n });\n\n this.form.valueChanges\n .pipe(\n debounceTime(500),\n filter(() => !this.form.invalid)\n )\n .subscribe((value: UnitDetailsForm) => {\n const formValue: UnitDetailsForm = this.form.value;\n\n const unit: RestUnitModel = {\n ...this.unit,\n ...formValue,\n name: this.nameControl.value,\n doNotAutoCreateTurns: this.doNotAutoCreateTurns,\n };\n this.unitService.update(unit).subscribe();\n });\n }\n\n private updateBreadcrumb() {\n let breadcrumbList: BreadcrumbItem[] = [];\n\n if (this.unit?.property) {\n breadcrumbList = [\n ...breadcrumbList,\n {\n icon: EIcon.BUILDING,\n label: this.unit?.property.name,\n },\n ];\n }\n\n breadcrumbList = [\n ...breadcrumbList,\n {\n icon: EIcon.BUILDING,\n label: this.unit?.name,\n },\n ];\n\n this.store.dispatch(setCustomBreadcrumbs({ breadcrumbList }));\n }\n\n deleteUnit() {\n this.modalsService\n .openConfirmationModal({\n title: 'Delete unit?',\n content:\n \"This will permanently delete all of this unit's data including its turn history. Flex if you are sure. 💪\",\n confirmColor: 'warn',\n confirmLabel: 'Delete',\n })\n .afterClosed()\n .pipe(\n take(1),\n filter(result => result === DialogResult.Success)\n )\n .subscribe(() => {\n this.deleteInProgress$.next(true);\n this.unitNonPmsService\n .delete(this.unitId)\n .pipe(finalize(() => this.deleteInProgress$.next(false)))\n .subscribe(() => {\n this.snackbarService.success(`${this.unit.name} deleted`);\n this.goBack(null);\n });\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { of } from 'rxjs';\nimport { catchError, exhaustMap, map, mergeMap, tap } from 'rxjs/operators';\n\nimport { FileUploadsService } from '@app/services/file-uploads.service';\nimport { PropertiesService } from '@app/services/properties.service';\nimport { RestapiService } from '@app/services/restapi.service';\nimport { SurveysService } from '@app/services/surveys.service';\nimport { UnitsService } from '@app/services/units.service';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport {\n createNewSpaceTemplate,\n deleteSpaceTemplate,\n loadAllCategories,\n loadAllCategoriesFailed,\n loadAllCategoriesSuccess,\n loadAllSpaceTemplates,\n loadAllSpaceTemplatesFailed,\n loadAllSpaceTemplatesSuccess,\n updateSpaceTemplateDetails,\n updateSpaceTemplateDetailsFailed,\n} from './space-template.actions';\nimport {\n RestSharedInspectionSpaceCategory,\n RestSpaceTemplateModel,\n} from '../models/rest-space-template-model.interface';\n\n@Injectable()\nexport class SpaceTemplateEffects {\n loadAllTemplate$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadAllSpaceTemplates),\n exhaustMap(() =>\n this.restApiService.getData(`inspections/sharedSpaces/list`).pipe(\n map(result => loadAllSpaceTemplatesSuccess({ listItems: result || [] })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingSpaceTemplatesList);\n return of(loadAllSpaceTemplatesFailed());\n })\n )\n )\n )\n );\n\n loadAllCategories$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadAllCategories),\n exhaustMap(() =>\n this.restApiService\n .getData(`inspections/sharedSpaces/categories/list`)\n .pipe(\n map(result => loadAllCategoriesSuccess({ categoriesList: result || [] })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingCategories);\n return of(loadAllCategoriesFailed());\n })\n )\n )\n )\n );\n\n updateSpaceTemplateDetails$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateSpaceTemplateDetails),\n mergeMap(action =>\n this.restApiService\n .post(\n `inspections/sharedSpaces/${action.entityDetails.id}/edit`,\n action.entityDetails\n )\n .pipe(\n mergeMap(() => [loadAllSpaceTemplates()]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UpadtingSpaceTemplate);\n return of(updateSpaceTemplateDetailsFailed());\n })\n )\n )\n )\n );\n\n createNewSpaceTemplate$ = createEffect(() =>\n this.actions$.pipe(\n ofType(createNewSpaceTemplate),\n mergeMap(action =>\n this.restApiService.create(`inspections/sharedSpaces/add`, action.entityDetails).pipe(\n tap(id =>\n this.router\n .navigate([AppRoutes.SETTINGS_SPACE_TEMPLATE, id], {\n queryParamsHandling: 'preserve',\n })\n .then()\n ),\n mergeMap(() => [loadAllSpaceTemplates()]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.WhileCreatingNewSpaceTemplate);\n return of(updateSpaceTemplateDetailsFailed());\n })\n )\n )\n )\n );\n\n deleteSpaceTemplate$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteSpaceTemplate),\n mergeMap(action =>\n this.restApiService.post(`inspections/sharedSpaces/${action.id}/delete`).pipe(\n map(() => loadAllSpaceTemplates()),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.RemovingSpaceTemplate);\n return of(updateSpaceTemplateDetailsFailed());\n })\n )\n )\n )\n );\n\n constructor(\n private actions$: Actions,\n private restApiService: RestapiService,\n private surveyService: SurveysService,\n private snackbarService: SnackbarService,\n private propertiesService: PropertiesService,\n private store: Store<{}>,\n private router: Router,\n private unitsService: UnitsService,\n private fileUploadsService: FileUploadsService\n ) {}\n}\n","import { NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\n\nimport { SurveysEffects } from '@main-application/survey-creator/effects/surveys.effects';\nimport * as fromSurveyReducer from '@main-application/survey-creator/reducers/surveys.reducer';\n\nimport { SpaceTemplateEffects } from './space-template.effects';\nimport * as fromSpaceTemplateReducer from './space-template.reducer';\n@NgModule({\n declarations: [],\n imports: [\n EffectsModule.forFeature([SpaceTemplateEffects, SurveysEffects]),\n StoreModule.forFeature(fromSpaceTemplateReducer.spaceTemplateFeatureKey, fromSpaceTemplateReducer.reducer),\n StoreModule.forFeature(fromSurveyReducer.surveysFeatureKey, fromSurveyReducer.reducer),\n ],\n})\nexport class SpaceTemplateStoreModule {}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromTemplate from './template.reducer';\n\nexport const selectTemplateState = createFeatureSelector(fromTemplate.templateFeatureKey);\n\nexport const selectTemplates = createSelector(selectTemplateState, templateState => templateState.listItems);\n\nexport const selectTemplatesLoading = createSelector(\n selectTemplateState,\n templateState => templateState.listItemsLoading\n);\n\nexport const selectTemplateUpdate = createSelector(\n selectTemplateState,\n templateState => templateState.entityUpdateOngoing\n);\n\nexport const selectTemplateDeleteOngoing = createSelector(\n selectTemplateState,\n templateState => templateState.deleteEntityOngoing\n);\n\nexport const selectTemplateAreaUpdateStatus = createSelector(\n selectTemplateState,\n templateState => templateState.templateAreaUpdateStatus\n);\n\nexport const selectTemplateAreaUpdateOngoing = createSelector(\n selectTemplateState,\n templateState => templateState.templateAreaUpdateOngoing\n);\n\nexport const selectTemplateAreaDeleteOngoing = createSelector(\n selectTemplateState,\n templateState => templateState.templateAreaRemoveOngoing\n);\n\nexport const selectUnitTypes = createSelector(selectTemplateState, templateState => templateState.unitTypes);\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { DateDropdownModule } from '@ui-components/components/date-dropdown/date-dropdown.module';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\n\nimport { TurnoverDateRangeComponent } from './turnover-date-range.component';\n\n@NgModule({\n declarations: [TurnoverDateRangeComponent],\n imports: [CommonModule, InputErrorModule, DateDropdownModule, ReactiveFormsModule],\n exports: [TurnoverDateRangeComponent],\n})\nexport class TurnoverDateRangeModule {}\n","export const allFileExtensions = [\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/svg+xml',\n 'image/tiff',\n 'video/x-msvideo',\n 'video/mp4',\n 'video/mpeg',\n 'video/ogg',\n 'video/webm',\n 'video/3gpp',\n 'video/3gpp2',\n 'video/x-matroska',\n 'application/pdf',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'text/csv',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/html',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'text/plain',\n];\n\nexport const imageVideoFileExtensions = [\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/svg+xml',\n 'image/tiff',\n 'video/x-msvideo',\n 'video/mp4',\n 'video/mpeg',\n 'video/ogg',\n 'video/mov',\n 'video/webm',\n 'video/3gpp',\n 'video/3gpp2',\n 'video/x-matroska',\n];\n","import { MoveOutType } from '@shared/enums/move-out-type.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const MoveOutTypeListConst: IRadioButtonOption[] = [\n /**\n * new enum values\n */\n {\n value: MoveOutType.Evict,\n label: 'evict',\n },\n {\n value: MoveOutType.Notice_Rented,\n label: 'notice-rented',\n },\n\n {\n value: MoveOutType.Notice_Unrented,\n label: 'notice-unrented',\n },\n\n {\n value: MoveOutType.Vacant_Rented,\n label: 'vacant-rented',\n },\n\n {\n value: MoveOutType.Vacant_Unrented,\n label: 'vacant-unrented',\n },\n];\n","import { BoardsCreateComponent } from '@main-application/boards/boards-create/boards-create.component';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { MenuSection } from '@shared/interfaces/menu-config.interface';\nimport { NewTurnoverModalComponent } from '@ui-components/modals/new-turnover-modal/new-turnover-modal.component';\n\nexport const MANAGEMENT_EMAIL_DOMAINS = ['gopropup.com', 'onmicrosoft.com'];\n\n/**\n * HOME SECTION\n * */\nexport const homeSection: MenuSection = {\n label: 'Home',\n urlPath: AppRoutes.HOME,\n icon: EIcon.HOME,\n sectionItem: [],\n};\n\n/**\n * ROLES SECTION\n * */\nexport const rolesSection: MenuSection = {\n label: 'Home',\n urlPath: AppRoutes.ROLES,\n icon: EIcon.HOME,\n sectionItem: [\n {\n label: 'Admin',\n urlPath: AppRoutes.ROLES_ADMIN_HOME,\n icon: EIcon.DASHBOARD,\n permissionLevel: PermissionLevelType.Administrator_Dashboard_Read,\n },\n {\n label: 'Asset',\n urlPath: AppRoutes.ROLES_ASSET_HOME,\n icon: EIcon.DASHBOARD2,\n permissionLevel: PermissionLevelType.AssetManager_PropertyDashboard_Read,\n },\n {\n label: 'Property',\n urlPath: AppRoutes.ROLES_PROPERTY_HOME,\n icon: EIcon.DASHBOARD4,\n permissionLevel: PermissionLevelType.PropertyManager_Dashboard_Read,\n },\n {\n label: 'Vendor',\n urlPath: AppRoutes.ROLES_VENDOR_HOME,\n permissionLevel: PermissionLevelType.Turnovers_Kanban_Read,\n forExternalOnly: true,\n icon: EIcon.TOOLS,\n },\n ],\n};\n\n/**\n * TURNOVERS SECTION\n * */\nexport const turnoversSection: MenuSection = {\n label: 'Turns',\n urlPath: AppRoutes.TURNOVERS,\n icon: EIcon.TIME_SCHEDULE,\n passQueryParams: true,\n permissionLevel: [\n PermissionLevelType.AllPermissions,\n PermissionLevelType.PropertyManager_ActiveTurnovers_Edit,\n PermissionLevelType.PropertyManager_ActiveTurnovers_Read,\n PermissionLevelType.Turnovers_Archived_Read,\n ],\n sectionItem: [\n {\n label: 'Add turn',\n permissionLevelWarning: PermissionLevelType.PropertyManager_ActiveTurnovers_Edit,\n modalDialogComponent: NewTurnoverModalComponent,\n },\n ],\n};\n\nexport const boardsSection: MenuSection = {\n label: 'Boards',\n urlPath: AppRoutes.BOARDS,\n icon: EIcon.BOARD,\n passQueryParams: true,\n permissionLevel: [\n PermissionLevelType.AllPermissions,\n PermissionLevelType.Board_Use,\n PermissionLevelType.Board_Edit,\n PermissionLevelType.Board_View,\n ],\n sectionItem: [\n {\n label: 'Add board',\n permissionLevelWarning: PermissionLevelType.Board_Edit,\n modalDialogComponent: BoardsCreateComponent,\n },\n ],\n};\n\n/**\n * INSPECTIONS SECTION\n * */\nexport const InspectionsSection: MenuSection = {\n label: 'Inspect',\n urlPath: AppRoutes.INSPECTIONS,\n icon: EIcon.SEARCH,\n passQueryParams: true,\n sectionItem: [\n {\n label: 'Designer',\n urlPath: AppRoutes.SETTINGS_SURVEYS,\n permissionLevel: PermissionLevelType.AllPermissions,\n emailDomains: MANAGEMENT_EMAIL_DOMAINS,\n icon: EIcon.SETTINGS2,\n },\n {\n label: 'Templates',\n urlPath: AppRoutes.SETTINGS_TEMPLATE,\n permissionLevel: PermissionLevelType.InspectionTemplates_List,\n emailDomains: MANAGEMENT_EMAIL_DOMAINS,\n icon: EIcon.SETTINGS2,\n },\n {\n label: 'Spaces',\n urlPath: AppRoutes.SETTINGS_SPACE_TEMPLATE,\n permissionLevel: PermissionLevelType.Inspections_SharedLibrary_List,\n emailDomains: MANAGEMENT_EMAIL_DOMAINS,\n icon: EIcon.SETTINGS2,\n },\n ],\n};\n\n/**\n * TICKET SECTION\n * */\nexport const MaintenanceSection: MenuSection = {\n label: 'Maint',\n urlPath: AppRoutes.Maintenance,\n icon: EIcon.Maintenance,\n //permissionLevel: PermissionLevelType.,//ToDo: use correct rights later\n sectionItem: [],\n};\n\n/**\n * REPORTS SECTION\n * */\nexport const reportsSection: MenuSection = {\n label: 'Reports',\n urlPath: AppRoutes.REPORTS,\n icon: EIcon.CHART_LINE,\n passQueryParams: true,\n sectionItem: [\n {\n label: 'Rent Roll',\n urlPath: AppRoutes.REPORTS_RENT_ROLL,\n permissionLevel: [\n PermissionLevelType.PropertyManager_UnitList_Read,\n PermissionLevelType.PropertyManager_Dashboard_Read,\n ],\n icon: EIcon.DASHBOARD,\n },\n {\n label: 'ROC',\n urlPath: AppRoutes.REPORTS_ROC,\n permissionLevel: [\n PermissionLevelType.PropertyManager_UnitList_Read,\n PermissionLevelType.PropertyManager_Dashboard_Read,\n ],\n icon: EIcon.DASHBOARD,\n },\n {\n label: 'Billing',\n urlPath: AppRoutes.REPORTS_BILLING,\n permissionLevel: [PermissionLevelType.AllPermissions],\n emailDomains: MANAGEMENT_EMAIL_DOMAINS,\n icon: EIcon.DASHBOARD,\n },\n // {\n // label: 'Unit Mix',\n // urlPath: AppRoutes.REPORTS_UNIT_MIX,\n // permissionLevel: [\n // PermissionLevelType.PropertyManager_UnitMix_Read,\n // PermissionLevelType.PropertyManager_Dashboard_Read,\n // ],\n // icon: EIcon.DASHBOARD2,\n // },\n // {\n // label: 'Delinquencies',\n // urlPath: AppRoutes.REPORTS_DELINQUENCIES,\n // permissionLevel: [\n // PermissionLevelType.PropertyManager_Delinquencies_Read,\n // PermissionLevelType.PropertyManager_Dashboard_Read,\n // ],\n // icon: EIcon.THUNDER_CIRCLE,\n // },\n // {\n // label: 'Renewals',\n // urlPath: AppRoutes.REPORTS_RENEWALS,\n // permissionLevel: [\n // PermissionLevelType.PropertyManager_Renewals_Read,\n // PermissionLevelType.PropertyManager_Dashboard_Read,\n // ],\n // icon: EIcon.REPEAT,\n // },\n ],\n};\n\n/**\n * TICKET SECTION\n * */\nexport const ticketsSection: MenuSection = {\n label: 'Tickets',\n urlPath: AppRoutes.TICKETS,\n icon: EIcon.TICKET,\n sectionItem: [],\n};\n\n/**\n * MANAGEMENT SECTION\n * */\nexport const managementSection: MenuSection = {\n label: 'Settings',\n urlPath: AppRoutes.SETTINGS,\n icon: EIcon.SETTINGS,\n sectionItem: [\n {\n label: 'Users',\n urlPath: AppRoutes.SETTINGS_USERS,\n permissionLevel: PermissionLevelType.Management_Users,\n icon: EIcon.USER_GROUP,\n },\n {\n label: 'Roles',\n urlPath: AppRoutes.SETTINGS_ROLES,\n permissionLevel: [PermissionLevelType.Management_Roles],\n icon: EIcon.USER,\n },\n // {\n // label: 'Renewals',\n // urlPath: AppRoutes.SETTINGS_RENEWAL_STRATEGY,\n // permissionLevel: PermissionLevelType.Management_UnitTargetRents_Read,\n // icon: EIcon.DOLLAR,\n // },\n // {\n // label: 'KPIs',\n // urlPath: AppRoutes.SETTINGS_KPI,\n // permissionLevel: PermissionLevelType.Management_KPI_Read,\n // icon: EIcon.DASHBOARD,\n // },\n {\n label: 'Portfolios',\n urlPath: AppRoutes.SETTINGS_PORTFOLIO,\n permissionLevel: PermissionLevelType.Management_Portfolio_Read,\n icon: EIcon.PORTFOLIOS,\n },\n {\n label: 'Vendors',\n urlPath: AppRoutes.SETTINGS_VENDOR,\n permissionLevel: PermissionLevelType.Companies_Read,\n icon: EIcon.HALF_STAR,\n },\n {\n label: 'Turns',\n urlPath: AppRoutes.SETTINGS_TURNOVER_CONFIGURATION,\n permissionLevel: PermissionLevelType.Management_TurnoverConfiguration_Read,\n icon: EIcon.TIME_SCHEDULE,\n },\n {\n label: 'System',\n urlPath: AppRoutes.SETTINGS_SYSTEM,\n permissionLevel: PermissionLevelType.Chat_Hooks,\n icon: EIcon.SETTINGS2,\n },\n ],\n};\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { CustomTooltipComponent } from './custom-tooltip.component';\n\n@NgModule({\n declarations: [CustomTooltipComponent],\n imports: [CommonModule],\n exports: [CustomTooltipComponent],\n})\nexport class CustomTooltipModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { ContentEditableDirective } from '@shared/directives/content-editable.directive';\nimport { DropZoneDirective } from '@shared/directives/drop-zone.directive';\nimport { HavePermissionDirective } from '@shared/directives/have-permission.directive';\nimport { CustomTooltipModule } from '@ui-components/components/custom-tooltip/custom-tooltip.module';\n\nimport { CustomTooltipDirective } from './custom-tooltip.directive';\nimport { LastElementDirective } from './last-element.directive';\nimport { SortHeaderDirective } from './sort-header.directive';\n\nconst DIRECTIVES = [\n HavePermissionDirective,\n SortHeaderDirective,\n LastElementDirective,\n CustomTooltipDirective,\n ContentEditableDirective,\n DropZoneDirective,\n];\n\n@NgModule({\n imports: [CommonModule, CustomTooltipModule, ReactiveFormsModule],\n declarations: [...DIRECTIVES],\n exports: [...DIRECTIVES],\n})\nexport class DirectivesModule {}\n","import { Directive, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { selectUserPermissionLevel } from '@shared/selectors/user.selectors';\n\n@Directive({\n selector: '[appHavePermission]',\n})\n@UntilDestroy()\nexport class HavePermissionDirective implements OnInit, OnDestroy {\n permissionList: PermissionLevelType[] = [];\n permissionLevel: PermissionLevelType | PermissionLevelType[];\n\n constructor(\n private templateRef: TemplateRef,\n private viewContainer: ViewContainerRef,\n private store: Store<{}>\n ) {}\n\n @Input() set appHavePermission(permissionLevel: PermissionLevelType | PermissionLevelType[]) {\n this.permissionLevel = permissionLevel;\n this.checkPermission();\n }\n\n ngOnInit(): void {\n this.store\n .select(selectUserPermissionLevel)\n .pipe(\n untilDestroyed(this),\n filter((permissionList: PermissionLevelType[]) => !!permissionList),\n tap((permissionList: PermissionLevelType[]) => {\n this.permissionList = permissionList;\n this.checkPermission();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {}\n\n private checkPermission() {\n const hasPermission = checkPermissionLevel(this.permissionList, this.permissionLevel);\n this.viewContainer.clear();\n if (hasPermission) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { Directive, EventEmitter, Input, Output } from '@angular/core';\n\nimport { LastItemParam } from '@shared/interfaces/last-item-param';\n\n@Directive({\n selector: '[appLastElement]',\n})\nexport class LastElementDirective {\n @Output() lastElementLoaded = new EventEmitter();\n\n @Input() set isLastElement(lastItemParam: LastItemParam) {\n if (lastItemParam.value && lastItemParam.itemsCount) {\n this.lastElementLoaded.emit();\n }\n }\n\n constructor() {}\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, Output, Renderer2 } from '@angular/core';\nimport { SortDirection } from '@angular/material/sort';\n\nimport { SortItem } from '@shared/interfaces/sort-item';\n\n@Directive({\n selector: '[appSortHeader]',\n})\nexport class SortHeaderDirective {\n currentDirection: SortDirection = '';\n ariaDirection = 'none';\n\n @Input() fieldName = '';\n @Output() sortEvent: EventEmitter = new EventEmitter();\n\n @HostListener('click', ['$event']) onClick() {\n this.changeDirection();\n this.sortAction();\n }\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {\n this.renderer.addClass(this.elementRef.nativeElement, 'app-sort-header');\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-sort', this.ariaDirection);\n }\n\n private changeDirection() {\n switch (this.currentDirection) {\n case '':\n {\n this.currentDirection = 'asc';\n this.ariaDirection = 'ascending';\n }\n break;\n case 'asc':\n {\n this.currentDirection = 'desc';\n this.ariaDirection = 'descending';\n }\n break;\n case 'desc':\n {\n this.currentDirection = '';\n this.ariaDirection = 'none';\n }\n break;\n }\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-sort', this.ariaDirection);\n }\n\n private sortAction() {\n if (this.fieldName) {\n this.sortEvent.emit({\n field: this.fieldName,\n direction: this.currentDirection,\n });\n }\n }\n}\n","export enum BidStatusType {\n None,\n SentToContractors,\n SentToTurnover,\n Accepted,\n Rejected,\n}\n","export enum MoveOutType {\n /**\n * legacy values for backwards compatibility\n * to be removed in the future\n */\n None,\n PmNonRenewal,\n TenantNonRenewal,\n Eviction,\n Other,\n\n /**\n * new enum values\n */\n Evict,\n Notice_Rented,\n Notice_Unrented,\n Vacant_Rented,\n Vacant_Unrented,\n Down,\n\n //FE only type\n NonPms = 100,\n}\n","export enum ThresholdType {\n None = 0,\n\n //PropertyKPI\n GeneralOccupancy = 1,\n PendingMoveouts = 2,\n PreleasedUnits = 3,\n AnticipatedOccupancy = 4,\n DelinquentUnit = 5,\n PendingExpirations = 6,\n MoveoutsConfirmations = 7,\n\n //DelinquencyKPI\n DelayedPayment = 8,\n Eviction = 9,\n PaymentPlan = 10,\n PaidInFull = 11,\n Asstance = 12,\n MovedOut = 13,\n SmallBalance = 14,\n PendingCredit = 15,\n NTVMet = 16,\n\n //RenewalsKPI\n Negotiation = 17,\n Holdover = 18,\n MonthToMonth = 19,\n TenantNotice = 20,\n Renewal = 21,\n MgmtNotice = 22,\n Transfer = 23,\n\n //Turnovers\n TurnoverRootNode = 24,\n TurnoverSubNode = 25,\n}\n","export const isUserEmailDomainAllowed = (email: string, allowedDomains: string[]): boolean =>\n !allowedDomains?.length || allowedDomains.some(domain => email.includes(domain));\n","import { RestAddressModel } from '@shared/interfaces/address.interface';\n\nexport function FormatAddressToStringFunction(address: RestAddressModel): string {\n if (!address) {\n return '–';\n }\n return `${address?.street1 || ''} ${address?.street2 || ''} ${address?.city || ''} ${address?.state || ''} ${\n address?.zip || ''\n }`;\n}\n","import { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestWorkflowInstanceModel } from '@shared/interfaces/turnover.interface';\n\nexport function getCurrentWorkflowStep(\n workflowStep: WorkflowStepEnumType,\n workflow: RestWorkflowInstanceModel[]\n): RestWorkflowInstanceModel {\n return (workflow || []).find(value => value.workflowStepEnumType === workflowStep);\n}\n\nexport function getCompletedWorkflowStep(\n workflowStep: WorkflowStepEnumType,\n workflow: RestWorkflowInstanceModel[]\n): RestWorkflowInstanceModel {\n return (workflow || []).find(value => value.workflowStepEnumType === workflowStep && value.isCompleted);\n}\n","import { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestTimerInstanceModel } from '@shared/interfaces/rest-timer-instance-model';\n\nexport function getTimeInStep(\n workflowStepEnumType: WorkflowStepEnumType,\n timerInstance: RestTimerInstanceModel,\n forAllProcess = false\n): number {\n if (!timerInstance) {\n return 0;\n }\n\n if (forAllProcess) {\n return timerInstance.total;\n } else {\n switch (workflowStepEnumType) {\n case WorkflowStepEnumType.Notice: {\n return timerInstance.notice;\n }\n case WorkflowStepEnumType.MoveOut: {\n return timerInstance.moveOut;\n }\n case WorkflowStepEnumType.Bid: {\n return timerInstance.bid;\n }\n case WorkflowStepEnumType.MakeReady: {\n return timerInstance.makeReady;\n }\n case WorkflowStepEnumType.Reno: {\n return timerInstance.reno;\n }\n case WorkflowStepEnumType.Punch: {\n return timerInstance.punch;\n }\n case WorkflowStepEnumType.Approval: {\n return timerInstance.approval;\n }\n case WorkflowStepEnumType.Marketing: {\n return timerInstance.marketing;\n }\n case WorkflowStepEnumType.LeaseUp: {\n return timerInstance.leaseUp;\n }\n case WorkflowStepEnumType.MoveIn: {\n return timerInstance.moveIn;\n }\n }\n }\n}\n","import { isArray } from 'lodash';\n\nimport { ParamsCompareFunc, ParamsCompareItem, isParamsCompareFunc } from '@shared/interfaces/params-compare-item';\n\nexport function paramsCompare(params: (ParamsCompareItem | ParamsCompareFunc)[]): boolean {\n const someFalse = params.some(item => {\n if (isParamsCompareFunc(item)) {\n return !item.compare();\n } else {\n if (isArray(item.expectValue)) {\n if (item.expectValue.length) {\n return (item.expectValue as Array).find(i => i === item.currentValue) === undefined;\n }\n } else {\n return item.expectValue !== item.currentValue;\n }\n }\n });\n return !someFalse;\n}\n","export interface ParamsCompareItem {\n currentValue: unknown;\n expectValue: unknown;\n}\n\nexport interface ParamsCompareFunc {\n compare: () => boolean;\n}\n\nexport function isParamsCompareFunc(object: any): object is ParamsCompareFunc {\n return typeof object.compare === 'function';\n}\n","export function replaceCommaToDotFunction(value: string | number): string {\n if (!value && value !== 0) {\n return '';\n }\n return value.toString().replace(',', '.');\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { AppRoutes } from '@shared/constants/app-routes.const';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthGuard implements CanActivate {\n isOidcModuleReady = false;\n public onOidcModuleSetup: Observable;\n\n constructor(private oidcSecurityService: OidcSecurityService, private router: Router) {}\n\n canActivate(route: ActivatedRouteSnapshot): boolean | Observable {\n return this.oidcSecurityService.isAuthenticated$.pipe(\n map(isAuthorized => {\n if (!isAuthorized.isAuthenticated) {\n this.router\n .navigate([AppRoutes.LOGIN], {\n queryParams: {\n returnUrl: window.location.href,\n },\n })\n .then();\n }\n return isAuthorized.isAuthenticated;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, UrlTree } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { UserService } from '@app/services/user.service';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { UserType } from '@shared/enums/user-type';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { UserData } from '@shared/interfaces/user-data';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HomeRedirectGuard implements CanActivate {\n constructor(private userService: UserService, private router: Router) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable {\n return this.userService.getUserData().pipe(\n filter((userData: UserData) => !!userData),\n map((userData: UserData) => {\n const permissionLevel: PermissionLevelType[] = userData.permissionLevel;\n const navigationExtras = { queryParams: route.queryParams, fragment: route.fragment };\n if (userData.userType === UserType.Employee) {\n if (checkPermissionLevel(permissionLevel, PermissionLevelType.AllPermissions)) {\n return this.router.createUrlTree([AppRoutes.ROLES_ADMIN_HOME], navigationExtras);\n }\n\n if (checkPermissionLevel(permissionLevel, PermissionLevelType.AssetManager_PropertyDashboard_Read)) {\n return this.router.createUrlTree([AppRoutes.ROLES_ASSET_HOME], navigationExtras);\n }\n\n if (checkPermissionLevel(permissionLevel, PermissionLevelType.ConstructionManager_Dashboard_Read)) {\n return this.router.createUrlTree([AppRoutes.ROLES_CONSTRUCTION_HOME], navigationExtras);\n }\n\n if (checkPermissionLevel(permissionLevel, PermissionLevelType.PropertyManager_Dashboard_Read)) {\n return this.router.createUrlTree([AppRoutes.ROLES_PROPERTY_HOME], navigationExtras);\n }\n }\n\n if (userData.userType === UserType.Contractor) {\n if (checkPermissionLevel(permissionLevel, PermissionLevelType.Turnovers_Kanban_Read)) {\n return this.router.createUrlTree([AppRoutes.ROLES_VENDOR_HOME], navigationExtras);\n }\n }\n return true;\n })\n );\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { filter, map } from 'rxjs/operators';\n\nimport { UserService } from '@app/services/user.service';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\n\nexport const PermissionLevelGuardFactory = (permissionToCheck: PermissionLevelType): CanActivateFn => {\n return AnyPermissionLevelGuardFactory([permissionToCheck]);\n};\n\n/**\n * Allows activate if user has any permission\n * @param permissionsToCheck\n * @returns CanActivateFn\n */\nexport const AnyPermissionLevelGuardFactory = (permissionsToCheck: PermissionLevelType[]): CanActivateFn => {\n return () => {\n const router = inject(Router);\n const userService = inject(UserService);\n\n return userService.getCashedUserData().pipe(\n map(user => user.permissionLevel),\n filter((permissionLevel: PermissionLevelType[]) => !!permissionLevel?.length),\n map((permissionLevel: PermissionLevelType[]) => {\n if (checkPermissionLevel(permissionLevel, permissionsToCheck, 'any')) {\n return true;\n }\n const noPermissionUrlTree = router.parseUrl(AppRoutes.NO_PERMISSION);\n if (permissionsToCheck.length <= 1) {\n noPermissionUrlTree.queryParams['permission-required'] = permissionsToCheck[0];\n } else {\n noPermissionUrlTree.queryParams['any-permission-required'] = permissionsToCheck.join(',');\n }\n return noPermissionUrlTree;\n })\n );\n };\n};\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\n\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ViewCloseGuard implements CanDeactivate {\n constructor(private snackbarService: SnackbarService) {}\n\n canDeactivate(): boolean {\n // TODO - temporary - to check\n // this.snackbarService.dismiss();\n return true;\n }\n}\n","export enum FileMimeType {\n Image,\n Video,\n Other,\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'boardCurrency',\n})\nexport class BoardCurrencyPipe implements PipeTransform {\n constructor(private currencyPipe: CurrencyPipe) {}\n\n transform(\n value: number | string | null | undefined,\n display: 'code' | 'symbol' | 'symbol-narrow' | string | boolean = ''\n ): string | null {\n if (!value) return null;\n const valueFormat = +value % 1 === 0 ? '1.0-0' : '1.2-2';\n return this.currencyPipe.transform(value, 'USD', display, valueFormat);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'booleanToString',\n})\nexport class BooleanToStringPipe implements PipeTransform {\n transform(value: boolean): string {\n return value ? 'Yes' : 'No';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { compact } from 'lodash';\n\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\n@Pipe({\n name: 'compact',\n})\nexport class CompactPipe implements PipeTransform {\n transform(value: any[], availableItems: IRadioButtonOption[]): any[] {\n return compact(value).filter(x => availableItems.some(a => a.value === x));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { CompareOperator } from '@shared/enums/compare-operator.enum';\n\n@Pipe({\n name: 'compareOperator',\n})\nexport class CompareOperatorPipe implements PipeTransform {\n transform(value: CompareOperator): string {\n switch (value) {\n case CompareOperator.LESS: {\n return '<';\n }\n case CompareOperator.MORE: {\n return '>';\n }\n case CompareOperator.LESS_EQUAL: {\n return '≤';\n }\n case CompareOperator.MORE_EQUAL: {\n return '≥';\n }\n default: {\n return '';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'customCurrencyShortWithSuffix',\n})\nexport class CustomCurrencyShortWithSuffixPipe implements PipeTransform {\n transform(value: number, precision = 0): string {\n return this.abbreviateNumber(value, precision);\n }\n\n private abbreviateNumber(num, fixed) {\n // if (num === null) {\n // return null;\n // } // terminate early\n // if (num === 0) {\n // return '0';\n // } // terminate early\n if (num === null || num === 0) {\n return '$0';\n }\n fixed = !fixed || fixed < 0 ? 0 : fixed; // number of decimal places to show\n const b = num.toPrecision(2).split('e'), // get power\n k = b.length === 1 ? 0 : Math.floor(Math.min(b[1].slice(1), 14) / 3), // floor at 1 decimals, ceiling at trillions\n c = k < 1 ? num.toFixed(fixed) : (num / Math.pow(10, k * 3)).toFixed(fixed), // divide by power\n d = c < 0 ? c : Math.abs(c), // enforce -0 is 0\n e = d + ['', 'k', 'm', 'b', 't'][k]; // append power\n return '$' + e;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { NoValue } from '@shared/constants/none-radio-option.const';\n\n@Pipe({\n name: 'customCurrency',\n})\nexport class CustomCurrencyPipe implements PipeTransform {\n transform(value?: number, currency = '$', fractionDigits = 0): string {\n return isNaN(value) || value === null || value === undefined\n ? NoValue\n : value >= 0\n ? `${currency}${value.toFixed(fractionDigits)}`\n : `-${currency}${Math.abs(value).toFixed(fractionDigits)}`;\n }\n}\n","import { DatePipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\n\n@Pipe({\n name: 'todayDate',\n})\nexport class TodayDatePipe implements PipeTransform {\n constructor(private timezoneService: TimezoneService) {}\n\n datePipe = new DatePipe('en-US');\n\n transform(value: string | Date, format = 'MM/dd/yy', showToday = true): string {\n if (!value) {\n return '';\n }\n\n const dateValue = new Date(value);\n return isToday(dateValue, this.timezoneService.getCurrentDate()) && showToday\n ? `Today`\n : this.datePipe.transform(dateValue, format);\n }\n}\n\nfunction isToday(someDate, today) {\n return (\n someDate.getDate() === today.getDate() &&\n someDate.getMonth() === today.getMonth() &&\n someDate.getFullYear() === today.getFullYear()\n );\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\n\n@Pipe({\n name: 'daysAgo',\n})\nexport class DaysAgoPipe implements PipeTransform {\n constructor(private timezoneService: TimezoneService) {}\n\n transform(value: Date | string): string {\n const date = new Date(value);\n const diffInDays = Math.abs(moment(this.timezoneService.getCurrentDate()).diff(moment(date), 'days'));\n\n return diffInDays === 1 ? `${diffInDays} day` : `${diffInDays} days`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { getTimeInStep } from '@shared/functions/get-time-in-step.function';\nimport { RestTimerInstanceModel } from '@shared/interfaces/rest-timer-instance-model';\nimport { TimeInStep } from '@shared/interfaces/time-in-step.interface';\n\n@Pipe({\n name: 'dayInStep',\n})\nexport class DaysInStepPipe implements PipeTransform {\n transform(\n workflowStepEnumType: WorkflowStepEnumType,\n timerInstance: RestTimerInstanceModel,\n forAllProcess = false\n ): TimeInStep {\n const time = getTimeInStep(workflowStepEnumType, timerInstance, forAllProcess);\n\n const allHours = Math.floor(time / (60 * 60)) || 0;\n const days = Math.floor(allHours / 24) || 0;\n const hours = allHours - days * 24 || 0;\n return { days, hours };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'daysPast',\n})\nexport class DaysPastPipe implements PipeTransform {\n transform(daysInStep: { days: number; hours: number }, discardHoursPart = true): string {\n const { days, hours } = daysInStep;\n return !days && !hours ? null : `${discardHoursPart || hours <= 12 ? daysInStep.days : daysInStep.days + 1}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\nimport { DelinquencyFields } from '@main-application/delinquencies/models/delinquency-fields.enum';\nimport { DelinquencyResultType } from '@shared/enums/delinquency-result-type';\n\n@Pipe({\n name: 'delinquencyGroupInvalid',\n pure: false,\n})\nexport class DelinquencyGroupInvalidPipe implements PipeTransform {\n transform(form: UntypedFormGroup, delinquencyResultType: DelinquencyResultType): boolean {\n const notes = form.get([DelinquencyFields.NOTES]);\n const group = form.get([delinquencyResultType]);\n return notes.invalid || !delinquencyResultType || group.invalid;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\nimport { DelinquencyFields } from '@main-application/delinquencies/models/delinquency-fields.enum';\nimport { DelinquencyResultType } from '@shared/enums/delinquency-result-type';\n\n@Pipe({\n name: 'delinquencyPristineGroup',\n pure: false,\n})\nexport class DelinquencyPristineGroupPipe implements PipeTransform {\n transform(form: UntypedFormGroup, delinquencyResultType: DelinquencyResultType): boolean {\n const delinquencyResult = form.get([DelinquencyFields.DELINQUENCY_RESULT_TYPE]);\n const notes = form.get([DelinquencyFields.NOTES]);\n const group = form.get([delinquencyResultType]);\n return delinquencyResult.pristine && notes.pristine && group.pristine;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\n@Pipe({\n name: 'elapsedDate',\n})\nexport class ElapsedDatePipe implements PipeTransform {\n transform(value: string): boolean {\n if (value) {\n return moment().startOf('day').isAfter(moment(value).startOf('day'));\n }\n return false;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { isNil } from 'lodash';\n\n@Pipe({\n name: 'elapsedDaysMidRange',\n pure: false,\n})\nexport class ElapsedDaysMidRangePipe implements PipeTransform {\n transform(group: FormGroup, reversed = false): string {\n if (group.invalid) {\n return '';\n }\n\n const { low, high } = group.value;\n\n if (isNil(low) || isNil(high) || low === '' || high === '') {\n return '';\n }\n\n const lowValue = parseInt(low, 10);\n const highValue = parseInt(high, 10);\n\n const range = Math.abs(highValue - lowValue);\n\n if (range === 1) {\n return reversed ? `${lowValue - 1}` : `${lowValue + 1}`;\n }\n\n return reversed ? `${highValue} - ${lowValue}` : `${lowValue + 1} - ${highValue}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n@Pipe({\n name: 'enumerationUser',\n})\nexport class EnumerationUserPipe implements PipeTransform {\n transform(\n userId: number,\n userList: IRadioButtonOption[]\n ): IRadioButtonOption | undefined {\n return userList?.find(enumItem => enumItem.value.id === userId);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { first } from 'lodash';\n\nimport { FieldType } from '@shared/enums/field-type';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\n@Pipe({\n name: 'fieldType',\n})\nexport class FieldTypePipe implements PipeTransform {\n transform(value: string, fieldsList: IRadioButtonOption[]): FieldType {\n if (!value || !fieldsList?.length) {\n return null;\n }\n const result = first(fieldsList.filter(item => item?.label.toLowerCase() === value?.toLowerCase()))?.value;\n return isNaN(result) ? null : result;\n }\n}\n","const types = { \"application/prs.cww\": [\"cww\"], \"application/prs.xsf+xml\": [\"xsf\"], \"application/vnd.1000minds.decision-model+xml\": [\"1km\"], \"application/vnd.3gpp.pic-bw-large\": [\"plb\"], \"application/vnd.3gpp.pic-bw-small\": [\"psb\"], \"application/vnd.3gpp.pic-bw-var\": [\"pvb\"], \"application/vnd.3gpp2.tcap\": [\"tcap\"], \"application/vnd.3m.post-it-notes\": [\"pwn\"], \"application/vnd.accpac.simply.aso\": [\"aso\"], \"application/vnd.accpac.simply.imp\": [\"imp\"], \"application/vnd.acucobol\": [\"acu\"], \"application/vnd.acucorp\": [\"atc\", \"acutc\"], \"application/vnd.adobe.air-application-installer-package+zip\": [\"air\"], \"application/vnd.adobe.formscentral.fcdt\": [\"fcdt\"], \"application/vnd.adobe.fxp\": [\"fxp\", \"fxpl\"], \"application/vnd.adobe.xdp+xml\": [\"xdp\"], \"application/vnd.adobe.xfdf\": [\"*xfdf\"], \"application/vnd.age\": [\"age\"], \"application/vnd.ahead.space\": [\"ahead\"], \"application/vnd.airzip.filesecure.azf\": [\"azf\"], \"application/vnd.airzip.filesecure.azs\": [\"azs\"], \"application/vnd.amazon.ebook\": [\"azw\"], \"application/vnd.americandynamics.acc\": [\"acc\"], \"application/vnd.amiga.ami\": [\"ami\"], \"application/vnd.android.package-archive\": [\"apk\"], \"application/vnd.anser-web-certificate-issue-initiation\": [\"cii\"], \"application/vnd.anser-web-funds-transfer-initiation\": [\"fti\"], \"application/vnd.antix.game-component\": [\"atx\"], \"application/vnd.apple.installer+xml\": [\"mpkg\"], \"application/vnd.apple.keynote\": [\"key\"], \"application/vnd.apple.mpegurl\": [\"m3u8\"], \"application/vnd.apple.numbers\": [\"numbers\"], \"application/vnd.apple.pages\": [\"pages\"], \"application/vnd.apple.pkpass\": [\"pkpass\"], \"application/vnd.aristanetworks.swi\": [\"swi\"], \"application/vnd.astraea-software.iota\": [\"iota\"], \"application/vnd.audiograph\": [\"aep\"], \"application/vnd.balsamiq.bmml+xml\": [\"bmml\"], \"application/vnd.blueice.multipass\": [\"mpm\"], \"application/vnd.bmi\": [\"bmi\"], \"application/vnd.businessobjects\": [\"rep\"], \"application/vnd.chemdraw+xml\": [\"cdxml\"], \"application/vnd.chipnuts.karaoke-mmd\": [\"mmd\"], \"application/vnd.cinderella\": [\"cdy\"], \"application/vnd.citationstyles.style+xml\": [\"csl\"], \"application/vnd.claymore\": [\"cla\"], \"application/vnd.cloanto.rp9\": [\"rp9\"], \"application/vnd.clonk.c4group\": [\"c4g\", \"c4d\", \"c4f\", \"c4p\", \"c4u\"], \"application/vnd.cluetrust.cartomobile-config\": [\"c11amc\"], \"application/vnd.cluetrust.cartomobile-config-pkg\": [\"c11amz\"], \"application/vnd.commonspace\": [\"csp\"], \"application/vnd.contact.cmsg\": [\"cdbcmsg\"], \"application/vnd.cosmocaller\": [\"cmc\"], \"application/vnd.crick.clicker\": [\"clkx\"], \"application/vnd.crick.clicker.keyboard\": [\"clkk\"], \"application/vnd.crick.clicker.palette\": [\"clkp\"], \"application/vnd.crick.clicker.template\": [\"clkt\"], \"application/vnd.crick.clicker.wordbank\": [\"clkw\"], \"application/vnd.criticaltools.wbs+xml\": [\"wbs\"], \"application/vnd.ctc-posml\": [\"pml\"], \"application/vnd.cups-ppd\": [\"ppd\"], \"application/vnd.curl.car\": [\"car\"], \"application/vnd.curl.pcurl\": [\"pcurl\"], \"application/vnd.dart\": [\"dart\"], \"application/vnd.data-vision.rdz\": [\"rdz\"], \"application/vnd.dbf\": [\"dbf\"], \"application/vnd.dece.data\": [\"uvf\", \"uvvf\", \"uvd\", \"uvvd\"], \"application/vnd.dece.ttml+xml\": [\"uvt\", \"uvvt\"], \"application/vnd.dece.unspecified\": [\"uvx\", \"uvvx\"], \"application/vnd.dece.zip\": [\"uvz\", \"uvvz\"], \"application/vnd.denovo.fcselayout-link\": [\"fe_launch\"], \"application/vnd.dna\": [\"dna\"], \"application/vnd.dolby.mlp\": [\"mlp\"], \"application/vnd.dpgraph\": [\"dpg\"], \"application/vnd.dreamfactory\": [\"dfac\"], \"application/vnd.ds-keypoint\": [\"kpxx\"], \"application/vnd.dvb.ait\": [\"ait\"], \"application/vnd.dvb.service\": [\"svc\"], \"application/vnd.dynageo\": [\"geo\"], \"application/vnd.ecowin.chart\": [\"mag\"], \"application/vnd.enliven\": [\"nml\"], \"application/vnd.epson.esf\": [\"esf\"], \"application/vnd.epson.msf\": [\"msf\"], \"application/vnd.epson.quickanime\": [\"qam\"], \"application/vnd.epson.salt\": [\"slt\"], \"application/vnd.epson.ssf\": [\"ssf\"], \"application/vnd.eszigno3+xml\": [\"es3\", \"et3\"], \"application/vnd.ezpix-album\": [\"ez2\"], \"application/vnd.ezpix-package\": [\"ez3\"], \"application/vnd.fdf\": [\"*fdf\"], \"application/vnd.fdsn.mseed\": [\"mseed\"], \"application/vnd.fdsn.seed\": [\"seed\", \"dataless\"], \"application/vnd.flographit\": [\"gph\"], \"application/vnd.fluxtime.clip\": [\"ftc\"], \"application/vnd.framemaker\": [\"fm\", \"frame\", \"maker\", \"book\"], \"application/vnd.frogans.fnc\": [\"fnc\"], \"application/vnd.frogans.ltf\": [\"ltf\"], \"application/vnd.fsc.weblaunch\": [\"fsc\"], \"application/vnd.fujitsu.oasys\": [\"oas\"], \"application/vnd.fujitsu.oasys2\": [\"oa2\"], \"application/vnd.fujitsu.oasys3\": [\"oa3\"], \"application/vnd.fujitsu.oasysgp\": [\"fg5\"], \"application/vnd.fujitsu.oasysprs\": [\"bh2\"], \"application/vnd.fujixerox.ddd\": [\"ddd\"], \"application/vnd.fujixerox.docuworks\": [\"xdw\"], \"application/vnd.fujixerox.docuworks.binder\": [\"xbd\"], \"application/vnd.fuzzysheet\": [\"fzs\"], \"application/vnd.genomatix.tuxedo\": [\"txd\"], \"application/vnd.geogebra.file\": [\"ggb\"], \"application/vnd.geogebra.tool\": [\"ggt\"], \"application/vnd.geometry-explorer\": [\"gex\", \"gre\"], \"application/vnd.geonext\": [\"gxt\"], \"application/vnd.geoplan\": [\"g2w\"], \"application/vnd.geospace\": [\"g3w\"], \"application/vnd.gmx\": [\"gmx\"], \"application/vnd.google-apps.document\": [\"gdoc\"], \"application/vnd.google-apps.presentation\": [\"gslides\"], \"application/vnd.google-apps.spreadsheet\": [\"gsheet\"], \"application/vnd.google-earth.kml+xml\": [\"kml\"], \"application/vnd.google-earth.kmz\": [\"kmz\"], \"application/vnd.grafeq\": [\"gqf\", \"gqs\"], \"application/vnd.groove-account\": [\"gac\"], \"application/vnd.groove-help\": [\"ghf\"], \"application/vnd.groove-identity-message\": [\"gim\"], \"application/vnd.groove-injector\": [\"grv\"], \"application/vnd.groove-tool-message\": [\"gtm\"], \"application/vnd.groove-tool-template\": [\"tpl\"], \"application/vnd.groove-vcard\": [\"vcg\"], \"application/vnd.hal+xml\": [\"hal\"], \"application/vnd.handheld-entertainment+xml\": [\"zmm\"], \"application/vnd.hbci\": [\"hbci\"], \"application/vnd.hhe.lesson-player\": [\"les\"], \"application/vnd.hp-hpgl\": [\"hpgl\"], \"application/vnd.hp-hpid\": [\"hpid\"], \"application/vnd.hp-hps\": [\"hps\"], \"application/vnd.hp-jlyt\": [\"jlt\"], \"application/vnd.hp-pcl\": [\"pcl\"], \"application/vnd.hp-pclxl\": [\"pclxl\"], \"application/vnd.hydrostatix.sof-data\": [\"sfd-hdstx\"], \"application/vnd.ibm.minipay\": [\"mpy\"], \"application/vnd.ibm.modcap\": [\"afp\", \"listafp\", \"list3820\"], \"application/vnd.ibm.rights-management\": [\"irm\"], \"application/vnd.ibm.secure-container\": [\"sc\"], \"application/vnd.iccprofile\": [\"icc\", \"icm\"], \"application/vnd.igloader\": [\"igl\"], \"application/vnd.immervision-ivp\": [\"ivp\"], \"application/vnd.immervision-ivu\": [\"ivu\"], \"application/vnd.insors.igm\": [\"igm\"], \"application/vnd.intercon.formnet\": [\"xpw\", \"xpx\"], \"application/vnd.intergeo\": [\"i2g\"], \"application/vnd.intu.qbo\": [\"qbo\"], \"application/vnd.intu.qfx\": [\"qfx\"], \"application/vnd.ipunplugged.rcprofile\": [\"rcprofile\"], \"application/vnd.irepository.package+xml\": [\"irp\"], \"application/vnd.is-xpr\": [\"xpr\"], \"application/vnd.isac.fcs\": [\"fcs\"], \"application/vnd.jam\": [\"jam\"], \"application/vnd.jcp.javame.midlet-rms\": [\"rms\"], \"application/vnd.jisp\": [\"jisp\"], \"application/vnd.joost.joda-archive\": [\"joda\"], \"application/vnd.kahootz\": [\"ktz\", \"ktr\"], \"application/vnd.kde.karbon\": [\"karbon\"], \"application/vnd.kde.kchart\": [\"chrt\"], \"application/vnd.kde.kformula\": [\"kfo\"], \"application/vnd.kde.kivio\": [\"flw\"], \"application/vnd.kde.kontour\": [\"kon\"], \"application/vnd.kde.kpresenter\": [\"kpr\", \"kpt\"], \"application/vnd.kde.kspread\": [\"ksp\"], \"application/vnd.kde.kword\": [\"kwd\", \"kwt\"], \"application/vnd.kenameaapp\": [\"htke\"], \"application/vnd.kidspiration\": [\"kia\"], \"application/vnd.kinar\": [\"kne\", \"knp\"], \"application/vnd.koan\": [\"skp\", \"skd\", \"skt\", \"skm\"], \"application/vnd.kodak-descriptor\": [\"sse\"], \"application/vnd.las.las+xml\": [\"lasxml\"], \"application/vnd.llamagraphics.life-balance.desktop\": [\"lbd\"], \"application/vnd.llamagraphics.life-balance.exchange+xml\": [\"lbe\"], \"application/vnd.lotus-1-2-3\": [\"123\"], \"application/vnd.lotus-approach\": [\"apr\"], \"application/vnd.lotus-freelance\": [\"pre\"], \"application/vnd.lotus-notes\": [\"nsf\"], \"application/vnd.lotus-organizer\": [\"org\"], \"application/vnd.lotus-screencam\": [\"scm\"], \"application/vnd.lotus-wordpro\": [\"lwp\"], \"application/vnd.macports.portpkg\": [\"portpkg\"], \"application/vnd.mapbox-vector-tile\": [\"mvt\"], \"application/vnd.mcd\": [\"mcd\"], \"application/vnd.medcalcdata\": [\"mc1\"], \"application/vnd.mediastation.cdkey\": [\"cdkey\"], \"application/vnd.mfer\": [\"mwf\"], \"application/vnd.mfmp\": [\"mfm\"], \"application/vnd.micrografx.flo\": [\"flo\"], \"application/vnd.micrografx.igx\": [\"igx\"], \"application/vnd.mif\": [\"mif\"], \"application/vnd.mobius.daf\": [\"daf\"], \"application/vnd.mobius.dis\": [\"dis\"], \"application/vnd.mobius.mbk\": [\"mbk\"], \"application/vnd.mobius.mqy\": [\"mqy\"], \"application/vnd.mobius.msl\": [\"msl\"], \"application/vnd.mobius.plc\": [\"plc\"], \"application/vnd.mobius.txf\": [\"txf\"], \"application/vnd.mophun.application\": [\"mpn\"], \"application/vnd.mophun.certificate\": [\"mpc\"], \"application/vnd.mozilla.xul+xml\": [\"xul\"], \"application/vnd.ms-artgalry\": [\"cil\"], \"application/vnd.ms-cab-compressed\": [\"cab\"], \"application/vnd.ms-excel\": [\"xls\", \"xlm\", \"xla\", \"xlc\", \"xlt\", \"xlw\"], \"application/vnd.ms-excel.addin.macroenabled.12\": [\"xlam\"], \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": [\"xlsb\"], \"application/vnd.ms-excel.sheet.macroenabled.12\": [\"xlsm\"], \"application/vnd.ms-excel.template.macroenabled.12\": [\"xltm\"], \"application/vnd.ms-fontobject\": [\"eot\"], \"application/vnd.ms-htmlhelp\": [\"chm\"], \"application/vnd.ms-ims\": [\"ims\"], \"application/vnd.ms-lrm\": [\"lrm\"], \"application/vnd.ms-officetheme\": [\"thmx\"], \"application/vnd.ms-outlook\": [\"msg\"], \"application/vnd.ms-pki.seccat\": [\"cat\"], \"application/vnd.ms-pki.stl\": [\"*stl\"], \"application/vnd.ms-powerpoint\": [\"ppt\", \"pps\", \"pot\"], \"application/vnd.ms-powerpoint.addin.macroenabled.12\": [\"ppam\"], \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": [\"pptm\"], \"application/vnd.ms-powerpoint.slide.macroenabled.12\": [\"sldm\"], \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": [\"ppsm\"], \"application/vnd.ms-powerpoint.template.macroenabled.12\": [\"potm\"], \"application/vnd.ms-project\": [\"*mpp\", \"mpt\"], \"application/vnd.ms-word.document.macroenabled.12\": [\"docm\"], \"application/vnd.ms-word.template.macroenabled.12\": [\"dotm\"], \"application/vnd.ms-works\": [\"wps\", \"wks\", \"wcm\", \"wdb\"], \"application/vnd.ms-wpl\": [\"wpl\"], \"application/vnd.ms-xpsdocument\": [\"xps\"], \"application/vnd.mseq\": [\"mseq\"], \"application/vnd.musician\": [\"mus\"], \"application/vnd.muvee.style\": [\"msty\"], \"application/vnd.mynfc\": [\"taglet\"], \"application/vnd.neurolanguage.nlu\": [\"nlu\"], \"application/vnd.nitf\": [\"ntf\", \"nitf\"], \"application/vnd.noblenet-directory\": [\"nnd\"], \"application/vnd.noblenet-sealer\": [\"nns\"], \"application/vnd.noblenet-web\": [\"nnw\"], \"application/vnd.nokia.n-gage.ac+xml\": [\"*ac\"], \"application/vnd.nokia.n-gage.data\": [\"ngdat\"], \"application/vnd.nokia.n-gage.symbian.install\": [\"n-gage\"], \"application/vnd.nokia.radio-preset\": [\"rpst\"], \"application/vnd.nokia.radio-presets\": [\"rpss\"], \"application/vnd.novadigm.edm\": [\"edm\"], \"application/vnd.novadigm.edx\": [\"edx\"], \"application/vnd.novadigm.ext\": [\"ext\"], \"application/vnd.oasis.opendocument.chart\": [\"odc\"], \"application/vnd.oasis.opendocument.chart-template\": [\"otc\"], \"application/vnd.oasis.opendocument.database\": [\"odb\"], \"application/vnd.oasis.opendocument.formula\": [\"odf\"], \"application/vnd.oasis.opendocument.formula-template\": [\"odft\"], \"application/vnd.oasis.opendocument.graphics\": [\"odg\"], \"application/vnd.oasis.opendocument.graphics-template\": [\"otg\"], \"application/vnd.oasis.opendocument.image\": [\"odi\"], \"application/vnd.oasis.opendocument.image-template\": [\"oti\"], \"application/vnd.oasis.opendocument.presentation\": [\"odp\"], \"application/vnd.oasis.opendocument.presentation-template\": [\"otp\"], \"application/vnd.oasis.opendocument.spreadsheet\": [\"ods\"], \"application/vnd.oasis.opendocument.spreadsheet-template\": [\"ots\"], \"application/vnd.oasis.opendocument.text\": [\"odt\"], \"application/vnd.oasis.opendocument.text-master\": [\"odm\"], \"application/vnd.oasis.opendocument.text-template\": [\"ott\"], \"application/vnd.oasis.opendocument.text-web\": [\"oth\"], \"application/vnd.olpc-sugar\": [\"xo\"], \"application/vnd.oma.dd2+xml\": [\"dd2\"], \"application/vnd.openblox.game+xml\": [\"obgx\"], \"application/vnd.openofficeorg.extension\": [\"oxt\"], \"application/vnd.openstreetmap.data+xml\": [\"osm\"], \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": [\"pptx\"], \"application/vnd.openxmlformats-officedocument.presentationml.slide\": [\"sldx\"], \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": [\"ppsx\"], \"application/vnd.openxmlformats-officedocument.presentationml.template\": [\"potx\"], \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": [\"xlsx\"], \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": [\"xltx\"], \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": [\"docx\"], \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": [\"dotx\"], \"application/vnd.osgeo.mapguide.package\": [\"mgp\"], \"application/vnd.osgi.dp\": [\"dp\"], \"application/vnd.osgi.subsystem\": [\"esa\"], \"application/vnd.palm\": [\"pdb\", \"pqa\", \"oprc\"], \"application/vnd.pawaafile\": [\"paw\"], \"application/vnd.pg.format\": [\"str\"], \"application/vnd.pg.osasli\": [\"ei6\"], \"application/vnd.picsel\": [\"efif\"], \"application/vnd.pmi.widget\": [\"wg\"], \"application/vnd.pocketlearn\": [\"plf\"], \"application/vnd.powerbuilder6\": [\"pbd\"], \"application/vnd.previewsystems.box\": [\"box\"], \"application/vnd.proteus.magazine\": [\"mgz\"], \"application/vnd.publishare-delta-tree\": [\"qps\"], \"application/vnd.pvi.ptid1\": [\"ptid\"], \"application/vnd.pwg-xhtml-print+xml\": [\"xhtm\"], \"application/vnd.quark.quarkxpress\": [\"qxd\", \"qxt\", \"qwd\", \"qwt\", \"qxl\", \"qxb\"], \"application/vnd.rar\": [\"rar\"], \"application/vnd.realvnc.bed\": [\"bed\"], \"application/vnd.recordare.musicxml\": [\"mxl\"], \"application/vnd.recordare.musicxml+xml\": [\"musicxml\"], \"application/vnd.rig.cryptonote\": [\"cryptonote\"], \"application/vnd.rim.cod\": [\"cod\"], \"application/vnd.rn-realmedia\": [\"rm\"], \"application/vnd.rn-realmedia-vbr\": [\"rmvb\"], \"application/vnd.route66.link66+xml\": [\"link66\"], \"application/vnd.sailingtracker.track\": [\"st\"], \"application/vnd.seemail\": [\"see\"], \"application/vnd.sema\": [\"sema\"], \"application/vnd.semd\": [\"semd\"], \"application/vnd.semf\": [\"semf\"], \"application/vnd.shana.informed.formdata\": [\"ifm\"], \"application/vnd.shana.informed.formtemplate\": [\"itp\"], \"application/vnd.shana.informed.interchange\": [\"iif\"], \"application/vnd.shana.informed.package\": [\"ipk\"], \"application/vnd.simtech-mindmapper\": [\"twd\", \"twds\"], \"application/vnd.smaf\": [\"mmf\"], \"application/vnd.smart.teacher\": [\"teacher\"], \"application/vnd.software602.filler.form+xml\": [\"fo\"], \"application/vnd.solent.sdkm+xml\": [\"sdkm\", \"sdkd\"], \"application/vnd.spotfire.dxp\": [\"dxp\"], \"application/vnd.spotfire.sfs\": [\"sfs\"], \"application/vnd.stardivision.calc\": [\"sdc\"], \"application/vnd.stardivision.draw\": [\"sda\"], \"application/vnd.stardivision.impress\": [\"sdd\"], \"application/vnd.stardivision.math\": [\"smf\"], \"application/vnd.stardivision.writer\": [\"sdw\", \"vor\"], \"application/vnd.stardivision.writer-global\": [\"sgl\"], \"application/vnd.stepmania.package\": [\"smzip\"], \"application/vnd.stepmania.stepchart\": [\"sm\"], \"application/vnd.sun.wadl+xml\": [\"wadl\"], \"application/vnd.sun.xml.calc\": [\"sxc\"], \"application/vnd.sun.xml.calc.template\": [\"stc\"], \"application/vnd.sun.xml.draw\": [\"sxd\"], \"application/vnd.sun.xml.draw.template\": [\"std\"], \"application/vnd.sun.xml.impress\": [\"sxi\"], \"application/vnd.sun.xml.impress.template\": [\"sti\"], \"application/vnd.sun.xml.math\": [\"sxm\"], \"application/vnd.sun.xml.writer\": [\"sxw\"], \"application/vnd.sun.xml.writer.global\": [\"sxg\"], \"application/vnd.sun.xml.writer.template\": [\"stw\"], \"application/vnd.sus-calendar\": [\"sus\", \"susp\"], \"application/vnd.svd\": [\"svd\"], \"application/vnd.symbian.install\": [\"sis\", \"sisx\"], \"application/vnd.syncml+xml\": [\"xsm\"], \"application/vnd.syncml.dm+wbxml\": [\"bdm\"], \"application/vnd.syncml.dm+xml\": [\"xdm\"], \"application/vnd.syncml.dmddf+xml\": [\"ddf\"], \"application/vnd.tao.intent-module-archive\": [\"tao\"], \"application/vnd.tcpdump.pcap\": [\"pcap\", \"cap\", \"dmp\"], \"application/vnd.tmobile-livetv\": [\"tmo\"], \"application/vnd.trid.tpt\": [\"tpt\"], \"application/vnd.triscape.mxs\": [\"mxs\"], \"application/vnd.trueapp\": [\"tra\"], \"application/vnd.ufdl\": [\"ufd\", \"ufdl\"], \"application/vnd.uiq.theme\": [\"utz\"], \"application/vnd.umajin\": [\"umj\"], \"application/vnd.unity\": [\"unityweb\"], \"application/vnd.uoml+xml\": [\"uoml\", \"uo\"], \"application/vnd.vcx\": [\"vcx\"], \"application/vnd.visio\": [\"vsd\", \"vst\", \"vss\", \"vsw\"], \"application/vnd.visionary\": [\"vis\"], \"application/vnd.vsf\": [\"vsf\"], \"application/vnd.wap.wbxml\": [\"wbxml\"], \"application/vnd.wap.wmlc\": [\"wmlc\"], \"application/vnd.wap.wmlscriptc\": [\"wmlsc\"], \"application/vnd.webturbo\": [\"wtb\"], \"application/vnd.wolfram.player\": [\"nbp\"], \"application/vnd.wordperfect\": [\"wpd\"], \"application/vnd.wqd\": [\"wqd\"], \"application/vnd.wt.stf\": [\"stf\"], \"application/vnd.xara\": [\"xar\"], \"application/vnd.xfdl\": [\"xfdl\"], \"application/vnd.yamaha.hv-dic\": [\"hvd\"], \"application/vnd.yamaha.hv-script\": [\"hvs\"], \"application/vnd.yamaha.hv-voice\": [\"hvp\"], \"application/vnd.yamaha.openscoreformat\": [\"osf\"], \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": [\"osfpvg\"], \"application/vnd.yamaha.smaf-audio\": [\"saf\"], \"application/vnd.yamaha.smaf-phrase\": [\"spf\"], \"application/vnd.yellowriver-custom-menu\": [\"cmp\"], \"application/vnd.zul\": [\"zir\", \"zirz\"], \"application/vnd.zzazz.deck+xml\": [\"zaz\"], \"application/x-7z-compressed\": [\"7z\"], \"application/x-abiword\": [\"abw\"], \"application/x-ace-compressed\": [\"ace\"], \"application/x-apple-diskimage\": [\"*dmg\"], \"application/x-arj\": [\"arj\"], \"application/x-authorware-bin\": [\"aab\", \"x32\", \"u32\", \"vox\"], \"application/x-authorware-map\": [\"aam\"], \"application/x-authorware-seg\": [\"aas\"], \"application/x-bcpio\": [\"bcpio\"], \"application/x-bdoc\": [\"*bdoc\"], \"application/x-bittorrent\": [\"torrent\"], \"application/x-blorb\": [\"blb\", \"blorb\"], \"application/x-bzip\": [\"bz\"], \"application/x-bzip2\": [\"bz2\", \"boz\"], \"application/x-cbr\": [\"cbr\", \"cba\", \"cbt\", \"cbz\", \"cb7\"], \"application/x-cdlink\": [\"vcd\"], \"application/x-cfs-compressed\": [\"cfs\"], \"application/x-chat\": [\"chat\"], \"application/x-chess-pgn\": [\"pgn\"], \"application/x-chrome-extension\": [\"crx\"], \"application/x-cocoa\": [\"cco\"], \"application/x-conference\": [\"nsc\"], \"application/x-cpio\": [\"cpio\"], \"application/x-csh\": [\"csh\"], \"application/x-debian-package\": [\"*deb\", \"udeb\"], \"application/x-dgc-compressed\": [\"dgc\"], \"application/x-director\": [\"dir\", \"dcr\", \"dxr\", \"cst\", \"cct\", \"cxt\", \"w3d\", \"fgd\", \"swa\"], \"application/x-doom\": [\"wad\"], \"application/x-dtbncx+xml\": [\"ncx\"], \"application/x-dtbook+xml\": [\"dtb\"], \"application/x-dtbresource+xml\": [\"res\"], \"application/x-dvi\": [\"dvi\"], \"application/x-envoy\": [\"evy\"], \"application/x-eva\": [\"eva\"], \"application/x-font-bdf\": [\"bdf\"], \"application/x-font-ghostscript\": [\"gsf\"], \"application/x-font-linux-psf\": [\"psf\"], \"application/x-font-pcf\": [\"pcf\"], \"application/x-font-snf\": [\"snf\"], \"application/x-font-type1\": [\"pfa\", \"pfb\", \"pfm\", \"afm\"], \"application/x-freearc\": [\"arc\"], \"application/x-futuresplash\": [\"spl\"], \"application/x-gca-compressed\": [\"gca\"], \"application/x-glulx\": [\"ulx\"], \"application/x-gnumeric\": [\"gnumeric\"], \"application/x-gramps-xml\": [\"gramps\"], \"application/x-gtar\": [\"gtar\"], \"application/x-hdf\": [\"hdf\"], \"application/x-httpd-php\": [\"php\"], \"application/x-install-instructions\": [\"install\"], \"application/x-iso9660-image\": [\"*iso\"], \"application/x-iwork-keynote-sffkey\": [\"*key\"], \"application/x-iwork-numbers-sffnumbers\": [\"*numbers\"], \"application/x-iwork-pages-sffpages\": [\"*pages\"], \"application/x-java-archive-diff\": [\"jardiff\"], \"application/x-java-jnlp-file\": [\"jnlp\"], \"application/x-keepass2\": [\"kdbx\"], \"application/x-latex\": [\"latex\"], \"application/x-lua-bytecode\": [\"luac\"], \"application/x-lzh-compressed\": [\"lzh\", \"lha\"], \"application/x-makeself\": [\"run\"], \"application/x-mie\": [\"mie\"], \"application/x-mobipocket-ebook\": [\"*prc\", \"mobi\"], \"application/x-ms-application\": [\"application\"], \"application/x-ms-shortcut\": [\"lnk\"], \"application/x-ms-wmd\": [\"wmd\"], \"application/x-ms-wmz\": [\"wmz\"], \"application/x-ms-xbap\": [\"xbap\"], \"application/x-msaccess\": [\"mdb\"], \"application/x-msbinder\": [\"obd\"], \"application/x-mscardfile\": [\"crd\"], \"application/x-msclip\": [\"clp\"], \"application/x-msdos-program\": [\"*exe\"], \"application/x-msdownload\": [\"*exe\", \"*dll\", \"com\", \"bat\", \"*msi\"], \"application/x-msmediaview\": [\"mvb\", \"m13\", \"m14\"], \"application/x-msmetafile\": [\"*wmf\", \"*wmz\", \"*emf\", \"emz\"], \"application/x-msmoney\": [\"mny\"], \"application/x-mspublisher\": [\"pub\"], \"application/x-msschedule\": [\"scd\"], \"application/x-msterminal\": [\"trm\"], \"application/x-mswrite\": [\"wri\"], \"application/x-netcdf\": [\"nc\", \"cdf\"], \"application/x-ns-proxy-autoconfig\": [\"pac\"], \"application/x-nzb\": [\"nzb\"], \"application/x-perl\": [\"pl\", \"pm\"], \"application/x-pilot\": [\"*prc\", \"*pdb\"], \"application/x-pkcs12\": [\"p12\", \"pfx\"], \"application/x-pkcs7-certificates\": [\"p7b\", \"spc\"], \"application/x-pkcs7-certreqresp\": [\"p7r\"], \"application/x-rar-compressed\": [\"*rar\"], \"application/x-redhat-package-manager\": [\"rpm\"], \"application/x-research-info-systems\": [\"ris\"], \"application/x-sea\": [\"sea\"], \"application/x-sh\": [\"sh\"], \"application/x-shar\": [\"shar\"], \"application/x-shockwave-flash\": [\"swf\"], \"application/x-silverlight-app\": [\"xap\"], \"application/x-sql\": [\"*sql\"], \"application/x-stuffit\": [\"sit\"], \"application/x-stuffitx\": [\"sitx\"], \"application/x-subrip\": [\"srt\"], \"application/x-sv4cpio\": [\"sv4cpio\"], \"application/x-sv4crc\": [\"sv4crc\"], \"application/x-t3vm-image\": [\"t3\"], \"application/x-tads\": [\"gam\"], \"application/x-tar\": [\"tar\"], \"application/x-tcl\": [\"tcl\", \"tk\"], \"application/x-tex\": [\"tex\"], \"application/x-tex-tfm\": [\"tfm\"], \"application/x-texinfo\": [\"texinfo\", \"texi\"], \"application/x-tgif\": [\"*obj\"], \"application/x-ustar\": [\"ustar\"], \"application/x-virtualbox-hdd\": [\"hdd\"], \"application/x-virtualbox-ova\": [\"ova\"], \"application/x-virtualbox-ovf\": [\"ovf\"], \"application/x-virtualbox-vbox\": [\"vbox\"], \"application/x-virtualbox-vbox-extpack\": [\"vbox-extpack\"], \"application/x-virtualbox-vdi\": [\"vdi\"], \"application/x-virtualbox-vhd\": [\"vhd\"], \"application/x-virtualbox-vmdk\": [\"vmdk\"], \"application/x-wais-source\": [\"src\"], \"application/x-web-app-manifest+json\": [\"webapp\"], \"application/x-x509-ca-cert\": [\"der\", \"crt\", \"pem\"], \"application/x-xfig\": [\"fig\"], \"application/x-xliff+xml\": [\"*xlf\"], \"application/x-xpinstall\": [\"xpi\"], \"application/x-xz\": [\"xz\"], \"application/x-zmachine\": [\"z1\", \"z2\", \"z3\", \"z4\", \"z5\", \"z6\", \"z7\", \"z8\"], \"audio/vnd.dece.audio\": [\"uva\", \"uvva\"], \"audio/vnd.digital-winds\": [\"eol\"], \"audio/vnd.dra\": [\"dra\"], \"audio/vnd.dts\": [\"dts\"], \"audio/vnd.dts.hd\": [\"dtshd\"], \"audio/vnd.lucent.voice\": [\"lvp\"], \"audio/vnd.ms-playready.media.pya\": [\"pya\"], \"audio/vnd.nuera.ecelp4800\": [\"ecelp4800\"], \"audio/vnd.nuera.ecelp7470\": [\"ecelp7470\"], \"audio/vnd.nuera.ecelp9600\": [\"ecelp9600\"], \"audio/vnd.rip\": [\"rip\"], \"audio/x-aac\": [\"*aac\"], \"audio/x-aiff\": [\"aif\", \"aiff\", \"aifc\"], \"audio/x-caf\": [\"caf\"], \"audio/x-flac\": [\"flac\"], \"audio/x-m4a\": [\"*m4a\"], \"audio/x-matroska\": [\"mka\"], \"audio/x-mpegurl\": [\"m3u\"], \"audio/x-ms-wax\": [\"wax\"], \"audio/x-ms-wma\": [\"wma\"], \"audio/x-pn-realaudio\": [\"ram\", \"ra\"], \"audio/x-pn-realaudio-plugin\": [\"rmp\"], \"audio/x-realaudio\": [\"*ra\"], \"audio/x-wav\": [\"*wav\"], \"chemical/x-cdx\": [\"cdx\"], \"chemical/x-cif\": [\"cif\"], \"chemical/x-cmdf\": [\"cmdf\"], \"chemical/x-cml\": [\"cml\"], \"chemical/x-csml\": [\"csml\"], \"chemical/x-xyz\": [\"xyz\"], \"image/prs.btif\": [\"btif\", \"btf\"], \"image/prs.pti\": [\"pti\"], \"image/vnd.adobe.photoshop\": [\"psd\"], \"image/vnd.airzip.accelerator.azv\": [\"azv\"], \"image/vnd.dece.graphic\": [\"uvi\", \"uvvi\", \"uvg\", \"uvvg\"], \"image/vnd.djvu\": [\"djvu\", \"djv\"], \"image/vnd.dvb.subtitle\": [\"*sub\"], \"image/vnd.dwg\": [\"dwg\"], \"image/vnd.dxf\": [\"dxf\"], \"image/vnd.fastbidsheet\": [\"fbs\"], \"image/vnd.fpx\": [\"fpx\"], \"image/vnd.fst\": [\"fst\"], \"image/vnd.fujixerox.edmics-mmr\": [\"mmr\"], \"image/vnd.fujixerox.edmics-rlc\": [\"rlc\"], \"image/vnd.microsoft.icon\": [\"ico\"], \"image/vnd.ms-dds\": [\"dds\"], \"image/vnd.ms-modi\": [\"mdi\"], \"image/vnd.ms-photo\": [\"wdp\"], \"image/vnd.net-fpx\": [\"npx\"], \"image/vnd.pco.b16\": [\"b16\"], \"image/vnd.tencent.tap\": [\"tap\"], \"image/vnd.valve.source.texture\": [\"vtf\"], \"image/vnd.wap.wbmp\": [\"wbmp\"], \"image/vnd.xiff\": [\"xif\"], \"image/vnd.zbrush.pcx\": [\"pcx\"], \"image/x-3ds\": [\"3ds\"], \"image/x-cmu-raster\": [\"ras\"], \"image/x-cmx\": [\"cmx\"], \"image/x-freehand\": [\"fh\", \"fhc\", \"fh4\", \"fh5\", \"fh7\"], \"image/x-icon\": [\"*ico\"], \"image/x-jng\": [\"jng\"], \"image/x-mrsid-image\": [\"sid\"], \"image/x-ms-bmp\": [\"*bmp\"], \"image/x-pcx\": [\"*pcx\"], \"image/x-pict\": [\"pic\", \"pct\"], \"image/x-portable-anymap\": [\"pnm\"], \"image/x-portable-bitmap\": [\"pbm\"], \"image/x-portable-graymap\": [\"pgm\"], \"image/x-portable-pixmap\": [\"ppm\"], \"image/x-rgb\": [\"rgb\"], \"image/x-tga\": [\"tga\"], \"image/x-xbitmap\": [\"xbm\"], \"image/x-xpixmap\": [\"xpm\"], \"image/x-xwindowdump\": [\"xwd\"], \"message/vnd.wfa.wsc\": [\"wsc\"], \"model/vnd.cld\": [\"cld\"], \"model/vnd.collada+xml\": [\"dae\"], \"model/vnd.dwf\": [\"dwf\"], \"model/vnd.gdl\": [\"gdl\"], \"model/vnd.gtw\": [\"gtw\"], \"model/vnd.mts\": [\"mts\"], \"model/vnd.opengex\": [\"ogex\"], \"model/vnd.parasolid.transmit.binary\": [\"x_b\"], \"model/vnd.parasolid.transmit.text\": [\"x_t\"], \"model/vnd.pytha.pyox\": [\"pyo\", \"pyox\"], \"model/vnd.sap.vds\": [\"vds\"], \"model/vnd.usda\": [\"usda\"], \"model/vnd.usdz+zip\": [\"usdz\"], \"model/vnd.valve.source.compiled-map\": [\"bsp\"], \"model/vnd.vtu\": [\"vtu\"], \"text/prs.lines.tag\": [\"dsc\"], \"text/vnd.curl\": [\"curl\"], \"text/vnd.curl.dcurl\": [\"dcurl\"], \"text/vnd.curl.mcurl\": [\"mcurl\"], \"text/vnd.curl.scurl\": [\"scurl\"], \"text/vnd.dvb.subtitle\": [\"sub\"], \"text/vnd.familysearch.gedcom\": [\"ged\"], \"text/vnd.fly\": [\"fly\"], \"text/vnd.fmi.flexstor\": [\"flx\"], \"text/vnd.graphviz\": [\"gv\"], \"text/vnd.in3d.3dml\": [\"3dml\"], \"text/vnd.in3d.spot\": [\"spot\"], \"text/vnd.sun.j2me.app-descriptor\": [\"jad\"], \"text/vnd.wap.wml\": [\"wml\"], \"text/vnd.wap.wmlscript\": [\"wmls\"], \"text/x-asm\": [\"s\", \"asm\"], \"text/x-c\": [\"c\", \"cc\", \"cxx\", \"cpp\", \"h\", \"hh\", \"dic\"], \"text/x-component\": [\"htc\"], \"text/x-fortran\": [\"f\", \"for\", \"f77\", \"f90\"], \"text/x-handlebars-template\": [\"hbs\"], \"text/x-java-source\": [\"java\"], \"text/x-lua\": [\"lua\"], \"text/x-markdown\": [\"mkd\"], \"text/x-nfo\": [\"nfo\"], \"text/x-opml\": [\"opml\"], \"text/x-org\": [\"*org\"], \"text/x-pascal\": [\"p\", \"pas\"], \"text/x-processing\": [\"pde\"], \"text/x-sass\": [\"sass\"], \"text/x-scss\": [\"scss\"], \"text/x-setext\": [\"etx\"], \"text/x-sfv\": [\"sfv\"], \"text/x-suse-ymp\": [\"ymp\"], \"text/x-uuencode\": [\"uu\"], \"text/x-vcalendar\": [\"vcs\"], \"text/x-vcard\": [\"vcf\"], \"video/vnd.dece.hd\": [\"uvh\", \"uvvh\"], \"video/vnd.dece.mobile\": [\"uvm\", \"uvvm\"], \"video/vnd.dece.pd\": [\"uvp\", \"uvvp\"], \"video/vnd.dece.sd\": [\"uvs\", \"uvvs\"], \"video/vnd.dece.video\": [\"uvv\", \"uvvv\"], \"video/vnd.dvb.file\": [\"dvb\"], \"video/vnd.fvt\": [\"fvt\"], \"video/vnd.mpegurl\": [\"mxu\", \"m4u\"], \"video/vnd.ms-playready.media.pyv\": [\"pyv\"], \"video/vnd.uvvu.mp4\": [\"uvu\", \"uvvu\"], \"video/vnd.vivo\": [\"viv\"], \"video/x-f4v\": [\"f4v\"], \"video/x-fli\": [\"fli\"], \"video/x-flv\": [\"flv\"], \"video/x-m4v\": [\"m4v\"], \"video/x-matroska\": [\"mkv\", \"mk3d\", \"mks\"], \"video/x-mng\": [\"mng\"], \"video/x-ms-asf\": [\"asf\", \"asx\"], \"video/x-ms-vob\": [\"vob\"], \"video/x-ms-wm\": [\"wm\"], \"video/x-ms-wmv\": [\"wmv\"], \"video/x-ms-wmx\": [\"wmx\"], \"video/x-ms-wvx\": [\"wvx\"], \"video/x-msvideo\": [\"avi\"], \"video/x-sgi-movie\": [\"movie\"], \"video/x-smv\": [\"smv\"], \"x-conference/x-cooltalk\": [\"ice\"] };\nObject.freeze(types);\nexport default types;\n","const types = { \"application/andrew-inset\": [\"ez\"], \"application/appinstaller\": [\"appinstaller\"], \"application/applixware\": [\"aw\"], \"application/appx\": [\"appx\"], \"application/appxbundle\": [\"appxbundle\"], \"application/atom+xml\": [\"atom\"], \"application/atomcat+xml\": [\"atomcat\"], \"application/atomdeleted+xml\": [\"atomdeleted\"], \"application/atomsvc+xml\": [\"atomsvc\"], \"application/atsc-dwd+xml\": [\"dwd\"], \"application/atsc-held+xml\": [\"held\"], \"application/atsc-rsat+xml\": [\"rsat\"], \"application/automationml-aml+xml\": [\"aml\"], \"application/automationml-amlx+zip\": [\"amlx\"], \"application/bdoc\": [\"bdoc\"], \"application/calendar+xml\": [\"xcs\"], \"application/ccxml+xml\": [\"ccxml\"], \"application/cdfx+xml\": [\"cdfx\"], \"application/cdmi-capability\": [\"cdmia\"], \"application/cdmi-container\": [\"cdmic\"], \"application/cdmi-domain\": [\"cdmid\"], \"application/cdmi-object\": [\"cdmio\"], \"application/cdmi-queue\": [\"cdmiq\"], \"application/cpl+xml\": [\"cpl\"], \"application/cu-seeme\": [\"cu\"], \"application/cwl\": [\"cwl\"], \"application/dash+xml\": [\"mpd\"], \"application/dash-patch+xml\": [\"mpp\"], \"application/davmount+xml\": [\"davmount\"], \"application/docbook+xml\": [\"dbk\"], \"application/dssc+der\": [\"dssc\"], \"application/dssc+xml\": [\"xdssc\"], \"application/ecmascript\": [\"ecma\"], \"application/emma+xml\": [\"emma\"], \"application/emotionml+xml\": [\"emotionml\"], \"application/epub+zip\": [\"epub\"], \"application/exi\": [\"exi\"], \"application/express\": [\"exp\"], \"application/fdf\": [\"fdf\"], \"application/fdt+xml\": [\"fdt\"], \"application/font-tdpfr\": [\"pfr\"], \"application/geo+json\": [\"geojson\"], \"application/gml+xml\": [\"gml\"], \"application/gpx+xml\": [\"gpx\"], \"application/gxf\": [\"gxf\"], \"application/gzip\": [\"gz\"], \"application/hjson\": [\"hjson\"], \"application/hyperstudio\": [\"stk\"], \"application/inkml+xml\": [\"ink\", \"inkml\"], \"application/ipfix\": [\"ipfix\"], \"application/its+xml\": [\"its\"], \"application/java-archive\": [\"jar\", \"war\", \"ear\"], \"application/java-serialized-object\": [\"ser\"], \"application/java-vm\": [\"class\"], \"application/javascript\": [\"*js\"], \"application/json\": [\"json\", \"map\"], \"application/json5\": [\"json5\"], \"application/jsonml+json\": [\"jsonml\"], \"application/ld+json\": [\"jsonld\"], \"application/lgr+xml\": [\"lgr\"], \"application/lost+xml\": [\"lostxml\"], \"application/mac-binhex40\": [\"hqx\"], \"application/mac-compactpro\": [\"cpt\"], \"application/mads+xml\": [\"mads\"], \"application/manifest+json\": [\"webmanifest\"], \"application/marc\": [\"mrc\"], \"application/marcxml+xml\": [\"mrcx\"], \"application/mathematica\": [\"ma\", \"nb\", \"mb\"], \"application/mathml+xml\": [\"mathml\"], \"application/mbox\": [\"mbox\"], \"application/media-policy-dataset+xml\": [\"mpf\"], \"application/mediaservercontrol+xml\": [\"mscml\"], \"application/metalink+xml\": [\"metalink\"], \"application/metalink4+xml\": [\"meta4\"], \"application/mets+xml\": [\"mets\"], \"application/mmt-aei+xml\": [\"maei\"], \"application/mmt-usd+xml\": [\"musd\"], \"application/mods+xml\": [\"mods\"], \"application/mp21\": [\"m21\", \"mp21\"], \"application/mp4\": [\"*mp4\", \"*mpg4\", \"mp4s\", \"m4p\"], \"application/msix\": [\"msix\"], \"application/msixbundle\": [\"msixbundle\"], \"application/msword\": [\"doc\", \"dot\"], \"application/mxf\": [\"mxf\"], \"application/n-quads\": [\"nq\"], \"application/n-triples\": [\"nt\"], \"application/node\": [\"cjs\"], \"application/octet-stream\": [\"bin\", \"dms\", \"lrf\", \"mar\", \"so\", \"dist\", \"distz\", \"pkg\", \"bpk\", \"dump\", \"elc\", \"deploy\", \"exe\", \"dll\", \"deb\", \"dmg\", \"iso\", \"img\", \"msi\", \"msp\", \"msm\", \"buffer\"], \"application/oda\": [\"oda\"], \"application/oebps-package+xml\": [\"opf\"], \"application/ogg\": [\"ogx\"], \"application/omdoc+xml\": [\"omdoc\"], \"application/onenote\": [\"onetoc\", \"onetoc2\", \"onetmp\", \"onepkg\"], \"application/oxps\": [\"oxps\"], \"application/p2p-overlay+xml\": [\"relo\"], \"application/patch-ops-error+xml\": [\"xer\"], \"application/pdf\": [\"pdf\"], \"application/pgp-encrypted\": [\"pgp\"], \"application/pgp-keys\": [\"asc\"], \"application/pgp-signature\": [\"sig\", \"*asc\"], \"application/pics-rules\": [\"prf\"], \"application/pkcs10\": [\"p10\"], \"application/pkcs7-mime\": [\"p7m\", \"p7c\"], \"application/pkcs7-signature\": [\"p7s\"], \"application/pkcs8\": [\"p8\"], \"application/pkix-attr-cert\": [\"ac\"], \"application/pkix-cert\": [\"cer\"], \"application/pkix-crl\": [\"crl\"], \"application/pkix-pkipath\": [\"pkipath\"], \"application/pkixcmp\": [\"pki\"], \"application/pls+xml\": [\"pls\"], \"application/postscript\": [\"ai\", \"eps\", \"ps\"], \"application/provenance+xml\": [\"provx\"], \"application/pskc+xml\": [\"pskcxml\"], \"application/raml+yaml\": [\"raml\"], \"application/rdf+xml\": [\"rdf\", \"owl\"], \"application/reginfo+xml\": [\"rif\"], \"application/relax-ng-compact-syntax\": [\"rnc\"], \"application/resource-lists+xml\": [\"rl\"], \"application/resource-lists-diff+xml\": [\"rld\"], \"application/rls-services+xml\": [\"rs\"], \"application/route-apd+xml\": [\"rapd\"], \"application/route-s-tsid+xml\": [\"sls\"], \"application/route-usd+xml\": [\"rusd\"], \"application/rpki-ghostbusters\": [\"gbr\"], \"application/rpki-manifest\": [\"mft\"], \"application/rpki-roa\": [\"roa\"], \"application/rsd+xml\": [\"rsd\"], \"application/rss+xml\": [\"rss\"], \"application/rtf\": [\"rtf\"], \"application/sbml+xml\": [\"sbml\"], \"application/scvp-cv-request\": [\"scq\"], \"application/scvp-cv-response\": [\"scs\"], \"application/scvp-vp-request\": [\"spq\"], \"application/scvp-vp-response\": [\"spp\"], \"application/sdp\": [\"sdp\"], \"application/senml+xml\": [\"senmlx\"], \"application/sensml+xml\": [\"sensmlx\"], \"application/set-payment-initiation\": [\"setpay\"], \"application/set-registration-initiation\": [\"setreg\"], \"application/shf+xml\": [\"shf\"], \"application/sieve\": [\"siv\", \"sieve\"], \"application/smil+xml\": [\"smi\", \"smil\"], \"application/sparql-query\": [\"rq\"], \"application/sparql-results+xml\": [\"srx\"], \"application/sql\": [\"sql\"], \"application/srgs\": [\"gram\"], \"application/srgs+xml\": [\"grxml\"], \"application/sru+xml\": [\"sru\"], \"application/ssdl+xml\": [\"ssdl\"], \"application/ssml+xml\": [\"ssml\"], \"application/swid+xml\": [\"swidtag\"], \"application/tei+xml\": [\"tei\", \"teicorpus\"], \"application/thraud+xml\": [\"tfi\"], \"application/timestamped-data\": [\"tsd\"], \"application/toml\": [\"toml\"], \"application/trig\": [\"trig\"], \"application/ttml+xml\": [\"ttml\"], \"application/ubjson\": [\"ubj\"], \"application/urc-ressheet+xml\": [\"rsheet\"], \"application/urc-targetdesc+xml\": [\"td\"], \"application/voicexml+xml\": [\"vxml\"], \"application/wasm\": [\"wasm\"], \"application/watcherinfo+xml\": [\"wif\"], \"application/widget\": [\"wgt\"], \"application/winhlp\": [\"hlp\"], \"application/wsdl+xml\": [\"wsdl\"], \"application/wspolicy+xml\": [\"wspolicy\"], \"application/xaml+xml\": [\"xaml\"], \"application/xcap-att+xml\": [\"xav\"], \"application/xcap-caps+xml\": [\"xca\"], \"application/xcap-diff+xml\": [\"xdf\"], \"application/xcap-el+xml\": [\"xel\"], \"application/xcap-ns+xml\": [\"xns\"], \"application/xenc+xml\": [\"xenc\"], \"application/xfdf\": [\"xfdf\"], \"application/xhtml+xml\": [\"xhtml\", \"xht\"], \"application/xliff+xml\": [\"xlf\"], \"application/xml\": [\"xml\", \"xsl\", \"xsd\", \"rng\"], \"application/xml-dtd\": [\"dtd\"], \"application/xop+xml\": [\"xop\"], \"application/xproc+xml\": [\"xpl\"], \"application/xslt+xml\": [\"*xsl\", \"xslt\"], \"application/xspf+xml\": [\"xspf\"], \"application/xv+xml\": [\"mxml\", \"xhvml\", \"xvml\", \"xvm\"], \"application/yang\": [\"yang\"], \"application/yin+xml\": [\"yin\"], \"application/zip\": [\"zip\"], \"audio/3gpp\": [\"*3gpp\"], \"audio/aac\": [\"adts\", \"aac\"], \"audio/adpcm\": [\"adp\"], \"audio/amr\": [\"amr\"], \"audio/basic\": [\"au\", \"snd\"], \"audio/midi\": [\"mid\", \"midi\", \"kar\", \"rmi\"], \"audio/mobile-xmf\": [\"mxmf\"], \"audio/mp3\": [\"*mp3\"], \"audio/mp4\": [\"m4a\", \"mp4a\"], \"audio/mpeg\": [\"mpga\", \"mp2\", \"mp2a\", \"mp3\", \"m2a\", \"m3a\"], \"audio/ogg\": [\"oga\", \"ogg\", \"spx\", \"opus\"], \"audio/s3m\": [\"s3m\"], \"audio/silk\": [\"sil\"], \"audio/wav\": [\"wav\"], \"audio/wave\": [\"*wav\"], \"audio/webm\": [\"weba\"], \"audio/xm\": [\"xm\"], \"font/collection\": [\"ttc\"], \"font/otf\": [\"otf\"], \"font/ttf\": [\"ttf\"], \"font/woff\": [\"woff\"], \"font/woff2\": [\"woff2\"], \"image/aces\": [\"exr\"], \"image/apng\": [\"apng\"], \"image/avci\": [\"avci\"], \"image/avcs\": [\"avcs\"], \"image/avif\": [\"avif\"], \"image/bmp\": [\"bmp\", \"dib\"], \"image/cgm\": [\"cgm\"], \"image/dicom-rle\": [\"drle\"], \"image/dpx\": [\"dpx\"], \"image/emf\": [\"emf\"], \"image/fits\": [\"fits\"], \"image/g3fax\": [\"g3\"], \"image/gif\": [\"gif\"], \"image/heic\": [\"heic\"], \"image/heic-sequence\": [\"heics\"], \"image/heif\": [\"heif\"], \"image/heif-sequence\": [\"heifs\"], \"image/hej2k\": [\"hej2\"], \"image/hsj2\": [\"hsj2\"], \"image/ief\": [\"ief\"], \"image/jls\": [\"jls\"], \"image/jp2\": [\"jp2\", \"jpg2\"], \"image/jpeg\": [\"jpeg\", \"jpg\", \"jpe\"], \"image/jph\": [\"jph\"], \"image/jphc\": [\"jhc\"], \"image/jpm\": [\"jpm\", \"jpgm\"], \"image/jpx\": [\"jpx\", \"jpf\"], \"image/jxr\": [\"jxr\"], \"image/jxra\": [\"jxra\"], \"image/jxrs\": [\"jxrs\"], \"image/jxs\": [\"jxs\"], \"image/jxsc\": [\"jxsc\"], \"image/jxsi\": [\"jxsi\"], \"image/jxss\": [\"jxss\"], \"image/ktx\": [\"ktx\"], \"image/ktx2\": [\"ktx2\"], \"image/png\": [\"png\"], \"image/sgi\": [\"sgi\"], \"image/svg+xml\": [\"svg\", \"svgz\"], \"image/t38\": [\"t38\"], \"image/tiff\": [\"tif\", \"tiff\"], \"image/tiff-fx\": [\"tfx\"], \"image/webp\": [\"webp\"], \"image/wmf\": [\"wmf\"], \"message/disposition-notification\": [\"disposition-notification\"], \"message/global\": [\"u8msg\"], \"message/global-delivery-status\": [\"u8dsn\"], \"message/global-disposition-notification\": [\"u8mdn\"], \"message/global-headers\": [\"u8hdr\"], \"message/rfc822\": [\"eml\", \"mime\"], \"model/3mf\": [\"3mf\"], \"model/gltf+json\": [\"gltf\"], \"model/gltf-binary\": [\"glb\"], \"model/iges\": [\"igs\", \"iges\"], \"model/jt\": [\"jt\"], \"model/mesh\": [\"msh\", \"mesh\", \"silo\"], \"model/mtl\": [\"mtl\"], \"model/obj\": [\"obj\"], \"model/prc\": [\"prc\"], \"model/step+xml\": [\"stpx\"], \"model/step+zip\": [\"stpz\"], \"model/step-xml+zip\": [\"stpxz\"], \"model/stl\": [\"stl\"], \"model/u3d\": [\"u3d\"], \"model/vrml\": [\"wrl\", \"vrml\"], \"model/x3d+binary\": [\"*x3db\", \"x3dbz\"], \"model/x3d+fastinfoset\": [\"x3db\"], \"model/x3d+vrml\": [\"*x3dv\", \"x3dvz\"], \"model/x3d+xml\": [\"x3d\", \"x3dz\"], \"model/x3d-vrml\": [\"x3dv\"], \"text/cache-manifest\": [\"appcache\", \"manifest\"], \"text/calendar\": [\"ics\", \"ifb\"], \"text/coffeescript\": [\"coffee\", \"litcoffee\"], \"text/css\": [\"css\"], \"text/csv\": [\"csv\"], \"text/html\": [\"html\", \"htm\", \"shtml\"], \"text/jade\": [\"jade\"], \"text/javascript\": [\"js\", \"mjs\"], \"text/jsx\": [\"jsx\"], \"text/less\": [\"less\"], \"text/markdown\": [\"md\", \"markdown\"], \"text/mathml\": [\"mml\"], \"text/mdx\": [\"mdx\"], \"text/n3\": [\"n3\"], \"text/plain\": [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\", \"in\", \"ini\"], \"text/richtext\": [\"rtx\"], \"text/rtf\": [\"*rtf\"], \"text/sgml\": [\"sgml\", \"sgm\"], \"text/shex\": [\"shex\"], \"text/slim\": [\"slim\", \"slm\"], \"text/spdx\": [\"spdx\"], \"text/stylus\": [\"stylus\", \"styl\"], \"text/tab-separated-values\": [\"tsv\"], \"text/troff\": [\"t\", \"tr\", \"roff\", \"man\", \"me\", \"ms\"], \"text/turtle\": [\"ttl\"], \"text/uri-list\": [\"uri\", \"uris\", \"urls\"], \"text/vcard\": [\"vcard\"], \"text/vtt\": [\"vtt\"], \"text/wgsl\": [\"wgsl\"], \"text/xml\": [\"*xml\"], \"text/yaml\": [\"yaml\", \"yml\"], \"video/3gpp\": [\"3gp\", \"3gpp\"], \"video/3gpp2\": [\"3g2\"], \"video/h261\": [\"h261\"], \"video/h263\": [\"h263\"], \"video/h264\": [\"h264\"], \"video/iso.segment\": [\"m4s\"], \"video/jpeg\": [\"jpgv\"], \"video/jpm\": [\"*jpm\", \"*jpgm\"], \"video/mj2\": [\"mj2\", \"mjp2\"], \"video/mp2t\": [\"ts\"], \"video/mp4\": [\"mp4\", \"mp4v\", \"mpg4\"], \"video/mpeg\": [\"mpeg\", \"mpg\", \"mpe\", \"m1v\", \"m2v\"], \"video/ogg\": [\"ogv\"], \"video/quicktime\": [\"qt\", \"mov\"], \"video/webm\": [\"webm\"] };\nObject.freeze(types);\nexport default types;\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Mime_extensionToType, _Mime_typeToExtension, _Mime_typeToExtensions;\nclass Mime {\n constructor(...args) {\n _Mime_extensionToType.set(this, new Map());\n _Mime_typeToExtension.set(this, new Map());\n _Mime_typeToExtensions.set(this, new Map());\n for (const arg of args) {\n this.define(arg);\n }\n }\n define(typeMap, force = false) {\n for (let [type, extensions] of Object.entries(typeMap)) {\n type = type.toLowerCase();\n extensions = extensions.map((ext) => ext.toLowerCase());\n if (!__classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").has(type)) {\n __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").set(type, new Set());\n }\n const allExtensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type);\n let first = true;\n for (let extension of extensions) {\n const starred = extension.startsWith('*');\n extension = starred ? extension.slice(1) : extension;\n allExtensions?.add(extension);\n if (first) {\n __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").set(type, extension);\n }\n first = false;\n if (starred)\n continue;\n const currentType = __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(extension);\n if (currentType && currentType != type && !force) {\n throw new Error(`\"${type} -> ${extension}\" conflicts with \"${currentType} -> ${extension}\". Pass \\`force=true\\` to override this definition.`);\n }\n __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").set(extension, type);\n }\n }\n return this;\n }\n getType(path) {\n if (typeof path !== 'string')\n return null;\n const last = path.replace(/^.*[/\\\\]/, '').toLowerCase();\n const ext = last.replace(/^.*\\./, '').toLowerCase();\n const hasPath = last.length < path.length;\n const hasDot = ext.length < last.length - 1;\n if (!hasDot && hasPath)\n return null;\n return __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(ext) ?? null;\n }\n getExtension(type) {\n if (typeof type !== 'string')\n return null;\n type = type?.split?.(';')[0];\n return ((type && __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").get(type.trim().toLowerCase())) ?? null);\n }\n getAllExtensions(type) {\n if (typeof type !== 'string')\n return null;\n return __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type.toLowerCase()) ?? null;\n }\n _freeze() {\n this.define = () => {\n throw new Error('define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances');\n };\n Object.freeze(this);\n for (const extensions of __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").values()) {\n Object.freeze(extensions);\n }\n return this;\n }\n _getTestState() {\n return {\n types: __classPrivateFieldGet(this, _Mime_extensionToType, \"f\"),\n extensions: __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\"),\n };\n }\n}\n_Mime_extensionToType = new WeakMap(), _Mime_typeToExtension = new WeakMap(), _Mime_typeToExtensions = new WeakMap();\nexport default Mime;\n","import otherTypes from '../types/other.js';\nimport standardTypes from '../types/standard.js';\nimport Mime from './Mime.js';\nexport { default as Mime } from './Mime.js';\nexport default new Mime(standardTypes, otherTypes)._freeze();\n","import { Pipe, PipeTransform } from '@angular/core';\nimport mime from 'mime';\n\nimport { FileMimeType } from '@shared/interfaces/file-mime-types';\n\n@Pipe({\n name: 'fileMimeType',\n})\nexport class FileMimeTypePipe implements PipeTransform {\n transform(fileName: string): FileMimeType {\n const type = mime.getType(fileName);\n if (type) {\n if (type.startsWith('image')) {\n return FileMimeType.Image;\n }\n if (type.startsWith('video')) {\n return FileMimeType.Video;\n }\n }\n return FileMimeType.Other;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n@Pipe({\n name: 'fileToObjectUrl',\n})\nexport class FileToObjectUrlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(value: File): SafeUrl {\n return this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(value));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { find } from 'lodash';\n\n@Pipe({\n name: 'findById',\n})\nexport class FindByIdPipe implements PipeTransform {\n transform(id: number, list: T[]): T {\n return find(list, { id }) as T;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { first } from 'lodash';\n\n@Pipe({\n name: 'first',\n})\nexport class FirstPipe implements PipeTransform {\n transform(value: T[]): T {\n return first(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { first, trim } from 'lodash';\n\n@Pipe({\n name: 'formatToAvatar',\n})\nexport class FormatToAvatarPipe implements PipeTransform {\n transform(firstName = '', lastName = ''): string {\n const result = (first(trim(firstName || '')) || '') + (first(trim(lastName || '')) || '');\n return result || ' ';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { getCurrentWorkflowStep } from '@shared/functions/get-current-workflow-step.function';\nimport { RestTurnoverDataModel, RestWorkflowInstanceModel } from '@shared/interfaces/turnover.interface';\n\n@Pipe({\n name: 'getCurrentWorkflowStep',\n})\nexport class GetCurrentWorkflowStepPipe implements PipeTransform {\n transform(turnoverData: RestTurnoverDataModel): RestWorkflowInstanceModel {\n return getCurrentWorkflowStep(turnoverData.activeWorkflowStepType, turnoverData.workflow);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Pipe({\n name: 'getFromGroup',\n})\nexport class GetFromGroupPipe implements PipeTransform {\n transform(group: FormGroup, fieldName: string): FormGroup {\n if (!group || !fieldName) {\n return null;\n }\n\n return group.get(fieldName) as FormGroup;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'getPercentageValue',\n})\nexport class GetPercentageValuePipe implements PipeTransform {\n transform(value: number, sumValue: number): string {\n if (!value || !sumValue) {\n return '0 %';\n }\n return `${((value / sumValue) * 100).toFixed(2)} %`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { getCurrentWorkflowStep } from '@shared/functions/get-current-workflow-step.function';\nimport { RestTurnoverDataModel, RestWorkflowInstanceModel } from '@shared/interfaces/turnover.interface';\n\n@Pipe({\n name: 'getWorkflowStep',\n})\nexport class GetWorkflowStepPipe implements PipeTransform {\n transform(turnoverData: RestTurnoverDataModel, step: WorkflowStepEnumType): RestWorkflowInstanceModel {\n return getCurrentWorkflowStep(step, turnoverData.workflow);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'hoursPast',\n})\nexport class HoursPastPipe implements PipeTransform {\n transform(value: number, daysInStep: { days: number; hours: number }): string {\n const { days, hours } = daysInStep;\n return !days && !hours ? '' : days < 1000 ? `${value}h` : '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'humanize',\n})\nexport class HumanizePipe implements PipeTransform {\n /** Humanize PascalCase string into human readable string with spaces */\n transform(value: string) {\n return HumanizePipe.transform(value);\n }\n\n static transform(value: string) {\n if (typeof value !== 'string') {\n return value;\n }\n\n return (\n value[0].toUpperCase() +\n value\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .slice(1)\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isOdd',\n})\nexport class IsOddPipe implements PipeTransform {\n transform(value: number): boolean {\n return !!(value % 2);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { BreadcrumbTheme } from '@shared/enums/breadcrumb-theme.enum';\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\n\n@Pipe({\n name: 'kanbanHeaderWorkflowPhase',\n})\nexport class KanbanHeaderWorkflowPhasePipe implements PipeTransform {\n transform(\n currentPhase: WorkflowPhaseType,\n defaultPhase: WorkflowPhaseType,\n defaultTheme: BreadcrumbTheme\n ): BreadcrumbTheme {\n if (currentPhase > defaultPhase) {\n return defaultTheme;\n }\n\n if (currentPhase === defaultPhase) {\n return BreadcrumbTheme.KANBAN_GREEN1;\n }\n\n return BreadcrumbTheme.KANBAN_GRAY2;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { BreadcrumbTheme } from '@shared/enums/breadcrumb-theme.enum';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\n\n@Pipe({\n name: 'kanbanHeaderWorkflowStep',\n})\nexport class KanbanHeaderWorkflowStepPipe implements PipeTransform {\n transform(\n step: WorkflowStepEnumType,\n currentStep: WorkflowStepEnumType,\n currentTheme: BreadcrumbTheme\n ): BreadcrumbTheme {\n if (!step) {\n return BreadcrumbTheme.KANBAN_GRAY2;\n }\n\n if (!currentStep) {\n return currentTheme;\n }\n\n if (step < currentStep) {\n return BreadcrumbTheme.KANBAN_GREEN8;\n }\n\n if (step === currentStep) {\n return BreadcrumbTheme.KANBAN_GREEN4;\n }\n\n return BreadcrumbTheme.KANBAN_GRAY2;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { ThresholdType } from '@shared/enums/threshold-type';\n\n@Pipe({\n name: 'kpiHeader',\n})\nexport class KpiHeaderPipe implements PipeTransform {\n transform(thresholdType: ThresholdType): string {\n switch (thresholdType) {\n case ThresholdType.GeneralOccupancy: {\n return 'Occupancy (%)';\n }\n case ThresholdType.PendingMoveouts: {\n return 'move outs';\n }\n case ThresholdType.PreleasedUnits: {\n return 'pre-leased';\n }\n case ThresholdType.AnticipatedOccupancy: {\n return 'anticipated (%)';\n }\n case ThresholdType.DelinquentUnit: {\n return 'delinquent';\n }\n case ThresholdType.PendingExpirations: {\n return 'expires';\n }\n case ThresholdType.MoveoutsConfirmations: {\n return 'confirms';\n }\n case ThresholdType.DelayedPayment: {\n return 'delayed payment';\n }\n case ThresholdType.Eviction: {\n return 'eviction';\n }\n case ThresholdType.PaymentPlan: {\n return 'payment plan';\n }\n case ThresholdType.PaidInFull: {\n return 'paid in full';\n }\n case ThresholdType.Asstance: {\n return 'receiving assistance';\n }\n case ThresholdType.MovedOut: {\n return 'moving out';\n }\n case ThresholdType.SmallBalance: {\n return 'small balance';\n }\n case ThresholdType.PendingCredit: {\n return 'pending credit';\n }\n case ThresholdType.Negotiation: {\n return 'negotiating (number of units)';\n }\n case ThresholdType.Holdover: {\n return 'on holdover';\n }\n case ThresholdType.MonthToMonth: {\n return 'month to month';\n }\n case ThresholdType.TenantNotice: {\n return 'tenant notice';\n }\n case ThresholdType.Renewal: {\n return 'renewing';\n }\n case ThresholdType.MgmtNotice: {\n return 'mgmt notice';\n }\n case ThresholdType.Transfer: {\n return 'unit transfer';\n }\n case ThresholdType.TurnoverRootNode: {\n return 'Turnover Root Node';\n }\n case ThresholdType.TurnoverSubNode: {\n return 'Turnover Sub Node';\n }\n default: {\n return '';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isNil } from 'lodash';\n\n@Pipe({\n name: 'kpiTaskValue',\n})\nexport class KpiTaskValuePipe implements PipeTransform {\n transform(value: number): string {\n if (isNil(value)) {\n return 'Type or choose';\n }\n return `${value} ${value === 1 ? 'day' : 'days'}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isNil } from 'lodash';\n\n@Pipe({\n name: 'kpiValue',\n})\nexport class KpiValuePipe implements PipeTransform {\n transform(value: number, operator: string, unit?: string): string {\n if (isNil(value)) {\n return null;\n }\n return `${operator} ${value}${unit || ''}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\n\n@Pipe({\n name: 'labelAvailableDayInStep',\n})\nexport class LabelAvailableDayInStepPipe implements PipeTransform {\n constructor(private timezoneService: TimezoneService) {}\n\n transform(dayInStep: number): string {\n const dt = moment(this.timezoneService.getCurrentDate()).add(dayInStep, 'days').format('MM/DD');\n const days = Math.abs(dayInStep);\n return `Available on ${dt}`;\n // Lyman commented this out to try a simpler approach\n // if (dayInStep === 0) {\n // return 'Available today';\n // } else if (dayInStep > 0) {\n // if (dayInStep > 1) {\n // return `Available in ${days} days (${dt})`;\n // } else {\n // return `Available in ${days} day (${dt})`;\n // }\n // } else {\n // if (dayInStep < -1) {\n // return `Available ${days} days ago (${dt})`;\n // } else {\n // return `Available ${days} day ago (${dt})`;\n // }\n // }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'labelDayInStep',\n})\nexport class LabelDayInStepPipe implements PipeTransform {\n transform(label: string, dayInStep: number): string {\n if (!dayInStep) {\n return `${label} now`;\n }\n return `${label} ${Math.abs(dayInStep)}d${dayInStep < 0 ? ' ago' : ''}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'labelDaySinceStep',\n})\nexport class LabelDaySinceStepPipe implements PipeTransform {\n transform(label: string, daySinceStep: number): string {\n if (!daySinceStep) {\n return `${label} ??`;\n }\n return `${label} ${Math.abs(daySinceStep)}d${daySinceStep < 0 ? '' : ' ago'}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { TimeInStep } from '@shared/interfaces/time-in-step.interface';\n\n@Pipe({\n name: 'lostRevenue',\n})\nexport class LostRevenuePipe implements PipeTransform {\n transform(dayInStep: TimeInStep, rent: number): number {\n if (!rent) return 0;\n\n const pricePerDay = rent / 30;\n const pricePerHour = pricePerDay / 24;\n return parseFloat(((dayInStep.days || 0) * pricePerDay + (dayInStep.hours || 0) * pricePerHour).toFixed(0));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isNumber } from 'lodash';\n\nimport { MeasureType } from '@shared/interfaces/measure-type';\n\n@Pipe({\n name: 'measureType',\n})\nexport class MeasureTypePipe implements PipeTransform {\n transform(measureType: MeasureType, amount: number, shortFormat = false): string {\n if (isNumber(amount) && measureType) {\n if (!shortFormat) {\n switch (measureType) {\n case 'day':\n case 'unit': {\n return amount > 0 && amount <= 1 ? measureType : `${measureType}s`;\n }\n default: {\n return measureType;\n }\n }\n } else {\n switch (measureType) {\n case 'day': {\n return 'd';\n }\n case 'unit': {\n return '';\n }\n default: {\n return measureType;\n }\n }\n }\n }\n return '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n@Pipe({\n name: 'mentionComment',\n})\nexport class MentionCommentPipe implements PipeTransform {\n transform(value: string, users: RestUserModel[], userId: number): string {\n if (!value) {\n return value;\n }\n return value.replace(/\\[~(\\S*)\\]/gim, (m, g) => {\n const user = users?.find(u => u.email === g);\n return user\n ? `@${\n user.displayName\n }`\n : m;\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isArray } from 'lodash';\n\n@Pipe({\n name: 'notEmptyPropsAmount',\n})\nexport class NotEmptyPropsAmountPipe implements PipeTransform {\n transform(value: any, showZero = false, excludedProps?: string[]): number {\n const props = Object.keys(value)\n .filter(\n key =>\n value[key] !== null &&\n value[key] !== undefined &&\n (!isArray(value[key]) || value[key].some(e => e)) &&\n (typeof value[key] !== 'boolean' || value[key])\n )\n .filter(key => !excludedProps?.length || !excludedProps.some(p => p === key));\n const amount = props.length;\n return !showZero && !amount ? null : amount;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { NoValue } from '@shared/constants/none-radio-option.const';\n\n@Pipe({\n name: 'customNumber',\n})\nexport class NumberPipe implements PipeTransform {\n transform(value: number, precision = 0, suffix = ''): string {\n if (isNaN(value) || value === null) {\n return NoValue;\n }\n return value.toFixed(precision) + suffix;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { replaceCommaToDotFunction } from '@shared/functions/replace-comma-to-dot.function';\n\n@Pipe({\n name: 'parseFloat',\n})\nexport class ParseFloatPipe implements PipeTransform {\n transform(value: any): number {\n if (!isNaN(value)) {\n return value;\n }\n\n if (!value) {\n return null;\n }\n return parseFloat(replaceCommaToDotFunction(value));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { FormatAddressToStringFunction } from '@shared/functions/format-address-to-string.function';\nimport { RestAddressModel } from '@shared/interfaces/address.interface';\n\n@Pipe({\n name: 'physicalAddress',\n})\nexport class PhysicalAddressPipe implements PipeTransform {\n transform(address: RestAddressModel): string {\n return FormatAddressToStringFunction(address);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isEmpty } from 'lodash';\n\n@Pipe({\n name: 'isSaveGeneralRoleDisabled',\n})\nexport class IsSaveGeneralRoleDisabledPipe implements PipeTransform {\n transform(value: string): boolean {\n return isEmpty(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isSubmitRolesAndUnitsDisabled',\n})\nexport class IsSubmitRolesAndUnitsDisabledPipe implements PipeTransform {\n transform(isGeneralRoleChanged: boolean, arePropertiesChanged: boolean): boolean {\n return !isGeneralRoleChanged && !arePropertiesChanged;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'propertiesToRadioInput',\n})\nexport class PropertiesToRadioInputPipe implements PipeTransform {\n transform(properties: any[]): any[] {\n return properties?.map(property => {\n return {\n value: property,\n label: property.name,\n };\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({ name: 'safeHtml' })\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(html: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { find } from 'lodash';\n\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\n\n@Pipe({\n name: 'turnoverPhaseToStatus',\n})\nexport class TurnoverPhaseToStatusPipe implements PipeTransform {\n transform(value: number, enumerations: EnumerationItem[]): string {\n const item = find(enumerations, { enumerationValue: value });\n return item.displayText;\n }\n}\n","import { reduce } from 'lodash';\n\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\n\nexport enum EnumerationProperties {\n enumerationValue = 'enumerationValue',\n fullyqualifiedUrn = 'fullyqualifiedUrn',\n simpleText = 'simpleText',\n displayText = 'displayText',\n fullDescription = 'fullDescription',\n}\n\ninterface EnumerationItemMap {\n [key: string]: number | string;\n}\n\nexport function enumerationListToKeyValueMap(\n enumerationList: EnumerationItem[],\n key: EnumerationProperties,\n value: EnumerationProperties\n): EnumerationItemMap {\n return reduce(\n enumerationList,\n (result, enumerationItem) => {\n result[enumerationItem[key]] = enumerationItem[value];\n return result;\n },\n {} as EnumerationItemMap\n );\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\nimport {\n EnumerationProperties,\n enumerationListToKeyValueMap,\n} from '@shared/functions/enumeration-list-to-key-value-map';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\n\nconst WorkflowPhaseToProgressMap = {\n [WorkflowPhaseType.NotReady]: 0,\n [WorkflowPhaseType.Ready]: 80,\n};\n\n@Pipe({\n name: 'workflowPhaseToProgressValue',\n})\nexport class WorkflowPhaseToProgressValuePipe implements PipeTransform {\n transform(workflowPhase: WorkflowPhaseType, workflowPhases: EnumerationItem[]): number {\n const workflowPhasesEnumMap = enumerationListToKeyValueMap(\n workflowPhases,\n EnumerationProperties.simpleText,\n EnumerationProperties.enumerationValue\n );\n const workflowPhaseValue = workflowPhasesEnumMap[workflowPhase];\n return WorkflowPhaseToProgressMap[workflowPhaseValue];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { BidStatusType } from '@shared/enums/bid-status-type';\n\n@Pipe({\n name: 'bidStatusType',\n})\nexport class BidStatusTypePipe implements PipeTransform {\n transform(statusType: BidStatusType): string {\n switch (statusType) {\n case BidStatusType.SentToContractors: {\n return 'New';\n }\n case BidStatusType.SentToTurnover: {\n return 'Sent';\n }\n case BidStatusType.Accepted: {\n return 'Accepted';\n }\n case BidStatusType.Rejected: {\n return 'Rejected';\n }\n default: {\n return '';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { TimeInStep } from '@shared/interfaces/time-in-step.interface';\n\n@Pipe({\n name: 'dayFromHours',\n})\nexport class DayFromHoursPipe implements PipeTransform {\n transform(allHours: number): TimeInStep {\n const days = Math.floor(allHours / 24) || 0;\n const hours = allHours - days * 24 || 0;\n return { days, hours };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { first } from 'lodash';\n\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\n\n@Pipe({\n name: 'enumValueToDisplayText',\n})\nexport class EnumValueToDisplayTextPipe implements PipeTransform {\n transform(value: number, enumList: EnumerationItem[]): string | number {\n if (!enumList?.length) {\n return value;\n }\n\n return first(enumList.filter(enumItem => enumItem.enumerationValue === value))?.displayText || value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isInclude',\n})\nexport class IsIncludePipe implements PipeTransform {\n transform(value: string, values): boolean {\n if (Array.isArray(values)) {\n return values.includes(value);\n }\n return value === values;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'replaceValue',\n})\nexport class ReplaceValuePipe implements PipeTransform {\n transform(value: string, pattern = '', replace = ''): string {\n if (!value) {\n return '';\n }\n return value.replace(pattern, replace);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'roundValue',\n})\nexport class RoundValuePipe implements PipeTransform {\n transform(value: number): number {\n if (!value) {\n return 0;\n }\n return Math.round(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'startsWith',\n})\nexport class StartsWithPipe implements PipeTransform {\n transform(value: string, pattern: string): boolean {\n if (!value) {\n return false;\n }\n return value.trim().toLowerCase().startsWith(pattern.trim().toLowerCase());\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isEmpty } from 'lodash';\n\nimport { TableFilterItem } from '@dashboards/components/dashboard-table-filter/config/interfaces/table-filter-item.interface';\nimport { paramsCompare } from '@shared/functions/params-compare.function';\nimport { ParamsCompareItem } from '@shared/interfaces/params-compare-item';\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\n\n@Pipe({\n name: 'taskTableSubsectionResultCount',\n})\nexport class TaskTableSubsectionResultCountPipe implements PipeTransform {\n transform(tickets: RestTicketModel[], filterItem: TableFilterItem): number {\n if (!tickets?.length || !filterItem) {\n return 0;\n }\n\n return (\n tickets.filter(data => {\n if (isEmpty(filterItem) || !filterItem?.assigneeId) {\n return true;\n }\n\n const compareParams: ParamsCompareItem[] = [];\n\n if (filterItem?.assigneeId) {\n compareParams.push({\n currentValue: data.assigneeId,\n expectValue: filterItem.assigneeId,\n });\n }\n\n return paramsCompare(compareParams);\n })?.length || 0\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'toFixedValue',\n})\nexport class ToFixedValuePipe implements PipeTransform {\n transform(value: number, fractionDigits = 2): string {\n if (isNaN(value)) {\n return null;\n }\n return value?.toFixed(fractionDigits);\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { BoardCurrencyPipe } from '@shared/pipes/board-currency.pipe';\nimport { EnumerationUserPipe } from '@shared/pipes/enumeration-user.pipe';\nimport { FileMimeTypePipe } from '@shared/pipes/file-mime-type.pipe';\nimport { FormatToAvatarPipe } from '@shared/pipes/format-to-avatar.pipe';\nimport { IsSaveGeneralRoleDisabledPipe } from '@shared/pipes/is-save-general-role-disabled.pipe';\nimport { IsSubmitRolesAndUnitsDisabledPipe } from '@shared/pipes/is-submit-roles-and-units-disabled.pipe';\nimport { IsUserExistingPipe } from '@shared/pipes/is-user-existing.pipe';\nimport { LabelAvailableDayInStepPipe } from '@shared/pipes/label-available-day-in-step.pipe';\nimport { LabelDaySinceStepPipe } from '@shared/pipes/label-day-since-step.pipe';\nimport { PluralizationPipe } from '@shared/pipes/pluralization.pipe';\nimport { PriorityIconPipe } from '@shared/pipes/priority-icon.pipe';\nimport { PriorityToCssClassPipe } from '@shared/pipes/priority-to-css-class.pipe';\nimport { PropertiesToRadioInputPipe } from '@shared/pipes/properties-to-radio-input.pipe';\nimport { SafeHtmlPipe } from '@shared/pipes/safe-html.pipe';\nimport { TurnoverPhaseToStatusPipe } from '@shared/pipes/turnover-phase-to-status.pipe';\nimport { ValueLengthPipe } from '@shared/pipes/value-length.pipe';\nimport { WorkflowPhaseToProgressValuePipe } from '@shared/pipes/workflow-phase-to-progress-value.pipe';\n\nimport { BidStatusTypePipe } from './bid-status-type.pipe';\nimport { BooleanToStringPipe } from './boolean-to-string.pipe';\nimport { CompactPipe } from './compact.pipe';\nimport { CompareOperatorPipe } from './compare-operator.pipe';\nimport { CustomCurrencyShortWithSuffixPipe } from './custom-currency-short-with-suffix.pipe';\nimport { CustomCurrencyPipe } from './custom-currency.pipe';\nimport { TodayDatePipe } from './date.pipe';\nimport { DayFromHoursPipe } from './day-from-date.pipe';\nimport { DaysAgoPipe } from './days-ago.pipe';\nimport { DaysInStepPipe } from './days-in-step.pipe';\nimport { DaysPastPipe } from './days-past.pipe';\nimport { DelinquencyGroupInvalidPipe } from './delinquency-group-invalid.pipe';\nimport { DelinquencyPristineGroupPipe } from './delinquency-pristine-group.pipe';\nimport { ElapsedDatePipe } from './elapsed-date.pipe';\nimport { ElapsedDaysMidRangePipe } from './elapsed-days-mid-range.pipe';\nimport { EnumValueToDisplayTextPipe } from './enum-value-to-display-text.pipe';\nimport { EnumerationValuePipe } from './enumeration-value.pipe';\nimport { EscapeHtmlPipe } from './escape-html.pipe';\nimport { FieldTypePipe } from './field-type.pipe';\nimport { FileSizePipe } from './file-size.pipe';\nimport { FileToObjectUrlPipe } from './file-to-object-url.pipe';\nimport { FindByIdPipe } from './find-by-id.pipe';\nimport { FirstPipe } from './first.pipe';\nimport { GetCurrentWorkflowStepPipe } from './get-current-workflow-step.pipe';\nimport { GetFromGroupPipe } from './get-from-group.pipe';\nimport { GetPercentageValuePipe } from './get-percentage-value.pipe';\nimport { GetWorkflowStepPipe } from './get-workflow-step.pipe';\nimport { HoursPastPipe } from './hours-past.pipe';\nimport { HumanizePipe } from './humanize.pipe';\nimport { IsIncludePipe } from './is-include.pipe';\nimport { IsOddPipe } from './is-odd.pipe';\nimport { KanbanHeaderWorkflowPhasePipe } from './kanban-header-workflow-phase.pipe';\nimport { KanbanHeaderWorkflowStepPipe } from './kanban-header-workflow-step.pipe';\nimport { KpiHeaderPipe } from './kpi-header.pipe';\nimport { KpiTaskValuePipe } from './kpi-task-value.pipe';\nimport { KpiValuePipe } from './kpi-value.pipe';\nimport { LabelDayInStepPipe } from './label-day-in-step.pipe';\nimport { LostRevenuePipe } from './lost-revenue.pipe';\nimport { MeasureTypePipe } from './measure-type.pipe';\nimport { MentionCommentPipe } from './mention-comment.pipe';\nimport { NotEmptyPropsAmountPipe } from './not-empty-props-amount.pipe';\nimport { NumberValidationPipe } from './number-validation.pipe';\nimport { NumberPipe } from './number.pipe';\nimport { ParseFloatPipe } from './parse-float.pipe';\nimport { PhysicalAddressPipe } from './physical-address.pipe';\nimport { PriorityCssPipe } from './priority-css.pipe';\nimport { ReplaceValuePipe } from './replace-value.pipe';\nimport { RoundValuePipe } from './round-value.pipe';\nimport { SectionIdPipe } from './section-id.pipe';\nimport { StartsWithPipe } from './starts-with.pipe';\nimport { TaskTableSubsectionResultCountPipe } from './task-table-subsection-result-count.pipe';\nimport { TextMaskPipe } from './text-mask.pipe';\nimport { ThresholdConfigurationPipe } from './threshold-configuration.pipe';\nimport { ThresholdPriorityCssPipe } from './threshold-priority-css.pipe';\nimport { ThresholdStepConfigurationPipe } from './threshold-step-configuration.pipe';\nimport { TimeDiffPipe } from './time-diff.pipe';\nimport { TimeFromDatePipe } from './time-from-date.pipe';\nimport { ToFixedValuePipe } from './to-fixed-value.pipe';\nimport { TruncateTextPipe } from './truncate-text.pipe';\nimport { TrustHtmlPipe } from './trust-html.pipe';\nimport { TurnoverAttachmentPipe } from './turnover-attachment.pipe';\nimport { UppercaseFirstLetterOfWordsPipe } from './uppercase-first-letter-of-words-pipe';\nimport { UtcDatePipe } from './utc-date.pipe';\nimport { ValueIfNonZeroPipe } from './valueIfNonZero.pipe';\nimport { ValueIfPositivePipe } from './valueIfPositive.pipe';\nimport { WorkflowPhaseDonePipe } from './workflow-phase-done.pipe';\nimport { WorkflowPhaseTypePipe } from './workflow-phase-type.pipe';\nimport { WorkflowStepDonePipe } from './workflow-step-done.pipe';\nimport { YesEmptyPipe } from './yesEmpty.pipe';\n\nconst PIPES = [\n TrustHtmlPipe,\n PluralizationPipe,\n ValueIfNonZeroPipe,\n ValueIfPositivePipe,\n YesEmptyPipe,\n TodayDatePipe,\n FormatToAvatarPipe,\n KpiHeaderPipe,\n KpiValuePipe,\n KpiTaskValuePipe,\n WorkflowPhaseTypePipe,\n KanbanHeaderWorkflowPhasePipe,\n WorkflowPhaseDonePipe,\n TextMaskPipe,\n TimeFromDatePipe,\n EnumerationValuePipe,\n IsIncludePipe,\n BidStatusTypePipe,\n TurnoverAttachmentPipe,\n DaysAgoPipe,\n CompareOperatorPipe,\n ToFixedValuePipe,\n EnumValueToDisplayTextPipe,\n ParseFloatPipe,\n GetPercentageValuePipe,\n EscapeHtmlPipe,\n FieldTypePipe,\n BooleanToStringPipe,\n UtcDatePipe,\n PhysicalAddressPipe,\n IsUserExistingPipe,\n IsSubmitRolesAndUnitsDisabledPipe,\n IsSaveGeneralRoleDisabledPipe,\n IsOddPipe,\n FileToObjectUrlPipe,\n DelinquencyGroupInvalidPipe,\n DelinquencyPristineGroupPipe,\n SectionIdPipe,\n KanbanHeaderWorkflowStepPipe,\n PriorityIconPipe,\n PriorityToCssClassPipe,\n PropertiesToRadioInputPipe,\n TurnoverPhaseToStatusPipe,\n WorkflowPhaseToProgressValuePipe,\n TaskTableSubsectionResultCountPipe,\n RoundValuePipe,\n ReplaceValuePipe,\n PriorityCssPipe,\n DaysInStepPipe,\n FileSizePipe,\n WorkflowStepDonePipe,\n LostRevenuePipe,\n ThresholdPriorityCssPipe,\n DayFromHoursPipe,\n FindByIdPipe,\n GetWorkflowStepPipe,\n StartsWithPipe,\n TimeDiffPipe,\n FirstPipe,\n GetFromGroupPipe,\n ElapsedDaysMidRangePipe,\n LabelDayInStepPipe,\n LabelDaySinceStepPipe,\n CustomCurrencyPipe,\n CustomCurrencyShortWithSuffixPipe,\n DaysPastPipe,\n HoursPastPipe,\n GetCurrentWorkflowStepPipe,\n MeasureTypePipe,\n NumberPipe,\n NumberValidationPipe,\n MentionCommentPipe,\n ThresholdConfigurationPipe,\n ThresholdStepConfigurationPipe,\n TruncateTextPipe,\n HumanizePipe,\n SafeHtmlPipe,\n CompactPipe,\n LabelAvailableDayInStepPipe,\n NotEmptyPropsAmountPipe,\n UppercaseFirstLetterOfWordsPipe,\n ElapsedDatePipe,\n EnumerationUserPipe,\n ValueLengthPipe,\n BoardCurrencyPipe,\n FileMimeTypePipe,\n];\n\n@NgModule({\n imports: [],\n exports: [...PIPES],\n declarations: [...PIPES],\n providers: [...PIPES, CurrencyPipe],\n})\nexport class PipesModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'pluralization',\n})\nexport class PluralizationPipe implements PipeTransform {\n transform(value: string, count: number): string {\n if (!value) return null;\n\n if (count == null) {\n return value;\n }\n\n if (count === 0 || count > 1) {\n return `${value}s`;\n }\n return value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { PriorityType } from '@shared/enums/priority-type';\n\n@Pipe({\n name: 'priorityCss',\n})\nexport class PriorityCssPipe implements PipeTransform {\n transform(ticketPriorityType: PriorityType, fontColor = false): string {\n let result = '';\n switch (ticketPriorityType) {\n case PriorityType.High: {\n result = 'priority-high';\n break;\n }\n case PriorityType.Medium: {\n result = 'priority-medium';\n break;\n }\n case PriorityType.Low: {\n result = 'priority-low';\n break;\n }\n default: {\n result = 'priority-low';\n break;\n }\n }\n\n return fontColor ? result + '-color' : result;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { PriorityType } from '@shared/enums/priority-type';\n\n@Pipe({\n name: 'priorityIcon',\n})\nexport class PriorityIconPipe implements PipeTransform {\n transform(ticketPriorityType: PriorityType): EColorPalette {\n switch (ticketPriorityType) {\n case PriorityType.High: {\n return EColorPalette.cRed2;\n }\n\n case PriorityType.Medium: {\n return EColorPalette.cOrange;\n }\n\n case PriorityType.Low: {\n return EColorPalette.cGray2;\n }\n\n default: {\n return EColorPalette.cGray2;\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { PriorityType } from '@shared/enums/priority-type';\n\nconst TaskCssClasses = {\n ERROR: 'error',\n WARNING: 'warning',\n ACCENT: 'accent',\n};\n\n@Pipe({\n name: 'priorityToCssClass',\n})\nexport class PriorityToCssClassPipe implements PipeTransform {\n transform(value: PriorityType): string {\n switch (value) {\n case PriorityType.High:\n return TaskCssClasses.ERROR;\n case PriorityType.Medium:\n return TaskCssClasses.WARNING;\n default:\n return TaskCssClasses.ACCENT;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'sectionId',\n})\nexport class SectionIdPipe implements PipeTransform {\n transform(value: number, idPrefix = 'section_id_'): string {\n return `${idPrefix}${value}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'textMask',\n})\nexport class TextMaskPipe implements PipeTransform {\n transform(value: string, limit = 3, sign = '...'): string {\n if (!value) {\n return '';\n }\n if (value.length <= limit) {\n return value;\n }\n\n return `${value.slice(0, limit)}${sign}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isNumber } from 'lodash';\n\nimport { RestThresholdsConfiguration } from '@shared/interfaces/thresholds-configuration.interface';\n\n@Pipe({\n name: 'thresholdConfiguration',\n})\nexport class ThresholdConfigurationPipe implements PipeTransform {\n transform(value: number, configuration: RestThresholdsConfiguration): string {\n if (!isNumber(value) || !configuration) {\n return '';\n }\n\n const low =\n configuration.readyPhaseThreshold.lowThresholdValue + configuration.notReadyPhaseThreshold.lowThresholdValue;\n const high =\n configuration.readyPhaseThreshold.highThresholdValue + configuration.notReadyPhaseThreshold.highThresholdValue;\n\n if (value > high) {\n return 'threshold-high';\n }\n\n if (value < low) {\n return 'threshold-low';\n }\n\n return 'threshold-medium';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { PriorityType } from '@shared/enums/priority-type';\n\n@Pipe({\n name: 'thresholdPriorityCss',\n})\nexport class ThresholdPriorityCssPipe implements PipeTransform {\n transform(ticketPriorityType: PriorityType): string {\n switch (ticketPriorityType) {\n case PriorityType.High: {\n return 'threshold-high';\n }\n\n case PriorityType.Medium: {\n return 'threshold-medium';\n }\n\n case PriorityType.Low: {\n return 'threshold-low';\n }\n\n default: {\n return 'threshold-low';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isNumber } from 'lodash';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestThresholdsConfiguration } from '@shared/interfaces/thresholds-configuration.interface';\n\n@Pipe({\n name: 'thresholdStepConfiguration',\n})\nexport class ThresholdStepConfigurationPipe implements PipeTransform {\n transform(value: number, stepType: WorkflowStepEnumType, configuration: RestThresholdsConfiguration): string {\n if (!isNumber(value) || !configuration || !stepType) {\n return '';\n }\n\n const step = configuration.stepThresholds.find(s => s.workflowStepEnumType === stepType);\n\n if (!step) {\n return '';\n }\n\n if (value > step.highThresholdValue) {\n return 'threshold-high';\n }\n\n if (value < step.lowThresholdValue) {\n return 'threshold-low';\n }\n\n return 'threshold-medium';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment/moment';\n\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\nimport { suffixFunction } from '@shared/functions/suffix.function';\n\n@Pipe({\n name: 'timeDiff',\n})\nexport class TimeDiffPipe implements PipeTransform {\n constructor(private timezoneService: TimezoneService) {}\n\n transform(value: Date | string): string {\n const diffLabelPrefix = 'due in';\n const diffLabelSuffix = 'ago';\n\n const date = new Date(value);\n const today = this.timezoneService.getCurrentDate();\n\n const diffInYears = moment(today).diff(moment(date), 'years');\n const diffInMonths = moment(today).diff(moment(date), 'months');\n const diffInWeeks = moment(today).diff(moment(date), 'weeks');\n const diffInDays = moment(today).diff(moment(date), 'days');\n const diffInHours = moment(today).diff(moment(date), 'hours');\n\n if (diffInYears) {\n if (diffInYears > 0) {\n return `${this.getLabel(diffInYears, 'year')} ${diffLabelSuffix}`;\n }\n return `${diffLabelPrefix} ${this.getLabel(diffInYears, 'year')}`;\n }\n\n if (diffInMonths) {\n if (diffInMonths > 0) {\n return `${this.getLabel(diffInMonths, 'month')} ${diffLabelSuffix}`;\n }\n return `${diffLabelPrefix} ${this.getLabel(diffInMonths, 'month')}`;\n }\n\n if (diffInWeeks) {\n if (diffInWeeks > 0) {\n return `${this.getLabel(diffInWeeks, 'week')} ${diffLabelSuffix}`;\n }\n return `${diffLabelPrefix} ${this.getLabel(diffInWeeks, 'week')}`;\n }\n\n if (diffInDays) {\n if (diffInDays > 0) {\n if (diffInDays === 1) {\n return 'yesterday';\n }\n return `${this.getLabel(diffInDays, 'day')} ${diffLabelSuffix}`;\n }\n if (diffInDays === -1) {\n return `due tomorrow`;\n }\n return `${diffLabelPrefix} ${this.getLabel(diffInDays, 'day')}`;\n }\n\n if (diffInHours) {\n if (diffInHours > 0) {\n if (moment(today).isAfter(date)) {\n return 'yesterday';\n }\n return `today`;\n }\n return `due today`;\n }\n\n return `just now`;\n }\n\n getLabel(value: number, unit: string): string {\n value = Math.abs(value);\n\n return `${value} ${unit}${suffixFunction(value)}`;\n }\n}\n","export function suffixFunction(value: number): string {\n return value === 1 ? '' : 's';\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\n\n@Pipe({\n name: 'timeFromDate',\n pure: false,\n})\nexport class TimeFromDatePipe implements PipeTransform {\n constructor(public timezoneService: TimezoneService) {}\n\n transform(date: Date | string, showFullDate = false): string {\n if (!date) {\n return '';\n }\n\n const currrentDate = this.timezoneService.getCurrentDate();\n\n const dt = moment(date);\n const diff = moment(currrentDate).diff(dt, 'days');\n\n if (showFullDate || diff > 30) {\n return moment(date).format('M/D');\n } else {\n return moment(date).from(moment(currrentDate)); // TODO - to check in the future\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'truncateText',\n})\nexport class TruncateTextPipe implements PipeTransform {\n transform(value: string, patterns: string[]): string {\n let result = value || '';\n patterns.forEach(pattern => {\n const regex = new RegExp(`${pattern}`, 'gmi');\n result = result.replace(regex, '');\n });\n return result.trim();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'uppercaseFirstLetterOfWords',\n})\nexport class UppercaseFirstLetterOfWordsPipe implements PipeTransform {\n transform(text: string): string {\n return !!text\n ? text\n .toLowerCase()\n .split(' ')\n .map(word => word[0].toUpperCase() + word.substring(1))\n .join(' ')\n : '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { getUtc } from '@shared/functions/get-utc.function';\n\n@Pipe({\n name: 'utcDate',\n})\nexport class UtcDatePipe implements PipeTransform {\n transform(date: any): Date {\n if (!date) {\n return null;\n }\n return getUtc(date);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'valueLength',\n})\nexport class ValueLengthPipe implements PipeTransform {\n transform(value: string | number): number {\n return (value || '').toString().length;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'valueIfNonZero',\n})\nexport class ValueIfNonZeroPipe implements PipeTransform {\n transform(value: number): number {\n if (!value) return null;\n\n return value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'valueIfPositive' })\nexport class ValueIfPositivePipe implements PipeTransform {\n transform(value: number): number {\n if (!value) return null;\n\n if (0 > value) return null;\n\n return value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\n\n@Pipe({\n name: 'workflowPhaseDone',\n})\nexport class WorkflowPhaseDonePipe implements PipeTransform {\n transform(currentPhase: WorkflowPhaseType, defaultPhase: WorkflowPhaseType): EIcon {\n if (!currentPhase) {\n return null;\n }\n if (defaultPhase < currentPhase) {\n return EIcon.DONE_WB;\n }\n return null;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\n\n@Pipe({\n name: 'workflowPhaseType',\n})\nexport class WorkflowPhaseTypePipe implements PipeTransform {\n transform(workflowPhaseType: WorkflowPhaseType): string {\n switch (workflowPhaseType) {\n case WorkflowPhaseType.NotReady: {\n return 'NOT READY';\n }\n case WorkflowPhaseType.Ready: {\n return 'READY';\n }\n default: {\n return '';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\n\n@Pipe({\n name: 'workflowStepDone',\n})\nexport class WorkflowStepDonePipe implements PipeTransform {\n transform(step: WorkflowStepEnumType, currentStep: WorkflowStepEnumType): boolean {\n if (!step) {\n return false;\n }\n if (!currentStep) {\n return true;\n }\n return step <= currentStep;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'yesEmpty' })\nexport class YesEmptyPipe implements PipeTransform {\n transform(value: boolean): string {\n return value ? 'Y' : '';\n }\n}\n","import { createSelector } from '@ngrx/store';\n\nimport { routeStateFeatureKey } from '@shared/reducers/route.reducer';\n\nimport { selectCoreModule } from './core.selector';\n\nconst routeState = createSelector(selectCoreModule, coreState => coreState[routeStateFeatureKey]);\n\nexport const selectPreviousRoute = createSelector(routeState, state => state.previousRoute);\n","export function getStorageItem(key: string): T | undefined {\n const storageValue = localStorage.getItem(key);\n if (storageValue) {\n try {\n const parsedValue = JSON.parse(storageValue);\n return parsedValue as T;\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nexport function setStorageItem(key: string, value: T) {\n try {\n const storageValue = JSON.stringify(value);\n localStorage.setItem(key, storageValue);\n } catch (err) {\n console.error(err);\n }\n}\n\nexport function parseJSON(json: string) {\n return json != null ? (JSON.parse(json) as T) : undefined;\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport const DigitsValidator = (positiveOnly = false): ValidatorFn => {\n const regex = positiveOnly\n ? RegExp(/(^0(([,.]?)\\d)\\d*$)|(^[1-9]+\\d*(([,.]?)\\d)\\d*$)|(^\\d+$)/)\n : new RegExp(/^[-]?(0(([,.]?)\\d)\\d*$)|(^[-]?[1-9]+\\d*(([,.]?)\\d)\\d*$)|(^[-]?\\d+$)/);\n\n return (control: AbstractControl): { [key: string]: boolean } => {\n if (control?.value && !regex.test(control.value)) {\n return positiveOnly\n ? {\n digitsPositive: true,\n }\n : {\n digits: true,\n };\n }\n return null;\n };\n};\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IconModule } from '@app/modules/ui-components/components/icon/icon.module';\nimport { PipesModule } from '@shared/pipes/pipes.module';\n\nimport { AttachmentItemComponent } from './attachment-item.component';\n\n@NgModule({\n declarations: [AttachmentItemComponent],\n imports: [CommonModule, MatButtonModule, IconModule, MatTooltipModule, PipesModule, PipesModule],\n exports: [AttachmentItemComponent],\n})\nexport class AttachmentItemModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IconModule } from '@app/modules/ui-components/components/icon/icon.module';\nimport { InputModule } from '@app/modules/ui-components/components/input/input.module';\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { InputFileModule } from '@app/modules/ui-components/components/input-file/input-file.module';\nimport { RadioButtonModule } from '@app/modules/ui-components/components/radio-button/radio-button.module';\nimport { AttachmentItemModule } from '@ui-components/components/attachment-item/attachment-item.module';\n\nimport { AttachmentComponent } from './attachment.component';\n\n@NgModule({\n declarations: [AttachmentComponent],\n exports: [AttachmentComponent],\n imports: [\n CommonModule,\n RadioButtonModule,\n ReactiveFormsModule,\n InputFileModule,\n InputModule,\n MatButtonModule,\n IconModule,\n InputErrorModule,\n MatTooltipModule,\n AttachmentItemModule,\n MatProgressSpinnerModule,\n ],\n})\nexport class AttachmentModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AttachmentsListComponent } from './attachments-list.component';\nimport { AttachmentItemModule } from '../attachment-item/attachment-item.module';\n\n@NgModule({\n declarations: [AttachmentsListComponent],\n imports: [CommonModule, AttachmentItemModule],\n exports: [AttachmentsListComponent],\n})\nexport class AttachmentsListModule {}\n","\n \n \n \n \n \n\n\n\n
{{ firstName | formatToAvatar: lastName }}
\n
\n\n\n \n\n\n\n
{{ fullName }}
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { AvatarService } from '@ui-components/components/avatar/services/avatar.service';\n\n@Component({\n selector: 'app-avatar',\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AvatarComponent extends ComponentAbstract implements OnInit {\n readonly SYSTEM_USER_ID = 1;\n\n userId = 0;\n fullName = '';\n firstName = '';\n lastName = '';\n avatarTheme = 'default';\n\n @Input() set userInfo(userInfo: RestUserModel | UserData) {\n this.avatarTheme = this.avatarService.getUserConfig(userInfo?.id);\n this.userId = userInfo?.id;\n if (userInfo?.id === this.SYSTEM_USER_ID) {\n this.avatarTheme = 'system';\n this.firstName = 'System';\n this.lastName = '';\n } else {\n this.firstName = userInfo?.firstName || '?';\n this.lastName = userInfo?.lastName || '?';\n }\n this.setFullName();\n }\n\n @Input() containerCss = '';\n @Input() icon: EIcon;\n @Input() iconSize = 24;\n @Input() showFullName = false;\n @Input() showIcon = true;\n\n constructor(protected cdr: ChangeDetectorRef, private avatarService: AvatarService) {\n super(cdr);\n }\n\n ngOnInit(): void {}\n\n private setFullName() {\n this.fullName = `${this.firstName || ''} ${this.lastName || ''}`;\n this.cdr.detectChanges();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { AvatarComponent } from '@app/modules/ui-components/components/avatar/avatar.component';\nimport { IconModule } from '@app/modules/ui-components/components/icon/icon.module';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { AvatarService } from '@ui-components/components/avatar/services/avatar.service';\n\n@NgModule({\n declarations: [AvatarComponent],\n imports: [CommonModule, PipesModule, IconModule, MatTooltipModule],\n providers: [AvatarService],\n exports: [AvatarComponent],\n})\nexport class AvatarModule {}\n","import { Injectable } from '@angular/core';\nimport { first } from 'lodash';\n\nimport { LocalStorageDataEnum } from '@shared/enums/local-storage-data.enum';\nimport { getRandomValue } from '@shared/functions/get-random-value.function';\nimport { AvatarThemeItem } from '@ui-components/components/avatar/config/iterfaces/avatar-theme-item';\n\n@Injectable()\nexport class AvatarService {\n configList: AvatarThemeItem[] = [];\n private readonly themePrefix = 'theme-';\n private readonly themeAmount = 16;\n\n constructor() {\n this.setThemeConfigList();\n }\n\n getUserConfig(userId: number): string {\n if (!userId) {\n return 'default';\n }\n\n let avatarThemeItem = first(this.configList.filter(item => item.userId === userId));\n const themeNumber = +avatarThemeItem?.themeNumber;\n\n if (!avatarThemeItem || isNaN(themeNumber) || themeNumber > this.themeAmount || themeNumber < 0) {\n avatarThemeItem = {\n userId,\n themeNumber: this.getAvatarTheme(),\n };\n\n this.updateAvatarTheme(avatarThemeItem);\n }\n\n return `${this.themePrefix}${avatarThemeItem.themeNumber}`;\n }\n\n private updateAvatarTheme(avatarThemeItem: AvatarThemeItem) {\n this.configList = this.configList.filter(c => c.userId != avatarThemeItem.userId);\n this.configList.push(avatarThemeItem);\n localStorage.setItem(LocalStorageDataEnum.AVATAR_USER_CONFIG_LIST, JSON.stringify(this.configList));\n }\n\n private setThemeConfigList() {\n this.configList =\n (JSON.parse(localStorage.getItem(LocalStorageDataEnum.AVATAR_USER_CONFIG_LIST)) as AvatarThemeItem[]) || [];\n }\n\n private getAvatarTheme(): number {\n return getRandomValue(1, this.themeAmount);\n }\n}\n","export function getRandomValue(minValue: number, maxValue: number) {\n minValue = Math.ceil(minValue);\n maxValue = Math.floor(maxValue);\n return Math.floor(Math.random() * (maxValue - minValue + 1)) + minValue;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { ButtonComponent } from './button.component';\n\n@NgModule({\n declarations: [ButtonComponent],\n imports: [CommonModule, MatButtonModule, MatProgressSpinnerModule],\n exports: [ButtonComponent],\n})\nexport class ButtonModule {}\n","
\n \n
\n\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n\n
\n \n
\n
\n\n\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from '@angular/core';\n\nimport { DashboardsAbstract } from '@main-application/dashboards/components/abstract/dashboards.abstract';\n\n@Component({\n selector: 'app-dashboard-container',\n templateUrl: './dashboard-container.component.html',\n styleUrls: ['./dashboard-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DashboardContainerComponent extends DashboardsAbstract {\n loading = true;\n emptyDashboard = false;\n\n @Input() containerCss = '';\n @Input() bodyCss = '';\n @Input() stickyFooter = false;\n @Input() customEmptyDashboardTemplate: TemplateRef;\n\n @Input() set isLoading(isLoading: boolean) {\n this.loading = isLoading === undefined ? true : isLoading;\n this.cdr.detectChanges();\n }\n\n @Input() set isEmptyDashboard(isEmptyDashboard: boolean) {\n this.emptyDashboard = isEmptyDashboard === undefined ? false : isEmptyDashboard;\n this.cdr.detectChanges();\n }\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onScroll = new EventEmitter<{ position: number }>();\n\n constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n onBodyScroll($event) {\n this.onScroll.emit({ position: $event.target.scrollTop });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { IconModule } from '@app/modules/ui-components/components/icon/icon.module';\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\n\nimport { DateDropdownComponent } from './date-dropdown.component';\n\n@NgModule({\n declarations: [DateDropdownComponent],\n imports: [\n CommonModule,\n InputErrorModule,\n IconModule,\n MatMenuModule,\n MatDatepickerModule,\n MatButtonModule,\n NgxMaskModule,\n ReactiveFormsModule,\n MatTooltipModule,\n ],\n exports: [DateDropdownComponent],\n})\nexport class DateDropdownModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { DividerComponent } from './divider.component';\n\n@NgModule({\n declarations: [DividerComponent],\n exports: [DividerComponent],\n imports: [CommonModule, MatDividerModule],\n})\nexport class DividerModule {}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { selectUserData } from '@shared/selectors/user.selectors';\n\n@UntilDestroy()\n@Component({\n selector: 'app-empty-dashboard',\n templateUrl: './empty-dashboard.component.html',\n styleUrls: ['./empty-dashboard.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmptyDashboardComponent extends ComponentAbstract implements OnInit, OnDestroy {\n userData: UserData;\n userData$: Observable;\n\n constructor(protected cdr: ChangeDetectorRef, private store: Store<{}>) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.userData$ = this.store.select(selectUserData);\n this.userData$\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {}\n}\n","
\n
\n

Hello {{ userData?.firstName || '' }} {{ userData?.lastName || '' }}!

\n Here you will see your tasks\n
\n
\n \"\"\n
No data to display.
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EIcon } from '@shared/enums/icon.enum';\n\n@Component({\n selector: 'app-empty-data',\n templateUrl: './empty-data.component.html',\n styleUrls: ['./empty-data.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmptyDataComponent extends ComponentAbstract implements OnInit {\n @Input() header = 'No data to display';\n @Input() info = 'The selected turnover does not exist, or there was an error retrieving it';\n @Input() icon: EIcon = EIcon.ERROR;\n\n constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n ngOnInit(): void {}\n}\n","\n \n

{{ header }}

\n
{{ info }}
\n\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\n\nimport { IconComponent } from './icon.component';\n\n@NgModule({\n declarations: [IconComponent],\n imports: [CommonModule, PipesModule, MatIconModule],\n exports: [IconComponent],\n})\nexport class IconModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { DirectivesModule } from '@shared/directives/directives.module';\nimport { AutoresizeModule } from '@ui-components/directives/autoresize/autoresize.module';\n\nimport { InputAreaComponent } from './input-area.component';\n\n@NgModule({\n declarations: [InputAreaComponent],\n imports: [CommonModule, InputErrorModule, ReactiveFormsModule, AutoresizeModule, DirectivesModule, MatInputModule],\n exports: [InputAreaComponent],\n})\nexport class InputAreaModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { InputErrorService } from '@app/modules/ui-components/components/input-error/services/input-error.service';\n\nimport { InputErrorComponent } from './input-error.component';\n\n@NgModule({\n declarations: [InputErrorComponent],\n providers: [InputErrorService],\n exports: [InputErrorComponent],\n imports: [CommonModule],\n})\nexport class InputErrorModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { IconModule } from '@app/modules/ui-components/components/icon/icon.module';\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { DirectivesModule } from '@shared/directives/directives.module';\nimport { PipesModule } from '@shared/pipes/pipes.module';\n\nimport { InputFileComponent } from './input-file.component';\n\n@NgModule({\n declarations: [InputFileComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatInputModule,\n NgxMaskModule,\n IconModule,\n InputErrorModule,\n MatButtonModule,\n PipesModule,\n MatTooltipModule,\n DirectivesModule,\n ],\n exports: [InputFileComponent],\n})\nexport class InputFileModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { IconModule } from '@app/modules/ui-components/components/icon/icon.module';\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { PipesModule } from '@shared/pipes/pipes.module';\n\nimport { InputTypeFileComponent } from './input-type-file.component';\n\n@NgModule({\n declarations: [InputTypeFileComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatInputModule,\n NgxMaskModule,\n IconModule,\n InputErrorModule,\n MatButtonModule,\n PipesModule,\n MatTooltipModule,\n ],\n exports: [InputTypeFileComponent],\n})\nexport class InputTypeFileModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { InputComponent } from './input.component';\nimport { IconModule } from '../icon/icon.module';\nimport { InputErrorModule } from '../input-error/input-error.module';\n\n@NgModule({\n declarations: [InputComponent],\n imports: [\n CommonModule,\n MatInputModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n NgxMaskModule.forRoot(),\n IconModule,\n InputErrorModule,\n ],\n exports: [InputComponent],\n})\nexport class InputModule {}\n","\n \n \n
\n
\n play_circle_outline\n
\n
\n
\n\n \n \n \n \n \n\n \n \n \n \n \n\n\n\n \n\n\n\n \n {{ comment.value | textMask: 50 }}\n \n \n \n \n\n\n\n \n \n \n\n\n\n \n
\n \n \n \n \n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { UntypedFormControl, Validators } from '@angular/forms';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { FileMimeType } from '@shared/interfaces/file-mime-types';\nimport { FileMimeTypePipe } from '@shared/pipes/file-mime-type.pipe';\n\n@Component({\n selector: 'app-picture',\n templateUrl: './picture.component.html',\n styleUrls: ['./picture.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PictureComponent extends ComponentAbstract implements OnInit {\n currentComment = '';\n comment: UntypedFormControl = new UntypedFormControl(null, [Validators.maxLength(256)]);\n editMode = false;\n\n @Input() picture: RestGenericTypedAttachment;\n @Input() file: File;\n @Input() active: boolean;\n @Input() showDeleteButton = false;\n @Input() lockDeleteButton = false;\n @Input() showCommentSection = false;\n @Input() lockCommentActionButtons = false;\n @Input() showCommentActionButtons = false;\n\n @Output() selectPictureEvent: EventEmitter = new EventEmitter();\n @Output() deletePictureEvent: EventEmitter = new EventEmitter();\n @Output() updatePictureEvent: EventEmitter =\n new EventEmitter();\n\n protected readonly FileMimeType = FileMimeType;\n\n constructor(protected cdr: ChangeDetectorRef, private fileMimeType: FileMimeTypePipe) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.comment.setValue(this.picture?.description || null);\n }\n\n selectPicture() {\n this.selectPictureEvent.emit();\n }\n\n deleteItem() {\n this.deletePictureEvent.emit();\n }\n\n toggleEditMode(editMode: boolean) {\n if (this.showCommentActionButtons) {\n this.editMode = editMode;\n if (this.editMode) {\n this.currentComment = this.comment.value;\n }\n\n this.cdr.detectChanges();\n }\n }\n\n save() {\n const attachment: RestGenericTypedAttachment = {\n ...this.picture,\n description: this.comment.value,\n };\n\n this.updatePictureEvent.emit(attachment);\n this.toggleEditMode(false);\n }\n\n cancel() {\n this.comment.setValue(this.currentComment);\n this.currentComment = '';\n this.toggleEditMode(false);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { IconModule } from '@ui-components/components/icon/icon.module';\nimport { InputAreaModule } from '@ui-components/components/input-area/input-area.module';\n\nimport { PictureComponent } from './picture.component';\n\n@NgModule({\n declarations: [PictureComponent],\n imports: [\n CommonModule,\n MatButtonModule,\n MatTooltipModule,\n IconModule,\n PipesModule,\n InputAreaModule,\n ReactiveFormsModule,\n MatIconModule,\n ],\n exports: [PictureComponent],\n})\nexport class PictureModule {}\n","\n {{ option.label }}\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, UntypedFormControl } from '@angular/forms';\nimport { MatChipList } from '@angular/material/chips';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { tap } from 'rxjs/operators';\n\nimport { PillOptions } from '@shared/enums/pill-options.enum';\nimport { ITooltipRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\n@UntilDestroy()\n@Component({\n selector: 'app-pill-list',\n templateUrl: './pill-list.component.html',\n styleUrls: ['./pill-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PillListComponent implements OnInit, OnDestroy, ControlValueAccessor {\n availableOptionsValue: ITooltipRadioButtonOption[] = [];\n @Input() set availableOptions(value: (PillOptions | string | ITooltipRadioButtonOption)[]) {\n if (value.length && typeof value[0] != 'object') {\n this.availableOptionsValue = value.map(e => ({\n label: e as string,\n value: e as T,\n tooltip: '',\n }));\n } else {\n this.availableOptionsValue = value as ITooltipRadioButtonOption[];\n }\n }\n @Input() selectable = true;\n @Input() pillCss = '';\n @Input() pillListCss: string;\n @Input() disabled = false;\n\n @ViewChild(MatChipList) chipList!: MatChipList;\n\n control = new UntypedFormControl();\n\n constructor(@Self() @Optional() protected ngControl: NgControl, private cdr: ChangeDetectorRef) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n writeValue(value: string): void {\n this.control.setValue(value);\n this.cdr.detectChanges();\n }\n\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched();\n }\n\n setDisabledState?(isDisabled: boolean): void {\n isDisabled ? this.control.disable() : this.control.enable();\n }\n\n ngOnInit(): void {\n this.control.valueChanges\n .pipe(\n untilDestroyed(this),\n tap(value => {\n this.onChanged(value);\n })\n )\n .subscribe();\n }\n\n selectOption(option: T) {\n if (this.selectable) {\n this.control.setValue(option);\n }\n }\n\n ngOnDestroy(): void {}\n\n private onChanged = (value: string) => {};\n\n private onTouched = () => {};\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { PillListComponent } from './pill-list.component';\n\n@NgModule({\n declarations: [PillListComponent],\n imports: [CommonModule, MatChipsModule, MatTooltipModule],\n exports: [PillListComponent],\n})\nexport class PillListModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NgSelectModule } from '@ng-select/ng-select';\n\nimport { InputModule } from '@app/modules/ui-components/components/input/input.module';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\n\nimport { RadioButtonDropdownComponent } from './radio-button-dropdown.component';\nimport { IconModule } from '../icon/icon.module';\nimport { RadioButtonModule } from '../radio-button/radio-button.module';\n\n@NgModule({\n declarations: [RadioButtonDropdownComponent],\n imports: [\n CommonModule,\n MatMenuModule,\n RadioButtonModule,\n ReactiveFormsModule,\n IconModule,\n MatButtonModule,\n InputModule,\n NgSelectModule,\n PipesModule,\n InputErrorModule,\n MatTooltipModule,\n MatProgressSpinnerModule,\n MatDividerModule,\n ],\n exports: [RadioButtonDropdownComponent],\n})\nexport class RadioButtonDropdownModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatRadioModule } from '@angular/material/radio';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\n\nimport { RadioButtonComponent } from './radio-button.component';\n\n@NgModule({\n declarations: [RadioButtonComponent],\n imports: [CommonModule, MatRadioModule, ReactiveFormsModule, PipesModule, InputErrorModule],\n exports: [RadioButtonComponent],\n})\nexport class RadioButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ReadOnlyFieldComponent } from './read-only-field.component';\n\n@NgModule({\n declarations: [ReadOnlyFieldComponent],\n imports: [CommonModule],\n exports: [ReadOnlyFieldComponent],\n})\nexport class ReadOnlyFieldModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { IconModule } from '@app/modules/ui-components/components/icon/icon.module';\nimport { SearchInputComponent } from '@app/modules/ui-components/components/search-input/search-input.component';\n\n@NgModule({\n declarations: [SearchInputComponent],\n imports: [CommonModule, IconModule, ReactiveFormsModule],\n exports: [SearchInputComponent],\n})\nexport class SearchInputModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { TreeModule } from '@circlon/angular-tree-component';\n\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { SelectTreeComponent } from '@app/modules/ui-components/components/select-tree/select-tree.component';\n\nimport { IconModule } from '../icon/icon.module';\n\n@NgModule({\n declarations: [SelectTreeComponent],\n imports: [CommonModule, TreeModule, InputErrorModule, MatMenuModule, MatInputModule, IconModule],\n exports: [SelectTreeComponent],\n})\nexport class SelectTreeModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { TableEmptyContentComponent } from './table-empty-content.component';\n\n@NgModule({\n declarations: [TableEmptyContentComponent],\n exports: [TableEmptyContentComponent],\n imports: [CommonModule],\n})\nexport class TableEmptyContentModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { IconModule } from '@app/modules/ui-components/components/icon/icon.module';\n\nimport { TableStatusToggleComponent } from './table-status-toggle.component';\n\n@NgModule({\n declarations: [TableStatusToggleComponent],\n exports: [TableStatusToggleComponent],\n imports: [CommonModule, IconModule, MatButtonModule, MatCheckboxModule, ReactiveFormsModule],\n})\nexport class TableStatusToggleModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { NgSelectModule } from '@ng-select/ng-select';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { IconModule } from '@ui-components/components/icon/icon.module';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\n\nimport { UserSelectDropdownComponent } from './user-select-dropdown.component';\n\n@NgModule({\n declarations: [UserSelectDropdownComponent],\n exports: [UserSelectDropdownComponent],\n imports: [\n CommonModule,\n NgSelectModule,\n ReactiveFormsModule,\n IconModule,\n PipesModule,\n InputErrorModule,\n MatProgressSpinnerModule,\n ],\n})\nexport class UserSelectDropdownModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AutoresizeDirective } from './autoresize.directive';\n\n@NgModule({\n declarations: [AutoresizeDirective],\n imports: [CommonModule],\n exports: [AutoresizeDirective],\n})\nexport class AutoresizeModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { InputModule } from '@ui-components/components/input/input.module';\nimport { RadioButtonModule } from '@ui-components/components/radio-button/radio-button.module';\nimport { RadioButtonDropdownModule } from '@ui-components/components/radio-button-dropdown/radio-button-dropdown.module';\nimport { SelectTreeModule } from '@ui-components/components/select-tree/select-tree.module';\n\nimport { AddVendorUserModalComponent } from './add-vendor-user-modal.component';\n\n@NgModule({\n declarations: [AddVendorUserModalComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n ReactiveFormsModule,\n InputModule,\n RadioButtonDropdownModule,\n SelectTreeModule,\n RadioButtonModule,\n ],\n})\nexport class AddVendorUserModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IconModule } from '@ui-components/components/icon/icon.module';\nimport { PictureModule } from '@ui-components/components/picture/picture.module';\n\nimport { GalleryModalComponent } from './gallery-modal.component';\n\n@NgModule({\n declarations: [GalleryModalComponent],\n imports: [CommonModule, MatDialogModule, MatButtonModule, PictureModule, IconModule, MatTooltipModule],\n})\nexport class GalleryModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { InfoModalComponent } from './info-modal.component';\n\n@NgModule({\n declarations: [InfoModalComponent],\n imports: [CommonModule, MatDialogModule, MatButtonModule],\n exports: [InfoModalComponent],\n})\nexport class InfoModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { IconModule } from '@ui-components/components/icon/icon.module';\nimport { InputModule } from '@ui-components/components/input/input.module';\nimport { RadioButtonDropdownModule } from '@ui-components/components/radio-button-dropdown/radio-button-dropdown.module';\n\nimport { NewBulkScopeComponent } from './new-bulk-scope.component';\n\n@NgModule({\n declarations: [NewBulkScopeComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n InputModule,\n ReactiveFormsModule,\n IconModule,\n MatProgressSpinnerModule,\n RadioButtonDropdownModule,\n ],\n})\nexport class NewBulkScopeModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { RouterModule } from '@angular/router';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { ReadOnlyFieldModule } from '@ui-components/components/read-only-field/read-only-field.module';\nimport { UserSelectDropdownModule } from '@ui-components/components/user-select-dropdown/user-select-dropdown.module';\n\nimport { NextStepAssigneeModalComponent } from './next-step-assignee-modal.component';\n\n@NgModule({\n declarations: [NextStepAssigneeModalComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n PipesModule,\n ReadOnlyFieldModule,\n UserSelectDropdownModule,\n ReactiveFormsModule,\n MatCheckboxModule,\n MatProgressSpinnerModule,\n RouterModule,\n FormsModule,\n ],\n})\nexport class NextStepAssigneeModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { InputModule } from '@ui-components/components/input/input.module';\n\nimport { PromptModalComponent } from './prompt-modal.component';\n\n@NgModule({\n declarations: [PromptModalComponent],\n imports: [CommonModule, MatDialogModule, MatButtonModule, ReactiveFormsModule, InputModule],\n})\nexport class PromptModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { AttachmentModule } from '@ui-components/components/attachment/attachment.module';\nimport { AttachmentItemModule } from '@ui-components/components/attachment-item/attachment-item.module';\nimport { AttachmentsListModule } from '@ui-components/components/attachments-list/attachments-list.module';\nimport { DateDropdownModule } from '@ui-components/components/date-dropdown/date-dropdown.module';\nimport { InputModule } from '@ui-components/components/input/input.module';\nimport { InputAreaModule } from '@ui-components/components/input-area/input-area.module';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\nimport { PictureModule } from '@ui-components/components/picture/picture.module';\nimport { RadioButtonDropdownModule } from '@ui-components/components/radio-button-dropdown/radio-button-dropdown.module';\nimport { TableStatusToggleModule } from '@ui-components/components/table-status-toggle/table-status-toggle.module';\nimport { UserSelectDropdownModule } from '@ui-components/components/user-select-dropdown/user-select-dropdown.module';\n\nimport { TicketPreviewModalComponent } from './ticket-preview-modal.component';\n\n@NgModule({\n declarations: [TicketPreviewModalComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n ReactiveFormsModule,\n InputModule,\n RadioButtonDropdownModule,\n InputErrorModule,\n DateDropdownModule,\n AttachmentItemModule,\n AttachmentModule,\n TableStatusToggleModule,\n MatButtonModule,\n PictureModule,\n MatProgressSpinnerModule,\n UserSelectDropdownModule,\n InputAreaModule,\n AttachmentsListModule,\n ],\n})\nexport class TicketPreviewModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { CompaniesStoreModule } from '@companies/companies-store.module';\nimport { InputModule } from '@ui-components/components/input/input.module';\nimport { RadioButtonModule } from '@ui-components/components/radio-button/radio-button.module';\nimport { RadioButtonDropdownModule } from '@ui-components/components/radio-button-dropdown/radio-button-dropdown.module';\nimport { SelectTreeModule } from '@ui-components/components/select-tree/select-tree.module';\n\nimport { UserPreviewModalComponent } from './user-preview-modal.component';\n\n@NgModule({\n declarations: [UserPreviewModalComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n ReactiveFormsModule,\n InputModule,\n RadioButtonDropdownModule,\n SelectTreeModule,\n RadioButtonModule,\n CompaniesStoreModule,\n ],\n})\nexport class UserPreviewModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { DividerModule } from '@ui-components/components/divider/divider.module';\nimport { InputModule } from '@ui-components/components/input/input.module';\nimport { RadioButtonDropdownModule } from '@ui-components/components/radio-button-dropdown/radio-button-dropdown.module';\n\nimport { AddVendorModalComponent } from './add-vendor-modal.component';\n\n@NgModule({\n declarations: [AddVendorModalComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n InputModule,\n ReactiveFormsModule,\n RadioButtonDropdownModule,\n MatProgressSpinnerModule,\n MatDividerModule,\n DividerModule,\n ],\n exports: [AddVendorModalComponent],\n})\nexport class AddVendorModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { CommentTooLongModalComponent } from './comment-too-long-modal.component';\n\n@NgModule({\n declarations: [CommentTooLongModalComponent],\n imports: [CommonModule, MatDialogModule, MatButtonModule],\n exports: [CommentTooLongModalComponent],\n})\nexport class CommentTooLongModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { ConfirmationModalComponent } from './confirmation-modal.component';\n\n@NgModule({\n declarations: [ConfirmationModalComponent],\n imports: [CommonModule, MatDialogModule, MatButtonModule, MatCheckboxModule, ReactiveFormsModule],\n exports: [ConfirmationModalComponent],\n})\nexport class ConfirmationModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableModule } from '@angular/material/table';\n\nimport { SpaceTemplateStoreModule } from '@main-application/space-template/store/space-template-store.module';\nimport { IconModule } from '@ui-components/components/icon/icon.module';\nimport { InputModule } from '@ui-components/components/input/input.module';\nimport { RadioButtonModule } from '@ui-components/components/radio-button/radio-button.module';\nimport { RadioButtonDropdownModule } from '@ui-components/components/radio-button-dropdown/radio-button-dropdown.module';\nimport { SelectTreeModule } from '@ui-components/components/select-tree/select-tree.module';\nimport { TableEmptyContentModule } from '@ui-components/components/table-empty-content/table-empty-content.module';\n\nimport { SpaceTemplateModalComponent } from './space-template-modal.component';\n\n@NgModule({\n declarations: [SpaceTemplateModalComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatTableModule,\n MatSortModule,\n ReactiveFormsModule,\n InputModule,\n RadioButtonDropdownModule,\n TableEmptyContentModule,\n SelectTreeModule,\n RadioButtonModule,\n SpaceTemplateStoreModule,\n IconModule,\n ],\n})\nexport class SpaceTemplateModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { AttachmentModule } from '@ui-components/components/attachment/attachment.module';\nimport { AttachmentItemModule } from '@ui-components/components/attachment-item/attachment-item.module';\nimport { AttachmentsListModule } from '@ui-components/components/attachments-list/attachments-list.module';\nimport { ButtonModule } from '@ui-components/components/button/button.module';\nimport { DateDropdownModule } from '@ui-components/components/date-dropdown/date-dropdown.module';\nimport { InputModule } from '@ui-components/components/input/input.module';\nimport { InputAreaModule } from '@ui-components/components/input-area/input-area.module';\nimport { RadioButtonDropdownModule } from '@ui-components/components/radio-button-dropdown/radio-button-dropdown.module';\nimport { UserSelectDropdownModule } from '@ui-components/components/user-select-dropdown/user-select-dropdown.module';\n\nimport { TurnoverPunchModalComponent } from './turnover-punch-modal.component';\n\n@NgModule({\n declarations: [TurnoverPunchModalComponent],\n imports: [\n CommonModule,\n AttachmentItemModule,\n AttachmentModule,\n InputAreaModule,\n InputModule,\n DateDropdownModule,\n RadioButtonDropdownModule,\n UserSelectDropdownModule,\n MatDialogModule,\n ButtonModule,\n MatButtonModule,\n ReactiveFormsModule,\n AttachmentsListModule,\n AttachmentItemModule,\n PipesModule,\n MatProgressSpinnerModule,\n ],\n})\nexport class TurnoverPunchModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { ModalsService } from '@app/modules/ui-components/modals/modals.service';\nimport { NewTurnoverModalModule } from '@app/modules/ui-components/modals/new-turnover-modal/new-turnover-modal.module';\nimport { WorkflowActionsService } from '@app/services/workflow-actions.service';\nimport { AttachmentModule } from '@ui-components/components/attachment/attachment.module';\nimport { DateDropdownModule } from '@ui-components/components/date-dropdown/date-dropdown.module';\nimport { InputModule } from '@ui-components/components/input/input.module';\nimport { InputFileModule } from '@ui-components/components/input-file/input-file.module';\nimport { InputTypeFileModule } from '@ui-components/components/input-type-file/input-type-file.module';\nimport { RadioButtonDropdownModule } from '@ui-components/components/radio-button-dropdown/radio-button-dropdown.module';\nimport { AddVendorUserModalModule } from '@ui-components/modals/add-vendor-user-modal/add-vendor-user-modal.module';\nimport { GalleryModalModule } from '@ui-components/modals/gallery-modal/gallery-modal.module';\nimport { InfoModalModule } from '@ui-components/modals/info-modal/info-modal.module';\nimport { NewBulkScopeModule } from '@ui-components/modals/new-bulk-scope/new-bulk-scope.module';\nimport { NextStepAssigneeModalModule } from '@ui-components/modals/next-step-assignee-modal/next-step-assignee-modal.module';\nimport { PromptModalModule } from '@ui-components/modals/prompt-modal/prompt-modal.module';\nimport { TicketPreviewModalModule } from '@ui-components/modals/ticket-preview-modal/ticket-preview-modal.module';\nimport { UserPreviewModalModule } from '@ui-components/modals/user-preview-modal/user-preview-modal.module';\n\nimport { AddBidModalComponent } from './add-bid-modal/add-bid-modal.component';\nimport { AddVendorModalModule } from './add-vendor-modal/add-vendor-modal.module';\nimport { CommentTooLongModalModule } from './comment-too-long-modal/comment-too-long-modal.module';\nimport { ConfirmationModalModule } from './confirmation-modal/confirmation-modal.module';\nimport { SpaceTemplateModalModule } from './space-template-modal/space-template-modal.module';\nimport { TurnoverPunchModalModule } from './turnover-punch-modal/turnover-punch-modal.module';\n\n@NgModule({\n declarations: [AddBidModalComponent],\n providers: [ModalsService, WorkflowActionsService],\n imports: [\n CommonModule,\n NewTurnoverModalModule,\n GalleryModalModule,\n NewBulkScopeModule,\n TicketPreviewModalModule,\n CommentTooLongModalModule,\n TurnoverPunchModalModule,\n InfoModalModule,\n NextStepAssigneeModalModule,\n UserPreviewModalModule,\n SpaceTemplateModalModule,\n AddVendorModalModule,\n ConfirmationModalModule,\n AddVendorUserModalModule,\n MatDialogModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n FormsModule,\n RadioButtonDropdownModule,\n ReactiveFormsModule,\n DateDropdownModule,\n MatTooltipModule,\n InputModule,\n MatInputModule,\n NgxMaskModule,\n InputFileModule,\n InputTypeFileModule,\n PromptModalModule,\n AttachmentModule,\n ],\n})\nexport class ModalsModule {}\n","import { CommonModule, DatePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { RadioButtonDropdownModule } from '@app/modules/ui-components/components/radio-button-dropdown/radio-button-dropdown.module';\nimport { TurnoverDateRangeModule } from '@main-application/turnovers/components/sections/turnover-date-range/turnover-date-range.module';\nimport { DateDropdownModule } from '@ui-components/components/date-dropdown/date-dropdown.module';\nimport { InputModule } from '@ui-components/components/input/input.module';\nimport { SlideToggleComponent } from '@ui-components/components/slide-toggle/slide-toggle.component';\n\nimport { NewTurnoverModalComponent } from './new-turnover-modal.component';\n\n@NgModule({\n declarations: [NewTurnoverModalComponent],\n imports: [\n InputModule,\n SlideToggleComponent,\n MatDialogModule,\n ReactiveFormsModule,\n TurnoverDateRangeModule,\n RadioButtonDropdownModule,\n CommonModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n DateDropdownModule,\n ],\n providers: [DatePipe],\n})\nexport class NewTurnoverModalModule {}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\ntype ScreenWiperStatuses = 'start' | 'end' | '';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ScreenWiperService {\n private screenWipeState = 0;\n private screenClasses = new BehaviorSubject(`screen-wiper state-${this.screenWipeState}`);\n public screenClasses$ = this.screenClasses.asObservable();\n\n private globalWiperVisible = new BehaviorSubject(false);\n public globalWiperVisible$ = this.globalWiperVisible.asObservable();\n\n public readonly wipeDuration = 5000;\n\n constructor(private snackbarService: SnackbarService) {}\n\n next(globalWiper = false) {\n this.globalWiperVisible.next(globalWiper);\n if (globalWiper) {\n setTimeout(() => this.runWiper(globalWiper), 100);\n } else {\n this.runWiper(globalWiper);\n }\n }\n\n private runWiper(globalWiper: boolean) {\n this.screenWipeState = (this.screenWipeState + 1) % 3;\n this.setClasses('start');\n setTimeout(() => {\n if (globalWiper) {\n this.snackbarService.info(\"Preventing monitor burn-in. You're welcome. 😰\", this.wipeDuration);\n }\n this.setClasses('end');\n setTimeout(() => {\n this.setClasses('');\n }, this.wipeDuration);\n }, 10);\n }\n\n private setClasses(status: ScreenWiperStatuses) {\n this.screenClasses.next(`screen-wiper state-${this.screenWipeState} ${status}`);\n }\n}\n","/**\n * Take input from [0, n] and return it as [0, 1]\n * @hidden\n */\nexport function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = '100%';\n }\n var isPercent = isPercentage(n);\n n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n)));\n // Automatically convert percentage into number\n if (isPercent) {\n n = parseInt(String(n * max), 10) / 100;\n }\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n // Convert into [0, 1] range if it isn't already\n if (max === 360) {\n // If n is a hue given in degrees,\n // wrap around out-of-range values into [0, 360] range\n // then convert into [0, 1].\n n = (n < 0 ? (n % max) + max : n % max) / parseFloat(String(max));\n }\n else {\n // If n not a hue given in degrees\n // Convert into [0, 1] range if it isn't already.\n n = (n % max) / parseFloat(String(max));\n }\n return n;\n}\n/**\n * Force a number between 0 and 1\n * @hidden\n */\nexport function clamp01(val) {\n return Math.min(1, Math.max(0, val));\n}\n/**\n * Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n * \n * @hidden\n */\nexport function isOnePointZero(n) {\n return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;\n}\n/**\n * Check to see if string passed in is a percentage\n * @hidden\n */\nexport function isPercentage(n) {\n return typeof n === 'string' && n.indexOf('%') !== -1;\n}\n/**\n * Return a valid alpha value [0,1] with all invalid values being set to 1\n * @hidden\n */\nexport function boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n}\n/**\n * Replace a decimal with it's percentage value\n * @hidden\n */\nexport function convertToPercentage(n) {\n if (n <= 1) {\n return \"\".concat(Number(n) * 100, \"%\");\n }\n return n;\n}\n/**\n * Force a hex value to have 2 characters\n * @hidden\n */\nexport function pad2(c) {\n return c.length === 1 ? '0' + c : String(c);\n}\n","import { bound01, pad2 } from './util';\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n/**\n * Handle bounds / percentage checking to conform to CSS color spec\n * \n * *Assumes:* r, g, b in [0, 255] or [0, 1]\n * *Returns:* { r, g, b } in [0, 255]\n */\nexport function rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255,\n };\n}\n/**\n * Converts an RGB color value to HSL.\n * *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n * *Returns:* { h, s, l } in [0,1]\n */\nexport function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h = 0;\n var s = 0;\n var l = (max + min) / 2;\n if (max === min) {\n s = 0;\n h = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h: h, s: s, l: l };\n}\nfunction hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * (6 * t);\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n/**\n * Converts an HSL color value to RGB.\n *\n * *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n * *Returns:* { r, g, b } in the set [0, 255]\n */\nexport function hslToRgb(h, s, l) {\n var r;\n var g;\n var b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n if (s === 0) {\n // achromatic\n g = l;\n b = l;\n r = l;\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color value to HSV\n *\n * *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n * *Returns:* { h, s, v } in [0,1]\n */\nexport function rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h = 0;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0; // achromatic\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n/**\n * Converts an HSV color value to RGB.\n *\n * *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n * *Returns:* { r, g, b } in the set [0, 255]\n */\nexport function hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - f * s);\n var t = v * (1 - (1 - f) * s);\n var mod = i % 6;\n var r = [v, q, p, p, t, v][mod];\n var g = [t, v, v, q, p, p][mod];\n var b = [p, p, t, v, v, q][mod];\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color to hex\n *\n * Assumes r, g, and b are contained in the set [0, 255]\n * Returns a 3 or 6 character hex\n */\nexport function rgbToHex(r, g, b, allow3Char) {\n var hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n // Return a 3 character hex if possible\n if (allow3Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color plus alpha transparency to hex\n *\n * Assumes r, g, b are contained in the set [0, 255] and\n * a in [0, 1]. Returns a 4 or 8 character rgba hex\n */\n// eslint-disable-next-line max-params\nexport function rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n pad2(convertDecimalToHex(a)),\n ];\n // Return a 4 character hex if possible\n if (allow4Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1)) &&\n hex[3].startsWith(hex[3].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color to an ARGB Hex8 string\n * Rarely used, but required for \"toFilter()\"\n */\nexport function rgbaToArgbHex(r, g, b, a) {\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n return hex.join('');\n}\n/** Converts a decimal to a hex value */\nexport function convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n/** Converts a hex value to a decimal */\nexport function convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n}\n/** Parse a base-16 hex value into a base-10 integer */\nexport function parseIntFromHex(val) {\n return parseInt(val, 16);\n}\nexport function numberInputToObject(color) {\n return {\n r: color >> 16,\n g: (color & 0xff00) >> 8,\n b: color & 0xff,\n };\n}\n","// https://github.com/bahamas10/css-color-names/blob/master/css-color-names.json\n/**\n * @hidden\n */\nexport var names = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n goldenrod: '#daa520',\n gold: '#ffd700',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavenderblush: '#fff0f5',\n lavender: '#e6e6fa',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n","/* eslint-disable @typescript-eslint/no-redundant-type-constituents */\nimport { convertHexToDecimal, hslToRgb, hsvToRgb, parseIntFromHex, rgbToRgb } from './conversion';\nimport { names } from './css-color-names';\nimport { boundAlpha, convertToPercentage } from './util';\n/**\n * Given a string or object, convert that input to RGB\n *\n * Possible string inputs:\n * ```\n * \"red\"\n * \"#f00\" or \"f00\"\n * \"#ff0000\" or \"ff0000\"\n * \"#ff000000\" or \"ff000000\"\n * \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n * \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n * \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n * \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n * \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n * \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n * \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n * ```\n */\nexport function inputToRGB(color) {\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color === 'string') {\n color = stringInputToObject(color);\n }\n if (typeof color === 'object') {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === '%' ? 'prgb' : 'rgb';\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = 'hsv';\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = 'hsl';\n }\n if (Object.prototype.hasOwnProperty.call(color, 'a')) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a,\n };\n}\n// \nvar CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// \nvar CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\nvar CSS_UNIT = \"(?:\".concat(CSS_NUMBER, \")|(?:\").concat(CSS_INTEGER, \")\");\n// Actual matching.\n// Parentheses and commas are optional, but not required.\n// Whitespace can take the place of commas or opening paren\nvar PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\".concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")\\\\s*\\\\)?\");\nvar PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\".concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")\\\\s*\\\\)?\");\nvar matchers = {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp('rgb' + PERMISSIVE_MATCH3),\n rgba: new RegExp('rgba' + PERMISSIVE_MATCH4),\n hsl: new RegExp('hsl' + PERMISSIVE_MATCH3),\n hsla: new RegExp('hsla' + PERMISSIVE_MATCH4),\n hsv: new RegExp('hsv' + PERMISSIVE_MATCH3),\n hsva: new RegExp('hsva' + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n};\n/**\n * Permissive string parsing. Take in a number of formats, and output an object\n * based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n */\nexport function stringInputToObject(color) {\n color = color.trim().toLowerCase();\n if (color.length === 0) {\n return false;\n }\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color === 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: 'name' };\n }\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match = matchers.rgb.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n match = matchers.rgba.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n match = matchers.hsl.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n match = matchers.hsla.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n match = matchers.hsv.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n match = matchers.hsva.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n match = matchers.hex8.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? 'name' : 'hex8',\n };\n }\n match = matchers.hex6.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? 'name' : 'hex',\n };\n }\n match = matchers.hex4.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1] + match[1]),\n g: parseIntFromHex(match[2] + match[2]),\n b: parseIntFromHex(match[3] + match[3]),\n a: convertHexToDecimal(match[4] + match[4]),\n format: named ? 'name' : 'hex8',\n };\n }\n match = matchers.hex3.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1] + match[1]),\n g: parseIntFromHex(match[2] + match[2]),\n b: parseIntFromHex(match[3] + match[3]),\n format: named ? 'name' : 'hex',\n };\n }\n return false;\n}\n/**\n * Check to see if it looks like a CSS unit\n * (see `matchers` above for definition).\n */\nexport function isValidCSSUnit(color) {\n return Boolean(matchers.CSS_UNIT.exec(String(color)));\n}\n","import { numberInputToObject, rgbaToHex, rgbToHex, rgbToHsl, rgbToHsv } from './conversion';\nimport { names } from './css-color-names';\nimport { inputToRGB } from './format-input';\nimport { bound01, boundAlpha, clamp01 } from './util';\nvar TinyColor = /** @class */ (function () {\n function TinyColor(color, opts) {\n if (color === void 0) { color = ''; }\n if (opts === void 0) { opts = {}; }\n var _a;\n // If input is already a tinycolor, return itself\n if (color instanceof TinyColor) {\n // eslint-disable-next-line no-constructor-return\n return color;\n }\n if (typeof color === 'number') {\n color = numberInputToObject(color);\n }\n this.originalInput = color;\n var rgb = inputToRGB(color);\n this.originalInput = color;\n this.r = rgb.r;\n this.g = rgb.g;\n this.b = rgb.b;\n this.a = rgb.a;\n this.roundA = Math.round(100 * this.a) / 100;\n this.format = (_a = opts.format) !== null && _a !== void 0 ? _a : rgb.format;\n this.gradientType = opts.gradientType;\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this.r < 1) {\n this.r = Math.round(this.r);\n }\n if (this.g < 1) {\n this.g = Math.round(this.g);\n }\n if (this.b < 1) {\n this.b = Math.round(this.b);\n }\n this.isValid = rgb.ok;\n }\n TinyColor.prototype.isDark = function () {\n return this.getBrightness() < 128;\n };\n TinyColor.prototype.isLight = function () {\n return !this.isDark();\n };\n /**\n * Returns the perceived brightness of the color, from 0-255.\n */\n TinyColor.prototype.getBrightness = function () {\n // http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n };\n /**\n * Returns the perceived luminance of a color, from 0-1.\n */\n TinyColor.prototype.getLuminance = function () {\n // http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var R;\n var G;\n var B;\n var RsRGB = rgb.r / 255;\n var GsRGB = rgb.g / 255;\n var BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n };\n /**\n * Returns the alpha value of a color, from 0-1.\n */\n TinyColor.prototype.getAlpha = function () {\n return this.a;\n };\n /**\n * Sets the alpha value on the current color.\n *\n * @param alpha - The new alpha value. The accepted range is 0-1.\n */\n TinyColor.prototype.setAlpha = function (alpha) {\n this.a = boundAlpha(alpha);\n this.roundA = Math.round(100 * this.a) / 100;\n return this;\n };\n /**\n * Returns whether the color is monochrome.\n */\n TinyColor.prototype.isMonochrome = function () {\n var s = this.toHsl().s;\n return s === 0;\n };\n /**\n * Returns the object as a HSVA object.\n */\n TinyColor.prototype.toHsv = function () {\n var hsv = rgbToHsv(this.r, this.g, this.b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this.a };\n };\n /**\n * Returns the hsva values interpolated into a string with the following format:\n * \"hsva(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toHsvString = function () {\n var hsv = rgbToHsv(this.r, this.g, this.b);\n var h = Math.round(hsv.h * 360);\n var s = Math.round(hsv.s * 100);\n var v = Math.round(hsv.v * 100);\n return this.a === 1 ? \"hsv(\".concat(h, \", \").concat(s, \"%, \").concat(v, \"%)\") : \"hsva(\".concat(h, \", \").concat(s, \"%, \").concat(v, \"%, \").concat(this.roundA, \")\");\n };\n /**\n * Returns the object as a HSLA object.\n */\n TinyColor.prototype.toHsl = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this.a };\n };\n /**\n * Returns the hsla values interpolated into a string with the following format:\n * \"hsla(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toHslString = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n var h = Math.round(hsl.h * 360);\n var s = Math.round(hsl.s * 100);\n var l = Math.round(hsl.l * 100);\n return this.a === 1 ? \"hsl(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%)\") : \"hsla(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%, \").concat(this.roundA, \")\");\n };\n /**\n * Returns the hex value of the color.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n TinyColor.prototype.toHex = function (allow3Char) {\n if (allow3Char === void 0) { allow3Char = false; }\n return rgbToHex(this.r, this.g, this.b, allow3Char);\n };\n /**\n * Returns the hex value of the color -with a # prefixed.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n TinyColor.prototype.toHexString = function (allow3Char) {\n if (allow3Char === void 0) { allow3Char = false; }\n return '#' + this.toHex(allow3Char);\n };\n /**\n * Returns the hex 8 value of the color.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n TinyColor.prototype.toHex8 = function (allow4Char) {\n if (allow4Char === void 0) { allow4Char = false; }\n return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char);\n };\n /**\n * Returns the hex 8 value of the color -with a # prefixed.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n TinyColor.prototype.toHex8String = function (allow4Char) {\n if (allow4Char === void 0) { allow4Char = false; }\n return '#' + this.toHex8(allow4Char);\n };\n /**\n * Returns the shorter hex value of the color depends on its alpha -with a # prefixed.\n * @param allowShortChar will shorten hex value to 3 or 4 char if possible\n */\n TinyColor.prototype.toHexShortString = function (allowShortChar) {\n if (allowShortChar === void 0) { allowShortChar = false; }\n return this.a === 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar);\n };\n /**\n * Returns the object as a RGBA object.\n */\n TinyColor.prototype.toRgb = function () {\n return {\n r: Math.round(this.r),\n g: Math.round(this.g),\n b: Math.round(this.b),\n a: this.a,\n };\n };\n /**\n * Returns the RGBA values interpolated into a string with the following format:\n * \"RGBA(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toRgbString = function () {\n var r = Math.round(this.r);\n var g = Math.round(this.g);\n var b = Math.round(this.b);\n return this.a === 1 ? \"rgb(\".concat(r, \", \").concat(g, \", \").concat(b, \")\") : \"rgba(\".concat(r, \", \").concat(g, \", \").concat(b, \", \").concat(this.roundA, \")\");\n };\n /**\n * Returns the object as a RGBA object.\n */\n TinyColor.prototype.toPercentageRgb = function () {\n var fmt = function (x) { return \"\".concat(Math.round(bound01(x, 255) * 100), \"%\"); };\n return {\n r: fmt(this.r),\n g: fmt(this.g),\n b: fmt(this.b),\n a: this.a,\n };\n };\n /**\n * Returns the RGBA relative values interpolated into a string\n */\n TinyColor.prototype.toPercentageRgbString = function () {\n var rnd = function (x) { return Math.round(bound01(x, 255) * 100); };\n return this.a === 1\n ? \"rgb(\".concat(rnd(this.r), \"%, \").concat(rnd(this.g), \"%, \").concat(rnd(this.b), \"%)\")\n : \"rgba(\".concat(rnd(this.r), \"%, \").concat(rnd(this.g), \"%, \").concat(rnd(this.b), \"%, \").concat(this.roundA, \")\");\n };\n /**\n * The 'real' name of the color -if there is one.\n */\n TinyColor.prototype.toName = function () {\n if (this.a === 0) {\n return 'transparent';\n }\n if (this.a < 1) {\n return false;\n }\n var hex = '#' + rgbToHex(this.r, this.g, this.b, false);\n for (var _i = 0, _a = Object.entries(names); _i < _a.length; _i++) {\n var _b = _a[_i], key = _b[0], value = _b[1];\n if (hex === value) {\n return key;\n }\n }\n return false;\n };\n TinyColor.prototype.toString = function (format) {\n var formatSet = Boolean(format);\n format = format !== null && format !== void 0 ? format : this.format;\n var formattedString = false;\n var hasAlpha = this.a < 1 && this.a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format.startsWith('hex') || format === 'name');\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === 'name' && this.a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === 'rgb') {\n formattedString = this.toRgbString();\n }\n if (format === 'prgb') {\n formattedString = this.toPercentageRgbString();\n }\n if (format === 'hex' || format === 'hex6') {\n formattedString = this.toHexString();\n }\n if (format === 'hex3') {\n formattedString = this.toHexString(true);\n }\n if (format === 'hex4') {\n formattedString = this.toHex8String(true);\n }\n if (format === 'hex8') {\n formattedString = this.toHex8String();\n }\n if (format === 'name') {\n formattedString = this.toName();\n }\n if (format === 'hsl') {\n formattedString = this.toHslString();\n }\n if (format === 'hsv') {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n };\n TinyColor.prototype.toNumber = function () {\n return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b);\n };\n TinyColor.prototype.clone = function () {\n return new TinyColor(this.toString());\n };\n /**\n * Lighten the color a given amount. Providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.lighten = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n };\n /**\n * Brighten the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.brighten = function (amount) {\n if (amount === void 0) { amount = 10; }\n var rgb = this.toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return new TinyColor(rgb);\n };\n /**\n * Darken the color a given amount, from 0 to 100.\n * Providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.darken = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n };\n /**\n * Mix the color with pure white, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.tint = function (amount) {\n if (amount === void 0) { amount = 10; }\n return this.mix('white', amount);\n };\n /**\n * Mix the color with pure black, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.shade = function (amount) {\n if (amount === void 0) { amount = 10; }\n return this.mix('black', amount);\n };\n /**\n * Desaturate the color a given amount, from 0 to 100.\n * Providing 100 will is the same as calling greyscale\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.desaturate = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n };\n /**\n * Saturate the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.saturate = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n };\n /**\n * Completely desaturates a color into greyscale.\n * Same as calling `desaturate(100)`\n */\n TinyColor.prototype.greyscale = function () {\n return this.desaturate(100);\n };\n /**\n * Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n * Values outside of this range will be wrapped into this range.\n */\n TinyColor.prototype.spin = function (amount) {\n var hsl = this.toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return new TinyColor(hsl);\n };\n /**\n * Mix the current color a given amount with another color, from 0 to 100.\n * 0 means no mixing (return current color).\n */\n TinyColor.prototype.mix = function (color, amount) {\n if (amount === void 0) { amount = 50; }\n var rgb1 = this.toRgb();\n var rgb2 = new TinyColor(color).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a,\n };\n return new TinyColor(rgba);\n };\n TinyColor.prototype.analogous = function (results, slices) {\n if (results === void 0) { results = 6; }\n if (slices === void 0) { slices = 30; }\n var hsl = this.toHsl();\n var part = 360 / slices;\n var ret = [this];\n for (hsl.h = (hsl.h - ((part * results) >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(new TinyColor(hsl));\n }\n return ret;\n };\n /**\n * taken from https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js\n */\n TinyColor.prototype.complement = function () {\n var hsl = this.toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return new TinyColor(hsl);\n };\n TinyColor.prototype.monochromatic = function (results) {\n if (results === void 0) { results = 6; }\n var hsv = this.toHsv();\n var h = hsv.h;\n var s = hsv.s;\n var v = hsv.v;\n var res = [];\n var modification = 1 / results;\n while (results--) {\n res.push(new TinyColor({ h: h, s: s, v: v }));\n v = (v + modification) % 1;\n }\n return res;\n };\n TinyColor.prototype.splitcomplement = function () {\n var hsl = this.toHsl();\n var h = hsl.h;\n return [\n this,\n new TinyColor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),\n new TinyColor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l }),\n ];\n };\n /**\n * Compute how the color would appear on a background\n */\n TinyColor.prototype.onBackground = function (background) {\n var fg = this.toRgb();\n var bg = new TinyColor(background).toRgb();\n var alpha = fg.a + bg.a * (1 - fg.a);\n return new TinyColor({\n r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha,\n g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha,\n b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha,\n a: alpha,\n });\n };\n /**\n * Alias for `polyad(3)`\n */\n TinyColor.prototype.triad = function () {\n return this.polyad(3);\n };\n /**\n * Alias for `polyad(4)`\n */\n TinyColor.prototype.tetrad = function () {\n return this.polyad(4);\n };\n /**\n * Get polyad colors, like (for 1, 2, 3, 4, 5, 6, 7, 8, etc...)\n * monad, dyad, triad, tetrad, pentad, hexad, heptad, octad, etc...\n */\n TinyColor.prototype.polyad = function (n) {\n var hsl = this.toHsl();\n var h = hsl.h;\n var result = [this];\n var increment = 360 / n;\n for (var i = 1; i < n; i++) {\n result.push(new TinyColor({ h: (h + i * increment) % 360, s: hsl.s, l: hsl.l }));\n }\n return result;\n };\n /**\n * compare color vs current color\n */\n TinyColor.prototype.equals = function (color) {\n return this.toRgbString() === new TinyColor(color).toRgbString();\n };\n return TinyColor;\n}());\nexport { TinyColor };\n// kept for backwards compatability with v1\nexport function tinycolor(color, opts) {\n if (color === void 0) { color = ''; }\n if (opts === void 0) { opts = {}; }\n return new TinyColor(color, opts);\n}\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// 0, 2, 10, 30 second delays before reconnect attempts.\r\nconst DEFAULT_RETRY_DELAYS_IN_MILLISECONDS = [0, 2000, 10000, 30000, null];\r\n/** @private */\r\nexport class DefaultReconnectPolicy {\r\n constructor(retryDelays) {\r\n this._retryDelays = retryDelays !== undefined ? [...retryDelays, null] : DEFAULT_RETRY_DELAYS_IN_MILLISECONDS;\r\n }\r\n nextRetryDelayInMilliseconds(retryContext) {\r\n return this._retryDelays[retryContext.previousRetryCount];\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** Error thrown when an HTTP request fails. */\r\nexport class HttpError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n * @param {number} statusCode The HTTP status code represented by this error.\r\n */\r\n constructor(errorMessage, statusCode) {\r\n const trueProto = new.target.prototype;\r\n super(`${errorMessage}: Status code '${statusCode}'`);\r\n this.statusCode = statusCode;\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when a timeout elapses. */\r\nexport class TimeoutError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.TimeoutError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage = \"A timeout occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when an action is aborted. */\r\nexport class AbortError extends Error {\r\n /** Constructs a new instance of {@link AbortError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage = \"An abort occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the selected transport is unsupported by the browser. */\r\n/** @private */\r\nexport class UnsupportedTransportError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.UnsupportedTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occured on.\r\n */\r\n constructor(message, transport) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'UnsupportedTransportError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the selected transport is disabled by the browser. */\r\n/** @private */\r\nexport class DisabledTransportError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.DisabledTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occured on.\r\n */\r\n constructor(message, transport) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'DisabledTransportError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the selected transport cannot be started. */\r\n/** @private */\r\nexport class FailedToStartTransportError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToStartTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occured on.\r\n */\r\n constructor(message, transport) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'FailedToStartTransportError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the negotiation with the server failed to complete. */\r\n/** @private */\r\nexport class FailedToNegotiateWithServerError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToNegotiateWithServerError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n */\r\n constructor(message) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.errorType = 'FailedToNegotiateWithServerError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when multiple errors have occured. */\r\n/** @private */\r\nexport class AggregateErrors extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.AggregateErrors}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {Error[]} innerErrors The collection of errors this error is aggregating.\r\n */\r\n constructor(message, innerErrors) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.innerErrors = innerErrors;\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** Represents an HTTP response. */\r\nexport class HttpResponse {\r\n constructor(statusCode, statusText, content) {\r\n this.statusCode = statusCode;\r\n this.statusText = statusText;\r\n this.content = content;\r\n }\r\n}\r\n/** Abstraction over an HTTP client.\r\n *\r\n * This class provides an abstraction over an HTTP client so that a different implementation can be provided on different platforms.\r\n */\r\nexport class HttpClient {\r\n get(url, options) {\r\n return this.send({\r\n ...options,\r\n method: \"GET\",\r\n url,\r\n });\r\n }\r\n post(url, options) {\r\n return this.send({\r\n ...options,\r\n method: \"POST\",\r\n url,\r\n });\r\n }\r\n delete(url, options) {\r\n return this.send({\r\n ...options,\r\n method: \"DELETE\",\r\n url,\r\n });\r\n }\r\n /** Gets all cookies that apply to the specified URL.\r\n *\r\n * @param url The URL that the cookies are valid for.\r\n * @returns {string} A string containing all the key-value cookie pairs for the specified URL.\r\n */\r\n // @ts-ignore\r\n getCookieString(url) {\r\n return \"\";\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** A logger that does nothing when log messages are sent to it. */\r\nexport class NullLogger {\r\n constructor() { }\r\n /** @inheritDoc */\r\n // eslint-disable-next-line\r\n log(_logLevel, _message) {\r\n }\r\n}\r\n/** The singleton instance of the {@link @microsoft/signalr.NullLogger}. */\r\nNullLogger.instance = new NullLogger();\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { NullLogger } from \"./Loggers\";\r\n// Version token that will be replaced by the prepack command\r\n/** The version of the SignalR client. */\r\nexport const VERSION = \"6.0.11\";\r\n/** @private */\r\nexport class Arg {\r\n static isRequired(val, name) {\r\n if (val === null || val === undefined) {\r\n throw new Error(`The '${name}' argument is required.`);\r\n }\r\n }\r\n static isNotEmpty(val, name) {\r\n if (!val || val.match(/^\\s*$/)) {\r\n throw new Error(`The '${name}' argument should not be empty.`);\r\n }\r\n }\r\n static isIn(val, values, name) {\r\n // TypeScript enums have keys for **both** the name and the value of each enum member on the type itself.\r\n if (!(val in values)) {\r\n throw new Error(`Unknown ${name} value: ${val}.`);\r\n }\r\n }\r\n}\r\n/** @private */\r\nexport class Platform {\r\n // react-native has a window but no document so we should check both\r\n static get isBrowser() {\r\n return typeof window === \"object\" && typeof window.document === \"object\";\r\n }\r\n // WebWorkers don't have a window object so the isBrowser check would fail\r\n static get isWebWorker() {\r\n return typeof self === \"object\" && \"importScripts\" in self;\r\n }\r\n // react-native has a window but no document\r\n static get isReactNative() {\r\n return typeof window === \"object\" && typeof window.document === \"undefined\";\r\n }\r\n // Node apps shouldn't have a window object, but WebWorkers don't either\r\n // so we need to check for both WebWorker and window\r\n static get isNode() {\r\n return !this.isBrowser && !this.isWebWorker && !this.isReactNative;\r\n }\r\n}\r\n/** @private */\r\nexport function getDataDetail(data, includeContent) {\r\n let detail = \"\";\r\n if (isArrayBuffer(data)) {\r\n detail = `Binary data of length ${data.byteLength}`;\r\n if (includeContent) {\r\n detail += `. Content: '${formatArrayBuffer(data)}'`;\r\n }\r\n }\r\n else if (typeof data === \"string\") {\r\n detail = `String data of length ${data.length}`;\r\n if (includeContent) {\r\n detail += `. Content: '${data}'`;\r\n }\r\n }\r\n return detail;\r\n}\r\n/** @private */\r\nexport function formatArrayBuffer(data) {\r\n const view = new Uint8Array(data);\r\n // Uint8Array.map only supports returning another Uint8Array?\r\n let str = \"\";\r\n view.forEach((num) => {\r\n const pad = num < 16 ? \"0\" : \"\";\r\n str += `0x${pad}${num.toString(16)} `;\r\n });\r\n // Trim of trailing space.\r\n return str.substr(0, str.length - 1);\r\n}\r\n// Also in signalr-protocol-msgpack/Utils.ts\r\n/** @private */\r\nexport function isArrayBuffer(val) {\r\n return val && typeof ArrayBuffer !== \"undefined\" &&\r\n (val instanceof ArrayBuffer ||\r\n // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof\r\n (val.constructor && val.constructor.name === \"ArrayBuffer\"));\r\n}\r\n/** @private */\r\nexport async function sendMessage(logger, transportName, httpClient, url, accessTokenFactory, content, options) {\r\n let headers = {};\r\n if (accessTokenFactory) {\r\n const token = await accessTokenFactory();\r\n if (token) {\r\n headers = {\r\n [\"Authorization\"]: `Bearer ${token}`,\r\n };\r\n }\r\n }\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n logger.log(LogLevel.Trace, `(${transportName} transport) sending data. ${getDataDetail(content, options.logMessageContent)}.`);\r\n const responseType = isArrayBuffer(content) ? \"arraybuffer\" : \"text\";\r\n const response = await httpClient.post(url, {\r\n content,\r\n headers: { ...headers, ...options.headers },\r\n responseType,\r\n timeout: options.timeout,\r\n withCredentials: options.withCredentials,\r\n });\r\n logger.log(LogLevel.Trace, `(${transportName} transport) request complete. Response status: ${response.statusCode}.`);\r\n}\r\n/** @private */\r\nexport function createLogger(logger) {\r\n if (logger === undefined) {\r\n return new ConsoleLogger(LogLevel.Information);\r\n }\r\n if (logger === null) {\r\n return NullLogger.instance;\r\n }\r\n if (logger.log !== undefined) {\r\n return logger;\r\n }\r\n return new ConsoleLogger(logger);\r\n}\r\n/** @private */\r\nexport class SubjectSubscription {\r\n constructor(subject, observer) {\r\n this._subject = subject;\r\n this._observer = observer;\r\n }\r\n dispose() {\r\n const index = this._subject.observers.indexOf(this._observer);\r\n if (index > -1) {\r\n this._subject.observers.splice(index, 1);\r\n }\r\n if (this._subject.observers.length === 0 && this._subject.cancelCallback) {\r\n this._subject.cancelCallback().catch((_) => { });\r\n }\r\n }\r\n}\r\n/** @private */\r\nexport class ConsoleLogger {\r\n constructor(minimumLogLevel) {\r\n this._minLevel = minimumLogLevel;\r\n this.out = console;\r\n }\r\n log(logLevel, message) {\r\n if (logLevel >= this._minLevel) {\r\n const msg = `[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`;\r\n switch (logLevel) {\r\n case LogLevel.Critical:\r\n case LogLevel.Error:\r\n this.out.error(msg);\r\n break;\r\n case LogLevel.Warning:\r\n this.out.warn(msg);\r\n break;\r\n case LogLevel.Information:\r\n this.out.info(msg);\r\n break;\r\n default:\r\n // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug\r\n this.out.log(msg);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n/** @private */\r\nexport function getUserAgentHeader() {\r\n let userAgentHeaderName = \"X-SignalR-User-Agent\";\r\n if (Platform.isNode) {\r\n userAgentHeaderName = \"User-Agent\";\r\n }\r\n return [userAgentHeaderName, constructUserAgent(VERSION, getOsName(), getRuntime(), getRuntimeVersion())];\r\n}\r\n/** @private */\r\nexport function constructUserAgent(version, os, runtime, runtimeVersion) {\r\n // Microsoft SignalR/[Version] ([Detailed Version]; [Operating System]; [Runtime]; [Runtime Version])\r\n let userAgent = \"Microsoft SignalR/\";\r\n const majorAndMinor = version.split(\".\");\r\n userAgent += `${majorAndMinor[0]}.${majorAndMinor[1]}`;\r\n userAgent += ` (${version}; `;\r\n if (os && os !== \"\") {\r\n userAgent += `${os}; `;\r\n }\r\n else {\r\n userAgent += \"Unknown OS; \";\r\n }\r\n userAgent += `${runtime}`;\r\n if (runtimeVersion) {\r\n userAgent += `; ${runtimeVersion}`;\r\n }\r\n else {\r\n userAgent += \"; Unknown Runtime Version\";\r\n }\r\n userAgent += \")\";\r\n return userAgent;\r\n}\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getOsName() {\r\n if (Platform.isNode) {\r\n switch (process.platform) {\r\n case \"win32\":\r\n return \"Windows NT\";\r\n case \"darwin\":\r\n return \"macOS\";\r\n case \"linux\":\r\n return \"Linux\";\r\n default:\r\n return process.platform;\r\n }\r\n }\r\n else {\r\n return \"\";\r\n }\r\n}\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getRuntimeVersion() {\r\n if (Platform.isNode) {\r\n return process.versions.node;\r\n }\r\n return undefined;\r\n}\r\nfunction getRuntime() {\r\n if (Platform.isNode) {\r\n return \"NodeJS\";\r\n }\r\n else {\r\n return \"Browser\";\r\n }\r\n}\r\n/** @private */\r\nexport function getErrorString(e) {\r\n if (e.stack) {\r\n return e.stack;\r\n }\r\n else if (e.message) {\r\n return e.message;\r\n }\r\n return `${e}`;\r\n}\r\n/** @private */\r\nexport function getGlobalThis() {\r\n // globalThis is semi-new and not available in Node until v12\r\n if (typeof globalThis !== \"undefined\") {\r\n return globalThis;\r\n }\r\n if (typeof self !== \"undefined\") {\r\n return self;\r\n }\r\n if (typeof window !== \"undefined\") {\r\n return window;\r\n }\r\n if (typeof global !== \"undefined\") {\r\n return global;\r\n }\r\n throw new Error(\"could not find global\");\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpResponse } from \"./HttpClient\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { Platform, getGlobalThis } from \"./Utils\";\r\nexport class FetchHttpClient extends HttpClient {\r\n constructor(logger) {\r\n super();\r\n this._logger = logger;\r\n if (typeof fetch === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n // Cookies aren't automatically handled in Node so we need to add a CookieJar to preserve cookies across requests\r\n this._jar = new (requireFunc(\"tough-cookie\")).CookieJar();\r\n this._fetchType = requireFunc(\"node-fetch\");\r\n // node-fetch doesn't have a nice API for getting and setting cookies\r\n // fetch-cookie will wrap a fetch implementation with a default CookieJar or a provided one\r\n this._fetchType = requireFunc(\"fetch-cookie\")(this._fetchType, this._jar);\r\n }\r\n else {\r\n this._fetchType = fetch.bind(getGlobalThis());\r\n }\r\n if (typeof AbortController === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n // Node needs EventListener methods on AbortController which our custom polyfill doesn't provide\r\n this._abortControllerType = requireFunc(\"abort-controller\");\r\n }\r\n else {\r\n this._abortControllerType = AbortController;\r\n }\r\n }\r\n /** @inheritDoc */\r\n async send(request) {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n throw new AbortError();\r\n }\r\n if (!request.method) {\r\n throw new Error(\"No method defined.\");\r\n }\r\n if (!request.url) {\r\n throw new Error(\"No url defined.\");\r\n }\r\n const abortController = new this._abortControllerType();\r\n let error;\r\n // Hook our abortSignal into the abort controller\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n abortController.abort();\r\n error = new AbortError();\r\n };\r\n }\r\n // If a timeout has been passed in, setup a timeout to call abort\r\n // Type needs to be any to fit window.setTimeout and NodeJS.setTimeout\r\n let timeoutId = null;\r\n if (request.timeout) {\r\n const msTimeout = request.timeout;\r\n timeoutId = setTimeout(() => {\r\n abortController.abort();\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n error = new TimeoutError();\r\n }, msTimeout);\r\n }\r\n let response;\r\n try {\r\n response = await this._fetchType(request.url, {\r\n body: request.content,\r\n cache: \"no-cache\",\r\n credentials: request.withCredentials === true ? \"include\" : \"same-origin\",\r\n headers: {\r\n \"Content-Type\": \"text/plain;charset=UTF-8\",\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n ...request.headers,\r\n },\r\n method: request.method,\r\n mode: \"cors\",\r\n redirect: \"follow\",\r\n signal: abortController.signal,\r\n });\r\n }\r\n catch (e) {\r\n if (error) {\r\n throw error;\r\n }\r\n this._logger.log(LogLevel.Warning, `Error from HTTP request. ${e}.`);\r\n throw e;\r\n }\r\n finally {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n }\r\n if (!response.ok) {\r\n const errorMessage = await deserializeContent(response, \"text\");\r\n throw new HttpError(errorMessage || response.statusText, response.status);\r\n }\r\n const content = deserializeContent(response, request.responseType);\r\n const payload = await content;\r\n return new HttpResponse(response.status, response.statusText, payload);\r\n }\r\n getCookieString(url) {\r\n let cookies = \"\";\r\n if (Platform.isNode && this._jar) {\r\n // @ts-ignore: unused variable\r\n this._jar.getCookies(url, (e, c) => cookies = c.join(\"; \"));\r\n }\r\n return cookies;\r\n }\r\n}\r\nfunction deserializeContent(response, responseType) {\r\n let content;\r\n switch (responseType) {\r\n case \"arraybuffer\":\r\n content = response.arrayBuffer();\r\n break;\r\n case \"text\":\r\n content = response.text();\r\n break;\r\n case \"blob\":\r\n case \"document\":\r\n case \"json\":\r\n throw new Error(`${responseType} is not supported.`);\r\n default:\r\n content = response.text();\r\n break;\r\n }\r\n return content;\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpResponse } from \"./HttpClient\";\r\nimport { LogLevel } from \"./ILogger\";\r\nexport class XhrHttpClient extends HttpClient {\r\n constructor(logger) {\r\n super();\r\n this._logger = logger;\r\n }\r\n /** @inheritDoc */\r\n send(request) {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(request.method, request.url, true);\r\n xhr.withCredentials = request.withCredentials === undefined ? true : request.withCredentials;\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n xhr.setRequestHeader(\"Content-Type\", \"text/plain;charset=UTF-8\");\r\n const headers = request.headers;\r\n if (headers) {\r\n Object.keys(headers)\r\n .forEach((header) => {\r\n xhr.setRequestHeader(header, headers[header]);\r\n });\r\n }\r\n if (request.responseType) {\r\n xhr.responseType = request.responseType;\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n xhr.abort();\r\n reject(new AbortError());\r\n };\r\n }\r\n if (request.timeout) {\r\n xhr.timeout = request.timeout;\r\n }\r\n xhr.onload = () => {\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(new HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));\r\n }\r\n else {\r\n reject(new HttpError(xhr.response || xhr.responseText || xhr.statusText, xhr.status));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n this._logger.log(LogLevel.Warning, `Error from HTTP request. ${xhr.status}: ${xhr.statusText}.`);\r\n reject(new HttpError(xhr.statusText, xhr.status));\r\n };\r\n xhr.ontimeout = () => {\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n reject(new TimeoutError());\r\n };\r\n xhr.send(request.content || \"\");\r\n });\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortError } from \"./Errors\";\r\nimport { FetchHttpClient } from \"./FetchHttpClient\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { Platform } from \"./Utils\";\r\nimport { XhrHttpClient } from \"./XhrHttpClient\";\r\n/** Default implementation of {@link @microsoft/signalr.HttpClient}. */\r\nexport class DefaultHttpClient extends HttpClient {\r\n /** Creates a new instance of the {@link @microsoft/signalr.DefaultHttpClient}, using the provided {@link @microsoft/signalr.ILogger} to log messages. */\r\n constructor(logger) {\r\n super();\r\n if (typeof fetch !== \"undefined\" || Platform.isNode) {\r\n this._httpClient = new FetchHttpClient(logger);\r\n }\r\n else if (typeof XMLHttpRequest !== \"undefined\") {\r\n this._httpClient = new XhrHttpClient(logger);\r\n }\r\n else {\r\n throw new Error(\"No usable HttpClient found.\");\r\n }\r\n }\r\n /** @inheritDoc */\r\n send(request) {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n return this._httpClient.send(request);\r\n }\r\n getCookieString(url) {\r\n return this._httpClient.getCookieString(url);\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nexport class HeaderNames {\r\n}\r\nHeaderNames.Authorization = \"Authorization\";\r\nHeaderNames.Cookie = \"Cookie\";\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// Rough polyfill of https://developer.mozilla.org/en-US/docs/Web/API/AbortController\r\n// We don't actually ever use the API being polyfilled, we always use the polyfill because\r\n// it's a very new API right now.\r\n// Not exported from index.\r\n/** @private */\r\nexport class AbortController {\r\n constructor() {\r\n this._isAborted = false;\r\n this.onabort = null;\r\n }\r\n abort() {\r\n if (!this._isAborted) {\r\n this._isAborted = true;\r\n if (this.onabort) {\r\n this.onabort();\r\n }\r\n }\r\n }\r\n get signal() {\r\n return this;\r\n }\r\n get aborted() {\r\n return this._isAborted;\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortController } from \"./AbortController\";\r\nimport { HttpError, TimeoutError } from \"./Errors\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, sendMessage } from \"./Utils\";\r\n// Not exported from 'index', this type is internal.\r\n/** @private */\r\nexport class LongPollingTransport {\r\n constructor(httpClient, accessTokenFactory, logger, options) {\r\n this._httpClient = httpClient;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logger = logger;\r\n this._pollAbort = new AbortController();\r\n this._options = options;\r\n this._running = false;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n // This is an internal type, not exported from 'index' so this is really just internal.\r\n get pollAborted() {\r\n return this._pollAbort.aborted;\r\n }\r\n async connect(url, transferFormat) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._url = url;\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Connecting.\");\r\n // Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)\r\n if (transferFormat === TransferFormat.Binary &&\r\n (typeof XMLHttpRequest !== \"undefined\" && typeof new XMLHttpRequest().responseType !== \"string\")) {\r\n throw new Error(\"Binary protocols over XmlHttpRequest not implementing advanced features are not supported.\");\r\n }\r\n const [name, value] = getUserAgentHeader();\r\n const headers = { [name]: value, ...this._options.headers };\r\n const pollOptions = {\r\n abortSignal: this._pollAbort.signal,\r\n headers,\r\n timeout: 100000,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n if (transferFormat === TransferFormat.Binary) {\r\n pollOptions.responseType = \"arraybuffer\";\r\n }\r\n const token = await this._getAccessToken();\r\n this._updateHeaderToken(pollOptions, token);\r\n // Make initial long polling request\r\n // Server uses first long polling request to finish initializing connection and it returns without data\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n // Mark running as false so that the poll immediately ends and runs the close logic\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n }\r\n else {\r\n this._running = true;\r\n }\r\n this._receiving = this._poll(this._url, pollOptions);\r\n }\r\n async _getAccessToken() {\r\n if (this._accessTokenFactory) {\r\n return await this._accessTokenFactory();\r\n }\r\n return null;\r\n }\r\n _updateHeaderToken(request, token) {\r\n if (!request.headers) {\r\n request.headers = {};\r\n }\r\n if (token) {\r\n request.headers[HeaderNames.Authorization] = `Bearer ${token}`;\r\n return;\r\n }\r\n if (request.headers[HeaderNames.Authorization]) {\r\n delete request.headers[HeaderNames.Authorization];\r\n }\r\n }\r\n async _poll(url, pollOptions) {\r\n try {\r\n while (this._running) {\r\n // We have to get the access token on each poll, in case it changes\r\n const token = await this._getAccessToken();\r\n this._updateHeaderToken(pollOptions, token);\r\n try {\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode === 204) {\r\n this._logger.log(LogLevel.Information, \"(LongPolling transport) Poll terminated by server.\");\r\n this._running = false;\r\n }\r\n else if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n // Unexpected status code\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n }\r\n else {\r\n // Process the response\r\n if (response.content) {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) data received. ${getDataDetail(response.content, this._options.logMessageContent)}.`);\r\n if (this.onreceive) {\r\n this.onreceive(response.content);\r\n }\r\n }\r\n else {\r\n // This is another way timeout manifest.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n }\r\n }\r\n catch (e) {\r\n if (!this._running) {\r\n // Log but disregard errors that occur after stopping\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Poll errored after shutdown: ${e.message}`);\r\n }\r\n else {\r\n if (e instanceof TimeoutError) {\r\n // Ignore timeouts and reissue the poll.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n else {\r\n // Close the connection with the error as the result.\r\n this._closeError = e;\r\n this._running = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Polling complete.\");\r\n // We will reach here with pollAborted==false when the server returned a response causing the transport to stop.\r\n // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.\r\n if (!this.pollAborted) {\r\n this._raiseOnClose();\r\n }\r\n }\r\n }\r\n async send(data) {\r\n if (!this._running) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"LongPolling\", this._httpClient, this._url, this._accessTokenFactory, data, this._options);\r\n }\r\n async stop() {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stopping polling.\");\r\n // Tell receiving loop to stop, abort any current request, and then wait for it to finish\r\n this._running = false;\r\n this._pollAbort.abort();\r\n try {\r\n await this._receiving;\r\n // Send DELETE to clean up long polling on the server\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) sending DELETE request to ${this._url}.`);\r\n const headers = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n const deleteOptions = {\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n const token = await this._getAccessToken();\r\n this._updateHeaderToken(deleteOptions, token);\r\n await this._httpClient.delete(this._url, deleteOptions);\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) DELETE request sent.\");\r\n }\r\n finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stop finished.\");\r\n // Raise close event here instead of in polling\r\n // It needs to happen after the DELETE request is sent\r\n this._raiseOnClose();\r\n }\r\n }\r\n _raiseOnClose() {\r\n if (this.onclose) {\r\n let logMessage = \"(LongPolling transport) Firing onclose event.\";\r\n if (this._closeError) {\r\n logMessage += \" Error: \" + this._closeError;\r\n }\r\n this._logger.log(LogLevel.Trace, logMessage);\r\n this.onclose(this._closeError);\r\n }\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform, sendMessage } from \"./Utils\";\r\n/** @private */\r\nexport class ServerSentEventsTransport {\r\n constructor(httpClient, accessTokenFactory, logger, options) {\r\n this._httpClient = httpClient;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logger = logger;\r\n this._options = options;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n async connect(url, transferFormat) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Trace, \"(SSE transport) Connecting.\");\r\n // set url before accessTokenFactory because this.url is only for send and we set the auth header instead of the query string for send\r\n this._url = url;\r\n if (this._accessTokenFactory) {\r\n const token = await this._accessTokenFactory();\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n return new Promise((resolve, reject) => {\r\n let opened = false;\r\n if (transferFormat !== TransferFormat.Text) {\r\n reject(new Error(\"The Server-Sent Events transport only supports the 'Text' transfer format\"));\r\n return;\r\n }\r\n let eventSource;\r\n if (Platform.isBrowser || Platform.isWebWorker) {\r\n eventSource = new this._options.EventSource(url, { withCredentials: this._options.withCredentials });\r\n }\r\n else {\r\n // Non-browser passes cookies via the dictionary\r\n const cookies = this._httpClient.getCookieString(url);\r\n const headers = {};\r\n headers.Cookie = cookies;\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n eventSource = new this._options.EventSource(url, { withCredentials: this._options.withCredentials, headers: { ...headers, ...this._options.headers } });\r\n }\r\n try {\r\n eventSource.onmessage = (e) => {\r\n if (this.onreceive) {\r\n try {\r\n this._logger.log(LogLevel.Trace, `(SSE transport) data received. ${getDataDetail(e.data, this._options.logMessageContent)}.`);\r\n this.onreceive(e.data);\r\n }\r\n catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n // @ts-ignore: not using event on purpose\r\n eventSource.onerror = (e) => {\r\n // EventSource doesn't give any useful information about server side closes.\r\n if (opened) {\r\n this._close();\r\n }\r\n else {\r\n reject(new Error(\"EventSource failed to connect. The connection could not be found on the server,\"\r\n + \" either the connection ID is not present on the server, or a proxy is refusing/buffering the connection.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\"));\r\n }\r\n };\r\n eventSource.onopen = () => {\r\n this._logger.log(LogLevel.Information, `SSE connected to ${this._url}`);\r\n this._eventSource = eventSource;\r\n opened = true;\r\n resolve();\r\n };\r\n }\r\n catch (e) {\r\n reject(e);\r\n return;\r\n }\r\n });\r\n }\r\n async send(data) {\r\n if (!this._eventSource) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"SSE\", this._httpClient, this._url, this._accessTokenFactory, data, this._options);\r\n }\r\n stop() {\r\n this._close();\r\n return Promise.resolve();\r\n }\r\n _close(e) {\r\n if (this._eventSource) {\r\n this._eventSource.close();\r\n this._eventSource = undefined;\r\n if (this.onclose) {\r\n this.onclose(e);\r\n }\r\n }\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform } from \"./Utils\";\r\n/** @private */\r\nexport class WebSocketTransport {\r\n constructor(httpClient, accessTokenFactory, logger, logMessageContent, webSocketConstructor, headers) {\r\n this._logger = logger;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logMessageContent = logMessageContent;\r\n this._webSocketConstructor = webSocketConstructor;\r\n this._httpClient = httpClient;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n this._headers = headers;\r\n }\r\n async connect(url, transferFormat) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) Connecting.\");\r\n if (this._accessTokenFactory) {\r\n const token = await this._accessTokenFactory();\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n return new Promise((resolve, reject) => {\r\n url = url.replace(/^http/, \"ws\");\r\n let webSocket;\r\n const cookies = this._httpClient.getCookieString(url);\r\n let opened = false;\r\n if (Platform.isNode) {\r\n const headers = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n if (cookies) {\r\n headers[HeaderNames.Cookie] = `${cookies}`;\r\n }\r\n // Only pass headers when in non-browser environments\r\n webSocket = new this._webSocketConstructor(url, undefined, {\r\n headers: { ...headers, ...this._headers },\r\n });\r\n }\r\n if (!webSocket) {\r\n // Chrome is not happy with passing 'undefined' as protocol\r\n webSocket = new this._webSocketConstructor(url);\r\n }\r\n if (transferFormat === TransferFormat.Binary) {\r\n webSocket.binaryType = \"arraybuffer\";\r\n }\r\n webSocket.onopen = (_event) => {\r\n this._logger.log(LogLevel.Information, `WebSocket connected to ${url}.`);\r\n this._webSocket = webSocket;\r\n opened = true;\r\n resolve();\r\n };\r\n webSocket.onerror = (event) => {\r\n let error = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n }\r\n else {\r\n error = \"There was an error with the transport\";\r\n }\r\n this._logger.log(LogLevel.Information, `(WebSockets transport) ${error}.`);\r\n };\r\n webSocket.onmessage = (message) => {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) data received. ${getDataDetail(message.data, this._logMessageContent)}.`);\r\n if (this.onreceive) {\r\n try {\r\n this.onreceive(message.data);\r\n }\r\n catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n webSocket.onclose = (event) => {\r\n // Don't call close handler if connection was never established\r\n // We'll reject the connect call instead\r\n if (opened) {\r\n this._close(event);\r\n }\r\n else {\r\n let error = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n }\r\n else {\r\n error = \"WebSocket failed to connect. The connection could not be found on the server,\"\r\n + \" either the endpoint may not be a SignalR endpoint,\"\r\n + \" the connection ID is not present on the server, or there is a proxy blocking WebSockets.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\";\r\n }\r\n reject(new Error(error));\r\n }\r\n };\r\n });\r\n }\r\n send(data) {\r\n if (this._webSocket && this._webSocket.readyState === this._webSocketConstructor.OPEN) {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) sending data. ${getDataDetail(data, this._logMessageContent)}.`);\r\n this._webSocket.send(data);\r\n return Promise.resolve();\r\n }\r\n return Promise.reject(\"WebSocket is not in the OPEN state\");\r\n }\r\n stop() {\r\n if (this._webSocket) {\r\n // Manually invoke onclose callback inline so we know the HttpConnection was closed properly before returning\r\n // This also solves an issue where websocket.onclose could take 18+ seconds to trigger during network disconnects\r\n this._close(undefined);\r\n }\r\n return Promise.resolve();\r\n }\r\n _close(event) {\r\n // webSocket will be null if the transport did not start successfully\r\n if (this._webSocket) {\r\n // Clear websocket handlers because we are considering the socket closed now\r\n this._webSocket.onclose = () => { };\r\n this._webSocket.onmessage = () => { };\r\n this._webSocket.onerror = () => { };\r\n this._webSocket.close();\r\n this._webSocket = undefined;\r\n }\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) socket closed.\");\r\n if (this.onclose) {\r\n if (this._isCloseEvent(event) && (event.wasClean === false || event.code !== 1000)) {\r\n this.onclose(new Error(`WebSocket closed with status code: ${event.code} (${event.reason || \"no reason given\"}).`));\r\n }\r\n else if (event instanceof Error) {\r\n this.onclose(event);\r\n }\r\n else {\r\n this.onclose();\r\n }\r\n }\r\n }\r\n _isCloseEvent(event) {\r\n return event && typeof event.wasClean === \"boolean\" && typeof event.code === \"number\";\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { DefaultHttpClient } from \"./DefaultHttpClient\";\r\nimport { AggregateErrors, DisabledTransportError, FailedToNegotiateWithServerError, FailedToStartTransportError, HttpError, UnsupportedTransportError } from \"./Errors\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { HttpTransportType, TransferFormat } from \"./ITransport\";\r\nimport { LongPollingTransport } from \"./LongPollingTransport\";\r\nimport { ServerSentEventsTransport } from \"./ServerSentEventsTransport\";\r\nimport { Arg, createLogger, getUserAgentHeader, Platform } from \"./Utils\";\r\nimport { WebSocketTransport } from \"./WebSocketTransport\";\r\nconst MAX_REDIRECTS = 100;\r\n/** @private */\r\nexport class HttpConnection {\r\n constructor(url, options = {}) {\r\n this._stopPromiseResolver = () => { };\r\n this.features = {};\r\n this._negotiateVersion = 1;\r\n Arg.isRequired(url, \"url\");\r\n this._logger = createLogger(options.logger);\r\n this.baseUrl = this._resolveUrl(url);\r\n options = options || {};\r\n options.logMessageContent = options.logMessageContent === undefined ? false : options.logMessageContent;\r\n if (typeof options.withCredentials === \"boolean\" || options.withCredentials === undefined) {\r\n options.withCredentials = options.withCredentials === undefined ? true : options.withCredentials;\r\n }\r\n else {\r\n throw new Error(\"withCredentials option was not a 'boolean' or 'undefined' value\");\r\n }\r\n options.timeout = options.timeout === undefined ? 100 * 1000 : options.timeout;\r\n let webSocketModule = null;\r\n let eventSourceModule = null;\r\n if (Platform.isNode && typeof require !== \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n webSocketModule = requireFunc(\"ws\");\r\n eventSourceModule = requireFunc(\"eventsource\");\r\n }\r\n if (!Platform.isNode && typeof WebSocket !== \"undefined\" && !options.WebSocket) {\r\n options.WebSocket = WebSocket;\r\n }\r\n else if (Platform.isNode && !options.WebSocket) {\r\n if (webSocketModule) {\r\n options.WebSocket = webSocketModule;\r\n }\r\n }\r\n if (!Platform.isNode && typeof EventSource !== \"undefined\" && !options.EventSource) {\r\n options.EventSource = EventSource;\r\n }\r\n else if (Platform.isNode && !options.EventSource) {\r\n if (typeof eventSourceModule !== \"undefined\") {\r\n options.EventSource = eventSourceModule;\r\n }\r\n }\r\n this._httpClient = options.httpClient || new DefaultHttpClient(this._logger);\r\n this._connectionState = \"Disconnected\" /* Disconnected */;\r\n this._connectionStarted = false;\r\n this._options = options;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n async start(transferFormat) {\r\n transferFormat = transferFormat || TransferFormat.Binary;\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Debug, `Starting connection with transfer format '${TransferFormat[transferFormat]}'.`);\r\n if (this._connectionState !== \"Disconnected\" /* Disconnected */) {\r\n return Promise.reject(new Error(\"Cannot start an HttpConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n this._connectionState = \"Connecting\" /* Connecting */;\r\n this._startInternalPromise = this._startInternal(transferFormat);\r\n await this._startInternalPromise;\r\n // The TypeScript compiler thinks that connectionState must be Connecting here. The TypeScript compiler is wrong.\r\n if (this._connectionState === \"Disconnecting\" /* Disconnecting */) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"Failed to start the HttpConnection before stop() was called.\";\r\n this._logger.log(LogLevel.Error, message);\r\n // We cannot await stopPromise inside startInternal since stopInternal awaits the startInternalPromise.\r\n await this._stopPromise;\r\n return Promise.reject(new Error(message));\r\n }\r\n else if (this._connectionState !== \"Connected\" /* Connected */) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!\";\r\n this._logger.log(LogLevel.Error, message);\r\n return Promise.reject(new Error(message));\r\n }\r\n this._connectionStarted = true;\r\n }\r\n send(data) {\r\n if (this._connectionState !== \"Connected\" /* Connected */) {\r\n return Promise.reject(new Error(\"Cannot send data if the connection is not in the 'Connected' State.\"));\r\n }\r\n if (!this._sendQueue) {\r\n this._sendQueue = new TransportSendQueue(this.transport);\r\n }\r\n // Transport will not be null if state is connected\r\n return this._sendQueue.send(data);\r\n }\r\n async stop(error) {\r\n if (this._connectionState === \"Disconnected\" /* Disconnected */) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n if (this._connectionState === \"Disconnecting\" /* Disconnecting */) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise;\r\n }\r\n this._connectionState = \"Disconnecting\" /* Disconnecting */;\r\n this._stopPromise = new Promise((resolve) => {\r\n // Don't complete stop() until stopConnection() completes.\r\n this._stopPromiseResolver = resolve;\r\n });\r\n // stopInternal should never throw so just observe it.\r\n await this._stopInternal(error);\r\n await this._stopPromise;\r\n }\r\n async _stopInternal(error) {\r\n // Set error as soon as possible otherwise there is a race between\r\n // the transport closing and providing an error and the error from a close message\r\n // We would prefer the close message error.\r\n this._stopError = error;\r\n try {\r\n await this._startInternalPromise;\r\n }\r\n catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n // The transport's onclose will trigger stopConnection which will run our onclose event.\r\n // The transport should always be set if currently connected. If it wasn't set, it's likely because\r\n // stop was called during start() and start() failed.\r\n if (this.transport) {\r\n try {\r\n await this.transport.stop();\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.transport.stop() threw error '${e}'.`);\r\n this._stopConnection();\r\n }\r\n this.transport = undefined;\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, \"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.\");\r\n }\r\n }\r\n async _startInternal(transferFormat) {\r\n // Store the original base url and the access token factory since they may change\r\n // as part of negotiating\r\n let url = this.baseUrl;\r\n this._accessTokenFactory = this._options.accessTokenFactory;\r\n try {\r\n if (this._options.skipNegotiation) {\r\n if (this._options.transport === HttpTransportType.WebSockets) {\r\n // No need to add a connection ID in this case\r\n this.transport = this._constructTransport(HttpTransportType.WebSockets);\r\n // We should just call connect directly in this case.\r\n // No fallback or negotiate in this case.\r\n await this._startTransport(url, transferFormat);\r\n }\r\n else {\r\n throw new Error(\"Negotiation can only be skipped when using the WebSocket transport directly.\");\r\n }\r\n }\r\n else {\r\n let negotiateResponse = null;\r\n let redirects = 0;\r\n do {\r\n negotiateResponse = await this._getNegotiationResponse(url);\r\n // the user tries to stop the connection when it is being started\r\n if (this._connectionState === \"Disconnecting\" /* Disconnecting */ || this._connectionState === \"Disconnected\" /* Disconnected */) {\r\n throw new Error(\"The connection was stopped during negotiation.\");\r\n }\r\n if (negotiateResponse.error) {\r\n throw new Error(negotiateResponse.error);\r\n }\r\n if (negotiateResponse.ProtocolVersion) {\r\n throw new Error(\"Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.\");\r\n }\r\n if (negotiateResponse.url) {\r\n url = negotiateResponse.url;\r\n }\r\n if (negotiateResponse.accessToken) {\r\n // Replace the current access token factory with one that uses\r\n // the returned access token\r\n const accessToken = negotiateResponse.accessToken;\r\n this._accessTokenFactory = () => accessToken;\r\n }\r\n redirects++;\r\n } while (negotiateResponse.url && redirects < MAX_REDIRECTS);\r\n if (redirects === MAX_REDIRECTS && negotiateResponse.url) {\r\n throw new Error(\"Negotiate redirection limit exceeded.\");\r\n }\r\n await this._createTransport(url, this._options.transport, negotiateResponse, transferFormat);\r\n }\r\n if (this.transport instanceof LongPollingTransport) {\r\n this.features.inherentKeepAlive = true;\r\n }\r\n if (this._connectionState === \"Connecting\" /* Connecting */) {\r\n // Ensure the connection transitions to the connected state prior to completing this.startInternalPromise.\r\n // start() will handle the case when stop was called and startInternal exits still in the disconnecting state.\r\n this._logger.log(LogLevel.Debug, \"The HttpConnection connected successfully.\");\r\n this._connectionState = \"Connected\" /* Connected */;\r\n }\r\n // stop() is waiting on us via this.startInternalPromise so keep this.transport around so it can clean up.\r\n // This is the only case startInternal can exit in neither the connected nor disconnected state because stopConnection()\r\n // will transition to the disconnected state. start() will wait for the transition using the stopPromise.\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, \"Failed to start the connection: \" + e);\r\n this._connectionState = \"Disconnected\" /* Disconnected */;\r\n this.transport = undefined;\r\n // if start fails, any active calls to stop assume that start will complete the stop promise\r\n this._stopPromiseResolver();\r\n return Promise.reject(e);\r\n }\r\n }\r\n async _getNegotiationResponse(url) {\r\n const headers = {};\r\n if (this._accessTokenFactory) {\r\n const token = await this._accessTokenFactory();\r\n if (token) {\r\n headers[HeaderNames.Authorization] = `Bearer ${token}`;\r\n }\r\n }\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n const negotiateUrl = this._resolveNegotiateUrl(url);\r\n this._logger.log(LogLevel.Debug, `Sending negotiation request: ${negotiateUrl}.`);\r\n try {\r\n const response = await this._httpClient.post(negotiateUrl, {\r\n content: \"\",\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n });\r\n if (response.statusCode !== 200) {\r\n return Promise.reject(new Error(`Unexpected status code returned from negotiate '${response.statusCode}'`));\r\n }\r\n const negotiateResponse = JSON.parse(response.content);\r\n if (!negotiateResponse.negotiateVersion || negotiateResponse.negotiateVersion < 1) {\r\n // Negotiate version 0 doesn't use connectionToken\r\n // So we set it equal to connectionId so all our logic can use connectionToken without being aware of the negotiate version\r\n negotiateResponse.connectionToken = negotiateResponse.connectionId;\r\n }\r\n return negotiateResponse;\r\n }\r\n catch (e) {\r\n let errorMessage = \"Failed to complete negotiation with the server: \" + e;\r\n if (e instanceof HttpError) {\r\n if (e.statusCode === 404) {\r\n errorMessage = errorMessage + \" Either this is not a SignalR endpoint or there is a proxy blocking the connection.\";\r\n }\r\n }\r\n this._logger.log(LogLevel.Error, errorMessage);\r\n return Promise.reject(new FailedToNegotiateWithServerError(errorMessage));\r\n }\r\n }\r\n _createConnectUrl(url, connectionToken) {\r\n if (!connectionToken) {\r\n return url;\r\n }\r\n return url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + `id=${connectionToken}`;\r\n }\r\n async _createTransport(url, requestedTransport, negotiateResponse, requestedTransferFormat) {\r\n let connectUrl = this._createConnectUrl(url, negotiateResponse.connectionToken);\r\n if (this._isITransport(requestedTransport)) {\r\n this._logger.log(LogLevel.Debug, \"Connection was provided an instance of ITransport, using that directly.\");\r\n this.transport = requestedTransport;\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n this.connectionId = negotiateResponse.connectionId;\r\n return;\r\n }\r\n const transportExceptions = [];\r\n const transports = negotiateResponse.availableTransports || [];\r\n let negotiate = negotiateResponse;\r\n for (const endpoint of transports) {\r\n const transportOrError = this._resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat);\r\n if (transportOrError instanceof Error) {\r\n // Store the error and continue, we don't want to cause a re-negotiate in these cases\r\n transportExceptions.push(`${endpoint.transport} failed:`);\r\n transportExceptions.push(transportOrError);\r\n }\r\n else if (this._isITransport(transportOrError)) {\r\n this.transport = transportOrError;\r\n if (!negotiate) {\r\n try {\r\n negotiate = await this._getNegotiationResponse(url);\r\n }\r\n catch (ex) {\r\n return Promise.reject(ex);\r\n }\r\n connectUrl = this._createConnectUrl(url, negotiate.connectionToken);\r\n }\r\n try {\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n this.connectionId = negotiate.connectionId;\r\n return;\r\n }\r\n catch (ex) {\r\n this._logger.log(LogLevel.Error, `Failed to start the transport '${endpoint.transport}': ${ex}`);\r\n negotiate = undefined;\r\n transportExceptions.push(new FailedToStartTransportError(`${endpoint.transport} failed: ${ex}`, HttpTransportType[endpoint.transport]));\r\n if (this._connectionState !== \"Connecting\" /* Connecting */) {\r\n const message = \"Failed to select transport before stop() was called.\";\r\n this._logger.log(LogLevel.Debug, message);\r\n return Promise.reject(new Error(message));\r\n }\r\n }\r\n }\r\n }\r\n if (transportExceptions.length > 0) {\r\n return Promise.reject(new AggregateErrors(`Unable to connect to the server with any of the available transports. ${transportExceptions.join(\" \")}`, transportExceptions));\r\n }\r\n return Promise.reject(new Error(\"None of the transports supported by the client are supported by the server.\"));\r\n }\r\n _constructTransport(transport) {\r\n switch (transport) {\r\n case HttpTransportType.WebSockets:\r\n if (!this._options.WebSocket) {\r\n throw new Error(\"'WebSocket' is not supported in your environment.\");\r\n }\r\n return new WebSocketTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options.logMessageContent, this._options.WebSocket, this._options.headers || {});\r\n case HttpTransportType.ServerSentEvents:\r\n if (!this._options.EventSource) {\r\n throw new Error(\"'EventSource' is not supported in your environment.\");\r\n }\r\n return new ServerSentEventsTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options);\r\n case HttpTransportType.LongPolling:\r\n return new LongPollingTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options);\r\n default:\r\n throw new Error(`Unknown transport: ${transport}.`);\r\n }\r\n }\r\n _startTransport(url, transferFormat) {\r\n this.transport.onreceive = this.onreceive;\r\n this.transport.onclose = (e) => this._stopConnection(e);\r\n return this.transport.connect(url, transferFormat);\r\n }\r\n _resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat) {\r\n const transport = HttpTransportType[endpoint.transport];\r\n if (transport === null || transport === undefined) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n return new Error(`Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n }\r\n else {\r\n if (transportMatches(requestedTransport, transport)) {\r\n const transferFormats = endpoint.transferFormats.map((s) => TransferFormat[s]);\r\n if (transferFormats.indexOf(requestedTransferFormat) >= 0) {\r\n if ((transport === HttpTransportType.WebSockets && !this._options.WebSocket) ||\r\n (transport === HttpTransportType.ServerSentEvents && !this._options.EventSource)) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it is not supported in your environment.'`);\r\n return new UnsupportedTransportError(`'${HttpTransportType[transport]}' is not supported in your environment.`, transport);\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, `Selecting transport '${HttpTransportType[transport]}'.`);\r\n try {\r\n return this._constructTransport(transport);\r\n }\r\n catch (ex) {\r\n return ex;\r\n }\r\n }\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it does not support the requested transfer format '${TransferFormat[requestedTransferFormat]}'.`);\r\n return new Error(`'${HttpTransportType[transport]}' does not support ${TransferFormat[requestedTransferFormat]}.`);\r\n }\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it was disabled by the client.`);\r\n return new DisabledTransportError(`'${HttpTransportType[transport]}' is disabled by the client.`, transport);\r\n }\r\n }\r\n }\r\n _isITransport(transport) {\r\n return transport && typeof (transport) === \"object\" && \"connect\" in transport;\r\n }\r\n _stopConnection(error) {\r\n this._logger.log(LogLevel.Debug, `HttpConnection.stopConnection(${error}) called while in state ${this._connectionState}.`);\r\n this.transport = undefined;\r\n // If we have a stopError, it takes precedence over the error from the transport\r\n error = this._stopError || error;\r\n this._stopError = undefined;\r\n if (this._connectionState === \"Disconnected\" /* Disconnected */) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is already in the disconnected state.`);\r\n return;\r\n }\r\n if (this._connectionState === \"Connecting\" /* Connecting */) {\r\n this._logger.log(LogLevel.Warning, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is still in the connecting state.`);\r\n throw new Error(`HttpConnection.stopConnection(${error}) was called while the connection is still in the connecting state.`);\r\n }\r\n if (this._connectionState === \"Disconnecting\" /* Disconnecting */) {\r\n // A call to stop() induced this call to stopConnection and needs to be completed.\r\n // Any stop() awaiters will be scheduled to continue after the onclose callback fires.\r\n this._stopPromiseResolver();\r\n }\r\n if (error) {\r\n this._logger.log(LogLevel.Error, `Connection disconnected with error '${error}'.`);\r\n }\r\n else {\r\n this._logger.log(LogLevel.Information, \"Connection disconnected.\");\r\n }\r\n if (this._sendQueue) {\r\n this._sendQueue.stop().catch((e) => {\r\n this._logger.log(LogLevel.Error, `TransportSendQueue.stop() threw error '${e}'.`);\r\n });\r\n this._sendQueue = undefined;\r\n }\r\n this.connectionId = undefined;\r\n this._connectionState = \"Disconnected\" /* Disconnected */;\r\n if (this._connectionStarted) {\r\n this._connectionStarted = false;\r\n try {\r\n if (this.onclose) {\r\n this.onclose(error);\r\n }\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.onclose(${error}) threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n _resolveUrl(url) {\r\n // startsWith is not supported in IE\r\n if (url.lastIndexOf(\"https://\", 0) === 0 || url.lastIndexOf(\"http://\", 0) === 0) {\r\n return url;\r\n }\r\n if (!Platform.isBrowser) {\r\n throw new Error(`Cannot resolve '${url}'.`);\r\n }\r\n // Setting the url to the href propery of an anchor tag handles normalization\r\n // for us. There are 3 main cases.\r\n // 1. Relative path normalization e.g \"b\" -> \"http://localhost:5000/a/b\"\r\n // 2. Absolute path normalization e.g \"/a/b\" -> \"http://localhost:5000/a/b\"\r\n // 3. Networkpath reference normalization e.g \"//localhost:5000/a/b\" -> \"http://localhost:5000/a/b\"\r\n const aTag = window.document.createElement(\"a\");\r\n aTag.href = url;\r\n this._logger.log(LogLevel.Information, `Normalizing '${url}' to '${aTag.href}'.`);\r\n return aTag.href;\r\n }\r\n _resolveNegotiateUrl(url) {\r\n const index = url.indexOf(\"?\");\r\n let negotiateUrl = url.substring(0, index === -1 ? url.length : index);\r\n if (negotiateUrl[negotiateUrl.length - 1] !== \"/\") {\r\n negotiateUrl += \"/\";\r\n }\r\n negotiateUrl += \"negotiate\";\r\n negotiateUrl += index === -1 ? \"\" : url.substring(index);\r\n if (negotiateUrl.indexOf(\"negotiateVersion\") === -1) {\r\n negotiateUrl += index === -1 ? \"?\" : \"&\";\r\n negotiateUrl += \"negotiateVersion=\" + this._negotiateVersion;\r\n }\r\n return negotiateUrl;\r\n }\r\n}\r\nfunction transportMatches(requestedTransport, actualTransport) {\r\n return !requestedTransport || ((actualTransport & requestedTransport) !== 0);\r\n}\r\n/** @private */\r\nexport class TransportSendQueue {\r\n constructor(_transport) {\r\n this._transport = _transport;\r\n this._buffer = [];\r\n this._executing = true;\r\n this._sendBufferedData = new PromiseSource();\r\n this._transportResult = new PromiseSource();\r\n this._sendLoopPromise = this._sendLoop();\r\n }\r\n send(data) {\r\n this._bufferData(data);\r\n if (!this._transportResult) {\r\n this._transportResult = new PromiseSource();\r\n }\r\n return this._transportResult.promise;\r\n }\r\n stop() {\r\n this._executing = false;\r\n this._sendBufferedData.resolve();\r\n return this._sendLoopPromise;\r\n }\r\n _bufferData(data) {\r\n if (this._buffer.length && typeof (this._buffer[0]) !== typeof (data)) {\r\n throw new Error(`Expected data to be of type ${typeof (this._buffer)} but was of type ${typeof (data)}`);\r\n }\r\n this._buffer.push(data);\r\n this._sendBufferedData.resolve();\r\n }\r\n async _sendLoop() {\r\n while (true) {\r\n await this._sendBufferedData.promise;\r\n if (!this._executing) {\r\n if (this._transportResult) {\r\n this._transportResult.reject(\"Connection stopped.\");\r\n }\r\n break;\r\n }\r\n this._sendBufferedData = new PromiseSource();\r\n const transportResult = this._transportResult;\r\n this._transportResult = undefined;\r\n const data = typeof (this._buffer[0]) === \"string\" ?\r\n this._buffer.join(\"\") :\r\n TransportSendQueue._concatBuffers(this._buffer);\r\n this._buffer.length = 0;\r\n try {\r\n await this._transport.send(data);\r\n transportResult.resolve();\r\n }\r\n catch (error) {\r\n transportResult.reject(error);\r\n }\r\n }\r\n }\r\n static _concatBuffers(arrayBuffers) {\r\n const totalLength = arrayBuffers.map((b) => b.byteLength).reduce((a, b) => a + b);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const item of arrayBuffers) {\r\n result.set(new Uint8Array(item), offset);\r\n offset += item.byteLength;\r\n }\r\n return result.buffer;\r\n }\r\n}\r\nclass PromiseSource {\r\n constructor() {\r\n this.promise = new Promise((resolve, reject) => [this._resolver, this._rejecter] = [resolve, reject]);\r\n }\r\n resolve() {\r\n this._resolver();\r\n }\r\n reject(reason) {\r\n this._rejecter(reason);\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// Not exported from index\r\n/** @private */\r\nexport class TextMessageFormat {\r\n static write(output) {\r\n return `${output}${TextMessageFormat.RecordSeparator}`;\r\n }\r\n static parse(input) {\r\n if (input[input.length - 1] !== TextMessageFormat.RecordSeparator) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n const messages = input.split(TextMessageFormat.RecordSeparator);\r\n messages.pop();\r\n return messages;\r\n }\r\n}\r\nTextMessageFormat.RecordSeparatorCode = 0x1e;\r\nTextMessageFormat.RecordSeparator = String.fromCharCode(TextMessageFormat.RecordSeparatorCode);\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n/** @private */\r\nexport class HandshakeProtocol {\r\n // Handshake request is always JSON\r\n writeHandshakeRequest(handshakeRequest) {\r\n return TextMessageFormat.write(JSON.stringify(handshakeRequest));\r\n }\r\n parseHandshakeResponse(data) {\r\n let messageData;\r\n let remainingData;\r\n if (isArrayBuffer(data)) {\r\n // Format is binary but still need to read JSON text from handshake response\r\n const binaryData = new Uint8Array(data);\r\n const separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = String.fromCharCode.apply(null, Array.prototype.slice.call(binaryData.slice(0, responseLength)));\r\n remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;\r\n }\r\n else {\r\n const textData = data;\r\n const separatorIndex = textData.indexOf(TextMessageFormat.RecordSeparator);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = textData.substring(0, responseLength);\r\n remainingData = (textData.length > responseLength) ? textData.substring(responseLength) : null;\r\n }\r\n // At this point we should have just the single handshake message\r\n const messages = TextMessageFormat.parse(messageData);\r\n const response = JSON.parse(messages[0]);\r\n if (response.type) {\r\n throw new Error(\"Expected a handshake response from the server.\");\r\n }\r\n const responseMessage = response;\r\n // multiple messages could have arrived with handshake\r\n // return additional data to be parsed as usual, or null if all parsed\r\n return [remainingData, responseMessage];\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** Defines the type of a Hub Message. */\r\nexport var MessageType;\r\n(function (MessageType) {\r\n /** Indicates the message is an Invocation message and implements the {@link @microsoft/signalr.InvocationMessage} interface. */\r\n MessageType[MessageType[\"Invocation\"] = 1] = \"Invocation\";\r\n /** Indicates the message is a StreamItem message and implements the {@link @microsoft/signalr.StreamItemMessage} interface. */\r\n MessageType[MessageType[\"StreamItem\"] = 2] = \"StreamItem\";\r\n /** Indicates the message is a Completion message and implements the {@link @microsoft/signalr.CompletionMessage} interface. */\r\n MessageType[MessageType[\"Completion\"] = 3] = \"Completion\";\r\n /** Indicates the message is a Stream Invocation message and implements the {@link @microsoft/signalr.StreamInvocationMessage} interface. */\r\n MessageType[MessageType[\"StreamInvocation\"] = 4] = \"StreamInvocation\";\r\n /** Indicates the message is a Cancel Invocation message and implements the {@link @microsoft/signalr.CancelInvocationMessage} interface. */\r\n MessageType[MessageType[\"CancelInvocation\"] = 5] = \"CancelInvocation\";\r\n /** Indicates the message is a Ping message and implements the {@link @microsoft/signalr.PingMessage} interface. */\r\n MessageType[MessageType[\"Ping\"] = 6] = \"Ping\";\r\n /** Indicates the message is a Close message and implements the {@link @microsoft/signalr.CloseMessage} interface. */\r\n MessageType[MessageType[\"Close\"] = 7] = \"Close\";\r\n})(MessageType || (MessageType = {}));\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { SubjectSubscription } from \"./Utils\";\r\n/** Stream implementation to stream items to the server. */\r\nexport class Subject {\r\n constructor() {\r\n this.observers = [];\r\n }\r\n next(item) {\r\n for (const observer of this.observers) {\r\n observer.next(item);\r\n }\r\n }\r\n error(err) {\r\n for (const observer of this.observers) {\r\n if (observer.error) {\r\n observer.error(err);\r\n }\r\n }\r\n }\r\n complete() {\r\n for (const observer of this.observers) {\r\n if (observer.complete) {\r\n observer.complete();\r\n }\r\n }\r\n }\r\n subscribe(observer) {\r\n this.observers.push(observer);\r\n return new SubjectSubscription(this, observer);\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { HandshakeProtocol } from \"./HandshakeProtocol\";\r\nimport { MessageType } from \"./IHubProtocol\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { Subject } from \"./Subject\";\r\nimport { Arg, getErrorString, Platform } from \"./Utils\";\r\nconst DEFAULT_TIMEOUT_IN_MS = 30 * 1000;\r\nconst DEFAULT_PING_INTERVAL_IN_MS = 15 * 1000;\r\n/** Describes the current state of the {@link HubConnection} to the server. */\r\nexport var HubConnectionState;\r\n(function (HubConnectionState) {\r\n /** The hub connection is disconnected. */\r\n HubConnectionState[\"Disconnected\"] = \"Disconnected\";\r\n /** The hub connection is connecting. */\r\n HubConnectionState[\"Connecting\"] = \"Connecting\";\r\n /** The hub connection is connected. */\r\n HubConnectionState[\"Connected\"] = \"Connected\";\r\n /** The hub connection is disconnecting. */\r\n HubConnectionState[\"Disconnecting\"] = \"Disconnecting\";\r\n /** The hub connection is reconnecting. */\r\n HubConnectionState[\"Reconnecting\"] = \"Reconnecting\";\r\n})(HubConnectionState || (HubConnectionState = {}));\r\n/** Represents a connection to a SignalR Hub. */\r\nexport class HubConnection {\r\n constructor(connection, logger, protocol, reconnectPolicy) {\r\n this._nextKeepAlive = 0;\r\n this._freezeEventListener = () => {\r\n this._logger.log(LogLevel.Warning, \"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://docs.microsoft.com/aspnet/core/signalr/javascript-client#bsleep\");\r\n };\r\n Arg.isRequired(connection, \"connection\");\r\n Arg.isRequired(logger, \"logger\");\r\n Arg.isRequired(protocol, \"protocol\");\r\n this.serverTimeoutInMilliseconds = DEFAULT_TIMEOUT_IN_MS;\r\n this.keepAliveIntervalInMilliseconds = DEFAULT_PING_INTERVAL_IN_MS;\r\n this._logger = logger;\r\n this._protocol = protocol;\r\n this.connection = connection;\r\n this._reconnectPolicy = reconnectPolicy;\r\n this._handshakeProtocol = new HandshakeProtocol();\r\n this.connection.onreceive = (data) => this._processIncomingData(data);\r\n this.connection.onclose = (error) => this._connectionClosed(error);\r\n this._callbacks = {};\r\n this._methods = {};\r\n this._closedCallbacks = [];\r\n this._reconnectingCallbacks = [];\r\n this._reconnectedCallbacks = [];\r\n this._invocationId = 0;\r\n this._receivedHandshakeResponse = false;\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n this._cachedPingMessage = this._protocol.writeMessage({ type: MessageType.Ping });\r\n }\r\n /** @internal */\r\n // Using a public static factory method means we can have a private constructor and an _internal_\r\n // create method that can be used by HubConnectionBuilder. An \"internal\" constructor would just\r\n // be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a\r\n // public parameter-less constructor.\r\n static create(connection, logger, protocol, reconnectPolicy) {\r\n return new HubConnection(connection, logger, protocol, reconnectPolicy);\r\n }\r\n /** Indicates the state of the {@link HubConnection} to the server. */\r\n get state() {\r\n return this._connectionState;\r\n }\r\n /** Represents the connection id of the {@link HubConnection} on the server. The connection id will be null when the connection is either\r\n * in the disconnected state or if the negotiation step was skipped.\r\n */\r\n get connectionId() {\r\n return this.connection ? (this.connection.connectionId || null) : null;\r\n }\r\n /** Indicates the url of the {@link HubConnection} to the server. */\r\n get baseUrl() {\r\n return this.connection.baseUrl || \"\";\r\n }\r\n /**\r\n * Sets a new url for the HubConnection. Note that the url can only be changed when the connection is in either the Disconnected or\r\n * Reconnecting states.\r\n * @param {string} url The url to connect to.\r\n */\r\n set baseUrl(url) {\r\n if (this._connectionState !== HubConnectionState.Disconnected && this._connectionState !== HubConnectionState.Reconnecting) {\r\n throw new Error(\"The HubConnection must be in the Disconnected or Reconnecting state to change the url.\");\r\n }\r\n if (!url) {\r\n throw new Error(\"The HubConnection url must be a valid url.\");\r\n }\r\n this.connection.baseUrl = url;\r\n }\r\n /** Starts the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully established, or rejects with an error.\r\n */\r\n start() {\r\n this._startPromise = this._startWithStateTransitions();\r\n return this._startPromise;\r\n }\r\n async _startWithStateTransitions() {\r\n if (this._connectionState !== HubConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start a HubConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n this._connectionState = HubConnectionState.Connecting;\r\n this._logger.log(LogLevel.Debug, \"Starting HubConnection.\");\r\n try {\r\n await this._startInternal();\r\n if (Platform.isBrowser) {\r\n // Log when the browser freezes the tab so users know why their connection unexpectedly stopped working\r\n window.document.addEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n this._connectionState = HubConnectionState.Connected;\r\n this._connectionStarted = true;\r\n this._logger.log(LogLevel.Debug, \"HubConnection connected successfully.\");\r\n }\r\n catch (e) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._logger.log(LogLevel.Debug, `HubConnection failed to start successfully because of error '${e}'.`);\r\n return Promise.reject(e);\r\n }\r\n }\r\n async _startInternal() {\r\n this._stopDuringStartError = undefined;\r\n this._receivedHandshakeResponse = false;\r\n // Set up the promise before any connection is (re)started otherwise it could race with received messages\r\n const handshakePromise = new Promise((resolve, reject) => {\r\n this._handshakeResolver = resolve;\r\n this._handshakeRejecter = reject;\r\n });\r\n await this.connection.start(this._protocol.transferFormat);\r\n try {\r\n const handshakeRequest = {\r\n protocol: this._protocol.name,\r\n version: this._protocol.version,\r\n };\r\n this._logger.log(LogLevel.Debug, \"Sending handshake request.\");\r\n await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(handshakeRequest));\r\n this._logger.log(LogLevel.Information, `Using HubProtocol '${this._protocol.name}'.`);\r\n // defensively cleanup timeout in case we receive a message from the server before we finish start\r\n this._cleanupTimeout();\r\n this._resetTimeoutPeriod();\r\n this._resetKeepAliveInterval();\r\n await handshakePromise;\r\n // It's important to check the stopDuringStartError instead of just relying on the handshakePromise\r\n // being rejected on close, because this continuation can run after both the handshake completed successfully\r\n // and the connection was closed.\r\n if (this._stopDuringStartError) {\r\n // It's important to throw instead of returning a rejected promise, because we don't want to allow any state\r\n // transitions to occur between now and the calling code observing the exceptions. Returning a rejected promise\r\n // will cause the calling continuation to get scheduled to run later.\r\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\r\n throw this._stopDuringStartError;\r\n }\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Debug, `Hub handshake failed with error '${e}' during start(). Stopping HubConnection.`);\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n // HttpConnection.stop() should not complete until after the onclose callback is invoked.\r\n // This will transition the HubConnection to the disconnected state before HttpConnection.stop() completes.\r\n await this.connection.stop(e);\r\n throw e;\r\n }\r\n }\r\n /** Stops the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully terminated, or rejects with an error.\r\n */\r\n async stop() {\r\n // Capture the start promise before the connection might be restarted in an onclose callback.\r\n const startPromise = this._startPromise;\r\n this._stopPromise = this._stopInternal();\r\n await this._stopPromise;\r\n try {\r\n // Awaiting undefined continues immediately\r\n await startPromise;\r\n }\r\n catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n }\r\n _stopInternal(error) {\r\n if (this._connectionState === HubConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HubConnection.stop(${error}) ignored because it is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise;\r\n }\r\n this._connectionState = HubConnectionState.Disconnecting;\r\n this._logger.log(LogLevel.Debug, \"Stopping HubConnection.\");\r\n if (this._reconnectDelayHandle) {\r\n // We're in a reconnect delay which means the underlying connection is currently already stopped.\r\n // Just clear the handle to stop the reconnect loop (which no one is waiting on thankfully) and\r\n // fire the onclose callbacks.\r\n this._logger.log(LogLevel.Debug, \"Connection stopped during reconnect delay. Done reconnecting.\");\r\n clearTimeout(this._reconnectDelayHandle);\r\n this._reconnectDelayHandle = undefined;\r\n this._completeClose();\r\n return Promise.resolve();\r\n }\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n this._stopDuringStartError = error || new Error(\"The connection was stopped before the hub handshake could complete.\");\r\n // HttpConnection.stop() should not complete until after either HttpConnection.start() fails\r\n // or the onclose callback is invoked. The onclose callback will transition the HubConnection\r\n // to the disconnected state if need be before HttpConnection.stop() completes.\r\n return this.connection.stop(error);\r\n }\r\n /** Invokes a streaming hub method on the server using the specified name and arguments.\r\n *\r\n * @typeparam T The type of the items returned by the server.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {IStreamResult} An object that yields results from the server as they are received.\r\n */\r\n stream(methodName, ...args) {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createStreamInvocation(methodName, args, streamIds);\r\n // eslint-disable-next-line prefer-const\r\n let promiseQueue;\r\n const subject = new Subject();\r\n subject.cancelCallback = () => {\r\n const cancelInvocation = this._createCancelInvocation(invocationDescriptor.invocationId);\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n return promiseQueue.then(() => {\r\n return this._sendWithProtocol(cancelInvocation);\r\n });\r\n };\r\n this._callbacks[invocationDescriptor.invocationId] = (invocationEvent, error) => {\r\n if (error) {\r\n subject.error(error);\r\n return;\r\n }\r\n else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n subject.error(new Error(invocationEvent.error));\r\n }\r\n else {\r\n subject.complete();\r\n }\r\n }\r\n else {\r\n subject.next((invocationEvent.item));\r\n }\r\n }\r\n };\r\n promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n subject.error(e);\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n });\r\n this._launchStreams(streams, promiseQueue);\r\n return subject;\r\n }\r\n _sendMessage(message) {\r\n this._resetKeepAliveInterval();\r\n return this.connection.send(message);\r\n }\r\n /**\r\n * Sends a js object to the server.\r\n * @param message The js object to serialize and send.\r\n */\r\n _sendWithProtocol(message) {\r\n return this._sendMessage(this._protocol.writeMessage(message));\r\n }\r\n /** Invokes a hub method on the server using the specified name and arguments. Does not wait for a response from the receiver.\r\n *\r\n * The Promise returned by this method resolves when the client has sent the invocation to the server. The server may still\r\n * be processing the invocation.\r\n *\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves when the invocation has been successfully sent, or rejects with an error.\r\n */\r\n send(methodName, ...args) {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const sendPromise = this._sendWithProtocol(this._createInvocation(methodName, args, true, streamIds));\r\n this._launchStreams(streams, sendPromise);\r\n return sendPromise;\r\n }\r\n /** Invokes a hub method on the server using the specified name and arguments.\r\n *\r\n * The Promise returned by this method resolves when the server indicates it has finished invoking the method. When the promise\r\n * resolves, the server has finished invoking the method. If the server method returns a result, it is produced as the result of\r\n * resolving the Promise.\r\n *\r\n * @typeparam T The expected return type.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves with the result of the server method (if any), or rejects with an error.\r\n */\r\n invoke(methodName, ...args) {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createInvocation(methodName, args, false, streamIds);\r\n const p = new Promise((resolve, reject) => {\r\n // invocationId will always have a value for a non-blocking invocation\r\n this._callbacks[invocationDescriptor.invocationId] = (invocationEvent, error) => {\r\n if (error) {\r\n reject(error);\r\n return;\r\n }\r\n else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n reject(new Error(invocationEvent.error));\r\n }\r\n else {\r\n resolve(invocationEvent.result);\r\n }\r\n }\r\n else {\r\n reject(new Error(`Unexpected message type: ${invocationEvent.type}`));\r\n }\r\n }\r\n };\r\n const promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n reject(e);\r\n // invocationId will always have a value for a non-blocking invocation\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n });\r\n this._launchStreams(streams, promiseQueue);\r\n });\r\n return p;\r\n }\r\n /** Registers a handler that will be invoked when the hub method with the specified method name is invoked.\r\n *\r\n * @param {string} methodName The name of the hub method to define.\r\n * @param {Function} newMethod The handler that will be raised when the hub method is invoked.\r\n */\r\n on(methodName, newMethod) {\r\n if (!methodName || !newMethod) {\r\n return;\r\n }\r\n methodName = methodName.toLowerCase();\r\n if (!this._methods[methodName]) {\r\n this._methods[methodName] = [];\r\n }\r\n // Preventing adding the same handler multiple times.\r\n if (this._methods[methodName].indexOf(newMethod) !== -1) {\r\n return;\r\n }\r\n this._methods[methodName].push(newMethod);\r\n }\r\n off(methodName, method) {\r\n if (!methodName) {\r\n return;\r\n }\r\n methodName = methodName.toLowerCase();\r\n const handlers = this._methods[methodName];\r\n if (!handlers) {\r\n return;\r\n }\r\n if (method) {\r\n const removeIdx = handlers.indexOf(method);\r\n if (removeIdx !== -1) {\r\n handlers.splice(removeIdx, 1);\r\n if (handlers.length === 0) {\r\n delete this._methods[methodName];\r\n }\r\n }\r\n }\r\n else {\r\n delete this._methods[methodName];\r\n }\r\n }\r\n /** Registers a handler that will be invoked when the connection is closed.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection is closed. Optionally receives a single argument containing the error that caused the connection to close (if any).\r\n */\r\n onclose(callback) {\r\n if (callback) {\r\n this._closedCallbacks.push(callback);\r\n }\r\n }\r\n /** Registers a handler that will be invoked when the connection starts reconnecting.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection starts reconnecting. Optionally receives a single argument containing the error that caused the connection to start reconnecting (if any).\r\n */\r\n onreconnecting(callback) {\r\n if (callback) {\r\n this._reconnectingCallbacks.push(callback);\r\n }\r\n }\r\n /** Registers a handler that will be invoked when the connection successfully reconnects.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection successfully reconnects.\r\n */\r\n onreconnected(callback) {\r\n if (callback) {\r\n this._reconnectedCallbacks.push(callback);\r\n }\r\n }\r\n _processIncomingData(data) {\r\n this._cleanupTimeout();\r\n if (!this._receivedHandshakeResponse) {\r\n data = this._processHandshakeResponse(data);\r\n this._receivedHandshakeResponse = true;\r\n }\r\n // Data may have all been read when processing handshake response\r\n if (data) {\r\n // Parse the messages\r\n const messages = this._protocol.parseMessages(data, this._logger);\r\n for (const message of messages) {\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n this._invokeClientMethod(message);\r\n break;\r\n case MessageType.StreamItem:\r\n case MessageType.Completion: {\r\n const callback = this._callbacks[message.invocationId];\r\n if (callback) {\r\n if (message.type === MessageType.Completion) {\r\n delete this._callbacks[message.invocationId];\r\n }\r\n try {\r\n callback(message);\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream callback threw error: ${getErrorString(e)}`);\r\n }\r\n }\r\n break;\r\n }\r\n case MessageType.Ping:\r\n // Don't care about pings\r\n break;\r\n case MessageType.Close: {\r\n this._logger.log(LogLevel.Information, \"Close message received from server.\");\r\n const error = message.error ? new Error(\"Server returned an error on close: \" + message.error) : undefined;\r\n if (message.allowReconnect === true) {\r\n // It feels wrong not to await connection.stop() here, but processIncomingData is called as part of an onreceive callback which is not async,\r\n // this is already the behavior for serverTimeout(), and HttpConnection.Stop() should catch and log all possible exceptions.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(error);\r\n }\r\n else {\r\n // We cannot await stopInternal() here, but subsequent calls to stop() will await this if stopInternal() is still ongoing.\r\n this._stopPromise = this._stopInternal(error);\r\n }\r\n break;\r\n }\r\n default:\r\n this._logger.log(LogLevel.Warning, `Invalid message type: ${message.type}.`);\r\n break;\r\n }\r\n }\r\n }\r\n this._resetTimeoutPeriod();\r\n }\r\n _processHandshakeResponse(data) {\r\n let responseMessage;\r\n let remainingData;\r\n try {\r\n [remainingData, responseMessage] = this._handshakeProtocol.parseHandshakeResponse(data);\r\n }\r\n catch (e) {\r\n const message = \"Error parsing handshake response: \" + e;\r\n this._logger.log(LogLevel.Error, message);\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n }\r\n if (responseMessage.error) {\r\n const message = \"Server returned handshake error: \" + responseMessage.error;\r\n this._logger.log(LogLevel.Error, message);\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, \"Server handshake complete.\");\r\n }\r\n this._handshakeResolver();\r\n return remainingData;\r\n }\r\n _resetKeepAliveInterval() {\r\n if (this.connection.features.inherentKeepAlive) {\r\n return;\r\n }\r\n // Set the time we want the next keep alive to be sent\r\n // Timer will be setup on next message receive\r\n this._nextKeepAlive = new Date().getTime() + this.keepAliveIntervalInMilliseconds;\r\n this._cleanupPingTimer();\r\n }\r\n _resetTimeoutPeriod() {\r\n if (!this.connection.features || !this.connection.features.inherentKeepAlive) {\r\n // Set the timeout timer\r\n this._timeoutHandle = setTimeout(() => this.serverTimeout(), this.serverTimeoutInMilliseconds);\r\n // Set keepAlive timer if there isn't one\r\n if (this._pingServerHandle === undefined) {\r\n let nextPing = this._nextKeepAlive - new Date().getTime();\r\n if (nextPing < 0) {\r\n nextPing = 0;\r\n }\r\n // The timer needs to be set from a networking callback to avoid Chrome timer throttling from causing timers to run once a minute\r\n this._pingServerHandle = setTimeout(async () => {\r\n if (this._connectionState === HubConnectionState.Connected) {\r\n try {\r\n await this._sendMessage(this._cachedPingMessage);\r\n }\r\n catch {\r\n // We don't care about the error. It should be seen elsewhere in the client.\r\n // The connection is probably in a bad or closed state now, cleanup the timer so it stops triggering\r\n this._cleanupPingTimer();\r\n }\r\n }\r\n }, nextPing);\r\n }\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n serverTimeout() {\r\n // The server hasn't talked to us in a while. It doesn't like us anymore ... :(\r\n // Terminate the connection, but we don't need to wait on the promise. This could trigger reconnecting.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(new Error(\"Server timeout elapsed without receiving a message from the server.\"));\r\n }\r\n _invokeClientMethod(invocationMessage) {\r\n const methods = this._methods[invocationMessage.target.toLowerCase()];\r\n if (methods) {\r\n try {\r\n methods.forEach((m) => m.apply(this, invocationMessage.arguments));\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `A callback for the method ${invocationMessage.target.toLowerCase()} threw error '${e}'.`);\r\n }\r\n if (invocationMessage.invocationId) {\r\n // This is not supported in v1. So we return an error to avoid blocking the server waiting for the response.\r\n const message = \"Server requested a response, which is not supported in this version of the client.\";\r\n this._logger.log(LogLevel.Error, message);\r\n // We don't want to wait on the stop itself.\r\n this._stopPromise = this._stopInternal(new Error(message));\r\n }\r\n }\r\n else {\r\n this._logger.log(LogLevel.Warning, `No client method with the name '${invocationMessage.target}' found.`);\r\n }\r\n }\r\n _connectionClosed(error) {\r\n this._logger.log(LogLevel.Debug, `HubConnection.connectionClosed(${error}) called while in state ${this._connectionState}.`);\r\n // Triggering this.handshakeRejecter is insufficient because it could already be resolved without the continuation having run yet.\r\n this._stopDuringStartError = this._stopDuringStartError || error || new Error(\"The underlying connection was closed before the hub handshake could complete.\");\r\n // If the handshake is in progress, start will be waiting for the handshake promise, so we complete it.\r\n // If it has already completed, this should just noop.\r\n if (this._handshakeResolver) {\r\n this._handshakeResolver();\r\n }\r\n this._cancelCallbacksWithError(error || new Error(\"Invocation canceled due to the underlying connection being closed.\"));\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._completeClose(error);\r\n }\r\n else if (this._connectionState === HubConnectionState.Connected && this._reconnectPolicy) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._reconnect(error);\r\n }\r\n else if (this._connectionState === HubConnectionState.Connected) {\r\n this._completeClose(error);\r\n }\r\n // If none of the above if conditions were true were called the HubConnection must be in either:\r\n // 1. The Connecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail it.\r\n // 2. The Reconnecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail the current reconnect attempt\r\n // and potentially continue the reconnect() loop.\r\n // 3. The Disconnected state in which case we're already done.\r\n }\r\n _completeClose(error) {\r\n if (this._connectionStarted) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n if (Platform.isBrowser) {\r\n window.document.removeEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n try {\r\n this._closedCallbacks.forEach((c) => c.apply(this, [error]));\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `An onclose callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n async _reconnect(error) {\r\n const reconnectStartTime = Date.now();\r\n let previousReconnectAttempts = 0;\r\n let retryError = error !== undefined ? error : new Error(\"Attempting to reconnect due to a unknown error.\");\r\n let nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts++, 0, retryError);\r\n if (nextRetryDelay === null) {\r\n this._logger.log(LogLevel.Debug, \"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt.\");\r\n this._completeClose(error);\r\n return;\r\n }\r\n this._connectionState = HubConnectionState.Reconnecting;\r\n if (error) {\r\n this._logger.log(LogLevel.Information, `Connection reconnecting because of error '${error}'.`);\r\n }\r\n else {\r\n this._logger.log(LogLevel.Information, \"Connection reconnecting.\");\r\n }\r\n if (this._reconnectingCallbacks.length !== 0) {\r\n try {\r\n this._reconnectingCallbacks.forEach((c) => c.apply(this, [error]));\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnecting callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n // Exit early if an onreconnecting callback called connection.stop().\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.\");\r\n return;\r\n }\r\n }\r\n while (nextRetryDelay !== null) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt number ${previousReconnectAttempts} will start in ${nextRetryDelay} ms.`);\r\n await new Promise((resolve) => {\r\n this._reconnectDelayHandle = setTimeout(resolve, nextRetryDelay);\r\n });\r\n this._reconnectDelayHandle = undefined;\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state during reconnect delay. Done reconnecting.\");\r\n return;\r\n }\r\n try {\r\n await this._startInternal();\r\n this._connectionState = HubConnectionState.Connected;\r\n this._logger.log(LogLevel.Information, \"HubConnection reconnected successfully.\");\r\n if (this._reconnectedCallbacks.length !== 0) {\r\n try {\r\n this._reconnectedCallbacks.forEach((c) => c.apply(this, [this.connection.connectionId]));\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${e}'.`);\r\n }\r\n }\r\n return;\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt failed because of error '${e}'.`);\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, `Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`);\r\n // The TypeScript compiler thinks that connectionState must be Connected here. The TypeScript compiler is wrong.\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._completeClose();\r\n }\r\n return;\r\n }\r\n retryError = e instanceof Error ? e : new Error(e.toString());\r\n nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts++, Date.now() - reconnectStartTime, retryError);\r\n }\r\n }\r\n this._logger.log(LogLevel.Information, `Reconnect retries have been exhausted after ${Date.now() - reconnectStartTime} ms and ${previousReconnectAttempts} failed attempts. Connection disconnecting.`);\r\n this._completeClose();\r\n }\r\n _getNextRetryDelay(previousRetryCount, elapsedMilliseconds, retryReason) {\r\n try {\r\n return this._reconnectPolicy.nextRetryDelayInMilliseconds({\r\n elapsedMilliseconds,\r\n previousRetryCount,\r\n retryReason,\r\n });\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `IRetryPolicy.nextRetryDelayInMilliseconds(${previousRetryCount}, ${elapsedMilliseconds}) threw error '${e}'.`);\r\n return null;\r\n }\r\n }\r\n _cancelCallbacksWithError(error) {\r\n const callbacks = this._callbacks;\r\n this._callbacks = {};\r\n Object.keys(callbacks)\r\n .forEach((key) => {\r\n const callback = callbacks[key];\r\n try {\r\n callback(null, error);\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream 'error' callback called with '${error}' threw error: ${getErrorString(e)}`);\r\n }\r\n });\r\n }\r\n _cleanupPingTimer() {\r\n if (this._pingServerHandle) {\r\n clearTimeout(this._pingServerHandle);\r\n this._pingServerHandle = undefined;\r\n }\r\n }\r\n _cleanupTimeout() {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n _createInvocation(methodName, args, nonblocking, streamIds) {\r\n if (nonblocking) {\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n else {\r\n return {\r\n arguments: args,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n else {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n else {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n }\r\n _launchStreams(streams, promiseQueue) {\r\n if (streams.length === 0) {\r\n return;\r\n }\r\n // Synchronize stream data so they arrive in-order on the server\r\n if (!promiseQueue) {\r\n promiseQueue = Promise.resolve();\r\n }\r\n // We want to iterate over the keys, since the keys are the stream ids\r\n // eslint-disable-next-line guard-for-in\r\n for (const streamId in streams) {\r\n streams[streamId].subscribe({\r\n complete: () => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId)));\r\n },\r\n error: (err) => {\r\n let message;\r\n if (err instanceof Error) {\r\n message = err.message;\r\n }\r\n else if (err && err.toString) {\r\n message = err.toString();\r\n }\r\n else {\r\n message = \"Unknown error\";\r\n }\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId, message)));\r\n },\r\n next: (item) => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createStreamItemMessage(streamId, item)));\r\n },\r\n });\r\n }\r\n }\r\n _replaceStreamingParams(args) {\r\n const streams = [];\r\n const streamIds = [];\r\n for (let i = 0; i < args.length; i++) {\r\n const argument = args[i];\r\n if (this._isObservable(argument)) {\r\n const streamId = this._invocationId;\r\n this._invocationId++;\r\n // Store the stream for later use\r\n streams[streamId] = argument;\r\n streamIds.push(streamId.toString());\r\n // remove stream from args\r\n args.splice(i, 1);\r\n }\r\n }\r\n return [streams, streamIds];\r\n }\r\n _isObservable(arg) {\r\n // This allows other stream implementations to just work (like rxjs)\r\n return arg && arg.subscribe && typeof arg.subscribe === \"function\";\r\n }\r\n _createStreamInvocation(methodName, args, streamIds) {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n else {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n target: methodName,\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n }\r\n _createCancelInvocation(id) {\r\n return {\r\n invocationId: id,\r\n type: MessageType.CancelInvocation,\r\n };\r\n }\r\n _createStreamItemMessage(id, item) {\r\n return {\r\n invocationId: id,\r\n item,\r\n type: MessageType.StreamItem,\r\n };\r\n }\r\n _createCompletionMessage(id, error, result) {\r\n if (error) {\r\n return {\r\n error,\r\n invocationId: id,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n return {\r\n invocationId: id,\r\n result,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { MessageType } from \"./IHubProtocol\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nconst JSON_HUB_PROTOCOL_NAME = \"json\";\r\n/** Implements the JSON Hub Protocol. */\r\nexport class JsonHubProtocol {\r\n constructor() {\r\n /** @inheritDoc */\r\n this.name = JSON_HUB_PROTOCOL_NAME;\r\n /** @inheritDoc */\r\n this.version = 1;\r\n /** @inheritDoc */\r\n this.transferFormat = TransferFormat.Text;\r\n }\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * @param {string} input A string containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n parseMessages(input, logger) {\r\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\r\n if (typeof input !== \"string\") {\r\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\r\n }\r\n if (!input) {\r\n return [];\r\n }\r\n if (logger === null) {\r\n logger = NullLogger.instance;\r\n }\r\n // Parse the messages\r\n const messages = TextMessageFormat.parse(input);\r\n const hubMessages = [];\r\n for (const message of messages) {\r\n const parsedMessage = JSON.parse(message);\r\n if (typeof parsedMessage.type !== \"number\") {\r\n throw new Error(\"Invalid payload.\");\r\n }\r\n switch (parsedMessage.type) {\r\n case MessageType.Invocation:\r\n this._isInvocationMessage(parsedMessage);\r\n break;\r\n case MessageType.StreamItem:\r\n this._isStreamItemMessage(parsedMessage);\r\n break;\r\n case MessageType.Completion:\r\n this._isCompletionMessage(parsedMessage);\r\n break;\r\n case MessageType.Ping:\r\n // Single value, no need to validate\r\n break;\r\n case MessageType.Close:\r\n // All optional values, no need to validate\r\n break;\r\n default:\r\n // Future protocol changes can add message types, old clients can ignore them\r\n logger.log(LogLevel.Information, \"Unknown message type '\" + parsedMessage.type + \"' ignored.\");\r\n continue;\r\n }\r\n hubMessages.push(parsedMessage);\r\n }\r\n return hubMessages;\r\n }\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string and returns it.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string} A string containing the serialized representation of the message.\r\n */\r\n writeMessage(message) {\r\n return TextMessageFormat.write(JSON.stringify(message));\r\n }\r\n _isInvocationMessage(message) {\r\n this._assertNotEmptyString(message.target, \"Invalid payload for Invocation message.\");\r\n if (message.invocationId !== undefined) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Invocation message.\");\r\n }\r\n }\r\n _isStreamItemMessage(message) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for StreamItem message.\");\r\n if (message.item === undefined) {\r\n throw new Error(\"Invalid payload for StreamItem message.\");\r\n }\r\n }\r\n _isCompletionMessage(message) {\r\n if (message.result && message.error) {\r\n throw new Error(\"Invalid payload for Completion message.\");\r\n }\r\n if (!message.result && message.error) {\r\n this._assertNotEmptyString(message.error, \"Invalid payload for Completion message.\");\r\n }\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Completion message.\");\r\n }\r\n _assertNotEmptyString(value, errorMessage) {\r\n if (typeof value !== \"string\" || value === \"\") {\r\n throw new Error(errorMessage);\r\n }\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { DefaultReconnectPolicy } from \"./DefaultReconnectPolicy\";\r\nimport { HttpConnection } from \"./HttpConnection\";\r\nimport { HubConnection } from \"./HubConnection\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { JsonHubProtocol } from \"./JsonHubProtocol\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { Arg, ConsoleLogger } from \"./Utils\";\r\nconst LogLevelNameMapping = {\r\n trace: LogLevel.Trace,\r\n debug: LogLevel.Debug,\r\n info: LogLevel.Information,\r\n information: LogLevel.Information,\r\n warn: LogLevel.Warning,\r\n warning: LogLevel.Warning,\r\n error: LogLevel.Error,\r\n critical: LogLevel.Critical,\r\n none: LogLevel.None,\r\n};\r\nfunction parseLogLevel(name) {\r\n // Case-insensitive matching via lower-casing\r\n // Yes, I know case-folding is a complicated problem in Unicode, but we only support\r\n // the ASCII strings defined in LogLevelNameMapping anyway, so it's fine -anurse.\r\n const mapping = LogLevelNameMapping[name.toLowerCase()];\r\n if (typeof mapping !== \"undefined\") {\r\n return mapping;\r\n }\r\n else {\r\n throw new Error(`Unknown log level: ${name}`);\r\n }\r\n}\r\n/** A builder for configuring {@link @microsoft/signalr.HubConnection} instances. */\r\nexport class HubConnectionBuilder {\r\n configureLogging(logging) {\r\n Arg.isRequired(logging, \"logging\");\r\n if (isLogger(logging)) {\r\n this.logger = logging;\r\n }\r\n else if (typeof logging === \"string\") {\r\n const logLevel = parseLogLevel(logging);\r\n this.logger = new ConsoleLogger(logLevel);\r\n }\r\n else {\r\n this.logger = new ConsoleLogger(logging);\r\n }\r\n return this;\r\n }\r\n withUrl(url, transportTypeOrOptions) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isNotEmpty(url, \"url\");\r\n this.url = url;\r\n // Flow-typing knows where it's at. Since HttpTransportType is a number and IHttpConnectionOptions is guaranteed\r\n // to be an object, we know (as does TypeScript) this comparison is all we need to figure out which overload was called.\r\n if (typeof transportTypeOrOptions === \"object\") {\r\n this.httpConnectionOptions = { ...this.httpConnectionOptions, ...transportTypeOrOptions };\r\n }\r\n else {\r\n this.httpConnectionOptions = {\r\n ...this.httpConnectionOptions,\r\n transport: transportTypeOrOptions,\r\n };\r\n }\r\n return this;\r\n }\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified Hub Protocol.\r\n *\r\n * @param {IHubProtocol} protocol The {@link @microsoft/signalr.IHubProtocol} implementation to use.\r\n */\r\n withHubProtocol(protocol) {\r\n Arg.isRequired(protocol, \"protocol\");\r\n this.protocol = protocol;\r\n return this;\r\n }\r\n withAutomaticReconnect(retryDelaysOrReconnectPolicy) {\r\n if (this.reconnectPolicy) {\r\n throw new Error(\"A reconnectPolicy has already been set.\");\r\n }\r\n if (!retryDelaysOrReconnectPolicy) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy();\r\n }\r\n else if (Array.isArray(retryDelaysOrReconnectPolicy)) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy(retryDelaysOrReconnectPolicy);\r\n }\r\n else {\r\n this.reconnectPolicy = retryDelaysOrReconnectPolicy;\r\n }\r\n return this;\r\n }\r\n /** Creates a {@link @microsoft/signalr.HubConnection} from the configuration options specified in this builder.\r\n *\r\n * @returns {HubConnection} The configured {@link @microsoft/signalr.HubConnection}.\r\n */\r\n build() {\r\n // If httpConnectionOptions has a logger, use it. Otherwise, override it with the one\r\n // provided to configureLogger\r\n const httpConnectionOptions = this.httpConnectionOptions || {};\r\n // If it's 'null', the user **explicitly** asked for null, don't mess with it.\r\n if (httpConnectionOptions.logger === undefined) {\r\n // If our logger is undefined or null, that's OK, the HttpConnection constructor will handle it.\r\n httpConnectionOptions.logger = this.logger;\r\n }\r\n // Now create the connection\r\n if (!this.url) {\r\n throw new Error(\"The 'HubConnectionBuilder.withUrl' method must be called before building the connection.\");\r\n }\r\n const connection = new HttpConnection(this.url, httpConnectionOptions);\r\n return HubConnection.create(connection, this.logger || NullLogger.instance, this.protocol || new JsonHubProtocol(), this.reconnectPolicy);\r\n }\r\n}\r\nfunction isLogger(logger) {\r\n return logger.log !== undefined;\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// These values are designed to match the ASP.NET Log Levels since that's the pattern we're emulating here.\r\n/** Indicates the severity of a log message.\r\n *\r\n * Log Levels are ordered in increasing severity. So `Debug` is more severe than `Trace`, etc.\r\n */\r\nexport var LogLevel;\r\n(function (LogLevel) {\r\n /** Log level for very low severity diagnostic messages. */\r\n LogLevel[LogLevel[\"Trace\"] = 0] = \"Trace\";\r\n /** Log level for low severity diagnostic messages. */\r\n LogLevel[LogLevel[\"Debug\"] = 1] = \"Debug\";\r\n /** Log level for informational diagnostic messages. */\r\n LogLevel[LogLevel[\"Information\"] = 2] = \"Information\";\r\n /** Log level for diagnostic messages that indicate a non-fatal problem. */\r\n LogLevel[LogLevel[\"Warning\"] = 3] = \"Warning\";\r\n /** Log level for diagnostic messages that indicate a failure in the current operation. */\r\n LogLevel[LogLevel[\"Error\"] = 4] = \"Error\";\r\n /** Log level for diagnostic messages that indicate a failure that will terminate the entire application. */\r\n LogLevel[LogLevel[\"Critical\"] = 5] = \"Critical\";\r\n /** The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted. */\r\n LogLevel[LogLevel[\"None\"] = 6] = \"None\";\r\n})(LogLevel || (LogLevel = {}));\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// This will be treated as a bit flag in the future, so we keep it using power-of-two values.\r\n/** Specifies a specific HTTP transport type. */\r\nexport var HttpTransportType;\r\n(function (HttpTransportType) {\r\n /** Specifies no transport preference. */\r\n HttpTransportType[HttpTransportType[\"None\"] = 0] = \"None\";\r\n /** Specifies the WebSockets transport. */\r\n HttpTransportType[HttpTransportType[\"WebSockets\"] = 1] = \"WebSockets\";\r\n /** Specifies the Server-Sent Events transport. */\r\n HttpTransportType[HttpTransportType[\"ServerSentEvents\"] = 2] = \"ServerSentEvents\";\r\n /** Specifies the Long Polling transport. */\r\n HttpTransportType[HttpTransportType[\"LongPolling\"] = 4] = \"LongPolling\";\r\n})(HttpTransportType || (HttpTransportType = {}));\r\n/** Specifies the transfer format for a connection. */\r\nexport var TransferFormat;\r\n(function (TransferFormat) {\r\n /** Specifies that only text data will be transmitted over the connection. */\r\n TransferFormat[TransferFormat[\"Text\"] = 1] = \"Text\";\r\n /** Specifies that binary data will be transmitted over the connection. */\r\n TransferFormat[TransferFormat[\"Binary\"] = 2] = \"Binary\";\r\n})(TransferFormat || (TransferFormat = {}));\r\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty, coerceStringArray } from '@angular/cdk/coercion';\nimport * as i1 from '@angular/cdk/platform';\nimport { _getEventTarget } from '@angular/cdk/platform';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, EventEmitter, TemplateRef, Directive, Inject, ViewChild, Input, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, ContentChildren, forwardRef, Optional, Host, NgModule } from '@angular/core';\nimport { mixinDisableRipple, MAT_OPTION_PARENT_COMPONENT, MAT_OPTGROUP, MatOption, MatOptionSelectionChange, _countGroupLabelsBeforeOption, _getOptionScrollPosition, MatOptionModule, MatCommonModule } from '@angular/material/core';\nimport { Subscription, Subject, defer, merge, of, fromEvent } from 'rxjs';\nimport * as i2 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i1$1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i2$1 from '@angular/cdk/bidi';\nimport { hasModifierKey, ESCAPE, ENTER, UP_ARROW, DOWN_ARROW, TAB } from '@angular/cdk/keycodes';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as i4 from '@angular/material/form-field';\nimport { MAT_FORM_FIELD } from '@angular/material/form-field';\nimport { startWith, switchMap, take, filter, map, tap, delay } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Autocomplete IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueAutocompleteIdCounter = 0;\n/** Event object that is emitted when an autocomplete option is selected. */\nclass MatAutocompleteSelectedEvent {\n constructor(\n /** Reference to the autocomplete panel that emitted the event. */\n source, \n /** Option that was selected. */\n option) {\n this.source = source;\n this.option = option;\n }\n}\n// Boilerplate for applying mixins to MatAutocomplete.\n/** @docs-private */\nconst _MatAutocompleteMixinBase = mixinDisableRipple(class {\n});\n/** Injection token to be used to override the default options for `mat-autocomplete`. */\nconst MAT_AUTOCOMPLETE_DEFAULT_OPTIONS = new InjectionToken('mat-autocomplete-default-options', {\n providedIn: 'root',\n factory: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY,\n});\n/** @docs-private */\nfunction MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY() {\n return { autoActiveFirstOption: false, autoSelectActiveOption: false };\n}\n/** Base class with all of the `MatAutocomplete` functionality. */\nclass _MatAutocompleteBase extends _MatAutocompleteMixinBase {\n constructor(_changeDetectorRef, _elementRef, defaults, platform) {\n super();\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n this._activeOptionChanges = Subscription.EMPTY;\n /** Whether the autocomplete panel should be visible, depending on option length. */\n this.showPanel = false;\n this._isOpen = false;\n /** Function that maps an option's control value to its display value in the trigger. */\n this.displayWith = null;\n /** Event that is emitted whenever an option from the list is selected. */\n this.optionSelected = new EventEmitter();\n /** Event that is emitted when the autocomplete panel is opened. */\n this.opened = new EventEmitter();\n /** Event that is emitted when the autocomplete panel is closed. */\n this.closed = new EventEmitter();\n /** Emits whenever an option is activated. */\n this.optionActivated = new EventEmitter();\n this._classList = {};\n /** Unique ID to be used by autocomplete trigger's \"aria-owns\" property. */\n this.id = `mat-autocomplete-${_uniqueAutocompleteIdCounter++}`;\n // TODO(crisbeto): the problem that the `inertGroups` option resolves is only present on\n // Safari using VoiceOver. We should occasionally check back to see whether the bug\n // wasn't resolved in VoiceOver, and if it has, we can remove this and the `inertGroups`\n // option altogether.\n this.inertGroups = platform?.SAFARI || false;\n this._autoActiveFirstOption = !!defaults.autoActiveFirstOption;\n this._autoSelectActiveOption = !!defaults.autoSelectActiveOption;\n }\n /** Whether the autocomplete panel is open. */\n get isOpen() {\n return this._isOpen && this.showPanel;\n }\n /**\n * Whether the first option should be highlighted when the autocomplete panel is opened.\n * Can be configured globally through the `MAT_AUTOCOMPLETE_DEFAULT_OPTIONS` token.\n */\n get autoActiveFirstOption() {\n return this._autoActiveFirstOption;\n }\n set autoActiveFirstOption(value) {\n this._autoActiveFirstOption = coerceBooleanProperty(value);\n }\n /** Whether the active option should be selected as the user is navigating. */\n get autoSelectActiveOption() {\n return this._autoSelectActiveOption;\n }\n set autoSelectActiveOption(value) {\n this._autoSelectActiveOption = coerceBooleanProperty(value);\n }\n /**\n * Takes classes set on the host mat-autocomplete element and applies them to the panel\n * inside the overlay container to allow for easy styling.\n */\n set classList(value) {\n if (value && value.length) {\n this._classList = coerceStringArray(value).reduce((classList, className) => {\n classList[className] = true;\n return classList;\n }, {});\n }\n else {\n this._classList = {};\n }\n this._setVisibilityClasses(this._classList);\n this._elementRef.nativeElement.className = '';\n }\n ngAfterContentInit() {\n this._keyManager = new ActiveDescendantKeyManager(this.options).withWrap();\n this._activeOptionChanges = this._keyManager.change.subscribe(index => {\n if (this.isOpen) {\n this.optionActivated.emit({ source: this, option: this.options.toArray()[index] || null });\n }\n });\n // Set the initial visibility state.\n this._setVisibility();\n }\n ngOnDestroy() {\n this._activeOptionChanges.unsubscribe();\n }\n /**\n * Sets the panel scrollTop. This allows us to manually scroll to display options\n * above or below the fold, as they are not actually being focused when active.\n */\n _setScrollTop(scrollTop) {\n if (this.panel) {\n this.panel.nativeElement.scrollTop = scrollTop;\n }\n }\n /** Returns the panel's scrollTop. */\n _getScrollTop() {\n return this.panel ? this.panel.nativeElement.scrollTop : 0;\n }\n /** Panel should hide itself when the option list is empty. */\n _setVisibility() {\n this.showPanel = !!this.options.length;\n this._setVisibilityClasses(this._classList);\n this._changeDetectorRef.markForCheck();\n }\n /** Emits the `select` event. */\n _emitSelectEvent(option) {\n const event = new MatAutocompleteSelectedEvent(this, option);\n this.optionSelected.emit(event);\n }\n /** Gets the aria-labelledby for the autocomplete panel. */\n _getPanelAriaLabelledby(labelId) {\n if (this.ariaLabel) {\n return null;\n }\n const labelExpression = labelId ? labelId + ' ' : '';\n return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;\n }\n /** Sets the autocomplete visibility classes on a classlist based on the panel is visible. */\n _setVisibilityClasses(classList) {\n classList[this._visibleClass] = this.showPanel;\n classList[this._hiddenClass] = !this.showPanel;\n }\n}\n_MatAutocompleteBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteBase, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS }, { token: i1.Platform }], target: i0.ɵɵFactoryTarget.Directive });\n_MatAutocompleteBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatAutocompleteBase, inputs: { ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], displayWith: \"displayWith\", autoActiveFirstOption: \"autoActiveFirstOption\", autoSelectActiveOption: \"autoSelectActiveOption\", panelWidth: \"panelWidth\", classList: [\"class\", \"classList\"] }, outputs: { optionSelected: \"optionSelected\", opened: \"opened\", closed: \"closed\", optionActivated: \"optionActivated\" }, viewQueries: [{ propertyName: \"template\", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: \"panel\", first: true, predicate: [\"panel\"], descendants: true }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS]\n }] }, { type: i1.Platform }]; }, propDecorators: { template: [{\n type: ViewChild,\n args: [TemplateRef, { static: true }]\n }], panel: [{\n type: ViewChild,\n args: ['panel']\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], displayWith: [{\n type: Input\n }], autoActiveFirstOption: [{\n type: Input\n }], autoSelectActiveOption: [{\n type: Input\n }], panelWidth: [{\n type: Input\n }], optionSelected: [{\n type: Output\n }], opened: [{\n type: Output\n }], closed: [{\n type: Output\n }], optionActivated: [{\n type: Output\n }], classList: [{\n type: Input,\n args: ['class']\n }] } });\nclass MatAutocomplete extends _MatAutocompleteBase {\n constructor() {\n super(...arguments);\n this._visibleClass = 'mat-autocomplete-visible';\n this._hiddenClass = 'mat-autocomplete-hidden';\n }\n}\nMatAutocomplete.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocomplete, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatAutocomplete.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatAutocomplete, selector: \"mat-autocomplete\", inputs: { disableRipple: \"disableRipple\" }, host: { classAttribute: \"mat-autocomplete\" }, providers: [{ provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete }], queries: [{ propertyName: \"optionGroups\", predicate: MAT_OPTGROUP, descendants: true }, { propertyName: \"options\", predicate: MatOption, descendants: true }], exportAs: [\"matAutocomplete\"], usesInheritance: true, ngImport: i0, template: \"\\n
\\n \\n
\\n
\\n\", styles: [\".mat-autocomplete-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;visibility:hidden;max-width:none;max-height:256px;position:relative;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.mat-autocomplete-panel.mat-autocomplete-visible{visibility:visible}.mat-autocomplete-panel.mat-autocomplete-hidden{visibility:hidden}.mat-autocomplete-panel-above .mat-autocomplete-panel{border-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.mat-autocomplete-panel .mat-divider-horizontal{margin-top:-1px}.cdk-high-contrast-active .mat-autocomplete-panel{outline:solid 1px}mat-autocomplete{display:none}\"], dependencies: [{ kind: \"directive\", type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocomplete, decorators: [{\n type: Component,\n args: [{ selector: 'mat-autocomplete', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'matAutocomplete', inputs: ['disableRipple'], host: {\n 'class': 'mat-autocomplete',\n }, providers: [{ provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete }], template: \"\\n
\\n \\n
\\n
\\n\", styles: [\".mat-autocomplete-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;visibility:hidden;max-width:none;max-height:256px;position:relative;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.mat-autocomplete-panel.mat-autocomplete-visible{visibility:visible}.mat-autocomplete-panel.mat-autocomplete-hidden{visibility:hidden}.mat-autocomplete-panel-above .mat-autocomplete-panel{border-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.mat-autocomplete-panel .mat-divider-horizontal{margin-top:-1px}.cdk-high-contrast-active .mat-autocomplete-panel{outline:solid 1px}mat-autocomplete{display:none}\"] }]\n }], propDecorators: { optionGroups: [{\n type: ContentChildren,\n args: [MAT_OPTGROUP, { descendants: true }]\n }], options: [{\n type: ContentChildren,\n args: [MatOption, { descendants: true }]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Base class containing all of the functionality for `MatAutocompleteOrigin`. */\nclass _MatAutocompleteOriginBase {\n constructor(\n /** Reference to the element on which the directive is applied. */\n elementRef) {\n this.elementRef = elementRef;\n }\n}\n_MatAutocompleteOriginBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteOriginBase, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\n_MatAutocompleteOriginBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatAutocompleteOriginBase, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteOriginBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n/**\n * Directive applied to an element to make it usable\n * as a connection point for an autocomplete panel.\n */\nclass MatAutocompleteOrigin extends _MatAutocompleteOriginBase {\n}\nMatAutocompleteOrigin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteOrigin, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatAutocompleteOrigin.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatAutocompleteOrigin, selector: \"[matAutocompleteOrigin]\", exportAs: [\"matAutocompleteOrigin\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteOrigin, decorators: [{\n type: Directive,\n args: [{\n selector: '[matAutocompleteOrigin]',\n exportAs: 'matAutocompleteOrigin',\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token that determines the scroll handling while the autocomplete panel is open. */\nconst MAT_AUTOCOMPLETE_SCROLL_STRATEGY = new InjectionToken('mat-autocomplete-scroll-strategy');\n/** @docs-private */\nfunction MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_AUTOCOMPLETE_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY,\n};\n/**\n * Provider that allows the autocomplete to register as a ControlValueAccessor.\n * @docs-private\n */\nconst MAT_AUTOCOMPLETE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatAutocompleteTrigger),\n multi: true,\n};\n/**\n * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.\n * @docs-private\n */\nfunction getMatAutocompleteMissingPanelError() {\n return Error('Attempting to open an undefined instance of `mat-autocomplete`. ' +\n 'Make sure that the id passed to the `matAutocomplete` is correct and that ' +\n \"you're attempting to open it after the ngAfterContentInit hook.\");\n}\n/** Base class with all of the `MatAutocompleteTrigger` functionality. */\nclass _MatAutocompleteTriggerBase {\n constructor(_element, _overlay, _viewContainerRef, _zone, _changeDetectorRef, scrollStrategy, _dir, _formField, _document, _viewportRuler, _defaults) {\n this._element = _element;\n this._overlay = _overlay;\n this._viewContainerRef = _viewContainerRef;\n this._zone = _zone;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this._formField = _formField;\n this._document = _document;\n this._viewportRuler = _viewportRuler;\n this._defaults = _defaults;\n this._componentDestroyed = false;\n this._autocompleteDisabled = false;\n /** Whether or not the label state is being overridden. */\n this._manuallyFloatingLabel = false;\n /** Subscription to viewport size changes. */\n this._viewportSubscription = Subscription.EMPTY;\n /**\n * Whether the autocomplete can open the next time it is focused. Used to prevent a focused,\n * closed autocomplete from being reopened if the user switches to another browser tab and then\n * comes back.\n */\n this._canOpenOnNextFocus = true;\n /** Stream of keyboard events that can close the panel. */\n this._closeKeyEventStream = new Subject();\n /**\n * Event handler for when the window is blurred. Needs to be an\n * arrow function in order to preserve the context.\n */\n this._windowBlurHandler = () => {\n // If the user blurred the window while the autocomplete is focused, it means that it'll be\n // refocused when they come back. In this case we want to skip the first focus event, if the\n // pane was closed, in order to avoid reopening it unintentionally.\n this._canOpenOnNextFocus =\n this._document.activeElement !== this._element.nativeElement || this.panelOpen;\n };\n /** `View -> model callback called when value changes` */\n this._onChange = () => { };\n /** `View -> model callback called when autocomplete has been touched` */\n this._onTouched = () => { };\n /**\n * Position of the autocomplete panel relative to the trigger element. A position of `auto`\n * will render the panel underneath the trigger if there is enough space for it to fit in\n * the viewport, otherwise the panel will be shown above it. If the position is set to\n * `above` or `below`, the panel will always be shown above or below the trigger. no matter\n * whether it fits completely in the viewport.\n */\n this.position = 'auto';\n /**\n * `autocomplete` attribute to be set on the input element.\n * @docs-private\n */\n this.autocompleteAttribute = 'off';\n this._overlayAttached = false;\n /** Stream of changes to the selection state of the autocomplete options. */\n this.optionSelections = defer(() => {\n const options = this.autocomplete ? this.autocomplete.options : null;\n if (options) {\n return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map(option => option.onSelectionChange))));\n }\n // If there are any subscribers before `ngAfterViewInit`, the `autocomplete` will be undefined.\n // Return a stream that we'll replace with the real one once everything is in place.\n return this._zone.onStable.pipe(take(1), switchMap(() => this.optionSelections));\n });\n this._scrollStrategy = scrollStrategy;\n }\n /**\n * Whether the autocomplete is disabled. When disabled, the element will\n * act as a regular input and the user won't be able to open the panel.\n */\n get autocompleteDisabled() {\n return this._autocompleteDisabled;\n }\n set autocompleteDisabled(value) {\n this._autocompleteDisabled = coerceBooleanProperty(value);\n }\n ngAfterViewInit() {\n const window = this._getWindow();\n if (typeof window !== 'undefined') {\n this._zone.runOutsideAngular(() => window.addEventListener('blur', this._windowBlurHandler));\n }\n }\n ngOnChanges(changes) {\n if (changes['position'] && this._positionStrategy) {\n this._setStrategyPositions(this._positionStrategy);\n if (this.panelOpen) {\n this._overlayRef.updatePosition();\n }\n }\n }\n ngOnDestroy() {\n const window = this._getWindow();\n if (typeof window !== 'undefined') {\n window.removeEventListener('blur', this._windowBlurHandler);\n }\n this._viewportSubscription.unsubscribe();\n this._componentDestroyed = true;\n this._destroyPanel();\n this._closeKeyEventStream.complete();\n }\n /** Whether or not the autocomplete panel is open. */\n get panelOpen() {\n return this._overlayAttached && this.autocomplete.showPanel;\n }\n /** Opens the autocomplete suggestion panel. */\n openPanel() {\n this._attachOverlay();\n this._floatLabel();\n }\n /** Closes the autocomplete suggestion panel. */\n closePanel() {\n this._resetLabel();\n if (!this._overlayAttached) {\n return;\n }\n if (this.panelOpen) {\n // Only emit if the panel was visible.\n // The `NgZone.onStable` always emits outside of the Angular zone,\n // so all the subscriptions from `_subscribeToClosingActions()` are also outside of the Angular zone.\n // We should manually run in Angular zone to update UI after panel closing.\n this._zone.run(() => {\n this.autocomplete.closed.emit();\n });\n }\n this.autocomplete._isOpen = this._overlayAttached = false;\n this._pendingAutoselectedOption = null;\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n this._closingActionsSubscription.unsubscribe();\n }\n // Note that in some cases this can end up being called after the component is destroyed.\n // Add a check to ensure that we don't try to run change detection on a destroyed view.\n if (!this._componentDestroyed) {\n // We need to trigger change detection manually, because\n // `fromEvent` doesn't seem to do it at the proper time.\n // This ensures that the label is reset when the\n // user clicks outside.\n this._changeDetectorRef.detectChanges();\n }\n }\n /**\n * Updates the position of the autocomplete suggestion panel to ensure that it fits all options\n * within the viewport.\n */\n updatePosition() {\n if (this._overlayAttached) {\n this._overlayRef.updatePosition();\n }\n }\n /**\n * A stream of actions that should close the autocomplete panel, including\n * when an option is selected, on blur, and when TAB is pressed.\n */\n get panelClosingActions() {\n return merge(this.optionSelections, this.autocomplete._keyManager.tabOut.pipe(filter(() => this._overlayAttached)), this._closeKeyEventStream, this._getOutsideClickStream(), this._overlayRef\n ? this._overlayRef.detachments().pipe(filter(() => this._overlayAttached))\n : of()).pipe(\n // Normalize the output so we return a consistent type.\n map(event => (event instanceof MatOptionSelectionChange ? event : null)));\n }\n /** The currently active option, coerced to MatOption type. */\n get activeOption() {\n if (this.autocomplete && this.autocomplete._keyManager) {\n return this.autocomplete._keyManager.activeItem;\n }\n return null;\n }\n /** Stream of clicks outside of the autocomplete panel. */\n _getOutsideClickStream() {\n return merge(fromEvent(this._document, 'click'), fromEvent(this._document, 'auxclick'), fromEvent(this._document, 'touchend')).pipe(filter(event => {\n // If we're in the Shadow DOM, the event target will be the shadow root, so we have to\n // fall back to check the first element in the path of the click event.\n const clickTarget = _getEventTarget(event);\n const formField = this._formField ? this._formField._elementRef.nativeElement : null;\n const customOrigin = this.connectedTo ? this.connectedTo.elementRef.nativeElement : null;\n return (this._overlayAttached &&\n clickTarget !== this._element.nativeElement &&\n // Normally focus moves inside `mousedown` so this condition will almost always be\n // true. Its main purpose is to handle the case where the input is focused from an\n // outside click which propagates up to the `body` listener within the same sequence\n // and causes the panel to close immediately (see #3106).\n this._document.activeElement !== this._element.nativeElement &&\n (!formField || !formField.contains(clickTarget)) &&\n (!customOrigin || !customOrigin.contains(clickTarget)) &&\n !!this._overlayRef &&\n !this._overlayRef.overlayElement.contains(clickTarget));\n }));\n }\n // Implemented as part of ControlValueAccessor.\n writeValue(value) {\n Promise.resolve(null).then(() => this._assignOptionValue(value));\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._onChange = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this._element.nativeElement.disabled = isDisabled;\n }\n _handleKeydown(event) {\n const keyCode = event.keyCode;\n const hasModifier = hasModifierKey(event);\n // Prevent the default action on all escape key presses. This is here primarily to bring IE\n // in line with other browsers. By default, pressing escape on IE will cause it to revert\n // the input value to the one that it had on focus, however it won't dispatch any events\n // which means that the model value will be out of sync with the view.\n if (keyCode === ESCAPE && !hasModifier) {\n event.preventDefault();\n }\n if (this.activeOption && keyCode === ENTER && this.panelOpen && !hasModifier) {\n this.activeOption._selectViaInteraction();\n this._resetActiveItem();\n event.preventDefault();\n }\n else if (this.autocomplete) {\n const prevActiveItem = this.autocomplete._keyManager.activeItem;\n const isArrowKey = keyCode === UP_ARROW || keyCode === DOWN_ARROW;\n if (keyCode === TAB || (isArrowKey && !hasModifier && this.panelOpen)) {\n this.autocomplete._keyManager.onKeydown(event);\n }\n else if (isArrowKey && this._canOpen()) {\n this.openPanel();\n }\n if (isArrowKey || this.autocomplete._keyManager.activeItem !== prevActiveItem) {\n this._scrollToOption(this.autocomplete._keyManager.activeItemIndex || 0);\n if (this.autocomplete.autoSelectActiveOption && this.activeOption) {\n if (!this._pendingAutoselectedOption) {\n this._valueBeforeAutoSelection = this._element.nativeElement.value;\n }\n this._pendingAutoselectedOption = this.activeOption;\n this._assignOptionValue(this.activeOption.value);\n }\n }\n }\n }\n _handleInput(event) {\n let target = event.target;\n let value = target.value;\n // Based on `NumberValueAccessor` from forms.\n if (target.type === 'number') {\n value = value == '' ? null : parseFloat(value);\n }\n // If the input has a placeholder, IE will fire the `input` event on page load,\n // focus and blur, in addition to when the user actually changed the value. To\n // filter out all of the extra events, we save the value on focus and between\n // `input` events, and we check whether it changed.\n // See: https://connect.microsoft.com/IE/feedback/details/885747/\n if (this._previousValue !== value) {\n this._previousValue = value;\n this._pendingAutoselectedOption = null;\n this._onChange(value);\n if (this._canOpen() && this._document.activeElement === event.target) {\n this.openPanel();\n }\n }\n }\n _handleFocus() {\n if (!this._canOpenOnNextFocus) {\n this._canOpenOnNextFocus = true;\n }\n else if (this._canOpen()) {\n this._previousValue = this._element.nativeElement.value;\n this._attachOverlay();\n this._floatLabel(true);\n }\n }\n _handleClick() {\n if (this._canOpen() && !this.panelOpen) {\n this.openPanel();\n }\n }\n /**\n * In \"auto\" mode, the label will animate down as soon as focus is lost.\n * This causes the value to jump when selecting an option with the mouse.\n * This method manually floats the label until the panel can be closed.\n * @param shouldAnimate Whether the label should be animated when it is floated.\n */\n _floatLabel(shouldAnimate = false) {\n if (this._formField && this._formField.floatLabel === 'auto') {\n if (shouldAnimate) {\n this._formField._animateAndLockLabel();\n }\n else {\n this._formField.floatLabel = 'always';\n }\n this._manuallyFloatingLabel = true;\n }\n }\n /** If the label has been manually elevated, return it to its normal state. */\n _resetLabel() {\n if (this._manuallyFloatingLabel) {\n this._formField.floatLabel = 'auto';\n this._manuallyFloatingLabel = false;\n }\n }\n /**\n * This method listens to a stream of panel closing actions and resets the\n * stream every time the option list changes.\n */\n _subscribeToClosingActions() {\n const firstStable = this._zone.onStable.pipe(take(1));\n const optionChanges = this.autocomplete.options.changes.pipe(tap(() => this._positionStrategy.reapplyLastPosition()), \n // Defer emitting to the stream until the next tick, because changing\n // bindings in here will cause \"changed after checked\" errors.\n delay(0));\n // When the zone is stable initially, and when the option list changes...\n return (merge(firstStable, optionChanges)\n .pipe(\n // create a new stream of panelClosingActions, replacing any previous streams\n // that were created, and flatten it so our stream only emits closing events...\n switchMap(() => {\n // The `NgZone.onStable` always emits outside of the Angular zone, thus we have to re-enter\n // the Angular zone. This will lead to change detection being called outside of the Angular\n // zone and the `autocomplete.opened` will also emit outside of the Angular.\n this._zone.run(() => {\n const wasOpen = this.panelOpen;\n this._resetActiveItem();\n this.autocomplete._setVisibility();\n this._changeDetectorRef.detectChanges();\n if (this.panelOpen) {\n this._overlayRef.updatePosition();\n }\n if (wasOpen !== this.panelOpen) {\n // If the `panelOpen` state changed, we need to make sure to emit the `opened` or\n // `closed` event, because we may not have emitted it. This can happen\n // - if the users opens the panel and there are no options, but the\n // options come in slightly later or as a result of the value changing,\n // - if the panel is closed after the user entered a string that did not match any\n // of the available options,\n // - if a valid string is entered after an invalid one.\n if (this.panelOpen) {\n this.autocomplete.opened.emit();\n }\n else {\n this.autocomplete.closed.emit();\n }\n }\n });\n return this.panelClosingActions;\n }), \n // when the first closing event occurs...\n take(1))\n // set the value, close the panel, and complete.\n .subscribe(event => this._setValueAndClose(event)));\n }\n /** Destroys the autocomplete suggestion panel. */\n _destroyPanel() {\n if (this._overlayRef) {\n this.closePanel();\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n _assignOptionValue(value) {\n const toDisplay = this.autocomplete && this.autocomplete.displayWith\n ? this.autocomplete.displayWith(value)\n : value;\n // Simply falling back to an empty string if the display value is falsy does not work properly.\n // The display value can also be the number zero and shouldn't fall back to an empty string.\n this._updateNativeInputValue(toDisplay != null ? toDisplay : '');\n }\n _updateNativeInputValue(value) {\n // If it's used within a `MatFormField`, we should set it through the property so it can go\n // through change detection.\n if (this._formField) {\n this._formField._control.value = value;\n }\n else {\n this._element.nativeElement.value = value;\n }\n this._previousValue = value;\n }\n /**\n * This method closes the panel, and if a value is specified, also sets the associated\n * control to that value. It will also mark the control as dirty if this interaction\n * stemmed from the user.\n */\n _setValueAndClose(event) {\n const toSelect = event ? event.source : this._pendingAutoselectedOption;\n if (toSelect) {\n this._clearPreviousSelectedOption(toSelect);\n this._assignOptionValue(toSelect.value);\n this._onChange(toSelect.value);\n this.autocomplete._emitSelectEvent(toSelect);\n this._element.nativeElement.focus();\n }\n this.closePanel();\n }\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n _clearPreviousSelectedOption(skip) {\n this.autocomplete.options.forEach(option => {\n if (option !== skip && option.selected) {\n option.deselect();\n }\n });\n }\n _attachOverlay() {\n if (!this.autocomplete && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatAutocompleteMissingPanelError();\n }\n let overlayRef = this._overlayRef;\n if (!overlayRef) {\n this._portal = new TemplatePortal(this.autocomplete.template, this._viewContainerRef, {\n id: this._formField?.getLabelId(),\n });\n overlayRef = this._overlay.create(this._getOverlayConfig());\n this._overlayRef = overlayRef;\n this._handleOverlayEvents(overlayRef);\n this._viewportSubscription = this._viewportRuler.change().subscribe(() => {\n if (this.panelOpen && overlayRef) {\n overlayRef.updateSize({ width: this._getPanelWidth() });\n }\n });\n }\n else {\n // Update the trigger, panel width and direction, in case anything has changed.\n this._positionStrategy.setOrigin(this._getConnectedElement());\n overlayRef.updateSize({ width: this._getPanelWidth() });\n }\n if (overlayRef && !overlayRef.hasAttached()) {\n overlayRef.attach(this._portal);\n this._closingActionsSubscription = this._subscribeToClosingActions();\n }\n const wasOpen = this.panelOpen;\n this.autocomplete._setVisibility();\n this.autocomplete._isOpen = this._overlayAttached = true;\n // We need to do an extra `panelOpen` check in here, because the\n // autocomplete won't be shown if there are no options.\n if (this.panelOpen && wasOpen !== this.panelOpen) {\n this.autocomplete.opened.emit();\n }\n }\n _getOverlayConfig() {\n return new OverlayConfig({\n positionStrategy: this._getOverlayPosition(),\n scrollStrategy: this._scrollStrategy(),\n width: this._getPanelWidth(),\n direction: this._dir,\n panelClass: this._defaults?.overlayPanelClass,\n });\n }\n _getOverlayPosition() {\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this._getConnectedElement())\n .withFlexibleDimensions(false)\n .withPush(false);\n this._setStrategyPositions(strategy);\n this._positionStrategy = strategy;\n return strategy;\n }\n /** Sets the positions on a position strategy based on the directive's input state. */\n _setStrategyPositions(positionStrategy) {\n // Note that we provide horizontal fallback positions, even though by default the dropdown\n // width matches the input, because consumers can override the width. See #18854.\n const belowPositions = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\n ];\n // The overlay edge connected to the trigger should have squared corners, while\n // the opposite end has rounded corners. We apply a CSS class to swap the\n // border-radius based on the overlay position.\n const panelClass = this._aboveClass;\n const abovePositions = [\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', panelClass },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', panelClass },\n ];\n let positions;\n if (this.position === 'above') {\n positions = abovePositions;\n }\n else if (this.position === 'below') {\n positions = belowPositions;\n }\n else {\n positions = [...belowPositions, ...abovePositions];\n }\n positionStrategy.withPositions(positions);\n }\n _getConnectedElement() {\n if (this.connectedTo) {\n return this.connectedTo.elementRef;\n }\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._element;\n }\n _getPanelWidth() {\n return this.autocomplete.panelWidth || this._getHostWidth();\n }\n /** Returns the width of the input element, so the panel width can match it. */\n _getHostWidth() {\n return this._getConnectedElement().nativeElement.getBoundingClientRect().width;\n }\n /**\n * Resets the active item to -1 so arrow events will activate the\n * correct options, or to 0 if the consumer opted into it.\n */\n _resetActiveItem() {\n const autocomplete = this.autocomplete;\n if (autocomplete.autoActiveFirstOption) {\n // Note that we go through `setFirstItemActive`, rather than `setActiveItem(0)`, because\n // the former will find the next enabled option, if the first one is disabled.\n autocomplete._keyManager.setFirstItemActive();\n }\n else {\n autocomplete._keyManager.setActiveItem(-1);\n }\n }\n /** Determines whether the panel can be opened. */\n _canOpen() {\n const element = this._element.nativeElement;\n return !element.readOnly && !element.disabled && !this._autocompleteDisabled;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n return this._document?.defaultView || window;\n }\n /** Scrolls to a particular option in the list. */\n _scrollToOption(index) {\n // Given that we are not actually focusing active options, we must manually adjust scroll\n // to reveal options below the fold. First, we find the offset of the option from the top\n // of the panel. If that offset is below the fold, the new scrollTop will be the offset -\n // the panel height + the option height, so the active option will be just visible at the\n // bottom of the panel. If that offset is above the top of the visible panel, the new scrollTop\n // will become the offset. If that offset is visible within the panel already, the scrollTop is\n // not adjusted.\n const autocomplete = this.autocomplete;\n const labelCount = _countGroupLabelsBeforeOption(index, autocomplete.options, autocomplete.optionGroups);\n if (index === 0 && labelCount === 1) {\n // If we've got one group label before the option and we're at the top option,\n // scroll the list to the top. This is better UX than scrolling the list to the\n // top of the option, because it allows the user to read the top group's label.\n autocomplete._setScrollTop(0);\n }\n else if (autocomplete.panel) {\n const option = autocomplete.options.toArray()[index];\n if (option) {\n const element = option._getHostElement();\n const newScrollPosition = _getOptionScrollPosition(element.offsetTop, element.offsetHeight, autocomplete._getScrollTop(), autocomplete.panel.nativeElement.offsetHeight);\n autocomplete._setScrollTop(newScrollPosition);\n }\n }\n }\n /** Handles keyboard events coming from the overlay panel. */\n _handleOverlayEvents(overlayRef) {\n // Use the `keydownEvents` in order to take advantage of\n // the overlay event targeting provided by the CDK overlay.\n overlayRef.keydownEvents().subscribe(event => {\n // Close when pressing ESCAPE or ALT + UP_ARROW, based on the a11y guidelines.\n // See: https://www.w3.org/TR/wai-aria-practices-1.1/#textbox-keyboard-interaction\n if ((event.keyCode === ESCAPE && !hasModifierKey(event)) ||\n (event.keyCode === UP_ARROW && hasModifierKey(event, 'altKey'))) {\n // If the user had typed something in before we autoselected an option, and they decided\n // to cancel the selection, restore the input value to the one they had typed in.\n if (this._pendingAutoselectedOption) {\n this._updateNativeInputValue(this._valueBeforeAutoSelection ?? '');\n this._pendingAutoselectedOption = null;\n }\n this._closeKeyEventStream.next();\n this._resetActiveItem();\n // We need to stop propagation, otherwise the event will eventually\n // reach the input itself and cause the overlay to be reopened.\n event.stopPropagation();\n event.preventDefault();\n }\n });\n // Subscribe to the pointer events stream so that it doesn't get picked up by other overlays.\n // TODO(crisbeto): we should switch `_getOutsideClickStream` eventually to use this stream,\n // but the behvior isn't exactly the same and it ends up breaking some internal tests.\n overlayRef.outsidePointerEvents().subscribe();\n }\n}\n_MatAutocompleteTriggerBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteTriggerBase, deps: [{ token: i0.ElementRef }, { token: i1$1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: MAT_AUTOCOMPLETE_SCROLL_STRATEGY }, { token: i2$1.Directionality, optional: true }, { token: MAT_FORM_FIELD, host: true, optional: true }, { token: DOCUMENT, optional: true }, { token: i3.ViewportRuler }, { token: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatAutocompleteTriggerBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatAutocompleteTriggerBase, inputs: { autocomplete: [\"matAutocomplete\", \"autocomplete\"], position: [\"matAutocompletePosition\", \"position\"], connectedTo: [\"matAutocompleteConnectedTo\", \"connectedTo\"], autocompleteAttribute: [\"autocomplete\", \"autocompleteAttribute\"], autocompleteDisabled: [\"matAutocompleteDisabled\", \"autocompleteDisabled\"] }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatAutocompleteTriggerBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY]\n }] }, { type: i2$1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i4.MatFormField, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD]\n }, {\n type: Host\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i3.ViewportRuler }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS]\n }] }]; }, propDecorators: { autocomplete: [{\n type: Input,\n args: ['matAutocomplete']\n }], position: [{\n type: Input,\n args: ['matAutocompletePosition']\n }], connectedTo: [{\n type: Input,\n args: ['matAutocompleteConnectedTo']\n }], autocompleteAttribute: [{\n type: Input,\n args: ['autocomplete']\n }], autocompleteDisabled: [{\n type: Input,\n args: ['matAutocompleteDisabled']\n }] } });\nclass MatAutocompleteTrigger extends _MatAutocompleteTriggerBase {\n constructor() {\n super(...arguments);\n this._aboveClass = 'mat-autocomplete-panel-above';\n }\n}\nMatAutocompleteTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteTrigger, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatAutocompleteTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatAutocompleteTrigger, selector: \"input[matAutocomplete], textarea[matAutocomplete]\", host: { listeners: { \"focusin\": \"_handleFocus()\", \"blur\": \"_onTouched()\", \"input\": \"_handleInput($event)\", \"keydown\": \"_handleKeydown($event)\", \"click\": \"_handleClick()\" }, properties: { \"attr.autocomplete\": \"autocompleteAttribute\", \"attr.role\": \"autocompleteDisabled ? null : \\\"combobox\\\"\", \"attr.aria-autocomplete\": \"autocompleteDisabled ? null : \\\"list\\\"\", \"attr.aria-activedescendant\": \"(panelOpen && activeOption) ? activeOption.id : null\", \"attr.aria-expanded\": \"autocompleteDisabled ? null : panelOpen.toString()\", \"attr.aria-owns\": \"(autocompleteDisabled || !panelOpen) ? null : autocomplete?.id\", \"attr.aria-haspopup\": \"autocompleteDisabled ? null : \\\"listbox\\\"\" }, classAttribute: \"mat-autocomplete-trigger\" }, providers: [MAT_AUTOCOMPLETE_VALUE_ACCESSOR], exportAs: [\"matAutocompleteTrigger\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteTrigger, decorators: [{\n type: Directive,\n args: [{\n selector: `input[matAutocomplete], textarea[matAutocomplete]`,\n host: {\n 'class': 'mat-autocomplete-trigger',\n '[attr.autocomplete]': 'autocompleteAttribute',\n '[attr.role]': 'autocompleteDisabled ? null : \"combobox\"',\n '[attr.aria-autocomplete]': 'autocompleteDisabled ? null : \"list\"',\n '[attr.aria-activedescendant]': '(panelOpen && activeOption) ? activeOption.id : null',\n '[attr.aria-expanded]': 'autocompleteDisabled ? null : panelOpen.toString()',\n '[attr.aria-owns]': '(autocompleteDisabled || !panelOpen) ? null : autocomplete?.id',\n '[attr.aria-haspopup]': 'autocompleteDisabled ? null : \"listbox\"',\n // Note: we use `focusin`, as opposed to `focus`, in order to open the panel\n // a little earlier. This avoids issues where IE delays the focusing of the input.\n '(focusin)': '_handleFocus()',\n '(blur)': '_onTouched()',\n '(input)': '_handleInput($event)',\n '(keydown)': '_handleKeydown($event)',\n '(click)': '_handleClick()',\n },\n exportAs: 'matAutocompleteTrigger',\n providers: [MAT_AUTOCOMPLETE_VALUE_ACCESSOR],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatAutocompleteModule {\n}\nMatAutocompleteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatAutocompleteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteModule, declarations: [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin], imports: [OverlayModule, MatOptionModule, MatCommonModule, CommonModule], exports: [MatAutocomplete,\n MatAutocompleteTrigger,\n MatAutocompleteOrigin,\n CdkScrollableModule,\n MatOptionModule,\n MatCommonModule] });\nMatAutocompleteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteModule, providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [OverlayModule, MatOptionModule, MatCommonModule, CommonModule, CdkScrollableModule,\n MatOptionModule,\n MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAutocompleteModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [OverlayModule, MatOptionModule, MatCommonModule, CommonModule],\n exports: [\n MatAutocomplete,\n MatAutocompleteTrigger,\n MatAutocompleteOrigin,\n CdkScrollableModule,\n MatOptionModule,\n MatCommonModule,\n ],\n declarations: [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin],\n providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER, MAT_AUTOCOMPLETE_VALUE_ACCESSOR, MatAutocomplete, MatAutocompleteModule, MatAutocompleteOrigin, MatAutocompleteSelectedEvent, MatAutocompleteTrigger, _MatAutocompleteBase, _MatAutocompleteOriginBase, _MatAutocompleteTriggerBase, getMatAutocompleteMissingPanelError };\n","import * as i0 from '@angular/core';\nimport { Directive, Input, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, NgModule } from '@angular/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { MatCommonModule } from '@angular/material/core';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Content of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardContent {\n}\nMatCardContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardContent, selector: \"mat-card-content, [mat-card-content], [matCardContent]\", host: { classAttribute: \"mat-card-content\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardContent, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-card-content, [mat-card-content], [matCardContent]',\n host: { 'class': 'mat-card-content' },\n }]\n }] });\n/**\n * Title of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardTitle {\n}\nMatCardTitle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardTitle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardTitle, selector: \"mat-card-title, [mat-card-title], [matCardTitle]\", host: { classAttribute: \"mat-card-title\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardTitle, decorators: [{\n type: Directive,\n args: [{\n selector: `mat-card-title, [mat-card-title], [matCardTitle]`,\n host: {\n 'class': 'mat-card-title',\n },\n }]\n }] });\n/**\n * Sub-title of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardSubtitle {\n}\nMatCardSubtitle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardSubtitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardSubtitle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardSubtitle, selector: \"mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]\", host: { classAttribute: \"mat-card-subtitle\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardSubtitle, decorators: [{\n type: Directive,\n args: [{\n selector: `mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]`,\n host: {\n 'class': 'mat-card-subtitle',\n },\n }]\n }] });\n/**\n * Action section of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardActions {\n constructor() {\n /** Position of the actions inside the card. */\n this.align = 'start';\n }\n}\nMatCardActions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardActions, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardActions.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardActions, selector: \"mat-card-actions\", inputs: { align: \"align\" }, host: { properties: { \"class.mat-card-actions-align-end\": \"align === \\\"end\\\"\" }, classAttribute: \"mat-card-actions\" }, exportAs: [\"matCardActions\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardActions, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-card-actions',\n exportAs: 'matCardActions',\n host: {\n 'class': 'mat-card-actions',\n '[class.mat-card-actions-align-end]': 'align === \"end\"',\n },\n }]\n }], propDecorators: { align: [{\n type: Input\n }] } });\n/**\n * Footer of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardFooter {\n}\nMatCardFooter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardFooter, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardFooter.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardFooter, selector: \"mat-card-footer\", host: { classAttribute: \"mat-card-footer\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardFooter, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-card-footer',\n host: { 'class': 'mat-card-footer' },\n }]\n }] });\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardImage {\n}\nMatCardImage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardImage.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardImage, selector: \"[mat-card-image], [matCardImage]\", host: { classAttribute: \"mat-card-image\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardImage, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-image], [matCardImage]',\n host: { 'class': 'mat-card-image' },\n }]\n }] });\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardSmImage {\n}\nMatCardSmImage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardSmImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardSmImage.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardSmImage, selector: \"[mat-card-sm-image], [matCardImageSmall]\", host: { classAttribute: \"mat-card-sm-image\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardSmImage, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-sm-image], [matCardImageSmall]',\n host: { 'class': 'mat-card-sm-image' },\n }]\n }] });\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardMdImage {\n}\nMatCardMdImage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardMdImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardMdImage.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardMdImage, selector: \"[mat-card-md-image], [matCardImageMedium]\", host: { classAttribute: \"mat-card-md-image\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardMdImage, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-md-image], [matCardImageMedium]',\n host: { 'class': 'mat-card-md-image' },\n }]\n }] });\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardLgImage {\n}\nMatCardLgImage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardLgImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardLgImage.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardLgImage, selector: \"[mat-card-lg-image], [matCardImageLarge]\", host: { classAttribute: \"mat-card-lg-image\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardLgImage, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-lg-image], [matCardImageLarge]',\n host: { 'class': 'mat-card-lg-image' },\n }]\n }] });\n/**\n * Large image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardXlImage {\n}\nMatCardXlImage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardXlImage, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardXlImage.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardXlImage, selector: \"[mat-card-xl-image], [matCardImageXLarge]\", host: { classAttribute: \"mat-card-xl-image\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardXlImage, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-xl-image], [matCardImageXLarge]',\n host: { 'class': 'mat-card-xl-image' },\n }]\n }] });\n/**\n * Avatar image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardAvatar {\n}\nMatCardAvatar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardAvatar, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatCardAvatar.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardAvatar, selector: \"[mat-card-avatar], [matCardAvatar]\", host: { classAttribute: \"mat-card-avatar\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardAvatar, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-card-avatar], [matCardAvatar]',\n host: { 'class': 'mat-card-avatar' },\n }]\n }] });\n/**\n * A basic content container component that adds the styles of a Material design card.\n *\n * While this component can be used alone, it also provides a number\n * of preset styles for common card sections, including:\n * - mat-card-title\n * - mat-card-subtitle\n * - mat-card-content\n * - mat-card-actions\n * - mat-card-footer\n */\nclass MatCard {\n // @breaking-change 9.0.0 `_animationMode` parameter to be made required.\n constructor(_animationMode) {\n this._animationMode = _animationMode;\n }\n}\nMatCard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCard, deps: [{ token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatCard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCard, selector: \"mat-card\", host: { properties: { \"class._mat-animation-noopable\": \"_animationMode === \\\"NoopAnimations\\\"\" }, classAttribute: \"mat-card mat-focus-indicator\" }, exportAs: [\"matCard\"], ngImport: i0, template: \"\\n\\n\", styles: [\".mat-card{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:block;position:relative;padding:16px;border-radius:4px}.mat-card._mat-animation-noopable{transition:none !important;animation:none !important}.mat-card>.mat-divider-horizontal{position:absolute;left:0;width:100%}[dir=rtl] .mat-card>.mat-divider-horizontal{left:auto;right:0}.mat-card>.mat-divider-horizontal.mat-divider-inset{position:static;margin:0}[dir=rtl] .mat-card>.mat-divider-horizontal.mat-divider-inset{margin-right:0}.cdk-high-contrast-active .mat-card{outline:solid 1px}.mat-card-actions,.mat-card-subtitle,.mat-card-content{display:block;margin-bottom:16px}.mat-card-title{display:block;margin-bottom:8px}.mat-card-actions{margin-left:-8px;margin-right:-8px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 32px);margin:0 -16px 16px -16px;display:block;overflow:hidden}.mat-card-image img{width:100%}.mat-card-footer{display:block;margin:0 -16px -16px -16px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button,.mat-card-actions .mat-stroked-button{margin:0 8px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header .mat-card-title{margin-bottom:12px}.mat-card-header-text{margin:0 16px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;object-fit:cover}.mat-card-title-group{display:flex;justify-content:space-between}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-title-group>.mat-card-xl-image{margin:-8px 0 8px}@media(max-width: 599px){.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}}.mat-card>:first-child,.mat-card-content>:first-child{margin-top:0}.mat-card>:last-child:not(.mat-card-footer),.mat-card-content>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-16px;border-top-left-radius:inherit;border-top-right-radius:inherit}.mat-card>.mat-card-actions:last-child{margin-bottom:-8px;padding-bottom:0}.mat-card-actions:not(.mat-card-actions-align-end) .mat-button:first-child,.mat-card-actions:not(.mat-card-actions-align-end) .mat-raised-button:first-child,.mat-card-actions:not(.mat-card-actions-align-end) .mat-stroked-button:first-child{margin-left:0;margin-right:0}.mat-card-actions-align-end .mat-button:last-child,.mat-card-actions-align-end .mat-raised-button:last-child,.mat-card-actions-align-end .mat-stroked-button:last-child{margin-left:0;margin-right:0}.mat-card-title:not(:first-child),.mat-card-subtitle:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCard, decorators: [{\n type: Component,\n args: [{ selector: 'mat-card', exportAs: 'matCard', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n 'class': 'mat-card mat-focus-indicator',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n }, template: \"\\n\\n\", styles: [\".mat-card{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:block;position:relative;padding:16px;border-radius:4px}.mat-card._mat-animation-noopable{transition:none !important;animation:none !important}.mat-card>.mat-divider-horizontal{position:absolute;left:0;width:100%}[dir=rtl] .mat-card>.mat-divider-horizontal{left:auto;right:0}.mat-card>.mat-divider-horizontal.mat-divider-inset{position:static;margin:0}[dir=rtl] .mat-card>.mat-divider-horizontal.mat-divider-inset{margin-right:0}.cdk-high-contrast-active .mat-card{outline:solid 1px}.mat-card-actions,.mat-card-subtitle,.mat-card-content{display:block;margin-bottom:16px}.mat-card-title{display:block;margin-bottom:8px}.mat-card-actions{margin-left:-8px;margin-right:-8px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 32px);margin:0 -16px 16px -16px;display:block;overflow:hidden}.mat-card-image img{width:100%}.mat-card-footer{display:block;margin:0 -16px -16px -16px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button,.mat-card-actions .mat-stroked-button{margin:0 8px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header .mat-card-title{margin-bottom:12px}.mat-card-header-text{margin:0 16px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;object-fit:cover}.mat-card-title-group{display:flex;justify-content:space-between}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-title-group>.mat-card-xl-image{margin:-8px 0 8px}@media(max-width: 599px){.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}}.mat-card>:first-child,.mat-card-content>:first-child{margin-top:0}.mat-card>:last-child:not(.mat-card-footer),.mat-card-content>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-16px;border-top-left-radius:inherit;border-top-right-radius:inherit}.mat-card>.mat-card-actions:last-child{margin-bottom:-8px;padding-bottom:0}.mat-card-actions:not(.mat-card-actions-align-end) .mat-button:first-child,.mat-card-actions:not(.mat-card-actions-align-end) .mat-raised-button:first-child,.mat-card-actions:not(.mat-card-actions-align-end) .mat-stroked-button:first-child{margin-left:0;margin-right:0}.mat-card-actions-align-end .mat-button:last-child,.mat-card-actions-align-end .mat-raised-button:last-child,.mat-card-actions-align-end .mat-stroked-button:last-child{margin-left:0;margin-right:0}.mat-card-title:not(:first-child),.mat-card-subtitle:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}\"] }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; } });\n/**\n * Component intended to be used within the `` component. It adds styles for a\n * preset header section (i.e. a title, subtitle, and avatar layout).\n * @docs-private\n */\nclass MatCardHeader {\n}\nMatCardHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });\nMatCardHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardHeader, selector: \"mat-card-header\", host: { classAttribute: \"mat-card-header\" }, ngImport: i0, template: \"\\n
\\n \\n
\\n\\n\", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardHeader, decorators: [{\n type: Component,\n args: [{ selector: 'mat-card-header', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { 'class': 'mat-card-header' }, template: \"\\n
\\n \\n
\\n\\n\" }]\n }] });\n/**\n * Component intended to be used within the `` component. It adds styles for a preset\n * layout that groups an image with a title section.\n * @docs-private\n */\nclass MatCardTitleGroup {\n}\nMatCardTitleGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardTitleGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });\nMatCardTitleGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatCardTitleGroup, selector: \"mat-card-title-group\", host: { classAttribute: \"mat-card-title-group\" }, ngImport: i0, template: \"
\\n \\n
\\n\\n\\n\", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardTitleGroup, decorators: [{\n type: Component,\n args: [{ selector: 'mat-card-title-group', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { 'class': 'mat-card-title-group' }, template: \"
\\n \\n
\\n\\n\\n\" }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatCardModule {\n}\nMatCardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatCardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardModule, declarations: [MatCard,\n MatCardHeader,\n MatCardTitleGroup,\n MatCardContent,\n MatCardTitle,\n MatCardSubtitle,\n MatCardActions,\n MatCardFooter,\n MatCardSmImage,\n MatCardMdImage,\n MatCardLgImage,\n MatCardImage,\n MatCardXlImage,\n MatCardAvatar], imports: [MatCommonModule], exports: [MatCard,\n MatCardHeader,\n MatCardTitleGroup,\n MatCardContent,\n MatCardTitle,\n MatCardSubtitle,\n MatCardActions,\n MatCardFooter,\n MatCardSmImage,\n MatCardMdImage,\n MatCardLgImage,\n MatCardImage,\n MatCardXlImage,\n MatCardAvatar,\n MatCommonModule] });\nMatCardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardModule, imports: [MatCommonModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatCardModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: [\n MatCard,\n MatCardHeader,\n MatCardTitleGroup,\n MatCardContent,\n MatCardTitle,\n MatCardSubtitle,\n MatCardActions,\n MatCardFooter,\n MatCardSmImage,\n MatCardMdImage,\n MatCardLgImage,\n MatCardImage,\n MatCardXlImage,\n MatCardAvatar,\n MatCommonModule,\n ],\n declarations: [\n MatCard,\n MatCardHeader,\n MatCardTitleGroup,\n MatCardContent,\n MatCardTitle,\n MatCardSubtitle,\n MatCardActions,\n MatCardFooter,\n MatCardSmImage,\n MatCardMdImage,\n MatCardLgImage,\n MatCardImage,\n MatCardXlImage,\n MatCardAvatar,\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardModule, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage };\n","import { SPACE, BACKSPACE, DELETE, TAB, hasModifierKey, ENTER } from '@angular/cdk/keycodes';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, EventEmitter, Optional, Inject, Attribute, ContentChild, Input, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, Self, ContentChildren, NgModule } from '@angular/core';\nimport * as i3 from '@angular/material/core';\nimport { mixinTabIndex, mixinColor, mixinDisableRipple, RippleRenderer, MAT_RIPPLE_GLOBAL_OPTIONS, mixinErrorState, MatCommonModule, ErrorStateMatcher } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport * as i1 from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subject, merge } from 'rxjs';\nimport { take, takeUntil, startWith } from 'rxjs/operators';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport * as i1$1 from '@angular/cdk/bidi';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport * as i2 from '@angular/forms';\nimport { Validators } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\n\n/** Event object emitted by MatChip when selected or deselected. */\nclass MatChipSelectionChange {\n constructor(\n /** Reference to the chip that emitted the event. */\n source, \n /** Whether the chip that emitted the event is selected. */\n selected, \n /** Whether the selection change was a result of a user interaction. */\n isUserInput = false) {\n this.source = source;\n this.selected = selected;\n this.isUserInput = isUserInput;\n }\n}\n/**\n * Injection token that can be used to reference instances of `MatChipRemove`. It serves as\n * alternative token to the actual `MatChipRemove` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_CHIP_REMOVE = new InjectionToken('MatChipRemove');\n/**\n * Injection token that can be used to reference instances of `MatChipAvatar`. It serves as\n * alternative token to the actual `MatChipAvatar` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_CHIP_AVATAR = new InjectionToken('MatChipAvatar');\n/**\n * Injection token that can be used to reference instances of `MatChipTrailingIcon`. It serves as\n * alternative token to the actual `MatChipTrailingIcon` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_CHIP_TRAILING_ICON = new InjectionToken('MatChipTrailingIcon');\n// Boilerplate for applying mixins to MatChip.\n/** @docs-private */\nclass MatChipBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatChipMixinBase = mixinTabIndex(mixinColor(mixinDisableRipple(MatChipBase), 'primary'), -1);\n/**\n * Dummy directive to add CSS class to chip avatar.\n * @docs-private\n */\nclass MatChipAvatar {\n}\nMatChipAvatar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipAvatar, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatChipAvatar.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatChipAvatar, selector: \"mat-chip-avatar, [matChipAvatar]\", host: { classAttribute: \"mat-chip-avatar\" }, providers: [{ provide: MAT_CHIP_AVATAR, useExisting: MatChipAvatar }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipAvatar, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-chip-avatar, [matChipAvatar]',\n host: { 'class': 'mat-chip-avatar' },\n providers: [{ provide: MAT_CHIP_AVATAR, useExisting: MatChipAvatar }],\n }]\n }] });\n/**\n * Dummy directive to add CSS class to chip trailing icon.\n * @docs-private\n */\nclass MatChipTrailingIcon {\n}\nMatChipTrailingIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipTrailingIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatChipTrailingIcon.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatChipTrailingIcon, selector: \"mat-chip-trailing-icon, [matChipTrailingIcon]\", host: { classAttribute: \"mat-chip-trailing-icon\" }, providers: [{ provide: MAT_CHIP_TRAILING_ICON, useExisting: MatChipTrailingIcon }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipTrailingIcon, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-chip-trailing-icon, [matChipTrailingIcon]',\n host: { 'class': 'mat-chip-trailing-icon' },\n providers: [{ provide: MAT_CHIP_TRAILING_ICON, useExisting: MatChipTrailingIcon }],\n }]\n }] });\n/** Material Design styled chip directive. Used inside the MatChipList component. */\nclass MatChip extends _MatChipMixinBase {\n constructor(elementRef, _ngZone, platform, globalRippleOptions, _changeDetectorRef, _document, animationMode, tabIndex) {\n super(elementRef);\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n /** Whether the chip has focus. */\n this._hasFocus = false;\n /** Whether the chip list is selectable */\n this.chipListSelectable = true;\n /** Whether the chip list is in multi-selection mode. */\n this._chipListMultiple = false;\n /** Whether the chip list as a whole is disabled. */\n this._chipListDisabled = false;\n /** ARIA role that should be applied to the chip. */\n this.role = 'option';\n this._selected = false;\n this._selectable = true;\n this._disabled = false;\n this._removable = true;\n /** Emits when the chip is focused. */\n this._onFocus = new Subject();\n /** Emits when the chip is blurred. */\n this._onBlur = new Subject();\n /** Emitted when the chip is selected or deselected. */\n this.selectionChange = new EventEmitter();\n /** Emitted when the chip is destroyed. */\n this.destroyed = new EventEmitter();\n /** Emitted when a chip is to be removed. */\n this.removed = new EventEmitter();\n this._addHostClassName();\n // Dynamically create the ripple target, append it within the chip, and use it as the\n // chip's ripple target. Adding the class '.mat-chip-ripple' ensures that it will have\n // the proper styles.\n this._chipRippleTarget = _document.createElement('div');\n this._chipRippleTarget.classList.add('mat-chip-ripple');\n this._elementRef.nativeElement.appendChild(this._chipRippleTarget);\n this._chipRipple = new RippleRenderer(this, _ngZone, this._chipRippleTarget, platform);\n this._chipRipple.setupTriggerEvents(elementRef);\n this.rippleConfig = globalRippleOptions || {};\n this._animationsDisabled = animationMode === 'NoopAnimations';\n this.tabIndex = tabIndex != null ? parseInt(tabIndex) || -1 : -1;\n }\n /**\n * Whether ripples are disabled on interaction\n * @docs-private\n */\n get rippleDisabled() {\n return (this.disabled ||\n this.disableRipple ||\n this._animationsDisabled ||\n !!this.rippleConfig.disabled);\n }\n /** Whether the chip is selected. */\n get selected() {\n return this._selected;\n }\n set selected(value) {\n const coercedValue = coerceBooleanProperty(value);\n if (coercedValue !== this._selected) {\n this._selected = coercedValue;\n this._dispatchSelectionChange();\n }\n }\n /** The value of the chip. Defaults to the content inside `` tags. */\n get value() {\n return this._value !== undefined ? this._value : this._elementRef.nativeElement.textContent;\n }\n set value(value) {\n this._value = value;\n }\n /**\n * Whether or not the chip is selectable. When a chip is not selectable,\n * changes to its selected state are always ignored. By default a chip is\n * selectable, and it becomes non-selectable if its parent chip list is\n * not selectable.\n */\n get selectable() {\n return this._selectable && this.chipListSelectable;\n }\n set selectable(value) {\n this._selectable = coerceBooleanProperty(value);\n }\n /** Whether the chip is disabled. */\n get disabled() {\n return this._chipListDisabled || this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n }\n /**\n * Determines whether or not the chip displays the remove styling and emits (removed) events.\n */\n get removable() {\n return this._removable;\n }\n set removable(value) {\n this._removable = coerceBooleanProperty(value);\n }\n /** The ARIA selected applied to the chip. */\n get ariaSelected() {\n // Remove the `aria-selected` when the chip is deselected in single-selection mode, because\n // it adds noise to NVDA users where \"not selected\" will be read out for each chip.\n return this.selectable && (this._chipListMultiple || this.selected)\n ? this.selected.toString()\n : null;\n }\n _addHostClassName() {\n const basicChipAttrName = 'mat-basic-chip';\n const element = this._elementRef.nativeElement;\n if (element.hasAttribute(basicChipAttrName) ||\n element.tagName.toLowerCase() === basicChipAttrName) {\n element.classList.add(basicChipAttrName);\n return;\n }\n else {\n element.classList.add('mat-standard-chip');\n }\n }\n ngOnDestroy() {\n this.destroyed.emit({ chip: this });\n this._chipRipple._removeTriggerEvents();\n }\n /** Selects the chip. */\n select() {\n if (!this._selected) {\n this._selected = true;\n this._dispatchSelectionChange();\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Deselects the chip. */\n deselect() {\n if (this._selected) {\n this._selected = false;\n this._dispatchSelectionChange();\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Select this chip and emit selected event */\n selectViaInteraction() {\n if (!this._selected) {\n this._selected = true;\n this._dispatchSelectionChange(true);\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Toggles the current selected state of this chip. */\n toggleSelected(isUserInput = false) {\n this._selected = !this.selected;\n this._dispatchSelectionChange(isUserInput);\n this._changeDetectorRef.markForCheck();\n return this.selected;\n }\n /** Allows for programmatic focusing of the chip. */\n focus() {\n if (!this._hasFocus) {\n this._elementRef.nativeElement.focus();\n this._onFocus.next({ chip: this });\n }\n this._hasFocus = true;\n }\n /**\n * Allows for programmatic removal of the chip. Called by the MatChipList when the DELETE or\n * BACKSPACE keys are pressed.\n *\n * Informs any listeners of the removal request. Does not remove the chip from the DOM.\n */\n remove() {\n if (this.removable) {\n this.removed.emit({ chip: this });\n }\n }\n /** Handles click events on the chip. */\n _handleClick(event) {\n if (this.disabled) {\n event.preventDefault();\n }\n }\n /** Handle custom key presses. */\n _handleKeydown(event) {\n if (this.disabled) {\n return;\n }\n switch (event.keyCode) {\n case DELETE:\n case BACKSPACE:\n // If we are removable, remove the focused chip\n this.remove();\n // Always prevent so page navigation does not occur\n event.preventDefault();\n break;\n case SPACE:\n // If we are selectable, toggle the focused chip\n if (this.selectable) {\n this.toggleSelected(true);\n }\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n }\n }\n _blur() {\n // When animations are enabled, Angular may end up removing the chip from the DOM a little\n // earlier than usual, causing it to be blurred and throwing off the logic in the chip list\n // that moves focus not the next item. To work around the issue, we defer marking the chip\n // as not focused until the next time the zone stabilizes.\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._ngZone.run(() => {\n this._hasFocus = false;\n this._onBlur.next({ chip: this });\n });\n });\n }\n _dispatchSelectionChange(isUserInput = false) {\n this.selectionChange.emit({\n source: this,\n isUserInput,\n selected: this._selected,\n });\n }\n}\nMatChip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChip, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.Platform }, { token: MAT_RIPPLE_GLOBAL_OPTIONS, optional: true }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: 'tabindex', attribute: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatChip.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatChip, selector: \"mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]\", inputs: { color: \"color\", disableRipple: \"disableRipple\", tabIndex: \"tabIndex\", role: \"role\", selected: \"selected\", value: \"value\", selectable: \"selectable\", disabled: \"disabled\", removable: \"removable\" }, outputs: { selectionChange: \"selectionChange\", destroyed: \"destroyed\", removed: \"removed\" }, host: { listeners: { \"click\": \"_handleClick($event)\", \"keydown\": \"_handleKeydown($event)\", \"focus\": \"focus()\", \"blur\": \"_blur()\" }, properties: { \"attr.tabindex\": \"disabled ? null : tabIndex\", \"attr.role\": \"role\", \"class.mat-chip-selected\": \"selected\", \"class.mat-chip-with-avatar\": \"avatar\", \"class.mat-chip-with-trailing-icon\": \"trailingIcon || removeIcon\", \"class.mat-chip-disabled\": \"disabled\", \"class._mat-animation-noopable\": \"_animationsDisabled\", \"attr.disabled\": \"disabled || null\", \"attr.aria-disabled\": \"disabled.toString()\", \"attr.aria-selected\": \"ariaSelected\" }, classAttribute: \"mat-chip mat-focus-indicator\" }, queries: [{ propertyName: \"avatar\", first: true, predicate: MAT_CHIP_AVATAR, descendants: true }, { propertyName: \"trailingIcon\", first: true, predicate: MAT_CHIP_TRAILING_ICON, descendants: true }, { propertyName: \"removeIcon\", first: true, predicate: MAT_CHIP_REMOVE, descendants: true }], exportAs: [\"matChip\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChip, decorators: [{\n type: Directive,\n args: [{\n selector: `mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]`,\n inputs: ['color', 'disableRipple', 'tabIndex'],\n exportAs: 'matChip',\n host: {\n 'class': 'mat-chip mat-focus-indicator',\n '[attr.tabindex]': 'disabled ? null : tabIndex',\n '[attr.role]': 'role',\n '[class.mat-chip-selected]': 'selected',\n '[class.mat-chip-with-avatar]': 'avatar',\n '[class.mat-chip-with-trailing-icon]': 'trailingIcon || removeIcon',\n '[class.mat-chip-disabled]': 'disabled',\n '[class._mat-animation-noopable]': '_animationsDisabled',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-selected]': 'ariaSelected',\n '(click)': '_handleClick($event)',\n '(keydown)': '_handleKeydown($event)',\n '(focus)': 'focus()',\n '(blur)': '_blur()',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RIPPLE_GLOBAL_OPTIONS]\n }] }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }]; }, propDecorators: { avatar: [{\n type: ContentChild,\n args: [MAT_CHIP_AVATAR]\n }], trailingIcon: [{\n type: ContentChild,\n args: [MAT_CHIP_TRAILING_ICON]\n }], removeIcon: [{\n type: ContentChild,\n args: [MAT_CHIP_REMOVE]\n }], role: [{\n type: Input\n }], selected: [{\n type: Input\n }], value: [{\n type: Input\n }], selectable: [{\n type: Input\n }], disabled: [{\n type: Input\n }], removable: [{\n type: Input\n }], selectionChange: [{\n type: Output\n }], destroyed: [{\n type: Output\n }], removed: [{\n type: Output\n }] } });\n/**\n * Applies proper (click) support and adds styling for use with the Material Design \"cancel\" icon\n * available at https://material.io/icons/#ic_cancel.\n *\n * Example:\n *\n * `\n * cancel\n * `\n *\n * You *may* use a custom icon, but you may need to override the `mat-chip-remove` positioning\n * styles to properly center the icon within the chip.\n */\nclass MatChipRemove {\n constructor(_parentChip, elementRef) {\n this._parentChip = _parentChip;\n if (elementRef.nativeElement.nodeName === 'BUTTON') {\n elementRef.nativeElement.setAttribute('type', 'button');\n }\n }\n /** Calls the parent chip's public `remove()` method if applicable. */\n _handleClick(event) {\n const parentChip = this._parentChip;\n if (parentChip.removable && !parentChip.disabled) {\n parentChip.remove();\n }\n // We need to stop event propagation because otherwise the event will bubble up to the\n // form field and cause the `onContainerClick` method to be invoked. This method would then\n // reset the focused chip that has been focused after chip removal. Usually the parent\n // the parent click listener of the `MatChip` would prevent propagation, but it can happen\n // that the chip is being removed before the event bubbles up.\n event.stopPropagation();\n event.preventDefault();\n }\n}\nMatChipRemove.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipRemove, deps: [{ token: MatChip }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatChipRemove.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatChipRemove, selector: \"[matChipRemove]\", host: { listeners: { \"click\": \"_handleClick($event)\" }, classAttribute: \"mat-chip-remove mat-chip-trailing-icon\" }, providers: [{ provide: MAT_CHIP_REMOVE, useExisting: MatChipRemove }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipRemove, decorators: [{\n type: Directive,\n args: [{\n selector: '[matChipRemove]',\n host: {\n 'class': 'mat-chip-remove mat-chip-trailing-icon',\n '(click)': '_handleClick($event)',\n },\n providers: [{ provide: MAT_CHIP_REMOVE, useExisting: MatChipRemove }],\n }]\n }], ctorParameters: function () { return [{ type: MatChip }, { type: i0.ElementRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token to be used to override the default options for the chips module. */\nconst MAT_CHIPS_DEFAULT_OPTIONS = new InjectionToken('mat-chips-default-options');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatChipList.\n/** @docs-private */\nconst _MatChipListBase = mixinErrorState(class {\n constructor(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, \n /**\n * Form control bound to the component.\n * Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n ngControl) {\n this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n this._parentForm = _parentForm;\n this._parentFormGroup = _parentFormGroup;\n this.ngControl = ngControl;\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n this.stateChanges = new Subject();\n }\n});\n// Increasing integer for generating unique ids for chip-list components.\nlet nextUniqueId$1 = 0;\n/** Change event object that is emitted when the chip list value has changed. */\nclass MatChipListChange {\n constructor(\n /** Chip list that emitted the event. */\n source, \n /** Value of the chip list when the event was emitted. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\n/**\n * A material design chips component (named ChipList for its similarity to the List component).\n */\nclass MatChipList extends _MatChipListBase {\n constructor(_elementRef, _changeDetectorRef, _dir, _parentForm, _parentFormGroup, _defaultErrorStateMatcher, ngControl) {\n super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.controlType = 'mat-chip-list';\n /**\n * When a chip is destroyed, we store the index of the destroyed chip until the chips\n * query list notifies about the update. This is necessary because we cannot determine an\n * appropriate chip that should receive focus until the array of chips updated completely.\n */\n this._lastDestroyedChipIndex = null;\n /** Subject that emits when the component has been destroyed. */\n this._destroyed = new Subject();\n /** Uid of the chip list */\n this._uid = `mat-chip-list-${nextUniqueId$1++}`;\n /** Tab index for the chip list. */\n this._tabIndex = 0;\n /**\n * User defined tab index.\n * When it is not null, use user defined tab index. Otherwise use _tabIndex\n */\n this._userTabIndex = null;\n /** Function when touched */\n this._onTouched = () => { };\n /** Function when changed */\n this._onChange = () => { };\n this._multiple = false;\n this._compareWith = (o1, o2) => o1 === o2;\n this._disabled = false;\n /** Orientation of the chip list. */\n this.ariaOrientation = 'horizontal';\n this._selectable = true;\n /** Event emitted when the selected chip list value has been changed by the user. */\n this.change = new EventEmitter();\n /**\n * Event that emits whenever the raw value of the chip-list changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n this.valueChange = new EventEmitter();\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n /** The array of selected chips inside chip list. */\n get selected() {\n return this.multiple ? this._selectionModel?.selected || [] : this._selectionModel?.selected[0];\n }\n /** The ARIA role applied to the chip list. */\n get role() {\n if (this._explicitRole) {\n return this._explicitRole;\n }\n return this.empty ? null : 'listbox';\n }\n set role(role) {\n this._explicitRole = role;\n }\n /** Whether the user should be allowed to select multiple chips. */\n get multiple() {\n return this._multiple;\n }\n set multiple(value) {\n this._multiple = coerceBooleanProperty(value);\n this._syncChipsState();\n }\n /**\n * A function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n get compareWith() {\n return this._compareWith;\n }\n set compareWith(fn) {\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get value() {\n return this._value;\n }\n set value(value) {\n this.writeValue(value);\n this._value = value;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get id() {\n return this._chipInput ? this._chipInput.id : this._uid;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get placeholder() {\n return this._chipInput ? this._chipInput.placeholder : this._placeholder;\n }\n set placeholder(value) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n /** Whether any chips or the matChipInput inside of this chip-list has focus. */\n get focused() {\n return (this._chipInput && this._chipInput.focused) || this._hasFocusedChip();\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get empty() {\n return (!this._chipInput || this._chipInput.empty) && (!this.chips || this.chips.length === 0);\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat() {\n return !this.empty || this.focused;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get disabled() {\n return this.ngControl ? !!this.ngControl.disabled : this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n this._syncChipsState();\n }\n /**\n * Whether or not this chip list is selectable. When a chip list is not selectable,\n * the selected states for all the chips inside the chip list are always ignored.\n */\n get selectable() {\n return this._selectable;\n }\n set selectable(value) {\n this._selectable = coerceBooleanProperty(value);\n this._syncChipsState();\n }\n set tabIndex(value) {\n this._userTabIndex = value;\n this._tabIndex = value;\n }\n /** Combined stream of all of the child chips' selection change events. */\n get chipSelectionChanges() {\n return merge(...this.chips.map(chip => chip.selectionChange));\n }\n /** Combined stream of all of the child chips' focus change events. */\n get chipFocusChanges() {\n return merge(...this.chips.map(chip => chip._onFocus));\n }\n /** Combined stream of all of the child chips' blur change events. */\n get chipBlurChanges() {\n return merge(...this.chips.map(chip => chip._onBlur));\n }\n /** Combined stream of all of the child chips' remove change events. */\n get chipRemoveChanges() {\n return merge(...this.chips.map(chip => chip.destroyed));\n }\n ngAfterContentInit() {\n this._keyManager = new FocusKeyManager(this.chips)\n .withWrap()\n .withVerticalOrientation()\n .withHomeAndEnd()\n .withHorizontalOrientation(this._dir ? this._dir.value : 'ltr');\n if (this._dir) {\n this._dir.change\n .pipe(takeUntil(this._destroyed))\n .subscribe(dir => this._keyManager.withHorizontalOrientation(dir));\n }\n this._keyManager.tabOut.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._allowFocusEscape();\n });\n // When the list changes, re-subscribe\n this.chips.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\n if (this.disabled || !this.selectable) {\n // Since this happens after the content has been\n // checked, we need to defer it to the next tick.\n Promise.resolve().then(() => {\n this._syncChipsState();\n });\n }\n this._resetChips();\n // Reset chips selected/deselected status\n this._initializeSelection();\n // Check to see if we need to update our tab index\n this._updateTabIndex();\n // Check to see if we have a destroyed chip and need to refocus\n this._updateFocusForDestroyedChips();\n this.stateChanges.next();\n });\n }\n ngOnInit() {\n this._selectionModel = new SelectionModel(this.multiple, undefined, false);\n this.stateChanges.next();\n }\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n if (this.ngControl.disabled !== this._disabled) {\n this.disabled = !!this.ngControl.disabled;\n }\n }\n }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this.stateChanges.complete();\n this._dropSubscriptions();\n }\n /** Associates an HTML input element with this chip list. */\n registerInput(inputElement) {\n this._chipInput = inputElement;\n // We use this attribute to match the chip list to its input in test harnesses.\n // Set the attribute directly here to avoid \"changed after checked\" errors.\n this._elementRef.nativeElement.setAttribute('data-mat-chip-input', inputElement.id);\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids) {\n if (ids.length) {\n this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n }\n else {\n this._elementRef.nativeElement.removeAttribute('aria-describedby');\n }\n }\n // Implemented as part of ControlValueAccessor.\n writeValue(value) {\n if (this.chips) {\n this._setSelectionByValue(value, false);\n }\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._onChange = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.stateChanges.next();\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick(event) {\n if (!this._originatesFromChip(event)) {\n this.focus();\n }\n }\n /**\n * Focuses the first non-disabled chip in this chip list, or the associated input when there\n * are no eligible chips.\n */\n focus(options) {\n if (this.disabled) {\n return;\n }\n // TODO: ARIA says this should focus the first `selected` chip if any are selected.\n // Focus on first element if there's no chipInput inside chip-list\n if (this._chipInput && this._chipInput.focused) {\n // do nothing\n }\n else if (this.chips.length > 0) {\n this._keyManager.setFirstItemActive();\n this.stateChanges.next();\n }\n else {\n this._focusInput(options);\n this.stateChanges.next();\n }\n }\n /** Attempt to focus an input if we have one. */\n _focusInput(options) {\n if (this._chipInput) {\n this._chipInput.focus(options);\n }\n }\n /**\n * Pass events to the keyboard manager. Available here for tests.\n */\n _keydown(event) {\n const target = event.target;\n if (target && target.classList.contains('mat-chip')) {\n this._keyManager.onKeydown(event);\n this.stateChanges.next();\n }\n }\n /**\n * Check the tab index as you should not be allowed to focus an empty list.\n */\n _updateTabIndex() {\n // If we have 0 chips, we should not allow keyboard focus\n this._tabIndex = this._userTabIndex || (this.chips.length === 0 ? -1 : 0);\n }\n /**\n * If the amount of chips changed, we need to update the\n * key manager state and focus the next closest chip.\n */\n _updateFocusForDestroyedChips() {\n // Move focus to the closest chip. If no other chips remain, focus the chip-list itself.\n if (this._lastDestroyedChipIndex != null) {\n if (this.chips.length) {\n const newChipIndex = Math.min(this._lastDestroyedChipIndex, this.chips.length - 1);\n this._keyManager.setActiveItem(newChipIndex);\n }\n else {\n this.focus();\n }\n }\n this._lastDestroyedChipIndex = null;\n }\n /**\n * Utility to ensure all indexes are valid.\n *\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of chips.\n */\n _isValidIndex(index) {\n return index >= 0 && index < this.chips.length;\n }\n _setSelectionByValue(value, isUserInput = true) {\n this._clearSelection();\n this.chips.forEach(chip => chip.deselect());\n if (Array.isArray(value)) {\n value.forEach(currentValue => this._selectValue(currentValue, isUserInput));\n this._sortValues();\n }\n else {\n const correspondingChip = this._selectValue(value, isUserInput);\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what chip the user interacted with last.\n if (correspondingChip) {\n if (isUserInput) {\n this._keyManager.setActiveItem(correspondingChip);\n }\n }\n }\n }\n /**\n * Finds and selects the chip based on its value.\n * @returns Chip that has the corresponding value.\n */\n _selectValue(value, isUserInput = true) {\n const correspondingChip = this.chips.find(chip => {\n return chip.value != null && this._compareWith(chip.value, value);\n });\n if (correspondingChip) {\n isUserInput ? correspondingChip.selectViaInteraction() : correspondingChip.select();\n this._selectionModel.select(correspondingChip);\n }\n return correspondingChip;\n }\n _initializeSelection() {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl || this._value) {\n this._setSelectionByValue(this.ngControl ? this.ngControl.value : this._value, false);\n this.stateChanges.next();\n }\n });\n }\n /**\n * Deselects every chip in the list.\n * @param skip Chip that should not be deselected.\n */\n _clearSelection(skip) {\n this._selectionModel.clear();\n this.chips.forEach(chip => {\n if (chip !== skip) {\n chip.deselect();\n }\n });\n this.stateChanges.next();\n }\n /**\n * Sorts the model values, ensuring that they keep the same\n * order that they have in the panel.\n */\n _sortValues() {\n if (this._multiple) {\n this._selectionModel.clear();\n this.chips.forEach(chip => {\n if (chip.selected) {\n this._selectionModel.select(chip);\n }\n });\n this.stateChanges.next();\n }\n }\n /** Emits change event to set the model value. */\n _propagateChanges(fallbackValue) {\n let valueToEmit = null;\n if (Array.isArray(this.selected)) {\n valueToEmit = this.selected.map(chip => chip.value);\n }\n else {\n valueToEmit = this.selected ? this.selected.value : fallbackValue;\n }\n this._value = valueToEmit;\n this.change.emit(new MatChipListChange(this, valueToEmit));\n this.valueChange.emit(valueToEmit);\n this._onChange(valueToEmit);\n this._changeDetectorRef.markForCheck();\n }\n /** When blurred, mark the field as touched when focus moved outside the chip list. */\n _blur() {\n if (!this._hasFocusedChip()) {\n this._keyManager.setActiveItem(-1);\n }\n if (!this.disabled) {\n if (this._chipInput) {\n // If there's a chip input, we should check whether the focus moved to chip input.\n // If the focus is not moved to chip input, mark the field as touched. If the focus moved\n // to chip input, do nothing.\n // Timeout is needed to wait for the focus() event trigger on chip input.\n setTimeout(() => {\n if (!this.focused) {\n this._markAsTouched();\n }\n });\n }\n else {\n // If there's no chip input, then mark the field as touched.\n this._markAsTouched();\n }\n }\n }\n /** Mark the field as touched */\n _markAsTouched() {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n /**\n * Removes the `tabindex` from the chip list and resets it back afterwards, allowing the\n * user to tab out of it. This prevents the list from capturing focus and redirecting\n * it back to the first chip, creating a focus trap, if it user tries to tab away.\n */\n _allowFocusEscape() {\n if (this._tabIndex !== -1) {\n this._tabIndex = -1;\n setTimeout(() => {\n this._tabIndex = this._userTabIndex || 0;\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n _resetChips() {\n this._dropSubscriptions();\n this._listenToChipsFocus();\n this._listenToChipsSelection();\n this._listenToChipsRemoved();\n }\n _dropSubscriptions() {\n if (this._chipFocusSubscription) {\n this._chipFocusSubscription.unsubscribe();\n this._chipFocusSubscription = null;\n }\n if (this._chipBlurSubscription) {\n this._chipBlurSubscription.unsubscribe();\n this._chipBlurSubscription = null;\n }\n if (this._chipSelectionSubscription) {\n this._chipSelectionSubscription.unsubscribe();\n this._chipSelectionSubscription = null;\n }\n if (this._chipRemoveSubscription) {\n this._chipRemoveSubscription.unsubscribe();\n this._chipRemoveSubscription = null;\n }\n }\n /** Listens to user-generated selection events on each chip. */\n _listenToChipsSelection() {\n this._chipSelectionSubscription = this.chipSelectionChanges.subscribe(event => {\n event.source.selected\n ? this._selectionModel.select(event.source)\n : this._selectionModel.deselect(event.source);\n // For single selection chip list, make sure the deselected value is unselected.\n if (!this.multiple) {\n this.chips.forEach(chip => {\n if (!this._selectionModel.isSelected(chip) && chip.selected) {\n chip.deselect();\n }\n });\n }\n if (event.isUserInput) {\n this._propagateChanges();\n }\n });\n }\n /** Listens to user-generated selection events on each chip. */\n _listenToChipsFocus() {\n this._chipFocusSubscription = this.chipFocusChanges.subscribe(event => {\n let chipIndex = this.chips.toArray().indexOf(event.chip);\n if (this._isValidIndex(chipIndex)) {\n this._keyManager.updateActiveItem(chipIndex);\n }\n this.stateChanges.next();\n });\n this._chipBlurSubscription = this.chipBlurChanges.subscribe(() => {\n this._blur();\n this.stateChanges.next();\n });\n }\n _listenToChipsRemoved() {\n this._chipRemoveSubscription = this.chipRemoveChanges.subscribe(event => {\n const chip = event.chip;\n const chipIndex = this.chips.toArray().indexOf(event.chip);\n // In case the chip that will be removed is currently focused, we temporarily store\n // the index in order to be able to determine an appropriate sibling chip that will\n // receive focus.\n if (this._isValidIndex(chipIndex) && chip._hasFocus) {\n this._lastDestroyedChipIndex = chipIndex;\n }\n });\n }\n /** Checks whether an event comes from inside a chip element. */\n _originatesFromChip(event) {\n let currentElement = event.target;\n while (currentElement && currentElement !== this._elementRef.nativeElement) {\n if (currentElement.classList.contains('mat-chip')) {\n return true;\n }\n currentElement = currentElement.parentElement;\n }\n return false;\n }\n /** Checks whether any of the chips is focused. */\n _hasFocusedChip() {\n return this.chips && this.chips.some(chip => chip._hasFocus);\n }\n /** Syncs the list's state with the individual chips. */\n _syncChipsState() {\n if (this.chips) {\n this.chips.forEach(chip => {\n chip._chipListDisabled = this._disabled;\n chip._chipListMultiple = this.multiple;\n chip.chipListSelectable = this._selectable;\n });\n }\n }\n}\nMatChipList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipList, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.Directionality, optional: true }, { token: i2.NgForm, optional: true }, { token: i2.FormGroupDirective, optional: true }, { token: i3.ErrorStateMatcher }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });\nMatChipList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatChipList, selector: \"mat-chip-list\", inputs: { role: \"role\", userAriaDescribedBy: [\"aria-describedby\", \"userAriaDescribedBy\"], errorStateMatcher: \"errorStateMatcher\", multiple: \"multiple\", compareWith: \"compareWith\", value: \"value\", required: \"required\", placeholder: \"placeholder\", disabled: \"disabled\", ariaOrientation: [\"aria-orientation\", \"ariaOrientation\"], selectable: \"selectable\", tabIndex: \"tabIndex\" }, outputs: { change: \"change\", valueChange: \"valueChange\" }, host: { listeners: { \"focus\": \"focus()\", \"blur\": \"_blur()\", \"keydown\": \"_keydown($event)\" }, properties: { \"attr.tabindex\": \"disabled ? null : _tabIndex\", \"attr.aria-required\": \"role ? required : null\", \"attr.aria-disabled\": \"disabled.toString()\", \"attr.aria-invalid\": \"errorState\", \"attr.aria-multiselectable\": \"multiple\", \"attr.role\": \"role\", \"class.mat-chip-list-disabled\": \"disabled\", \"class.mat-chip-list-invalid\": \"errorState\", \"class.mat-chip-list-required\": \"required\", \"attr.aria-orientation\": \"ariaOrientation\", \"id\": \"_uid\" }, classAttribute: \"mat-chip-list\" }, providers: [{ provide: MatFormFieldControl, useExisting: MatChipList }], queries: [{ propertyName: \"chips\", predicate: MatChip, descendants: true }], exportAs: [\"matChipList\"], usesInheritance: true, ngImport: i0, template: `
`, isInline: true, styles: [\".mat-chip{position:relative;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);border:none;-webkit-appearance:none;-moz-appearance:none}.mat-chip::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1)}.mat-standard-chip{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:inline-flex;padding:7px 12px;border-radius:16px;align-items:center;cursor:default;min-height:32px;height:1px}.mat-standard-chip._mat-animation-noopable{transition:none !important;animation:none !important}.mat-standard-chip .mat-chip-remove{border:none;-webkit-appearance:none;-moz-appearance:none;padding:0;background:none}.mat-standard-chip .mat-chip-remove.mat-icon,.mat-standard-chip .mat-chip-remove .mat-icon{width:18px;height:18px;font-size:18px}.mat-standard-chip::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;opacity:0;content:\\\"\\\";pointer-events:none;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-standard-chip:hover::after{opacity:.12}.mat-standard-chip:focus{outline:none}.mat-standard-chip:focus::after{opacity:.16}.cdk-high-contrast-active .mat-standard-chip{outline:solid 1px}.cdk-high-contrast-active .mat-standard-chip.mat-chip-selected{outline-width:3px}.mat-standard-chip.mat-chip-disabled::after{opacity:0}.mat-standard-chip.mat-chip-disabled .mat-chip-remove,.mat-standard-chip.mat-chip-disabled .mat-chip-trailing-icon{cursor:default}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar,.mat-standard-chip.mat-chip-with-avatar{padding-top:0;padding-bottom:0}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-right:8px;padding-left:0}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-left:8px;padding-right:0}.mat-standard-chip.mat-chip-with-trailing-icon{padding-top:7px;padding-bottom:7px;padding-right:8px;padding-left:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon{padding-left:8px;padding-right:12px}.mat-standard-chip.mat-chip-with-avatar{padding-left:0;padding-right:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-avatar{padding-right:0;padding-left:12px}.mat-standard-chip .mat-chip-avatar{width:24px;height:24px;margin-right:8px;margin-left:4px}[dir=rtl] .mat-standard-chip .mat-chip-avatar{margin-left:8px;margin-right:4px}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{width:18px;height:18px;cursor:pointer}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{margin-left:8px;margin-right:0}[dir=rtl] .mat-standard-chip .mat-chip-remove,[dir=rtl] .mat-standard-chip .mat-chip-trailing-icon{margin-right:8px;margin-left:0}.mat-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit;overflow:hidden;transform:translateZ(0)}.mat-chip-list-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;margin:-4px}.mat-chip-list-wrapper input.mat-input-element,.mat-chip-list-wrapper .mat-standard-chip{margin:4px}.mat-chip-list-stacked .mat-chip-list-wrapper{flex-direction:column;align-items:flex-start}.mat-chip-list-stacked .mat-chip-list-wrapper .mat-standard-chip{width:100%}.mat-chip-avatar{border-radius:50%;justify-content:center;align-items:center;display:flex;overflow:hidden;object-fit:cover}input.mat-chip-input{width:150px;margin:4px;flex:1 0 150px}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipList, decorators: [{\n type: Component,\n args: [{ selector: 'mat-chip-list', template: `
`, exportAs: 'matChipList', host: {\n '[attr.tabindex]': 'disabled ? null : _tabIndex',\n '[attr.aria-required]': 'role ? required : null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-invalid]': 'errorState',\n '[attr.aria-multiselectable]': 'multiple',\n '[attr.role]': 'role',\n '[class.mat-chip-list-disabled]': 'disabled',\n '[class.mat-chip-list-invalid]': 'errorState',\n '[class.mat-chip-list-required]': 'required',\n '[attr.aria-orientation]': 'ariaOrientation',\n 'class': 'mat-chip-list',\n '(focus)': 'focus()',\n '(blur)': '_blur()',\n '(keydown)': '_keydown($event)',\n '[id]': '_uid',\n }, providers: [{ provide: MatFormFieldControl, useExisting: MatChipList }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".mat-chip{position:relative;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);border:none;-webkit-appearance:none;-moz-appearance:none}.mat-chip::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1)}.mat-standard-chip{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:inline-flex;padding:7px 12px;border-radius:16px;align-items:center;cursor:default;min-height:32px;height:1px}.mat-standard-chip._mat-animation-noopable{transition:none !important;animation:none !important}.mat-standard-chip .mat-chip-remove{border:none;-webkit-appearance:none;-moz-appearance:none;padding:0;background:none}.mat-standard-chip .mat-chip-remove.mat-icon,.mat-standard-chip .mat-chip-remove .mat-icon{width:18px;height:18px;font-size:18px}.mat-standard-chip::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;opacity:0;content:\\\"\\\";pointer-events:none;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-standard-chip:hover::after{opacity:.12}.mat-standard-chip:focus{outline:none}.mat-standard-chip:focus::after{opacity:.16}.cdk-high-contrast-active .mat-standard-chip{outline:solid 1px}.cdk-high-contrast-active .mat-standard-chip.mat-chip-selected{outline-width:3px}.mat-standard-chip.mat-chip-disabled::after{opacity:0}.mat-standard-chip.mat-chip-disabled .mat-chip-remove,.mat-standard-chip.mat-chip-disabled .mat-chip-trailing-icon{cursor:default}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar,.mat-standard-chip.mat-chip-with-avatar{padding-top:0;padding-bottom:0}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-right:8px;padding-left:0}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-left:8px;padding-right:0}.mat-standard-chip.mat-chip-with-trailing-icon{padding-top:7px;padding-bottom:7px;padding-right:8px;padding-left:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon{padding-left:8px;padding-right:12px}.mat-standard-chip.mat-chip-with-avatar{padding-left:0;padding-right:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-avatar{padding-right:0;padding-left:12px}.mat-standard-chip .mat-chip-avatar{width:24px;height:24px;margin-right:8px;margin-left:4px}[dir=rtl] .mat-standard-chip .mat-chip-avatar{margin-left:8px;margin-right:4px}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{width:18px;height:18px;cursor:pointer}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{margin-left:8px;margin-right:0}[dir=rtl] .mat-standard-chip .mat-chip-remove,[dir=rtl] .mat-standard-chip .mat-chip-trailing-icon{margin-right:8px;margin-left:0}.mat-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit;overflow:hidden;transform:translateZ(0)}.mat-chip-list-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;margin:-4px}.mat-chip-list-wrapper input.mat-input-element,.mat-chip-list-wrapper .mat-standard-chip{margin:4px}.mat-chip-list-stacked .mat-chip-list-wrapper{flex-direction:column;align-items:flex-start}.mat-chip-list-stacked .mat-chip-list-wrapper .mat-standard-chip{width:100%}.mat-chip-avatar{border-radius:50%;justify-content:center;align-items:center;display:flex;overflow:hidden;object-fit:cover}input.mat-chip-input{width:150px;margin:4px;flex:1 0 150px}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i2.NgForm, decorators: [{\n type: Optional\n }] }, { type: i2.FormGroupDirective, decorators: [{\n type: Optional\n }] }, { type: i3.ErrorStateMatcher }, { type: i2.NgControl, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }]; }, propDecorators: { role: [{\n type: Input\n }], userAriaDescribedBy: [{\n type: Input,\n args: ['aria-describedby']\n }], errorStateMatcher: [{\n type: Input\n }], multiple: [{\n type: Input\n }], compareWith: [{\n type: Input\n }], value: [{\n type: Input\n }], required: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], disabled: [{\n type: Input\n }], ariaOrientation: [{\n type: Input,\n args: ['aria-orientation']\n }], selectable: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], change: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], chips: [{\n type: ContentChildren,\n args: [MatChip, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true,\n }]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Increasing integer for generating unique ids.\nlet nextUniqueId = 0;\n/**\n * Directive that adds chip-specific behaviors to an input element inside ``.\n * May be placed inside or outside of an ``.\n */\nclass MatChipInput {\n constructor(_elementRef, _defaultOptions) {\n this._elementRef = _elementRef;\n this._defaultOptions = _defaultOptions;\n /** Whether the control is focused. */\n this.focused = false;\n this._addOnBlur = false;\n /**\n * The list of key codes that will trigger a chipEnd event.\n *\n * Defaults to `[ENTER]`.\n */\n this.separatorKeyCodes = this._defaultOptions.separatorKeyCodes;\n /** Emitted when a chip is to be added. */\n this.chipEnd = new EventEmitter();\n /** The input's placeholder text. */\n this.placeholder = '';\n /** Unique id for the input. */\n this.id = `mat-chip-list-input-${nextUniqueId++}`;\n this._disabled = false;\n this.inputElement = this._elementRef.nativeElement;\n }\n /** Register input for chip list */\n set chipList(value) {\n if (value) {\n this._chipList = value;\n this._chipList.registerInput(this);\n }\n }\n /**\n * Whether or not the chipEnd event will be emitted when the input is blurred.\n */\n get addOnBlur() {\n return this._addOnBlur;\n }\n set addOnBlur(value) {\n this._addOnBlur = coerceBooleanProperty(value);\n }\n /** Whether the input is disabled. */\n get disabled() {\n return this._disabled || (this._chipList && this._chipList.disabled);\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n }\n /** Whether the input is empty. */\n get empty() {\n return !this.inputElement.value;\n }\n ngOnChanges() {\n this._chipList.stateChanges.next();\n }\n ngOnDestroy() {\n this.chipEnd.complete();\n }\n ngAfterContentInit() {\n this._focusLastChipOnBackspace = this.empty;\n }\n /** Utility method to make host definition/tests more clear. */\n _keydown(event) {\n if (event) {\n // Allow the user's focus to escape when they're tabbing forward. Note that we don't\n // want to do this when going backwards, because focus should go back to the first chip.\n if (event.keyCode === TAB && !hasModifierKey(event, 'shiftKey')) {\n this._chipList._allowFocusEscape();\n }\n // To prevent the user from accidentally deleting chips when pressing BACKSPACE continuously,\n // We focus the last chip on backspace only after the user has released the backspace button,\n // and the input is empty (see behaviour in _keyup)\n if (event.keyCode === BACKSPACE && this._focusLastChipOnBackspace) {\n this._chipList._keyManager.setLastItemActive();\n event.preventDefault();\n return;\n }\n else {\n this._focusLastChipOnBackspace = false;\n }\n }\n this._emitChipEnd(event);\n }\n /**\n * Pass events to the keyboard manager. Available here for tests.\n */\n _keyup(event) {\n // Allow user to move focus to chips next time he presses backspace\n if (!this._focusLastChipOnBackspace && event.keyCode === BACKSPACE && this.empty) {\n this._focusLastChipOnBackspace = true;\n event.preventDefault();\n }\n }\n /** Checks to see if the blur should emit the (chipEnd) event. */\n _blur() {\n if (this.addOnBlur) {\n this._emitChipEnd();\n }\n this.focused = false;\n // Blur the chip list if it is not focused\n if (!this._chipList.focused) {\n this._chipList._blur();\n }\n this._chipList.stateChanges.next();\n }\n _focus() {\n this.focused = true;\n this._focusLastChipOnBackspace = this.empty;\n this._chipList.stateChanges.next();\n }\n /** Checks to see if the (chipEnd) event needs to be emitted. */\n _emitChipEnd(event) {\n if (!this.inputElement.value && !!event) {\n this._chipList._keydown(event);\n }\n if (!event || this._isSeparatorKey(event)) {\n this.chipEnd.emit({\n input: this.inputElement,\n value: this.inputElement.value,\n chipInput: this,\n });\n event?.preventDefault();\n }\n }\n _onInput() {\n // Let chip list know whenever the value changes.\n this._chipList.stateChanges.next();\n }\n /** Focuses the input. */\n focus(options) {\n this.inputElement.focus(options);\n }\n /** Clears the input */\n clear() {\n this.inputElement.value = '';\n this._focusLastChipOnBackspace = true;\n }\n /** Checks whether a keycode is one of the configured separators. */\n _isSeparatorKey(event) {\n return !hasModifierKey(event) && new Set(this.separatorKeyCodes).has(event.keyCode);\n }\n}\nMatChipInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipInput, deps: [{ token: i0.ElementRef }, { token: MAT_CHIPS_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Directive });\nMatChipInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatChipInput, selector: \"input[matChipInputFor]\", inputs: { chipList: [\"matChipInputFor\", \"chipList\"], addOnBlur: [\"matChipInputAddOnBlur\", \"addOnBlur\"], separatorKeyCodes: [\"matChipInputSeparatorKeyCodes\", \"separatorKeyCodes\"], placeholder: \"placeholder\", id: \"id\", disabled: \"disabled\" }, outputs: { chipEnd: \"matChipInputTokenEnd\" }, host: { listeners: { \"keydown\": \"_keydown($event)\", \"keyup\": \"_keyup($event)\", \"blur\": \"_blur()\", \"focus\": \"_focus()\", \"input\": \"_onInput()\" }, properties: { \"id\": \"id\", \"attr.disabled\": \"disabled || null\", \"attr.placeholder\": \"placeholder || null\", \"attr.aria-invalid\": \"_chipList && _chipList.ngControl ? _chipList.ngControl.invalid : null\", \"attr.aria-required\": \"_chipList && _chipList.required || null\" }, classAttribute: \"mat-chip-input mat-input-element\" }, exportAs: [\"matChipInput\", \"matChipInputFor\"], usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipInput, decorators: [{\n type: Directive,\n args: [{\n selector: 'input[matChipInputFor]',\n exportAs: 'matChipInput, matChipInputFor',\n host: {\n 'class': 'mat-chip-input mat-input-element',\n '(keydown)': '_keydown($event)',\n '(keyup)': '_keyup($event)',\n '(blur)': '_blur()',\n '(focus)': '_focus()',\n '(input)': '_onInput()',\n '[id]': 'id',\n '[attr.disabled]': 'disabled || null',\n '[attr.placeholder]': 'placeholder || null',\n '[attr.aria-invalid]': '_chipList && _chipList.ngControl ? _chipList.ngControl.invalid : null',\n '[attr.aria-required]': '_chipList && _chipList.required || null',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_CHIPS_DEFAULT_OPTIONS]\n }] }]; }, propDecorators: { chipList: [{\n type: Input,\n args: ['matChipInputFor']\n }], addOnBlur: [{\n type: Input,\n args: ['matChipInputAddOnBlur']\n }], separatorKeyCodes: [{\n type: Input,\n args: ['matChipInputSeparatorKeyCodes']\n }], chipEnd: [{\n type: Output,\n args: ['matChipInputTokenEnd']\n }], placeholder: [{\n type: Input\n }], id: [{\n type: Input\n }], disabled: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst CHIP_DECLARATIONS = [\n MatChipList,\n MatChip,\n MatChipInput,\n MatChipRemove,\n MatChipAvatar,\n MatChipTrailingIcon,\n];\nclass MatChipsModule {\n}\nMatChipsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatChipsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipsModule, declarations: [MatChipList,\n MatChip,\n MatChipInput,\n MatChipRemove,\n MatChipAvatar,\n MatChipTrailingIcon], imports: [MatCommonModule], exports: [MatChipList,\n MatChip,\n MatChipInput,\n MatChipRemove,\n MatChipAvatar,\n MatChipTrailingIcon] });\nMatChipsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipsModule, providers: [\n ErrorStateMatcher,\n {\n provide: MAT_CHIPS_DEFAULT_OPTIONS,\n useValue: {\n separatorKeyCodes: [ENTER],\n },\n },\n ], imports: [MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatChipsModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: CHIP_DECLARATIONS,\n declarations: CHIP_DECLARATIONS,\n providers: [\n ErrorStateMatcher,\n {\n provide: MAT_CHIPS_DEFAULT_OPTIONS,\n useValue: {\n separatorKeyCodes: [ENTER],\n },\n },\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_CHIPS_DEFAULT_OPTIONS, MAT_CHIP_AVATAR, MAT_CHIP_REMOVE, MAT_CHIP_TRAILING_ICON, MatChip, MatChipAvatar, MatChipInput, MatChipList, MatChipListChange, MatChipRemove, MatChipSelectionChange, MatChipTrailingIcon, MatChipsModule };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Input, EventEmitter, Optional, Inject, SkipSelf, Output, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/collections';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject, Subscription } from 'rxjs';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate unique ID for each accordion. */\nlet nextId$1 = 0;\n/**\n * Injection token that can be used to reference instances of `CdkAccordion`. It serves\n * as alternative token to the actual `CdkAccordion` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_ACCORDION = new InjectionToken('CdkAccordion');\n/**\n * Directive whose purpose is to manage the expanded state of CdkAccordionItem children.\n */\nclass CdkAccordion {\n constructor() {\n /** Emits when the state of the accordion changes */\n this._stateChanges = new Subject();\n /** Stream that emits true/false when openAll/closeAll is triggered. */\n this._openCloseAllActions = new Subject();\n /** A readonly id value to use for unique selection coordination. */\n this.id = `cdk-accordion-${nextId$1++}`;\n this._multi = false;\n }\n /** Whether the accordion should allow multiple expanded accordion items simultaneously. */\n get multi() {\n return this._multi;\n }\n set multi(multi) {\n this._multi = coerceBooleanProperty(multi);\n }\n /** Opens all enabled accordion items in an accordion where multi is enabled. */\n openAll() {\n if (this._multi) {\n this._openCloseAllActions.next(true);\n }\n }\n /** Closes all enabled accordion items in an accordion where multi is enabled. */\n closeAll() {\n this._openCloseAllActions.next(false);\n }\n ngOnChanges(changes) {\n this._stateChanges.next(changes);\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n this._openCloseAllActions.complete();\n }\n}\nCdkAccordion.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkAccordion, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nCdkAccordion.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkAccordion, selector: \"cdk-accordion, [cdkAccordion]\", inputs: { multi: \"multi\" }, providers: [{ provide: CDK_ACCORDION, useExisting: CdkAccordion }], exportAs: [\"cdkAccordion\"], usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkAccordion, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-accordion, [cdkAccordion]',\n exportAs: 'cdkAccordion',\n providers: [{ provide: CDK_ACCORDION, useExisting: CdkAccordion }],\n }]\n }], propDecorators: { multi: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate unique ID for each accordion item. */\nlet nextId = 0;\n/**\n * An basic directive expected to be extended and decorated as a component. Sets up all\n * events and attributes needed to be managed by a CdkAccordion parent.\n */\nclass CdkAccordionItem {\n constructor(accordion, _changeDetectorRef, _expansionDispatcher) {\n this.accordion = accordion;\n this._changeDetectorRef = _changeDetectorRef;\n this._expansionDispatcher = _expansionDispatcher;\n /** Subscription to openAll/closeAll events. */\n this._openCloseAllSubscription = Subscription.EMPTY;\n /** Event emitted every time the AccordionItem is closed. */\n this.closed = new EventEmitter();\n /** Event emitted every time the AccordionItem is opened. */\n this.opened = new EventEmitter();\n /** Event emitted when the AccordionItem is destroyed. */\n this.destroyed = new EventEmitter();\n /**\n * Emits whenever the expanded state of the accordion changes.\n * Primarily used to facilitate two-way binding.\n * @docs-private\n */\n this.expandedChange = new EventEmitter();\n /** The unique AccordionItem id. */\n this.id = `cdk-accordion-child-${nextId++}`;\n this._expanded = false;\n this._disabled = false;\n /** Unregister function for _expansionDispatcher. */\n this._removeUniqueSelectionListener = () => { };\n this._removeUniqueSelectionListener = _expansionDispatcher.listen((id, accordionId) => {\n if (this.accordion &&\n !this.accordion.multi &&\n this.accordion.id === accordionId &&\n this.id !== id) {\n this.expanded = false;\n }\n });\n // When an accordion item is hosted in an accordion, subscribe to open/close events.\n if (this.accordion) {\n this._openCloseAllSubscription = this._subscribeToOpenCloseAllActions();\n }\n }\n /** Whether the AccordionItem is expanded. */\n get expanded() {\n return this._expanded;\n }\n set expanded(expanded) {\n expanded = coerceBooleanProperty(expanded);\n // Only emit events and update the internal value if the value changes.\n if (this._expanded !== expanded) {\n this._expanded = expanded;\n this.expandedChange.emit(expanded);\n if (expanded) {\n this.opened.emit();\n /**\n * In the unique selection dispatcher, the id parameter is the id of the CdkAccordionItem,\n * the name value is the id of the accordion.\n */\n const accordionId = this.accordion ? this.accordion.id : this.id;\n this._expansionDispatcher.notify(this.id, accordionId);\n }\n else {\n this.closed.emit();\n }\n // Ensures that the animation will run when the value is set outside of an `@Input`.\n // This includes cases like the open, close and toggle methods.\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Whether the AccordionItem is disabled. */\n get disabled() {\n return this._disabled;\n }\n set disabled(disabled) {\n this._disabled = coerceBooleanProperty(disabled);\n }\n /** Emits an event for the accordion item being destroyed. */\n ngOnDestroy() {\n this.opened.complete();\n this.closed.complete();\n this.destroyed.emit();\n this.destroyed.complete();\n this._removeUniqueSelectionListener();\n this._openCloseAllSubscription.unsubscribe();\n }\n /** Toggles the expanded state of the accordion item. */\n toggle() {\n if (!this.disabled) {\n this.expanded = !this.expanded;\n }\n }\n /** Sets the expanded state of the accordion item to false. */\n close() {\n if (!this.disabled) {\n this.expanded = false;\n }\n }\n /** Sets the expanded state of the accordion item to true. */\n open() {\n if (!this.disabled) {\n this.expanded = true;\n }\n }\n _subscribeToOpenCloseAllActions() {\n return this.accordion._openCloseAllActions.subscribe(expanded => {\n // Only change expanded state if item is enabled\n if (!this.disabled) {\n this.expanded = expanded;\n }\n });\n }\n}\nCdkAccordionItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkAccordionItem, deps: [{ token: CDK_ACCORDION, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }, { token: i1.UniqueSelectionDispatcher }], target: i0.ɵɵFactoryTarget.Directive });\nCdkAccordionItem.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: CdkAccordionItem, selector: \"cdk-accordion-item, [cdkAccordionItem]\", inputs: { expanded: \"expanded\", disabled: \"disabled\" }, outputs: { closed: \"closed\", opened: \"opened\", destroyed: \"destroyed\", expandedChange: \"expandedChange\" }, providers: [\n // Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from\n // registering to the same accordion.\n { provide: CDK_ACCORDION, useValue: undefined },\n ], exportAs: [\"cdkAccordionItem\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkAccordionItem, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-accordion-item, [cdkAccordionItem]',\n exportAs: 'cdkAccordionItem',\n providers: [\n // Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from\n // registering to the same accordion.\n { provide: CDK_ACCORDION, useValue: undefined },\n ],\n }]\n }], ctorParameters: function () { return [{ type: CdkAccordion, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CDK_ACCORDION]\n }, {\n type: SkipSelf\n }] }, { type: i0.ChangeDetectorRef }, { type: i1.UniqueSelectionDispatcher }]; }, propDecorators: { closed: [{\n type: Output\n }], opened: [{\n type: Output\n }], destroyed: [{\n type: Output\n }], expandedChange: [{\n type: Output\n }], expanded: [{\n type: Input\n }], disabled: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkAccordionModule {\n}\nCdkAccordionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkAccordionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCdkAccordionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkAccordionModule, declarations: [CdkAccordion, CdkAccordionItem], exports: [CdkAccordion, CdkAccordionItem] });\nCdkAccordionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkAccordionModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: CdkAccordionModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [CdkAccordion, CdkAccordionItem],\n declarations: [CdkAccordion, CdkAccordionItem],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkAccordion, CdkAccordionItem, CdkAccordionModule };\n","import { CdkAccordionItem, CdkAccordion, CdkAccordionModule } from '@angular/cdk/accordion';\nimport * as i2 from '@angular/cdk/portal';\nimport { TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport * as i3 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Inject, Optional, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, SkipSelf, Input, Output, ContentChild, ViewChild, Host, Attribute, QueryList, ContentChildren, NgModule } from '@angular/core';\nimport { mixinTabIndex, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport * as i2$1 from '@angular/cdk/a11y';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { distinctUntilChanged, startWith, filter, take } from 'rxjs/operators';\nimport { ENTER, hasModifierKey, SPACE } from '@angular/cdk/keycodes';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subject, Subscription, EMPTY, merge } from 'rxjs';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i1 from '@angular/cdk/collections';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Token used to provide a `MatAccordion` to `MatExpansionPanel`.\n * Used primarily to avoid circular imports between `MatAccordion` and `MatExpansionPanel`.\n */\nconst MAT_ACCORDION = new InjectionToken('MAT_ACCORDION');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Time and timing curve for expansion panel animations. */\n// Note: Keep this in sync with the Sass variable for the panel header animation.\nconst EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';\n/**\n * Animations used by the Material expansion panel.\n *\n * A bug in angular animation's `state` when ViewContainers are moved using ViewContainerRef.move()\n * causes the animation state of moved components to become `void` upon exit, and not update again\n * upon reentry into the DOM. This can lead a to situation for the expansion panel where the state\n * of the panel is `expanded` or `collapsed` but the animation state is `void`.\n *\n * To correctly handle animating to the next state, we animate between `void` and `collapsed` which\n * are defined to have the same styles. Since angular animates from the current styles to the\n * destination state's style definition, in situations where we are moving from `void`'s styles to\n * `collapsed` this acts a noop since no style values change.\n *\n * In the case where angular's animation state is out of sync with the expansion panel's state, the\n * expansion panel being `expanded` and angular animations being `void`, the animation from the\n * `expanded`'s effective styles (though in a `void` animation state) to the collapsed state will\n * occur as expected.\n *\n * Angular Bug: https://github.com/angular/angular/issues/18847\n *\n * @docs-private\n */\nconst matExpansionAnimations = {\n /** Animation that rotates the indicator arrow. */\n indicatorRotate: trigger('indicatorRotate', [\n state('collapsed, void', style({ transform: 'rotate(0deg)' })),\n state('expanded', style({ transform: 'rotate(180deg)' })),\n transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n /** Animation that expands and collapses the panel content. */\n bodyExpansion: trigger('bodyExpansion', [\n state('collapsed, void', style({ height: '0px', visibility: 'hidden' })),\n state('expanded', style({ height: '*', visibility: 'visible' })),\n transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Token used to provide a `MatExpansionPanel` to `MatExpansionPanelContent`.\n * Used to avoid circular imports between `MatExpansionPanel` and `MatExpansionPanelContent`.\n */\nconst MAT_EXPANSION_PANEL = new InjectionToken('MAT_EXPANSION_PANEL');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Expansion panel content that will be rendered lazily\n * after the panel is opened for the first time.\n */\nclass MatExpansionPanelContent {\n constructor(_template, _expansionPanel) {\n this._template = _template;\n this._expansionPanel = _expansionPanel;\n }\n}\nMatExpansionPanelContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanelContent, deps: [{ token: i0.TemplateRef }, { token: MAT_EXPANSION_PANEL, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatExpansionPanelContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatExpansionPanelContent, selector: \"ng-template[matExpansionPanelContent]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanelContent, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[matExpansionPanelContent]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL]\n }, {\n type: Optional\n }] }]; } });\n\n/** Counter for generating unique element ids. */\nlet uniqueId = 0;\n/**\n * Injection token that can be used to configure the default\n * options for the expansion panel component.\n */\nconst MAT_EXPANSION_PANEL_DEFAULT_OPTIONS = new InjectionToken('MAT_EXPANSION_PANEL_DEFAULT_OPTIONS');\n/**\n * This component can be used as a single element to show expandable content, or as one of\n * multiple children of an element with the MatAccordion directive attached.\n */\nclass MatExpansionPanel extends CdkAccordionItem {\n constructor(accordion, _changeDetectorRef, _uniqueSelectionDispatcher, _viewContainerRef, _document, _animationMode, defaultOptions) {\n super(accordion, _changeDetectorRef, _uniqueSelectionDispatcher);\n this._viewContainerRef = _viewContainerRef;\n this._animationMode = _animationMode;\n this._hideToggle = false;\n /** An event emitted after the body's expansion animation happens. */\n this.afterExpand = new EventEmitter();\n /** An event emitted after the body's collapse animation happens. */\n this.afterCollapse = new EventEmitter();\n /** Stream that emits for changes in `@Input` properties. */\n this._inputChanges = new Subject();\n /** ID for the associated header element. Used for a11y labelling. */\n this._headerId = `mat-expansion-panel-header-${uniqueId++}`;\n /** Stream of body animation done events. */\n this._bodyAnimationDone = new Subject();\n this.accordion = accordion;\n this._document = _document;\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._bodyAnimationDone\n .pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n }))\n .subscribe(event => {\n if (event.fromState !== 'void') {\n if (event.toState === 'expanded') {\n this.afterExpand.emit();\n }\n else if (event.toState === 'collapsed') {\n this.afterCollapse.emit();\n }\n }\n });\n if (defaultOptions) {\n this.hideToggle = defaultOptions.hideToggle;\n }\n }\n /** Whether the toggle indicator should be hidden. */\n get hideToggle() {\n return this._hideToggle || (this.accordion && this.accordion.hideToggle);\n }\n set hideToggle(value) {\n this._hideToggle = coerceBooleanProperty(value);\n }\n /** The position of the expansion indicator. */\n get togglePosition() {\n return this._togglePosition || (this.accordion && this.accordion.togglePosition);\n }\n set togglePosition(value) {\n this._togglePosition = value;\n }\n /** Determines whether the expansion panel should have spacing between it and its siblings. */\n _hasSpacing() {\n if (this.accordion) {\n return this.expanded && this.accordion.displayMode === 'default';\n }\n return false;\n }\n /** Gets the expanded state string. */\n _getExpandedState() {\n return this.expanded ? 'expanded' : 'collapsed';\n }\n /** Toggles the expanded state of the expansion panel. */\n toggle() {\n this.expanded = !this.expanded;\n }\n /** Sets the expanded state of the expansion panel to false. */\n close() {\n this.expanded = false;\n }\n /** Sets the expanded state of the expansion panel to true. */\n open() {\n this.expanded = true;\n }\n ngAfterContentInit() {\n if (this._lazyContent && this._lazyContent._expansionPanel === this) {\n // Render the content as soon as the panel becomes open.\n this.opened\n .pipe(startWith(null), filter(() => this.expanded && !this._portal), take(1))\n .subscribe(() => {\n this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);\n });\n }\n }\n ngOnChanges(changes) {\n this._inputChanges.next(changes);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._bodyAnimationDone.complete();\n this._inputChanges.complete();\n }\n /** Checks whether the expansion panel's content contains the currently-focused element. */\n _containsFocus() {\n if (this._body) {\n const focusedElement = this._document.activeElement;\n const bodyElement = this._body.nativeElement;\n return focusedElement === bodyElement || bodyElement.contains(focusedElement);\n }\n return false;\n }\n}\nMatExpansionPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanel, deps: [{ token: MAT_ACCORDION, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }, { token: i1.UniqueSelectionDispatcher }, { token: i0.ViewContainerRef }, { token: DOCUMENT }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatExpansionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatExpansionPanel, selector: \"mat-expansion-panel\", inputs: { disabled: \"disabled\", expanded: \"expanded\", hideToggle: \"hideToggle\", togglePosition: \"togglePosition\" }, outputs: { opened: \"opened\", closed: \"closed\", expandedChange: \"expandedChange\", afterExpand: \"afterExpand\", afterCollapse: \"afterCollapse\" }, host: { properties: { \"class.mat-expanded\": \"expanded\", \"class._mat-animation-noopable\": \"_animationMode === \\\"NoopAnimations\\\"\", \"class.mat-expansion-panel-spacing\": \"_hasSpacing()\" }, classAttribute: \"mat-expansion-panel\" }, providers: [\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n { provide: MAT_ACCORDION, useValue: undefined },\n { provide: MAT_EXPANSION_PANEL, useExisting: MatExpansionPanel },\n ], queries: [{ propertyName: \"_lazyContent\", first: true, predicate: MatExpansionPanelContent, descendants: true }], viewQueries: [{ propertyName: \"_body\", first: true, predicate: [\"body\"], descendants: true }], exportAs: [\"matExpansionPanel\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"\\n
\\n
\\n \\n \\n
\\n \\n
\\n\", styles: [\".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;border-radius:4px;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:4px;border-top-left-radius:4px}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible}.mat-expansion-panel-content[style*=\\\"visibility: hidden\\\"] *{visibility:hidden !important}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.mat-action-row .mat-button-base,.mat-action-row .mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row .mat-button-base,[dir=rtl] .mat-action-row .mat-mdc-button-base{margin-left:0;margin-right:8px}\"], dependencies: [{ kind: \"directive\", type: i2.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }], animations: [matExpansionAnimations.bodyExpansion], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanel, decorators: [{\n type: Component,\n args: [{ selector: 'mat-expansion-panel', exportAs: 'matExpansionPanel', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['disabled', 'expanded'], outputs: ['opened', 'closed', 'expandedChange'], animations: [matExpansionAnimations.bodyExpansion], providers: [\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n { provide: MAT_ACCORDION, useValue: undefined },\n { provide: MAT_EXPANSION_PANEL, useExisting: MatExpansionPanel },\n ], host: {\n 'class': 'mat-expansion-panel',\n '[class.mat-expanded]': 'expanded',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[class.mat-expansion-panel-spacing]': '_hasSpacing()',\n }, template: \"\\n
\\n
\\n \\n \\n
\\n \\n
\\n\", styles: [\".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;border-radius:4px;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:4px;border-top-left-radius:4px}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible}.mat-expansion-panel-content[style*=\\\"visibility: hidden\\\"] *{visibility:hidden !important}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.mat-action-row .mat-button-base,.mat-action-row .mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row .mat-button-base,[dir=rtl] .mat-action-row .mat-mdc-button-base{margin-left:0;margin-right:8px}\"] }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }, {\n type: Inject,\n args: [MAT_ACCORDION]\n }] }, { type: i0.ChangeDetectorRef }, { type: i1.UniqueSelectionDispatcher }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]\n }, {\n type: Optional\n }] }]; }, propDecorators: { hideToggle: [{\n type: Input\n }], togglePosition: [{\n type: Input\n }], afterExpand: [{\n type: Output\n }], afterCollapse: [{\n type: Output\n }], _lazyContent: [{\n type: ContentChild,\n args: [MatExpansionPanelContent]\n }], _body: [{\n type: ViewChild,\n args: ['body']\n }] } });\n/**\n * Actions of a ``.\n */\nclass MatExpansionPanelActionRow {\n}\nMatExpansionPanelActionRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanelActionRow, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatExpansionPanelActionRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatExpansionPanelActionRow, selector: \"mat-action-row\", host: { classAttribute: \"mat-action-row\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanelActionRow, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-action-row',\n host: {\n class: 'mat-action-row',\n },\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatExpansionPanelHeader.\n/** @docs-private */\nclass MatExpansionPanelHeaderBase {\n}\nconst _MatExpansionPanelHeaderMixinBase = mixinTabIndex(MatExpansionPanelHeaderBase);\n/**\n * Header element of a ``.\n */\nclass MatExpansionPanelHeader extends _MatExpansionPanelHeaderMixinBase {\n constructor(panel, _element, _focusMonitor, _changeDetectorRef, defaultOptions, _animationMode, tabIndex) {\n super();\n this.panel = panel;\n this._element = _element;\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n this._parentChangeSubscription = Subscription.EMPTY;\n const accordionHideToggleChange = panel.accordion\n ? panel.accordion._stateChanges.pipe(filter(changes => !!(changes['hideToggle'] || changes['togglePosition'])))\n : EMPTY;\n this.tabIndex = parseInt(tabIndex || '') || 0;\n // Since the toggle state depends on an @Input on the panel, we\n // need to subscribe and trigger change detection manually.\n this._parentChangeSubscription = merge(panel.opened, panel.closed, accordionHideToggleChange, panel._inputChanges.pipe(filter(changes => {\n return !!(changes['hideToggle'] || changes['disabled'] || changes['togglePosition']);\n }))).subscribe(() => this._changeDetectorRef.markForCheck());\n // Avoids focus being lost if the panel contained the focused element and was closed.\n panel.closed\n .pipe(filter(() => panel._containsFocus()))\n .subscribe(() => _focusMonitor.focusVia(_element, 'program'));\n if (defaultOptions) {\n this.expandedHeight = defaultOptions.expandedHeight;\n this.collapsedHeight = defaultOptions.collapsedHeight;\n }\n }\n /**\n * Whether the associated panel is disabled. Implemented as a part of `FocusableOption`.\n * @docs-private\n */\n get disabled() {\n return this.panel.disabled;\n }\n /** Toggles the expanded state of the panel. */\n _toggle() {\n if (!this.disabled) {\n this.panel.toggle();\n }\n }\n /** Gets whether the panel is expanded. */\n _isExpanded() {\n return this.panel.expanded;\n }\n /** Gets the expanded state string of the panel. */\n _getExpandedState() {\n return this.panel._getExpandedState();\n }\n /** Gets the panel id. */\n _getPanelId() {\n return this.panel.id;\n }\n /** Gets the toggle position for the header. */\n _getTogglePosition() {\n return this.panel.togglePosition;\n }\n /** Gets whether the expand indicator should be shown. */\n _showToggle() {\n return !this.panel.hideToggle && !this.panel.disabled;\n }\n /**\n * Gets the current height of the header. Null if no custom height has been\n * specified, and if the default height from the stylesheet should be used.\n */\n _getHeaderHeight() {\n const isExpanded = this._isExpanded();\n if (isExpanded && this.expandedHeight) {\n return this.expandedHeight;\n }\n else if (!isExpanded && this.collapsedHeight) {\n return this.collapsedHeight;\n }\n return null;\n }\n /** Handle keydown event calling to toggle() if appropriate. */\n _keydown(event) {\n switch (event.keyCode) {\n // Toggle for space and enter keys.\n case SPACE:\n case ENTER:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this._toggle();\n }\n break;\n default:\n if (this.panel.accordion) {\n this.panel.accordion._handleHeaderKeydown(event);\n }\n return;\n }\n }\n /**\n * Focuses the panel header. Implemented as a part of `FocusableOption`.\n * @param origin Origin of the action that triggered the focus.\n * @docs-private\n */\n focus(origin, options) {\n if (origin) {\n this._focusMonitor.focusVia(this._element, origin, options);\n }\n else {\n this._element.nativeElement.focus(options);\n }\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._element).subscribe(origin => {\n if (origin && this.panel.accordion) {\n this.panel.accordion._handleHeaderFocus(this);\n }\n });\n }\n ngOnDestroy() {\n this._parentChangeSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._element);\n }\n}\nMatExpansionPanelHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanelHeader, deps: [{ token: MatExpansionPanel, host: true }, { token: i0.ElementRef }, { token: i2$1.FocusMonitor }, { token: i0.ChangeDetectorRef }, { token: MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: 'tabindex', attribute: true }], target: i0.ɵɵFactoryTarget.Component });\nMatExpansionPanelHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatExpansionPanelHeader, selector: \"mat-expansion-panel-header\", inputs: { tabIndex: \"tabIndex\", expandedHeight: \"expandedHeight\", collapsedHeight: \"collapsedHeight\" }, host: { attributes: { \"role\": \"button\" }, listeners: { \"click\": \"_toggle()\", \"keydown\": \"_keydown($event)\" }, properties: { \"attr.id\": \"panel._headerId\", \"attr.tabindex\": \"tabIndex\", \"attr.aria-controls\": \"_getPanelId()\", \"attr.aria-expanded\": \"_isExpanded()\", \"attr.aria-disabled\": \"panel.disabled\", \"class.mat-expanded\": \"_isExpanded()\", \"class.mat-expansion-toggle-indicator-after\": \"_getTogglePosition() === 'after'\", \"class.mat-expansion-toggle-indicator-before\": \"_getTogglePosition() === 'before'\", \"class._mat-animation-noopable\": \"_animationMode === \\\"NoopAnimations\\\"\", \"style.height\": \"_getHeaderHeight()\" }, classAttribute: \"mat-expansion-panel-header mat-focus-indicator\" }, usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n \\n\\n\\n\", styles: [\".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-content.mat-content-hide-toggle{margin-right:8px}[dir=rtl] .mat-content.mat-content-hide-toggle{margin-right:0;margin-left:8px}.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-left:24px;margin-right:0}[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-right:24px;margin-left:0}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;flex-basis:0;margin-right:16px;align-items:center}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header-description{flex-grow:2}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\\\"\\\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle}.cdk-high-contrast-active .mat-expansion-panel-content{border-top:1px solid;border-top-left-radius:0;border-top-right-radius:0}\"], dependencies: [{ kind: \"directive\", type: i3.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], animations: [matExpansionAnimations.indicatorRotate], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanelHeader, decorators: [{\n type: Component,\n args: [{ selector: 'mat-expansion-panel-header', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['tabIndex'], animations: [matExpansionAnimations.indicatorRotate], host: {\n 'class': 'mat-expansion-panel-header mat-focus-indicator',\n 'role': 'button',\n '[attr.id]': 'panel._headerId',\n '[attr.tabindex]': 'tabIndex',\n '[attr.aria-controls]': '_getPanelId()',\n '[attr.aria-expanded]': '_isExpanded()',\n '[attr.aria-disabled]': 'panel.disabled',\n '[class.mat-expanded]': '_isExpanded()',\n '[class.mat-expansion-toggle-indicator-after]': `_getTogglePosition() === 'after'`,\n '[class.mat-expansion-toggle-indicator-before]': `_getTogglePosition() === 'before'`,\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[style.height]': '_getHeaderHeight()',\n '(click)': '_toggle()',\n '(keydown)': '_keydown($event)',\n }, template: \"\\n \\n \\n \\n\\n\\n\", styles: [\".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-content.mat-content-hide-toggle{margin-right:8px}[dir=rtl] .mat-content.mat-content-hide-toggle{margin-right:0;margin-left:8px}.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-left:24px;margin-right:0}[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-right:24px;margin-left:0}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;flex-basis:0;margin-right:16px;align-items:center}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header-description{flex-grow:2}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\\\"\\\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle}.cdk-high-contrast-active .mat-expansion-panel-content{border-top:1px solid;border-top-left-radius:0;border-top-right-radius:0}\"] }]\n }], ctorParameters: function () { return [{ type: MatExpansionPanel, decorators: [{\n type: Host\n }] }, { type: i0.ElementRef }, { type: i2$1.FocusMonitor }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }]; }, propDecorators: { expandedHeight: [{\n type: Input\n }], collapsedHeight: [{\n type: Input\n }] } });\n/**\n * Description element of a ``.\n */\nclass MatExpansionPanelDescription {\n}\nMatExpansionPanelDescription.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanelDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatExpansionPanelDescription.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatExpansionPanelDescription, selector: \"mat-panel-description\", host: { classAttribute: \"mat-expansion-panel-header-description\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanelDescription, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-panel-description',\n host: {\n class: 'mat-expansion-panel-header-description',\n },\n }]\n }] });\n/**\n * Title element of a ``.\n */\nclass MatExpansionPanelTitle {\n}\nMatExpansionPanelTitle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanelTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatExpansionPanelTitle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatExpansionPanelTitle, selector: \"mat-panel-title\", host: { classAttribute: \"mat-expansion-panel-header-title\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionPanelTitle, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-panel-title',\n host: {\n class: 'mat-expansion-panel-header-title',\n },\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Directive for a Material Design Accordion.\n */\nclass MatAccordion extends CdkAccordion {\n constructor() {\n super(...arguments);\n /** Headers belonging to this accordion. */\n this._ownHeaders = new QueryList();\n this._hideToggle = false;\n /**\n * Display mode used for all expansion panels in the accordion. Currently two display\n * modes exist:\n * default - a gutter-like spacing is placed around any expanded panel, placing the expanded\n * panel at a different elevation from the rest of the accordion.\n * flat - no spacing is placed around expanded panels, showing all panels at the same\n * elevation.\n */\n this.displayMode = 'default';\n /** The position of the expansion indicator. */\n this.togglePosition = 'after';\n }\n /** Whether the expansion indicator should be hidden. */\n get hideToggle() {\n return this._hideToggle;\n }\n set hideToggle(show) {\n this._hideToggle = coerceBooleanProperty(show);\n }\n ngAfterContentInit() {\n this._headers.changes\n .pipe(startWith(this._headers))\n .subscribe((headers) => {\n this._ownHeaders.reset(headers.filter(header => header.panel.accordion === this));\n this._ownHeaders.notifyOnChanges();\n });\n this._keyManager = new FocusKeyManager(this._ownHeaders).withWrap().withHomeAndEnd();\n }\n /** Handles keyboard events coming in from the panel headers. */\n _handleHeaderKeydown(event) {\n this._keyManager.onKeydown(event);\n }\n _handleHeaderFocus(header) {\n this._keyManager.updateActiveItem(header);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._ownHeaders.destroy();\n }\n}\nMatAccordion.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAccordion, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatAccordion.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatAccordion, selector: \"mat-accordion\", inputs: { multi: \"multi\", hideToggle: \"hideToggle\", displayMode: \"displayMode\", togglePosition: \"togglePosition\" }, host: { properties: { \"class.mat-accordion-multi\": \"this.multi\" }, classAttribute: \"mat-accordion\" }, providers: [\n {\n provide: MAT_ACCORDION,\n useExisting: MatAccordion,\n },\n ], queries: [{ propertyName: \"_headers\", predicate: MatExpansionPanelHeader, descendants: true }], exportAs: [\"matAccordion\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatAccordion, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-accordion',\n exportAs: 'matAccordion',\n inputs: ['multi'],\n providers: [\n {\n provide: MAT_ACCORDION,\n useExisting: MatAccordion,\n },\n ],\n host: {\n class: 'mat-accordion',\n // Class binding which is only used by the test harness as there is no other\n // way for the harness to detect if multiple panel support is enabled.\n '[class.mat-accordion-multi]': 'this.multi',\n },\n }]\n }], propDecorators: { _headers: [{\n type: ContentChildren,\n args: [MatExpansionPanelHeader, { descendants: true }]\n }], hideToggle: [{\n type: Input\n }], displayMode: [{\n type: Input\n }], togglePosition: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatExpansionModule {\n}\nMatExpansionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatExpansionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionModule, declarations: [MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent], imports: [CommonModule, MatCommonModule, CdkAccordionModule, PortalModule], exports: [MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent] });\nMatExpansionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionModule, imports: [CommonModule, MatCommonModule, CdkAccordionModule, PortalModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatExpansionModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule, CdkAccordionModule, PortalModule],\n exports: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ],\n declarations: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { EXPANSION_PANEL_ANIMATION_TIMING, MAT_ACCORDION, MAT_EXPANSION_PANEL, MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, MatAccordion, MatExpansionModule, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelContent, MatExpansionPanelDescription, MatExpansionPanelHeader, MatExpansionPanelTitle, matExpansionAnimations };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, Input, ContentChildren, Directive, NgModule } from '@angular/core';\nimport { setLines, MatLine, MatLineModule, MatCommonModule } from '@angular/material/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport * as i1 from '@angular/cdk/bidi';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Class for determining, from a list of tiles, the (row, col) position of each of those tiles\n * in the grid. This is necessary (rather than just rendering the tiles in normal document flow)\n * because the tiles can have a rowspan.\n *\n * The positioning algorithm greedily places each tile as soon as it encounters a gap in the grid\n * large enough to accommodate it so that the tiles still render in the same order in which they\n * are given.\n *\n * The basis of the algorithm is the use of an array to track the already placed tiles. Each\n * element of the array corresponds to a column, and the value indicates how many cells in that\n * column are already occupied; zero indicates an empty cell. Moving \"down\" to the next row\n * decrements each value in the tracking array (indicating that the column is one cell closer to\n * being free).\n *\n * @docs-private\n */\nclass TileCoordinator {\n constructor() {\n /** Index at which the search for the next gap will start. */\n this.columnIndex = 0;\n /** The current row index. */\n this.rowIndex = 0;\n }\n /** Gets the total number of rows occupied by tiles */\n get rowCount() {\n return this.rowIndex + 1;\n }\n /**\n * Gets the total span of rows occupied by tiles.\n * Ex: A list with 1 row that contains a tile with rowspan 2 will have a total rowspan of 2.\n */\n get rowspan() {\n const lastRowMax = Math.max(...this.tracker);\n // if any of the tiles has a rowspan that pushes it beyond the total row count,\n // add the difference to the rowcount\n return lastRowMax > 1 ? this.rowCount + lastRowMax - 1 : this.rowCount;\n }\n /**\n * Updates the tile positions.\n * @param numColumns Amount of columns in the grid.\n * @param tiles Tiles to be positioned.\n */\n update(numColumns, tiles) {\n this.columnIndex = 0;\n this.rowIndex = 0;\n this.tracker = new Array(numColumns);\n this.tracker.fill(0, 0, this.tracker.length);\n this.positions = tiles.map(tile => this._trackTile(tile));\n }\n /** Calculates the row and col position of a tile. */\n _trackTile(tile) {\n // Find a gap large enough for this tile.\n const gapStartIndex = this._findMatchingGap(tile.colspan);\n // Place tile in the resulting gap.\n this._markTilePosition(gapStartIndex, tile);\n // The next time we look for a gap, the search will start at columnIndex, which should be\n // immediately after the tile that has just been placed.\n this.columnIndex = gapStartIndex + tile.colspan;\n return new TilePosition(this.rowIndex, gapStartIndex);\n }\n /** Finds the next available space large enough to fit the tile. */\n _findMatchingGap(tileCols) {\n if (tileCols > this.tracker.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`mat-grid-list: tile with colspan ${tileCols} is wider than ` +\n `grid with cols=\"${this.tracker.length}\".`);\n }\n // Start index is inclusive, end index is exclusive.\n let gapStartIndex = -1;\n let gapEndIndex = -1;\n // Look for a gap large enough to fit the given tile. Empty spaces are marked with a zero.\n do {\n // If we've reached the end of the row, go to the next row.\n if (this.columnIndex + tileCols > this.tracker.length) {\n this._nextRow();\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n continue;\n }\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n // If there are no more empty spaces in this row at all, move on to the next row.\n if (gapStartIndex == -1) {\n this._nextRow();\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n continue;\n }\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n // If a gap large enough isn't found, we want to start looking immediately after the current\n // gap on the next iteration.\n this.columnIndex = gapStartIndex + 1;\n // Continue iterating until we find a gap wide enough for this tile. Since gapEndIndex is\n // exclusive, gapEndIndex is 0 means we didn't find a gap and should continue.\n } while (gapEndIndex - gapStartIndex < tileCols || gapEndIndex == 0);\n // If we still didn't manage to find a gap, ensure that the index is\n // at least zero so the tile doesn't get pulled out of the grid.\n return Math.max(gapStartIndex, 0);\n }\n /** Move \"down\" to the next row. */\n _nextRow() {\n this.columnIndex = 0;\n this.rowIndex++;\n // Decrement all spaces by one to reflect moving down one row.\n for (let i = 0; i < this.tracker.length; i++) {\n this.tracker[i] = Math.max(0, this.tracker[i] - 1);\n }\n }\n /**\n * Finds the end index (exclusive) of a gap given the index from which to start looking.\n * The gap ends when a non-zero value is found.\n */\n _findGapEndIndex(gapStartIndex) {\n for (let i = gapStartIndex + 1; i < this.tracker.length; i++) {\n if (this.tracker[i] != 0) {\n return i;\n }\n }\n // The gap ends with the end of the row.\n return this.tracker.length;\n }\n /** Update the tile tracker to account for the given tile in the given space. */\n _markTilePosition(start, tile) {\n for (let i = 0; i < tile.colspan; i++) {\n this.tracker[start + i] = tile.rowspan;\n }\n }\n}\n/**\n * Simple data structure for tile position (row, col).\n * @docs-private\n */\nclass TilePosition {\n constructor(row, col) {\n this.row = row;\n this.col = col;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token used to provide a grid list to a tile and to avoid circular imports.\n * @docs-private\n */\nconst MAT_GRID_LIST = new InjectionToken('MAT_GRID_LIST');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatGridTile {\n constructor(_element, _gridList) {\n this._element = _element;\n this._gridList = _gridList;\n this._rowspan = 1;\n this._colspan = 1;\n }\n /** Amount of rows that the grid tile takes up. */\n get rowspan() {\n return this._rowspan;\n }\n set rowspan(value) {\n this._rowspan = Math.round(coerceNumberProperty(value));\n }\n /** Amount of columns that the grid tile takes up. */\n get colspan() {\n return this._colspan;\n }\n set colspan(value) {\n this._colspan = Math.round(coerceNumberProperty(value));\n }\n /**\n * Sets the style of the grid-tile element. Needs to be set manually to avoid\n * \"Changed after checked\" errors that would occur with HostBinding.\n */\n _setStyle(property, value) {\n this._element.nativeElement.style[property] = value;\n }\n}\nMatGridTile.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTile, deps: [{ token: i0.ElementRef }, { token: MAT_GRID_LIST, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatGridTile.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridTile, selector: \"mat-grid-tile\", inputs: { rowspan: \"rowspan\", colspan: \"colspan\" }, host: { properties: { \"attr.rowspan\": \"rowspan\", \"attr.colspan\": \"colspan\" }, classAttribute: \"mat-grid-tile\" }, exportAs: [\"matGridTile\"], ngImport: i0, template: \"
\\n \\n
\\n\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTile, decorators: [{\n type: Component,\n args: [{ selector: 'mat-grid-tile', exportAs: 'matGridTile', host: {\n 'class': 'mat-grid-tile',\n // Ensures that the \"rowspan\" and \"colspan\" input value is reflected in\n // the DOM. This is needed for the grid-tile harness.\n '[attr.rowspan]': 'rowspan',\n '[attr.colspan]': 'colspan',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"
\\n \\n
\\n\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_GRID_LIST]\n }] }]; }, propDecorators: { rowspan: [{\n type: Input\n }], colspan: [{\n type: Input\n }] } });\nclass MatGridTileText {\n constructor(_element) {\n this._element = _element;\n }\n ngAfterContentInit() {\n setLines(this._lines, this._element);\n }\n}\nMatGridTileText.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileText, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nMatGridTileText.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridTileText, selector: \"mat-grid-tile-header, mat-grid-tile-footer\", queries: [{ propertyName: \"_lines\", predicate: MatLine, descendants: true }], ngImport: i0, template: \"\\n
\\n\\n\", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileText, decorators: [{\n type: Component,\n args: [{ selector: 'mat-grid-tile-header, mat-grid-tile-footer', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"\\n
\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { _lines: [{\n type: ContentChildren,\n args: [MatLine, { descendants: true }]\n }] } });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatGridAvatarCssMatStyler {\n}\nMatGridAvatarCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridAvatarCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatGridAvatarCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridAvatarCssMatStyler, selector: \"[mat-grid-avatar], [matGridAvatar]\", host: { classAttribute: \"mat-grid-avatar\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridAvatarCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-grid-avatar], [matGridAvatar]',\n host: { 'class': 'mat-grid-avatar' },\n }]\n }] });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatGridTileHeaderCssMatStyler {\n}\nMatGridTileHeaderCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileHeaderCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatGridTileHeaderCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridTileHeaderCssMatStyler, selector: \"mat-grid-tile-header\", host: { classAttribute: \"mat-grid-tile-header\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileHeaderCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-grid-tile-header',\n host: { 'class': 'mat-grid-tile-header' },\n }]\n }] });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatGridTileFooterCssMatStyler {\n}\nMatGridTileFooterCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileFooterCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatGridTileFooterCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridTileFooterCssMatStyler, selector: \"mat-grid-tile-footer\", host: { classAttribute: \"mat-grid-tile-footer\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridTileFooterCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-grid-tile-footer',\n host: { 'class': 'mat-grid-tile-footer' },\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * RegExp that can be used to check whether a value will\n * be allowed inside a CSS `calc()` expression.\n */\nconst cssCalcAllowedValue = /^-?\\d+((\\.\\d+)?[A-Za-z%$]?)+$/;\n/**\n * Sets the style properties for an individual tile, given the position calculated by the\n * Tile Coordinator.\n * @docs-private\n */\nclass TileStyler {\n constructor() {\n this._rows = 0;\n this._rowspan = 0;\n }\n /**\n * Adds grid-list layout info once it is available. Cannot be processed in the constructor\n * because these properties haven't been calculated by that point.\n *\n * @param gutterSize Size of the grid's gutter.\n * @param tracker Instance of the TileCoordinator.\n * @param cols Amount of columns in the grid.\n * @param direction Layout direction of the grid.\n */\n init(gutterSize, tracker, cols, direction) {\n this._gutterSize = normalizeUnits(gutterSize);\n this._rows = tracker.rowCount;\n this._rowspan = tracker.rowspan;\n this._cols = cols;\n this._direction = direction;\n }\n /**\n * Computes the amount of space a single 1x1 tile would take up (width or height).\n * Used as a basis for other calculations.\n * @param sizePercent Percent of the total grid-list space that one 1x1 tile would take up.\n * @param gutterFraction Fraction of the gutter size taken up by one 1x1 tile.\n * @return The size of a 1x1 tile as an expression that can be evaluated via CSS calc().\n */\n getBaseTileSize(sizePercent, gutterFraction) {\n // Take the base size percent (as would be if evenly dividing the size between cells),\n // and then subtracting the size of one gutter. However, since there are no gutters on the\n // edges, each tile only uses a fraction (gutterShare = numGutters / numCells) of the gutter\n // size. (Imagine having one gutter per tile, and then breaking up the extra gutter on the\n // edge evenly among the cells).\n return `(${sizePercent}% - (${this._gutterSize} * ${gutterFraction}))`;\n }\n /**\n * Gets The horizontal or vertical position of a tile, e.g., the 'top' or 'left' property value.\n * @param offset Number of tiles that have already been rendered in the row/column.\n * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n * @return Position of the tile as a CSS calc() expression.\n */\n getTilePosition(baseSize, offset) {\n // The position comes the size of a 1x1 tile plus gutter for each previous tile in the\n // row/column (offset).\n return offset === 0 ? '0' : calc(`(${baseSize} + ${this._gutterSize}) * ${offset}`);\n }\n /**\n * Gets the actual size of a tile, e.g., width or height, taking rowspan or colspan into account.\n * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n * @param span The tile's rowspan or colspan.\n * @return Size of the tile as a CSS calc() expression.\n */\n getTileSize(baseSize, span) {\n return `(${baseSize} * ${span}) + (${span - 1} * ${this._gutterSize})`;\n }\n /**\n * Sets the style properties to be applied to a tile for the given row and column index.\n * @param tile Tile to which to apply the styling.\n * @param rowIndex Index of the tile's row.\n * @param colIndex Index of the tile's column.\n */\n setStyle(tile, rowIndex, colIndex) {\n // Percent of the available horizontal space that one column takes up.\n let percentWidthPerTile = 100 / this._cols;\n // Fraction of the vertical gutter size that each column takes up.\n // For example, if there are 5 columns, each column uses 4/5 = 0.8 times the gutter width.\n let gutterWidthFractionPerTile = (this._cols - 1) / this._cols;\n this.setColStyles(tile, colIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n this.setRowStyles(tile, rowIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n }\n /** Sets the horizontal placement of the tile in the list. */\n setColStyles(tile, colIndex, percentWidth, gutterWidth) {\n // Base horizontal size of a column.\n let baseTileWidth = this.getBaseTileSize(percentWidth, gutterWidth);\n // The width and horizontal position of each tile is always calculated the same way, but the\n // height and vertical position depends on the rowMode.\n let side = this._direction === 'rtl' ? 'right' : 'left';\n tile._setStyle(side, this.getTilePosition(baseTileWidth, colIndex));\n tile._setStyle('width', calc(this.getTileSize(baseTileWidth, tile.colspan)));\n }\n /**\n * Calculates the total size taken up by gutters across one axis of a list.\n */\n getGutterSpan() {\n return `${this._gutterSize} * (${this._rowspan} - 1)`;\n }\n /**\n * Calculates the total size taken up by tiles across one axis of a list.\n * @param tileHeight Height of the tile.\n */\n getTileSpan(tileHeight) {\n return `${this._rowspan} * ${this.getTileSize(tileHeight, 1)}`;\n }\n /**\n * Calculates the computed height and returns the correct style property to set.\n * This method can be implemented by each type of TileStyler.\n * @docs-private\n */\n getComputedHeight() {\n return null;\n }\n}\n/**\n * This type of styler is instantiated when the user passes in a fixed row height.\n * Example ``\n * @docs-private\n */\nclass FixedTileStyler extends TileStyler {\n constructor(fixedRowHeight) {\n super();\n this.fixedRowHeight = fixedRowHeight;\n }\n init(gutterSize, tracker, cols, direction) {\n super.init(gutterSize, tracker, cols, direction);\n this.fixedRowHeight = normalizeUnits(this.fixedRowHeight);\n if (!cssCalcAllowedValue.test(this.fixedRowHeight) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`Invalid value \"${this.fixedRowHeight}\" set as rowHeight.`);\n }\n }\n setRowStyles(tile, rowIndex) {\n tile._setStyle('top', this.getTilePosition(this.fixedRowHeight, rowIndex));\n tile._setStyle('height', calc(this.getTileSize(this.fixedRowHeight, tile.rowspan)));\n }\n getComputedHeight() {\n return ['height', calc(`${this.getTileSpan(this.fixedRowHeight)} + ${this.getGutterSpan()}`)];\n }\n reset(list) {\n list._setListStyle(['height', null]);\n if (list._tiles) {\n list._tiles.forEach(tile => {\n tile._setStyle('top', null);\n tile._setStyle('height', null);\n });\n }\n }\n}\n/**\n * This type of styler is instantiated when the user passes in a width:height ratio\n * for the row height. Example ``\n * @docs-private\n */\nclass RatioTileStyler extends TileStyler {\n constructor(value) {\n super();\n this._parseRatio(value);\n }\n setRowStyles(tile, rowIndex, percentWidth, gutterWidth) {\n let percentHeightPerTile = percentWidth / this.rowHeightRatio;\n this.baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterWidth);\n // Use padding-top and margin-top to maintain the given aspect ratio, as\n // a percentage-based value for these properties is applied versus the *width* of the\n // containing block. See http://www.w3.org/TR/CSS2/box.html#margin-properties\n tile._setStyle('marginTop', this.getTilePosition(this.baseTileHeight, rowIndex));\n tile._setStyle('paddingTop', calc(this.getTileSize(this.baseTileHeight, tile.rowspan)));\n }\n getComputedHeight() {\n return [\n 'paddingBottom',\n calc(`${this.getTileSpan(this.baseTileHeight)} + ${this.getGutterSpan()}`),\n ];\n }\n reset(list) {\n list._setListStyle(['paddingBottom', null]);\n list._tiles.forEach(tile => {\n tile._setStyle('marginTop', null);\n tile._setStyle('paddingTop', null);\n });\n }\n _parseRatio(value) {\n const ratioParts = value.split(':');\n if (ratioParts.length !== 2 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`mat-grid-list: invalid ratio given for row-height: \"${value}\"`);\n }\n this.rowHeightRatio = parseFloat(ratioParts[0]) / parseFloat(ratioParts[1]);\n }\n}\n/**\n * This type of styler is instantiated when the user selects a \"fit\" row height mode.\n * In other words, the row height will reflect the total height of the container divided\n * by the number of rows. Example ``\n *\n * @docs-private\n */\nclass FitTileStyler extends TileStyler {\n setRowStyles(tile, rowIndex) {\n // Percent of the available vertical space that one row takes up.\n let percentHeightPerTile = 100 / this._rowspan;\n // Fraction of the horizontal gutter size that each column takes up.\n let gutterHeightPerTile = (this._rows - 1) / this._rows;\n // Base vertical size of a column.\n let baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterHeightPerTile);\n tile._setStyle('top', this.getTilePosition(baseTileHeight, rowIndex));\n tile._setStyle('height', calc(this.getTileSize(baseTileHeight, tile.rowspan)));\n }\n reset(list) {\n if (list._tiles) {\n list._tiles.forEach(tile => {\n tile._setStyle('top', null);\n tile._setStyle('height', null);\n });\n }\n }\n}\n/** Wraps a CSS string in a calc function */\nfunction calc(exp) {\n return `calc(${exp})`;\n}\n/** Appends pixels to a CSS string if no units are given. */\nfunction normalizeUnits(value) {\n return value.match(/([A-Za-z%]+)$/) ? value : `${value}px`;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// TODO(kara): Conditional (responsive) column count / row size.\n// TODO(kara): Re-layout on window resize / media change (debounced).\n// TODO(kara): gridTileHeader and gridTileFooter.\nconst MAT_FIT_MODE = 'fit';\nclass MatGridList {\n constructor(_element, _dir) {\n this._element = _element;\n this._dir = _dir;\n /** The amount of space between tiles. This will be something like '5px' or '2em'. */\n this._gutter = '1px';\n }\n /** Amount of columns in the grid list. */\n get cols() {\n return this._cols;\n }\n set cols(value) {\n this._cols = Math.max(1, Math.round(coerceNumberProperty(value)));\n }\n /** Size of the grid list's gutter in pixels. */\n get gutterSize() {\n return this._gutter;\n }\n set gutterSize(value) {\n this._gutter = `${value == null ? '' : value}`;\n }\n /** Set internal representation of row height from the user-provided value. */\n get rowHeight() {\n return this._rowHeight;\n }\n set rowHeight(value) {\n const newValue = `${value == null ? '' : value}`;\n if (newValue !== this._rowHeight) {\n this._rowHeight = newValue;\n this._setTileStyler(this._rowHeight);\n }\n }\n ngOnInit() {\n this._checkCols();\n this._checkRowHeight();\n }\n /**\n * The layout calculation is fairly cheap if nothing changes, so there's little cost\n * to run it frequently.\n */\n ngAfterContentChecked() {\n this._layoutTiles();\n }\n /** Throw a friendly error if cols property is missing */\n _checkCols() {\n if (!this.cols && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`mat-grid-list: must pass in number of columns. ` + `Example: `);\n }\n }\n /** Default to equal width:height if rowHeight property is missing */\n _checkRowHeight() {\n if (!this._rowHeight) {\n this._setTileStyler('1:1');\n }\n }\n /** Creates correct Tile Styler subtype based on rowHeight passed in by user */\n _setTileStyler(rowHeight) {\n if (this._tileStyler) {\n this._tileStyler.reset(this);\n }\n if (rowHeight === MAT_FIT_MODE) {\n this._tileStyler = new FitTileStyler();\n }\n else if (rowHeight && rowHeight.indexOf(':') > -1) {\n this._tileStyler = new RatioTileStyler(rowHeight);\n }\n else {\n this._tileStyler = new FixedTileStyler(rowHeight);\n }\n }\n /** Computes and applies the size and position for all children grid tiles. */\n _layoutTiles() {\n if (!this._tileCoordinator) {\n this._tileCoordinator = new TileCoordinator();\n }\n const tracker = this._tileCoordinator;\n const tiles = this._tiles.filter(tile => !tile._gridList || tile._gridList === this);\n const direction = this._dir ? this._dir.value : 'ltr';\n this._tileCoordinator.update(this.cols, tiles);\n this._tileStyler.init(this.gutterSize, tracker, this.cols, direction);\n tiles.forEach((tile, index) => {\n const pos = tracker.positions[index];\n this._tileStyler.setStyle(tile, pos.row, pos.col);\n });\n this._setListStyle(this._tileStyler.getComputedHeight());\n }\n /** Sets style on the main grid-list element, given the style name and value. */\n _setListStyle(style) {\n if (style) {\n this._element.nativeElement.style[style[0]] = style[1];\n }\n }\n}\nMatGridList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridList, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatGridList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatGridList, selector: \"mat-grid-list\", inputs: { cols: \"cols\", gutterSize: \"gutterSize\", rowHeight: \"rowHeight\" }, host: { properties: { \"attr.cols\": \"cols\" }, classAttribute: \"mat-grid-list\" }, providers: [\n {\n provide: MAT_GRID_LIST,\n useExisting: MatGridList,\n },\n ], queries: [{ propertyName: \"_tiles\", predicate: MatGridTile, descendants: true }], exportAs: [\"matGridList\"], ngImport: i0, template: \"
\\n \\n
\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridList, decorators: [{\n type: Component,\n args: [{ selector: 'mat-grid-list', exportAs: 'matGridList', host: {\n 'class': 'mat-grid-list',\n // Ensures that the \"cols\" input value is reflected in the DOM. This is\n // needed for the grid-list harness.\n '[attr.cols]': 'cols',\n }, providers: [\n {\n provide: MAT_GRID_LIST,\n useExisting: MatGridList,\n },\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\n \\n
\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { _tiles: [{\n type: ContentChildren,\n args: [MatGridTile, { descendants: true }]\n }], cols: [{\n type: Input\n }], gutterSize: [{\n type: Input\n }], rowHeight: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatGridListModule {\n}\nMatGridListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatGridListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridListModule, declarations: [MatGridList,\n MatGridTile,\n MatGridTileText,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler], imports: [MatLineModule, MatCommonModule], exports: [MatGridList,\n MatGridTile,\n MatGridTileText,\n MatLineModule,\n MatCommonModule,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler] });\nMatGridListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridListModule, imports: [MatLineModule, MatCommonModule, MatLineModule,\n MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatGridListModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatLineModule, MatCommonModule],\n exports: [\n MatGridList,\n MatGridTile,\n MatGridTileText,\n MatLineModule,\n MatCommonModule,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler,\n ],\n declarations: [\n MatGridList,\n MatGridTile,\n MatGridTileText,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler,\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Privately exported for the grid-list harness.\nconst ɵTileCoordinator = TileCoordinator;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatGridAvatarCssMatStyler, MatGridList, MatGridListModule, MatGridTile, MatGridTileFooterCssMatStyler, MatGridTileHeaderCssMatStyler, MatGridTileText, ɵTileCoordinator };\n","import * as i8 from '@angular/cdk/overlay';\nimport { Overlay, CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';\nimport * as i7 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, EventEmitter, Optional, Inject, Self, Attribute, Input, ViewChild, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport * as i2 from '@angular/material/core';\nimport { mixinDisableRipple, mixinTabIndex, mixinDisabled, mixinErrorState, _countGroupLabelsBeforeOption, _getOptionScrollPosition, MAT_OPTION_PARENT_COMPONENT, MatOption, MAT_OPTGROUP, MatOptionModule, MatCommonModule } from '@angular/material/core';\nimport * as i6 from '@angular/material/form-field';\nimport { MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nimport * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i5 from '@angular/cdk/a11y';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport * as i3 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW, ENTER, SPACE, hasModifierKey, A } from '@angular/cdk/keycodes';\nimport * as i4 from '@angular/forms';\nimport { Validators } from '@angular/forms';\nimport { Subject, defer, merge } from 'rxjs';\nimport { startWith, switchMap, take, filter, map, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { trigger, transition, query, animateChild, state, style, animate } from '@angular/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The following are all the animations for the mat-select component, with each\n * const containing the metadata for one animation.\n *\n * The values below match the implementation of the AngularJS Material mat-select animation.\n * @docs-private\n */\nconst matSelectAnimations = {\n /**\n * This animation ensures the select's overlay panel animation (transformPanel) is called when\n * closing the select.\n * This is needed due to https://github.com/angular/angular/issues/23302\n */\n transformPanelWrap: trigger('transformPanelWrap', [\n transition('* => void', query('@transformPanel', [animateChild()], { optional: true })),\n ]),\n /**\n * This animation transforms the select's overlay panel on and off the page.\n *\n * When the panel is attached to the DOM, it expands its width by the amount of padding, scales it\n * up to 100% on the Y axis, fades in its border, and translates slightly up and to the\n * side to ensure the option text correctly overlaps the trigger text.\n *\n * When the panel is removed from the DOM, it simply fades out linearly.\n */\n transformPanel: trigger('transformPanel', [\n state('void', style({\n transform: 'scaleY(0.8)',\n minWidth: '100%',\n opacity: 0,\n })),\n state('showing', style({\n opacity: 1,\n minWidth: 'calc(100% + 32px)',\n transform: 'scaleY(1)',\n })),\n state('showing-multiple', style({\n opacity: 1,\n minWidth: 'calc(100% + 64px)',\n transform: 'scaleY(1)',\n })),\n transition('void => *', animate('120ms cubic-bezier(0, 0, 0.2, 1)')),\n transition('* => void', animate('100ms 25ms linear', style({ opacity: 0 }))),\n ]),\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\n * after initialization.\n * @docs-private\n */\nfunction getMatSelectDynamicMultipleError() {\n return Error('Cannot change `multiple` mode of select after initialization.');\n}\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n * @docs-private\n */\nfunction getMatSelectNonArrayValueError() {\n return Error('Value must be an array in multiple-selection mode.');\n}\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n */\nfunction getMatSelectNonFunctionValueError() {\n return Error('`compareWith` must be a function.');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet nextUniqueId = 0;\n/**\n * The following style constants are necessary to save here in order\n * to properly calculate the alignment of the selected option over\n * the trigger element.\n */\n/** The max height of the select's overlay panel. */\nconst SELECT_PANEL_MAX_HEIGHT = 256;\n/** The panel's padding on the x-axis. */\nconst SELECT_PANEL_PADDING_X = 16;\n/** The panel's x axis padding if it is indented (e.g. there is an option group). */\nconst SELECT_PANEL_INDENT_PADDING_X = SELECT_PANEL_PADDING_X * 2;\n/** The height of the select items in `em` units. */\nconst SELECT_ITEM_HEIGHT_EM = 3;\n// TODO(josephperrott): Revert to a constant after 2018 spec updates are fully merged.\n/**\n * Distance between the panel edge and the option text in\n * multi-selection mode.\n *\n * Calculated as:\n * (SELECT_PANEL_PADDING_X * 1.5) + 16 = 40\n * The padding is multiplied by 1.5 because the checkbox's margin is half the padding.\n * The checkbox width is 16px.\n */\nconst SELECT_MULTIPLE_PANEL_PADDING_X = SELECT_PANEL_PADDING_X * 1.5 + 16;\n/**\n * The select panel will only \"fit\" inside the viewport if it is positioned at\n * this value or more away from the viewport boundary.\n */\nconst SELECT_PANEL_VIEWPORT_PADDING = 8;\n/** Injection token that determines the scroll handling while a select is open. */\nconst MAT_SELECT_SCROLL_STRATEGY = new InjectionToken('mat-select-scroll-strategy');\n/** @docs-private */\nfunction MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** Injection token that can be used to provide the default options the select module. */\nconst MAT_SELECT_CONFIG = new InjectionToken('MAT_SELECT_CONFIG');\n/** @docs-private */\nconst MAT_SELECT_SCROLL_STRATEGY_PROVIDER = {\n provide: MAT_SELECT_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n/** Change event object that is emitted when the select value has changed. */\nclass MatSelectChange {\n constructor(\n /** Reference to the select that emitted the change event. */\n source, \n /** Current value of the select that emitted the event. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\n// Boilerplate for applying mixins to MatSelect.\n/** @docs-private */\nconst _MatSelectMixinBase = mixinDisableRipple(mixinTabIndex(mixinDisabled(mixinErrorState(class {\n constructor(_elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, \n /**\n * Form control bound to the component.\n * Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n ngControl) {\n this._elementRef = _elementRef;\n this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n this._parentForm = _parentForm;\n this._parentFormGroup = _parentFormGroup;\n this.ngControl = ngControl;\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n this.stateChanges = new Subject();\n }\n}))));\n/**\n * Injection token that can be used to reference instances of `MatSelectTrigger`. It serves as\n * alternative token to the actual `MatSelectTrigger` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_SELECT_TRIGGER = new InjectionToken('MatSelectTrigger');\n/**\n * Allows the user to customize the trigger that is displayed when the select has a value.\n */\nclass MatSelectTrigger {\n}\nMatSelectTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSelectTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatSelectTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatSelectTrigger, selector: \"mat-select-trigger\", providers: [{ provide: MAT_SELECT_TRIGGER, useExisting: MatSelectTrigger }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSelectTrigger, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-select-trigger',\n providers: [{ provide: MAT_SELECT_TRIGGER, useExisting: MatSelectTrigger }],\n }]\n }] });\n/** Base class with all of the `MatSelect` functionality. */\nclass _MatSelectBase extends _MatSelectMixinBase {\n constructor(_viewportRuler, _changeDetectorRef, _ngZone, _defaultErrorStateMatcher, elementRef, _dir, _parentForm, _parentFormGroup, _parentFormField, ngControl, tabIndex, scrollStrategyFactory, _liveAnnouncer, _defaultOptions) {\n super(elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n this._viewportRuler = _viewportRuler;\n this._changeDetectorRef = _changeDetectorRef;\n this._ngZone = _ngZone;\n this._dir = _dir;\n this._parentFormField = _parentFormField;\n this._liveAnnouncer = _liveAnnouncer;\n this._defaultOptions = _defaultOptions;\n /** Whether or not the overlay panel is open. */\n this._panelOpen = false;\n /** Comparison function to specify which option is displayed. Defaults to object equality. */\n this._compareWith = (o1, o2) => o1 === o2;\n /** Unique id for this input. */\n this._uid = `mat-select-${nextUniqueId++}`;\n /** Current `aria-labelledby` value for the select trigger. */\n this._triggerAriaLabelledBy = null;\n /** Emits whenever the component is destroyed. */\n this._destroy = new Subject();\n /** `View -> model callback called when value changes` */\n this._onChange = () => { };\n /** `View -> model callback called when select has been touched` */\n this._onTouched = () => { };\n /** ID for the DOM node containing the select's value. */\n this._valueId = `mat-select-value-${nextUniqueId++}`;\n /** Emits when the panel element is finished transforming in. */\n this._panelDoneAnimatingStream = new Subject();\n this._overlayPanelClass = this._defaultOptions?.overlayPanelClass || '';\n this._focused = false;\n /** A name for this control that can be used by `mat-form-field`. */\n this.controlType = 'mat-select';\n this._multiple = false;\n this._disableOptionCentering = this._defaultOptions?.disableOptionCentering ?? false;\n /** Aria label of the select. */\n this.ariaLabel = '';\n /** Combined stream of all of the child options' change events. */\n this.optionSelectionChanges = defer(() => {\n const options = this.options;\n if (options) {\n return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map(option => option.onSelectionChange))));\n }\n return this._ngZone.onStable.pipe(take(1), switchMap(() => this.optionSelectionChanges));\n });\n /** Event emitted when the select panel has been toggled. */\n this.openedChange = new EventEmitter();\n /** Event emitted when the select has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => { }));\n /** Event emitted when the select has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));\n /** Event emitted when the selected value has been changed by the user. */\n this.selectionChange = new EventEmitter();\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n this.valueChange = new EventEmitter();\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n // Note that we only want to set this when the defaults pass it in, otherwise it should\n // stay as `undefined` so that it falls back to the default in the key manager.\n if (_defaultOptions?.typeaheadDebounceInterval != null) {\n this._typeaheadDebounceInterval = _defaultOptions.typeaheadDebounceInterval;\n }\n this._scrollStrategyFactory = scrollStrategyFactory;\n this._scrollStrategy = this._scrollStrategyFactory();\n this.tabIndex = parseInt(tabIndex) || 0;\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n }\n /** Whether the select is focused. */\n get focused() {\n return this._focused || this._panelOpen;\n }\n /** Placeholder to be shown if no value has been selected. */\n get placeholder() {\n return this._placeholder;\n }\n set placeholder(value) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n /** Whether the component is required. */\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n /** Whether the user should be allowed to select multiple options. */\n get multiple() {\n return this._multiple;\n }\n set multiple(value) {\n if (this._selectionModel && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectDynamicMultipleError();\n }\n this._multiple = coerceBooleanProperty(value);\n }\n /** Whether to center the active option over the trigger. */\n get disableOptionCentering() {\n return this._disableOptionCentering;\n }\n set disableOptionCentering(value) {\n this._disableOptionCentering = coerceBooleanProperty(value);\n }\n /**\n * Function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n get compareWith() {\n return this._compareWith;\n }\n set compareWith(fn) {\n if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectNonFunctionValueError();\n }\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n /** Value of the select control. */\n get value() {\n return this._value;\n }\n set value(newValue) {\n const hasAssigned = this._assignValue(newValue);\n if (hasAssigned) {\n this._onChange(newValue);\n }\n }\n /** Time to wait in milliseconds after the last keystroke before moving focus to an item. */\n get typeaheadDebounceInterval() {\n return this._typeaheadDebounceInterval;\n }\n set typeaheadDebounceInterval(value) {\n this._typeaheadDebounceInterval = coerceNumberProperty(value);\n }\n /** Unique id of the element. */\n get id() {\n return this._id;\n }\n set id(value) {\n this._id = value || this._uid;\n this.stateChanges.next();\n }\n ngOnInit() {\n this._selectionModel = new SelectionModel(this.multiple);\n this.stateChanges.next();\n // We need `distinctUntilChanged` here, because some browsers will\n // fire the animation end event twice for the same animation. See:\n // https://github.com/angular/angular/issues/24084\n this._panelDoneAnimatingStream\n .pipe(distinctUntilChanged(), takeUntil(this._destroy))\n .subscribe(() => this._panelDoneAnimating(this.panelOpen));\n }\n ngAfterContentInit() {\n this._initKeyManager();\n this._selectionModel.changed.pipe(takeUntil(this._destroy)).subscribe(event => {\n event.added.forEach(option => option.select());\n event.removed.forEach(option => option.deselect());\n });\n this.options.changes.pipe(startWith(null), takeUntil(this._destroy)).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n }\n ngDoCheck() {\n const newAriaLabelledby = this._getTriggerAriaLabelledby();\n const ngControl = this.ngControl;\n // We have to manage setting the `aria-labelledby` ourselves, because part of its value\n // is computed as a result of a content query which can cause this binding to trigger a\n // \"changed after checked\" error.\n if (newAriaLabelledby !== this._triggerAriaLabelledBy) {\n const element = this._elementRef.nativeElement;\n this._triggerAriaLabelledBy = newAriaLabelledby;\n if (newAriaLabelledby) {\n element.setAttribute('aria-labelledby', newAriaLabelledby);\n }\n else {\n element.removeAttribute('aria-labelledby');\n }\n }\n if (ngControl) {\n // The disabled state might go out of sync if the form group is swapped out. See #17860.\n if (this._previousControl !== ngControl.control) {\n if (this._previousControl !== undefined &&\n ngControl.disabled !== null &&\n ngControl.disabled !== this.disabled) {\n this.disabled = ngControl.disabled;\n }\n this._previousControl = ngControl.control;\n }\n this.updateErrorState();\n }\n }\n ngOnChanges(changes) {\n // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let\n // the parent form field know to run change detection when the disabled state changes.\n if (changes['disabled'] || changes['userAriaDescribedBy']) {\n this.stateChanges.next();\n }\n if (changes['typeaheadDebounceInterval'] && this._keyManager) {\n this._keyManager.withTypeAhead(this._typeaheadDebounceInterval);\n }\n }\n ngOnDestroy() {\n this._destroy.next();\n this._destroy.complete();\n this.stateChanges.complete();\n }\n /** Toggles the overlay panel open or closed. */\n toggle() {\n this.panelOpen ? this.close() : this.open();\n }\n /** Opens the overlay panel. */\n open() {\n if (this._canOpen()) {\n this._panelOpen = true;\n this._keyManager.withHorizontalOrientation(null);\n this._highlightCorrectOption();\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Closes the overlay panel and focuses the host element. */\n close() {\n if (this._panelOpen) {\n this._panelOpen = false;\n this._keyManager.withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr');\n this._changeDetectorRef.markForCheck();\n this._onTouched();\n }\n }\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value) {\n this._assignValue(value);\n }\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn) {\n this._onChange = fn;\n }\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n /** Whether or not the overlay panel is open. */\n get panelOpen() {\n return this._panelOpen;\n }\n /** The currently selected option. */\n get selected() {\n return this.multiple ? this._selectionModel?.selected || [] : this._selectionModel?.selected[0];\n }\n /** The value displayed in the trigger. */\n get triggerValue() {\n if (this.empty) {\n return '';\n }\n if (this._multiple) {\n const selectedOptions = this._selectionModel.selected.map(option => option.viewValue);\n if (this._isRtl()) {\n selectedOptions.reverse();\n }\n // TODO(crisbeto): delimiter should be configurable for proper localization.\n return selectedOptions.join(', ');\n }\n return this._selectionModel.selected[0].viewValue;\n }\n /** Whether the element is in RTL mode. */\n _isRtl() {\n return this._dir ? this._dir.value === 'rtl' : false;\n }\n /** Handles all keydown events on the select. */\n _handleKeydown(event) {\n if (!this.disabled) {\n this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n }\n }\n /** Handles keyboard events while the select is closed. */\n _handleClosedKeydown(event) {\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW ||\n keyCode === UP_ARROW ||\n keyCode === LEFT_ARROW ||\n keyCode === RIGHT_ARROW;\n const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n const manager = this._keyManager;\n // Open the select on ALT + arrow key to match the native \n event.preventDefault();\n this.close();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n }\n else if (!isTyping &&\n (keyCode === ENTER || keyCode === SPACE) &&\n manager.activeItem &&\n !hasModifierKey(event)) {\n event.preventDefault();\n manager.activeItem._selectViaInteraction();\n }\n else if (!isTyping && this._multiple && keyCode === A && event.ctrlKey) {\n event.preventDefault();\n const hasDeselectedOptions = this.options.some(opt => !opt.disabled && !opt.selected);\n this.options.forEach(option => {\n if (!option.disabled) {\n hasDeselectedOptions ? option.select() : option.deselect();\n }\n });\n }\n else {\n const previouslyFocusedIndex = manager.activeItemIndex;\n manager.onKeydown(event);\n if (this._multiple &&\n isArrowKey &&\n event.shiftKey &&\n manager.activeItem &&\n manager.activeItemIndex !== previouslyFocusedIndex) {\n manager.activeItem._selectViaInteraction();\n }\n }\n }\n _onFocus() {\n if (!this.disabled) {\n this._focused = true;\n this.stateChanges.next();\n }\n }\n /**\n * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n * \"blur\" to the panel when it opens, causing a false positive.\n */\n _onBlur() {\n this._focused = false;\n if (!this.disabled && !this.panelOpen) {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n }\n /**\n * Callback that is invoked when the overlay panel has been attached.\n */\n _onAttached() {\n this._overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n this._changeDetectorRef.detectChanges();\n this._positioningSettled();\n });\n }\n /** Returns the theme to be used on the panel. */\n _getPanelTheme() {\n return this._parentFormField ? `mat-${this._parentFormField.color}` : '';\n }\n /** Whether the select has a value. */\n get empty() {\n return !this._selectionModel || this._selectionModel.isEmpty();\n }\n _initializeSelection() {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl) {\n this._value = this.ngControl.value;\n }\n this._setSelectionByValue(this._value);\n this.stateChanges.next();\n });\n }\n /**\n * Sets the selected option based on a value. If no option can be\n * found with the designated value, the select trigger is cleared.\n */\n _setSelectionByValue(value) {\n this._selectionModel.selected.forEach(option => option.setInactiveStyles());\n this._selectionModel.clear();\n if (this.multiple && value) {\n if (!Array.isArray(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectNonArrayValueError();\n }\n value.forEach((currentValue) => this._selectOptionByValue(currentValue));\n this._sortValues();\n }\n else {\n const correspondingOption = this._selectOptionByValue(value);\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n this._keyManager.updateActiveItem(correspondingOption);\n }\n else if (!this.panelOpen) {\n // Otherwise reset the highlighted option. Note that we only want to do this while\n // closed, because doing it while open can shift the user's focus unnecessarily.\n this._keyManager.updateActiveItem(-1);\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Finds and selects and option based on its value.\n * @returns Option that has the corresponding value.\n */\n _selectOptionByValue(value) {\n const correspondingOption = this.options.find((option) => {\n // Skip options that are already in the model. This allows us to handle cases\n // where the same primitive value is selected multiple times.\n if (this._selectionModel.isSelected(option)) {\n return false;\n }\n try {\n // Treat null as a special reset value.\n return option.value != null && this._compareWith(option.value, value);\n }\n catch (error) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Notify developers of errors in their comparator.\n console.warn(error);\n }\n return false;\n }\n });\n if (correspondingOption) {\n this._selectionModel.select(correspondingOption);\n }\n return correspondingOption;\n }\n /** Assigns a specific value to the select. Returns whether the value has changed. */\n _assignValue(newValue) {\n // Always re-assign an array, because it might have been mutated.\n if (newValue !== this._value || (this._multiple && Array.isArray(newValue))) {\n if (this.options) {\n this._setSelectionByValue(newValue);\n }\n this._value = newValue;\n return true;\n }\n return false;\n }\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager(this.options)\n .withTypeAhead(this._typeaheadDebounceInterval)\n .withVerticalOrientation()\n .withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr')\n .withHomeAndEnd()\n .withAllowedModifierKeys(['shiftKey']);\n this._keyManager.tabOut.pipe(takeUntil(this._destroy)).subscribe(() => {\n if (this.panelOpen) {\n // Select the active item when tabbing away. This is consistent with how the native\n // select behaves. Note that we only want to do this in single selection mode.\n if (!this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n // Restore focus to the trigger before closing. Ensures that the focus\n // position won't be lost if the user got focus into the overlay.\n this.focus();\n this.close();\n }\n });\n this._keyManager.change.pipe(takeUntil(this._destroy)).subscribe(() => {\n if (this._panelOpen && this.panel) {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n else if (!this._panelOpen && !this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n /** Drops current option subscriptions and IDs and resets from scratch. */\n _resetOptions() {\n const changedOrDestroyed = merge(this.options.changes, this._destroy);\n this.optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe(event => {\n this._onSelect(event.source, event.isUserInput);\n if (event.isUserInput && !this.multiple && this._panelOpen) {\n this.close();\n this.focus();\n }\n });\n // Listen to changes in the internal state of the options and react accordingly.\n // Handles cases like the labels of the selected options changing.\n merge(...this.options.map(option => option._stateChanges))\n .pipe(takeUntil(changedOrDestroyed))\n .subscribe(() => {\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n });\n }\n /** Invoked when an option is clicked. */\n _onSelect(option, isUserInput) {\n const wasSelected = this._selectionModel.isSelected(option);\n if (option.value == null && !this._multiple) {\n option.deselect();\n this._selectionModel.clear();\n if (this.value != null) {\n this._propagateChanges(option.value);\n }\n }\n else {\n if (wasSelected !== option.selected) {\n option.selected\n ? this._selectionModel.select(option)\n : this._selectionModel.deselect(option);\n }\n if (isUserInput) {\n this._keyManager.setActiveItem(option);\n }\n if (this.multiple) {\n this._sortValues();\n if (isUserInput) {\n // In case the user selected the option with their mouse, we\n // want to restore focus back to the trigger, in order to\n // prevent the select keyboard controls from clashing with\n // the ones from `mat-option`.\n this.focus();\n }\n }\n }\n if (wasSelected !== this._selectionModel.isSelected(option)) {\n this._propagateChanges();\n }\n this.stateChanges.next();\n }\n /** Sorts the selected values in the selected based on their order in the panel. */\n _sortValues() {\n if (this.multiple) {\n const options = this.options.toArray();\n this._selectionModel.sort((a, b) => {\n return this.sortComparator\n ? this.sortComparator(a, b, options)\n : options.indexOf(a) - options.indexOf(b);\n });\n this.stateChanges.next();\n }\n }\n /** Emits change event to set the model value. */\n _propagateChanges(fallbackValue) {\n let valueToEmit = null;\n if (this.multiple) {\n valueToEmit = this.selected.map(option => option.value);\n }\n else {\n valueToEmit = this.selected ? this.selected.value : fallbackValue;\n }\n this._value = valueToEmit;\n this.valueChange.emit(valueToEmit);\n this._onChange(valueToEmit);\n this.selectionChange.emit(this._getChangeEvent(valueToEmit));\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Highlights the selected item. If no option is selected, it will highlight\n * the first item instead.\n */\n _highlightCorrectOption() {\n if (this._keyManager) {\n if (this.empty) {\n this._keyManager.setFirstItemActive();\n }\n else {\n this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n }\n }\n }\n /** Whether the panel is allowed to open. */\n _canOpen() {\n return !this._panelOpen && !this.disabled && this.options?.length > 0;\n }\n /** Focuses the select element. */\n focus(options) {\n this._elementRef.nativeElement.focus(options);\n }\n /** Gets the aria-labelledby for the select panel. */\n _getPanelAriaLabelledby() {\n if (this.ariaLabel) {\n return null;\n }\n const labelId = this._parentFormField?.getLabelId();\n const labelExpression = labelId ? labelId + ' ' : '';\n return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;\n }\n /** Determines the `aria-activedescendant` to be set on the host. */\n _getAriaActiveDescendant() {\n if (this.panelOpen && this._keyManager && this._keyManager.activeItem) {\n return this._keyManager.activeItem.id;\n }\n return null;\n }\n /** Gets the aria-labelledby of the select component trigger. */\n _getTriggerAriaLabelledby() {\n if (this.ariaLabel) {\n return null;\n }\n const labelId = this._parentFormField?.getLabelId();\n let value = (labelId ? labelId + ' ' : '') + this._valueId;\n if (this.ariaLabelledby) {\n value += ' ' + this.ariaLabelledby;\n }\n return value;\n }\n /** Called when the overlay panel is done animating. */\n _panelDoneAnimating(isOpen) {\n this.openedChange.emit(isOpen);\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids) {\n if (ids.length) {\n this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n }\n else {\n this._elementRef.nativeElement.removeAttribute('aria-describedby');\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n this.open();\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat() {\n return this._panelOpen || !this.empty || (this._focused && !!this._placeholder);\n }\n}\n_MatSelectBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatSelectBase, deps: [{ token: i1.ViewportRuler }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i2.ErrorStateMatcher }, { token: i0.ElementRef }, { token: i3.Directionality, optional: true }, { token: i4.NgForm, optional: true }, { token: i4.FormGroupDirective, optional: true }, { token: MAT_FORM_FIELD, optional: true }, { token: i4.NgControl, optional: true, self: true }, { token: 'tabindex', attribute: true }, { token: MAT_SELECT_SCROLL_STRATEGY }, { token: i5.LiveAnnouncer }, { token: MAT_SELECT_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatSelectBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatSelectBase, inputs: { userAriaDescribedBy: [\"aria-describedby\", \"userAriaDescribedBy\"], panelClass: \"panelClass\", placeholder: \"placeholder\", required: \"required\", multiple: \"multiple\", disableOptionCentering: \"disableOptionCentering\", compareWith: \"compareWith\", value: \"value\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], errorStateMatcher: \"errorStateMatcher\", typeaheadDebounceInterval: \"typeaheadDebounceInterval\", sortComparator: \"sortComparator\", id: \"id\" }, outputs: { openedChange: \"openedChange\", _openedStream: \"opened\", _closedStream: \"closed\", selectionChange: \"selectionChange\", valueChange: \"valueChange\" }, viewQueries: [{ propertyName: \"trigger\", first: true, predicate: [\"trigger\"], descendants: true }, { propertyName: \"panel\", first: true, predicate: [\"panel\"], descendants: true }, { propertyName: \"_overlayDir\", first: true, predicate: CdkConnectedOverlay, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatSelectBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i1.ViewportRuler }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i2.ErrorStateMatcher }, { type: i0.ElementRef }, { type: i3.Directionality, decorators: [{\n type: Optional\n }] }, { type: i4.NgForm, decorators: [{\n type: Optional\n }] }, { type: i4.FormGroupDirective, decorators: [{\n type: Optional\n }] }, { type: i6.MatFormField, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD]\n }] }, { type: i4.NgControl, decorators: [{\n type: Self\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_SELECT_SCROLL_STRATEGY]\n }] }, { type: i5.LiveAnnouncer }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_SELECT_CONFIG]\n }] }]; }, propDecorators: { userAriaDescribedBy: [{\n type: Input,\n args: ['aria-describedby']\n }], trigger: [{\n type: ViewChild,\n args: ['trigger']\n }], panel: [{\n type: ViewChild,\n args: ['panel']\n }], _overlayDir: [{\n type: ViewChild,\n args: [CdkConnectedOverlay]\n }], panelClass: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], required: [{\n type: Input\n }], multiple: [{\n type: Input\n }], disableOptionCentering: [{\n type: Input\n }], compareWith: [{\n type: Input\n }], value: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], errorStateMatcher: [{\n type: Input\n }], typeaheadDebounceInterval: [{\n type: Input\n }], sortComparator: [{\n type: Input\n }], id: [{\n type: Input\n }], openedChange: [{\n type: Output\n }], _openedStream: [{\n type: Output,\n args: ['opened']\n }], _closedStream: [{\n type: Output,\n args: ['closed']\n }], selectionChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }] } });\nclass MatSelect extends _MatSelectBase {\n constructor() {\n super(...arguments);\n /** The scroll position of the overlay panel, calculated to center the selected option. */\n this._scrollTop = 0;\n /** The cached font-size of the trigger element. */\n this._triggerFontSize = 0;\n /** The value of the select panel's transform-origin property. */\n this._transformOrigin = 'top';\n /**\n * The y-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text.\n * when the panel opens. Will change based on the y-position of the selected option.\n */\n this._offsetY = 0;\n this._positions = [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ];\n }\n /**\n * Calculates the scroll position of the select's overlay panel.\n *\n * Attempts to center the selected option in the panel. If the option is\n * too high or too low in the panel to be scrolled to the center, it clamps the\n * scroll position to the min or max scroll positions respectively.\n */\n _calculateOverlayScroll(selectedIndex, scrollBuffer, maxScroll) {\n const itemHeight = this._getItemHeight();\n const optionOffsetFromScrollTop = itemHeight * selectedIndex;\n const halfOptionHeight = itemHeight / 2;\n // Starts at the optionOffsetFromScrollTop, which scrolls the option to the top of the\n // scroll container, then subtracts the scroll buffer to scroll the option down to\n // the center of the overlay panel. Half the option height must be re-added to the\n // scrollTop so the option is centered based on its middle, not its top edge.\n const optimalScrollPosition = optionOffsetFromScrollTop - scrollBuffer + halfOptionHeight;\n return Math.min(Math.max(0, optimalScrollPosition), maxScroll);\n }\n ngOnInit() {\n super.ngOnInit();\n this._viewportRuler\n .change()\n .pipe(takeUntil(this._destroy))\n .subscribe(() => {\n if (this.panelOpen) {\n this._triggerRect = this.trigger.nativeElement.getBoundingClientRect();\n this._changeDetectorRef.markForCheck();\n }\n });\n }\n open() {\n if (super._canOpen()) {\n super.open();\n this._triggerRect = this.trigger.nativeElement.getBoundingClientRect();\n // Note: The computed font-size will be a string pixel value (e.g. \"16px\").\n // `parseInt` ignores the trailing 'px' and converts this to a number.\n this._triggerFontSize = parseInt(getComputedStyle(this.trigger.nativeElement).fontSize || '0');\n this._calculateOverlayPosition();\n // Set the font size on the panel element once it exists.\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n if (this._triggerFontSize &&\n this._overlayDir.overlayRef &&\n this._overlayDir.overlayRef.overlayElement) {\n this._overlayDir.overlayRef.overlayElement.style.fontSize = `${this._triggerFontSize}px`;\n }\n });\n }\n }\n /** Scrolls the active option into view. */\n _scrollOptionIntoView(index) {\n const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);\n const itemHeight = this._getItemHeight();\n if (index === 0 && labelCount === 1) {\n // If we've got one group label before the option and we're at the top option,\n // scroll the list to the top. This is better UX than scrolling the list to the\n // top of the option, because it allows the user to read the top group's label.\n this.panel.nativeElement.scrollTop = 0;\n }\n else {\n this.panel.nativeElement.scrollTop = _getOptionScrollPosition((index + labelCount) * itemHeight, itemHeight, this.panel.nativeElement.scrollTop, SELECT_PANEL_MAX_HEIGHT);\n }\n }\n _positioningSettled() {\n this._calculateOverlayOffsetX();\n this.panel.nativeElement.scrollTop = this._scrollTop;\n }\n _panelDoneAnimating(isOpen) {\n if (this.panelOpen) {\n this._scrollTop = 0;\n }\n else {\n this._overlayDir.offsetX = 0;\n this._changeDetectorRef.markForCheck();\n }\n super._panelDoneAnimating(isOpen);\n }\n _getChangeEvent(value) {\n return new MatSelectChange(this, value);\n }\n /**\n * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text when\n * the panel opens. Will change based on LTR or RTL text direction. Note that the offset\n * can't be calculated until the panel has been attached, because we need to know the\n * content width in order to constrain the panel within the viewport.\n */\n _calculateOverlayOffsetX() {\n const overlayRect = this._overlayDir.overlayRef.overlayElement.getBoundingClientRect();\n const viewportSize = this._viewportRuler.getViewportSize();\n const isRtl = this._isRtl();\n const paddingWidth = this.multiple\n ? SELECT_MULTIPLE_PANEL_PADDING_X + SELECT_PANEL_PADDING_X\n : SELECT_PANEL_PADDING_X * 2;\n let offsetX;\n // Adjust the offset, depending on the option padding.\n if (this.multiple) {\n offsetX = SELECT_MULTIPLE_PANEL_PADDING_X;\n }\n else if (this.disableOptionCentering) {\n offsetX = SELECT_PANEL_PADDING_X;\n }\n else {\n let selected = this._selectionModel.selected[0] || this.options.first;\n offsetX = selected && selected.group ? SELECT_PANEL_INDENT_PADDING_X : SELECT_PANEL_PADDING_X;\n }\n // Invert the offset in LTR.\n if (!isRtl) {\n offsetX *= -1;\n }\n // Determine how much the select overflows on each side.\n const leftOverflow = 0 - (overlayRect.left + offsetX - (isRtl ? paddingWidth : 0));\n const rightOverflow = overlayRect.right + offsetX - viewportSize.width + (isRtl ? 0 : paddingWidth);\n // If the element overflows on either side, reduce the offset to allow it to fit.\n if (leftOverflow > 0) {\n offsetX += leftOverflow + SELECT_PANEL_VIEWPORT_PADDING;\n }\n else if (rightOverflow > 0) {\n offsetX -= rightOverflow + SELECT_PANEL_VIEWPORT_PADDING;\n }\n // Set the offset directly in order to avoid having to go through change detection and\n // potentially triggering \"changed after it was checked\" errors. Round the value to avoid\n // blurry content in some browsers.\n this._overlayDir.offsetX = Math.round(offsetX);\n this._overlayDir.overlayRef.updatePosition();\n }\n /**\n * Calculates the y-offset of the select's overlay panel in relation to the\n * top start corner of the trigger. It has to be adjusted in order for the\n * selected option to be aligned over the trigger when the panel opens.\n */\n _calculateOverlayOffsetY(selectedIndex, scrollBuffer, maxScroll) {\n const itemHeight = this._getItemHeight();\n const optionHeightAdjustment = (itemHeight - this._triggerRect.height) / 2;\n const maxOptionsDisplayed = Math.floor(SELECT_PANEL_MAX_HEIGHT / itemHeight);\n let optionOffsetFromPanelTop;\n // Disable offset if requested by user by returning 0 as value to offset\n if (this.disableOptionCentering) {\n return 0;\n }\n if (this._scrollTop === 0) {\n optionOffsetFromPanelTop = selectedIndex * itemHeight;\n }\n else if (this._scrollTop === maxScroll) {\n const firstDisplayedIndex = this._getItemCount() - maxOptionsDisplayed;\n const selectedDisplayIndex = selectedIndex - firstDisplayedIndex;\n // The first item is partially out of the viewport. Therefore we need to calculate what\n // portion of it is shown in the viewport and account for it in our offset.\n let partialItemHeight = itemHeight - ((this._getItemCount() * itemHeight - SELECT_PANEL_MAX_HEIGHT) % itemHeight);\n // Because the panel height is longer than the height of the options alone,\n // there is always extra padding at the top or bottom of the panel. When\n // scrolled to the very bottom, this padding is at the top of the panel and\n // must be added to the offset.\n optionOffsetFromPanelTop = selectedDisplayIndex * itemHeight + partialItemHeight;\n }\n else {\n // If the option was scrolled to the middle of the panel using a scroll buffer,\n // its offset will be the scroll buffer minus the half height that was added to\n // center it.\n optionOffsetFromPanelTop = scrollBuffer - itemHeight / 2;\n }\n // The final offset is the option's offset from the top, adjusted for the height difference,\n // multiplied by -1 to ensure that the overlay moves in the correct direction up the page.\n // The value is rounded to prevent some browsers from blurring the content.\n return Math.round(optionOffsetFromPanelTop * -1 - optionHeightAdjustment);\n }\n /**\n * Checks that the attempted overlay position will fit within the viewport.\n * If it will not fit, tries to adjust the scroll position and the associated\n * y-offset so the panel can open fully on-screen. If it still won't fit,\n * sets the offset back to 0 to allow the fallback position to take over.\n */\n _checkOverlayWithinViewport(maxScroll) {\n const itemHeight = this._getItemHeight();\n const viewportSize = this._viewportRuler.getViewportSize();\n const topSpaceAvailable = this._triggerRect.top - SELECT_PANEL_VIEWPORT_PADDING;\n const bottomSpaceAvailable = viewportSize.height - this._triggerRect.bottom - SELECT_PANEL_VIEWPORT_PADDING;\n const panelHeightTop = Math.abs(this._offsetY);\n const totalPanelHeight = Math.min(this._getItemCount() * itemHeight, SELECT_PANEL_MAX_HEIGHT);\n const panelHeightBottom = totalPanelHeight - panelHeightTop - this._triggerRect.height;\n if (panelHeightBottom > bottomSpaceAvailable) {\n this._adjustPanelUp(panelHeightBottom, bottomSpaceAvailable);\n }\n else if (panelHeightTop > topSpaceAvailable) {\n this._adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll);\n }\n else {\n this._transformOrigin = this._getOriginBasedOnOption();\n }\n }\n /** Adjusts the overlay panel up to fit in the viewport. */\n _adjustPanelUp(panelHeightBottom, bottomSpaceAvailable) {\n // Browsers ignore fractional scroll offsets, so we need to round.\n const distanceBelowViewport = Math.round(panelHeightBottom - bottomSpaceAvailable);\n // Scrolls the panel up by the distance it was extending past the boundary, then\n // adjusts the offset by that amount to move the panel up into the viewport.\n this._scrollTop -= distanceBelowViewport;\n this._offsetY -= distanceBelowViewport;\n this._transformOrigin = this._getOriginBasedOnOption();\n // If the panel is scrolled to the very top, it won't be able to fit the panel\n // by scrolling, so set the offset to 0 to allow the fallback position to take\n // effect.\n if (this._scrollTop <= 0) {\n this._scrollTop = 0;\n this._offsetY = 0;\n this._transformOrigin = `50% bottom 0px`;\n }\n }\n /** Adjusts the overlay panel down to fit in the viewport. */\n _adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll) {\n // Browsers ignore fractional scroll offsets, so we need to round.\n const distanceAboveViewport = Math.round(panelHeightTop - topSpaceAvailable);\n // Scrolls the panel down by the distance it was extending past the boundary, then\n // adjusts the offset by that amount to move the panel down into the viewport.\n this._scrollTop += distanceAboveViewport;\n this._offsetY += distanceAboveViewport;\n this._transformOrigin = this._getOriginBasedOnOption();\n // If the panel is scrolled to the very bottom, it won't be able to fit the\n // panel by scrolling, so set the offset to 0 to allow the fallback position\n // to take effect.\n if (this._scrollTop >= maxScroll) {\n this._scrollTop = maxScroll;\n this._offsetY = 0;\n this._transformOrigin = `50% top 0px`;\n return;\n }\n }\n /** Calculates the scroll position and x- and y-offsets of the overlay panel. */\n _calculateOverlayPosition() {\n const itemHeight = this._getItemHeight();\n const items = this._getItemCount();\n const panelHeight = Math.min(items * itemHeight, SELECT_PANEL_MAX_HEIGHT);\n const scrollContainerHeight = items * itemHeight;\n // The farthest the panel can be scrolled before it hits the bottom\n const maxScroll = scrollContainerHeight - panelHeight;\n // If no value is selected we open the popup to the first item.\n let selectedOptionOffset;\n if (this.empty) {\n selectedOptionOffset = 0;\n }\n else {\n selectedOptionOffset = Math.max(this.options.toArray().indexOf(this._selectionModel.selected[0]), 0);\n }\n selectedOptionOffset += _countGroupLabelsBeforeOption(selectedOptionOffset, this.options, this.optionGroups);\n // We must maintain a scroll buffer so the selected option will be scrolled to the\n // center of the overlay panel rather than the top.\n const scrollBuffer = panelHeight / 2;\n this._scrollTop = this._calculateOverlayScroll(selectedOptionOffset, scrollBuffer, maxScroll);\n this._offsetY = this._calculateOverlayOffsetY(selectedOptionOffset, scrollBuffer, maxScroll);\n this._checkOverlayWithinViewport(maxScroll);\n }\n /** Sets the transform origin point based on the selected option. */\n _getOriginBasedOnOption() {\n const itemHeight = this._getItemHeight();\n const optionHeightAdjustment = (itemHeight - this._triggerRect.height) / 2;\n const originY = Math.abs(this._offsetY) - optionHeightAdjustment + itemHeight / 2;\n return `50% ${originY}px 0px`;\n }\n /** Calculates the height of the select's options. */\n _getItemHeight() {\n return this._triggerFontSize * SELECT_ITEM_HEIGHT_EM;\n }\n /** Calculates the amount of items in the select. This includes options and group labels. */\n _getItemCount() {\n return this.options.length + this.optionGroups.length;\n }\n}\nMatSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSelect, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatSelect, selector: \"mat-select\", inputs: { disabled: \"disabled\", disableRipple: \"disableRipple\", tabIndex: \"tabIndex\" }, host: { attributes: { \"role\": \"combobox\", \"aria-autocomplete\": \"none\", \"aria-haspopup\": \"true\" }, listeners: { \"keydown\": \"_handleKeydown($event)\", \"focus\": \"_onFocus()\", \"blur\": \"_onBlur()\" }, properties: { \"attr.id\": \"id\", \"attr.tabindex\": \"tabIndex\", \"attr.aria-controls\": \"panelOpen ? id + \\\"-panel\\\" : null\", \"attr.aria-expanded\": \"panelOpen\", \"attr.aria-label\": \"ariaLabel || null\", \"attr.aria-required\": \"required.toString()\", \"attr.aria-disabled\": \"disabled.toString()\", \"attr.aria-invalid\": \"errorState\", \"attr.aria-activedescendant\": \"_getAriaActiveDescendant()\", \"class.mat-select-disabled\": \"disabled\", \"class.mat-select-invalid\": \"errorState\", \"class.mat-select-required\": \"required\", \"class.mat-select-empty\": \"empty\", \"class.mat-select-multiple\": \"multiple\" }, classAttribute: \"mat-select\" }, providers: [\n { provide: MatFormFieldControl, useExisting: MatSelect },\n { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatSelect },\n ], queries: [{ propertyName: \"customTrigger\", first: true, predicate: MAT_SELECT_TRIGGER, descendants: true }, { propertyName: \"options\", predicate: MatOption, descendants: true }, { propertyName: \"optionGroups\", predicate: MAT_OPTGROUP, descendants: true }], exportAs: [\"matSelect\"], usesInheritance: true, ngImport: i0, template: \"\\n
\\n
\\n {{placeholder}}\\n \\n {{triggerValue}}\\n \\n \\n
\\n\\n
\\n
\\n\\n\\n
\\n \\n \\n
\\n \\n\\n\", styles: [\".mat-select{display:inline-block;width:100%;outline:none}.mat-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-select-disabled .mat-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-select-arrow-wrapper{height:16px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:translateY(-25%)}.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:none}.mat-select-arrow{width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;margin:0 4px}.mat-form-field.mat-focused .mat-select-arrow{transform:translateX(0)}.mat-select-panel-wrap{flex-basis:100%}.mat-select-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;padding-top:0;padding-bottom:0;max-height:256px;min-width:100%;border-radius:4px;outline:0}.cdk-high-contrast-active .mat-select-panel{outline:solid 1px}.mat-select-panel .mat-optgroup-label,.mat-select-panel .mat-option{font-size:inherit;line-height:3em;height:3em}.mat-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-form-field-flex{cursor:pointer}.mat-form-field-type-mat-select .mat-form-field-label{width:calc(100% - 18px)}.mat-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-select-min-line:empty::before{content:\\\" \\\";white-space:pre;width:1px;display:inline-block;visibility:hidden}\"], dependencies: [{ kind: \"directive\", type: i7.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i7.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i7.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i7.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"directive\", type: i8.CdkConnectedOverlay, selector: \"[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]\", inputs: [\"cdkConnectedOverlayOrigin\", \"cdkConnectedOverlayPositions\", \"cdkConnectedOverlayPositionStrategy\", \"cdkConnectedOverlayOffsetX\", \"cdkConnectedOverlayOffsetY\", \"cdkConnectedOverlayWidth\", \"cdkConnectedOverlayHeight\", \"cdkConnectedOverlayMinWidth\", \"cdkConnectedOverlayMinHeight\", \"cdkConnectedOverlayBackdropClass\", \"cdkConnectedOverlayPanelClass\", \"cdkConnectedOverlayViewportMargin\", \"cdkConnectedOverlayScrollStrategy\", \"cdkConnectedOverlayOpen\", \"cdkConnectedOverlayDisableClose\", \"cdkConnectedOverlayTransformOriginOn\", \"cdkConnectedOverlayHasBackdrop\", \"cdkConnectedOverlayLockPosition\", \"cdkConnectedOverlayFlexibleDimensions\", \"cdkConnectedOverlayGrowAfterOpen\", \"cdkConnectedOverlayPush\"], outputs: [\"backdropClick\", \"positionChange\", \"attach\", \"detach\", \"overlayKeydown\", \"overlayOutsideClick\"], exportAs: [\"cdkConnectedOverlay\"] }, { kind: \"directive\", type: i8.CdkOverlayOrigin, selector: \"[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]\", exportAs: [\"cdkOverlayOrigin\"] }], animations: [matSelectAnimations.transformPanelWrap, matSelectAnimations.transformPanel], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSelect, decorators: [{\n type: Component,\n args: [{ selector: 'mat-select', exportAs: 'matSelect', inputs: ['disabled', 'disableRipple', 'tabIndex'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n 'role': 'combobox',\n 'aria-autocomplete': 'none',\n // TODO(crisbeto): the value for aria-haspopup should be `listbox`, but currently it's difficult\n // to sync into Google, because of an outdated automated a11y check which flags it as an invalid\n // value. At some point we should try to switch it back to being `listbox`.\n 'aria-haspopup': 'true',\n 'class': 'mat-select',\n '[attr.id]': 'id',\n '[attr.tabindex]': 'tabIndex',\n '[attr.aria-controls]': 'panelOpen ? id + \"-panel\" : null',\n '[attr.aria-expanded]': 'panelOpen',\n '[attr.aria-label]': 'ariaLabel || null',\n '[attr.aria-required]': 'required.toString()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-invalid]': 'errorState',\n '[attr.aria-activedescendant]': '_getAriaActiveDescendant()',\n '[class.mat-select-disabled]': 'disabled',\n '[class.mat-select-invalid]': 'errorState',\n '[class.mat-select-required]': 'required',\n '[class.mat-select-empty]': 'empty',\n '[class.mat-select-multiple]': 'multiple',\n '(keydown)': '_handleKeydown($event)',\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()',\n }, animations: [matSelectAnimations.transformPanelWrap, matSelectAnimations.transformPanel], providers: [\n { provide: MatFormFieldControl, useExisting: MatSelect },\n { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatSelect },\n ], template: \"\\n
\\n
\\n {{placeholder}}\\n \\n {{triggerValue}}\\n \\n \\n
\\n\\n
\\n
\\n\\n\\n
\\n \\n \\n
\\n \\n\\n\", styles: [\".mat-select{display:inline-block;width:100%;outline:none}.mat-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-select-disabled .mat-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-select-arrow-wrapper{height:16px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:translateY(-25%)}.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:none}.mat-select-arrow{width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;margin:0 4px}.mat-form-field.mat-focused .mat-select-arrow{transform:translateX(0)}.mat-select-panel-wrap{flex-basis:100%}.mat-select-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;padding-top:0;padding-bottom:0;max-height:256px;min-width:100%;border-radius:4px;outline:0}.cdk-high-contrast-active .mat-select-panel{outline:solid 1px}.mat-select-panel .mat-optgroup-label,.mat-select-panel .mat-option{font-size:inherit;line-height:3em;height:3em}.mat-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-form-field-flex{cursor:pointer}.mat-form-field-type-mat-select .mat-form-field-label{width:calc(100% - 18px)}.mat-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-select-min-line:empty::before{content:\\\" \\\";white-space:pre;width:1px;display:inline-block;visibility:hidden}\"] }]\n }], propDecorators: { options: [{\n type: ContentChildren,\n args: [MatOption, { descendants: true }]\n }], optionGroups: [{\n type: ContentChildren,\n args: [MAT_OPTGROUP, { descendants: true }]\n }], customTrigger: [{\n type: ContentChild,\n args: [MAT_SELECT_TRIGGER]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSelectModule {\n}\nMatSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSelectModule, declarations: [MatSelect, MatSelectTrigger], imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule], exports: [CdkScrollableModule,\n MatFormFieldModule,\n MatSelect,\n MatSelectTrigger,\n MatOptionModule,\n MatCommonModule] });\nMatSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSelectModule, providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule, CdkScrollableModule,\n MatFormFieldModule,\n MatOptionModule,\n MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatSelectModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule],\n exports: [\n CdkScrollableModule,\n MatFormFieldModule,\n MatSelect,\n MatSelectTrigger,\n MatOptionModule,\n MatCommonModule,\n ],\n declarations: [MatSelect, MatSelectTrigger],\n providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SELECT_CONFIG, MAT_SELECT_SCROLL_STRATEGY, MAT_SELECT_SCROLL_STRATEGY_PROVIDER, MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY, MAT_SELECT_TRIGGER, MatSelect, MatSelectChange, MatSelectModule, MatSelectTrigger, _MatSelectBase, matSelectAnimations };\n","import * as i7 from '@angular/cdk/a11y';\nimport { FocusKeyManager, A11yModule } from '@angular/cdk/a11y';\nimport * as i5 from '@angular/cdk/observers';\nimport { ObserversModule } from '@angular/cdk/observers';\nimport * as i2 from '@angular/cdk/portal';\nimport { CdkPortal, TemplatePortal, CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';\nimport * as i1$2 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Inject, Optional, TemplateRef, Component, ChangeDetectionStrategy, ViewEncapsulation, ContentChild, ViewChild, Input, forwardRef, EventEmitter, Output, ContentChildren, QueryList, Attribute, NgModule } from '@angular/core';\nimport * as i4 from '@angular/material/core';\nimport { mixinDisabled, mixinColor, mixinDisableRipple, mixinTabIndex, MAT_RIPPLE_GLOBAL_OPTIONS, RippleRenderer, MatCommonModule, MatRippleModule } from '@angular/material/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { take, startWith, distinctUntilChanged, takeUntil, switchMap, skip, filter } from 'rxjs/operators';\nimport { Subject, Subscription, fromEvent, of, merge, EMPTY, Observable, timer } from 'rxjs';\nimport * as i1 from '@angular/cdk/bidi';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport * as i1$1 from '@angular/cdk/scrolling';\nimport * as i3 from '@angular/cdk/platform';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { hasModifierKey, SPACE, ENTER } from '@angular/cdk/keycodes';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token for the MatInkBar's Positioner. */\nconst _MAT_INK_BAR_POSITIONER = new InjectionToken('MatInkBarPositioner', {\n providedIn: 'root',\n factory: _MAT_INK_BAR_POSITIONER_FACTORY,\n});\n/**\n * The default positioner function for the MatInkBar.\n * @docs-private\n */\nfunction _MAT_INK_BAR_POSITIONER_FACTORY() {\n const method = (element) => ({\n left: element ? (element.offsetLeft || 0) + 'px' : '0',\n width: element ? (element.offsetWidth || 0) + 'px' : '0',\n });\n return method;\n}\n/**\n * The ink-bar is used to display and animate the line underneath the current active tab label.\n * @docs-private\n */\nclass MatInkBar {\n constructor(_elementRef, _ngZone, _inkBarPositioner, _animationMode) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n this._inkBarPositioner = _inkBarPositioner;\n this._animationMode = _animationMode;\n }\n /**\n * Calculates the styles from the provided element in order to align the ink-bar to that element.\n * Shows the ink bar if previously set as hidden.\n * @param element\n */\n alignToElement(element) {\n this.show();\n // `onStable` might not run for a while if the zone has already stabilized.\n // Wrap the call in `NgZone.run` to ensure that it runs relatively soon.\n this._ngZone.run(() => {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n const positions = this._inkBarPositioner(element);\n const inkBar = this._elementRef.nativeElement;\n inkBar.style.left = positions.left;\n inkBar.style.width = positions.width;\n });\n });\n }\n /** Shows the ink bar. */\n show() {\n this._elementRef.nativeElement.style.visibility = 'visible';\n }\n /** Hides the ink bar. */\n hide() {\n this._elementRef.nativeElement.style.visibility = 'hidden';\n }\n}\nMatInkBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatInkBar, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: _MAT_INK_BAR_POSITIONER }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatInkBar.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatInkBar, selector: \"mat-ink-bar\", host: { properties: { \"class._mat-animation-noopable\": \"_animationMode === 'NoopAnimations'\" }, classAttribute: \"mat-ink-bar\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatInkBar, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-ink-bar',\n host: {\n 'class': 'mat-ink-bar',\n '[class._mat-animation-noopable]': `_animationMode === 'NoopAnimations'`,\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [_MAT_INK_BAR_POSITIONER]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used to reference instances of `MatTabContent`. It serves as\n * alternative token to the actual `MatTabContent` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_TAB_CONTENT = new InjectionToken('MatTabContent');\n/** Decorates the `ng-template` tags and reads out the template from it. */\nclass MatTabContent {\n constructor(/** Content for the tab. */ template) {\n this.template = template;\n }\n}\nMatTabContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabContent, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabContent, selector: \"[matTabContent]\", providers: [{ provide: MAT_TAB_CONTENT, useExisting: MatTabContent }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabContent, decorators: [{\n type: Directive,\n args: [{\n selector: '[matTabContent]',\n providers: [{ provide: MAT_TAB_CONTENT, useExisting: MatTabContent }],\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used to reference instances of `MatTabLabel`. It serves as\n * alternative token to the actual `MatTabLabel` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_TAB_LABEL = new InjectionToken('MatTabLabel');\n/**\n * Used to provide a tab label to a tab without causing a circular dependency.\n * @docs-private\n */\nconst MAT_TAB = new InjectionToken('MAT_TAB');\n/** Used to flag tab labels for use with the portal directive */\nclass MatTabLabel extends CdkPortal {\n constructor(templateRef, viewContainerRef, _closestTab) {\n super(templateRef, viewContainerRef);\n this._closestTab = _closestTab;\n }\n}\nMatTabLabel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLabel, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: MAT_TAB, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabLabel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabLabel, selector: \"[mat-tab-label], [matTabLabel]\", providers: [{ provide: MAT_TAB_LABEL, useExisting: MatTabLabel }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLabel, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-tab-label], [matTabLabel]',\n providers: [{ provide: MAT_TAB_LABEL, useExisting: MatTabLabel }],\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TAB]\n }, {\n type: Optional\n }] }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatTab.\n/** @docs-private */\nconst _MatTabBase = mixinDisabled(class {\n});\n/**\n * Used to provide a tab group to a tab without causing a circular dependency.\n * @docs-private\n */\nconst MAT_TAB_GROUP = new InjectionToken('MAT_TAB_GROUP');\nclass MatTab extends _MatTabBase {\n constructor(_viewContainerRef, _closestTabGroup) {\n super();\n this._viewContainerRef = _viewContainerRef;\n this._closestTabGroup = _closestTabGroup;\n /** Plain text label for the tab, used when there is no template label. */\n this.textLabel = '';\n /** Portal that will be the hosted content of the tab */\n this._contentPortal = null;\n /** Emits whenever the internal state of the tab changes. */\n this._stateChanges = new Subject();\n /**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n */\n this.position = null;\n /**\n * The initial relatively index origin of the tab if it was created and selected after there\n * was already a selected tab. Provides context of what position the tab should originate from.\n */\n this.origin = null;\n /**\n * Whether the tab is currently active.\n */\n this.isActive = false;\n }\n /** Content for the tab label given by ``. */\n get templateLabel() {\n return this._templateLabel;\n }\n set templateLabel(value) {\n this._setTemplateLabelInput(value);\n }\n /** @docs-private */\n get content() {\n return this._contentPortal;\n }\n ngOnChanges(changes) {\n if (changes.hasOwnProperty('textLabel') || changes.hasOwnProperty('disabled')) {\n this._stateChanges.next();\n }\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n ngOnInit() {\n this._contentPortal = new TemplatePortal(this._explicitContent || this._implicitContent, this._viewContainerRef);\n }\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n _setTemplateLabelInput(value) {\n // Only update the label if the query managed to find one. This works around an issue where a\n // user may have manually set `templateLabel` during creation mode, which would then get\n // clobbered by `undefined` when the query resolves. Also note that we check that the closest\n // tab matches the current one so that we don't pick up labels from nested tabs.\n if (value && value._closestTab === this) {\n this._templateLabel = value;\n }\n }\n}\nMatTab.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTab, deps: [{ token: i0.ViewContainerRef }, { token: MAT_TAB_GROUP, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTab.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTab, selector: \"mat-tab\", inputs: { disabled: \"disabled\", textLabel: [\"label\", \"textLabel\"], ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], labelClass: \"labelClass\", bodyClass: \"bodyClass\" }, providers: [{ provide: MAT_TAB, useExisting: MatTab }], queries: [{ propertyName: \"templateLabel\", first: true, predicate: MAT_TAB_LABEL, descendants: true }, { propertyName: \"_explicitContent\", first: true, predicate: MAT_TAB_CONTENT, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: \"_implicitContent\", first: true, predicate: TemplateRef, descendants: true, static: true }], exportAs: [\"matTab\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"\\n\\n\", changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTab, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab', inputs: ['disabled'], changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, exportAs: 'matTab', providers: [{ provide: MAT_TAB, useExisting: MatTab }], template: \"\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TAB_GROUP]\n }, {\n type: Optional\n }] }]; }, propDecorators: { templateLabel: [{\n type: ContentChild,\n args: [MAT_TAB_LABEL]\n }], _explicitContent: [{\n type: ContentChild,\n args: [MAT_TAB_CONTENT, { read: TemplateRef, static: true }]\n }], _implicitContent: [{\n type: ViewChild,\n args: [TemplateRef, { static: true }]\n }], textLabel: [{\n type: Input,\n args: ['label']\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], labelClass: [{\n type: Input\n }], bodyClass: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the Material tabs.\n * @docs-private\n */\nconst matTabsAnimations = {\n /** Animation translates a tab along the X axis. */\n translateTab: trigger('translateTab', [\n // Transitions to `none` instead of 0, because some browsers might blur the content.\n state('center, void, left-origin-center, right-origin-center', style({ transform: 'none' })),\n // If the tab is either on the left or right, we additionally add a `min-height` of 1px\n // in order to ensure that the element has a height before its state changes. This is\n // necessary because Chrome does seem to skip the transition in RTL mode if the element does\n // not have a static height and is not rendered. See related issue: #9465\n state('left', style({\n transform: 'translate3d(-100%, 0, 0)',\n minHeight: '1px',\n // Normally this is redundant since we detach the content from the DOM, but if the user\n // opted into keeping the content in the DOM, we have to hide it so it isn't focusable.\n visibility: 'hidden',\n })),\n state('right', style({\n transform: 'translate3d(100%, 0, 0)',\n minHeight: '1px',\n visibility: 'hidden',\n })),\n transition('* => left, * => right, left => center, right => center', animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')),\n transition('void => left-origin-center', [\n style({ transform: 'translate3d(-100%, 0, 0)', visibility: 'hidden' }),\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)'),\n ]),\n transition('void => right-origin-center', [\n style({ transform: 'translate3d(100%, 0, 0)', visibility: 'hidden' }),\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)'),\n ]),\n ]),\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The portal host directive for the contents of the tab.\n * @docs-private\n */\nclass MatTabBodyPortal extends CdkPortalOutlet {\n constructor(componentFactoryResolver, viewContainerRef, _host, _document) {\n super(componentFactoryResolver, viewContainerRef, _document);\n this._host = _host;\n /** Subscription to events for when the tab body begins centering. */\n this._centeringSub = Subscription.EMPTY;\n /** Subscription to events for when the tab body finishes leaving from center position. */\n this._leavingSub = Subscription.EMPTY;\n }\n /** Set initial visibility or set up subscription for changing visibility. */\n ngOnInit() {\n super.ngOnInit();\n this._centeringSub = this._host._beforeCentering\n .pipe(startWith(this._host._isCenterPosition(this._host._position)))\n .subscribe((isCentering) => {\n if (isCentering && !this.hasAttached()) {\n this.attach(this._host._content);\n }\n });\n this._leavingSub = this._host._afterLeavingCenter.subscribe(() => {\n if (!this._host.preserveContent) {\n this.detach();\n }\n });\n }\n /** Clean up centering subscription. */\n ngOnDestroy() {\n super.ngOnDestroy();\n this._centeringSub.unsubscribe();\n this._leavingSub.unsubscribe();\n }\n}\nMatTabBodyPortal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabBodyPortal, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ViewContainerRef }, { token: forwardRef(() => MatTabBody) }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabBodyPortal.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabBodyPortal, selector: \"[matTabBodyHost]\", usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabBodyPortal, decorators: [{\n type: Directive,\n args: [{\n selector: '[matTabBodyHost]',\n }]\n }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ViewContainerRef }, { type: MatTabBody, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatTabBody)]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; } });\n/**\n * Base class with all of the `MatTabBody` functionality.\n * @docs-private\n */\nclass _MatTabBodyBase {\n constructor(_elementRef, _dir, changeDetectorRef) {\n this._elementRef = _elementRef;\n this._dir = _dir;\n /** Subscription to the directionality change observable. */\n this._dirChangeSubscription = Subscription.EMPTY;\n /** Emits when an animation on the tab is complete. */\n this._translateTabComplete = new Subject();\n /** Event emitted when the tab begins to animate towards the center as the active tab. */\n this._onCentering = new EventEmitter();\n /** Event emitted before the centering of the tab begins. */\n this._beforeCentering = new EventEmitter();\n /** Event emitted before the centering of the tab begins. */\n this._afterLeavingCenter = new EventEmitter();\n /** Event emitted when the tab completes its animation towards the center. */\n this._onCentered = new EventEmitter(true);\n // Note that the default value will always be overwritten by `MatTabBody`, but we need one\n // anyway to prevent the animations module from throwing an error if the body is used on its own.\n /** Duration for the tab's animation. */\n this.animationDuration = '500ms';\n /** Whether the tab's content should be kept in the DOM while it's off-screen. */\n this.preserveContent = false;\n if (_dir) {\n this._dirChangeSubscription = _dir.change.subscribe((dir) => {\n this._computePositionAnimationState(dir);\n changeDetectorRef.markForCheck();\n });\n }\n // Ensure that we get unique animation events, because the `.done` callback can get\n // invoked twice in some browsers. See https://github.com/angular/angular/issues/24084.\n this._translateTabComplete\n .pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n }))\n .subscribe(event => {\n // If the transition to the center is complete, emit an event.\n if (this._isCenterPosition(event.toState) && this._isCenterPosition(this._position)) {\n this._onCentered.emit();\n }\n if (this._isCenterPosition(event.fromState) && !this._isCenterPosition(this._position)) {\n this._afterLeavingCenter.emit();\n }\n });\n }\n /** The shifted index position of the tab body, where zero represents the active center tab. */\n set position(position) {\n this._positionIndex = position;\n this._computePositionAnimationState();\n }\n /**\n * After initialized, check if the content is centered and has an origin. If so, set the\n * special position states that transition the tab from the left or right before centering.\n */\n ngOnInit() {\n if (this._position == 'center' && this.origin != null) {\n this._position = this._computePositionFromOrigin(this.origin);\n }\n }\n ngOnDestroy() {\n this._dirChangeSubscription.unsubscribe();\n this._translateTabComplete.complete();\n }\n _onTranslateTabStarted(event) {\n const isCentering = this._isCenterPosition(event.toState);\n this._beforeCentering.emit(isCentering);\n if (isCentering) {\n this._onCentering.emit(this._elementRef.nativeElement.clientHeight);\n }\n }\n /** The text direction of the containing app. */\n _getLayoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Whether the provided position state is considered center, regardless of origin. */\n _isCenterPosition(position) {\n return (position == 'center' || position == 'left-origin-center' || position == 'right-origin-center');\n }\n /** Computes the position state that will be used for the tab-body animation trigger. */\n _computePositionAnimationState(dir = this._getLayoutDirection()) {\n if (this._positionIndex < 0) {\n this._position = dir == 'ltr' ? 'left' : 'right';\n }\n else if (this._positionIndex > 0) {\n this._position = dir == 'ltr' ? 'right' : 'left';\n }\n else {\n this._position = 'center';\n }\n }\n /**\n * Computes the position state based on the specified origin position. This is used if the\n * tab is becoming visible immediately after creation.\n */\n _computePositionFromOrigin(origin) {\n const dir = this._getLayoutDirection();\n if ((dir == 'ltr' && origin <= 0) || (dir == 'rtl' && origin > 0)) {\n return 'left-origin-center';\n }\n return 'right-origin-center';\n }\n}\n_MatTabBodyBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabBodyBase, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabBodyBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatTabBodyBase, inputs: { _content: [\"content\", \"_content\"], origin: \"origin\", animationDuration: \"animationDuration\", preserveContent: \"preserveContent\", position: \"position\" }, outputs: { _onCentering: \"_onCentering\", _beforeCentering: \"_beforeCentering\", _afterLeavingCenter: \"_afterLeavingCenter\", _onCentered: \"_onCentered\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabBodyBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { _onCentering: [{\n type: Output\n }], _beforeCentering: [{\n type: Output\n }], _afterLeavingCenter: [{\n type: Output\n }], _onCentered: [{\n type: Output\n }], _content: [{\n type: Input,\n args: ['content']\n }], origin: [{\n type: Input\n }], animationDuration: [{\n type: Input\n }], preserveContent: [{\n type: Input\n }], position: [{\n type: Input\n }] } });\n/**\n * Wrapper for the contents of a tab.\n * @docs-private\n */\nclass MatTabBody extends _MatTabBodyBase {\n constructor(elementRef, dir, changeDetectorRef) {\n super(elementRef, dir, changeDetectorRef);\n }\n}\nMatTabBody.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabBody, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nMatTabBody.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabBody, selector: \"mat-tab-body\", host: { classAttribute: \"mat-tab-body\" }, viewQueries: [{ propertyName: \"_portalHost\", first: true, predicate: CdkPortalOutlet, descendants: true }], usesInheritance: true, ngImport: i0, template: \"
\\n \\n
\\n\", styles: [\".mat-tab-body-content{height:100%;overflow:auto}.mat-tab-group-dynamic-height .mat-tab-body-content{overflow:hidden}.mat-tab-body-content[style*=\\\"visibility: hidden\\\"]{display:none}\"], dependencies: [{ kind: \"directive\", type: MatTabBodyPortal, selector: \"[matTabBodyHost]\" }], animations: [matTabsAnimations.translateTab], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabBody, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab-body', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, animations: [matTabsAnimations.translateTab], host: {\n 'class': 'mat-tab-body',\n }, template: \"
\\n \\n
\\n\", styles: [\".mat-tab-body-content{height:100%;overflow:auto}.mat-tab-group-dynamic-height .mat-tab-body-content{overflow:hidden}.mat-tab-body-content[style*=\\\"visibility: hidden\\\"]{display:none}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { _portalHost: [{\n type: ViewChild,\n args: [CdkPortalOutlet]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token that can be used to provide the default options the tabs module. */\nconst MAT_TABS_CONFIG = new InjectionToken('MAT_TABS_CONFIG');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatTabLabelWrapper.\n/** @docs-private */\nconst _MatTabLabelWrapperBase = mixinDisabled(class {\n});\n/**\n * Used in the `mat-tab-group` view to display tab labels.\n * @docs-private\n */\nclass MatTabLabelWrapper extends _MatTabLabelWrapperBase {\n constructor(elementRef) {\n super();\n this.elementRef = elementRef;\n }\n /** Sets focus on the wrapper element */\n focus() {\n this.elementRef.nativeElement.focus();\n }\n getOffsetLeft() {\n return this.elementRef.nativeElement.offsetLeft;\n }\n getOffsetWidth() {\n return this.elementRef.nativeElement.offsetWidth;\n }\n}\nMatTabLabelWrapper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLabelWrapper, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabLabelWrapper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabLabelWrapper, selector: \"[matTabLabelWrapper]\", inputs: { disabled: \"disabled\" }, host: { properties: { \"class.mat-tab-disabled\": \"disabled\", \"attr.aria-disabled\": \"!!disabled\" } }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLabelWrapper, decorators: [{\n type: Directive,\n args: [{\n selector: '[matTabLabelWrapper]',\n inputs: ['disabled'],\n host: {\n '[class.mat-tab-disabled]': 'disabled',\n '[attr.aria-disabled]': '!!disabled',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Config used to bind passive event listeners */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n});\n/**\n * The distance in pixels that will be overshot when scrolling a tab label into view. This helps\n * provide a small affordance to the label next to it.\n */\nconst EXAGGERATED_OVERSCROLL = 60;\n/**\n * Amount of milliseconds to wait before starting to scroll the header automatically.\n * Set a little conservatively in order to handle fake events dispatched on touch devices.\n */\nconst HEADER_SCROLL_DELAY = 650;\n/**\n * Interval in milliseconds at which to scroll the header\n * while the user is holding their pointer.\n */\nconst HEADER_SCROLL_INTERVAL = 100;\n/**\n * Base class for a tab header that supported pagination.\n * @docs-private\n */\nclass MatPaginatedTabHeader {\n constructor(_elementRef, _changeDetectorRef, _viewportRuler, _dir, _ngZone, _platform, _animationMode) {\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._viewportRuler = _viewportRuler;\n this._dir = _dir;\n this._ngZone = _ngZone;\n this._platform = _platform;\n this._animationMode = _animationMode;\n /** The distance in pixels that the tab labels should be translated to the left. */\n this._scrollDistance = 0;\n /** Whether the header should scroll to the selected index after the view has been checked. */\n this._selectedIndexChanged = false;\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Whether the controls for pagination should be displayed */\n this._showPaginationControls = false;\n /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n this._disableScrollAfter = true;\n /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n this._disableScrollBefore = true;\n /** Stream that will stop the automated scrolling. */\n this._stopScrolling = new Subject();\n this._disablePagination = false;\n this._selectedIndex = 0;\n /** Event emitted when the option is selected. */\n this.selectFocusedIndex = new EventEmitter();\n /** Event emitted when a label is focused. */\n this.indexFocused = new EventEmitter();\n // Bind the `mouseleave` event on the outside since it doesn't change anything in the view.\n _ngZone.runOutsideAngular(() => {\n fromEvent(_elementRef.nativeElement, 'mouseleave')\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._stopInterval();\n });\n });\n }\n /**\n * Whether pagination should be disabled. This can be used to avoid unnecessary\n * layout recalculations if it's known that pagination won't be required.\n */\n get disablePagination() {\n return this._disablePagination;\n }\n set disablePagination(value) {\n this._disablePagination = coerceBooleanProperty(value);\n }\n /** The index of the active tab. */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(value) {\n value = coerceNumberProperty(value);\n if (this._selectedIndex != value) {\n this._selectedIndexChanged = true;\n this._selectedIndex = value;\n if (this._keyManager) {\n this._keyManager.updateActiveItem(value);\n }\n }\n }\n ngAfterViewInit() {\n // We need to handle these events manually, because we want to bind passive event listeners.\n fromEvent(this._previousPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('before');\n });\n fromEvent(this._nextPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('after');\n });\n }\n ngAfterContentInit() {\n const dirChange = this._dir ? this._dir.change : of('ltr');\n const resize = this._viewportRuler.change(150);\n const realign = () => {\n this.updatePagination();\n this._alignInkBarToSelectedTab();\n };\n this._keyManager = new FocusKeyManager(this._items)\n .withHorizontalOrientation(this._getLayoutDirection())\n .withHomeAndEnd()\n .withWrap();\n this._keyManager.updateActiveItem(this._selectedIndex);\n // Defer the first call in order to allow for slower browsers to lay out the elements.\n // This helps in cases where the user lands directly on a page with paginated tabs.\n // Note that we use `onStable` instead of `requestAnimationFrame`, because the latter\n // can hold up tests that are in a background tab.\n this._ngZone.onStable.pipe(take(1)).subscribe(realign);\n // On dir change or window resize, realign the ink bar and update the orientation of\n // the key manager if the direction has changed.\n merge(dirChange, resize, this._items.changes, this._itemsResized())\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n // We need to defer this to give the browser some time to recalculate\n // the element dimensions. The call has to be wrapped in `NgZone.run`,\n // because the viewport change handler runs outside of Angular.\n this._ngZone.run(() => {\n Promise.resolve().then(() => {\n // Clamp the scroll distance, because it can change with the number of tabs.\n this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), this._scrollDistance));\n realign();\n });\n });\n this._keyManager.withHorizontalOrientation(this._getLayoutDirection());\n });\n // If there is a change in the focus key manager we need to emit the `indexFocused`\n // event in order to provide a public event that notifies about focus changes. Also we realign\n // the tabs container by scrolling the new focused tab into the visible section.\n this._keyManager.change.pipe(takeUntil(this._destroyed)).subscribe(newFocusIndex => {\n this.indexFocused.emit(newFocusIndex);\n this._setTabFocus(newFocusIndex);\n });\n }\n /** Sends any changes that could affect the layout of the items. */\n _itemsResized() {\n if (typeof ResizeObserver !== 'function') {\n return EMPTY;\n }\n return this._items.changes.pipe(startWith(this._items), switchMap((tabItems) => new Observable((observer) => this._ngZone.runOutsideAngular(() => {\n const resizeObserver = new ResizeObserver(entries => observer.next(entries));\n tabItems.forEach(item => resizeObserver.observe(item.elementRef.nativeElement));\n return () => {\n resizeObserver.disconnect();\n };\n }))), \n // Skip the first emit since the resize observer emits when an item\n // is observed for new items when the tab is already inserted\n skip(1), \n // Skip emissions where all the elements are invisible since we don't want\n // the header to try and re-render with invalid measurements. See #25574.\n filter(entries => entries.some(e => e.contentRect.width > 0 && e.contentRect.height > 0)));\n }\n ngAfterContentChecked() {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this._tabLabelCount != this._items.length) {\n this.updatePagination();\n this._tabLabelCount = this._items.length;\n this._changeDetectorRef.markForCheck();\n }\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this._selectedIndexChanged) {\n this._scrollToLabel(this._selectedIndex);\n this._checkScrollingControls();\n this._alignInkBarToSelectedTab();\n this._selectedIndexChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this._scrollDistanceChanged) {\n this._updateTabScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this._stopScrolling.complete();\n }\n /** Handles keyboard events on the header. */\n _handleKeydown(event) {\n // We don't handle any key bindings with a modifier key.\n if (hasModifierKey(event)) {\n return;\n }\n switch (event.keyCode) {\n case ENTER:\n case SPACE:\n if (this.focusIndex !== this.selectedIndex) {\n this.selectFocusedIndex.emit(this.focusIndex);\n this._itemSelected(event);\n }\n break;\n default:\n this._keyManager.onKeydown(event);\n }\n }\n /**\n * Callback for when the MutationObserver detects that the content has changed.\n */\n _onContentChanges() {\n const textContent = this._elementRef.nativeElement.textContent;\n // We need to diff the text content of the header, because the MutationObserver callback\n // will fire even if the text content didn't change which is inefficient and is prone\n // to infinite loops if a poorly constructed expression is passed in (see #14249).\n if (textContent !== this._currentTextContent) {\n this._currentTextContent = textContent || '';\n // The content observer runs outside the `NgZone` by default, which\n // means that we need to bring the callback back in ourselves.\n this._ngZone.run(() => {\n this.updatePagination();\n this._alignInkBarToSelectedTab();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /**\n * Updates the view whether pagination should be enabled or not.\n *\n * WARNING: Calling this method can be very costly in terms of performance. It should be called\n * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n * page.\n */\n updatePagination() {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateTabScrollPosition();\n }\n /** Tracks which element has focus; used for keyboard navigation */\n get focusIndex() {\n return this._keyManager ? this._keyManager.activeItemIndex : 0;\n }\n /** When the focus index is set, we must manually send focus to the correct label */\n set focusIndex(value) {\n if (!this._isValidIndex(value) || this.focusIndex === value || !this._keyManager) {\n return;\n }\n this._keyManager.setActiveItem(value);\n }\n /**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n */\n _isValidIndex(index) {\n if (!this._items) {\n return true;\n }\n const tab = this._items ? this._items.toArray()[index] : null;\n return !!tab && !tab.disabled;\n }\n /**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n */\n _setTabFocus(tabIndex) {\n if (this._showPaginationControls) {\n this._scrollToLabel(tabIndex);\n }\n if (this._items && this._items.length) {\n this._items.toArray()[tabIndex].focus();\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const containerEl = this._tabListContainer.nativeElement;\n const dir = this._getLayoutDirection();\n if (dir == 'ltr') {\n containerEl.scrollLeft = 0;\n }\n else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n /** The layout direction of the containing app. */\n _getLayoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n _updateTabScrollPosition() {\n if (this.disablePagination) {\n return;\n }\n const scrollDistance = this.scrollDistance;\n const translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n // Don't use `translate3d` here because we don't want to create a new layer. A new layer\n // seems to cause flickering and overflow in Internet Explorer. For example, the ink bar\n // and ripples will exceed the boundaries of the visible tab bar.\n // See: https://github.com/angular/components/issues/10276\n // We round the `transform` here, because transforms with sub-pixel precision cause some\n // browsers to blur the content of the element.\n this._tabList.nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\n // Setting the `transform` on IE will change the scroll offset of the parent, causing the\n // position to be thrown off in some cases. We have to reset it ourselves to ensure that\n // it doesn't get thrown off. Note that we scope it only to IE and Edge, because messing\n // with the scroll position throws off Chrome 71+ in RTL mode (see #14689).\n if (this._platform.TRIDENT || this._platform.EDGE) {\n this._tabListContainer.nativeElement.scrollLeft = 0;\n }\n }\n /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n get scrollDistance() {\n return this._scrollDistance;\n }\n set scrollDistance(value) {\n this._scrollTo(value);\n }\n /**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollHeader(direction) {\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n // Move the scroll distance one-third the length of the tab list's viewport.\n const scrollAmount = ((direction == 'before' ? -1 : 1) * viewLength) / 3;\n return this._scrollTo(this._scrollDistance + scrollAmount);\n }\n /** Handles click events on the pagination arrows. */\n _handlePaginatorClick(direction) {\n this._stopInterval();\n this._scrollHeader(direction);\n }\n /**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollToLabel(labelIndex) {\n if (this.disablePagination) {\n return;\n }\n const selectedLabel = this._items ? this._items.toArray()[labelIndex] : null;\n if (!selectedLabel) {\n return;\n }\n // The view length is the visible width of the tab labels.\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n const { offsetLeft, offsetWidth } = selectedLabel.elementRef.nativeElement;\n let labelBeforePos, labelAfterPos;\n if (this._getLayoutDirection() == 'ltr') {\n labelBeforePos = offsetLeft;\n labelAfterPos = labelBeforePos + offsetWidth;\n }\n else {\n labelAfterPos = this._tabListInner.nativeElement.offsetWidth - offsetLeft;\n labelBeforePos = labelAfterPos - offsetWidth;\n }\n const beforeVisiblePos = this.scrollDistance;\n const afterVisiblePos = this.scrollDistance + viewLength;\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos + EXAGGERATED_OVERSCROLL;\n }\n else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += labelAfterPos - afterVisiblePos + EXAGGERATED_OVERSCROLL;\n }\n }\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkPaginationEnabled() {\n if (this.disablePagination) {\n this._showPaginationControls = false;\n }\n else {\n const isEnabled = this._tabListInner.nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n if (isEnabled !== this._showPaginationControls) {\n this._changeDetectorRef.markForCheck();\n }\n this._showPaginationControls = isEnabled;\n }\n }\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkScrollingControls() {\n if (this.disablePagination) {\n this._disableScrollAfter = this._disableScrollBefore = true;\n }\n else {\n // Check if the pagination arrows should be activated.\n this._disableScrollBefore = this.scrollDistance == 0;\n this._disableScrollAfter = this.scrollDistance == this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _getMaxScrollDistance() {\n const lengthOfTabList = this._tabListInner.nativeElement.scrollWidth;\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n return lengthOfTabList - viewLength || 0;\n }\n /** Tells the ink-bar to align itself to the current label wrapper */\n _alignInkBarToSelectedTab() {\n const selectedItem = this._items && this._items.length ? this._items.toArray()[this.selectedIndex] : null;\n const selectedLabelWrapper = selectedItem ? selectedItem.elementRef.nativeElement : null;\n if (selectedLabelWrapper) {\n this._inkBar.alignToElement(selectedLabelWrapper);\n }\n else {\n this._inkBar.hide();\n }\n }\n /** Stops the currently-running paginator interval. */\n _stopInterval() {\n this._stopScrolling.next();\n }\n /**\n * Handles the user pressing down on one of the paginators.\n * Starts scrolling the header after a certain amount of time.\n * @param direction In which direction the paginator should be scrolled.\n */\n _handlePaginatorPress(direction, mouseEvent) {\n // Don't start auto scrolling for right mouse button clicks. Note that we shouldn't have to\n // null check the `button`, but we do it so we don't break tests that use fake events.\n if (mouseEvent && mouseEvent.button != null && mouseEvent.button !== 0) {\n return;\n }\n // Avoid overlapping timers.\n this._stopInterval();\n // Start a timer after the delay and keep firing based on the interval.\n timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)\n // Keep the timer going until something tells it to stop or the component is destroyed.\n .pipe(takeUntil(merge(this._stopScrolling, this._destroyed)))\n .subscribe(() => {\n const { maxScrollDistance, distance } = this._scrollHeader(direction);\n // Stop the timer if we've reached the start or the end.\n if (distance === 0 || distance >= maxScrollDistance) {\n this._stopInterval();\n }\n });\n }\n /**\n * Scrolls the header to a given position.\n * @param position Position to which to scroll.\n * @returns Information on the current scroll distance and the maximum.\n */\n _scrollTo(position) {\n if (this.disablePagination) {\n return { maxScrollDistance: 0, distance: 0 };\n }\n const maxScrollDistance = this._getMaxScrollDistance();\n this._scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n return { maxScrollDistance, distance: this._scrollDistance };\n }\n}\nMatPaginatedTabHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatPaginatedTabHeader, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatPaginatedTabHeader.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatPaginatedTabHeader, inputs: { disablePagination: \"disablePagination\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatPaginatedTabHeader, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { disablePagination: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Base class with all of the `MatTabHeader` functionality.\n * @docs-private\n */\nclass _MatTabHeaderBase extends MatPaginatedTabHeader {\n constructor(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode) {\n super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode);\n this._disableRipple = false;\n }\n /** Whether the ripple effect is disabled or not. */\n get disableRipple() {\n return this._disableRipple;\n }\n set disableRipple(value) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n _itemSelected(event) {\n event.preventDefault();\n }\n}\n_MatTabHeaderBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabHeaderBase, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabHeaderBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatTabHeaderBase, inputs: { disableRipple: \"disableRipple\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabHeaderBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { disableRipple: [{\n type: Input\n }] } });\n/**\n * The header of the tab group which displays a list of all the tabs in the tab group. Includes\n * an ink bar that follows the currently selected tab. When the tabs list's width exceeds the\n * width of the header container, then arrows will be displayed to allow the user to scroll\n * left and right across the header.\n * @docs-private\n */\nclass MatTabHeader extends _MatTabHeaderBase {\n constructor(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode) {\n super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode);\n }\n}\nMatTabHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabHeader, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTabHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabHeader, selector: \"mat-tab-header\", inputs: { selectedIndex: \"selectedIndex\" }, outputs: { selectFocusedIndex: \"selectFocusedIndex\", indexFocused: \"indexFocused\" }, host: { properties: { \"class.mat-tab-header-pagination-controls-enabled\": \"_showPaginationControls\", \"class.mat-tab-header-rtl\": \"_getLayoutDirection() == 'rtl'\" }, classAttribute: \"mat-tab-header\" }, queries: [{ propertyName: \"_items\", predicate: MatTabLabelWrapper }], viewQueries: [{ propertyName: \"_inkBar\", first: true, predicate: MatInkBar, descendants: true, static: true }, { propertyName: \"_tabListContainer\", first: true, predicate: [\"tabListContainer\"], descendants: true, static: true }, { propertyName: \"_tabList\", first: true, predicate: [\"tabList\"], descendants: true, static: true }, { propertyName: \"_tabListInner\", first: true, predicate: [\"tabListInner\"], descendants: true, static: true }, { propertyName: \"_nextPaginator\", first: true, predicate: [\"nextPaginator\"], descendants: true }, { propertyName: \"_previousPaginator\", first: true, predicate: [\"previousPaginator\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n\\n
\\n \\n
\\n \\n
\\n \\n
\\n\\n\\n\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-labels{display:flex}[mat-align-tabs=center]>.mat-tab-header .mat-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-tab-header .mat-tab-labels{justify-content:flex-end}.mat-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-list._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}.mat-tab-label::before{margin:5px}@media(max-width: 599px){.mat-tab-label{min-width:72px}}\"], dependencies: [{ kind: \"directive\", type: i4.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }, { kind: \"directive\", type: i5.CdkObserveContent, selector: \"[cdkObserveContent]\", inputs: [\"cdkObserveContentDisabled\", \"debounce\"], outputs: [\"cdkObserveContent\"], exportAs: [\"cdkObserveContent\"] }, { kind: \"directive\", type: MatInkBar, selector: \"mat-ink-bar\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabHeader, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab-header', inputs: ['selectedIndex'], outputs: ['selectFocusedIndex', 'indexFocused'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, host: {\n 'class': 'mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n }, template: \"\\n\\n
\\n \\n
\\n \\n
\\n \\n
\\n\\n\\n\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-labels{display:flex}[mat-align-tabs=center]>.mat-tab-header .mat-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-tab-header .mat-tab-labels{justify-content:flex-end}.mat-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-list._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}.mat-tab-label::before{margin:5px}@media(max-width: 599px){.mat-tab-label{min-width:72px}}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { _items: [{\n type: ContentChildren,\n args: [MatTabLabelWrapper, { descendants: false }]\n }], _inkBar: [{\n type: ViewChild,\n args: [MatInkBar, { static: true }]\n }], _tabListContainer: [{\n type: ViewChild,\n args: ['tabListContainer', { static: true }]\n }], _tabList: [{\n type: ViewChild,\n args: ['tabList', { static: true }]\n }], _tabListInner: [{\n type: ViewChild,\n args: ['tabListInner', { static: true }]\n }], _nextPaginator: [{\n type: ViewChild,\n args: ['nextPaginator']\n }], _previousPaginator: [{\n type: ViewChild,\n args: ['previousPaginator']\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate unique ID's for each tab component */\nlet nextId = 0;\n/** A simple change event emitted on focus or selection changes. */\nclass MatTabChangeEvent {\n}\n// Boilerplate for applying mixins to MatTabGroup.\n/** @docs-private */\nconst _MatTabGroupMixinBase = mixinColor(mixinDisableRipple(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}), 'primary');\n/**\n * Base class with all of the `MatTabGroupBase` functionality.\n * @docs-private\n */\nclass _MatTabGroupBase extends _MatTabGroupMixinBase {\n constructor(elementRef, _changeDetectorRef, defaultConfig, _animationMode) {\n super(elementRef);\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** All of the tabs that belong to the group. */\n this._tabs = new QueryList();\n /** The tab index that should be selected after the content has been checked. */\n this._indexToSelect = 0;\n /** Index of the tab that was focused last. */\n this._lastFocusedTabIndex = null;\n /** Snapshot of the height of the tab body wrapper before another tab is activated. */\n this._tabBodyWrapperHeight = 0;\n /** Subscription to tabs being added/removed. */\n this._tabsSubscription = Subscription.EMPTY;\n /** Subscription to changes in the tab labels. */\n this._tabLabelSubscription = Subscription.EMPTY;\n this._dynamicHeight = false;\n this._selectedIndex = null;\n /** Position of the tab header. */\n this.headerPosition = 'above';\n this._disablePagination = false;\n this._preserveContent = false;\n /** Output to enable support for two-way binding on `[(selectedIndex)]` */\n this.selectedIndexChange = new EventEmitter();\n /** Event emitted when focus has changed within a tab group. */\n this.focusChange = new EventEmitter();\n /** Event emitted when the body animation has completed */\n this.animationDone = new EventEmitter();\n /** Event emitted when the tab selection has changed. */\n this.selectedTabChange = new EventEmitter(true);\n this._groupId = nextId++;\n this.animationDuration =\n defaultConfig && defaultConfig.animationDuration ? defaultConfig.animationDuration : '500ms';\n this.disablePagination =\n defaultConfig && defaultConfig.disablePagination != null\n ? defaultConfig.disablePagination\n : false;\n this.dynamicHeight =\n defaultConfig && defaultConfig.dynamicHeight != null ? defaultConfig.dynamicHeight : false;\n this.contentTabIndex = defaultConfig?.contentTabIndex ?? null;\n this.preserveContent = !!defaultConfig?.preserveContent;\n }\n /** Whether the tab group should grow to the size of the active tab. */\n get dynamicHeight() {\n return this._dynamicHeight;\n }\n set dynamicHeight(value) {\n this._dynamicHeight = coerceBooleanProperty(value);\n }\n /** The index of the active tab. */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(value) {\n this._indexToSelect = coerceNumberProperty(value, null);\n }\n /** Duration for the tab animation. Will be normalized to milliseconds if no units are set. */\n get animationDuration() {\n return this._animationDuration;\n }\n set animationDuration(value) {\n this._animationDuration = /^\\d+$/.test(value + '') ? value + 'ms' : value;\n }\n /**\n * `tabindex` to be set on the inner element that wraps the tab content. Can be used for improved\n * accessibility when the tab does not have focusable elements or if it has scrollable content.\n * The `tabindex` will be removed automatically for inactive tabs.\n * Read more at https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-2/tabs.html\n */\n get contentTabIndex() {\n return this._contentTabIndex;\n }\n set contentTabIndex(value) {\n this._contentTabIndex = coerceNumberProperty(value, null);\n }\n /**\n * Whether pagination should be disabled. This can be used to avoid unnecessary\n * layout recalculations if it's known that pagination won't be required.\n */\n get disablePagination() {\n return this._disablePagination;\n }\n set disablePagination(value) {\n this._disablePagination = coerceBooleanProperty(value);\n }\n /**\n * By default tabs remove their content from the DOM while it's off-screen.\n * Setting this to `true` will keep it in the DOM which will prevent elements\n * like iframes and videos from reloading next time it comes back into the view.\n */\n get preserveContent() {\n return this._preserveContent;\n }\n set preserveContent(value) {\n this._preserveContent = coerceBooleanProperty(value);\n }\n /** Background color of the tab group. */\n get backgroundColor() {\n return this._backgroundColor;\n }\n set backgroundColor(value) {\n const nativeElement = this._elementRef.nativeElement;\n nativeElement.classList.remove(`mat-background-${this.backgroundColor}`);\n if (value) {\n nativeElement.classList.add(`mat-background-${value}`);\n }\n this._backgroundColor = value;\n }\n /**\n * After the content is checked, this component knows what tabs have been defined\n * and what the selected index should be. This is where we can know exactly what position\n * each tab should be in according to the new selected index, and additionally we know how\n * a new selected tab should transition in (from the left or right).\n */\n ngAfterContentChecked() {\n // Don't clamp the `indexToSelect` immediately in the setter because it can happen that\n // the amount of tabs changes before the actual change detection runs.\n const indexToSelect = (this._indexToSelect = this._clampTabIndex(this._indexToSelect));\n // If there is a change in selected index, emit a change event. Should not trigger if\n // the selected index has not yet been initialized.\n if (this._selectedIndex != indexToSelect) {\n const isFirstRun = this._selectedIndex == null;\n if (!isFirstRun) {\n this.selectedTabChange.emit(this._createChangeEvent(indexToSelect));\n // Preserve the height so page doesn't scroll up during tab change.\n // Fixes https://stackblitz.com/edit/mat-tabs-scroll-page-top-on-tab-change\n const wrapper = this._tabBodyWrapper.nativeElement;\n wrapper.style.minHeight = wrapper.clientHeight + 'px';\n }\n // Changing these values after change detection has run\n // since the checked content may contain references to them.\n Promise.resolve().then(() => {\n this._tabs.forEach((tab, index) => (tab.isActive = index === indexToSelect));\n if (!isFirstRun) {\n this.selectedIndexChange.emit(indexToSelect);\n // Clear the min-height, this was needed during tab change to avoid\n // unnecessary scrolling.\n this._tabBodyWrapper.nativeElement.style.minHeight = '';\n }\n });\n }\n // Setup the position for each tab and optionally setup an origin on the next selected tab.\n this._tabs.forEach((tab, index) => {\n tab.position = index - indexToSelect;\n // If there is already a selected tab, then set up an origin for the next selected tab\n // if it doesn't have one already.\n if (this._selectedIndex != null && tab.position == 0 && !tab.origin) {\n tab.origin = indexToSelect - this._selectedIndex;\n }\n });\n if (this._selectedIndex !== indexToSelect) {\n this._selectedIndex = indexToSelect;\n this._lastFocusedTabIndex = null;\n this._changeDetectorRef.markForCheck();\n }\n }\n ngAfterContentInit() {\n this._subscribeToAllTabChanges();\n this._subscribeToTabLabels();\n // Subscribe to changes in the amount of tabs, in order to be\n // able to re-render the content as new tabs are added or removed.\n this._tabsSubscription = this._tabs.changes.subscribe(() => {\n const indexToSelect = this._clampTabIndex(this._indexToSelect);\n // Maintain the previously-selected tab if a new tab is added or removed and there is no\n // explicit change that selects a different tab.\n if (indexToSelect === this._selectedIndex) {\n const tabs = this._tabs.toArray();\n let selectedTab;\n for (let i = 0; i < tabs.length; i++) {\n if (tabs[i].isActive) {\n // Assign both to the `_indexToSelect` and `_selectedIndex` so we don't fire a changed\n // event, otherwise the consumer may end up in an infinite loop in some edge cases like\n // adding a tab within the `selectedIndexChange` event.\n this._indexToSelect = this._selectedIndex = i;\n this._lastFocusedTabIndex = null;\n selectedTab = tabs[i];\n break;\n }\n }\n // If we haven't found an active tab and a tab exists at the selected index, it means\n // that the active tab was swapped out. Since this won't be picked up by the rendering\n // loop in `ngAfterContentChecked`, we need to sync it up manually.\n if (!selectedTab && tabs[indexToSelect]) {\n Promise.resolve().then(() => {\n tabs[indexToSelect].isActive = true;\n this.selectedTabChange.emit(this._createChangeEvent(indexToSelect));\n });\n }\n }\n this._changeDetectorRef.markForCheck();\n });\n }\n /** Listens to changes in all of the tabs. */\n _subscribeToAllTabChanges() {\n // Since we use a query with `descendants: true` to pick up the tabs, we may end up catching\n // some that are inside of nested tab groups. We filter them out manually by checking that\n // the closest group to the tab is the current one.\n this._allTabs.changes.pipe(startWith(this._allTabs)).subscribe((tabs) => {\n this._tabs.reset(tabs.filter(tab => {\n return tab._closestTabGroup === this || !tab._closestTabGroup;\n }));\n this._tabs.notifyOnChanges();\n });\n }\n ngOnDestroy() {\n this._tabs.destroy();\n this._tabsSubscription.unsubscribe();\n this._tabLabelSubscription.unsubscribe();\n }\n /** Re-aligns the ink bar to the selected tab element. */\n realignInkBar() {\n if (this._tabHeader) {\n this._tabHeader._alignInkBarToSelectedTab();\n }\n }\n /**\n * Recalculates the tab group's pagination dimensions.\n *\n * WARNING: Calling this method can be very costly in terms of performance. It should be called\n * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n * page.\n */\n updatePagination() {\n if (this._tabHeader) {\n this._tabHeader.updatePagination();\n }\n }\n /**\n * Sets focus to a particular tab.\n * @param index Index of the tab to be focused.\n */\n focusTab(index) {\n const header = this._tabHeader;\n if (header) {\n header.focusIndex = index;\n }\n }\n _focusChanged(index) {\n this._lastFocusedTabIndex = index;\n this.focusChange.emit(this._createChangeEvent(index));\n }\n _createChangeEvent(index) {\n const event = new MatTabChangeEvent();\n event.index = index;\n if (this._tabs && this._tabs.length) {\n event.tab = this._tabs.toArray()[index];\n }\n return event;\n }\n /**\n * Subscribes to changes in the tab labels. This is needed, because the @Input for the label is\n * on the MatTab component, whereas the data binding is inside the MatTabGroup. In order for the\n * binding to be updated, we need to subscribe to changes in it and trigger change detection\n * manually.\n */\n _subscribeToTabLabels() {\n if (this._tabLabelSubscription) {\n this._tabLabelSubscription.unsubscribe();\n }\n this._tabLabelSubscription = merge(...this._tabs.map(tab => tab._stateChanges)).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n /** Clamps the given index to the bounds of 0 and the tabs length. */\n _clampTabIndex(index) {\n // Note the `|| 0`, which ensures that values like NaN can't get through\n // and which would otherwise throw the component into an infinite loop\n // (since Math.max(NaN, 0) === NaN).\n return Math.min(this._tabs.length - 1, Math.max(index || 0, 0));\n }\n /** Returns a unique id for each tab label element */\n _getTabLabelId(i) {\n return `mat-tab-label-${this._groupId}-${i}`;\n }\n /** Returns a unique id for each tab content element */\n _getTabContentId(i) {\n return `mat-tab-content-${this._groupId}-${i}`;\n }\n /**\n * Sets the height of the body wrapper to the height of the activating tab if dynamic\n * height property is true.\n */\n _setTabBodyWrapperHeight(tabHeight) {\n if (!this._dynamicHeight || !this._tabBodyWrapperHeight) {\n return;\n }\n const wrapper = this._tabBodyWrapper.nativeElement;\n wrapper.style.height = this._tabBodyWrapperHeight + 'px';\n // This conditional forces the browser to paint the height so that\n // the animation to the new height can have an origin.\n if (this._tabBodyWrapper.nativeElement.offsetHeight) {\n wrapper.style.height = tabHeight + 'px';\n }\n }\n /** Removes the height of the tab body wrapper. */\n _removeTabBodyWrapperHeight() {\n const wrapper = this._tabBodyWrapper.nativeElement;\n this._tabBodyWrapperHeight = wrapper.clientHeight;\n wrapper.style.height = '';\n this.animationDone.emit();\n }\n /** Handle click events, setting new selected index if appropriate. */\n _handleClick(tab, tabHeader, index) {\n if (!tab.disabled) {\n this.selectedIndex = tabHeader.focusIndex = index;\n }\n }\n /** Retrieves the tabindex for the tab. */\n _getTabIndex(tab, index) {\n if (tab.disabled) {\n return null;\n }\n const targetIndex = this._lastFocusedTabIndex ?? this.selectedIndex;\n return index === targetIndex ? 0 : -1;\n }\n /** Callback for when the focused state of a tab has changed. */\n _tabFocusChanged(focusOrigin, index) {\n // Mouse/touch focus happens during the `mousedown`/`touchstart` phase which\n // can cause the tab to be moved out from under the pointer, interrupting the\n // click sequence (see #21898). We don't need to scroll the tab into view for\n // such cases anyway, because it will be done when the tab becomes selected.\n if (focusOrigin && focusOrigin !== 'mouse' && focusOrigin !== 'touch') {\n this._tabHeader.focusIndex = index;\n }\n }\n}\n_MatTabGroupBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabGroupBase, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: MAT_TABS_CONFIG, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabGroupBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatTabGroupBase, inputs: { dynamicHeight: \"dynamicHeight\", selectedIndex: \"selectedIndex\", headerPosition: \"headerPosition\", animationDuration: \"animationDuration\", contentTabIndex: \"contentTabIndex\", disablePagination: \"disablePagination\", preserveContent: \"preserveContent\", backgroundColor: \"backgroundColor\" }, outputs: { selectedIndexChange: \"selectedIndexChange\", focusChange: \"focusChange\", animationDone: \"animationDone\", selectedTabChange: \"selectedTabChange\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabGroupBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TABS_CONFIG]\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { dynamicHeight: [{\n type: Input\n }], selectedIndex: [{\n type: Input\n }], headerPosition: [{\n type: Input\n }], animationDuration: [{\n type: Input\n }], contentTabIndex: [{\n type: Input\n }], disablePagination: [{\n type: Input\n }], preserveContent: [{\n type: Input\n }], backgroundColor: [{\n type: Input\n }], selectedIndexChange: [{\n type: Output\n }], focusChange: [{\n type: Output\n }], animationDone: [{\n type: Output\n }], selectedTabChange: [{\n type: Output\n }] } });\n/**\n * Material design tab-group component. Supports basic tab pairs (label + content) and includes\n * animated ink-bar, keyboard navigation, and screen reader.\n * See: https://material.io/design/components/tabs.html\n */\nclass MatTabGroup extends _MatTabGroupBase {\n constructor(elementRef, changeDetectorRef, defaultConfig, animationMode) {\n super(elementRef, changeDetectorRef, defaultConfig, animationMode);\n }\n}\nMatTabGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabGroup, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: MAT_TABS_CONFIG, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTabGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabGroup, selector: \"mat-tab-group\", inputs: { color: \"color\", disableRipple: \"disableRipple\" }, host: { properties: { \"class.mat-tab-group-dynamic-height\": \"dynamicHeight\", \"class.mat-tab-group-inverted-header\": \"headerPosition === \\\"below\\\"\" }, classAttribute: \"mat-tab-group\" }, providers: [\n {\n provide: MAT_TAB_GROUP,\n useExisting: MatTabGroup,\n },\n ], queries: [{ propertyName: \"_allTabs\", predicate: MatTab, descendants: true }], viewQueries: [{ propertyName: \"_tabBodyWrapper\", first: true, predicate: [\"tabBodyWrapper\"], descendants: true }, { propertyName: \"_tabHeader\", first: true, predicate: [\"tabHeader\"], descendants: true }], exportAs: [\"matTabGroup\"], usesInheritance: true, ngImport: i0, template: \"\\n
\\n\\n\\n
\\n \\n \\n \\n \\n\\n \\n {{tab.textLabel}}\\n
\\n
\\n
\\n\\n\\n \\n \\n\\n\", styles: [\".mat-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-tab-group.mat-tab-group-inverted-header{flex-direction:column-reverse}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}@media(max-width: 599px){.mat-tab-label{padding:0 12px}}@media(max-width: 959px){.mat-tab-label{padding:0 12px}}.mat-tab-group[mat-stretch-tabs]>.mat-tab-header .mat-tab-label{flex-basis:0;flex-grow:1}.mat-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-tab-body.mat-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-tab-group.mat-tab-group-dynamic-height .mat-tab-body.mat-tab-body-active{overflow-y:hidden}\"], dependencies: [{ kind: \"directive\", type: i1$2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }, { kind: \"directive\", type: i4.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }, { kind: \"directive\", type: i7.CdkMonitorFocus, selector: \"[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]\", outputs: [\"cdkFocusChange\"], exportAs: [\"cdkMonitorFocus\"] }, { kind: \"directive\", type: MatTabLabelWrapper, selector: \"[matTabLabelWrapper]\", inputs: [\"disabled\"] }, { kind: \"component\", type: MatTabBody, selector: \"mat-tab-body\" }, { kind: \"component\", type: MatTabHeader, selector: \"mat-tab-header\", inputs: [\"selectedIndex\"], outputs: [\"selectFocusedIndex\", \"indexFocused\"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabGroup, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tab-group', exportAs: 'matTabGroup', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, inputs: ['color', 'disableRipple'], providers: [\n {\n provide: MAT_TAB_GROUP,\n useExisting: MatTabGroup,\n },\n ], host: {\n 'class': 'mat-tab-group',\n '[class.mat-tab-group-dynamic-height]': 'dynamicHeight',\n '[class.mat-tab-group-inverted-header]': 'headerPosition === \"below\"',\n }, template: \"\\n
\\n\\n\\n
\\n \\n \\n \\n \\n\\n \\n {{tab.textLabel}}\\n
\\n
\\n
\\n\\n\\n \\n \\n\\n\", styles: [\".mat-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-tab-group.mat-tab-group-inverted-header{flex-direction:column-reverse}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:none}.mat-tab-label:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-label.mat-tab-disabled{opacity:.5}.mat-tab-label .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-label{opacity:1}@media(max-width: 599px){.mat-tab-label{padding:0 12px}}@media(max-width: 959px){.mat-tab-label{padding:0 12px}}.mat-tab-group[mat-stretch-tabs]>.mat-tab-header .mat-tab-label{flex-basis:0;flex-grow:1}.mat-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-tab-body.mat-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-tab-group.mat-tab-group-dynamic-height .mat-tab-body.mat-tab-body-active{overflow-y:hidden}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TABS_CONFIG]\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { _allTabs: [{\n type: ContentChildren,\n args: [MatTab, { descendants: true }]\n }], _tabBodyWrapper: [{\n type: ViewChild,\n args: ['tabBodyWrapper']\n }], _tabHeader: [{\n type: ViewChild,\n args: ['tabHeader']\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Increasing integer for generating unique ids for tab nav components.\nlet nextUniqueId = 0;\n/**\n * Base class with all of the `MatTabNav` functionality.\n * @docs-private\n */\nclass _MatTabNavBase extends MatPaginatedTabHeader {\n constructor(elementRef, dir, ngZone, changeDetectorRef, viewportRuler, platform, animationMode) {\n super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode);\n this._disableRipple = false;\n /** Theme color of the nav bar. */\n this.color = 'primary';\n }\n /** Background color of the tab nav. */\n get backgroundColor() {\n return this._backgroundColor;\n }\n set backgroundColor(value) {\n const classList = this._elementRef.nativeElement.classList;\n classList.remove(`mat-background-${this.backgroundColor}`);\n if (value) {\n classList.add(`mat-background-${value}`);\n }\n this._backgroundColor = value;\n }\n /** Whether the ripple effect is disabled or not. */\n get disableRipple() {\n return this._disableRipple;\n }\n set disableRipple(value) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n _itemSelected() {\n // noop\n }\n ngAfterContentInit() {\n // We need this to run before the `changes` subscription in parent to ensure that the\n // selectedIndex is up-to-date by the time the super class starts looking for it.\n this._items.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\n this.updateActiveLink();\n });\n super.ngAfterContentInit();\n }\n /** Notifies the component that the active link has been changed. */\n updateActiveLink() {\n if (!this._items) {\n return;\n }\n const items = this._items.toArray();\n for (let i = 0; i < items.length; i++) {\n if (items[i].active) {\n this.selectedIndex = i;\n this._changeDetectorRef.markForCheck();\n if (this.tabPanel) {\n this.tabPanel._activeTabId = items[i].id;\n }\n return;\n }\n }\n // The ink bar should hide itself if no items are active.\n this.selectedIndex = -1;\n this._inkBar.hide();\n }\n _getRole() {\n return this.tabPanel ? 'tablist' : this._elementRef.nativeElement.getAttribute('role');\n }\n}\n_MatTabNavBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabNavBase, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabNavBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatTabNavBase, inputs: { backgroundColor: \"backgroundColor\", disableRipple: \"disableRipple\", color: \"color\", tabPanel: \"tabPanel\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabNavBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { backgroundColor: [{\n type: Input\n }], disableRipple: [{\n type: Input\n }], color: [{\n type: Input\n }], tabPanel: [{\n type: Input\n }] } });\n/**\n * Navigation component matching the styles of the tab group header.\n * Provides anchored navigation with animated ink bar.\n */\nclass MatTabNav extends _MatTabNavBase {\n constructor(elementRef, dir, ngZone, changeDetectorRef, viewportRuler, platform, animationMode) {\n super(elementRef, dir, ngZone, changeDetectorRef, viewportRuler, platform, animationMode);\n }\n}\nMatTabNav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabNav, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1$1.ViewportRuler }, { token: i3.Platform }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatTabNav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabNav, selector: \"[mat-tab-nav-bar]\", inputs: { color: \"color\" }, host: { properties: { \"attr.role\": \"_getRole()\", \"class.mat-tab-header-pagination-controls-enabled\": \"_showPaginationControls\", \"class.mat-tab-header-rtl\": \"_getLayoutDirection() == 'rtl'\", \"class.mat-primary\": \"color !== \\\"warn\\\" && color !== \\\"accent\\\"\", \"class.mat-accent\": \"color === \\\"accent\\\"\", \"class.mat-warn\": \"color === \\\"warn\\\"\" }, classAttribute: \"mat-tab-nav-bar mat-tab-header\" }, queries: [{ propertyName: \"_items\", predicate: i0.forwardRef(function () { return MatTabLink; }), descendants: true }], viewQueries: [{ propertyName: \"_inkBar\", first: true, predicate: MatInkBar, descendants: true, static: true }, { propertyName: \"_tabListContainer\", first: true, predicate: [\"tabListContainer\"], descendants: true, static: true }, { propertyName: \"_tabList\", first: true, predicate: [\"tabList\"], descendants: true, static: true }, { propertyName: \"_tabListInner\", first: true, predicate: [\"tabListInner\"], descendants: true, static: true }, { propertyName: \"_nextPaginator\", first: true, predicate: [\"nextPaginator\"], descendants: true }, { propertyName: \"_previousPaginator\", first: true, predicate: [\"previousPaginator\"], descendants: true }], exportAs: [\"matTabNavBar\", \"matTabNav\"], usesInheritance: true, ngImport: i0, template: \"\\n\\n\\n\\n\\n\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-tab-links{display:flex}[mat-align-tabs=center]>.mat-tab-link-container .mat-tab-links{justify-content:center}[mat-align-tabs=end]>.mat-tab-link-container .mat-tab-links{justify-content:flex-end}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-link-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-link{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;vertical-align:top;text-decoration:none;position:relative;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-tab-link:focus{outline:none}.mat-tab-link:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-link.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-link.mat-tab-disabled{opacity:.5}.mat-tab-link .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-link{opacity:1}[mat-stretch-tabs] .mat-tab-link{flex-basis:0;flex-grow:1}.mat-tab-link.mat-tab-disabled{pointer-events:none}.mat-tab-link::before{margin:5px}@media(max-width: 599px){.mat-tab-link{min-width:72px}}\"], dependencies: [{ kind: \"directive\", type: i4.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }, { kind: \"directive\", type: i5.CdkObserveContent, selector: \"[cdkObserveContent]\", inputs: [\"cdkObserveContentDisabled\", \"debounce\"], outputs: [\"cdkObserveContent\"], exportAs: [\"cdkObserveContent\"] }, { kind: \"directive\", type: MatInkBar, selector: \"mat-ink-bar\" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabNav, decorators: [{\n type: Component,\n args: [{ selector: '[mat-tab-nav-bar]', exportAs: 'matTabNavBar, matTabNav', inputs: ['color'], host: {\n '[attr.role]': '_getRole()',\n 'class': 'mat-tab-nav-bar mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n '[class.mat-primary]': 'color !== \"warn\" && color !== \"accent\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, template: \"\\n\\n\\n\\n\\n\\n\", styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-tab-header-pagination::-moz-focus-inner{border:0}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-rtl .mat-tab-header-pagination-before,.mat-tab-header-pagination-after{padding-right:4px}.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-tab-links{display:flex}[mat-align-tabs=center]>.mat-tab-link-container .mat-tab-links{justify-content:center}[mat-align-tabs=end]>.mat-tab-link-container .mat-tab-links{justify-content:flex-end}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-ink-bar._mat-animation-noopable{transition:none !important;animation:none !important}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.cdk-high-contrast-active .mat-ink-bar{outline:solid 2px;height:0}.mat-tab-link-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-link{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;vertical-align:top;text-decoration:none;position:relative;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-tab-link:focus{outline:none}.mat-tab-link:focus:not(.mat-tab-disabled){opacity:1}.mat-tab-link.mat-tab-disabled{cursor:default}.cdk-high-contrast-active .mat-tab-link.mat-tab-disabled{opacity:.5}.mat-tab-link .mat-tab-label-content{display:inline-flex;justify-content:center;align-items:center;white-space:nowrap}.cdk-high-contrast-active .mat-tab-link{opacity:1}[mat-stretch-tabs] .mat-tab-link{flex-basis:0;flex-grow:1}.mat-tab-link.mat-tab-disabled{pointer-events:none}.mat-tab-link::before{margin:5px}@media(max-width: 599px){.mat-tab-link{min-width:72px}}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1$1.ViewportRuler }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { _items: [{\n type: ContentChildren,\n args: [forwardRef(() => MatTabLink), { descendants: true }]\n }], _inkBar: [{\n type: ViewChild,\n args: [MatInkBar, { static: true }]\n }], _tabListContainer: [{\n type: ViewChild,\n args: ['tabListContainer', { static: true }]\n }], _tabList: [{\n type: ViewChild,\n args: ['tabList', { static: true }]\n }], _tabListInner: [{\n type: ViewChild,\n args: ['tabListInner', { static: true }]\n }], _nextPaginator: [{\n type: ViewChild,\n args: ['nextPaginator']\n }], _previousPaginator: [{\n type: ViewChild,\n args: ['previousPaginator']\n }] } });\n// Boilerplate for applying mixins to MatTabLink.\nconst _MatTabLinkMixinBase = mixinTabIndex(mixinDisableRipple(mixinDisabled(class {\n})));\n/** Base class with all of the `MatTabLink` functionality. */\nclass _MatTabLinkBase extends _MatTabLinkMixinBase {\n constructor(_tabNavBar, \n /** @docs-private */ elementRef, globalRippleOptions, tabIndex, _focusMonitor, animationMode) {\n super();\n this._tabNavBar = _tabNavBar;\n this.elementRef = elementRef;\n this._focusMonitor = _focusMonitor;\n /** Whether the tab link is active or not. */\n this._isActive = false;\n /** Unique id for the tab. */\n this.id = `mat-tab-link-${nextUniqueId++}`;\n this.rippleConfig = globalRippleOptions || {};\n this.tabIndex = parseInt(tabIndex) || 0;\n if (animationMode === 'NoopAnimations') {\n this.rippleConfig.animation = { enterDuration: 0, exitDuration: 0 };\n }\n }\n /** Whether the link is active. */\n get active() {\n return this._isActive;\n }\n set active(value) {\n const newValue = coerceBooleanProperty(value);\n if (newValue !== this._isActive) {\n this._isActive = newValue;\n this._tabNavBar.updateActiveLink();\n }\n }\n /**\n * Whether ripples are disabled on interaction.\n * @docs-private\n */\n get rippleDisabled() {\n return (this.disabled ||\n this.disableRipple ||\n this._tabNavBar.disableRipple ||\n !!this.rippleConfig.disabled);\n }\n /** Focuses the tab link. */\n focus() {\n this.elementRef.nativeElement.focus();\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this.elementRef);\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this.elementRef);\n }\n _handleFocus() {\n // Since we allow navigation through tabbing in the nav bar, we\n // have to update the focused index whenever the link receives focus.\n this._tabNavBar.focusIndex = this._tabNavBar._items.toArray().indexOf(this);\n }\n _handleKeydown(event) {\n if (this._tabNavBar.tabPanel && event.keyCode === SPACE) {\n this.elementRef.nativeElement.click();\n }\n }\n _getAriaControls() {\n return this._tabNavBar.tabPanel\n ? this._tabNavBar.tabPanel?.id\n : this.elementRef.nativeElement.getAttribute('aria-controls');\n }\n _getAriaSelected() {\n if (this._tabNavBar.tabPanel) {\n return this.active ? 'true' : 'false';\n }\n else {\n return this.elementRef.nativeElement.getAttribute('aria-selected');\n }\n }\n _getAriaCurrent() {\n return this.active && !this._tabNavBar.tabPanel ? 'page' : null;\n }\n _getRole() {\n return this._tabNavBar.tabPanel ? 'tab' : this.elementRef.nativeElement.getAttribute('role');\n }\n _getTabIndex() {\n if (this._tabNavBar.tabPanel) {\n return this._isActive && !this.disabled ? 0 : -1;\n }\n else {\n return this.tabIndex;\n }\n }\n}\n_MatTabLinkBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabLinkBase, deps: [{ token: _MatTabNavBase }, { token: i0.ElementRef }, { token: MAT_RIPPLE_GLOBAL_OPTIONS, optional: true }, { token: 'tabindex', attribute: true }, { token: i7.FocusMonitor }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatTabLinkBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: _MatTabLinkBase, inputs: { active: \"active\", id: \"id\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: _MatTabLinkBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: _MatTabNavBase }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RIPPLE_GLOBAL_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: i7.FocusMonitor }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { active: [{\n type: Input\n }], id: [{\n type: Input\n }] } });\n/**\n * Link inside of a `mat-tab-nav-bar`.\n */\nclass MatTabLink extends _MatTabLinkBase {\n constructor(tabNavBar, elementRef, ngZone, platform, globalRippleOptions, tabIndex, focusMonitor, animationMode) {\n super(tabNavBar, elementRef, globalRippleOptions, tabIndex, focusMonitor, animationMode);\n this._tabLinkRipple = new RippleRenderer(this, ngZone, elementRef, platform);\n this._tabLinkRipple.setupTriggerEvents(elementRef.nativeElement);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._tabLinkRipple._removeTriggerEvents();\n }\n}\nMatTabLink.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLink, deps: [{ token: MatTabNav }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i3.Platform }, { token: MAT_RIPPLE_GLOBAL_OPTIONS, optional: true }, { token: 'tabindex', attribute: true }, { token: i7.FocusMonitor }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nMatTabLink.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabLink, selector: \"[mat-tab-link], [matTabLink]\", inputs: { disabled: \"disabled\", disableRipple: \"disableRipple\", tabIndex: \"tabIndex\" }, host: { listeners: { \"focus\": \"_handleFocus()\", \"keydown\": \"_handleKeydown($event)\" }, properties: { \"attr.aria-controls\": \"_getAriaControls()\", \"attr.aria-current\": \"_getAriaCurrent()\", \"attr.aria-disabled\": \"disabled\", \"attr.aria-selected\": \"_getAriaSelected()\", \"attr.id\": \"id\", \"attr.tabIndex\": \"_getTabIndex()\", \"attr.role\": \"_getRole()\", \"class.mat-tab-disabled\": \"disabled\", \"class.mat-tab-label-active\": \"active\" }, classAttribute: \"mat-tab-link mat-focus-indicator\" }, exportAs: [\"matTabLink\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabLink, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-tab-link], [matTabLink]',\n exportAs: 'matTabLink',\n inputs: ['disabled', 'disableRipple', 'tabIndex'],\n host: {\n 'class': 'mat-tab-link mat-focus-indicator',\n '[attr.aria-controls]': '_getAriaControls()',\n '[attr.aria-current]': '_getAriaCurrent()',\n '[attr.aria-disabled]': 'disabled',\n '[attr.aria-selected]': '_getAriaSelected()',\n '[attr.id]': 'id',\n '[attr.tabIndex]': '_getTabIndex()',\n '[attr.role]': '_getRole()',\n '[class.mat-tab-disabled]': 'disabled',\n '[class.mat-tab-label-active]': 'active',\n '(focus)': '_handleFocus()',\n '(keydown)': '_handleKeydown($event)',\n },\n }]\n }], ctorParameters: function () { return [{ type: MatTabNav }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i3.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RIPPLE_GLOBAL_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: i7.FocusMonitor }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; } });\n/**\n * Tab panel component associated with MatTabNav.\n */\nclass MatTabNavPanel {\n constructor() {\n /** Unique id for the tab panel. */\n this.id = `mat-tab-nav-panel-${nextUniqueId++}`;\n }\n}\nMatTabNavPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabNavPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });\nMatTabNavPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.2.0\", type: MatTabNavPanel, selector: \"mat-tab-nav-panel\", inputs: { id: \"id\" }, host: { attributes: { \"role\": \"tabpanel\" }, properties: { \"attr.aria-labelledby\": \"_activeTabId\", \"attr.id\": \"id\" }, classAttribute: \"mat-tab-nav-panel\" }, exportAs: [\"matTabNavPanel\"], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabNavPanel, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-tab-nav-panel',\n exportAs: 'matTabNavPanel',\n template: '',\n host: {\n '[attr.aria-labelledby]': '_activeTabId',\n '[attr.id]': 'id',\n 'class': 'mat-tab-nav-panel',\n 'role': 'tabpanel',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n }]\n }], propDecorators: { id: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatTabsModule {\n}\nMatTabsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatTabsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabsModule, declarations: [MatTabGroup,\n MatTabLabel,\n MatTab,\n MatInkBar,\n MatTabLabelWrapper,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabBody,\n MatTabBodyPortal,\n MatTabHeader,\n MatTabContent], imports: [CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n A11yModule], exports: [MatCommonModule,\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabContent] });\nMatTabsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabsModule, imports: [CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n A11yModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.2.0\", ngImport: i0, type: MatTabsModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n A11yModule,\n ],\n // Don't export all components because some are only to be used internally.\n exports: [\n MatCommonModule,\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabContent,\n ],\n declarations: [\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatInkBar,\n MatTabLabelWrapper,\n MatTabNav,\n MatTabNavPanel,\n MatTabLink,\n MatTabBody,\n MatTabBodyPortal,\n MatTabHeader,\n MatTabContent,\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_TAB, MAT_TABS_CONFIG, MAT_TAB_GROUP, MatInkBar, MatTab, MatTabBody, MatTabBodyPortal, MatTabChangeEvent, MatTabContent, MatTabGroup, MatTabHeader, MatTabLabel, MatTabLabelWrapper, MatTabLink, MatTabNav, MatTabNavPanel, MatTabsModule, _MAT_INK_BAR_POSITIONER, _MatTabBodyBase, _MatTabGroupBase, _MatTabHeaderBase, _MatTabLinkBase, _MatTabNavBase, matTabsAnimations };\n","import * as i0 from '@angular/core';\nimport { EventEmitter, Component, ChangeDetectionStrategy, Input, Output, forwardRef, NgModule } from '@angular/core';\nimport * as i2 from 'ngx-color';\nimport { isValidHex, ColorWrap, AlphaModule, CheckboardModule, EditableInputModule, HueModule, SaturationModule } from 'ngx-color';\nimport { TinyColor } from '@ctrl/tinycolor';\nimport * as i1 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nclass ChromeFieldsComponent {\n constructor() {\n this.onChange = new EventEmitter();\n this.view = '';\n this.input = {\n fontSize: '11px',\n color: '#333',\n width: '100%',\n borderRadius: '2px',\n border: 'none',\n boxShadow: 'inset 0 0 0 1px #dadada',\n height: '21px',\n 'text-align': 'center',\n };\n this.label = {\n 'text-transform': 'uppercase',\n fontSize: '11px',\n 'line-height': '11px',\n color: '#969696',\n 'text-align': 'center',\n display: 'block',\n marginTop: '12px',\n };\n }\n ngOnInit() {\n if (this.hsl.a === 1 && this.view !== 'hex') {\n this.view = 'hex';\n }\n else if (this.view !== 'rgb' && this.view !== 'hsl') {\n this.view = 'rgb';\n }\n }\n toggleViews() {\n if (this.view === 'hex') {\n this.view = 'rgb';\n }\n else if (this.view === 'rgb') {\n this.view = 'hsl';\n }\n else if (this.view === 'hsl') {\n if (this.hsl.a === 1) {\n this.view = 'hex';\n }\n else {\n this.view = 'rgb';\n }\n }\n }\n round(value) {\n return Math.round(value);\n }\n handleChange({ data, $event }) {\n if (data.hex) {\n if (isValidHex(data.hex)) {\n const color = new TinyColor(data.hex);\n this.onChange.emit({\n data: {\n hex: this.disableAlpha ? color.toHex() : color.toHex8(),\n source: 'hex',\n },\n $event,\n });\n }\n }\n else if (data.r || data.g || data.b) {\n this.onChange.emit({\n data: {\n r: data.r || this.rgb.r,\n g: data.g || this.rgb.g,\n b: data.b || this.rgb.b,\n source: 'rgb',\n },\n $event,\n });\n }\n else if (data.a) {\n if (data.a < 0) {\n data.a = 0;\n }\n else if (data.a > 1) {\n data.a = 1;\n }\n if (this.disableAlpha) {\n data.a = 1;\n }\n this.onChange.emit({\n data: {\n h: this.hsl.h,\n s: this.hsl.s,\n l: this.hsl.l,\n a: Math.round(data.a * 100) / 100,\n source: 'rgb',\n },\n $event,\n });\n }\n else if (data.h || data.s || data.l) {\n const s = data.s && data.s.replace('%', '');\n const l = data.l && data.l.replace('%', '');\n this.onChange.emit({\n data: {\n h: data.h || this.hsl.h,\n s: Number(s || this.hsl.s),\n l: Number(l || this.hsl.l),\n source: 'hsl',\n },\n $event,\n });\n }\n }\n}\nChromeFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ChromeFieldsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nChromeFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: ChromeFieldsComponent, selector: \"color-chrome-fields\", inputs: { disableAlpha: \"disableAlpha\", hsl: \"hsl\", rgb: \"rgb\", hex: \"hex\" }, outputs: { onChange: \"onChange\" }, ngImport: i0, template: `\n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n
\n
\n \n \n \n \n
\n
\n
\n `, isInline: true, styles: [\".chrome-wrap{padding-top:16px;display:flex}.chrome-fields{flex:1;display:flex;margin-left:-6px}.chrome-field{padding-left:6px;width:100%}.chrome-toggle{width:32px;text-align:right;position:relative}.chrome-icon{margin-right:-4px;margin-top:12px;cursor:pointer;position:relative}.chrome-toggle-svg{width:24px;height:24px;border:1px transparent solid;border-radius:5px}.chrome-toggle-svg:hover{background:#eee}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i2.EditableInputComponent, selector: \"color-editable-input\", inputs: [\"style\", \"label\", \"value\", \"arrowOffset\", \"dragLabel\", \"dragMax\", \"placeholder\"], outputs: [\"onChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ChromeFieldsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-chrome-fields', template: `\n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n
\n
\n \n \n \n \n
\n
\n
\n `, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, styles: [\".chrome-wrap{padding-top:16px;display:flex}.chrome-fields{flex:1;display:flex;margin-left:-6px}.chrome-field{padding-left:6px;width:100%}.chrome-toggle{width:32px;text-align:right;position:relative}.chrome-icon{margin-right:-4px;margin-top:12px;cursor:pointer;position:relative}.chrome-toggle-svg{width:24px;height:24px;border:1px transparent solid;border-radius:5px}.chrome-toggle-svg:hover{background:#eee}\\n\"] }]\n }], propDecorators: { disableAlpha: [{\n type: Input\n }], hsl: [{\n type: Input\n }], rgb: [{\n type: Input\n }], hex: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\n\nclass ChromeComponent extends ColorWrap {\n constructor() {\n super();\n /** Remove alpha slider and options from picker */\n this.disableAlpha = false;\n this.circle = {\n width: '12px',\n height: '12px',\n borderRadius: '6px',\n boxShadow: 'rgb(255, 255, 255) 0px 0px 0px 1px inset',\n transform: 'translate(-6px, -8px)',\n };\n this.pointer = {\n width: '12px',\n height: '12px',\n borderRadius: '6px',\n transform: 'translate(-6px, -2px)',\n backgroundColor: 'rgb(248, 248, 248)',\n boxShadow: '0 1px 4px 0 rgba(0, 0, 0, 0.37)',\n };\n }\n afterValidChange() {\n const alpha = this.disableAlpha ? 1 : this.rgb.a;\n this.activeBackground = `rgba(${this.rgb.r}, ${this.rgb.g}, ${this.rgb.b}, ${alpha})`;\n }\n handleValueChange({ data, $event }) {\n this.handleChange(data, $event);\n }\n}\nChromeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ChromeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nChromeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: ChromeComponent, selector: \"color-chrome\", inputs: { disableAlpha: \"disableAlpha\" }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ChromeComponent),\n multi: true,\n },\n {\n provide: ColorWrap,\n useExisting: forwardRef(() => ChromeComponent),\n },\n ], usesInheritance: true, ngImport: i0, template: `\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n `, isInline: true, styles: [\".chrome-picker{background:#fff;border-radius:2px;box-shadow:0 0 2px #0000004d,0 4px 8px #0000004d;box-sizing:initial;width:225px;font-family:Menlo}.chrome-controls{display:flex}.chrome-color{width:42px}.chrome-body{padding:14px 14px 12px}.chrome-active{position:absolute;top:0;bottom:0;left:0;right:0;border-radius:20px;box-shadow:inset 0 0 0 1px #0000001a;z-index:2}.chrome-swatch{width:28px;height:28px;border-radius:15px;position:relative;overflow:hidden}.saturation{width:100%;padding-bottom:55%;position:relative;border-radius:2px 2px 0 0;overflow:hidden}.chrome-toggles{flex:1}.chrome-hue{height:10px;position:relative;margin-bottom:8px}.chrome-alpha{height:10px;position:relative}\\n\"], dependencies: [{ kind: \"directive\", type: i0.forwardRef(function () { return i1.NgIf; }), selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i0.forwardRef(function () { return i2.AlphaComponent; }), selector: \"color-alpha\", inputs: [\"hsl\", \"rgb\", \"pointer\", \"shadow\", \"radius\", \"direction\"], outputs: [\"onChange\"] }, { kind: \"component\", type: i0.forwardRef(function () { return i2.CheckboardComponent; }), selector: \"color-checkboard\", inputs: [\"white\", \"size\", \"grey\", \"boxShadow\", \"borderRadius\"] }, { kind: \"component\", type: i0.forwardRef(function () { return i2.HueComponent; }), selector: \"color-hue\", inputs: [\"hsl\", \"pointer\", \"radius\", \"shadow\", \"hidePointer\", \"direction\"], outputs: [\"onChange\"] }, { kind: \"component\", type: i0.forwardRef(function () { return i2.SaturationComponent; }), selector: \"color-saturation\", inputs: [\"hsl\", \"hsv\", \"radius\", \"pointer\", \"circle\"], outputs: [\"onChange\"] }, { kind: \"component\", type: i0.forwardRef(function () { return ChromeFieldsComponent; }), selector: \"color-chrome-fields\", inputs: [\"disableAlpha\", \"hsl\", \"rgb\", \"hex\"], outputs: [\"onChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ChromeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-chrome', template: `\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n `, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ChromeComponent),\n multi: true,\n },\n {\n provide: ColorWrap,\n useExisting: forwardRef(() => ChromeComponent),\n },\n ], styles: [\".chrome-picker{background:#fff;border-radius:2px;box-shadow:0 0 2px #0000004d,0 4px 8px #0000004d;box-sizing:initial;width:225px;font-family:Menlo}.chrome-controls{display:flex}.chrome-color{width:42px}.chrome-body{padding:14px 14px 12px}.chrome-active{position:absolute;top:0;bottom:0;left:0;right:0;border-radius:20px;box-shadow:inset 0 0 0 1px #0000001a;z-index:2}.chrome-swatch{width:28px;height:28px;border-radius:15px;position:relative;overflow:hidden}.saturation{width:100%;padding-bottom:55%;position:relative;border-radius:2px 2px 0 0;overflow:hidden}.chrome-toggles{flex:1}.chrome-hue{height:10px;position:relative;margin-bottom:8px}.chrome-alpha{height:10px;position:relative}\\n\"] }]\n }], ctorParameters: function () { return []; }, propDecorators: { disableAlpha: [{\n type: Input\n }] } });\nclass ColorChromeModule {\n}\nColorChromeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorChromeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nColorChromeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorChromeModule, declarations: [ChromeComponent, ChromeFieldsComponent], imports: [CommonModule,\n AlphaModule,\n CheckboardModule,\n EditableInputModule,\n HueModule,\n SaturationModule], exports: [ChromeComponent, ChromeFieldsComponent] });\nColorChromeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorChromeModule, imports: [CommonModule,\n AlphaModule,\n CheckboardModule,\n EditableInputModule,\n HueModule,\n SaturationModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorChromeModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [ChromeComponent, ChromeFieldsComponent],\n exports: [ChromeComponent, ChromeFieldsComponent],\n imports: [\n CommonModule,\n AlphaModule,\n CheckboardModule,\n EditableInputModule,\n HueModule,\n SaturationModule,\n ],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ChromeComponent, ChromeFieldsComponent, ColorChromeModule };\n","import * as i1 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Component, ChangeDetectionStrategy, Input, NgModule, Directive, Output, HostListener, EventEmitter, isDevMode, forwardRef } from '@angular/core';\nimport { Subject, Subscription, fromEvent } from 'rxjs';\nimport { distinctUntilChanged, debounceTime, tap } from 'rxjs/operators';\nimport { TinyColor } from '@ctrl/tinycolor';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nconst checkboardCache = {};\nfunction render(c1, c2, size) {\n if (typeof document === 'undefined') {\n return null;\n }\n const canvas = document.createElement('canvas');\n canvas.width = size * 2;\n canvas.height = size * 2;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return null;\n } // If no context can be found, return early.\n ctx.fillStyle = c1;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = c2;\n ctx.fillRect(0, 0, size, size);\n ctx.translate(size, size);\n ctx.fillRect(0, 0, size, size);\n return canvas.toDataURL();\n}\nfunction getCheckerboard(c1, c2, size) {\n const key = `${c1}-${c2}-${size}`;\n if (checkboardCache[key]) {\n return checkboardCache[key];\n }\n const checkboard = render(c1, c2, size);\n if (!checkboard) {\n return null;\n }\n checkboardCache[key] = checkboard;\n return checkboard;\n}\n\nclass CheckboardComponent {\n constructor() {\n this.white = 'transparent';\n this.size = 8;\n this.grey = 'rgba(0,0,0,.08)';\n }\n ngOnInit() {\n const background = getCheckerboard(this.white, this.grey, this.size);\n this.gridStyles = {\n borderRadius: this.borderRadius,\n boxShadow: this.boxShadow,\n background: `url(${background}) center left`,\n };\n }\n}\nCheckboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCheckboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: CheckboardComponent, selector: \"color-checkboard\", inputs: { white: \"white\", size: \"size\", grey: \"grey\", boxShadow: \"boxShadow\", borderRadius: \"borderRadius\" }, ngImport: i0, template: `
`, isInline: true, styles: [\".grid{top:0px;right:0px;bottom:0px;left:0px;position:absolute}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-checkboard', template: `
`, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".grid{top:0px;right:0px;bottom:0px;left:0px;position:absolute}\\n\"] }]\n }], propDecorators: { white: [{\n type: Input\n }], size: [{\n type: Input\n }], grey: [{\n type: Input\n }], boxShadow: [{\n type: Input\n }], borderRadius: [{\n type: Input\n }] } });\nclass CheckboardModule {\n}\nCheckboardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCheckboardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardModule, declarations: [CheckboardComponent], imports: [CommonModule], exports: [CheckboardComponent] });\nCheckboardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CheckboardModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [CheckboardComponent],\n exports: [CheckboardComponent],\n imports: [CommonModule],\n }]\n }] });\n\nclass CoordinatesDirective {\n constructor(el) {\n this.el = el;\n this.coordinatesChange = new Subject();\n this.mousechange = new Subject();\n this.mouseListening = false;\n }\n mousemove($event, x, y, isTouch = false) {\n if (this.mouseListening) {\n $event.preventDefault();\n this.mousechange.next({ $event, x, y, isTouch });\n }\n }\n mouseup() {\n this.mouseListening = false;\n }\n mousedown($event, x, y, isTouch = false) {\n $event.preventDefault();\n this.mouseListening = true;\n this.mousechange.next({ $event, x, y, isTouch });\n }\n ngOnInit() {\n this.sub = this.mousechange\n .pipe(\n // limit times it is updated for the same area\n distinctUntilChanged((p, q) => p.x === q.x && p.y === q.y))\n .subscribe(n => this.handleChange(n.x, n.y, n.$event, n.isTouch));\n }\n ngOnDestroy() {\n this.sub?.unsubscribe();\n }\n handleChange(x, y, $event, isTouch) {\n const containerWidth = this.el.nativeElement.clientWidth;\n const containerHeight = this.el.nativeElement.clientHeight;\n const left = x -\n (this.el.nativeElement.getBoundingClientRect().left + window.pageXOffset);\n let top = y - this.el.nativeElement.getBoundingClientRect().top;\n if (!isTouch) {\n top = top - window.pageYOffset;\n }\n this.coordinatesChange.next({\n x,\n y,\n top,\n left,\n containerWidth,\n containerHeight,\n $event,\n });\n }\n}\nCoordinatesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCoordinatesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.1.2\", type: CoordinatesDirective, selector: \"[ngx-color-coordinates]\", outputs: { coordinatesChange: \"coordinatesChange\" }, host: { listeners: { \"window:mousemove\": \"mousemove($event,$event.pageX,$event.pageY)\", \"window:touchmove\": \"mousemove($event,$event.touches[0].clientX,$event.touches[0].clientY,true)\", \"window:mouseup\": \"mouseup()\", \"window:touchend\": \"mouseup()\", \"mousedown\": \"mousedown($event,$event.pageX,$event.pageY)\", \"touchstart\": \"mousedown($event,$event.touches[0].clientX,$event.touches[0].clientY,true)\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[ngx-color-coordinates]' }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { coordinatesChange: [{\n type: Output\n }], mousemove: [{\n type: HostListener,\n args: ['window:mousemove', ['$event', '$event.pageX', '$event.pageY']]\n }, {\n type: HostListener,\n args: ['window:touchmove', [\n '$event',\n '$event.touches[0].clientX',\n '$event.touches[0].clientY',\n 'true',\n ]]\n }], mouseup: [{\n type: HostListener,\n args: ['window:mouseup']\n }, {\n type: HostListener,\n args: ['window:touchend']\n }], mousedown: [{\n type: HostListener,\n args: ['mousedown', ['$event', '$event.pageX', '$event.pageY']]\n }, {\n type: HostListener,\n args: ['touchstart', [\n '$event',\n '$event.touches[0].clientX',\n '$event.touches[0].clientY',\n 'true',\n ]]\n }] } });\nclass CoordinatesModule {\n}\nCoordinatesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCoordinatesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesModule, declarations: [CoordinatesDirective], exports: [CoordinatesDirective] });\nCoordinatesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: CoordinatesModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [CoordinatesDirective],\n exports: [CoordinatesDirective],\n }]\n }] });\n\nclass AlphaComponent {\n constructor() {\n this.direction = 'horizontal';\n this.onChange = new EventEmitter();\n }\n ngOnChanges() {\n if (this.direction === 'vertical') {\n this.pointerLeft = 0;\n this.pointerTop = this.rgb.a * 100;\n this.gradient = {\n background: `linear-gradient(to bottom, rgba(${this.rgb.r},${this.rgb.g},${this.rgb.b}, 0) 0%,\n rgba(${this.rgb.r},${this.rgb.g},${this.rgb.b}, 1) 100%)`,\n };\n }\n else {\n this.gradient = {\n background: `linear-gradient(to right, rgba(${this.rgb.r},${this.rgb.g},${this.rgb.b}, 0) 0%,\n rgba(${this.rgb.r},${this.rgb.g},${this.rgb.b}, 1) 100%)`,\n };\n this.pointerLeft = this.rgb.a * 100;\n }\n }\n handleChange({ top, left, containerHeight, containerWidth, $event }) {\n let data;\n if (this.direction === 'vertical') {\n let a;\n if (top < 0) {\n a = 0;\n }\n else if (top > containerHeight) {\n a = 1;\n }\n else {\n a = Math.round(top * 100 / containerHeight) / 100;\n }\n if (this.hsl.a !== a) {\n data = {\n h: this.hsl.h,\n s: this.hsl.s,\n l: this.hsl.l,\n a,\n source: 'rgb',\n };\n }\n }\n else {\n let a;\n if (left < 0) {\n a = 0;\n }\n else if (left > containerWidth) {\n a = 1;\n }\n else {\n a = Math.round(left * 100 / containerWidth) / 100;\n }\n if (this.hsl.a !== a) {\n data = {\n h: this.hsl.h,\n s: this.hsl.s,\n l: this.hsl.l,\n a,\n source: 'rgb',\n };\n }\n }\n if (!data) {\n return;\n }\n this.onChange.emit({ data, $event });\n }\n}\nAlphaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nAlphaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: AlphaComponent, selector: \"color-alpha\", inputs: { hsl: \"hsl\", rgb: \"rgb\", pointer: \"pointer\", shadow: \"shadow\", radius: \"radius\", direction: \"direction\" }, outputs: { onChange: \"onChange\" }, usesOnChanges: true, ngImport: i0, template: `\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n `, isInline: true, styles: [\".alpha{position:absolute;top:0;bottom:0;left:0;right:0}.alpha-checkboard{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.alpha-gradient{position:absolute;top:0;bottom:0;left:0;right:0}.alpha-container{position:relative;height:100%;margin:0 3px}.alpha-pointer{position:absolute}.alpha-slider{width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;margin-top:1px;transform:translate(-2px)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: CheckboardComponent, selector: \"color-checkboard\", inputs: [\"white\", \"size\", \"grey\", \"boxShadow\", \"borderRadius\"] }, { kind: \"directive\", type: CoordinatesDirective, selector: \"[ngx-color-coordinates]\", outputs: [\"coordinatesChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-alpha', template: `\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n `, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, styles: [\".alpha{position:absolute;top:0;bottom:0;left:0;right:0}.alpha-checkboard{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.alpha-gradient{position:absolute;top:0;bottom:0;left:0;right:0}.alpha-container{position:relative;height:100%;margin:0 3px}.alpha-pointer{position:absolute}.alpha-slider{width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;margin-top:1px;transform:translate(-2px)}\\n\"] }]\n }], propDecorators: { hsl: [{\n type: Input\n }], rgb: [{\n type: Input\n }], pointer: [{\n type: Input\n }], shadow: [{\n type: Input\n }], radius: [{\n type: Input\n }], direction: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\nclass AlphaModule {\n}\nAlphaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nAlphaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaModule, declarations: [AlphaComponent], imports: [CommonModule, CheckboardModule, CoordinatesModule], exports: [AlphaComponent] });\nAlphaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaModule, imports: [CommonModule, CheckboardModule, CoordinatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: AlphaModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [AlphaComponent],\n exports: [AlphaComponent],\n imports: [CommonModule, CheckboardModule, CoordinatesModule],\n }]\n }] });\n\nfunction simpleCheckForValidColor(data) {\n const keysToCheck = ['r', 'g', 'b', 'a', 'h', 's', 'l', 'v'];\n let checked = 0;\n let passed = 0;\n keysToCheck.forEach(letter => {\n if (!data[letter]) {\n return;\n }\n checked += 1;\n if (!isNaN(data[letter])) {\n passed += 1;\n }\n if (letter === 's' || letter === 'l') {\n const percentPatt = /^\\d+%$/;\n if (percentPatt.test(data[letter])) {\n passed += 1;\n }\n }\n });\n return checked === passed ? data : false;\n}\nfunction toState(data, oldHue, disableAlpha) {\n const color = data.hex ? new TinyColor(data.hex) : new TinyColor(data);\n if (disableAlpha) {\n color.setAlpha(1);\n }\n const hsl = color.toHsl();\n const hsv = color.toHsv();\n const rgb = color.toRgb();\n const hex = color.toHex();\n if (hsl.s === 0) {\n hsl.h = oldHue || 0;\n hsv.h = oldHue || 0;\n }\n const transparent = hex === '000000' && rgb.a === 0;\n return {\n hsl,\n hex: transparent ? 'transparent' : color.toHexString(),\n rgb,\n hsv,\n oldHue: data.h || oldHue || hsl.h,\n source: data.source,\n };\n}\nfunction isValidHex(hex) {\n return new TinyColor(hex).isValid;\n}\nfunction getContrastingColor(data) {\n if (!data) {\n return '#fff';\n }\n const col = toState(data);\n if (col.hex === 'transparent') {\n return 'rgba(0,0,0,0.4)';\n }\n const yiq = (col.rgb.r * 299 + col.rgb.g * 587 + col.rgb.b * 114) / 1000;\n return yiq >= 128 ? '#000' : '#fff';\n}\n\nvar ColorMode;\n(function (ColorMode) {\n ColorMode[\"HEX\"] = \"hex\";\n ColorMode[\"HSL\"] = \"hsl\";\n ColorMode[\"HSV\"] = \"hsv\";\n ColorMode[\"RGB\"] = \"rgb\";\n})(ColorMode || (ColorMode = {}));\nclass ColorWrap {\n constructor() {\n /**\n * Descriptors the return color format if the component is used with two-way binding\n */\n this.mode = ColorMode.HEX;\n this.color = {\n h: 250,\n s: 0.5,\n l: 0.2,\n a: 1,\n };\n this.colorChange = new EventEmitter();\n this.onChange = new EventEmitter();\n this.onChangeComplete = new EventEmitter();\n this.onSwatchHover = new EventEmitter();\n this._onChangeCompleteSubscription = new Subscription();\n this._onSwatchHoverSubscription = new Subscription();\n }\n ngOnInit() {\n this.changes = this.onChange\n .pipe(debounceTime(100), tap(event => {\n this.onChangeComplete.emit(event);\n switch (this.mode) {\n case ColorMode.HEX:\n this.colorChange.emit(event.color.hex);\n break;\n case ColorMode.HSL:\n this.colorChange.emit(event.color.hsl);\n break;\n case ColorMode.HSV:\n this.colorChange.emit(event.color.hsv);\n break;\n case ColorMode.RGB:\n this.colorChange.emit(event.color.rgb);\n break;\n default:\n const msg = `The mode '${this.mode}' is not supported`;\n if (isDevMode()) {\n throw new Error(msg);\n }\n else {\n console.warn(msg);\n }\n break;\n }\n }))\n .subscribe();\n this.setState(toState(this.color, 0));\n this.currentColor = this.hex;\n }\n ngOnChanges() {\n this.setState(toState(this.color, this.oldHue));\n }\n ngOnDestroy() {\n this.changes?.unsubscribe();\n this._onChangeCompleteSubscription?.unsubscribe();\n this._onSwatchHoverSubscription?.unsubscribe();\n }\n setState(data) {\n this.oldHue = data.oldHue;\n this.hsl = data.hsl;\n this.hsv = data.hsv;\n this.rgb = data.rgb;\n this.hex = data.hex;\n this.source = data.source;\n this.afterValidChange();\n }\n handleChange(data, $event) {\n const isValidColor = simpleCheckForValidColor(data);\n if (isValidColor) {\n const color = toState(data, data.h || this.oldHue, this.disableAlpha);\n this.setState(color);\n this.onChange.emit({ color, $event });\n this.afterValidChange();\n }\n }\n /** hook for components after a complete change */\n afterValidChange() { }\n handleSwatchHover(data, $event) {\n const isValidColor = simpleCheckForValidColor(data);\n if (isValidColor) {\n const color = toState(data, data.h || this.oldHue);\n this.setState(color);\n this.onSwatchHover.emit({ color, $event });\n }\n }\n registerOnChange(fn) {\n this._onChangeCompleteSubscription.add(this.onChangeComplete.pipe(tap(event => fn(event.color.hex))).subscribe());\n }\n registerOnTouched(fn) {\n this._onSwatchHoverSubscription.add(this.onSwatchHover.pipe(tap(() => fn())).subscribe());\n }\n setDisabledState(isDisabled) { }\n writeValue(hex) {\n this.color = hex;\n }\n}\nColorWrap.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrap, deps: [], target: i0.ɵɵFactoryTarget.Component });\nColorWrap.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: ColorWrap, selector: \"color-wrap\", inputs: { className: \"className\", mode: \"mode\", color: \"color\" }, outputs: { colorChange: \"colorChange\", onChange: \"onChange\", onChangeComplete: \"onChangeComplete\", onSwatchHover: \"onSwatchHover\" }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorWrap),\n multi: true,\n }\n ], usesOnChanges: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrap, decorators: [{\n type: Component,\n args: [{\n // create seletor base for test override property\n selector: 'color-wrap',\n template: ``,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorWrap),\n multi: true,\n }\n ]\n }]\n }], propDecorators: { className: [{\n type: Input\n }], mode: [{\n type: Input\n }], color: [{\n type: Input\n }], colorChange: [{\n type: Output\n }], onChange: [{\n type: Output\n }], onChangeComplete: [{\n type: Output\n }], onSwatchHover: [{\n type: Output\n }] } });\nclass ColorWrapModule {\n}\nColorWrapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nColorWrapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrapModule, declarations: [ColorWrap], imports: [CommonModule], exports: [ColorWrap] });\nColorWrapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrapModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ColorWrapModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [ColorWrap],\n exports: [ColorWrap],\n imports: [CommonModule],\n }]\n }] });\n\nlet nextUniqueId = 0;\nclass EditableInputComponent {\n constructor() {\n this.placeholder = '';\n this.onChange = new EventEmitter();\n this.focus = false;\n this.uniqueId = `editableInput-${++nextUniqueId}`;\n }\n ngOnInit() {\n this.wrapStyle = this.style && this.style.wrap ? this.style.wrap : {};\n this.inputStyle = this.style && this.style.input ? this.style.input : {};\n this.labelStyle = this.style && this.style.label ? this.style.label : {};\n if (this.dragLabel) {\n this.labelStyle.cursor = 'ew-resize';\n }\n }\n handleFocus($event) {\n this.focus = true;\n }\n handleFocusOut($event) {\n this.focus = false;\n this.currentValue = this.blurValue;\n }\n handleKeydown($event) {\n // In case `e.target.value` is a percentage remove the `%` character\n // and update accordingly with a percentage\n // https://github.com/casesandberg/react-color/issues/383\n const stringValue = String($event.target.value);\n const isPercentage = stringValue.indexOf('%') > -1;\n const num = Number(stringValue.replace(/%/g, ''));\n if (isNaN(num)) {\n return;\n }\n const amount = this.arrowOffset || 1;\n // Up\n if ($event.keyCode === 38) {\n if (this.label) {\n this.onChange.emit({\n data: { [this.label]: num + amount },\n $event,\n });\n }\n else {\n this.onChange.emit({ data: num + amount, $event });\n }\n if (isPercentage) {\n this.currentValue = `${num + amount}%`;\n }\n else {\n this.currentValue = num + amount;\n }\n }\n // Down\n if ($event.keyCode === 40) {\n if (this.label) {\n this.onChange.emit({\n data: { [this.label]: num - amount },\n $event,\n });\n }\n else {\n this.onChange.emit({ data: num - amount, $event });\n }\n if (isPercentage) {\n this.currentValue = `${num - amount}%`;\n }\n else {\n this.currentValue = num - amount;\n }\n }\n }\n handleKeyup($event) {\n if ($event.keyCode === 40 || $event.keyCode === 38) {\n return;\n }\n if (`${this.currentValue}` === $event.target.value) {\n return;\n }\n if (this.label) {\n this.onChange.emit({\n data: { [this.label]: $event.target.value },\n $event,\n });\n }\n else {\n this.onChange.emit({ data: $event.target.value, $event });\n }\n }\n ngOnChanges() {\n if (!this.focus) {\n this.currentValue = String(this.value).toUpperCase();\n this.blurValue = String(this.value).toUpperCase();\n }\n else {\n this.blurValue = String(this.value).toUpperCase();\n }\n }\n ngOnDestroy() {\n this.unsubscribe();\n }\n subscribe() {\n this.mousemove = fromEvent(document, 'mousemove').subscribe((ev) => this.handleDrag(ev));\n this.mouseup = fromEvent(document, 'mouseup').subscribe(() => this.unsubscribe());\n }\n unsubscribe() {\n this.mousemove?.unsubscribe();\n this.mouseup?.unsubscribe();\n }\n handleMousedown($event) {\n if (this.dragLabel) {\n $event.preventDefault();\n this.handleDrag($event);\n this.subscribe();\n }\n }\n handleDrag($event) {\n if (this.dragLabel) {\n const newValue = Math.round(this.value + $event.movementX);\n if (newValue >= 0 && newValue <= this.dragMax) {\n this.onChange.emit({ data: { [this.label]: newValue }, $event });\n }\n }\n }\n}\nEditableInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nEditableInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: EditableInputComponent, selector: \"color-editable-input\", inputs: { style: \"style\", label: \"label\", value: \"value\", arrowOffset: \"arrowOffset\", dragLabel: \"dragLabel\", dragMax: \"dragMax\", placeholder: \"placeholder\" }, outputs: { onChange: \"onChange\" }, usesOnChanges: true, ngImport: i0, template: `\n
\n \n \n {{ label }}\n \n
\n `, isInline: true, styles: [\":host{display:flex}.wrap{position:relative}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-editable-input', template: `\n
\n \n \n {{ label }}\n \n
\n `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\":host{display:flex}.wrap{position:relative}\\n\"] }]\n }], propDecorators: { style: [{\n type: Input\n }], label: [{\n type: Input\n }], value: [{\n type: Input\n }], arrowOffset: [{\n type: Input\n }], dragLabel: [{\n type: Input\n }], dragMax: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\nclass EditableInputModule {\n}\nEditableInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nEditableInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputModule, declarations: [EditableInputComponent], imports: [CommonModule], exports: [EditableInputComponent] });\nEditableInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: EditableInputModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [EditableInputComponent],\n exports: [EditableInputComponent],\n imports: [CommonModule],\n }]\n }] });\n\nclass HueComponent {\n constructor() {\n this.hidePointer = false;\n this.direction = 'horizontal';\n this.onChange = new EventEmitter();\n this.left = '0px';\n this.top = '';\n }\n ngOnChanges() {\n if (this.direction === 'horizontal') {\n this.left = `${this.hsl.h * 100 / 360}%`;\n }\n else {\n this.top = `${-(this.hsl.h * 100 / 360) + 100}%`;\n }\n }\n handleChange({ top, left, containerHeight, containerWidth, $event }) {\n let data;\n if (this.direction === 'vertical') {\n let h;\n if (top < 0) {\n h = 359;\n }\n else if (top > containerHeight) {\n h = 0;\n }\n else {\n const percent = -(top * 100 / containerHeight) + 100;\n h = 360 * percent / 100;\n }\n if (this.hsl.h !== h) {\n data = {\n h,\n s: this.hsl.s,\n l: this.hsl.l,\n a: this.hsl.a,\n source: 'rgb',\n };\n }\n }\n else {\n let h;\n if (left < 0) {\n h = 0;\n }\n else if (left > containerWidth) {\n h = 359;\n }\n else {\n const percent = left * 100 / containerWidth;\n h = 360 * percent / 100;\n }\n if (this.hsl.h !== h) {\n data = {\n h,\n s: this.hsl.s,\n l: this.hsl.l,\n a: this.hsl.a,\n source: 'rgb',\n };\n }\n }\n if (!data) {\n return;\n }\n this.onChange.emit({ data, $event });\n }\n}\nHueComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: HueComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nHueComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: HueComponent, selector: \"color-hue\", inputs: { hsl: \"hsl\", pointer: \"pointer\", radius: \"radius\", shadow: \"shadow\", hidePointer: \"hidePointer\", direction: \"direction\" }, outputs: { onChange: \"onChange\" }, usesOnChanges: true, ngImport: i0, template: `\n
\n
\n
\n
\n
\n
\n
\n `, isInline: true, styles: [\".color-hue{position:absolute;top:0;bottom:0;left:0;right:0}.color-hue-container{margin:0 2px;position:relative;height:100%}.color-hue-pointer{position:absolute}.color-hue-slider{margin-top:1px;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;transform:translate(-2px)}.color-hue-horizontal{background:linear-gradient(to right,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)}.color-hue-vertical{background:linear-gradient(to top,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: CoordinatesDirective, selector: \"[ngx-color-coordinates]\", outputs: [\"coordinatesChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: HueComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-hue', template: `\n
\n
\n
\n
\n
\n
\n
\n `, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".color-hue{position:absolute;top:0;bottom:0;left:0;right:0}.color-hue-container{margin:0 2px;position:relative;height:100%}.color-hue-pointer{position:absolute}.color-hue-slider{margin-top:1px;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;transform:translate(-2px)}.color-hue-horizontal{background:linear-gradient(to right,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)}.color-hue-vertical{background:linear-gradient(to top,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)}\\n\"] }]\n }], propDecorators: { hsl: [{\n type: Input\n }], pointer: [{\n type: Input\n }], radius: [{\n type: Input\n }], shadow: [{\n type: Input\n }], hidePointer: [{\n type: Input\n }], direction: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\nclass HueModule {\n}\nHueModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: HueModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nHueModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: HueModule, declarations: [HueComponent], imports: [CommonModule, CoordinatesModule], exports: [HueComponent] });\nHueModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: HueModule, imports: [CommonModule, CoordinatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: HueModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [HueComponent],\n exports: [HueComponent],\n imports: [CommonModule, CoordinatesModule],\n }]\n }] });\n\nclass RaisedComponent {\n constructor() {\n this.zDepth = 1;\n this.radius = 1;\n this.background = '#fff';\n }\n}\nRaisedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nRaisedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: RaisedComponent, selector: \"color-raised\", inputs: { zDepth: \"zDepth\", radius: \"radius\", background: \"background\" }, ngImport: i0, template: `\n
\n
\n
\n \n
\n
\n `, isInline: true, styles: [\".raised-wrap{position:relative;display:inline-block}.raised-bg{position:absolute;top:0px;right:0px;bottom:0px;left:0px}.raised-content{position:relative}.zDepth-0{box-shadow:none}.zDepth-1{box-shadow:0 2px 10px #0000001f,0 2px 5px #00000029}.zDepth-2{box-shadow:0 6px 20px #00000030,0 8px 17px #0003}.zDepth-3{box-shadow:0 17px 50px #00000030,0 12px 15px #0000003d}.zDepth-4{box-shadow:0 25px 55px #00000036,0 16px 28px #00000038}.zDepth-5{box-shadow:0 40px 77px #00000038,0 27px 24px #0003}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-raised', template: `\n
\n
\n
\n \n
\n
\n `, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".raised-wrap{position:relative;display:inline-block}.raised-bg{position:absolute;top:0px;right:0px;bottom:0px;left:0px}.raised-content{position:relative}.zDepth-0{box-shadow:none}.zDepth-1{box-shadow:0 2px 10px #0000001f,0 2px 5px #00000029}.zDepth-2{box-shadow:0 6px 20px #00000030,0 8px 17px #0003}.zDepth-3{box-shadow:0 17px 50px #00000030,0 12px 15px #0000003d}.zDepth-4{box-shadow:0 25px 55px #00000036,0 16px 28px #00000038}.zDepth-5{box-shadow:0 40px 77px #00000038,0 27px 24px #0003}\\n\"] }]\n }], propDecorators: { zDepth: [{\n type: Input\n }], radius: [{\n type: Input\n }], background: [{\n type: Input\n }] } });\nclass RaisedModule {\n}\nRaisedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nRaisedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedModule, declarations: [RaisedComponent], imports: [CommonModule], exports: [RaisedComponent] });\nRaisedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: RaisedModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [RaisedComponent],\n exports: [RaisedComponent],\n imports: [CommonModule],\n }]\n }] });\n\nclass SaturationComponent {\n constructor() {\n this.onChange = new EventEmitter();\n }\n ngOnChanges() {\n this.background = `hsl(${this.hsl.h}, 100%, 50%)`;\n this.pointerTop = -(this.hsv.v * 100) + 1 + 100 + '%';\n this.pointerLeft = this.hsv.s * 100 + '%';\n }\n handleChange({ top, left, containerHeight, containerWidth, $event }) {\n if (left < 0) {\n left = 0;\n }\n else if (left > containerWidth) {\n left = containerWidth;\n }\n else if (top < 0) {\n top = 0;\n }\n else if (top > containerHeight) {\n top = containerHeight;\n }\n const saturation = left / containerWidth;\n let bright = -(top / containerHeight) + 1;\n bright = bright > 0 ? bright : 0;\n bright = bright > 1 ? 1 : bright;\n const data = {\n h: this.hsl.h,\n s: saturation,\n v: bright,\n a: this.hsl.a,\n source: 'hsva',\n };\n this.onChange.emit({ data, $event });\n }\n}\nSaturationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nSaturationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: SaturationComponent, selector: \"color-saturation\", inputs: { hsl: \"hsl\", hsv: \"hsv\", radius: \"radius\", pointer: \"pointer\", circle: \"circle\" }, outputs: { onChange: \"onChange\" }, usesOnChanges: true, ngImport: i0, template: `\n
\n
\n
\n
\n
\n
\n
\n
\n `, isInline: true, styles: [\".saturation-white{background:linear-gradient(to right,#fff,rgba(255,255,255,0));position:absolute;top:0;bottom:0;left:0;right:0}.saturation-black{background:linear-gradient(to top,#000,rgba(0,0,0,0));position:absolute;top:0;bottom:0;left:0;right:0}.color-saturation{position:absolute;top:0;bottom:0;left:0;right:0}.saturation-pointer{position:absolute;cursor:default}.saturation-circle{width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006;border-radius:50%;cursor:hand;transform:translate(-2px,-4px)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: CoordinatesDirective, selector: \"[ngx-color-coordinates]\", outputs: [\"coordinatesChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-saturation', template: `\n
\n
\n
\n
\n
\n
\n
\n
\n `, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".saturation-white{background:linear-gradient(to right,#fff,rgba(255,255,255,0));position:absolute;top:0;bottom:0;left:0;right:0}.saturation-black{background:linear-gradient(to top,#000,rgba(0,0,0,0));position:absolute;top:0;bottom:0;left:0;right:0}.color-saturation{position:absolute;top:0;bottom:0;left:0;right:0}.saturation-pointer{position:absolute;cursor:default}.saturation-circle{width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006;border-radius:50%;cursor:hand;transform:translate(-2px,-4px)}\\n\"] }]\n }], propDecorators: { hsl: [{\n type: Input\n }], hsv: [{\n type: Input\n }], radius: [{\n type: Input\n }], pointer: [{\n type: Input\n }], circle: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\nclass SaturationModule {\n}\nSaturationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSaturationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationModule, declarations: [SaturationComponent], imports: [CommonModule, CoordinatesModule], exports: [SaturationComponent] });\nSaturationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationModule, imports: [CommonModule, CoordinatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SaturationModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [SaturationComponent],\n exports: [SaturationComponent],\n imports: [CommonModule, CoordinatesModule],\n }]\n }] });\n\nclass SwatchComponent {\n constructor() {\n this.style = {};\n this.focusStyle = {};\n this.onClick = new EventEmitter();\n this.onHover = new EventEmitter();\n this.divStyles = {};\n this.focusStyles = {};\n this.inFocus = false;\n }\n ngOnInit() {\n this.divStyles = {\n background: this.color,\n ...this.style,\n };\n }\n currentStyles() {\n this.focusStyles = {\n ...this.divStyles,\n ...this.focusStyle,\n };\n return this.focus || this.inFocus ? this.focusStyles : this.divStyles;\n }\n handleFocusOut() {\n this.inFocus = false;\n }\n handleFocus() {\n this.inFocus = true;\n }\n handleHover(hex, $event) {\n this.onHover.emit({ hex, $event });\n }\n handleClick(hex, $event) {\n this.onClick.emit({ hex, $event });\n }\n}\nSwatchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nSwatchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: SwatchComponent, selector: \"color-swatch\", inputs: { color: \"color\", style: \"style\", focusStyle: \"focusStyle\", focus: \"focus\" }, outputs: { onClick: \"onClick\", onHover: \"onHover\" }, ngImport: i0, template: `\n \n \n \n \n `, isInline: true, styles: [\".swatch{outline:none;height:100%;width:100%;cursor:pointer;position:relative}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: CheckboardComponent, selector: \"color-checkboard\", inputs: [\"white\", \"size\", \"grey\", \"boxShadow\", \"borderRadius\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-swatch', template: `\n \n \n \n \n `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".swatch{outline:none;height:100%;width:100%;cursor:pointer;position:relative}\\n\"] }]\n }], propDecorators: { color: [{\n type: Input\n }], style: [{\n type: Input\n }], focusStyle: [{\n type: Input\n }], focus: [{\n type: Input\n }], onClick: [{\n type: Output\n }], onHover: [{\n type: Output\n }] } });\nclass SwatchModule {\n}\nSwatchModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSwatchModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchModule, declarations: [SwatchComponent], imports: [CommonModule, CheckboardModule], exports: [SwatchComponent] });\nSwatchModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchModule, imports: [CommonModule, CheckboardModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: SwatchModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [SwatchComponent],\n exports: [SwatchComponent],\n imports: [CommonModule, CheckboardModule],\n }]\n }] });\n\nclass ShadeComponent {\n constructor() {\n this.onChange = new EventEmitter();\n }\n ngOnChanges() {\n this.gradient = {\n background: `linear-gradient(to right,\n hsl(${this.hsl.h}, 90%, 55%),\n #000)`,\n };\n const hsv = new TinyColor(this.hsl).toHsv();\n this.pointerLeft = 100 - (hsv.v * 100);\n }\n handleChange({ left, containerWidth, $event }) {\n let data;\n let v;\n if (left < 0) {\n v = 0;\n }\n else if (left > containerWidth) {\n v = 1;\n }\n else {\n v = Math.round((left * 100) / containerWidth) / 100;\n }\n const hsv = new TinyColor(this.hsl).toHsv();\n if (hsv.v !== v) {\n data = {\n h: this.hsl.h,\n s: 100,\n v: 1 - v,\n l: this.hsl.l,\n a: this.hsl.a,\n source: 'rgb',\n };\n }\n if (!data) {\n return;\n }\n this.onChange.emit({ data, $event });\n }\n}\nShadeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nShadeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.1.2\", type: ShadeComponent, selector: \"color-shade\", inputs: { hsl: \"hsl\", rgb: \"rgb\", pointer: \"pointer\", shadow: \"shadow\", radius: \"radius\" }, outputs: { onChange: \"onChange\" }, usesOnChanges: true, ngImport: i0, template: `\n
\n
\n \n \n
\n \n \n \n `, isInline: true, styles: [\".shade,.shade-gradient{position:absolute;top:0;bottom:0;left:0;right:0}.shade-container{position:relative;height:100%;margin:0 3px}.shade-pointer{position:absolute}.shade-slider{width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;margin-top:1px;transform:translate(-2px)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: CoordinatesDirective, selector: \"[ngx-color-coordinates]\", outputs: [\"coordinatesChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'color-shade', template: `\n
\n
\n \n \n
\n \n \n \n `, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, styles: [\".shade,.shade-gradient{position:absolute;top:0;bottom:0;left:0;right:0}.shade-container{position:relative;height:100%;margin:0 3px}.shade-pointer{position:absolute}.shade-slider{width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px #0009;background:#fff;margin-top:1px;transform:translate(-2px)}\\n\"] }]\n }], propDecorators: { hsl: [{\n type: Input\n }], rgb: [{\n type: Input\n }], pointer: [{\n type: Input\n }], shadow: [{\n type: Input\n }], radius: [{\n type: Input\n }], onChange: [{\n type: Output\n }] } });\nclass ShadeModule {\n}\nShadeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nShadeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeModule, declarations: [ShadeComponent], imports: [CommonModule, CoordinatesModule], exports: [ShadeComponent] });\nShadeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeModule, imports: [CommonModule, CoordinatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.2\", ngImport: i0, type: ShadeModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [ShadeComponent],\n exports: [ShadeComponent],\n imports: [CommonModule, CoordinatesModule],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AlphaComponent, AlphaModule, CheckboardComponent, CheckboardModule, ColorMode, ColorWrap, ColorWrapModule, CoordinatesDirective, CoordinatesModule, EditableInputComponent, EditableInputModule, HueComponent, HueModule, RaisedComponent, RaisedModule, SaturationComponent, SaturationModule, ShadeComponent, ShadeModule, SwatchComponent, SwatchModule, getCheckerboard, getContrastingColor, isValidHex, render, simpleCheckForValidColor, toState };\n"],"x_google_ignoreList":[19,20,21,22,23,24,25,34,115,116,117,118,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279]}